struts2国际化i18n(internationalization)

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
输入:
输出:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值