Java 中如何实现国际化

  • 2016-04-01
  • 浏览 (112)

基本概念

引用 http://en.wikipedia.org/wiki/Internationalization_and_localization

Internationalization and localization are means of adapting products such as publications, hardware or software for non-native environments, especially other nations and cultures.

国际化(internationalization i18n)和本地化(localization l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化。

针对计算机来说就是让一个既可以在中文环境下运行也可以在英语,甚至是日语的环境下运行。


Java中如何实现国际化(仅限语言层面)

Java中国际化通过两步来完成,
一、通过将文字内容以特定的方式存放在特定的文件中
特定的文件:方便管理,另外可以将文件明和特定的语言管理起来
特定的方式:有些时候有些环境不支持某些语言,例如通常英文环境不支持中文,所以要将中文改变为英文可以识别的形式,在使用的时候在转变回来。

二、在运行时根据当前的语言环境决定从哪个文件中读取文字内容

第一步,特定的文件,特定的格式
特殊的文件名通过语言和国家来定义,例如:
中文中国 zh_CN
日文日本 ja_JP
英语美国 en_US

Java中国际化的概念是将不同国家的语言描述的相同的东西放在各自对应的属性文件中,如果这个文件的名字叫做Message,那么对应语言的文件分别为:
中文中国 Message_zh_CN.properties
日文日本 Message_ja_JP.properties
英文美国 Message_en_US.properties

特殊的方式使用替换ascii的方式,java中提供了一个native2ascii.exe的工具(在JAVA_HOME/bin目录下),这个工具专门用来把某种特定的文字内容转变为特殊的格式。

例如Message_zh_CN.properties中的内容为:
Msg1 = 欢迎
Msg2 = 欢迎到这里!

经过命令native2ascii Message_zh_CN.properties之后输出:
Msg1 = /u6b22/u8fce
Msg2 = /u6b22/u8fce/u5230/u8fd9/u91cc/uff01
这里/u6b22等的数字是对应汉字(或者其他非英语字符)的unicode表示

第二步,通过当前的运行环境确定使用的文件的名字,例如存在上述的三个文件:
中文中国 Message_zh_CN.properties
日文日本 Message_ja_JP.properties
英文美国 Message_en_US.properties

可以使用java.util.ResouceBundle 类来取得当前的资源文件,代码为:
ResourceBundle rb = ResourceBundle.getBundle("Message");

也可以指语言与国家特征来获得想要的文件的内容,例如:
ResourceBundle rb = ResourceBundle.getBundle("Message", Locale.JAPAN);


摘抄自:http://blog.csdn.net/l12345678/article/details/2239095
正文到此结束