Struts2框架对Java程序国际化进行了进一步的封装,从而简化了国际化应用程序的开发
原理
Struts2提供了一个名i18n的拦截器,在默认情况下将其注册到拦截器栈defaultStack中。
在执行Action方法前,i18n拦截器查找请求中的一个名为
“request_locale”的参数。
如果其存在,拦截器就将其作为参数,转化成Locale对象,并将其设为用户默认的区域(Locale),
最后,将此Locale对象以“WW_TRANS_I18N_LOCALE”为名保存到Session中。
一旦用户Session中存在名为“WW_TRANS_I18N_LOCALE”属性,则该属性指定的Locale将会作为浏览者的默认Locale。
步骤:
1.
建立国际化资源文件
以
properties
为扩展名的文本文件,该文本文件以
key=value
的形式存储国际化消息。
资源文件的命名:
basename_language_country.properties
注释:basename时可以自定义的资源文件名,language不能自定义,
它代表地区语言代码,简体中文是zh,英语是en等,country也不能自定义,
它代表国家地区代码,中国就是CN,美国就是US等。
messageResources_zh_CN.properties
和
messageResources_en_US.properties
就是合法有效的国际化资源文件名。
资源文件放在
classes
下面,即项目
/
src
/
messageResources_zh_CN.properties
文件内容:
login.user.name=用户名
login.user.password=密码
login.user.name.inavlid=输入用户名无效
messageResources_en_US.properties
文件内容:
login.user.name =UserName
login.user.password =Password
login.user.name.inavlid= UserName Inavlid
2.
加载全局资源文件
在
struts.xml
中配置
struts.custom.i18n.resources
常量的值来指定资源文件的基本名
:
<constantname="struts.custom.i18n.resources" value=" messageResources"></constant>
在
classpath
下添加国际化资源文件
messageResources _zh_CN.properties
messageResources _en_US.properties
3.
访问国际化消息
Struts2
访问国际化消息主要有如下方式:
(1)JSP页面中:可以使用Struts2提供的<s:text…/>标签,用name属性指定一个国际化资源文件中的key。
<s:text name=”login.user.username” />
主要用于国际化 文本字体 ,或链接,说白了就是一些文字(仅仅是)。
(2)表单元素的label中:可以为该表单标签指定一个key属性,它指定一个国际化资源文件中的key
<s:textfield name="loginname" key="login.user.username "/>
(3)
Action类中:可以使用ActionSupport类的getText(String aTextName)方法,aTextName指定一个国际化资源文件中的key。
Public Stringlogin() {
//以下判断如果输入的是不合法的用户名
if(result==2) {
this.addFieldError("loginname",getText("UserName Inavlid "));
}
}
(4)在使用校验配置文件时输出国际化消息 可以通过Message标签的key属性
<field name="username">
<field-validator type="requiredstring" short-circuit="false">
<param name="trim">true</param>
<message
key="username.xml.required"/> </field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<messagekey=" login.user.name.inavlid " />
</field-validator>
</field>
(5)
Struts2
中提供了两种方式来填充消息字符串中的占位符:
JSP页面:通过在<s:text …>标签中使用多个<s:param…>标签来填充占位符。
第一个<s:param>值</s:param>标签指定第一个占位符值,依此类推。
Action类:通过调用ActionSupport类中的getText(String aTextName, List args)或getText(String aTextName, String[]
args)方法来填充占位符