Я использую GWT 2.4 с платформой gwt -0.7 и gin 1.5.0.
Я создал библиотеку для динамического (живого )перевода моего приложения GWT. Таким образом, каждый виджет получит уведомление, когда LocaleChangeEvent
сработает, а затем попросит мой TranslationDictionary
отобразить новую строку.
Виджеты на самом деле выглядят так:
public class LocaleAwareLabel extends Label implements LocaleChangeEventHandler {
TranslationDictionary dictionary;
String translationToken;
public LocaleAwareLabel(TranslationDictionary dictionary, EventBus eventBus, String translationToken) {
this.dictionary = dictionary;
this.translationToken = translationToken;
eventBus.addHandler(LocaleChangeEvent.TYPE, this);
getCurrentTranslationFromDictionary();
}
public void getCurrentTranslationFromDictionary() {
this.setText(dictionary.getTranslation(translationToken));
}
@Override
public void onLocaleChange(LocaleChangeEvent event) {
getCurrentTranslationFromDictionary();
}
}
Как видите, :я не могу легко использовать этот виджет с UiBinder, в данный момент я вставляю EventBus
и TranslationDictionary
в свой View
и использую @UiField(provided=true)
вот так:
@UiField(provided=true)
LocaleAwareLabel myLabel;
@Inject
public MyView(TranslationDictionary dictionary, EventBus eventBus) {
widget = uiBinder.createAndBindUi(this);
myLabel = new LocaleAwareLabel(dictionary, eventBus, "someTranslationToken");
}
Что бы я хотел:Используя мои виджеты без @UiField(provided=true)
,так что я могу просто поместить их в ui.xml
вот так:
<custom:LocaleAwareLabel ui:field="myLabel" translationToken="someTranslationToken" />
Я знаю, что могу установить translationToken
через UiBinder, используя:
public void setTranslationToken(String translationToken) {
this.translationToken = translationToken;
}
Но тогда у меня все еще есть проблема, что я не могу использовать конструктор с нулевым -args из-за EventBus
и TranslationDictionary
. Кроме того, я не могу вызвать getCurrentTranslationFromDictionary()
внутри конструктора, потому что значение translationToken
, конечно же, устанавливается после конструктора.
Было бы неплохо, если бы кто-то мог предоставить решение, возможно, с примерами кода.
И П.С. Я полный инъекционный -нуб, но, насколько я понимаю, джин может как-то решить мою проблему. Но я не знаю как.
Благодарю вас!