服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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


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

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

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

<%@ page contenttype="text/html;charset=utf-8"%>

  在html的head中加入:

<meta http-equiv="content-type" content="text/html; charset=utf-8"/>

  下面,我们就可以在我们的页面中绑定并使用这些资源信息:

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

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

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

<h:outputtext value="#{messages['schedule.label.starttime']}"/>

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

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

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

<h:commandlink id="delete" action=".." onclick="if (!confirm('#{messages['system.msg.confirmdel']}')) return false;">

  这样的话,里面的中文是可以正常显示的,下面我给大家一些建议吧,希望对大家有一些帮助。

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

  2. 所有的中文要转换成 utf-8 编码,可以使用eclipse resourcebundle editor plugin来解决;
 
  3. 页面编码方式定义成 utf-8 ,不要使用其默认值。
 
  当然,这只是我在使用中积累的一点小小的经验了,希望能对大家有一点帮助,如果大家发现有什么不正确就请赐教,如果更好的解决方案,也拿出来和大家分享吧,因为我们的分享可能会给大家节省更多的时间。

扫描关注微信公众号