一介绍
国际化(Internationalization)是
设计一个适用于多种语言和地区的应用
程序的过程。适用于多种语言和地区的含义是当使用不同语言及处于不同的地区的用户在使用这个应用程序时,应用程序必须使用他们能看懂的语言和符合他们文化习惯来显示信息。国际化有时候被简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间。
一个国际化的程序通常具有以下特征:
有一个附加的本地化数据(localizeddata)及拥有在全世界各个地区执行的能力。
文本的元素,比如状态信息或GUI截面的lables,不是直接写(hardcoded)在程序中,而是被存储在本地化的数据中,并且能被程序正确的动态的使用。
支持新的语言时,不需要修改程序,不需要重新编译。
文化差异的数据,比如日期和货币,必须根据拥护的语言和习惯显示不同的格式。
可以被迅速的本地化。
本地化(Localization)是指通过增加本地描述的构件(locale-specificcomponents)和文字翻译
工作来使应用程序适应于不同的语言和地区的过程。本地化有时候被简称为l10n,应为有10个字母在本地化的英文单词的字母l和n之间。通常本地化最耗时的工作应该是文字翻译。本地化工作者们要根据地区的具体需求来为日期、数字和通货等数据建立新的格式。其他类型的数据,象声音,图象等,也需要根据具体需要来决定是否本地化。
下面通过一个简单的例子来说明如何给一个程序提供国际化的特性。这个例子在不同的语言环境下显示不同的文本信息。
一个简单的例子
先看下面的一段代码:
publicclassNotI18N{
staticpublicvoidmain(String[]args){
System.out.println("Hello.");
System.out.println("Howareyou?");
System.out.println("Goodbye.");
}
}
如果你决定在上面的程序中给德国和法国的不同用户显示同样的信息。但是你的程序员却不是个语言专家,他不懂德语和法语。所以你需要翻译人员把它翻译成德语和法语,但是你的翻译人员不懂程序,所以你可以把这些信息存到一个文本或其他格式的文件中供翻译人员使用。那么,程序必须能显示不同语言的信息,并且你并不知道你希望为这个程序提供的下一个语言支持是什么,或许是日语或许是别的什么语言。
下面的代码是一个国际化的代码的例子:
importjava.util.*;
publicclassI18NSample{
staticpublicvoidmain(String[]args){
Stringlanguage;
Stringcountry;
if(args.length!=2){
language=newString("en");
country=newString("US");
}else{
language=newString(args[0]);
country=newString(args[1]);
}
LocalecurrentLocale;
ResourceBundlemessages;
currentLocale=newLocale(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"));