【发布时间】:2012-09-27 08:11:32
【问题描述】:
有人可以解释一下JDK提供的Locale和ResourceBundle类之间的关系吗?和 difference between i18n vs l10n as given in this answer一样吗?
【问题讨论】:
标签: java localization internationalization
有人可以解释一下JDK提供的Locale和ResourceBundle类之间的关系吗?和 difference between i18n vs l10n as given in this answer一样吗?
【问题讨论】:
标签: java localization internationalization
Locale 和 ResourceBundle 的关系是,Locale 用于读取正确的属性文件。基本上,ResourceBundle.Control 类接受一个 Locale 对象,并给定属性文件的基本名称,它会尝试找到最匹配的对象。例如:
ResourceBundle rb = ResourceBundle.getbundle("messages", Locale.forLanguageTag("zh-TW");
如果您这样做,ResourceBundle.Control 将查找messages_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);
虽然看起来没有必要过多输入(在桌面应用程序的上下文中),但始终传递区域设置是一个好习惯,因为它使代码更易于理解。
【讨论】: