У меня проблема с интернационализацией. Я пытаюсь реализовать поддержку двух языков в своем приложении GWT. К сожалению, я не нашел полного примера, как это сделать с помощью UiBinder. Вот что я сделал:Как реализовать i18n в приложении GWT?
Мой модуль I18nexample.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='i18nexample'>
<inherits name="com.google.gwt.user.User" />
<inherits name='com.google.gwt.user.theme.clean.Clean' />
<inherits name="com.google.gwt.i18n.I18N" />
<inherits name="com.google.gwt.i18n.CldrLocales" />
<entry-point class='com.myexample.i18nexample.client.ExampleI18N' />
<servlet path="/start" class="com.myexample.i18nexample.server.StartServiceImpl" />
<extend-property name="locale" values="en, fr" />
<set-property-fallback name="locale" value="en" />
</module>
Мой интерфейс Message.java:
package com.myexample.i18nexample.client;
import com.google.gwt.i18n.client.Constants;
public interface Message extends Constants {
String greeting();
}
тот же пакет com.myexample.i18nexample.client
имеет три свойства файла :
Message.properti эс:
greeting = hello
Message_en.properties:
greeting = hello
Message_fr.properties:
greeting = bonjour
Мой UiBinder файл Greeting.ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default" >
<ui:with type="com.myexample.i18nexample.client.Message" field="string" />
<g:HTMLPanel>
<ui:msg key="greeting" description="greeting">Default greeting</ui:msg>
</g:HTMLPanel>
</ui:UiBinder>
При запуске приложения, я всегда получаю выход в браузере:
Default greeting
Почему? Что я делаю не так?
Я попытался запустить приложение из разных URL:
http://127.0.0.1:8888/i18nexample.html?gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=en&gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
Результат не меняется. Хотя я ожидал в последнем случае сообщение bonjour
.
Если, например, я использую g:Buttton
вместо сообщения ui:msg
:
<g:HTMLPanel>
<g:Button text="{string.greeting}" />
</g:HTMLPanel>
Тогда я получаю в результате кнопки с текстом "hello"
И если я ввожу URL:
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
Текст на кнопке изменяется на "bonjour"
. Здесь все работает так, как ожидалось. Но почему интернационализация не работает в моем первом случае?
И есть разница между следующими ли:
<ui:msg description="greeting">Default greeting</ui:msg>
<ui:msg description="greeting">hello</ui:msg>
<ui:msg description="greeting"></ui:msg>
Должны ли быть разные результаты в этих случаях? Как правильно писать?
Пожалуйста, объясните мне принципы интернационализации в GWT и почему мой пример не работает. Любые предложения были бы весьма признательны.
Простите меня, '.properties' файлы, конечно, на самом деле правильно названы. Это просто опечатка. Спасибо за ваш ответ. Но, к сожалению, это не добавляет ясности для меня и моей проблемы. Все работает правильно без использования UiBinder. Но я хочу понять, как правильно интернационализировать приложение с помощью UiBinder. –
Не могли бы вы написать то, что мне нужно для исправления или предоставить ссылку на полный заполненный образец? Я буду очень признателен! –
См. Https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinderI18n. Если вы хотите использовать 'ui: msg', вы должны предоставить файлы свойств в том же пакете, названный так же, как интерфейс UiBinder с суффиксом 'ImplGenMessages'. Кроме того, вы можете использовать 'com/google/gwt/i18n/client/LocalizedResource_ .properties' и/или затем централизовать все ваши сообщения. И снова используйте '-gen' и посмотрите на сгенерированный код. –