您的位置:首页 > 编程语言 > Java开发

JavaWeb学习总结——Struts2国际化(尚硅谷_佟刚老师)

2016-11-19 09:35 423 查看

一、国际化的目标

1). 如何配置国际化资源文件

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

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

全局资源文件

      >命名方式:basename_language_country.properties

      >struts.xml  <constantname="struts.custom.i18n.resources" value="baseName"/>

④国际化资源文件加载的顺序如何呢 ?

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

假设我们在某个 ChildAction 中调用了getText("username"):

(1) 加载和 ChildAction 的类文件在同一个包下的系列资源文件 ChildAction.properties

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

(3) 加载 ChildAction 父类 Parent,且和 Parent
在同一个包下的 baseName 为Parent.properties 系列资源文件。

(4) 若 ChildAction 实现 ModelDriven 接口,则对于getModel()方法返回的model
对象,重新执行第(1)步操作。

(5) 查找当前包下 package.properties 系列资源文件。

(6) 沿着当前包上溯,直到最顶层包来查找 package.properties 的系列资源文件。

(7) 查找 struts.custom.i18n.resources 常量指定 baseName
的系列资源文件。

(8) 直接输出该key的字符串值。

2). 如何在页面上和 Action
类中访问国际化资源文件的  value

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


若label标签使用%{getText(‘username’)}的方式可以从国际化资源文件中获取value值

页面上可以使用<s:text name = “”/>标签来访问国际化资源中的Value值

i18n.jsp

    <s:form
action=""
>
<s:textfield
name="username"
label="%{getText('username')}">
</s:textfield>
       <!-- key 的方式是直接上资源文件中获取 value
值 -->
       <s:textfield
name="username"
key="username"></s:textfield>
       <s:password
name="password"
key="password"></s:password>
       <s:submit
key="submit"
value="%{getText('submit')}"></s:submit>   
</s:form>
注:如果用simple主题的话,文字无法显示,需要在每行前面加上

<s:text name = “uesrname”/>

      >通过继承 ActionSupport
的方式。

II. 页面上可以使用 s:text
标签;
对于表单标签可以使用表单标签的 key
属性值

      >若有占位符,则可以使用 s:text
标签的s:param
子标签来填充占位符

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

       OGNL表达式:

1:读取从后台传递的值
%{#name}:表示从值栈的map中取值
%{name}:表示从值栈的对象栈中取值
%{#request.name}:表示从request域中取值

 

time=Time:{0}

<s:text name="time">

<s:param value="date"></s:param>

</s:text>

time2=Time:${date}

<s:text name="time2"></s:text>

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

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

II. 可以通过阅读 I18N
拦截器知道.

III. 具体确定 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
对象。

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

      <ahref="testI18n.action?request_locale=en_US">English</a>

      <ahref="testI18n.action?request_locale=zh_CN">中文</a>

      >注意:
超链接必须是一个 Struts2
的请求,即使 i18n
拦截器工作!

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: