浅析struts2的国际化

一、struts2的国际化实现


问题一:如何配置国际化资源文件?有多少种方式去配置呢?

方式一:Action范围资源文件:在Action类文件所在的路径建立名为ActionName_language_country.properties的文件例如:

TestI18nAction类在com.lizhenhua.struts2.i18n这个包下,我们配置的Action范围资源文件就必须是在com.lizhenhua.struts2.i18n包下建立TestI18nAction_zh_CN.properties的文件。

方式二:包范围资源文件:在包的根路径下建立文件名为package_language_country.properties的属性文件,一旦建立,处于该包下的所有Action都可以访问该资源文件。注意:包范围资源文件的baseName就是package,不是Action所在的包名。

方式三:全局资源文件命名方式basename_language_country.properties

必须在struts.xml配置文件中需要配置常量声明

struts.xml
<constant name="struts.custom.i18n.resources" value="baseName">
struts.properties
struts.custom.i18n.resources=baseName

方式四:临时指定资源文件:<s:i18n/>标签的name属性指定临时的国际化资源文件

问题二:国际化资源文件加载的顺序是怎么样的呢?

离当前Action较近的将被优先加载

(1)加载和ChildAction的类文件在同一个包下的系列资源文件ChildAction.properties
(2)加载ChildAction实现的接口Ichild,且和IChildn在同一个包下IChild 。properties系列资源文件

问题三:如何在页面上和Action类中访问国际化资源文件的value值

1.在Action类中,若Action实现了TextProvider接口,则可以调用其getText()方法获取value值

实现步骤:通过继承ActionSupport的方式可以实现TextProvider接口。调用示例如下:

<s:textfield name="username" label="%{getText('username')}"></s:textfield>

2.可以在页面上使用s:text标签对于表单标签可以使用表单标签的key属性值,示例如下:

<s:textfield name="username" key="username"></s:textfield>
若有占位符,则可以使用s:text标签的s:param子标签来填充占位符
<s:text name="time">
    <s:param value="date"></s:param>
    </s:text>

3.若当前页面来自于Action,则可以直接访问Action中的属性值

4.可以利用标签和OGNL表达式直接访问值栈中的属性值(对象栈和Map栈)

第一种方式
time=<Time\:{0}

<s:text name="time">
    <s:param value="date"></s:param>
    </s:text>

第二种方式
    time2=Time\:${date}
   
    <s:text name="time2"></s:text>


问题三:实现超链接切换语言

1.关键之处在于知道Struts2框架是如何确定Local对象的!

2.可以通过阅读I18能拦截器知道

3.具体确定Locale对象的过程

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

2)i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设置为用户默认的Locale(代表国家/语言环境)。并把其设置为session的WW_TRANS_I18N_LOCALE属性

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

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

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

<a href="testI18n.action?request_locale=en_US">English</a> <br/>
    <a href="testI18n.action?request_locale=zh_CN">中文</a> <br/>

超链接:必须经过拦截器的action,而不能直接是jsp页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值