我使用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?
答案 0 :(得分:6)
Liferay希望资源包以UTF-8编码(与普通Java中的PropertyResourceBundle
不同,后者使用ISO-8859-1)。
检查您Language_ru_RU.properties
文件的编码 - 很可能不是UTF-8。这可以解释ResourceBundle.getBundle是否正常工作,而#{i18n['server-address']}
则不然。
虽然它偏离标准,但UTF-8编码非常舒适,因为不需要进行字符转义。
请参阅Liferay文档中的Localizing JSF Portlets。