(1)如何配置国际化资源文件
I Action范围的国际化资源文件:在Action类文件中所在的路径建立名为ActionName_language_country.properties的文件.
II 包范围资源文件:在包的根路径下建立名为Package_language_country.properties的属性文件,一旦建立处于该包下的所有Action都可以访问该资源文件.注意:包范围资源文件的baseName就是Package,不是Action所在的包名.例:
III 全局资源文件
~~命名方式[baseName]_language_country.properties
~~struts.xml <!-- 配置国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="[baseName]"></constant>
IV 国际化资源文件的加载顺序—>离当前Action较近的优先被加载.
V 如何在页面上和Action类中访问国家化资源文件的Value值
1)在Action类中,若Action类中实现了TextProvider接口,则可以调用其getText()方法获取Value值(通过继承ActionSupport的方式)
2)JSP页面上访问国际化消息:
~不带占位符:
<s:text name="key"/>
表单元素的 label 属性:可替换为 key 或使用 getText() 方法,并对其进行强制 OGNL 解析
~ 带占位符:
在 <s:text.../>
标签中使用多个 <s:param.../>
标签来填充消息中的占位符。
Struts2 直接在国际化消息资源文件中通过 “${}” 使用表达式,该表达式将从值栈中获取对应的属性值
例:
time=Time:{0}
<s:text name="time">
<s:param value="date"></s:param>
</s:text>
------------------------------------
time2=Time:${date}
<s:text name="time2"></s:text>
(2)实现通过超链接切换语言
I 具体确定Locale对象的过程(可参照i18n拦截器源码)
· Struts2使用i18n拦截器处理国际化,并且将其注册在默认的拦截器栈中.
· i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数,如果该参数存在,拦截器将其作为参数,转换成Locale对象,并将其设为 用户默认的Locale(代表国家/语言环境).并把其设置为session的WW_TRNS_I18n_LOCALE属性
·若request没有名为request_locale的参数,则i18n拦截器会从session中获取WW_TRNS_I18n_LOCALE的属性值,若该值不为空,则从该属性值设置为浏览者的默认Locale
·若session中的WW_TRNS_I18n_LOCALE的属性值为空,则从ActionContext中获取Locale对象
II 具体实现:只需要在超链接的后面附着request_locale的请求参数,值是语言国家代码
<a href="testI18n.action?request_locale=en_US">English</a>
<a href="testI18n.action?request_locale=zh_CN">中文</a>
注:超链接必须是一个struts2请求,即需要i18n拦截器工作