JAVA 初学 i18n 国际化

来源:互联网 发布:稻谷出糙率计算数据 编辑:程序博客网 时间:2024/04/30 18:40

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=userNamelogin_page_password=passwordlogin_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>

1 0