首页 > 代码库 > Struts2的国际化(二)-利用超链接实现动态加载国际化资源文件

Struts2的国际化(二)-利用超链接实现动态加载国际化资源文件

原理:程序是根据Locale来确定国际化资源文件,因此关键之处在于知道 Struts2 框架是如何确定 Local 对象的 !

由于Struts2 使用 i18n 拦截器处理国际化,并且将其注册在默认的拦截器中,因此,可以通过阅读 I18N 拦截器知道。

具体确定 Locale 对象的过程:

> Struts2 使用 i18n 拦截器 处理国际化,并且将其注册在默认的拦截器栈中

> i18n拦截器在执行Action方法前,自动查找请求中一个名为 request_locale 的参数。

 如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。
 并把其设置为 session 的 WW_TRANS_I18N_LOCALE 属性

> 若 request 没有名为request_locale 的参数,则 i18n 拦截器会从 Session 中获取 WW_TRANS_I18N_LOCALE 的属性值,
 若该值不为空,则将该属性值设置为浏览者的默认Locale

> 若 session 中的 WW_TRANS_I18N_LOCALE 的属性值为空,则从 ActionContext 中获取 Locale 对象。

流程图如下图所示:

 

具体实现: 只需要在超连接的后面附着 request_locale 的请求参数, 值是 语言国家 代码.

<a href="http://www.mamicode.com/testI18n.action?request_locale=en_US">English</a>
<a href="http://www.mamicode.com/testI18n.action?request_locale=zh_CN">中文</a>

> 注意: 超链接必须是一个 Struts2 的请求(经过Action执行), 即使 i18n 拦截器工作!