首先在struts.properties文件中加入以下内容:

struts.custom.i18n.resources=messageResource 

或在struts.xml中加入

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

资源文件的命名格式: 名称_语言代码_国家代码.Properties 

如果创建中文和英语国际化,那么资源文件名称为

messageResource_zh_CN.properties和messageResource_en_US.properties

国际化资源文件分为三种级别

(1) 全局资源文件,可以被整个应该程序引用,也就是struts.custom.i18n.resources=messageResource指定的文件 

(2) 包级资源文件,每个包的根目录下可以新建资源文件,仅被当前包中的类访问.文件名格式为:package_语言代码_国家代码. 

(3) Action级资源文件,仅被当前Action引用,名称为action名_语言代码_国家代码 

查找顺序为从小范围到大范围, Action级优先级最大

jsp页面的国际化

通过使用标签<s:textname="label.helloWorld"/>输出国际化,label.helloWorld为资源文件中定义的key。

在messageResource_en_US.properties加入以下内容

label.hello=hello{0}
label.helloWorld=hello,world   

在messageResource_zh_CN.properties加入以下内容

label.hello=你好 {0}
label.helloWorld=你好,世界 

(1). <s:text name="label.helloWorld"/>

<s:property value="%{getText('label.helloWorld')}"/> 

上面两个都为输出一个hello word的两种表示

<s:textfield name="name" key="label.helloWorld"/>
<s:textfield name="name" label="%{getText('label.helloWorld')}"/> 

显示一个文本框,文本框的标题进行国际化    

(2). 使用<s:i18n>标签指定从某个特定的资源文件中取数据

<s:i18n name="messageResource">
      <s:text name="label.helloWorld"></s:text>
</s:i18n> 

指定在从messageResource取资源    

(3).

<s:text name="label.hello">
             <s:param>clf</s:param>
 </s:text> 

使用带参数的资源.<s:param>可以替换label.hello=hello{0}中的{0}

Action的国际化

Action的国际化主要是通过getText(Stringkey)方法实现的 

Java代码

public String execute() throws Exception {
//getText(String) string为key
String str1 =getText("label.helloWorld");
System.out.println(str1);

// 带参数的
String str2 =getText("label.hello",new String[]{"clf"});
System.out.println(str2); 

// 与上一种实现一样
List l = newArrayList();
l.add("callan");
String str3 =getText("label.hello",l);
System.out.println(str3);
return SUCCESS;
}  

action错误的国际化

在message_en_US.properties中增加以下内容

username.invalid=usernameinvalid...

在message_zh_CN.properties中增加以下内容

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

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

以username验证为例:

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

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

}  

这样就从资源文件中读取username.invalid的值,增加到ActionError中。

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

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

username.xml.invalid=validateinformation

在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大多是和国际化相关的

Struts 2 之资源国际化的更多相关文章

  1. Struts第八篇【资源国际化、对比JSP的资源国际化】

    资源国际化 我们在学JSTL标签的时候就涉及到了资源国际化,,,但是呢,在JSP的章节我并没有写博文来讲解怎么弄-.一方面感觉JSP的资源国际化好麻烦,另一方面是感觉用的地方很少-..因此就没有深入去 ...

  2. Struts2【UI标签、数据回显、资源国际化】

    Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签...也就是显示页面的标签..... 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再 ...

  3. struts2 资源国际化

    web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp ...

  4. (转)在Struts 2.0中国际化(i18n)您的应用程序 + 本人拓展备注

    转:http://www.blogjava.net/max/archive/2006/11/01/78536.html 国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须 ...

  5. 游戏UI框架设计(7): 资源国际化技术

    游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...

  6. Android:认识R类、findViewById方法查找组件、@string查找字符、@color查找颜色、@drawable查找图片、@dimen某个组件尺寸定义、项目引入资源国际化

    导入 之前都是断断续续的看了一些于如何使用android开发的文章.资料等,到目前位置很多基础的东西都不清楚,于是去学习了别人的课程,才了认识了R类.findViewById方法查找组件.项目引入资源 ...

  7. JAVA WEB开发中的资源国际化

    为什么要国际化? 不同国家与地区语言,文化,生活习惯等差异.在数字,时间,语言,货币,日期,百分数等的不同. 两个名词: I18N:即资源国际化,全称为Internationalization,因为首 ...

  8. SpringBoot资源国际化

    Springboot根据浏览器实现网站资源国际化 根据浏览器地区主动选择资源 1.创建资源化文件 resource目录下创建messages目录 创建messages_en_US.properties ...

  9. struts中如何实现国际化,涉及哪些文件?

    struts中如何实现国际化,涉及哪些文件? 解答:“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区.语言的不同而显示不同的用户界面.Struts框架通过使用<bean:m ...

随机推荐

  1. Python传递参数的多种方式

    Python中根据函数的输入参数以及是否有返回值可分为四种函数: 1.无参数无返回值 2.有参数无返回值 3.无参数有返回值 4.有参数无返回值 Python 中参数传递有下列五种方式; 1.位置传递 ...

  2. [LOJ 6270]数据结构板子题

    Description 有n个区间,第i个区间是[li,ri],它的长度是ri−li. 有q个询问,每个询问给定L,R,K,询问被[L,R]包含的且长度不小于K的区间数量. 你想,像这种板子题,你随手 ...

  3. [POJ 3728]The merchant

    Description There are N cities in a country, and there is one and only one simple path between each ...

  4. UVA - 11732:"strcmp()" Anyone?

    字典树问题 对于普通的字典树,可以加一个vector数组记录非空的孩子,加快速度 还可以用左孩子右兄弟来节省空间,因为普通的trie的话是 int next[MAXN][26] 而左孩子右兄弟可以把[ ...

  5. 计蒜客NOIP2017提高组模拟赛(三)day2-小区划分

    传送门 dp,注意边界 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...

  6. [bzoj4820][Sdoi2017]硬币游戏

    来自FallDream的博客,未经允许,请勿转载,谢谢. 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了 ...

  7. LCD接口和RGB介绍

    1. 介绍 Video的显示离不开LCD, 所以这里简单介绍一下LCD的接口和RGB LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器LCD目前已经取代CRT, 成为 ...

  8. Java web 前端面试知识点总结

    经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...

  9. quartz入门详解

    http://www.cnblogs.com/monian/p/3822980.html http://www.blogjava.NET/baoyaer/articles/155645.html 另: ...

  10. postgresql 安装使用

    www.postgresql.org去下载你需要的版本,我下载的9.6.8 安装过程中会让你输入一次密码,其余的默认就ok 默认超级用户名postgres 打开 pgadmin4,我们将语言改为中文会 ...