JSF的中文明与国际化的简便方法
JSF的中文明与国际化的简便方法
对于各种不同的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编码的信息,大家可能到这个中央去下载这个插件。利用起来很简略,这里就不再多说了。
在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,不要利用其默许值。
当然,这只是我在利用中积攒的一点小小的阅历了,宿愿能对大家有一点协助,假设大家发现有什么不正确就请赐教,假设更好的处理计划,也拿进去和大家分享吧,由于咱们的分享能够会给大家节俭更多的工夫。