struts2资源国际化笔记
首先说一下资源文件的定义范围,分别是全局、包级和类级。
全局的命名方式不限制,只需要在struts.properties或struts.xml中指定即可,如<constant name="struts.custom.i18n.resources"value="messageResource"/>,一般资源文件存放于classes目录下。
包级命名方式为package_language_country.properties,存放于包目录中。
类级也就是Action类级命名方式为actionName_language_country.properties,与actionName类存放同一位置。
其次是它们的加载优先级(参考【Struts2权威指南-基于WebWork核心的MVC开发】):
1. 优先加载系统中保存在ChildAction的类文件相同位置,且actionName为ChildAction的资源文件。(类级查找开始)
2. 如果在1中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在父类ParentAction的类文件相同位置,且actionName为ParentAction的资源文件。
3. 如果在2中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在接口IChildAction的类文件相同位置,且actionName为IChildAction的资源文件。
4. 如果在3中找不到指定key对应的消息,则查找当前包下为package命名的资源文件。(包级查找开始)
5. 如果在4中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包。
6. 如果在5中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定的资源文件。(全局查找开始)
7. 如果在6中找不到指定key对应的消息,则直接输出该key的字条串值。只要任一步骤中找到对应信息上,系统就停止搜索。
注意:以上资源文件的使用针对的只是类国际化。如果需要对jsp进行国际化,可以作以下定义。
1. 可以在页面中使用<s:i18n …/>标签指定国际化的资源文件,然后使用<s:text …/>标签、表单标签(key)输出。如果在指定资源文件中找不到key对应的消息,系统会查找struts.custom.i18n.resources常量指定的资源文件。如果还是找不到则直接输出该key的字条串值。只要任一步骤中找到对应信息上,系统就停止搜索。
2. 当不使用<s:i18n …/>标签指定资源文件是,系统则直接加载struts.custom.i18n.resources常量指定的资源文件进行查找,如果找不到则直接输出该key的字条串值。
最后是如何使用:
1. 在类文件中getText(“key”)
2. OGNL表达式 %{getText("login.text")}
3. 资源文件name所指定的key<s:text name="key"/>
4. 显示国际化信息<s:param value="%{getText(''key'')}"/>
<s:property value="getText('key')"/>
5. 接收Action属性<s:param value="%{username}"/>
6. <s:radio/>标签的国际化显示
<s:radio list="#{1:getText('i18n.sex.male') ,0:getText('i18n.sex.female')}" name="sex" value="1"key="i18n.sex"/>
7. <s:textfieldlabel="%{getText('key')}"/>