对于各种不同的java应用,国际化的问题总会给我们非英文用户带来一些麻烦,在jsf中也一样,在实践中碰到了一系列不容易解决的问题,最终解决的大部分的问题,也完成了一个可以运行的小项目,我把我的一些经验拿出来和大家分享一下,希望能让大家在这些地方少走一些弯路。 java中的国际化是由 java.util.locale 类支持的,中文对应的代码是“zh”,所以我们要在jsf中使用中文的话,需要在我们的 faces-config.xml 中做一些简单的配置了,加入对中文的支持,当然如果需要支持更多的语言的话,多加几个<supported-locale>就可以了。
这里定义了一个<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文件中使用这些资源之前,需要加入一下这些东西:
在html的head中加入:
下面,我们就可以在我们的页面中绑定并使用这些资源信息: 使用之前要加载一下资源文件,使用这个tag:
我在这里给消息起了个别名messages,以后就可以通过这个别名来使用资源文件。 比如我使用 <h:outputtext> 来引用资源信息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中找了一段代码拿出来看看:
这样的话,里面的中文是可以正常显示的,下面我给大家一些建议吧,希望对大家有一些帮助。 1. 所有文字信息全部写在资源文件中,通过引用其别名来使用这些信息; 2. 所有的中文要转换成 utf-8 编码,可以使用eclipse resourcebundle editor plugin来解决; 3. 页面编码方式定义成 utf-8 ,不要使用其默认值。 当然,这只是我在使用中积累的一点小小的经验了,希望能对大家有一点帮助,如果大家发现有什么不正确就请赐教,如果更好的解决方案,也拿出来和大家分享吧,因为我们的分享可能会给大家节省更多的时间。
关键字 本文所属关键字相关 与本文相关文章
分类 所有文章关键字导航源码编程相关Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏 操作系统/服务器相关Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器 标准 网站致力的规范 |