问号而不是资源包中的 Unicode 字符

Question marks instead of Unicode characters with resource bundle in view

我使用 Primefaces 3.5 + Lifaray 6.2。 我的应用程序需要一些内部化。 我使用 Language_en_US.properties 文件和其他字符串资源。 在 backbean 中,我使用 ResourceBundle.getBundle 并且它工作正常。

但鉴于我使用

<p:outputLabel value="#{i18n['server-address']}"/>

对于西里尔文,我总是在页面上看到问号

?????? ??????

在页面代码中已经是问号了,所以不是浏览器的问题。

如果我直接用ResourceBundle.getBundle

<p:outputLabel value="#{adminBean.getString('main')}"/>

然后我得到了西里尔字母。

有没有办法不用bean也能使用i18n?

Liferay 期望资源包以 UTF-8 编码(不同于 PropertyResourceBundle 中使用 ISO-8859-1 的普通 Java)。

检查您 Language_ru_RU.properties 文件的编码 - 很可能不是 UTF-8。这可以解释 ResourceBundle.getBundle 可以正常工作,而 #{i18n['server-address']} 不能。

虽然与标准有偏差,但 UTF-8 编码非常舒适,因为不需要字符转义。

请参阅 Liferay 文档中的 Localizing JSF Portlets