Struts框架_7 国际化

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"/>


IV.国际化资源文件加载的顺序如何呢?离当前Action较近的将被优先加载。
2).如何在页面上和Action类中访问国际化资源文件的value值
I.在Action类中。若Action实现了TextProvider接口,则可以调用其getText()方法获取value值
>通过继承ActionSupport的方式。

注:{若label标签使用%{ getText( ' username')}的方式就也可以从国际化资源文件中获取value值了,因为此时在对象栈中有DefaultTextProvider的一个实例,该对象 中提供了访问国际化资源文件的getText()方法,同时还需要通知struts2框架1abel中放入的不再是一 个普通的字符串,而是一 个OGNL表达式,所以使用%{}把getText()包装起来,以强制进行OGNL解析。
}

lable获取国际化资源文件中的value:

当主题为simple上述方法得不到资源文件中的值,可以用:

页面上可以直接使用<s:text name="" />标签来访问国际化资源文件里的value值。

II.页面上可以使用s:text 标签;对于表单标签可以使用表单标签的key属性值
>若有占位符,则可以使用s:text 标签的s:param子标签来填充占位符
>可以利用标签和OGNL表达式直接访问值栈中的属性值(对象栈和Map栈)



3).实现通过超链接切换语言.

I. 关键之处在于知道Struts2 框架是如何确定Local 对象的!
II.可以通过阅读I18N拦截器知道。
III.具体确定Locale对象的过程:
> Struts2使用i18n拦截器处理国际化,并且将其注册在默认的拦截器栈中
> 118n拦截器在执行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对象。
IV.具体实现: 只需要在超连接的后面附着request_ locale 的请求参数,值是语言国家代码。
<a href= "testI18n. action?request_ locale=en_ _US" >English</a>
<a href="testI18n. action?request_ _locale=zh_ _CN">中文</a> 。
注意:超链接必须是一个Struts2的请求,即使118n拦截器工作!|

猜你喜欢

转载自blog.csdn.net/XiaoXiao_Lin/article/details/109388379