struts2国际化

在struts2中需要做国际化的有:

jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化

jsp页面的国际化

第一步

在src目录下新建tanggao_en_US.properties,内容为
username=username
password=password

tanggao_zh_CN.properties文件,内容为

username=\u7528\u6237\u540D
password=\u5BC6\u7801

第二步
在struts.xml中配置

    <constant name="struts.custom.i18n.resources" value="tanggao"></constant> 

其中的tanggao就是国际化资源文件的baseNmae

第三步 在jsp页面中显示 方法

<s:debug></s:debug>
    <s:text name="username"></s:text>
    <s:form action="Hello"  >
        <s:textfield name="username" key="username"></s:textfield>
        <s:password name="password" key="password"> </s:password>
        <s:submit></s:submit>
    </s:form>

结果如下图:


action错误的国际化

在tanggao_en_US.properties中增加以下内容

username.invalid=username invalid…

在tanggao_zh_CN.properties中增加以下内容

username.invalid=\u7528\u6237\u540d\u4e0d\u5408\u6cd5…

修改HelloAction中的validate方法,将错误加到ActionError中,在这里将使用到ActionSupport中的getText方法获得和国际化资源文件相关的信息。

以username验证为例:

 if (null == username || username.length() = "" || username.length() > 10) {   

        this.addActionError(this.getText("username.invalid"));   

    }   

验证框架的国际化(field级别错误)

在message_en_US.properties文件中增加以下内容

username.xml.invalid=validate information

在message_zh_CN.properties文件中增加以下内容

username.xml.invalid=\u9a8c\u8bc1\u6846\u67b6\u4fe1\u606f

然后修改验证框架,需要将在properties文件中的内容增加到框架中。

以username为例

<field name="username">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message key="username.xml.invalid"></message>
    </field-validator>
</field>

在message标签中增加属性key,值为properties文件中的key

标签中key大多是和国际化相关的

国际化资源文件的分类

当应用程序很大时,需要国际化的东西会很多,因此需要将国际化资源文件进行分类。

需要知道的是在src中的properties文件是全局资源文件,另外还可以分为包级别的和类级别的

首先看看包级别的

命名规则为package_language_country.properties

新建package_en_US.properties,内容为

username.xml.invalid=package validate information

新建package_zh_CN.properties,内容为

username.xml.invalid=\u5305\u9a8c\u8bc1\u4fe1\u606f

可以看到输出的信息为“包验证信息”,由此可见包级别的国际化资源文件的优先级高于全局国际化资源文件。

类级别

新建HelloAction_en_US.properties,内容为

username.xml.invalid=class validate information

新建HellAction_zh_CN.properties,内容为

username.xml.invalid=\u7c7b\u9a8c\u8bc1\u4fe1\u606f

此时可以看到输出的信息为“类验证信息”。

由此可以得到国际化资源文件的优先级

全局<包级别<类级别

另外要进行表单的国际化时,要去掉theme=”simple”

在HelloAction_en_US.properties中增加

username.name=username

在HelloAction_zh_CN.properties中增加

username.name=\u7528\u6237\u540d


修改表单标签

<s:textfield name="username" key="username.name"></s:textfield>

注意到key一般是和国际化相关的。

另外除了用

另外除了用这个标签外,还可以使用这个标签

<s:i18n name="temp"></s:i18n>

标签中包含name,代表着可以定义资源文件的baseName,如可以定义成temp,那么对应着

temp_en_US.properties和temp_zh_CN.properties这两个资源文件。

如定义:

<s:i18n name="hello">
    <s:text name="world">
        <s:param>struts2</s:param>
    </s:text>
</s:i18n>

注意到可以在标签中增加 标签。

在hello_en_US.properties文件中增加

world=hello {0}

hello_zh_CN.properties中增加

world=\u4f60\u597d,struts2

在struts2的默认拦截器栈中已经定义了i18n拦截器,所以struts2已经是一个国际化的框架了。

struts2会查找从客户端提交的request_locale属性,并存到session中的WW_TRANS_I18N_LOCALE字段

中。

这个 标签外,还可以使用 这个标签

<s:i18n name="temp"></s:i18n>


总结一下显示方法:

<s:textname="username"></s:text>

getText("username.invalid") 

<message key="username.xml.invalid"></message>  

<s:textfield name="username" key="username.name"></s:textfield>    

<s:i18n name="temp"></s:i18n>
时间: 2024-12-03 16:25:33

struts2国际化的相关文章

struts2国际化问题··············

问题描述 struts2国际化问题·············· 在后台可以输出想要的结果succTip=u6B22u8FCE,{0}!u5F88u9AD8u5174u89C1u5230u4F60!替换后的,{0}也可以被替换为输入框中的username,但是到了页面上文字可以显示,{0}却无法替换,请教是为什么? 用的是全局的国际化资源 loginTitle=u767Bu9646u9875u9762 username=u7528u6237u540D password=u5BC6u7801 sub

struts2 国际化

问题描述 配置中文及英文版国际化资源文件,globalMessages.propertiesglobalMessages_zh_CN.propertiesglobalMessages_en_US.properties在中文及英文访问下正常.但我切换到这两语种以外(如:德语)的语种.页面显示的不是globalMessages.properties中的国际化,globalMessages.properties默认的是英文的.请问:struts2国际化不像struts1.x一样,在没找到对应的语文资料

struts2国际化全例 错误解决

在struts2中需要做国际化的有: jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化 在之前的例子中已经做过和国际化相关的例子了,在struts.xml中配置过   view plaincopy to clipboardprint? <constant name="struts.custom.i18n.resources" value="message"></constant>        其中

关于一个struts2国际化的处理问题。

问题描述 现在有一个需求是这样的, 在数据库里面有一个menu菜单表, 需要支持多种语言. 然后把菜单的名称配置到国际化资源文件中,数据库中只配置国际化文件的key.比如有如下几个字段:menuId menuName prentId URL status100 menu.user.Manager -1 XXXX.jsp Y101 menu.modify.user -100 XXXX.jsp Y102 menu.query.user -100 XXXX.jsp Y这个菜单表,中的menuName的

struts2 国际化问题

问题描述 如题: struts2 .xml 配置: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"

struts2.0-Struts2 国际化文件中 EL 表达式怎么能执行 方法呢??

问题描述 Struts2 国际化文件中 EL 表达式怎么能执行 方法呢?? 就是对于 ${getText(fieldName)} 产生了疑惑. EL不是只能调用 属性吗?得是有getXxx(); ----- ${xxx} ,原来认识是应该这样用啊. 我知道 Ognl可以强制 表达式 解析.可以调用对象栈 中对象的 方法. 但是EL如此用,有点理解不了. 解决方案 突然明白了,EL表达式用处 是在JSP页面.. 这是在XML,properties文件.里,${} 表示的不是EL表达式,而是Ognl

Java的Struts框架中配置国际化的资源存储的要点解析_java

1.资源文件命名 国际化资源文件命名格式如下: basename_language_country.properties basename_language.properties basename.properties 其中basename为资源文件的基本名称,language和country必须是java支持的语言和国家.获取java支持的语言和国家代码如下: Locale[] locales = Locale.getAvailableLocales(); for(Locale locale:

Java的Struts框架中的主题模板和国际化设置_Mysql

主题模板 如果不指定一个主题,然后Struts2中会使用默认的XHTML主题.例如Struts 2中选择标签: <s:textfield name="name" label="Name" /> 生成HTML标记: <tr> <td class="tdLabel"> <label for="empinfo_name" class="label">Name:<

合并-两个系统strust2国际化

问题描述 两个系统strust2国际化 已开发完成的两套中英文系统,现在想通过struts2国际化合并为1个来减少维护量.两个数据库如何衔接-- 解决方案 在struts.xml配置文件中配置,只要加一行代码就成了.