posts - 1, comments - 1, trackbacks - 0, articles - 13
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

jsf国际化

Posted on 2007-06-06 17:32 Linden.zhang 阅读(533) 评论(1)  编辑  收藏 所属分类: 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=JSF\u793a\u7bc4  
 hintText=\u8acb\u8f38\u5165\u540d\u7a31\u8207\u5bc6\u78bc  
 nameText=\u540d\u7a31  
 passText=\u5bc6\u78bc  
 commandText=\u9001\u51fa  
   
(所有资源文件放入你的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>  

评论

# re: jsf  回复  更多评论   

2008-01-13 19:28 by re: jsfre: jsfre: jsfre: jsfre: jsf
内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容) 内容(请不要发表任何与政治相关的内容)

只有注册用户登录后才能发表评论。


网站导航: