Struts2国际化整理资料
2013-10-14 17:44
281 查看
定义properties文件
资源文件查找顺序
如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。 对于简体中文的Locale,ResourceBundle搜索资源的顺序是: (1)baseName_zh_CN.class (2)baseName_zh_CN.properties (3)baseName_zh.class (4)baseName_zh.properties (5)baseName.class (6)baseName.properties /* Struts2找不到对应语言的配置文件时,会先找系统语言对应的配置文件,再找不到才使用baseName.properties */
国际化分为三类:全局的,包级别的,类级别的
全局的: 1.在struts.xml中的<constant name="struts.custom.i18n.resources" value="message"></constant>指定baseName国际化文件名为:baseName_语言名_国家名.properties(如:message_zh_CN.properties) 2.全局的国际化资源文件放在src下面 包级别的: 1.包级别的国际化资源文件放在该包下面 2.命名规则为:package_语言名_国家名.properties(如:package_zh_CN.properties)其中package不变,不是指的是包名,每个包的国际化文件命名都这样 类级别的: 1.与该类放在同一目录中 2.命名规则为:类名_语言名_国家名.properties(如:RegisterAction_zh_CN.properties) 若同一key 在上面三个国际化文件中都为value值则:(优先级)类级别的>包级别的>全局
在jsp中访问国际化资源文件
<!-- 输出国际化 --> <!-- name为国际化文件中的key --> <s:text name="hello"> <!-- 若该国际化文件的value中有{0}则可用下面的标签把参数传进去 --> <s:param>mengya</s:param> <s:param><s:property value="firstName"/></s:param> </s:text> <!-- 输出国际化资源文件 --> <s:property value="%{getText('customer.contact')}"/> <!-- 传参数 --> <s:property value="%{getText('customer.contact','sh')}"/> <!-- 定义变量,加var属性 --> <s:text name="greetings" var="msg"/> <s:property value="#msg"/> <!-- 指定特定的国际化文件,name为全局国际化文件的baseName --> <s:i18n name="temp"> <!-- 下面的<s:text>标签与上面的用法一样 --> <s:text name="hello"> <s:param>mengya</s:param> </s:text> </s:i18n>
表单国际化:
1.theme不能为simple如:<s:form action="register">(默认的theme不是simple)
2.使用key如:<s:textfield name="username" key="" id="usernameId"></s:textfield>
3.或者使用getText方法<s:textfield name="username" label="%{getText('customer.name')}"/>
在Action中访问国际化资源文件,该Action继承了ActionSupport类
在Action中访问国际化资源文件,该Action继承了ActionSupport类this.getText("username.invalid")若该key对应的value需要参数则: this.getText("username.invalid",new String[]{username}) 或: List list = new ArrayList(); list.add(username); this.getText("username.invalid",list) 如: if (null == username || username.length() < 6 || username.length() > 10) { List list = new ArrayList(); list.add(username); this.addActionError(this.getText("username.invalid",new String[]{username})); } 该国际化资源文件中的key和value为: username.invalid = 用户名 "{0}" 填写不正确
在输入验证框架访问国际化资源文件
<!-- 使用<message key="..."></message> --> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="username.invalid"></message> </field-validator>
动态改变语言
只有在url传入request_locale=en_US就可以指定为en_US的语言1.如果配置文件是en_US结尾,传入en,en_US都可以找到
2.如果配置文件是en结尾,只能传入en,传入en_US会找不到,从而找默认的配置文件(en的范围>en_US,使用英语的国家不止美国一个)
<a href="${pageContext.request.contextPath}/i18n/i18nAction?request_locale=en_US">English</a>
使用类来代替properties文件
//继承ListResourceBundle实现getContents方法 public class MyCustomResourceBundle extends ListResourceBundle { public Object[][] getContents() { if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 12) { return contents1; } else { return contents2; } } static final Object[][] contents1 = { { "greetings", "中午好 {0}" }, { "farewell", "再见" } }; static final Object[][] contents2 = { { "greetings", "你好 {0}" }, { "farewell", "再见" } }; } //en对应的字符串 public class MyCustomResourceBundle_en extends ListResourceBundle { public Object[][] getContents() { if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 12) { return contents1; } else { return contents2; } } static final Object[][] contents1 = { { "greetings", "Good morning {0}" }, { "farewell", "Good bye" } }; static final Object[][] contents2 = { { "greetings", "Hello {0}" }, { "farewell", "Good bye" } }; } //jsp中使用 <s:i18n name="com.resourcebundle.MyCustomResourceBundle"> <s:text name="greetings"> <s:param>Jon</s:param> </s:text>. <s:text name="farewell"/> </s:i18n>
相关文章推荐
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- Struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- springside使用——Spring Security 2和struts2的一些资料整理
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- struts2 s:if标签以及 #,%{},%{#} 资料整理
- struts2的一些资料整理
- 兼容iOS 10 资料整理笔记
- 机器学习个人资料整理
- easyui整理资料
- Puppet 资料整理
- 我在北大青鸟学习的时候随便整理的资料 Oracle
- 蛙蛙推荐:SQLServer优化资料整理
- 在VC++ .NET中使用sqlite资料整理
- 【转】 大年三十整理的asp.net资料! (.NET) (ASP.NET)
- 兼容iOS 10 资料整理笔记
- 兼容iOS 10 资料整理
- Android校招复习资料整理
- Python Restful API 资料整理