我使用java.util.ResourceBundle
类和属性文件本地化Web应用程序。
我有两个语言环境,fr_FR和en_US,我想使用en_US作为默认值,所以我写了以下文件:
messages_fr_FR.properties
使用fr_FR消息messages.properties
我的问题是ResourceBundle.getBundle(BUNDLE_NAME, locale)方法在使用默认属性文件之前回退Locale.getDefault()
,这意味着如果JVM Locale设置为fr_FR,
ResourceBundle.getBundle("name", new Locale("en", "US"))
返回fr_FR包。
我可以重命名messages.properties
文件,但这可能会返回一个带有其他所需和默认语言环境的MissingResourceException。
如何在不重复属性文件或调用Locale.setDefault
的情况下忽略系统区域设置?
答案 0 :(得分:11)
您可以使用自定义ResourceBundle.Control
来执行此操作,方法是明确重载getFallbackLocale
,或使用:
ResourceBundle.getBundle("name", new Locale("en", "US"), ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES))
答案 1 :(得分:0)
您要查找的捆绑包称为baseBundle
,可以获取
轻松使用Locale.ROOT作为语言环境。像这样:
ResourceBundle.getBundle("bundle name",Locale.ROOT)