首先在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. [HAOI2012]道路

    题目描述 C国有n座城市,城市之间通过m条[b]单向[/b]道路连接.一条路径被称为最短路,当且仅当不存在从 它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它们包含的道路序列不同. ...

  2. [HNOI2004]敲砖块

    题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 33 33 7 ...

  3. getopt_long函数使用【转】

    转自:https://blog.csdn.net/cashey1991/article/details/7942809 平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序 ...

  4. 异步 JavaScript 之 macrotask、microtask

    1.异步任务运行机制 先运行下面的一段代码: console.log('script start'); setTimeout(function() { console.log('setTimeout' ...

  5. windows下将mysql加入环境变量

    path添加C:\program files\mysql\bin 即可

  6. webservice服务器端获取request对象的三种方式

    有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservi ...

  7. Deap Learning (吴恩达) 第一章深度学习概论 学习笔记

    Deap Learning(Ng) 学习笔记 author: 相忠良(Zhong-Liang Xiang) start from: Sep. 8st, 2017 1 深度学习概论 打字太麻烦了,索性在 ...

  8. Python自动化测试入门

    在当前自动化测试中,最火的语言就是Python,很容易上手.然后就是Java+testng+appium做的UI自动化测试.下面我们就用Python脚本,做自动化集成测试. (1)获取APK文件中ID ...

  9. 跟着小菜学习RabbitMQ启动和基础(系列一)

    前言 今天开始我们正式进入RabbitMQ系列学习,在这系列博客中也会发表.NET Core和EF Core文章,网上关于RabbitMQ例子比比皆是,我将综合网上所提供的信息并加上我个人的理解来详细 ...

  10. SSA-一种适合中小型企业的新型服务架构

    写在前面 好久好久没写了,最近刚换了工作,花了几天的时候熟悉了项目,接着就是功能的完善,随后就是对新项目的基础架构搭建. 看过Po主博客的都知道,Po主一直致力于推广.Net Core在微服务架构上的 ...