新建个messageResouce _zh_CN.properties名字的记事本,内容为
loginPage=登录页面
errorPage=错误页面
succPage=成功页面
failTip=对不起,您不能登录!
succTip=欢迎,${0},您已经登录!
viewLink=查看作者李刚已出版的图书
bookPageTitle=作者李刚已出版的图书
bookName=书名:
user=用户名
pass=密 码
在新建个英文的资源文件messageResource_en_US.properties,内容如上,把值改为英文
user=user name
pass=password
前面的user,pass都叫做key,到时根据key来找值。
接着:
native2ascii messageResouce.properties messageResouce_zh_CN.properties
native2ascii 原文件 新生成的文件
上面命令将包含非西欧字符的资源文件处理成标准的ASCII格式,处理完成后生成了一份新文件:messageResouce _zh_CN.properties文件。这个文件的文件名符合资源文件的命名格式,资源文件的文件名命名格式为:
basename_语言代码_国家代码.properties
把两个资源文件考到src目录下,struts.xml中加入
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
value的值和资源文件的前部分名一致。
jsp页面写法:
<s:text name="loginPage"/>直接从资源文件中取值name中的字符为key的名
<s:textfield name="username" key="user"/>这是另一种写法
Struts的页面有一个标签<s:i18n>,可以通过它来指定资源文件的位置。这个标签一般可做为其它标签的父标签,这样其它标签所读取的内容就是<s:i18n>标签所指定的资源文件中的内容。用法如下:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>
<s:i18n name="tmp">
<s:text name="loginPage"/> //读取tmp资源文件中的loginPage的内容
</s:i18n>
</title>
</head>
<body>
<s:i18n name="tmp">
<s:form action="Login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</s:i18n>
</body>
</html>
页面获取后台传的值用
<s:text name="" >
<s:param>${nameError}</s:param>
</s:text>
后台
Locale locale = Locale.getDefault();
ResourceBundle bundle = ResourceBundle.getBundle("messageResource", locale);
nameError = bundle.getString("nameError");
getString("")里的String值是key,nameError是key
通常若查找不到所需要的资源文件中的内容,都是直接输出KEY的字符串值。
选择语言后跳转到后台action,在跳转到一个类,类的写法:
public String getEnglish() {
//设置locale为英语(美国)
Locale locale = Locale.US;
//获取系统默认的国家/语言环境
Locale myLocale = Locale.getDefault();
//根据指定的国家/语言环境加载资源文件
ResourceBundle bundle = ResourceBundle.getBundle("messageResource",locale);
//获取资源文件中的key为hello的value值
System.out.println(bundle.getString("user"));
//设置跳转后页面的locale,就是设置语言
ActionContext.getContext().setLocale(locale);
//设置页面默认的locale,以后可以根据它获得资源文件里的值
Locale.setDefault(locale);
//把locale添加到session里,以后跳转页面时会自动到session里查询WW_TRANS_I18N_LOCALE,看是否有值,若有值就用存的locale。就是页面自动转换成locale的语言。不用每个action类里都设置一遍了。
ActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE",locale);
return SUCCESS;
页面跳转时一定要经过action类,在跳转页面,否则页面语言会出问题。
}