Java getBundle(类、区域设置)don';无法获取默认捆绑包
我的机器(Windows7 64位)上的Java7和Java8上的ResourceBundle.getBundle都有一个非常奇怪的行为,我很困惑 我尝试获取choosen地区的MyResource捆绑包(扩展了ResourceBundle)。 以下是简单代码(缩写和简化): 默认的RessourceBundle类:Java getBundle(类、区域设置)don';无法获取默认捆绑包,java,Java,我的机器(Windows7 64位)上的Java7和Java8上的ResourceBundle.getBundle都有一个非常奇怪的行为,我很困惑 我尝试获取choosen地区的MyResource捆绑包(扩展了ResourceBundle)。 以下是简单代码(缩写和简化): 默认的RessourceBundle类: public class MyRessource extends ResourceBundle { @Override protected Object hand
public class MyRessource extends ResourceBundle {
@Override
protected Object handleGetObject(final String key) {
if (key.equals("submit")) return "submit";
return null;
}
}
德语资源包类:
public class MyRessource_de extends MyRessource {
@Override
protected Object handleGetObject(final String key) {
if (key.equals("submit")) return "absenden";
return null;
}
}
然后我要检索德国包:
final ResourceBundle bundle_DE =
ResourceBundle.getBundle(MyRessource.class.getName(), Locale.GERMANY);
LOG.debug("Bundle {}", bundle_DE);
LOG.debug(bundle_DE.getString("submit"));
输出为:
Bundle com.example.myresource_de@6cf82c7d
阿本登
现在,与另一种语言相同,这将返回默认捆绑包:
final ResourceBundle bundle_EN =
ResourceBundle.getBundle(MyRessource.class.getName(), Locale.UK);
LOG.debug("Bundle {}", bundle_EN);
LOG.debug(bundle_EN.getString("submit"));
但结果是:
Bundle com.example.myresource_de@6cf82c7d
阿本登
返回了相同的缓存包。
我尝试使用ResourceBundle.clearCache()清除缓存,但没有成功
当我实现另一个语言包并要求它时,我得到了它,但我没有得到默认的包类
我不知道Java为什么会这样,我很乐意得到任何答案
在其他机器上,代码按预期工作
顺便说一句:我的Windows系统语言来自ResourceBundle javadoc: getBundle使用基本名称、指定的区域设置和默认值 locale(从locale.getDefault获得)生成 候选包名称。如果指定区域设置的语言、脚本、, country和variant都是空字符串,那么基本名称就是 唯一的候选包名称
换句话说,由于找不到MyResource_UK资源包,它使用系统默认值生成候选包名称,然后尝试仅使用基本名称(在您的情况下,成功地找到了德语包)。,java.util.Locale,java.lang.ClassLoader)非常感谢您,设置Locale.setDefault(Locale.UK)并正常工作。我会投票支持这个答案,但我没有这个名声。