gpt4 book ai didi

java - 默认为英文的 ResourceBundle

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:25 25 4
gpt4 key购买 nike

设置

假设我有 2 个字符串文件:

Strings_en.properties
Strings_fr.properties

假设英语是默认语言,并且所有字符串都存在,而法语滞后并且缺少一些字符串。

期望的行为

在这两种情况下我都想回到英语:

  • 请求完全不同的语言环境时,例如德语。
    • ResourceBundle.getBundle("path/to/Strings", Locale.GERMAN);
  • 请求法语中缺少的字符串时。
    • ResourceBundle.getBundle("path/to/Strings", Locale.FRENCH).getString("only.in.english");

第一个回退很简单:根据 documentation ,将英语作为默认语言环境就足够了,例如通过设置 Locale.setDefault(Locale.ENGLISH);

问题

我的问题是第二个回退。如果在 Strings_fr 中未找到该字符串,则继续查找“父包”:getObject() documentation .但是,Strings_en 不是 Strings_fr 的父级,因此会抛出 MissingResourceException

解决方法

一个简单的修复方法是将 Strings_en.properties 重命名为 Strings.properties。这使它成为 Strings_fr(以及任何其他 Strings_,就此而言)的父包,查找丢失的字符串会返回默认的英文版本。

问题:系统现在有一个默认本地化,但它不再理解有一个英语本地化。

解决方法 2

获取字符串时,检查它是否存在于包中 - 如果不存在,则改为从英文字符串中获取它。

ResourceBundle bundle = ResourceBundle.getBundle("path/to/Strings", Locale.FRENCH);
if (bundle.containsKey(key)) { return bundle.getString(key); }
return ResourceBundle.getBundle("path/to/Strings", DEFAULT_WHICH_IS_ENGLISH).getString(key);

问题:这只是一个 hack,我相信有一种“预期的”方法可以做到这一点。

问题

有没有一种简单的方法可以使 Strings_en 成为 Strings_fr 的父级?如果不是,例如将 Strings_en 硬链接(hard link)到 Strings 是否合理,这样我就可以将英语作为显式本地化,同时作为默认本地化?

最佳答案

您可以将 Strings_en.properties 重命名为 Strings.properties(使英语成为默认本地化)并添加一个新的 Strings_en .属性

然后

ResourceBundle.getBundle("path/to/Strings", Locale.ENGLISH).getLocale()

还返回 Locale.ENGLISH

关于java - 默认为英文的 ResourceBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com