Локализация приложения GWT, созданного с помощью UiBinder, не работает в размещенном режиме

#java #gwt #localization #intellij-idea #uibinder

#java #gwt #локализация #intellij-idea #uibinder

Вопрос:

Работает ли локализация приложения GWT, созданного с помощью UiBinder, в размещенном режиме? Это не для меня. Вот что я сделал:

1) Добавлены свойства локали в XML модуля GWT

 < inherits name="com.google.gwt.i18n.I18N" / >
< extend-property name='locale' values='en'/>
< extend-property name='locale' values='ru'/>
< set-property-fallback name="locale" value="en"/>
  

2) Помеченные сообщения в *.ui.xml файлы с, как

 < ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
     ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
     ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
     ui:generateLocales="default"
     xmlns:g="urn:import:com.google.gwt.user.client.ui">

  < g:HTMLPanel>
     < ui:msg description="Hello Description">Hello!< /ui:msg>  
  < /g:HTMLPanel>
< /ui:UiBinder>
  

3) Добавлена опция компилятора GWT -extra

4) Скомпилировал проект. Найдены файлы с суффиксом .GenMessages.properties в дополнительной папке.

5) Локализованные сгенерированные сообщения. Скопировал каждое.Файл GenMessages.properties в той же папке, что и соответствующий .ui.xml файл. Переименовал его с использованием моего языка в имени файла, например .GenMessages_en.properties .GenMessages_ru.properties

6) Повторно скомпилировал проект.

7) Запустил приложение и изменил переменную locale в URL для проверки, напримерhttp://127.0.0.1:8888/TestLocale.html?gwt.codesvr=127.0.0.1:9997amp;locale=ru

Он по-прежнему показывает мне английскую версию ресурсов по умолчанию.

Чего мне не хватает? Как я могу это отладить? В журналах или выходных данных ничего нет.

Я нахожусь под Windows, используя IntelliJ IDEA и Chrome в качестве браузера.

Спасибо!

Обновление: Это не сработало, потому что у меня было дополнительное < set-property name="locale" value="en"/ > в конфигурации модуля : (Возможно, это было переопределение значений из extend-property тега.

Я написал пошаговое описание, как заставить это работать, здесь на случай, если кому-то интересно.

Ответ №1:

По умолчанию GWT генерирует файлы свойств, которые начинаются с имени пакета. Вы удалили package из имени файла?

Одна вещь, которая лучше всего работала для меня в моих проектах GWT, — это использование LocalizableResource_.properties в качестве имен файлов и сохранение их всех в com/google/gwt/i18n/client пакете. Ознакомьтесь с документацией GWT по локализации с помощью UiBinder

Ответ №2:

Файл .properties не обязательно должен находиться в клиентском пакете. Главное — убедиться, что где бы вы ни решили сохранить свой файл свойств, убедитесь, что пакет, в котором он находится, также находится в пути к вашему модулю. В своих проектах я обычно помещаю файлы свойств в пакет res:

 com/project/gwt
com/project/gwt/client
com/project/gwt/res
com/project/gwt/res/strings
  

Затем основной интерфейс вместе со всеми отдельными файлами свойств для каждого языка переходит в strings. Это работает нормально, пока ваш module.xml файл содержит строку

 <source path="res" />