簡體   English   中英

無論當前的默認語言環境如何,如何獲取默認的 ResourceBundle

[英]How to get the default ResourceBundle regardless of current default Locale

我在類路徑中有三個資源文件:

標簽.屬性:

language = Default

label_en.properties:

language = English

標簽_fr.properties:

language = French

有沒有辦法獲得始終加載labels.propertiesResourceBundle對象,無論我的默認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 ,無論請求的區域設置如何,它始終只搜索根 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM