Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getBundle(类、区域设置)don';无法获取默认捆绑包_Java - Fatal编程技术网

Java getBundle(类、区域设置)don';无法获取默认捆绑包

Java getBundle(类、区域设置)don';无法获取默认捆绑包,java,Java,我的机器(Windows7 64位)上的Java7和Java8上的ResourceBundle.getBundle都有一个非常奇怪的行为,我很困惑 我尝试获取choosen地区的MyResource捆绑包(扩展了ResourceBundle)。 以下是简单代码(缩写和简化): 默认的RessourceBundle类: public class MyRessource extends ResourceBundle { @Override protected Object hand

我的机器(Windows7 64位)上的Java7和Java8上的ResourceBundle.getBundle都有一个非常奇怪的行为,我很困惑

我尝试获取choosen地区的MyResource捆绑包(扩展了ResourceBundle)。 以下是简单代码(缩写和简化):

默认的RessourceBundle类:

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)并正常工作。我会投票支持这个答案,但我没有这个名声。