无论当前的默认Locale如何,如何获取默认的ResourceBundle

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无论当前的默认Locale如何,如何获取默认的ResourceBundle相关的知识,希望对你有一定的参考价值。

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

Labels.properties:

language = Default

Labels_恩.properties:

language = English

Labels_放入.properties:

language = French

有没有办法得到一个ResourceBundle对象总是加载labels.properties无关紧要我的默认Locale是什么?

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"));
答案

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

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

另一种方法是设置应用程序的默认语言环境,例如

Locale.setDefault(Locale.US);

以上是关于无论当前的默认Locale如何,如何获取默认的ResourceBundle的主要内容,如果未能解决你的问题,请参考以下文章

如何在Debian中设置locale

如何在 JVM 中设置默认语言环境?

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

如何在 XML 中获取(参考)当前主题默认文本颜色

如何自动获取当前日期和时间到日期时间字段