思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

JSF的中文化与国际化的简便方法

来源:网络    更新时间:2014-12-2


  对于各种不同的Java应用,国际化的问题总会给我们非英文用户带来一些麻烦,在JSF中也一样,在实践中碰到了一系列不容易解决的问题,最终解决的大部分的问题,也完成了一个可以运行的小项目,我把我的一些经验拿出来和大家分享一下,希望能让大家在这些地方少走一些弯路。

  Java中的国际化是由java.util.Locale类支持的,中文对应的代码是“zh”,所以我们要在JSF中使用中文的话,需要在我们的faces-config.XML中做一些简单的配置了,加入对中文的支持,当然如果需要支持更多的语言的话,多加几个<supported-locale>就可以了。

<faces-config>
<application>
<message-bundle>resource</message-bundle>
<locale-config>
<default-locale>zh</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
</application>
</faces-config>
  这里定义了一个<message-bundle>resource</message-bundle>指的是资源文件所在的位置和文件名,这里我们把资源文件放在source根目录下名称为resource.properties,这个是英文的资源文件,另外一个存放中文信息的资源文件名为resource_zh.properties。

  接下来,我们可以在这些资源文件中加入我们需要的资源信息。推荐大家一个Eclipse的插件来写我们的资源文件,这个插件叫做EclipseResourceBundleEditorPlugin,我们可以很方便的在里面写中文信息,它会自动的转换为UTF-8编码的信息,大家可以到这个地方去下载这个插件http://resourcebundleeditor.com/ess/rbe/home.do。使用起来很简单,这里就不再多说了。

  在JSP文件中使用这些资源之前,需要加入一下这些东西:

<%@pagecontentType="text/html;charset=utf-8"%>
  在HTML的head中加入:

<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  下面,我们就可以在我们的页面中绑定并使用这些资源信息:

  使用之前要加载一下资源文件,使用这个Tag:

<f:loadBundlebasename="resource"var="messages"/> 
  我在这里给消息起了个别名messages,以后就可以通过这个别名来使用资源文件。

  比如我使用<h:outputText>来引用资源信息schedule.label.starttime可以这么用。

<h:outputTextvalue="#{messages['schedule.label.starttime']}"/>
  是不是可以用了呢?不过别急,用是能用,如果你在JSF中使用了Tiles的话,就会出现一些问题了,我们如果使用了<h:inputText>这样的输入框的话,当你输入中文并提交,你就会发现,你输入的文字变成这样的了“\u5DF2\u5B8C\u6210”,曾经为了这个问题,找解决方案花了我三周的时间。首先把问题定位到Tiles上,因为如果不使用Tiles的话,是没有这个问题的,但是Tiles又不能不用的,最后发现其实很容易的,只要在<f:view>中加上locale=”zh”就可以了,如果需要的话,可以把这个属性动态化,满足国际化的需要,就像这样<f:viewlocale="#{usERProfile.locale}">。

  这样的话,一切都正常了,使用Tiles也没有问题的。

  今天有朋友问了我关于JavaScript中的中文乱码问题,我在我的JSP中找了一段代码拿出来看看:

<h:commandLinkid="delete"action=".."onclick="if(!confirm('#{messages['system.msg.confirmdel']}'))returnfalse;">
  这样的话,里面的中文是可以正常显示的,下面我给大家一些建议吧,希望对大家有一些帮助。

  1.所有文字信息全部写在资源文件中,通过引用其别名来使用这些信息;

  2.所有的中文要转换成UTF-8编码,可以使用EclipseResourceBundleEditorPlugin来解决;
 
  3.页面编码方式定义成UTF-8,不要使用其默认值。

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018