在xwork-validator-1.0.3.dtd文件中
<!ELEMENT validators (field|validator)+>
<!ELEMENT field (field-validator+)>
<!ATTLIST field
name CDATA #REQUIRED
>
<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT validator (param*, message)>
<!ATTLIST validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param
name CDATA #REQUIRED
>
<!ELEMENT message (#PCDATA|param)*>
<span style="color:#FF0000;"><!ATTLIST message
key CDATA #IMPLIED
></span>
在学习笔记(六)中我们具体分析了各行语句代表的含义。这里面主要了解下<!ATTLIST message key CDATA #IMPLIED>message中key的使用方式。
key属性是为了国际化所需要的。当我们的校验框架出错时,那我们的提示应该根据不同国家的人群来显示相应语言的提示信息。而这种识别是根据浏览器的首选语言来决定的。
我们在包下建立package_en_US.properties和package_zh_CN.properties文件。这两个文件分别对应英文和中文的提示信息。
比如,我们在输入用户名是想提示
中文:用户名的长度在4和6之间
英文:username should be between 4 and 6
我这个是对RegisterAction类进行校验的,
在所以在RegisterAction-validation.xml文件下配置,message所对应的key值即可。
<field name="username"><!-- name属性值对应的是需要校验RegisterAction的变量名 -->
<field-validator type="stringlength"><!--字符长度校验 -->
<param name="minLength">4</param>
<param name="maxLength">6</param>
<span style="color:#FF0000;"><message key="username.invalid"></message></span>
</field-validator>
</field>
综上所述,我们将错误信息不直接放在message中,而是统一放在属性文件中,通过key值来查找对应的错误信息。
国际化的资源文件的命名规则:package_语言名_国家名,比如package_zh_CN,package_en_US;
Struts2是通过jdk提供的国际化支持来实现的。
JDK中的Local类
Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的操作,它使用 Locale 为用户量身定制信息。
我们可以通过如下方法获得所有国家和语言的简称。
Locale[] locales = Locale.getAvailableLocales();
for (Locale locale : locales) {
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getDisplayLanguage());
java.util ResourceBundle类
这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序:
当程序需要特定于语言环境的对象时,它使用 getBundle
方法加载 ResourceBundle
类:
具体实例如下:ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
命名两个文件属性名如下:fannie_ch_ZN.properties/fannie_en_US.properties
文件内容如下:
name=\u5F20\u4E09 name=fannie
通过程序调用:
public static void main(String[] args) {
ResourceBundle myResources =
ResourceBundle.getBundle("fannie");
String value=myResources.getString("name");
System.out.println(value);
}
默认显示的是中文的 “张三”
如果要显示英文,设置如下:
ResourceBundle myResources =ResourceBundle.getBundle("sict",<span style="color:#FF0000;">Locale.US</span>);//调用Locale的静态方法,选择对应的语言
如果没有对应的属性文件,则实现默认语言的情况。