1. I18N处理
什么是I18N问题?
在英文中, 国际化(Internationalization)被缩写为I18N, 即只取首尾两个字母, 中间字母为18个。
问题在哪里?
一个简单的例子
public class EnglishHelloWorld {
/** * @param args */ public static void main(String[] args) { System.out.println("Hello World"); }
}
|
public class ChineseHelloWorld {
/** * @param args */ public static void main(String[] args) { System.out.println("世界,你好"); }
} |
上述两个例子中,如果要分别输出英文和中文文本,就需要写两个程序。利用国际化处理机制,可以只写一个程序。即我们需要将程序中硬编码的文本转移到外部的资源文件(.properties文件)中!针对每一种语言环境,我们需要编写一个资源文件。然后指定当前应用程序所使用的语言环境,JAVA中的国际化处理机制,将能够自动找到对应的资源文件,并将其中的文本内容读出来。
下面我们将硬编码的文本转移到资源文件中。我们需要三个资源文件:
一个缺省的资源文件,即如果不指定语言环境,默认使用的资源文件;
一个用于中文环境的资源文件,如果指定是中文环境,将使用此资源文件;
一个用于英文环境的资源文件,如果指定是英文环境,将使用此资源文件;
MessageResources.properties文件:
hello=Hello World! |
MessageResources_en.properties文件:
hello=Hello World! |
MessageResources_zh.properties文件:
hello=/u4e16/u754c/uff0c/u4f60/u597d |
特别注意上述MessageResources_zh.properties文件,因为JAVA要求.properties文件不允许包含非ASCII(请自行上网查阅ASCII字符包括哪些字符,主要是英文和一些常见的符号,而中文等字符不属于ASCII字符)字符,所以对于中文,需要将中文转换为UNICODE编码的字符,并用/u+UNICODE编码来表示中文。
native2ascii.exe程序(在JAVA安装目录下面的bin目录下),就是用来将中文的字符转换为/u+UNICODE编码的文本的工具。
我们可以编写一个MessageResources_zh.txt文件:
hello=世界,你好 |
然后,在命令行下,通过如下命令,将MessageResources_zh.txt文件转换为MessageResources_zh.properties文件:
native2ascii MessageResources_zh.txt MessageResources_zh.properties |
资源文件的命名规则:
资源名称_语言代码_国家/