Internationalization 国际化 (I18N)
国际化(简写为i18n)是一个附加框架的过程,它让你的应用程序支持不同国家的语言。
Localization 本地化(L10N)
本地化(简写为l10n)为当使用框架定制应用程序的每一种语言时。
GWT提供了完整的和可伸缩的国际化支持工具。
还有拼写检查和语法错误检查等。
实现国际化的标准Java方法是通过资源绑定和配置文件来实现。GWT也是如此。
一、Constants,Messages and Dictionary
GWT为本地化文本提供了4种选择。
1)常量 Constants
这种类型只能用于文本中且不能替换。例如域标签或菜单名,还有数字、布尔值和映射等。
2)ConstantsWithLookup
者是同样的常量接口,且你可以用动态字符串来查找它。
3)Message
这是通常的字符串,可以包括占位符。
4)Dictionary
这是最灵活的,在所有选择中最低效的,字典接口支持动态指定现场(locale)。
前三者更高效一些,因为能提前决定现场,再编译到应用程序。GWT编译器为每一个现场产生一个不同的.cache.html文件,并在运行时加载适合的版本。
消息接口对大多数应用程序来说是最好的选择,下面将显示它的用法。
它们的API是相似的。在应用程序中使用多个风格是可能的。
二、建立属性配置文件(Property File)
下面用一个简单的程序开始,使用消息代替硬编码的(hard-coded)字符串来转换它,原始程序如下:
I18NProject/src/com/xyz/client/I18NOrig.java
--------------------------------------------------
public class I18NOrig implements EntryPoint{
privae Button m_clickMeButton;
public void onModuleLoad(){
RootPanel rootPanel=RootPanel.get();
{
m_clickMeButton=new Button();
rootPanel.add(m_clickMeButton);
m_clickMeButton.setText("Click me!");
m_clickMeButton.addClickListener(new ClickListener(){
public void onClick(Widget sender){
Window.alert("Hello, GWT World!");
}
});
}
}(来源 www.iocblog.net)
}
--------------------------------------------------
第一步是查找所有的字符串并复制它们到属性配置文件。它使用标准的name = value 格式。注释用“#”开始,用于代替参数的占位符用{0},{1}等等来指定。下面是用于转换程序的属性配置文件:
I18NProject/src/com/xyz/client/AppMessages.properties
--------------------------------------------------
m_clickMeButton_text=Click me!
m_helloAlert_text=Hello,{0} World!
--------------------------------------------------
在客户端,这个文件是必须的。这是缺省的语言文件,英语或其它语言。要提供翻译成其它语言,使用ISO语言和国家代码后缀,如:“_fr”指法语,“_fr_CA”指加拿大法语。
I18NProject/src/com/xyz/client/AppMessages_fr.properties
--------------------------------------------------
m_clickMeButton_text=Cliquez-moi!
m_helloAlert_text=Bonjour, Monde de {0}!
三、创建存取器类(Accessor Class)
如果你熟悉标准Java消息,你就知道它们是靠字符串来访问的。
要得到已翻译的消息,调用方法getString("m_clickMeButton_text")。但这种方法有两个问题,一是消息键要和消息值一样长或比它长;二是如果消息中有错误,则只能在运行时才能发现。
GWT改进了消息工作方式。它通过Java方法来引用消息,而不是靠字符串。这需要建立一个新的Java类,对每一个消息有一个相一致的方法。
I18NProject/src/com/xyz/client/AppMessages.java
--------------------------------------------------
package com.xyz.client;
import com.google.gwt.i18n.client.Messages;
public interface AppMessages extends Messages{
String m_clickMeButton_text();
String m_helloAlert_text(String toolkit);
}
--------------------------------------------------
注意:不管你的应用程序要支持多少种语言,这里只能有一个存取器类。
四、引用消息
下一步就是在代码中用引用新消息来取代静态字符串。使用GWT.create来得到一个对存取器类的引用后,调用新方法来检索消息文本。例:
I18NProject/src/com/xyz/client/I18N.java
--------------------------------------------------
public class I18N implements EntryPoint{
private static final AppMessages MESSAGES=(AppMessages) Gwt.create(AppMessages.class);
private Button m_clickMeButton;
public void onModuleLoad(){
RootPanel rootpanel=RootPanel.get();
{
m_clickMeButton=new Button();
rootpanel.add(m_clickMeButton);
m_clickMeButton.setText(MESSAGES.m_clickMeButton_text());
m_clickMeButton.addClickListener(new ClickListener(){
public void onClick(Widget sender){
Window.alert(MESSAGES.m_helloAlert_text("GWT"));
}
});
}
}
}
--------------------------------------------------
五、改动模块
模块文件要完成转变,有两个小改动是必须的。首先,需要告诉GWT从I18N模块继承的功能性;其次,需要定义要翻译成的哪种语言。例:
I18NProject/src/com/xyz/I18N.gwt.xml
--------------------------------------------------
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="com.xyz.client.I18N"/>
<extend-property name="locale" value="fr,de"/>
</module>
--------------------------------------------------
六、运行例子
首先在主机模式下运行例子。
要尝试法语版本,在浏览器中编辑URL并增加后缀?locale=fr。按回车键刷新页面,将显示用法语代替英语。点击按钮,也显示法语文本。
在HTML文件中选择现场的另一种方法是嵌入它作为元标记(meta tag)。如:
<meta name='gwt:property' content='locale=ja_JP'>
在服务器端动态产生HTML可能更方便,就像JSP文件一样。
分享到:
相关推荐
Java Internationalization国际化教程
国际化(internationalization),又称为i18n(因为这个单词从i到n有18个英文字母,因此命名)。对于某些应用系统而言,它需要发布到不同的国家地区,因此需要特殊的做法来支持,也即是国际化。通过国际化的方式,...
internationalization-mvc4, [Obsolete] 国际化的MVC4模板( 请参见 code52/aspnet国际化) Internationalization.MVC4的目标:提供一套包,帮助开发人员开始使用 ASP.NET MVC构建全球化和本地化的应用程序。...
国际化插件 i18n vue国际化 internationalization vue vue.js Internationalization plugin Vue internationalization
Java 国际化基础.doc
Flutter国际化示例 在此示例中,Flutter可以通过使用json文件进行国际化。 这是Flutter的基本国际化示例。 教程中此示例项目。 预习 入门 您可以按照以下说明启动示例国际化应用程序并将其安装到设备上。 先决条件 ...
java国际化教程及源代码,可以看一下。
12. Internationalization国际化支持 - 96 - 仅使用 UTF-8! - 96 - 国际化你的信息 - 96 - 通过应用程序定义支持的语言 - 96 - 依照你的区域定义日期格式 - 97 - 找回区域信息 - 97 - Message arguments - 97 - 模板...
12. Internationalization国际化支持 - 96 - 仅使用 UTF-8! - 96 - 国际化你的信息 - 96 - 通过应用程序定义支持的语言 - 96 - 依照你的区域定义日期格式 - 97 - 找回区域信息 - 97 - Message arguments - 97 - 模板...
3.Resources and Internationalization(资源和国际化) 4.本地化你的Android 应用程序 5.在Android 中轻松实现横竖屏的布局 6.如何获取当前Locale ,设定Locale 7. 如何在代码中强行指定自己App 的locale 8.Android...
MEAN.JS是一个全栈JavaScript开源解决方案,它为基于 , , 和的应用程序提供了坚实的起点。 这个想法是通过连接那些框架来解决常见问题,建立一个强大的框架来支持日常开发需求,并帮助开发人员在使用流行...
1. 首先建一个MVC国际化项目Internationalization。 2. 选中项目右键-->“添加”-->“添加ASP.NET文件夹”-->“App_GlobalResources”。 3. 选中“App_GlobalResources”右键添加一个资源文件Language.resx。在其中...
国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其...
代码审计工具Findbugs是一个应用比较广泛的开源代码审计工具,如果开发...Internationalization 国际化问题 Performance 性能问题 Security 安全性问题 Multithreaded currectness 线程问题 Experrimental 实验性问题
经济学、英语人才适用。
国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),说起Qt,就不能避开国际化,国际化步骤: 如果Qt程序中有QObject::tr()包裹的字符串,对这个应用程序的翻译主要包含三步: ①....
Internationalization公共类的提取继承System.Web.UI.Page类由其他页面类继承
背景国际化是指让产品或是程序在无需做出改变的情况下,就能够适应不同语言和地区的需要, internationalization 单词太长 ,又被简称为 i18n
Spring MVC internationalization annotation example 这个是annotation 方式的国际化 访问http://localhost:8080/login.htm