Как реализовать i18n в приложении GWT?

У меня проблема с интернационализацией. Я пытаюсь реализовать поддержку двух языков в своем приложении 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 и почему мой пример не работает. Любые предложения будут ценны.

6
задан François Esthète 11 May 2012 в 11:54
поделиться