Struts2(十二):国际化
来源:互联网 发布:淘宝会员号是什么 编辑:程序博客网 时间:2024/06/04 20:09
国际化:在程序设计领域,把在无需改写源代码即可让开发出来的应用程序能够支持多种语言和数据格式的技术
步骤:
- 为不同国家、语言提供对应的消息资源文件
- Struts2框架会根据请求中包含的locale加载对应的资源文件
- 通过程序代码取得该资源文件中指定key对应的消息
1.配置国际化资源文件:
(1) Action 范围资源文件:在Action类文件所在的路径建立名为ActionName_language_country.properties 的文件
(2)包范围资源文件:在包的根路径下建立文件名为package_language_country.properties 的属性文件,一旦建立,处于该包下的所有 Action 都可以访问该资源文件。注意:包范围资源文件的 baseName 就是package,不是Action所在的包名。
(3)全局资源文件:
- 命名方式: basename_language_country.properties
- struts.xml:<constant name="struts.custom.i18n.resources" value="baseName"/>
- struts.properties:struts.custom.i18n.resources=baseName
加载顺序:距离当前Action较近的被优先加载。
代码举例:
i18n.properties:
username=UserNamepassword=Passwordsubmit=Submittime=Time:{0}time2=Time:${date} //可以直接访问i18n_en_US.properties
username=UserNamepassword=Passwordsubmit=Submittime=Time:{0}time2=Time:${date}
i18n_zh_CN.properties
username=\u7528\u6237\u540Dpassword=\u5BC6\u7801submit=\u63D0\u4EA4time=\u65F6\u95F4:{0}time2=\u65F6\u95F4:${date}
2.在页面上和Action类中访问国际化资源文件的value值
(1):在Action类中,若Action实现了TextProvider接口,则可以调用getText()方法获取value值。通过继承ActionSupport的方式
代码示例:
package i18n;import com.opensymphony.xwork2.ActionSupport;import java.util.Arrays;import java.util.Date;public class Testi18n extends ActionSupport { private Date date=null; public void setDate(Date date) { this.date = date; } public Date getDate() { return date; } @Override public String execute() throws Exception { date=new Date(); //1.在Action中访问国际化资源 String username=getText("username"); System.out.println(username); //控制台输出 //带占位符的 String date=getText("time", Arrays.asList(new Date())); return SUCCESS; }}
要在struts.xml里面配置
(2)页面上可以使用s:text标签。对于表单标签可以使用表单标签的key属性值
- 如果有占位符,可以使用s:text标签的s:param的子标签来填充占位符
- 可以利用标签和OGNL表达式直接访问值栈中的属性值(对象栈和Map栈)(“${}”)
(3)可以用label访问:在栈顶有DefaultTextProvider一个实例,该对象提供访问资源文件的getText()方法。(在值栈中)可以用OGNL来进行访问,同时还需要通知 struts2 框架 label 中放入的不再是一个普通的字符串, 而是一个 OGNL 表达式. 所以使用 %{} 把 getText()包装起来, 以强制进行 OGNL 解析.
代码举例:
<s:form > <s:text name="username"/>:<s:textfield name="username" label="%{getText('username')}"></s:textfield> <s:textfield name="username" label="%{getText('username')}"></s:textfield> <!--国际化--> <s:textfield name="username" key="username"></s:textfield> <s:textfield name="password" key="password"></s:textfield> <s:submit key="submit"></s:submit> </s:form>(4)直接访问:在国际化资源文件中使用OGNL表达式
time2=Time:${date} //可以直接访问在index文件中可以直接访问:
<s:text name="time2"></s:text>
- Struts2(十二):国际化
- Struts2(十二)---消息处理与国际化
- struts2(十二)struts2国际化底层大揭秘
- 细谈struts2(十二)struts2国际化底层大揭秘
- Java程序员从笨鸟到菜鸟之(六十六)细谈struts2(十二)struts2国际化底层大揭秘
- struts2国际化(四)
- Struts2(八)国际化
- Strust2第(十二)篇《国际化》
- struts2的国际化(入门)
- Struts2 2.0 国际化(i18n)
- Struts2国际化小结(转帖)
- struts2入门(7)--国际化
- (九)struts2之国际化
- struts2之国际化(i18n)
- 30(转载)Struts2-国际化
- 【Struts2学习笔记(12)】Struts2国际化
- 【Struts2】struts2学习(3) 资源国际化
- struts2--struts2国际化(使用占位符)
- HDU-4857逃生(反向拓扑排序)(重点是思想)
- log4j2.x架构分析与实战
- http性能测试
- hdu4857 逃生
- 封装rhel6.5的虚拟机
- Struts2(十二):国际化
- Reclyclerview 的条目的textview展开,收起
- PAT 1029旧键盘
- leetcode -- 557. Reverse Words in a String III 【字符反转 + 字符数组 + 双指针 + 状态记录】
- Unity开关门的脚本,从VRTK的例子里边找的
- UESTC 1131 男神的礼物
- Android中GridView、ListView 的 getChildAt() 方法返回null 解决方案
- 字符串去重
- 记录小错误