struts国际化

本文介绍Struts2框架中的国际化配置方法,包括配置文件设置、不同级别的资源文件使用、JSP页面与Action中的国际化实现及错误信息的国际化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


首先在struts.properties文件中加入以下内容:
  1. struts.custom.i18n.resources=messageResource  
struts.custom.i18n.resources=messageResource 

或在struts.xml中加入
  1. <constant name="struts.custom.i18n.resources" value="messageResource"></constant> 
<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加入以下内容  
  1. label.hello=hello{0}    
  2. label.helloWorld=hello,world    
label.hello=hello{0}   
label.helloWorld=hello,world   

在messageResource_zh_CN.properties加入以下内容  
  1. label.hello=你好 {0}    
  2. label.helloWorld=你好,世界   
label.hello=你好 {0}   
label.helloWorld=你好,世界  

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

上面两个都为输出一个hello word的两种表示   
  1. <s:textfield name="name" key="label.helloWorld"/>  
  2. <s:textfield name="name" label="%{getText('label.helloWorld')}"/> 
<s:textfield name="name" key="label.helloWorld"/> 
<s:textfield name="name" label="%{getText('label.helloWorld')}"/>

显示一个文本框,文本框的标题进行国际化   
(2). 使用<s:i18n>标签指定从某个特定的资源文件中取数据
  1. <s:textfield name="name" key="label.helloWorld"/>  
  2. <s:textfield name="name" label="%{getText('label.helloWorld')}"/> 
<s:textfield name="name" key="label.helloWorld"/> 
<s:textfield name="name" label="%{getText('label.helloWorld')}"/>

指定在从messageResource取资源   
(3). 
  1. <s:textfield name="name" key="label.helloWorld"/>  
  2. <s:textfield name="name" label="%{getText('label.helloWorld')}"/> 
<s:textfield name="name" key="label.helloWorld"/> 
<s:textfield name="name" label="%{getText('label.helloWorld')}"/>



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

Action的国际化


Action的国际化主要是通过getText(Stringkey)方法实现的
Java代码  
  1. public String execute() throws Exception {                                
  2. //getText(String) string为key                
  3. String str1 =getText("label.helloWorld"); 
  4. System.out.println(str1); 
  5.   
  6. // 带参数的                
  7. String str2 =getText("label.hello",new String[]{"clf"});   
  8. System.out.println(str2);  
  9.                           
  10. // 与上一种实现一样                 
  11. List l = newArrayList();                
  12. l.add("callan");                
  13. String str3 =getText("label.hello",l);                
  14. System.out.println(str3);     
  15. returnSUCCESS;            
  16. }  
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);    
returnSUCCESS;           
} 


action错误的国际化



在message_en_US.properties中增加以下内容
  1. username.invalid=usernameinvalid... 
username.invalid=usernameinvalid...


在message_zh_CN.properties中增加以下内容
  1. username.invalid=\u7528\u6237\u540d\u4e0d\u5408\u6cd5... 
username.invalid=\u7528\u6237\u540d\u4e0d\u5408\u6cd5...


修改RegisterAction中的validate方法,将错误加到ActionError中,在这里将使用到ActionSupport中的getText方法获得和国际化资源文件相关的信息。
以username验证为例:
  1. if (null ==username || username.length() < 5 || username.length() > 10) {   
  2.      this.addActionError(this.getText("username.invalid"));   
  3. }   
if (null ==username || username.length() < 5 || username.length() > 10) {  
     this.addActionError(this.getText("username.invalid"));  
 }  


这样就从资源文件中读取username.invalid的值,增加到ActionError中。
验证框架的国际化(field级别错误)


在message_en_US.properties文件中增加以下内容
  1. username.xml.invalid=validateinformation 
username.xml.invalid=validateinformation


在message_zh_CN.properties文件中增加以下内容
  1. username.xml.invalid=\u9a8c\u8bc1\u6846\u67b6\u4fe1\u606f 
username.xml.invalid=\u9a8c\u8bc1\u6846\u67b6\u4fe1\u606f

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

  1. <field name="username">   
  2.     <field-validator type="requiredstring">   
  3.         <param name="trim">true</param>   
  4.         <message key="username.xml.invalid"></message>   
  5.     </field-validator>   
  6. </field>   
<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大多是和国际化相关的

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法和原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除和抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路和显示电路等几部分组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值