JSF 2国际化示例

在JSF应用程序中,您可以像下面这样以编程方式更改应用程序的语言环境:

//this example change locale to france
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale('fr');

它使JSF轻松支持国际化或多种语言。

完整的JSF国际化示例

在本教程中,我们向您展示一个JSF 2.0 Web应用程序,该应用程序显示一个欢迎页面,从属性文件中检索欢迎消息,并根据所选语言动态更改欢迎消息。

1.项目文件夹

此示例的目录结构。

jsf2-internationalization-folder

2.属性文件

这是两个用于存储英文和中文消息的属性文件。

welcome.properties

welcome.jsf = Happy learning JSF 2.0

welcome_zh_CN.properties

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

注意
对于UTF-8或非英语字符(例如中文),应使用native2ascii工具对其进行编码。

3. faces-config.xml

将上述属性文件包括到您的JSF应用程序中,并声明“ en”作为您的默认应用程序语言环境。

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
     <application>
     	   <locale-config>
     	        <default-locale>en</default-locale>
     	   </locale-config>
	   <resource-bundle>
		<base-name>com.mkyong.welcome</base-name>
		<var>msg</var>
	   </resource-bundle>
     </application>
</faces-config>

4.托管豆

一个托管bean,提供语言选择列表和一个值更改事件侦听器,以编程方式更改语言环境。

LanguageBean .java

package com.mkyong;

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 LanguageBean 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;
	}

	//value change event listener
	public void countryLocaleCodeChanged(ValueChangeEvent e){
		
		String newLocaleValue = e.getNewValue().toString();
		
		//loop country map to compare the locale code
                for (Map.Entry<String, Object> entry : countries.entrySet()) {
        
        	   if(entry.getValue().toString().equals(newLocaleValue)){
        		
        		FacesContext.getCurrentInstance()
        			.getViewRoot().setLocale((Locale)entry.getValue());
        		
        	  }
               }
	}

}

5. JSF页面

一个JSF页面,用于显示来自属性文件的欢迎消息,并将值更改事件侦听器附加到下拉框。

<?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>
    	
    	<h1>JSF 2 internationalization example</h1>
		
     <h:form>
			
	<h2>
		<h:outputText value="#{msg['welcome.jsf']}" />
	</h2>
			
	<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>

6.演示

网址: http:// localhost:8080 / JavaServerFaces / faces / default.xhtml

默认情况下,显示语言环境英语。

jsf2-internationalization-example-1

如果用户更改下拉框语言,它将触发值更改事件侦听器并相应地更改应用程序区域设置。

jsf2-internationalization-example-2

下载源代码

下载它– JSF-2-Internationalization-Example.zip (11KB)

参考

  1. JSF 2.0中的资源包
  2. 创建语言环境(Oracle教程)
  3. Spring MVC国际化示例
  4. W3C字符集

翻译自: https://mkyong.com/jsf2/jsf-2-internationalization-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值