i18n怎么理解?internationalization 就是 i 和n中间有18个字母 ,楼主数过了。
Struts 国际化 i18n
Jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title><s:text name="login.title"></s:text></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){
$("#lan").change(function(){
window.location.href="changeLocal.action?msg="+$("#lan").val();
});
});
</script>
</head>
<body>
<s:select list="#{'1':'简体中文','2':'英文','3':'繁体中文'}" id="lan" name="lan" value="msg" label="语言选择"></s:select>
<br>
<s:text name="login.usrname"></s:text>
<input type="text">
<s:text name="login.usrpwd"></s:text>
<input type="text">
<br>
<button>
<s:text name="login.lgnbtn"></s:text>
</button> </body></html>
这些文件都在src里面
然后来三种语言的properties文件。
文件的命名前面一段是固定格式,后面一段我们可以通过IE的Internet选项里面的语言去查找后缀
文件名(对应的是英语) globalMessages_en_US.properties
内容:
login.title=Login page
login.usrname=UserName
login.usrpwd=Password
login.lgnbtn=login in
文件名(对应的是简体中文) globalMessages_zh_CN.properties
内容:
login.title=\u6B22\u8FCE\u767B\u5F55
login.usrname=\u7528\u6237\u540D
login.usrpwd=\u5BC6\u7801
login.lgnbtn=\u767B\u5F55
文件名(对应的是繁体中文)globalMessages_zh_TW.properties
内容:
login.title=\u6B61\u8FCE\u767B\u9304
login.usrname=\u7528\u6236\u540D
login.usrpwd=\u5BC6\u78BC
login.lgnbtn=\u767B\u9304
我们需要用到国际化通常还需要配置一些常量
同样也是一个配置文件
文件名(对应的是繁体中文)struts.properties
内容:
#struts.objectFactory=spring
struts.action.extension=action,jsp
struts.tag.altSyntax=true
struts.enable.DynamicMethodInvocation=false
#这一句就是我们所需要的
struts.custom.i18n.resources=globalMessages
struts.i18n.encoding=UTF-8
struts.devMode=true
struts.i18n.reload=true
#默认中文
struts.locale=zh_CN
struts.serve.static.browserCache=false
struts.url.includeParams=none
struts.multipart.parser=jakarta
struts.multipart.saveDir=java.io.tmpdir
struts.multipart.maxSize=1000000000
struts.configuration.xml.reload=true
struts.ognl.allowStaticMethodAccess=true
#包名配置
struts.convention.package.locators=act
#更改默认的根路径
struts.convention.result.path=/
配置完成之后我们需要相应的Action进行处理,ACtion是继承了ActionSupport的类:代码如下
package com.act;
import java.util.Locale;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@ParentPackage("struts-default")
public class i18nAct extends ActionSupport {
private String msg;
@Override
@Action(value = "changeLocal", results = { @Result(location = "index.jsp") })
public String execute() throws Exception {
// TODO Auto-generated method stub
if("1".equals(msg)){
ActionContext.getContext().setLocale(Locale.CHINA);
}else if("2".equals(msg)){
ActionContext.getContext().setLocale(Locale.US);
}else if("3".equals(msg)){
ActionContext.getContext().setLocale(Locale.TAIWAN);
}
return SUCCESS;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
然而国际化我们使用也可以使用偷梁换柱之术,将其名字改成我们自己的。不是国际化,是山寨化