У меня проблема с интернационализацией. Я пытаюсь реализовать поддержку двух языков в своем приложении GWT. К сожалению, я так и не нашел полного примера, как это сделать с помощью UiBinder. Вот что я сделал:
Мой модуль 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.properties:
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
Почему? Что я делаю неправильно?
Я попытался запустить приложение с другого адреса:
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>
, то я получаю в результате кнопку с текстом " привет"
И если я ввожу URL:
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
Текст на кнопке изменится на "Добрый день"
. Здесь все работает так, как ожидалось.Но почему интернационализация не работает в моем первом случае?
И есть ли разница между следующим:
<ui:msg description="greeting">Default greeting</ui:msg>
<ui:msg description="greeting">hello</ui:msg>
<ui:msg description="greeting"></ui:msg>
Должны ли быть разные результаты в этих случаях? Как правильно писать?
Пожалуйста, объясните мне принципы интернационализации в GWT и почему мой пример не работает. Любые предложения будут ценны.