【发布时间】:2014-10-28 12:22:17
【问题描述】:
我的机器(Windows 7 64 位)上的 Java7 和 Java8 上的 ResourceBundle.getBundle 有一个非常奇怪的行为,我很困惑。
我尝试为所选语言环境获取 MyRessource Bundle(扩展 RessourceBundle)。 这是简单的代码(缩短和简化):
默认 RessourceBundle 类:
public class MyRessource extends ResourceBundle {
@Override
protected Object handleGetObject(final String key) {
if (key.equals("submit")) return "submit";
return null;
}
}
德语 RessourceBundle 类:
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"));
输出是:
捆绑 com.example.MyRessource_de@6cf82c7d
缺席
现在与另一种语言相同,这应该返回默认包:
final ResourceBundle bundle_EN =
ResourceBundle.getBundle(MyRessource.class.getName(), Locale.UK);
LOG.debug("Bundle {}", bundle_EN);
LOG.debug(bundle_EN.getString("submit"));
但是输出是:
捆绑 com.example.MyRessource_de@6cf82c7d
缺席
返回了相同的缓存包。 我尝试使用 ResourceBundle.clearCache() 清除缓存,但没有成功。
当我实现另一个 Language-Bundle 并要求它时,我得到了它,但我没有得到 Default-Bundle 类。
我不知道为什么 Java 会这样,并且很乐意得到任何答案。
在其他机器上,代码按预期工作。
顺便说一句:我的 Windows 系统语言是 de。
【问题讨论】:
-
docs.oracle.com/javase/6/docs/api/java/util/…, java.util.Locale, java.lang.ClassLoader)
标签: java