struts2国际化i18n(internationalization)

本文介绍Struts2框架中的国际化(i18n)应用实例,通过多个步骤展示了如何实现不同语言环境下的资源文件加载及消息格式化。
i18n 就是internationalization这18个字母的简写,中文译为国际化
一.struts2国际化i18n测试1
1.I18nTest.java

package com.hitsoft.i18n;
import java.util.Locale;
public class I18nTest {

public static void main(String[] args) {
Locale[] locales = Locale.getAvailableLocales();
for(Locale locale:locales){
System.out.println(locale.getDisplayCountry()+":"+locale.getCountry());
}
}

}

2.运行结果:

马来西亚:MY
卡塔尔:QA
冰岛:IS
芬兰:FI
马耳他:MT
瑞士:CH
比利时:BE
沙特阿拉伯:SA
伊拉克:IQ
波多黎哥:PR
智利:CL
奥地利:AT
英国:GB
巴拿马:PA
也门:YE
马其顿王国:MK
加拿大:CA
越南:VN
荷兰:NL
美国:US
中国:CN
洪都拉斯:HN
美国:US
摩洛哥:MA
印度尼西亚:ID
南非:ZA
韩国:KR
突尼斯:TN
塞尔维亚:RS
白俄罗斯:BY
台湾地区:TW
苏丹:SD
日本:JP
玻利维亚:BO
阿尔及利亚:DZ
阿根廷:AR
阿拉伯联合酋长国:AE
加拿大:CA
立陶宛:LT
黑山:ME
叙利亚:SY
俄罗斯:RU
比利时:BE
西班牙:ES
以色列:IL
丹麦:DK
哥斯达黎加:CR
香港:HK
西班牙:ES
泰国:TH
乌克兰:UA
多米尼加共和国:DO
委内瑞拉:VE
波兰:PL
利比亚:LY
约旦:JO
匈牙利:HU
危地马拉:GT
巴拉圭:PY
保加利亚:BG
克罗地亚:HR
波斯尼亚和黑山共和国:BA
罗马尼亚:RO
卢森堡:LU
新加坡:SG
厄瓜多尔:EC
波斯尼亚和黑山共和国:BA
尼加拉瓜:NI
萨尔瓦多:SV
印度:IN
希腊:GR
斯洛文尼亚:SI
意大利:IT
日本:JP
卢森堡:LU
瑞士:CH
马耳他:MT
巴林:BH
:
:
黑山:ME
巴西:BR
挪威:NO
瑞士:CH
新加坡:SG
科威特:KW
埃及:EG
爱尔兰:IE
秘鲁:PE
捷克共和国:CZ
土耳其:TR
乌拉圭:UY
爱尔兰:IE
印度:IN
阿曼:OM
塞尔维亚及黑山:CS
阿尔巴尼亚:AL
葡萄牙:PT
拉脱维亚:LV
塞尔维亚:RS
斯洛伐克:SK
墨西哥:MX
澳大利亚:AU
挪威:NO
新西兰:NZ
瑞典:SE
黎巴嫩:LB
德国:DE
泰国:TH
哥伦比亚:CO
菲律宾:PH
爱沙尼亚:EE
塞浦路斯:CY
法国:FR


二.struts2国际化i18n测试2
1.hellofile_en_US.properties文件(位于src根目录下,也就是与struts.xml文件同目录下)

hello-value=how are you?
world-value=how are you,{0}?

2.hellofile_zh_CN.properties(位于src根目录下,也就是与struts.xml文件同目录下)

hello-value=你好吗?
world-value=你好吗,{0}?

3.I18nTest2.java

package com.hitsoft.i18n;

import java.util.Locale;
import java.util.ResourceBundle;

public class I18nTest2 {

public static void main(String[] args) {
Locale locale = Locale.US;
System.out.println(locale.getDisplayCountry()+":"+locale.getCountry());
ResourceBundle bundle = ResourceBundle.getBundle("hellofile",locale);
String value = bundle.getString("hello-value");
System.out.println(value);

locale = Locale.CHINA;
System.out.println(locale.getDisplayCountry()+":"+locale.getCountry());
bundle = ResourceBundle.getBundle("hellofile",locale);
value = bundle.getString("hello-value");
System.out.println(value);
}

}

4.运行结果:
美国:US
how are you?
中国:CN
你好吗?


三.struts2国际化i18n测试3:
1.I18nTest3.java
package com.hitsoft.i18n;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class I18nTest3 {
public static void main(String[] args) {
Locale locale = Locale.US;
System.out.println(locale.getDisplayCountry()+":"+locale.getCountry());
ResourceBundle bundle = ResourceBundle.getBundle("hellofile",locale);
String value = bundle.getString("world-value");
String message = MessageFormat.format(value, new Object[]{"wanglihu"});
System.out.println(message);

locale = Locale.CHINA;
System.out.println(locale.getDisplayCountry()+":"+locale.getCountry());
bundle = ResourceBundle.getBundle("hellofile",locale);
value = bundle.getString("world-value");
message = MessageFormat.format(value, new Object[]{"王利虎"});
System.out.println(message);
}
}

2.运行结果:
美国:US
how are you,wanglihu?
中国:CN
你好吗,王利虎?


四.struts2国际化i18n测试4
1.register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>国际化i18n测试页面</title>
</head>

<body>
<table align="center" width="50%">
<tr>
<td>
<s:actionerror cssStyle="color:red"/>
<hr>
<s:fielderror cssStyle="color:blue"></s:fielderror>
</td>
</tr>
</table>
<form action="register.action" method="post">
<table align="center" border=1 width="50%">
<tr>
<td>username</td>
<td><input name="username" type="text" size=20></td>
</tr>

<tr>
<td>operation</td>
<td><input value="submit" type="submit" ><input value="reset" type="reset" ></td>
</tr>
</table>
</body>
</html>

2.success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>i18n国际化结果页面</title>
</head>

<body>
<table align="center" border=1 width="50%">
<tr>
<td>username</td>
<td>${requestScope.username }</td>
</tr>
</table>
</body>
</html>


3.RegisterAction.java
package com.hitsoft.action;
import java.util.Calendar;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
//1.首先执行类型转换
//2.执行对应的校验框架
//3.执行特定方法对应的validate验证(test,validateTest)
//4.执行validate()方法
//如果在以上所有过程当中,发现了任何错误,都不会再去执行execute方法或指定的特定方法(test),页面转向了struts.xml
//中这个result所对应的页面
public class RegisterAction extends ActionSupport {
private String username;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String execute(){
System.out.println("execute invoked!");
return SUCCESS;
}
public String test(){
System.out.println("test invoked!");
return SUCCESS;
}
public void validateTest(){
System.out.println("validateTest invoked!");
}
@Override
public void validate() {
System.out.println("validate invoked!");
if(null == username||username.length()<6||username.length()>10){
//this.addActionError("username invalid");
//国际化
this.addActionError(this.getText("username.invalid",new String[]{username}));
this.addFieldError("username", "field error:username is invalid!");
}
}

}


4.struts.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="register" class="com.hitsoft.action.RegisterAction" method="test">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
</action>
</package>
</struts>


5.RegisterAction_en_US.properties(必须与RegisterAction.java同目录下)

username.invalid=username\:{0} is invalid\!


6.RegisterAction_zh_CN.properties(必须与RegisterAction.java同目录下)

username.invalid=用户名 {0} 是不合法的!


7.访问地址:
http://localhost:8080/struts2/register.jsp
输入:
输出:
内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值