区域设置的顺序

Sud*_*ani 1 java locale localization resourcebundle internationalization

Locales 的使用顺序到底是什么?我有 3 个属性文件:

Dolphins.properties

name=The Dolphin
age=0
Run Code Online (Sandbox Code Playgroud)

Dolphins_en.properties

name=Dolly
age=4
Run Code Online (Sandbox Code Playgroud)

Dolphins_fr.properties

name=Dolly
Run Code Online (Sandbox Code Playgroud)

我的代码是:

5: Locale fr = new Locale("fr");

6: Locale.setDefault(new Locale("en", "US"));

7: Resource Bundle b = ResourceBundle.getBundle("Dolphins", fr);

8: b.getString("name");

9: b.getString("age");
Run Code Online (Sandbox Code Playgroud)

代码将默认的 Locale 设置为 Dolphins_en 那么为什么它使用 Dolphins.properties 呢?我错过了什么或误解了什么?

提前致谢。

cgr*_*rim 5

选择捆绑链时使用默认区域设置。这意味着,当您未指定它时,它将被使用:ResourceBundle.getBundle("Dolphins")或者当您指定包不存在的区域设置时:ResourceBundle.getBundle("Dolphins", new Locale("cs"))

但是,当选择捆绑包时,默认区域设置将不再用于值选择。这意味着当Dolphins_fr.propertiesage中不存在该键时,它将使用默认捆绑包Dolphins.properties中的值。

注意:如果密钥不在Dolphins.properties中,则会抛出MissingResourceException

更新:我感觉我过去看到过同样的代码,终于明白了。您可以查看Jeanne Boyarsky - OCP学习指南或这里https://coderanch.com/t/685833/certification/OCP-Chapter-Jeanne-Boyarsky,其中完全相同的代码和原因用更好的英语解释。