国际化Internationalization-I18N,本地化Localization-L10N)
Java程序国际化主要通过2个类完成:
iava.util.ResourceBundle:用于加载一个资源包。
java.util.Locale:对应一个特定的国家/区域、语言环境。
国际化的资源文件有3个范围:
全局范围:在src目录下:
<constant name="struts.custom.i18n.resources" value="globalMessage"/>
包范围:对应包的根目录下,且基本名称为package
Action范围: 该资源被放置在对应Action类文件的同级目录下,且基本名必须与Action类名一致,比如Action类名为:A.java,那么对应国际化文件命名为A_语言代码_国家代码.properties
调用方式资源文件的顺序是Action范围—>包范围—>全局范围
调用国际化资源
<s:text name=“welcome”>
<s:textfield key=“welcome”/>
<s:textfiled label=“%{getText(‘welcome’)}”/>或
<s:textfiled key=“%{getText(‘welcome’)}”
在校验文件中:
<message key="name.invalid"></message>
或
<message>${getText("name.invalid")}</message>
struts2国际化动态设置语种
在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。
Struts 2.0提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。
例:
<a href="changLan.action?request_locale=zh_CN">中文登录</a>
<a href="changLan.action?request_locale=en_US">English Login</a>
注意:直白的说,想改变游览器的语言只需在提交Action的后面加上request_locale参数并给上其参数(区域语言代码,如:zh_CN是简体中文),struts2的拦截器会自动找到参数所代表的配置文件(***_zh_CN.properties)