internationalization ==> i18n ,i后18个字母n
一般应用于开发多语言系统环境中的,后台日志、控制台打印的信息、前后台页面、js提示信息等
获取当前系统默认语言:
strus2:
ServletActionContext.getRequest().getLocale();
jsp:
out.print(request.getLocale());
通常采用xxxx.properties 文件来配置,如:
app_zh_CN.properties、app_en_US.properties
两个properties配置示例:
app_zh_CN.properties为中文配置
login_page_userName=用户名
login_page_password=密码
login_page_loginBtnText=登录
app_en_US.properties为英文配置
login_page_userName=userName
login_page_password=password
login_page_loginBtnText=login
在struts.xml中添加配置:
<!-- 国际化 -->
<constant name="struts.custom.i18n.resources" value="app"></constant>
注意这个value=’app’,这个app就是国际化配置文件的前缀。struts会根据这个前缀去自动匹配。
在后台中使用,如:
/**
*
*/
package com.yz.action;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author zhong
*
*/
public class LoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware {
/** 描述 (@author: yuanzhong) */
private static final long serialVersionUID = 1L;
private String userName;
private String password;
private ServletContext servletContext;
private HttpServletRequest servletRequest;
private HttpServletResponse servletResponse;
public String execute(){
System.out.println("=============execute============");
userName = "ADMIN_execute";
String name = this.getText("login_page_password");
System.out.println("i18n 测试: "+name);
return "success";
}
public String login(){
System.out.println("===========login==============");
userName = "ADMIN_login";
Cookie cookie = new Cookie("loginUser", "ndxfke");
cookie.setMaxAge(24*60*60); //以秒为单位
servletResponse.addCookie(cookie);
servletRequest.getSession().setAttribute("login_user", "ndxfle");
return "success";
}
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;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
public void setServletResponse(HttpServletResponse servletResponse) {
this.servletResponse = servletResponse;
}
@Override
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
}
这里需求说明的时,在action中使用时,需要继承ActionSupport,以便使用该对象中的‘getText()’方法。
如此段代码:
String name = this.getText("login_page_password");
System.out.println("i18n 测试: "+name);
在JSP页面中运用:
首先引用s标签
<%@ taglib prefix="s" uri="/struts-tags"%>
通过s标签获取配置信息,即可
<s:property value="getText('login_page_userName')" />:<input name="username" value="ndxfke">
在js中的使用:
思路是创建相对语言的js文件,将翻译好的语言进行相应的键、值配置,如:
创建 pageMessage_cn.js、pageMessage_en.js 文件,我这里在jsp中使用’request.getLocale().toString()’ 得到的是cn或en,所以这里的js文件后面没有写成cn_ZH或en_US来命名。
js文件进行配置,这里我采取对象的方式编写:
var pageMessage = {
login_page_user_text : "USER",
login_page_password_text : "PASSWORD"
};
var pageMessage = {
login_page_user_text : "用户名",
login_page_password_text : "密码"
};
JSP页面,根据语言环境引入js文件:
<%
String locali18nJs = "pageMessage_"+request.getLocale().toString()+".js";
%>
<script type="text/javascript" src="<%=basePath+"js/"+locali18nJs%>"></script>
<script type="text/javascript">
alert(pageMessage.login_page_user_text);
</script>