JSF 國際化示例

2018-02-22 13:54 更新

JSF教程 - JSF國際化示例


以下部分顯示如何在JSF中使用國際化。

國際化是一種我們可以用來顯示狀態(tài)消息,GUI組件標(biāo)簽,貨幣,日期用不同語言的技術(shù)。

顯示的文本不是在程序中硬編碼,而是存儲在資源束中的源代碼之外并動態(tài)加載。

使用國際化的步驟

首先,我們需要創(chuàng)建一個包含消息的屬性文件。為每個區(qū)域設(shè)置創(chuàng)建屬性文件。通常一個語言環(huán)境用于一種語言。

屬性文件的名稱應(yīng)為<file-name> _ <locale> .properties格式。

默認(rèn)區(qū)域設(shè)置可以在文件名中省略。

以下是來自messages.properties文件。

greeting=Hello World!

以下是來自messages_fr.properties文件。 fr是法語。

greeting=Bonjour tout le monde!

然后,更新faces-config.xml

<application>
   <locale-config>
      <default-locale>en</default-locale>
      <supported-locale>fr</supported-locale>
   </locale-config>
   <resource-bundle>
      <base-name>com.w3cschool.messages</base-name>
      <var>msg</var>
   </resource-bundle>
</application>

最后,我們可以使用resource-bundle var。

<h:outputText value="#{msg["greeting"]}" />

例子

以下代碼來自welcome_zh_CN.properties。

welcome.jsf = \u5feb\u4e50\u5b66\u4e60 JSF 2.0

以下代碼來自demo.xhtml。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      >
     
    <h:body>
    <h:form>
      <h3>
        <h:outputText value="#{msg["welcome.jsf"]}" />
      </h3>
      
      <h:panelGrid columns="2">
        
        Language : 
        <h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
          valueChangeListener="#{language.countryLocaleCodeChanged}">
             <f:selectItems value="#{language.countriesInMap}" /> 
           </h:selectOneMenu>
      </h:panelGrid>
    </h:form>
    </h:body>
</html>

下面的代碼來自UserBean.java。

package cn.w3cschool.common;


import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
 
@ManagedBean(name="language")
@SessionScoped
public class UserBean implements Serializable{
  
  private static final long serialVersionUID = 1L;
  
  private String localeCode;
  
  private static Map<String,Object> countries;
  static{
    countries = new LinkedHashMap<String,Object>();
    countries.put("English", Locale.ENGLISH); //label, value
    countries.put("Chinese", Locale.SIMPLIFIED_CHINESE);
  }

  public Map<String, Object> getCountriesInMap() {
    return countries;
  }

  
  public String getLocaleCode() {
    return localeCode;
  }


  public void setLocaleCode(String localeCode) {
    this.localeCode = localeCode;
  }


  public void countryLocaleCodeChanged(ValueChangeEvent e){
    
    String newLocaleValue = e.getNewValue().toString();
    
        for (Map.Entry<String, Object> entry : countries.entrySet()) {
        
          if(entry.getValue().toString().equals(newLocaleValue)){
            
            FacesContext.getCurrentInstance()
              .getViewRoot().setLocale((Locale)entry.getValue());
            
          }
        }

  }

}

以下代碼來自welcome.properties。

welcome.jsf = Happy learning JSF 2.0
下載 Internationalization.zip

運行

將生成的WAR文件從目標(biāo)文件夾復(fù)制到Tomcat部署文件夾,并運行Tomcat-Install-folder/bin/startup.bat。

Tomcat完成啟動后,在瀏覽器地址欄中鍵入以下URL。

http://localhost:8080/simple-webapp/demo.xhtml
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號