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

js|中文

    对于各种不同的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"%>

  在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=".." >

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

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

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

时间: 2024-11-02 11:48:30

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

当ASP.NET撞上JSF之应用程序的国际化

asp.net|js|程序 国际化,是指在你的应用程序中支持多种语言和文化.这包括提供本地化的文本消息和格式(例如日期),以便在世界不同地方的用户能够以一种他们理解的格式和语言来观看你的web页面.随着全球web的不断增长,这种类型的功能也变得日益重要.我们将快速地看一下每个框架如何允许你外在化页面文本(例如域标签)以提供不同的本地化支持. 支持不同的本地化的JSF应用程序与其它J2EE应用程序实现方式差不多使用一样的实现方式-通过把本地文本数据存储到一个资源包属性文件中.你将对每一种本地化支持

[Qt Topic] – 中文化研习,做一个多语言的简易天气预报器

[Qt Topic] – 中文化研习做一个多语言的简易天气预报器 作者 Jason Lee 日期 2010-04-01 -- 2010-04-02 平台 Qt SDK v2010.02.1 + Windows Xp 声明 文章作者仅在Intel软件网络 和CSDN博客 发表本文如有转载请注明出处.   [1] 简单地使用 QTextCodec 和 tr 配合 在默认情况下我们直接在源码中使用中文比如 setWindowTitle(tr(" 中文化研习 ")); 则会在运行界面发现中文乱

Java中如何实现国际化

假如我们开发了一个在中文环境下运行的页面,代码如下:<html><head><title>欢迎</title></head><body>    <h1>        欢迎到来!    </h1></body></html> 之后又假如,有一天我们公司的业务扩展到了日本,和美国,那么我们必须要订制另外的两张不同的页面,代码为: <html><head><ti

探索JSF框架中使用的设计模式

js|设计 设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理. 本文探讨了 JSF 框架中使用的设计模式.详细讨论的设计模式包括 Singleton.Model-View-Controller.Factory Method.State.Composite.Decorator.Strategy.Template Method 和 O

有关jive论坛搜索中文化的支持详解!

详解|中文 Jive的搜索借用了apche提供的lucene搜索引擎.lucene是一个纯Java的高性能的全文搜索引擎,你可以到apache的网站找到lucene的更多信息:http://jakarta.apache.org/lucene/docs/index.html 但在Jive使用的lucene包中,并不支持中文搜索,本站的系统也是构建在Jive之上进行扩展,中文搜索问题由JR管理系统主要开发人员之一cherami解决.很多关注Jive的朋友都来信向我们索取Jive中文搜索问题的解决方法

JSF框架中使用的设计模式介绍

设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理. 本文探讨了 JSF 框架中使用的设计模式.详细讨论的设计模式包括 Singleton.Model-View-Controller.Factory Method.State.Composite.Decorator.Strategy.Template Method 和 Observe

struts2.0-Struts2 国际化文件中 EL 表达式怎么能执行 方法呢??

问题描述 Struts2 国际化文件中 EL 表达式怎么能执行 方法呢?? 就是对于 ${getText(fieldName)} 产生了疑惑. EL不是只能调用 属性吗?得是有getXxx(); ----- ${xxx} ,原来认识是应该这样用啊. 我知道 Ognl可以强制 表达式 解析.可以调用对象栈 中对象的 方法. 但是EL如此用,有点理解不了. 解决方案 突然明白了,EL表达式用处 是在JSP页面.. 这是在XML,properties文件.里,${} 表示的不是EL表达式,而是Ognl

netbeans-如何在JSF RI中实现文件的上传呢?

问题描述 如何在JSF RI中实现文件的上传呢? 使用官方原版的JSF实现,在glassfish下如何实现文件的上传和下载?

纸媒将逐渐成为历史长流中文化的墓志铭

在互联网刚刚开始普及的十几年前,我们就已经听到过这种"预言":人们将不再看报纸买杂志,出版社将面临倒闭,书店将无人问津⋯⋯纸媒将逐渐成为历史长流中文化的墓志铭. 而这确实也是真实发生的.报刊亭逐渐成为卖水卖杂物的小杂货店,书店转型成咖啡馆,而一些老牌的纸媒也难以守住自己的百年招牌濒临破产(贝佐斯收购华盛顿邮报). 随着互联网的飞速崛起,微博.微信等自媒体的盛行,纸媒似乎已经难掩颓势,无力回天. 令人费解的数据 就在上个月末,Crain's New York Business 刊登了一篇