这是我的 GWT Dictionary 版本(真正的动态语言切换):
public native void setTranslation(String locale, JavaScriptObject translationData) /*-{
$wnd[locale] = translationData;
}-*/
@Inject
TranslationProvider translationProvider;
public void onResponseReceived(Request request, Response response) {
String newLocale = "en";
JavaScriptObject translationData = JsonUtils.unsafeEval(response);
setTranslation(newLocale, translationData);
translationProvider.setLocale(newLocale);
LocaleChangeEvent.fire(eventBus);
}
每个显示可翻译文本的小部件都注册LocaleChangeEvent
并实现LocaleChangeEventHandler
:
public interface LocaleChangeEventHandler extends EventHandler {
void onLocaleChange(LocaleChangeEvent event);
}
在onLocaleChange
方法中,它只是get(...)
从TranslationProvider
类中调用方法来接收它的字符串:
public class LocaleAwareLabel extends Label implements LocaleChangeEventHandler {
TranslationProvider translationProvider;
@Inject
public LocaleAwareLabel(TranslationProvider translationProvider, EventBus eventBus) {
this.translationProvider = translationProvider;
eventBus.addHandler(LocaleChangeEvent.TYPE, this);
get();
}
public void get() {
this.setText(translationProvider.get("myDictionaryKey"));
}
@Override
public void onLocaleChange(LocaleChangeEvent event) {
get();
}
}
这里是TranslationProvider
班级:
@Singleton
public class TranslationProvider {
Dictionary dictionary;
public void setActiveLocale(String locale) {
dictionary = Dictionary.getDictionary(locale);
}
public String get(String key) {
dictionary.get(key);
}
}
就是这样!