假设我有2个字符串文件:
Strings_en.properties
Strings_fr.properties
Run Code Online (Sandbox Code Playgroud)
假设英语是默认语言,所有字符串都存在,而法语则落后,一些字符串丢失.
我希望在这两种情况下都回归英语:
ResourceBundle.getBundle("path/to/Strings", Locale.GERMAN);ResourceBundle.getBundle("path/to/Strings", Locale.FRENCH).getString("only.in.english");第一个回退很简单:根据文档,将英语作为默认语言环境就足够了,例如通过设置Locale.setDefault(Locale.ENGLISH);.
我的问题是第二次回退.如果找不到该字符串Strings_fr,则查找继续到"父包":getObject()文档.然而,Strings_en是不是家长Strings_fr和MissingResourceException抛出.
一个简单的解决方法是重命名Strings_en.properties为Strings.properties.这使得它成为父包Strings_fr(对于任何其他Strings_问题),查找缺少的字符串将返回默认的英文版本.
问题:系统现在具有默认本地化,但它不再理解存在英语本地化.
在获取字符串时,检查它是否存在于包中 - 如果不存在,则从英语字符串中取出.
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);
Run Code Online (Sandbox Code Playgroud)
问题:这只是一个黑客,我相信有一种"有意"的方式来做到这一点.
是否有一个简单的方法来使Strings_en父母Strings_fr?如果没有,是不是合理的,例如硬连接Strings_en到Strings,这样我可以保持英语作为一个明确的定位,并在同一时间作为默认的?
您可以重命名Strings_en.properties为Strings.properties(使英语成为默认本地化)并添加新的空白 Strings_en.properties.
然后
ResourceBundle.getBundle("path/to/Strings", Locale.ENGLISH).getLocale()
Run Code Online (Sandbox Code Playgroud)
也回来了Locale.ENGLISH.
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |