0%

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是相同的,
baseNamemess的资源文件有很多个,不同的国家、语言环境对应不同的资源文件。
对于简体中文的Locale,则加载mess_zh_CN.properties文件。
一旦加载了该文件后,该资源文件的内容就是多个key-value对,程序就根据key来获取指定的信息,例如获取keyhello的消息,该消息是”你好!”
如果对于美国英语的Locale,则加载mess_en_US.properties文件,该文件中keyhello的消息是”Welcome!“。

java程序国际化的关键类是ResourceBundleLocale, ResourceBundle根据不同的Locale加载语言资源文件,再根据指定的key取得已加载语言资源文件中的字符串。

原文链接: 7.7.3 完成程序国际化