如何获取默认资源包而不考虑当前默认区域设置

我在类路径中有三个资源文件:

标签.属性:

language = Default

labels_en.属性:

language = English

labels_fr.属性:

language = French

有没有办法获得一个对象,无论我的默认值是什么,它总是加载?ResourceBundlelabels.propertiesLocale

ResourceBundle.getBundle("labels")返回与当前默认区域设置对应的区域设置(如预期)。

我能找到的唯一方法是将默认区域设置设置为不存在的区域设置,但这可能会破坏其他模块。

谢谢!

Locale.setDefault( Locale.ENGLISH);
Assert.assertEquals( "English", ResourceBundle.getBundle( "labels").getString( "language"));
Locale.setDefault( Locale.FRENCH);
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels").getString( "language"));
Assert.assertEquals( "French", ResourceBundle.getBundle( "labels", new Locale( "do-not-exist")).getString( "language"));
Locale.setDefault( new Locale( "do-not-exist"));
Assert.assertEquals( "Default", ResourceBundle.getBundle( "labels").getString( "language"));

答案 1

您可以传入 ResourceBundle.Control,无论请求的区域设置如何,它始终只搜索根 ResourceBundle:

ResourceBundle rootOnly = ResourceBundle.getBundle("labels",
    new ResourceBundle.Control() {
        @Override
        public List<Locale> getCandidateLocales(String name,
                                                Locale locale) {
            return Collections.singletonList(Locale.ROOT);
        }
    });

答案 2

推荐