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 国际化(i18n)是Java平台提供的一种强大的功能,使得软件能够适应全球不同地区的语言和文化环境。在Java中,国际化的实现主要依赖于`java.text`和`java.util`包中的类,如`ResourceBundle`、`DateFormat`、`...
Java国际化的概念主要涉及到软件在全球范围内适应不同语言和文化环境的能力。在Java中,这个过程称为i18n(国际化)和l10n(本地化)。i18n是"internationalization"的首字母缩写,而l10n是"localization"的首字母...
国际化(internationalization),又称为i18n(因为这个单词从i到n有18个英文字母,因此命名)。对于某些应用系统而言,它需要发布到不同的国家地区,因此需要特殊的做法来支持,也即是国际化。通过国际化的方式,...
这个"JAVA-Internationalization-tutorial.rar"压缩包包含了一个关于Java国际化的教程和源代码,是学习和理解这一主题的好资源。 在Java中,国际化涉及以下几个核心概念: 1. **资源包(Resource Bundle)**:这是...
Flutter国际化示例 在此示例中,Flutter可以通过使用json文件进行国际化。 这是Flutter的基本国际化示例。 教程中此示例项目。 预习 入门 您可以按照以下说明启动示例国际化应用程序并将其安装到设备上。 先决条件 ...
internationalization-mvc4, [Obsolete] 国际化的MVC4模板( 请参见 code52/aspnet国际化) Internationalization.MVC4的目标:提供一套包,帮助开发人员开始使用 ASP.NET MVC构建全球化和本地化的应用程序。...
在C# WinForm应用开发中,国际化(Internationalization)是一个重要的功能,允许应用程序适应不同语言和文化环境。本文将深入探讨如何实现C# WinForm应用的国际化,包括菜单国际化和资源国际化。 首先,我们需要...
为应对这些挑战,企业需要不断进行技术创新和产品升级,提高生产效率和产品质量,同时也需要加强环保措施和国际化发展。 5. Technology Innovation 技术创新是不锈钢餐具行业的关键因素。企业需要不断进行技术创新...
本教程将深入探讨Swift中实现国际化(Internationalization)的机制,包括资源文件的设置、代码的编写以及如何在App内部实现语言的便捷切换。 一、Swift中的国际化基础 1. InfoPlist.strings:每个支持的语言都...
国际化插件 i18n vue国际化 internationalization vue vue.js Internationalization plugin Vue internationalization
在IT行业中,"国际化"(Internationalization)是一个重要的概念,特别是在开发支持多语言的应用程序时。这个过程涉及设计和构建应用程序的方式,使得它可以适应不同地区的文化、语言和格式要求。"file input 按钮...
在IT行业中,国际化(i18n,Internationalization)是一个重要的概念,特别是在软件开发领域,它涉及使软件能够适应不同语言和地区的需求。Java作为一种广泛使用的编程语言,提供了强大的国际化支持。本篇将深入探讨...
JINTO,全称可能是“Java Internationalization”,是Eclipse中一个用于国际化支持的插件,可能包含以下功能: 1. **资源文件管理**:JINTO可能提供了一个图形界面,让开发者可以方便地创建、编辑和管理资源文件,...
JavaScript(简称JS)国际化(i18n,国际化英文单词“internationalization”的缩写)是为网站或应用程序提供多语言支持的过程。这个过程涉及到将文本、日期、数字和其他文化特定的元素从源语言(通常是英语)转换成...
在软件开发过程中,为了满足不同地域和语言环境下的用户需求,软件国际化(Internationalization, 简称 I18N)和本地化(Localization, 简称 L10N)成为了一项重要的技术挑战。Struts 1.2 框架作为 Java Web 开发的...
### 国际化软件概论:软件国际化 #### 一、引言 在全球化的背景下,随着信息技术的迅猛发展,软件产业面临着前所未有的挑战与机遇。软件不仅需要满足本地市场需求,还要适应不同国家和地区的需求,这就催生了软件...
1. **国际化(Internationalization)**:通常缩写为i18n(取首字母i和末尾字母n之间有18个字符),指的是设计和开发能在不同的语言和文化环境中运行的应用程序的过程。 2. **本地化(Localization)**:通常缩写为l10n...
iOS国际化,也称为APP国际化,是指为iOS应用开发过程中实现多语言支持的过程,使得应用程序能够适应不同国家和地区的用户需求。这一过程涉及到资源文件、代码、用户界面等多方面的调整和优化,确保无论用户身处何处...
Spring MVC的国际化(Internationalization)指的是将应用根据不同地域、语言习惯以及文化差异进行本地化的过程。这涉及了软件应用对多语言的支持,以便不同区域的用户能够以自己的母语使用软件。Spring MVC提供了...
10. **Internationalization国际化**:Struts支持多语言环境,通过资源包(properties文件)实现不同语言的文本资源。 11. **Struts与Spring集成**:在实际开发中,Struts常与Spring框架结合使用,Spring可以提供...