多语言切换功能实现

2011-07-13(Wednesday) 00:00

Step.1 新建测试工程 Fusion Web Application(ADF)

Step.2 创建resource Bundle 文件,如下所示,我创建了三个语言版本的文件。

ScreenConfig_en_US.properties

ScreenConfig_zh_CN.properties

ScreenConfig_ja_JP.properties Step.3 在faces-config.xml中注册以上三个文件。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
<application>
<default-render-kit-id>oracle.adf.rich</default-render-kit-id> <resource-bundle> <base-name>ScreenConfig</base-name> <var>screen</var> </resource-bundle> <locale-config> <default-locale>zh_CN</default-locale> <supported-locale>en_US</supported-locale> <supported-locale>ja_JP</supported-locale> </locale-config> </application>
</faces-config>
Step.4 新建一个测试页面
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<f:view >
<af:document id="d1"> <f:loadBundle basename="ScreenConfig" var="screen"   /> <af:form id="f1">
<af:inputText label="#{screen.test}" id="it1"/>
<af:commandButton text="#{screen.command}" id="en"  partialTriggers="en"
action="#{BackingBean.changeLang}"/>
</af:form>
</af:document>
</f:view>
<!--oracle-jdev-comment:preferred-managed-bean-name:BackingBean-->
</jsp:root>
Step.5 生成的BackingBean中内容如下:
package view;

import java.util.Locale;
import java.util.ResourceBundle;

import javax.faces.context.FacesContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class BackingBean {
public BackingBean() {
} private Locale locale;

public String changeLang() {

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request =
(HttpServletRequest)facesContext.getExternalContext().getRequest();
String flag =
request.getSession().getAttribute("flag") == null ? "ZH" :
request.getSession().getAttribute("flag").toString();

if ("ZH".equals(flag)) {
flag = "EN";
this.setLocale(new Locale("zh", "CN"));
} else if ("EN".equals(flag)) {
flag = "JA";
this.setLocale(new Locale("en", "US"));
} else if ("JA".equals(flag)) {
flag = "ZH";
this.setLocale(new Locale("ja", "JP"));
} request.getSession().setAttribute("flag", flag);
facesContext.getViewRoot().setLocale(locale);
return null;
}

public void setLocale(Locale locale) {
this.locale = locale;
}

public Locale getLocale() {
return locale;

Category: ADF Tagged: ADF