7.7.3 完成程序国际化
7.7.3 完成程序国际化
为了让输出的字符串常量可以改变,可以将需要输出的各种字符串(不同的国家/语言环境对应不同的字符串)定义在资源包中。
Java9
支持使用UTF8
字符集来保存属性文件,这样在属性文件中就可以直接包含非西欧字符,因此属性文件也不再需要使用native2ascii
工具进行处理。唯一要注意的是,属性文件必须显式保存为UTF-8
字符集。
通常推荐源代码都使用UTF-8
字符集保存。但如果使用UTF8
字符集保存Java
源代码,在命令行编译源程序时需要为javac
显式指定-encoding utf-8
选项,用于告诉Javac
命令使用UTF-8
字符集读取Java
源文件。
如果希望程序完成国际化,只需要将不同的国家/语言(Locale
)的提示信息分别以不同的文件存放即可。例如,
- 简体中文的语言资源文件就是
xxx_zh_CN.properties
文件, - 而美国英语的语言资源文件就是
xxx_en_US.properties
文件
Java
程序国际化的关键类是ResourceBundle
,它有一个静态方法:getBundler(String baseName, Locale locale)
,该方法将根据Locale
加载资源文件Locale
封装了一个国家、语言,例如,简体中文环境可以用简体中文的Locale
代表,美国英语环境可以用美国英语的Locale
代表。
从上面资源文件的命名中可以看出,不同国家、语言环境的资源文件的baseName
是相同的,
即baseName
为mess
的资源文件有很多个,不同的国家、语言环境对应不同的资源文件。
对于简体中文的Locale
,则加载mess_zh_CN.properties
文件。
一旦加载了该文件后,该资源文件的内容就是多个key-value
对,程序就根据key
来获取指定的信息,例如获取key
为hello
的消息,该消息是”你好!”
如果对于美国英语的Locale
,则加载mess_en_US.properties
文件,该文件中key
为hello
的消息是”Welcome!
“。
java
程序国际化的关键类是ResourceBundle
和Locale
, ResourceBundle
根据不同的Locale
加载语言资源文件,再根据指定的key
取得已加载语言资源文件中的字符串。