[Java] GWT i18n 国际化

博客首页 » Java GWT i18n 国际化

发布于 09 Dec 2014 05:33
标签 blog
GWT i18n 国际化

http://blog.sina.com.cn/s/blog_9dcef5d701015ojh.html

GWT国际化说明 (2013-01-10 20:23:40)转载▼
标签: gwt java 国际化 杂谈 分类: 技术总结
国际化,英文全称Internationalization ,缩写为I18N(i+18字母+n)。使用国际化框架可以让应用程序支持不同国家的语言。GWT提供了完整的和可伸缩的国际化支持工具。原来我们实现国际化的标准Java方法是通过资源绑定和配置文件来实现,现在GWT也是这样实现的。本文结合项目需求,对GWT国际化进行简要说明。
国际化步骤
在GWT中,实现国际化需要以下四个步骤:
1、在应用程序的模块配置文件中集成GWT的i18n模块
2、定义资源属性文件,在其中包含键值对内容
3、定义Java接口,其方法全部返回String,并且方法名要与资源属性文件中的键相同
4、使用GWT.create()创建上述接口的一个实例,并通过调用与资源属性文件中的键对应的方法从资源包中提取相应的值
配置GWT模块文件
按照GWT国际化的步骤一,首先要在配置文件中集成GWT的i18n模块。打开项目的gwt.xml文件,在module标签中加入以下内容:
<!— 集成i18n模块 —>
<inherits name="com.google.gwt.i18n.I18N"/>

<!— 项目需要的语言种类,用逗号分开,也可分多个>
<!
extend-property给出—>
<extend-property name="locale" values="en,zh_CN,fr"/>

<!— 设置默认语言,不设置则为default —>
<set-property-fallback name="locale" value="zh_CN"/>

<!— 设置gwt搜索关键字的顺序 >
<!
默认为queryparam,cookie,meta,useragent >
<!
本项目不需要queryparam—>
<set-configuration-property name="locale.searchorder"
value="cookie,meta,useragent"/>

<!— 设置cookie名称—>
<set-configuration-property name="locale.cookie" value="my_locale"/>

<!— 开启useragent支持—>
<set-configuration-property name="locale.useragent" value="Y"/>

<!— 开启usemeta支持—>
<set-configuration-property name="locale.usemeta" value="Y"/>
定义资源文件
按照GWT国际化的步骤二,建立字符串资源的属性文件,避免代码中出现字符串硬编码。在项目client包中建属性文件,具体见范例程序的AppMessages.properties文件,若让支持其他国家语言,建后缀名有该语言后缀码的文件。例如AppMessages_zh_CN.properties,说明支持简体中文。使用ISO语言和国家代码后缀,如:“_fr”指法语,“_fr_CA”指加拿大法语。国家代码必须大写。具体国家代码见附录。下面截取属性文件的部分内容做简要说明。
I18NDemo/src/com/chianyu/i18ndemo/client/AppMessages.properties该文件作为默认的属性文件,为必需文件,当不指定语言且模块定义文件中<set-property-fallback name="locale" value="default"/>时候,使用它。
nameLable_Text = Account:
pwdLable_Text = Password:
I18NDemo/src/com/chianyu/i18ndemo/client/AppMessages_zh_CN.properties该文件是简体中文的资源文件。
nameLable_Text=帐号:
pwdLable_Text=密码:
定义JAVA接口
按照GWT国际化的步骤三,定义JAVA接口,若是用Messages接口,则所有方法都返回String类型,若是Constants,还可以支持其他数值类型,但Messages支持有占位符的字符串,更加常用,下面以Messages为例说明。该接口类文件需要跟属性文件在同一个包client内,且类名与资源文件名相同。
I18NDemo/src/com/chianyu/i18ndemo/client/AppMessages.java
public interface AppMessages extends com.google.gwt.i18n.client.Messages {
String nameLable_Text();
String pwdLable_Text();
}
注意:不管你的应用程序要支持多少种语言,这里只能有一个存取器类。
创建接口实例并使用
下一步就是在代码中用引用新消息来取代静态字符串。使用GWT.create来得到一个对存取器类的引用后,调用新方法来检索消息文本。比如在我们的示例代码中要使用刚建立的资源I18NDemo/src/com/chianyu/i18ndemo/client/I18NDemo.java
public class I18NDemo implements EntryPoint {

// 创建资源对象,用于获取字符串。
private static final AppMessages APPMESSAGES = (AppMessages) GWT.create(AppMessages.class);
public void onModuleLoad() {
final Label nameLable = new Label(APPMESSAGES.nameLable_Text());
final Label pwdLable = new Label(APPMESSAGES.pwdLable_Text());
}
}
补充说明
项目中可以按类型或页面对字符串资源文件进行划分,比如有两个页面page1,page2。他们里面都要用到字符串,可以将他们用到的字符串放到不同的属性文件中,分别建立两个接口类与之对应。这样不至于使得属性文件过于臃肿,不易于查找资源。
浏览器测试
针对模块定义文件中的配置:<set-configuration-property name="locale.searchorder"
value="cookie,meta,useragent"/>,没有queryparam情况进行各种浏览器测试。
情况一:先用ajax获取accept-language.
浏览器名
是否启用cookie
浏览器语言
首选语言
预计语言
实际语言
IE

中文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文
英文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文

中文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文
英文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文
FireFox

中文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文
英文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文

中文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文
英文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文
Chrome

中文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文
英文
中文
中文(ajax+cookie)
中文
英文
英文(ajax+cookie)
英文

中文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文
英文
中文
中文(ajax+meta)
中文
英文
英文(ajax+meta)
英文

情况二:不用ajax获取accept-language.相当于只用navigator.browserLanguage(ie)或navigator.language(firefox and others)
浏览器名
浏览器语言
首选语言
预计语言
实际语言
IE
中文
中文
中文
中文
英文
中文
中文
英文
中文
英文
英文
英文
英文
英文
FireFox
中文
中文
中文
中文
英文
中文
中文
英文
中文
英文
中文
英文
英文
英文
Chrome
中文
中文
中文
中文
英文
中文
中文
英文
中文
英文
英文
英文
英文
英文

经测试发现,英文版本的firefox支持在改了首选语言的情况下,修改navigator.language属性。本人使用的是17.0.1英文版的firefox测试。
参考文档
1.GWT国际化官方文档
https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n?hl=en
2.使用accept-language+cookie自动选择语言跳转页面
http://cclinux.blog.51cto.com/1215045/815004
3.各浏览器对browserLanguage支持情况
http://www.w3school.com.cn/htmldom/dom_obj_navigator.asp


本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用,仅有一个特殊要求,请用链接方式注明文章引用出处及作者。请协助维护作者合法权益。


系列文章

文章列表

  • Java GWT i18n 国际化

这篇文章对你有帮助吗,投个票吧?

rating: 0+x

留下你的评论

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License