`

JSF国际化

阅读更多
JSF的国际化(Internnationalization)信息处理是基于Java对国际化的支援,
您可以在一个信息资源档中统一管理信息资源,资源文件的名称是.properties,
而內容是名称与值的配对,例如:

messages.properties

titleText=JSF Demo
hintText=Please input your name and password
nameText=name
passText=password
commandText=Submit

资源档名称由basename加上语言与地区来组成,例如:

basename.properties
basename_en.properties
basename_zh_TW.properties  
沒有指定语言与地区的basename是预设的资源档名称,JSF会根据浏览器送來的Accept-Language header中的內容来決定该使用哪一个资源档名称,例如:


Accept-Language: zh_TW, en-US, en


     如果浏览器送来这些header,则预设会使用繁体中文,接著是美式英文,再来是英文语系,如果找不到对应的信息资源档,则会使用预设的信息资源档。


     由于信息资源档必須是ISO-8859-1编码,所以对于非西方语系的处理,必须先将之转换为Java Unicode Escape格式,例如您可以先在信息资源档中写下以下的內容:

messages_zh_TW.txt

titleText=JSF示範
hintText=請輸入名稱與密碼
nameText=名稱
passText=密碼
commandText=送出



然后使用JDK的工具程式native2ascii来转换,例如:


native2ascii -encoding Big5 messages_zh_TW.txt messages_zh_TW.properties


转换后的內容会如下:

messages_zh_TW.properties

titleText=JSFu793au7bc4
hintText=u8acbu8f38u5165u540du7a31u8207u5bc6u78bc
nameText=u540du7a31
passText=u5bc6u78bc
commandText=u9001u51fa

(所有资源文件放入你的JFS应用的WEB-INF/classes目录下)

接下来您可以使用<f:loadBundle>标记來指定载入信息资源,一个例子如下:

index.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=UTF8"%>

<f:view>
<f:loadBundle basename="messages" var="msgs"/>

<html>
<head>
<title><h:outputText value="#{msgs.titleText}"/></title>
</head>
<body>

     <h:form>
         <h3><h:outputText value="#{msgs.hintText}"/></h3>
         <h:outputText value="#{msgs.nameText}"/>:
                 <h:inputText value="#{user.name}"/><p>
         <h:outputText value="#{msgs.passText}"/>:
                 <h:inputSecret value="#{user.password}"/><p>
         <h:commandButton value="#{msgs.commandText}"
                         actionListener="#{user.verify}"
                         action="#{user.outcome}"/>
    </h:form>

</body>
</html>

</f:view>

    如此一來,如果您的浏览器预设接受zh_TW语系的话,则页面上就可以显示中文,否則预设将以英文显示,也就是messages.properties的內容,为了能显示多国语系,我们设定网页编码为UTF8。


<f:view>可以设定locale属性,直接指定所要使用的语系,例如:


<f:view locale="zh_TW">
<f:loadBundle basename="messages" var="msgs"/>

    直接指定以上的話,则会使用繁体中文来显示,JSF会根据<f:loadBundle>的basename属性加上<f: view>的locale属性來決定要使用哪一个信息资源档,就上例而言,就是使用messages_zh_TW.properties,如果设定 为以下的话,就会使用messages_en.properties:


<f:view locale="en">
<f:loadBundle basename="messages" var="msgs"/>



您也可以在faces-config.xml中设定语系,例如:


<faces-config>
     <application>
         <local-config>
             <default-locale>en</default-locale>
             <supported-locale>zh_TW</supported-locale>
         </local-config>
     </application>

.....
</faces-config>


     在<local-config>一定有一个<default-locale>,而<supported-locale>可以有好几个,这告訴JSF您的应用程序支援哪些语系。


     当然,如果您可以提供一个选项让使用者选择自己的语系会是更好的方式,例如根据user这个Bean的locale属性来决定页面语系:


<f:view locale="#{user.locale}">
<f:loadBundle basename="messages" var="msgs"/>


在页面中设定一个表单,可以让使用者选择语系,例如设定单选钮:


<h:selectOneRadio value="#{user.locale}">
      <f:selectItem itemValue="zh_TW"
                    itemLabel="#{msgs.zh_TWText}"/>
      <f:selectItem itemValue="en"
                    itemLabel="#{msgs.enText}"/>
</h:selectOneRadio>

 

 

FacesContext context = FacesContext.getCurrentInstance();
  String bundleName = context.getApplication().getMessageBundle();
        ResourceBundle messageBundle = ResourceBundle.getBundle(bundleName,context.getViewRoot().getLocale());
        String prompt = messageBundle.getString(key);

分享到:
评论

相关推荐

    JSF国际化范例 源代码

    JSF国际化范例,源代码 JSF国际化范例,源代码 JSF国际化范例,源代码

    jsf国际化

    一个例子:jsf国际化

    JSF2中实现国际化

    NULL 博文链接:https://zhanghong.iteye.com/blog/852107

    jsf实现多语言国际化demo

    jsf实现多语言国际化demo

    JSF.rar_JSF_eclipse工程

    JSF国际化源代码,可加入eclipse工程使用.

    jsf框架和国际化

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

    jsf常用文档datatable行样式,frameset及树型目录dtree,jsf滚动组件

    datatable行样式 frameset及树型目录dtree jsf滚动组件 jsf实现排序功能 jsf datetable行编辑的实现 jsf事件 jsf国际化 jsf验证与消息

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

    jsf1.2的国际化例子,特殊简单,想学习的初学者可以看下。老鸟不用看。

    JSF学习用的PPT

    此PPT介绍了1、JSF预准备 2、 JSF开发环境搭建 3、JSF入门开发 4、 JSF事件处理机制 5、 JSF国际化 6 、JSF验证器 7、JSF的UI(标签库)

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

    第9章 JSF的托管Bean和国际化课件及源程序 Java国际化实例 I18N_test managedBeanTest

    JSF教程 中文版

    部分内容截取: 1. 入门 1.1 简介JSF 1.2 第一个JSF程序 1.3简单的导航 Navigation 1.4导航规则设置 1.5 JSF Expression Language 1.6国际化信息 ......

    JSF基础教程 简体中文

    o 国际化讯息 Managed Beans JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在组态档案中,您只要修改组态档案,就可以修改 Bean 之间的相依关系。 o Backing Beans o Beans 的组态与设定 o Beans...

    整合jsf hibernate spring实例

    部门人员一对多的CRUD操作 hibernate: 管理实体关系映射 spring:数据源配置与获得session IOC依赖注入 和 AOP 事务管理 jsf : backing bean的操作 ... jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定

    JSF标签,JSF的使用

    JSF主要由两个部分组成:一套功能强大的API函数,用来表示UI组件、管理组件状态、处理事件、进行输入有效性验证,以及对国际化和可访问性的支持;一套包含各种页面元素的并允许自定义的JSP标签库,用来在JSP页面中...

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

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

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

    NULL 博文链接:https://redhacker.iteye.com/blog/1059967

    jsf2项目开发及所需各种标签集合

    支持jsf2,p标签,h标签,rich标签,f标签,国际化多语言支持,ajax,以及项目的完整搭建,异常处理机制,jpa的数据操作控制等

    jsf1.2+spring3.0+hibernate3.3例子-单表增删改查

    使用jsf1.2+spring3.0+hibernate3.3实现集成,利用annotation实现自动对象管理注入,用户表的登录增删改查操作,包括验证码ajax集成,消息机制,国际化处理,自定义转换器,自定义验证器等 qq:38732796 欢迎讨论

    JSF入门必看

    1.1 简介 JSF 1.2 第一个 JSF 程序 1.3 简单的导航 Navigation 1.4 导航规则设置 1.5 JSF Expression Language 1.6 国际化信息 2. Managed Beans

    JSF入门pdf

    1.6国际化信息 2. Managed Beans 2.1 Backing Beans 2.2 Beans的配置与设定 2.3 Beans上的List, Map 3. 数据转换与验证 3.1 标准转换器 3.2自定义转换器 3.3标准验证器 3.4自定义验证器 3.5错误信息处理 3.6 自定义...

Global site tag (gtag.js) - Google Analytics