`
foryougeljh
  • 浏览: 116683 次
  • 性别: 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国际化范例”中,我们重点探讨如何在JSF应用中实现多语言支持,即国际化(i18n)。这是一项关键功能,因为它允许应用程序为不同地区的用户提供本地化的体验。 国际化通常涉及以下几个核心概念: 1. **...

    JSF2中实现国际化

    总的来说,JSF 2提供了强大的国际化支持,通过资源bundle和适当的Managed Bean配置,我们可以轻松地为不同地区的用户提供本地化的界面。在实际项目中,可能还需要考虑更多细节,如日期、数字格式等的本地化,但这...

    jsf实现多语言国际化demo

    在JavaScript Server Faces (JSF) 中,实现多语言国际化是一项重要的功能,它允许应用程序为不同地区的用户提供...这个过程涉及到资源文件的创建、配置文件的设置以及视图层的使用,是一个全面的 JSF 国际化实现示例。

    jsf框架和国际化

    在JSF中,资源文件通常以`.properties`格式保存,并放置在`src/main/resources`目录下,以`com/example/app/i18n`为例,可以创建`messages.properties`作为默认语言(通常是英文),然后为其他语言创建类似`...

    jsf简单的国际化(jsf1.2)

    总的来说,JSF1.2的国际化实现并不复杂,主要是通过资源包管理和EL表达式来完成。对于初学者,这是一个很好的起点来理解Web应用的国际化原理。虽然这个主题相对简单,但对于开发多语言支持的应用程序至关重要。

    ADF(JSF)框架中使用国际化

    1. **资源bundle**:国际化的核心是资源bundle,它是一个包含键值对的文件,其中键是消息的唯一标识符,值是不同语言下的实际文本。例如,`hello.message=Hello, World!`。这些资源bundle文件通常以`.properties`为...

    JSF.rar_JSF_eclipse工程

    1. `www.pudn.com.txt`:这通常是一个链接或说明文件,可能包含了更多关于JSF国际化资源的来源信息,比如在哪里下载或获取更多的帮助文档。Pudn.com是一个中国的技术分享网站,开发者可能会在那里找到相关的教程、源...

    JSF示例程序(很详细)

    - **资源文件**:如`.properties`或`.css`,包含了国际化文本和样式表,用于美化页面和实现多语言支持。 - **库和依赖**:可能包括JSF实现库(如Mojarra)、其他Java库和Web容器所需的配置文件。 学习这个JSF示例...

    core jsf 1.2 jsf 核心

    国际化与本地化 JSF 1.2支持资源包,允许开发者为不同地区和语言提供本地化的消息和标签。通过`&lt;f:loadBundle&gt;`标签,可以加载相应的资源文件。 ### 10. 整合其他技术 JSF 1.2能够很好地与其他Java EE技术(如...

    JSF框架学习资

    3. **国际化资源**:`&lt;application&gt;`元素内的`&lt;resource-bundle&gt;`配置了应用的国际化资源,包括`base-name`(资源文件的基础包名)和`var`(在页面中引用资源的变量名)。 4. **受管Bean(Managed Beans)**:`...

    MyEclipse下开发JSF

    综上所述,JSF在MyEclipse中的开发流程涵盖了环境配置、项目创建、JSF功能添加以及国际化资源的管理。MyEclipse作为强大的开发工具,极大地简化了JSF应用的开发过程,使得开发者可以更加专注于业务逻辑和用户界面的...

    第9章 JSF的托管Bean和国际化课件及源程序

    在JSF中,实现国际化通常涉及到资源包(Resource Bundle),这是一个包含不同语言版本文本的文件。这些文件以`.properties`格式保存,如`messages.properties`(默认语言)和`messages_en.properties`(英语版本)。...

    jsf标签官方帮助文档

    6. **国际化和本地化**:JSF支持多语言环境,文档会涵盖如何配置资源束来实现内容的国际化和本地化。 7. **自定义标签库**:如果你需要扩展JSF的功能,自定义标签库是必不可少的。文档将指导你如何创建和使用自定义...

    JSF与Facelets应用程序

    6. **国际化和本地化**: JSF支持资源束,使得应用程序可以根据用户的区域设置提供不同的文本和格式。 7. **Facelets模板和组件**: Facelets的模板系统允许创建可重用的布局和组件,提高了代码的复用性和一致性。...

    JSF框架的demo项目

    在本demo项目中,你可能发现包含不同语言版本的资源文件。 总的来说,这个"JSF框架的demo项目"涵盖了JSF的基础知识,包括组件使用、生命周期、Facelets视图、Managed Bean、事件处理、数据验证以及国际化。通过深入...

    jsf1.2 jar包下载

    6. **国际化和本地化支持**:JSF 1.2加强了对多语言环境的支持,开发者可以轻松地为应用添加不同语言的资源文件。 7. **Ajax支持**:虽然不如后续版本的AJAX功能强大,但JSF 1.2已经开始引入了部分异步更新功能,...

    基于JSF全注解框架

    5. **资源和国际化** 使用`@ResourceBundle`注解,开发者可以轻松地集成资源文件,实现多语言支持。只需在Bean类上添加此注解,并指定资源文件的基名,即可在不同国家和地区显示相应的文本。 6. **导航规则** ...

    JSF API帮助文档

    **JSF API** 还提供了许多其他功能,如国际化支持、错误处理和事件传播等。这个帮助文档会详细解释每个类、接口和方法,帮助开发者深入理解JSF的工作原理,从而更高效地利用这个框架构建健壮的Web应用程序。 综上所...

Global site tag (gtag.js) - Google Analytics