`
foryougeljh
  • 浏览: 113493 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSF国际化与资源文件

 
阅读更多
国际化
1、建立properties资源包(推荐使用类似java包名的结构目录,如:com.thizlinux.i18n)
文件名格式如下:
source.properties
source_en.properties
source_de.properties
source_zh.properties
本地化资源包文件时,需要向文件名添加本地后缀:下划线后面
跟两个小写字母的ISO-639语言编码,可以从http://www.loc.gov/standards/ios639-2
找到所有两个和三个字母ISO-639语言编码的列表
上述三个文件分别为默认资源包、英语资源、德语资源包和中文资源包,对应的需要在应用程序配置文件中,如WEB-INF/faces-config.xml中设置默认和所支持的本地化
<faces-config>
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>zh</supported-locale>
</locale-config>
</application>
</faces-config>
当浏览器连接到应用程序时,其HTTP头中通常会包含一个Accept-Language值
JSF读取该值并从所支持的本地化中找到最佳匹配,在浏览器中设置所匹配的语言环境。

2、jsf页面使用资源包
向jsf页面添加f:loadBundle元素
<f:loadBundle basename="com.thizlinux.i18n.source" var="src"/>
该元素会自动装载(该资源文件是由类加载器加载)对应locale下的资源包文件(根据_de、_zh的后缀进行判断),
加载的资源被影射到由var属性指定的src变量中保存在请求范围内
之后就可以使用值绑定表达式来访问消息字符串:
<h:outputText value="#{src.guessNext}"/>

3、应用程序本地化的设置,也就是Locale的设置
1)页面中:<f:view locale="de">
2)在应用程序配置文件中设置,如前所示的WEB-INF/faces-config.xml
3)程序代码中进行动态设置:
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
viewRoot.setLocale(new Locale("de"));

4、程序代码中从资源包获取错误消息
在jsf的转换和验证阶段如果转换和验证失败,需要通过<h:messages/>和<h:message/>将错误消息回显给用户,为适应本地化的需要,代码中可以从资源包中获取本地化消息字符串并生成错误消息.
1)创建错误消息资源包
目录:com.thizlinux.i18n
资源文件:messages.properties
messages_en.properties
messages_zh.properties
文件内容示例:badCreditCardCharacter=Invalid card number.
badCreditCardCharacter_detail=The card number contains invalid characters.
创建消息资源包需要注意的一点是,每个错误消息需要两个消息字符串:
一个用于概要消息,一个用于细节消息。细节消息的资源ID通过在资源关键字后面添加"_detail"来标识。

2)使用
应用程序可以在配置文件中提供一个资源包名称,例如:
<faces-config>
<application>
<message-bundle>com.thizlinux.i18n.messages</message-bundle>
</application>
</faces-config>
代码中可以通过以下代码获得配置文件所指定的资源包名称
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
String msgBundleName = app.getResourceBundle();
如果msgBundleName为空或没有在配置文件进行配置,在编写代码获取资源时需要硬编码指定(或通过其他方式获得)资源包名称,在有了资源包名称后通过以下代码获得资源字符串:
UIViewRoot viewRoot = context.getViewRoot();
Locale locale = viewRoot.getLocale();//此两行代码获取当前请求场所
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader==null) loader = ClassLoader.getSystemClassLoader();//获得当前类加载器
,如果为null则使
用系统类加载器
ResourceBundle bundle = ResourceBundle.getBundle(msgBundleName,locale,loader);
String msg = bundle.getString(dCreditCardCharacter_detail);
String msg_detail = bundle.getString(dCreditCardCharacter_detail);//获得概要消息和细节消息资源字符串
FacesMessage message = new FacesMessage(msg,msg_detail);//最后生成faces消息

3) 消息格式化器之占位符
在实际应用场景中,可能想让一些消息提供有关错误信息本质的详细信息。
例如,告诉用户其输入的信用卡号中的哪个字符是非法的,可以通过在资源文件的消息
字符串中包含占位符{0}、{1}等等,例如上例messages.properties中可以改为:
badCreditCardCharacter_detail=The card number contains the invalid charater {0}.
下面代码使用消息格式化器接收对象数组参数替换占位符,并返回格式化后的新字串
Object[] params = ...;//如params = new Object[]{ new Character(invalidCharacter) }
MessageFormat formatter = new MessageFormat(msg_detail,locale);
String msg_detail = formatter.format(params);
关于java.text.MessageFormat类的详细信息参考API


分享到:
评论

相关推荐

    jsf框架和国际化

    jsf框架!国际化资源文件!全局化!本地化

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    3.2.1 加载国际化资源文件 132 3.2.2 使用国际化消息 134 3.2.3 动态数据国际化 137 3.2.4 让用户选择语言 142 3.3 使用转换器完成类型转换 143 3.3.1 转换器概述、用途 144 3.3.2 JSF内建转换器 144 3.3.3 使用转换...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...

    JAVA WEB典型模块与项目实战大全

    22.2 关于用户登录的基础知识——国际化资源  22.3 关于用户登录的基础知识——guice框架  22.4 用户登录的具体实现  22.5 小结  第3篇 项目案例实战  第23章 在线音乐管理系统(ajax+jsp+struts 2.x)  ...

    JAVA程序开发大全---上半部分

    12.2.5 Struts 2.0中的国际化编程 221 12.2.6 创建基于POJO的Action 223 12.3 Spring整合Struts 2.0框架 224 12.4 Struts 2.0应用实例:登录系统 227 12.5 本章小结 231 第13章 JPA的开发与应用 232 13.1 JPA规范...

    Spring中文帮助文档

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

    Spring API

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

    Spring攻略(第二版 中文高清版).part2

    11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理 458 11.8 改变永久性存储系统 461 11.8.1 问题 461 11.8.2 解决方案 461 11.4.3 工作原理 461 11.9 日志 ...

    Spring攻略(第二版 中文高清版).part1

    11.7 国际化(I18n)信息属性 458 11.7.1 问题 458 11.7.2 解决方案 458 11.7.3 工作原理 458 11.8 改变永久性存储系统 461 11.8.1 问题 461 11.8.2 解决方案 461 11.4.3 工作原理 461 11.9 日志 ...

    Java经典入门教程pdf完整版

    化,也包括电子政务等,领域涉及:办公自动化OA,客户关系管理CRM,人力资源HR, 企业资源计划ERP、知识管理KM、供应链管理SCM、企业设备管理系统EAM、产品生命 周期管理PLM、面向服务体系架构SOA、商业智能BⅠ、项日管理...

Global site tag (gtag.js) - Google Analytics