首先在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. 线段树——codevs 1690 开关灯

    先来一发题目: 1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点 ...

  2. [Codeforces 919F]A Game With Numbers

    Description 题库链接 两个人 Van♂ 游戏,每人手上各有 \(8\) 张牌,牌上数字均为 \([0,4]\) 之间的数.每个人在自己的回合选自己手牌中数字不为 \(0\) 的一张与对方手 ...

  3. 细胞(cell) 矩阵快速幂

    题目描述小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并观察细胞分裂的规律.他选取了一种特别的细胞,每天每个该细胞可以分裂出 x 1 个新的细胞.小 X 决定第 i 天向培养皿中 ...

  4. 浅析Linux内核调度

    1.调度器的概述 多任务操作系统分为非抢占式多任务和抢占式多任务.与大多数现代操作系统一样,Linux采用的是抢占式多任务模式.这表示对CPU的占用时间由操作系统决定的,具体为操作系统中的调度器.调度 ...

  5. Codeforces Round#433 简要题解

    来自FallDream的博客,未经允许,请勿转载,谢谢. 我的号自从几个月前姿势水平过低疯狂掉分之后就没动过了  突然想上点分  就打了一场Div1  没想到打到了rank5  一发上橙了,可还行. ...

  6. YOLO2:实时目标检测视频教程,视频演示, Android Demo ,开源教学项目,论文。

    实时目标检测和分类 GIF 图: 视频截图: 论文: https://arxiv.org/pdf/1506.02640.pdf https://arxiv.org/pdf/1612.08242.pdf ...

  7. left join 连表时,on后多条件无效问题

    http://www.cnblogs.com/guixiaoming/p/6516261.html left join 连表时,on后多条件无效问题 最近开发素材库项目,各种关系复杂的表,一度6张表的 ...

  8. python函数调用之自我调用与C++比较

    C++下的函数自我自我调用 第一种方法 #include <iostream> using namespace std; int rel_do(){ int a; cout<< ...

  9. 值得珍藏的HTTP协议详解

    转自:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式 ...

  10. 开启CSP网页安全政策防止XSS攻击

     一.简介 CSP是网页安全政策(Content Security Policy)的缩写.是一种由开发者定义的安全性政策申明,通过CSP所约束的责任指定可信的内容来源,(内容可以是指脚本.图片.sty ...