Locale和ResourceBundle之间的关系是什么

时间:2012-10-06 09:47:53

标签: java localization internationalization

有人可以解释一下JDK提供的Locale和ResourceBundle类之间的关系是什么?它与 difference between i18n vs l10n as given in this answer相同吗?

1 个答案:

答案 0 :(得分:1)

Locale和ResourceBundle之间的关系是,Locale用于读取正确的属性文件。基本上,ResourceBundle.Control类接受Locale对象,并且给定属性文件的基本名称,它尝试找到最匹配的对象。例如:

ResourceBundle rb = ResourceBundle.getbundle("messages", Locale.forLanguageTag("zh-TW");

如果你这样做,ResourceBundle.Control将查找messsages_zh_TW.properties,messages_zh-Hant-TW.properties,messages_zh-Hant.properties,messages_zh.properties,如果找不到任何内容,最后会回退到messages.properties特定资源文件。

修改

只是添加最后一件事。如果省略Locale参数,ResourceBundle.getBundle(String)将根据您的默认Locale返回属性文件 - 您可以像这样获得:

Locale default = Locale.getDefault(Locale.Category.DISPLAY);

尽管过度键入(在桌面应用程序的上下文中)似乎没有必要,但始终传递Locale是一个好习惯,因为它使代码更容易理解。