JAVA 初学 i18n 国际化

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值