国际话浅谈

本文介绍Struts2框架中的国际化实现方法,涵盖资源文件配置、JSP页面与Action类中的多语言支持技巧。
 

一、Struts2中哪些部分需要国际化?前台页面,Action类,校验配置文件。

 

二、Struts2的国际化资源文件分为两种:全局的国际化资源文件和局部的国际化资源文件
1、全局的国际化资源文件可以被整个应用程序引用,放在类路径根目录下,命名规则如下:
baseName(可变)_语言代码_国家代码.properties
例如:
message_en_US.properties
message_zh_CN.properties
2、局部的国际化资源文件包括包级别的和类级别的。
(1)、包级别的资源文件仅被当前包中的类引用,命名规则如下:
package(固定不变)_语言代码_国家代码.properties
例如:
package_en_US.properties
package_zh_CN.properties
(2)、类级别的资源文件仅被当前Action类引用,命名规则如下:
ActionName(可变)_语言代码_国家代码.properties
例如:
LoginAction_en_US.properties
LoginAction_zh_CN.properties

多个国际化资源文件中有同名(key相同)的消息,当在Action中使用该消息时,类级别的优先级最高,类级别的会覆盖包级别的,包级别的会覆盖全局的。

 

三、com.opensymphony.xwork2.ActionSupport类中的方法:
public String getText(String key);
public String getText(String key, String defaultValue, String obj);
public String getText(String key, String[] args);
public String getText(String key, List args);

 

四、应用示例
以全局的国际化资源文件为例:
首先,编写国际化资源文件:
message_en_US.properties(美国英语资源文件)
message_zh_CN.properties(简体中文资源文件)
message.properties(默认资源文件)

然后,在配置文件struts.xml中添加以下内容:
<constant name="struts.custom.i18n.resources" value="message"/>
或者
在struts.properties文件中添加以下内容:
struts.custom.i18n.resources=message

1. JSP页面上的国际化(使用struts2的<s:i18n ...>标签和<s:text .../>标签)
(1)使用默认资源文件
  <!-- 消息中没有参数-->
  <s:text name="welcome"/>

  <!-- 消息中有参数-->
  <s:text name="hello">
    <s:param>张三</s:param>
  </s:text>

(2)使用<s:i18n>标签的name属性指定从某个特定的资源文件中获取数据
当有多个baseName不同名的国际化资源文件时,可使用<s:i18n>标签绑定特定的资源。
<s:i18n name="message">
  <s:text name="hello">
    <s:param>张三</s:param>
  </s:text>
</s:i18n>

<s:i18n name="com/xawx/web/action/package">
  <s:text name="hello">
    <s:param>zhangsan</s:param>
  </s:text>
</s:i18n>

<s:i18n name="com/xawx/web/action/RegisterAction">
  <s:text name="hello">
    <s:param>zhangsan</s:param>
  </s:text>
</s:i18n>

message.properties文件内容:
welcome=welcome you!
hello=hello world,{0}!

message_en_US.properties文件内容:
welcome=welcome you!
hello=hello world,{0}!

message_zh_CN.properties文件内容:
welcome=\u6b22\u8fce\u4f60!
hello=\u4f60\u597d,{0}!

(3). 表单元素中label属性的国际化
前提:theme属性不能设置为simple
未国际化的写法:
<s:textfield name="username" label="username"/>
<s:textfield name="password" label="password"/>

国际化时的写法:
<s:textfield name="username" key="username"/>
<s:textfield name="password" key="password"/>
或者
<s:textfield name="username" label="%{getText('username')}"/>
<s:textfield name="password" label="%{getText('password')}"/>

message.properties文件内容:
username=username
password=password

message_en_US.properties文件内容:
username=username
password=password

message_zh_CN.properties文件内容:
username=\u7528\u6237\u540d
password=\u5bc6\u7801

2. Action类中的国际化
未国际化的写法:
this.addFieldError("username", "the username error!");
this.addFieldError("password", "the password error!");

国际化时的写法:
this.addFieldError("username", getText("username.error"));
this.addFieldError("password", getText("password.error"));

message.properties文件内容:
username.error=username error!
password.error=password error!

message_en_US.properties文件内容:
username.error=username error!
password.error=password error!

message_zh_CN.properties文件内容:
username.error=\u7528\u6237\u540d\u9519\u8bef!
username.error=\u5bc6\u7801\u9519\u8bef!

<s:fielderror fieldName="fieldName"/>
或者
<s:fielderror>
   <!--<s:param>password</s:param>-->
   <s:param value="'password'"></s:param>
</s:fielderror>

3. 配置文件中的国际化
以输入校验的LoginAction-validation.xml为例:

未国际化:
<field name="username">
     <field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>用户名不能为空!</message>
     </field-validator>  
     <field-validator type="stringlength">
       <param name="minLength">6</param>
       <param name="maxLength">20</param>
       <message>用户名长度应在${minLength}至${maxLength}之间!</message>
     </field-validator>
</field>

国际化后:
<field name="username">
     <field-validator type="requiredstring">
       <param name="trim">true</param>
       <!-- 第一种用法 -->
       <!--<message key="username.required"></message>-->
       <!-- 第二种用法 -->
       <message>${getText("username.required")}</message>
     </field-validator>  
     <field-validator type="stringlength">
       <param name="minLength">6</param>
       <param name="maxLength">20</param>
       <message>${getText("username.size")}</message>
     </field-validator>
</field>
   
message_en_US.properties文件内容:
username.required=the username should be required!
username.size=the size of username shoule be between ${minLength} and ${maxLength}!

message_zh_CN.properties文件内容:
username.required=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a!
username.size=\u7528\u6237\u540d\u957f\u5ea6\u5728${minLength}\u5230${maxLength}!

### 人工智能的当前发展状况 目前,人工智能(AI)行业发展迅速,在多个领域取得了显著进展。然而,这一进程伴随着一系列挑战和机遇。一方面,隐私保护、伦理道德问题、劳动力市场的变化以及算法偏见等问题亟待解决;另一方面,技术创新的应用场景日益广泛,为行业带来了新的增长点[^2]。 ### 发展现状的具体表现 在实际应用中,AI已经渗透到各个行业中,包括但不限于医疗健康、金融服务、智能制造等领域。特别是在智能城市建设方面,通过集成物联网(IoT)设备收集的数据,利用机器学习模型实现更高效的资源管理和公共服务优化成为可能。此外,通用人工智能(AGI)的研究也在稳步推进,旨在开发能够执行多种复杂任务的人工智能系统[^1]。 ### 面临的主要任务与挑战 #### 技术层面 - **数据安全与隐私保护**:随着大数据时代的到来,如何确保个人敏感信息安全成为了首要考虑因素之一。 - **提升计算效率**:为了支持更大规模神经网络训练需求,需进一步提高硬件性能并降低能耗成本。 #### 社会经济影响 - **调整就业结构**:自动化程度加深可能导致某些岗位消失或转型,因此有必要加强再教育体系构建以帮助劳动者适应新环境。 - **消除歧视现象**:防止因历史遗留原因造成的不公平对待,比如性别差异、种族区别等因素不应被反映于决策过程中。 #### 政策法规建设 - **完善法律法规框架**:针对新兴技术特性制定相应规则指南,保障公众利益不受侵害的同时鼓励创新发展。 - **促进国际合作交流**:鉴于全球化背景下跨国界合作的重要性愈发凸显,应积极寻求共同标准建立跨地区协调机制。 ```python # Python代码示例展示了一个简单的线性回归预测模型 import numpy as np from sklearn.linear_model import LinearRegression X = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]] y = [4, 5, 20, 14, 32, 22, 38, 43] model = LinearRegression().fit(X, y) print(f'系数: {model.coef_}') print(f'截距: {model.intercept_}') new_data = [[70, 40]] # 新输入数据 predicted_value = model.predict(new_data) print(f'对于{new_data}的预测值为:{predicted_value}') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值