国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化
国际化(Internationalization:I18N)
使程序在不做任何修改的情况下,可以在不同国家或地区和不同语言环境下,按照当地的语言和格式习惯显示字符。 i18N 就是 Internationalization,因为以 i 开头,以 N 结尾,共18个字母,也就是国际化的意思。
本地化(Localization:L10N)
一个国际化的程序,当它运行在本地机器时,能够根据本地机器的语言和地区设置显示相应字符
Java程序的国际化思路
将程序中的提示信息、错误信息等放在资源文件中,为不同国家/语言编写对应资源文件。资源文件由很多key-value对组成,key保持不变,value随国家/语言不同而不同。这些资源文件使用共同的基名,通过在基名后面添加语言代码、国家和地区代码来进行区分
完成国际化
第一步:在src目录下,新建一个文件: 在里面写上国际化资源的名字,如:
struts.custom.i18n.resources= msg
第二步:在src的目录下,添加国际化资源名字,这里添加两份(中文和英文)
msg_zh_CN.properties和msg_en_US.properties
资源命名规则:一般可以是(可以自己定义)
资源文件的值(struts.custom.i18n.resources)_语言_国家.properties
在对应的properties文件中写下对应的key和value值
msg_zh_CN.properties内容:
注:对应的值是中文字符对应的ascii码,如果使用myeclipse编辑器在properties下
输入中文会自动转换成对应的ascii码
msg_en_US.properties内容:
第三步:在需要国际化的页面中修改
修改reg.jsp
url中的这个参数 request_locale会被 i18n 拦截器读取,然后根据这个值设置语言环境。 i18n 拦截器是struts中default里面自带的拦截器。
访问JSP页面
进入控制面板,修改地区/语言,改为美国 刷新页面
常用的常量
<!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
<constant name="struts.action.extension" value="do"/>
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false"/>
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!– 与spring集成时,指定由spring负责action对象的创建 -->
<constant name="struts.objectFactory" value="spring" />
<!–该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
国际化校验信息
在msg_zh_CN.properties中添加
在msg_en_US.properties中添加
修改XXX-validation.xml
<field name="uname">
<field-validator type="requiredstring">
<message key="validate.uname.require"></message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">8</param>
<param name="trim">true</param>
<message key="validate.uname.stringlength"></message>
</field-validator>
</field>
Struts类型转换:
只需要记住Struts内部提供的类型转换就可以了: