java—当使用类而不是属性文件或listresourcebundles时,resourcebundle.getbundle()必须使用的语言

huwehgph  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(286)

如果我有这样的财产:
i18n.特性
i18n\u en.属性
i18n\u en\u us.属性
我可以用 ResourceBundle.getBundle(Locale.FRANCE) 它将加载默认属性(i18n.properties)。如果我使用listresourcebundle类而不是属性,这也可以工作。
但是,如果我尝试使用resourcebundle类,规则似乎不同,我需要至少有一个 I18N_xx.class ,它将不使用默认值 I18N.class :例如locale en_CA 将加载 I18N_en.class 但是区域设置 fr_FR (或 Locale.FRANCE )无法加载 I18N.class 相反,我得到:
找不到基名称i18n、locale fr\u fr的捆绑包
此外,如果我添加一个i18n.properties文件,那么getbundle()将找到它。。。
这是正常的行为吗?我错过什么了吗?文档似乎暗示这是正常的(注意,示例中的候选列表结束于 {base name}_{lang} ),但如果是这样的话,我就看不出理由了?为什么基本默认值应该是属性文件?

csbfibhn

csbfibhn1#

好的,所以真正的答案是,我的基的构造器 ResourceBundle 类不是公共的。。。
然而,在调查这件事时,我发现了另一个奇怪之处:
如果它找不到该语言的资源,它会尝试使用默认语言环境,而不是转到基文件:如果我的默认语言环境是基于英语的语言环境,例如, en_IE 然后要求 fr_FR 资源产生 en 一个,如果默认值是 en_US , fr_FR 资源来自 en_US 捆绑。
在服务器中,这将是一种痛苦,因为服务器范围内的默认语言不会为所有用户提供适当的行为,但是java似乎定义了一种语言/国家中立的语言 Locale.ROOT 这是静态的。

相关问题