zoukankan      html  css  js  c++  java
  • struts2国际化

    struts2国际化我通过一个Demo来理解的。

    国际化的配置文件包括:1.全局配置文件的国际化  2.包下配置文件的国际化   3.Action的国际化。如下图所示:

    需要注意的是,国际化的配置文件命名规则是: resource_country_language.properties。

    其中country表示国家或地区,它的取值由ISO-639定义的大写的、两个字母组成的代码,以下左表列出了常用的ISO-639语言代码。右表列出了常用的ISO-3166国家和地区代码

    1.global__en_US.properties与global__zh_CN.properties是全局范围资源文件,应放在src下

    global__en_US.properties配置如下:
    id=ID
    name=NAME
    age=AGE
    date=CREATEDATE
    username=(G)username
    password=(G)password
    submit=(G)submit
    chinese=(G)Chinese
    english=(G)English
    language=(G)Language
    login=(G)Login Page
    firstpage=This is the first page,you can change the language in any pages if you like
    
    global__zh_CN.properties配置如下:
    id=编号
    name=用户名
    age=年龄
    date=申请时间
    username=(G)用户名
    password=(G)密码
    submit=(G)提交
    chinese=(G)中文
    english=(G)英文
    language=(G)语言
    login=(G)登录页面
    firstpage=这是首页,你可以根据你的需求更改语言

    2.package_en_US.properties与package_zh_CN.properties是包范围的配置文件,放在所需要的包内,基名必须package开头的。

    3.LoginAction__en_US.properties与LoginAction__zh_CN.properties是Action范围资源文件,应放在LoginAction.java同一目录下:

       ChangeLocale_en_US.properties与ChangeLocale_zh_CN.properties也是Action范围的资源文件,作用是用来切换国际化的。

    LoginAction_en_US.properties配置如下:
    validate=Username or Password is validate!
    
    LoginAction_zh_CN.properties配置如下:
    validate=用户名或密码错误!
    
    ChangeLocale_en_US.properties配置如下:
    chinese=(A)Chinese
    english=(A)English
    language=(A)Language
    
    ChangeLocale_zh_CN.properties配置如下:
    chinese=(A)中文
    english=(A)英文
    language=(A)语言

    4.action文件的配置

    LoginAction.java代码如下:
    @Action("/login")
    @Results({ @Result(name = "loginSuc", location = "/firstpage.jsp"),
    		@Result(name = "loginErr", location = "/login.jsp") })
    public class LoginAction extends ActionSupport {
    	private String username;
    	private String password;
    
    	public String loginCheck() {
    		if ("admin".equals(username) && "admin".equals(password)) {
    			return "loginSuc";
    		} else {
    			addActionError(getText("validate"));
    			return "loginErr";
    		}
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    }
    
    ChangeLocale.java的代码如下:
    @Action("/changeLocale")
    @Results({ @Result(name = "changeLocaleSuc", location = "/login.jsp") })
    public class ChangeLocale extends ActionSupport {
    	private String key;
    
    	public String changeLocale() {
    		HttpSession session = ServletActionContext.getRequest().getSession();
    		Locale locale;
    		if (key.equals("1")) {
    			locale = Locale.CHINA;
    		} else {
    			locale = Locale.US;
    		}
    		ActionContext.getContext().setLocale(locale);
    		session.setAttribute("WW_TRANS_I18N_LOCALE", locale);
    		return "changeLocaleSuc";
    	}
    
    	public String getKey() {
    		return key;
    	}
    
    	public void setKey(String key) {
    		this.key = key;
    	}
    }

    ChangeLanguage.java的代码如下:

    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;

    import com.opensymphony.xwork2.ActionSupport;

    public class ChangeLanguage extends ActionSupport {

    public Map<String, Locale> getLocales() {
    Map<String, Locale> map = new HashMap<String, Locale>();
    map.put(getText("chinese"), Locale.CHINA);
    map.put(getText("english"), Locale.US);
    return map;
    }
    }

    5.struts.xml中要配置上国际化的信息

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    	<constant name="struts.custom.i18n.resources" value="global"/> <!-- global为国际化配置文件的基名,配置上之后struts会首先默认读取此基名的配置文件 -->
    	<constant name="struts.i18n.encoding" value="UTF-8"/>
    	<constant name="struts.convention.action.fileProtocols" value="jar,zip" />  
    	<constant name="struts.convention.action.includeJars" value=".*?/_wl_cls_gen.*?jar(!/)?" />  
    	<constant name="struts.convention.action.suffix" value="Action" />
    	<constant name="struts.convention.action.mapAllMatches" value="true" />
    	<constant name="struts.convention.default.parent.package"
    		value="struts-default" />
    	<constant name="struts.convention.package.locators" value="action,i18n" />
    </struts>
    

    5.jsp页面国际化的实现

    login.jsp页面中,普通调用通过<s:text name="language"/>来实现,其中name为配置文件中的key名称。form表单中通过<s:textfield name="username" key="username"/>实现,key值为配置文件中的key名称。以此映射关系来对应中英文切换。
    <body>
    	<center>
    		<table>
    			<tr>
    				<td><s:text name="language"/>:</td>
    				<td>
    					<a href="changeLocale!changeLocale?key=1"><s:text name="chinese"/></a>
    					<a href="changeLocale!changeLocale?key=0"><s:text name="english"/></a>
    				</td>
    			</tr>
    		</table>
    		<h1><s:property value="%{getText('login')}"/></h1>
    		<s:actionerror/>
    		<s:form action="login!loginCheck">
    			<s:textfield name="username" key="username"/>
    			<s:password name="password" key="password"/>
    			<s:submit key="submit"/>
    		</s:form>
    	</center>
    </body>

    firstpage.jsp页面:

    <body>
      <s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
      <s:bean id="locales" name="com.yimao.i18n.ChangeLanguage"/>
      <form name="form">
        <s:select
          key="language"
          list="#locales.locales"
          listKey="value"
          listValue="key"
          value="#SESSION_LOCALE==null?locale:#SESSION_LOCALE"
          name="request_locale" onchange="selectLanguage_onchanged()"/>
       </form>
       <s:text name="firstpage"/>
    </body>

    页面实现效果:

    点击语言栏的(A)中文连接页面变成中文显示:

    点击语言栏的(A)英文连接页面变成英文显示:

    英文状态下的提交结果:

    中文状态下的提交结果:

    在这里可以根据下拉列表中的提示进行中英文切换。

    以上是比较简单的实现,更多的实现有待补充。

  • 相关阅读:
    Facebook发布神经蛋分离法,可从嘈杂环境中提取音视频
    前线观察 | AWS re:Invent 2018见闻实录
    SSO
    8-5 Navicat工具与pymysql模块
    saltstack
    nginx 集群介绍
    Docker 持久化存储
    Docker 多机网络
    《深入理解JAVA虚拟机》笔记1
    jquery 学习日记之选择器
  • 原文地址:https://www.cnblogs.com/daisyleamo/p/3061271.html
Copyright © 2011-2022 走看看