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值 |
<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> |
<s:text name = “uesrname”/> |
的方式。
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
拦截器工作!
相关文章推荐
- JavaWeb学习总结——Struts2入门与实例(尚硅谷_佟刚老师)
- JavaWeb学习总结——Struts2上传下载(尚硅谷_佟刚老师)
- JavaWeb学习总结——JavaWEB_Session(尚硅谷_佟刚老师)(
- JavaWeb学习总结——通用标签和表单标签(尚硅谷_佟刚老师)
- JavaWeb学习总结——MVC(尚硅谷_佟刚老师)
- JavaWeb学习总结——JavaWEB_JSP(尚硅谷_佟刚老师)
- JavaWeb学习总结——JavaWEB_Servlet(尚硅谷_佟刚老师)
- struts2表单验证初步及国际化实现(学习总结)
- struts2表单验证初步及国际化实现(学习总结)
- 关于struts2和ext国际化的总结
- struts2第六天总结(国际化)
- 3.尚硅谷_佟刚_SSH 整合案例_Spring整合Struts2
- javaweb学习总结(三十一)——国际化(i18n)
- Struts2的国际化与上课总结
- javaweb学习总结(三十一)——国际化(i18n)
- javaweb学习总结(三十一)——国际化(i18n)
- struts2表单验证初步及国际化实现(学习总结)
- struts2的国际化 i18n 总结
- struts2表单验证初步及国际化实现(学习总结)
- Struts2的国际化与上课总结