Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 397|回复: 0

[jsf学习]JSF的中文化与国际化的简便方法

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 00:52:54 | 显示全部楼层 |阅读模式
    JSF的中文化与国际化的简便方法 作者: steady 出处: blogjava  
             对于各种不同的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> 这样的输入框的话,当你输入中文并提交,你就会发现,你输入的文字变成这样的了 “ u5DF2u5B8Cu6210 ” ,曾经为了这个问题,找解决方案花了我三周的时间。首先把问题定位到 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 ,不要使用其默认值。   当然,这只是我在使用中积累的一点小小的经验了,希望能对大家有一点帮助,如果大家发现有什么不正确就请赐教,如果更好的解决方案,也拿出来和大家分享吧,因为我们的分享可能会给大家节省更多的时间。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-16 04:06 , Processed in 0.403909 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表