原理:程序是根据Locale来肯定国际化资源文件,所以关键之处在于知道 Struts2 框架是如何肯定 Local 对象的 !session
因为Struts2 使用 i18n 拦截器处理国际化,而且将其注册在默认的拦截器中,所以,能够经过阅读 I18N 拦截器知道。框架
具体肯定 Locale 对象的过程:spa
> Struts2 使用 i18n 拦截器 处理国际化,而且将其注册在默认的拦截器栈中对象
> i18n拦截器在执行Action方法前,自动查找请求中一个名为 request_locale 的参数。blog
若是该参数存在,拦截器就将其做为参数,转换成Locale对象,并将其设为用户默认的Locale(表明国家/语言环境)。
并把其设置为 session 的 WW_TRANS_I18N_LOCALE 属性资源
> 若 request 没有名为request_locale 的参数,则 i18n 拦截器会从 Session 中获取 WW_TRANS_I18N_LOCALE 的属性值,
若该值不为空,则将该属性值设置为浏览者的默认Localeio
> 若 session 中的 WW_TRANS_I18N_LOCALE 的属性值为空,则从 ActionContext 中获取 Locale 对象。test
流程图以下图所示:原理
具体实现: 只须要在超链接的后面附着 request_locale 的请求参数, 值是 语言国家 代码.request
<a href="testI18n.action?request_locale=en_US">English</a>
<a href="testI18n.action?request_locale=zh_CN">中文</a>
> 注意: 超连接必须是一个 Struts2 的请求(通过Action执行), 即便 i18n 拦截器工做!