2011-01-12 286 views
1

试图让JSF网络应用程序使用多种语言。为此目的,覆盖所有的HTML代码<f:view>标签:制作JSF网站多种语言

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns= ... > 

<f:view locale="#{actionsContainer.languageDetails.locale}"> 
    <head> 
    <meta charset="utf-8" /> 
    <f:loadBundle basename="messages.Messages" var="key" /> 
    </head> 
    <body> 
    <h:outputText value="#{key.myText}" /> 
    </body> 
</f:view> 
</html> 

比资源我有一个翻译几个“Messages.properties”文件的一些语言:

  • Messages_en.properties
  • Messages_es.properties
  • Messages.properties //默认

这个文件的Messages_es.properties“的样品含量为:

myText=España 

让我们,我的locale是“ES”,而且比西班牙语翻译文件加载它的价值,并呈现在屏幕上。但是,特殊字符(例如'ñ')在浏览器输出中无法正确显示。而不是特殊的西班牙字母,我得到了像这样的“Ô。

我试图用UTF-8编码保存.properties文件,没有BOM。而输出已经改变成这样的“”。

所以问题是如何在输出中得到这个特殊的任何语言字母?!

回答

2

属性文件默认使用ISO-8859-1编码进行读取。您需要使用JDK native2ascii工具将UTF-8属性文件转换为ISO-8859-1属性文件,然后使用它们。

然而,在JSF中,您也可以指定一个自定义ResourceBundleControl,其中您重写读取属性文件以替代使用UTF-8。另见this article

+0

我试图用\ uXXXX格式替换所有这些特殊字母,然而-webkit浏览器(Chrome和Safari)显示错误:实体'u00E7'未定义 – 2011-01-12 16:07:46

0

使用资源包时,请考虑使用Eclipse的ResourceBundle Editor插件(http://sourceforge.net/projects/eclipse-rbe/)。