您的位置:首页 > 编程语言 > Java开发

JAVA 初学 i18n 国际化

2016-09-19 20:49 363 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  国际化 java