JAVA的国际化机制(一 介绍)

2008-02-23 09:34:51来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

本文是翻译SUN的官方网站的教程Internationalization Tutorial

一 介绍

国际化(Internationalization是设计一个适用于多种语言和地区的应用程序的过程。适用于多种语言和地区的含义是当使用不同语言及处于不同的地区的用户在使用这个应用程序时,应用程序必须使用他们能看懂的语言和符合他们文化习惯来显示信息。国际化有时候被简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间。

一个国际化的程序通常具有以下特征:

  • 有一个附加的本地化数据(localized data)及拥有在全世界各个地区执行的能力。
  • 文本的元素,比如状态信息或GUI截面的lables,不是直接写(hardcoded)在程序中,而是被存储在本地化的数据中,并且能被程序正确的动态的使用。
  • 支持新的语言时,不需要修改程序,不需要重新编译。
  • 文化差异的数据,比如日期和货币,必须根据拥护的语言和习惯显示不同的格式。
  • 可以被迅速的本地化。

本地化(Localization)是指通过增加本地描述的构件(locale-specific components )和文字翻译工作来使应用程序适应于不同的语言和地区的过程。本地化有时候被简称为l10n,应为有10个字母在本地化的英文单词的字母l和n之间。通常本地化最耗时的工作应该是文字翻译。本地化工作者们要根据地区的具体需求来为日期、数字和通货等数据建立新的格式。其他类型的数据,象声音,图象等,也需要根据具体需要来决定是否本地化。

下面通过一个简单的例子来说明如何给一个程序提供国际化的特性。这个例子在不同的语言环境下显示不同的文本信息。

一个简单的例子

先看下面的一段代码:
public class NotI18N {
static public void main(String[] args) {
System.out.println("Hello.");
System.out.println("How are you?");
System.out.println("Goodbye.");
}
}
如果你决定在上面的程序中给德国和法国的不同用户显示同样的信息。但是你的程序员却不是个语言专家,他不懂德语和法语。所以你需要翻译人员把它翻译成德语和法语,但是你的翻译人员不懂程序,所以你可以把这些信息存到一个文本或其他格式的文件中供翻译人员使用。那么,程序必须能显示不同语言的信息,并且你并不知道你希望为这个程序提供的下一个语言支持是什么,或许是日语或许是别的什么语言。
下面的代码是一个国际化的代码的例子:
import Java.util.*;

public class I18NSample {
static public void main(String[] args) {
String language;
String country;

if (args.length != 2) {
language = new String("en");
country = new String("US");
} else {
language = new String(args[0]);
country = new String(args[1]);
}

Locale currentLocale;
ResourceBundle messages;

currentLocale = new Locale(language, country);
messages = ResourceBundle.getBundle("MessagesBundle",
currentLocale);
System.out.println(messages.getString("greetings"));
System.out.println(messages.getString("inquiry"));
System.out.println(messages.getString("farewell"));
}
}
请注意:在上面的代码中,信息并没有被hardcoded在代码中!
如果想运行上面的代码,请下载下面的文件:
1、I18NSample.java
2、MessageBundle.properties
3、MessageBundle_de_DE.properties
4、MessageBundle_en_US.properties
5、MessageBundle_fr_FR.properties
下面看看这个程序的运行结果:
显示法语信息:
java I18NSample fr FR
Bonjour.
Comment allez-vous?
Au revoir.
显示英语信息:
java I18NSample en US
Hello.
How are you?
Goodbye.

从上面的代码我们可以看出,在实现了国际化的代码中,并没有将需要显示的信息直接hardcode在代码中,而是存在一个文件中供程序使用。程序根据不同的语言和国家(Local)来取得文件中不同信息显示。我们试着按一下的步骤一步一步分析这段代码如何实现了国际化:

1、建立properties文件----本地化数据

properties文件用来存储程序和环境相关的信息。必须以.properties的后缀结尾,properties文件是纯文本格式的。在上面的例子中,一共有4个properties文件。分别定义了不同语言和国家的打招呼、再见和问候时使用的语言。properties文件使用名值对(key-value)的形式,如下所示:
greetings = Bonjour.
farewell = Au revoir.
inquiry = Comment allez-vous?
properties文件的名字很重要,它的形式是basename_LL_CC.properties.LL表示语言代码,CC表示国家代码。语言代码和国家代码是Local类初始化的参数,basename是创建ResourceBundle对象的参数。

2、创建Local对象----不同语言和国家的标识

java.util.Local是JDK提供的标准API。这个类用来标识国家和语言。
我们可以创建一个local对象:
aLocale = new Locale("en","US");

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:初学J2ME的一点经验

下一篇:Java2实用教程(第2版)(清华版)