JSF的中文化与国际化

原创 2006年06月11日 16:56:00
 对于各种不同的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的插件来写我们的资源文件,这个插件叫做Eclipse ResourceBundle Editor Plugin,我们可以很方便的在里面写中文信息,它会自动的转换为UTF-8编码的信息,大家可以到这个地方去下载这个插件http://resourcebundleeditor.com/ess/rbe/home.do。使用起来很简单,这里就不再多说了。

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

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

HTMLhead中加入:

<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 ,不要使用其默认值。

当然,这只是我在使用中积累的一点小小的经验了,希望能对大家有一点帮助,如果大家发现有什么不正确就请赐教,如果更好的解决方案,也拿出来和大家分享吧,因为我们的分享可能会给大家节省更多的时间。

3种方式实现JSF国际化配置

3种方式来实现: 1、在faces-config.xml文件种配置,由浏览器的语言设置来选择当前需要的国际化资源文件; 2、在程序中设置: UIViewRoot viewRoot = Faces...
  • nuccch
  • nuccch
  • 2013年11月24日 23:07
  • 975

JSF的中文化与国际化(转贴)

 对于各种不同的Java应用,国际化的问题总会给我们非英文用户带来一些麻烦,在JSF中也一样,在实践中碰到了一系列不容易解决的问题,最终解决的大部分的问题,也完成了一个可以运行的小项目,我把我的一些经...
  • lisayxw
  • lisayxw
  • 2006年10月31日 14:23
  • 523

JSF入门七(国际化信息)

本文转载自: http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630   JSF的国际化(Internn...
  • zccbbg
  • zccbbg
  • 2013年04月14日 22:11
  • 679

eclipse的中文化

解压缩eclipse-SDK-3.0.1-win32.zip到E:/eclipse3.0.1解压缩NLpack-eclipse-platform-SDK-3.0.x-win32拷贝features和p...
  • wldandanpig
  • wldandanpig
  • 2005年03月27日 13:44
  • 706

dataTables国际化

国际化(Internationalisation) Datatables默认的是英语,但是可以很容翻译成其他的语言。  由社区提供的超过50多种语言,让你在Datatables中使用 配置(Con...
  • lovfyna
  • lovfyna
  • 2015年08月13日 14:55
  • 2189

JSF验证信息中文化

目前JSF1.0、1.1jar包当中,组件验证信息、出错信息没有中文化处理,可以按如下进行,添加支持中文化。1:先把jsf-impl.jar包javax/faces下面的Messages.proper...
  • chinahgf
  • chinahgf
  • 2008年02月22日 21:02
  • 386

JSF国际化与资源文件

国际化 1、建立properties资源包(推荐使用类似java包名的结构目录,如:com.thizlinux.i18n) 文件名格式如下: source.properties source...
  • LJHABC1982
  • LJHABC1982
  • 2011年11月04日 11:31
  • 2742

JSP, JSF的区别

接着区分Java里的概念:JSP,JSF。对于熟手一看到标题会生气:这明明是两个不同的东西嘛!!!但对于新手,还真是容易犯糊涂。在Eclipse的Help上有这样一段描述JSP文件的内容:The Ja...
  • zhuhuazha
  • zhuhuazha
  • 2008年01月25日 13:49
  • 15236

Play framework 国际化

Play的国际化操作还是非常简单的。大概分为四步: 1. 首先在${project_home}/conf/application.conf中定义你要用到的哪些国际化语言 Java代...
  • maguanghui_2012
  • maguanghui_2012
  • 2017年02月10日 14:34
  • 151

JSF和MVC

JSF和MVC1.    JSF 和 MVCJSF 是几年前学过的在 Java 平台上改进 Web 开发技术的课程的结果。这一趋势开始于 JSP 技术,这一技术很好,只是很容易在 HTML(和类 HT...
  • qjyong
  • qjyong
  • 2007年10月19日 20:43
  • 3548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSF的中文化与国际化
举报原因:
原因补充:

(最多只允许输入30个字)