我有国际化的问题。我正在尝试在我的 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
有三个属性文件:
消息属性:
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
。
例如,如果我使用 ag:Buttton
而不是消息ui:msg
:
<g:HTMLPanel>
<g:Button text="{string.greeting}" />
</g:HTMLPanel>
然后我得到了带有文本的按钮的结果"hello"
如果我输入网址:
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 中的国际化原则以及为什么我的示例不起作用。任何建议将不胜感激。