Struts2学习笔记17:Struts2的国际化

Struts2学习笔记17:Struts2的国际化

第十六、十七讲

学习内容:

1)Java对国际化的支持

2)Struts2对国际化的支持

3)Struts2处理关于国际化时的一些细节问题

详细内容:

主要用到的类文件

java.util.Locale;

对应与国家语言

java.util.ResourceBundle;

资源包

java.text.MessageFormat;

信息格式化

 1)Java本省对国际化的支持

使用Java编写代码显示,Java支持的语言代码以及使用这些语言的国家代码

public static void main(String[] args) {

Locale[] locales = Locale.getAvailableLocales();

for ( Locale locale:locales){

// System.out.println(locale.getISO3Country() );

// System.out.println( locale.getDisplayVariant() );

// System.out.println(locale.getDisplayName());

// System.out.println( locale.getCountry() + " : " + locale.getLanguage() );

System.out.println(  locale.getCountry()+ " : " + locale.getDisplayCountry() 

" : " + locale.getLanguage() + " : " + locale.getDisplayLanguage());

}

}

Java的国际化

需要新建配置文件,文件名格式是固定的:

baseName_language_country.properties

 1.在src目中新建的配置文件名为:

hello_en_US.properties

hello_zh_CN.properties

 2.在hello_en_US.properties文件中加入代码

hello = hello , world  

 3.在hello_zh_CN.properties文件中加入代码

hello= /u60a8/u597d/uff0c/u4e16/u754c

 

4.建立带主函数的Java文件

public static void main(String[] args) {

// Locale locale = Locale.US;

Locale locale = Locale.getDefault();

ResourceBundle rd = ResourceBundle.getBundle"hello" , locale);

String value = rd.getString( "hello" );

System.out.println( value );

}

getDefault() 

          获得此 Java 虚拟机实例的当前默认语言环境值。

getBundle(String baseName, Locale locale) 

          使用指定的基本名称、语言环境和调用者的类加载器获取资源包。

getString(String key) 

          从此资源包或它的某个父包中获取给定键的字符串。

US 

          用于表示国家/地区的有用常量。

输出信息:

您好,世界

 

5.加入可变参数

改变两个配置文件的内容:

hello_en_US.properties

hello = hello , world  "{0}"

hello_zh_CN.properties

hello= /u60a8/u597d/uff0c/u4e16/u754c "{0}"

 在主函数中后面加入代码:

String result = MessageFormat.format( value , new Object[]{"风达"});

System.out.println(result);

format(String pattern, Object... arguments) 

          创建具有给定模式的 MessageFormat,并用它来格式化给定的参数。

输出信息:

hello , world  "风达"

 2)Struts2对国际化的支持

分为三种

页面显示的国际化

处理action级别提示错误的国际化

处理xml中field级别错误提示信息的国际化

页面显示的国家化

 

(1)修改sturts.xml文件

在sturts.xml文件中添加元素信息,这在以前的项目中已经有了

<constant name="struts.custom.i18n.resources" value="message">

</constant>

注:value值message为baseName

 (2)建立配置文件,并且写入代码:

message_en_US.properties

AddUser = Add User Information

message_zh_CN.properties

AddUser = /u6dfb/u52a0/u7528/u6237/u4fe1/u606f

 (3)修改Register2.jsp文件代码,添加

<center>

<s:text name="AddUser"></s:text>

</center>

注:name的属性值对应与配置文件中的Key值,如果Key不存在,则显示name的属性值

 (4)打开IE,可以看到"添加用户信息"这个标题,如何更改IE的默认语言,

工具————Internet选项————常规————语言————添加,

找到英语(美国)[en_US],添加,并且"上移","确定",刷新页面,可以看到显示

"Add User Information"

 (5)另一种修改JSP页面的方法:

每个S标签元素都有属性 "key",设置该属性值

建立配置文件,

在JSP页面中添加信息:

<s:i18n name=""> <!-- 对应与baseName -->

<s:text name=""> <!-- 对应与Key -->

<s:param></s:param><!-- 对应于配置文件中的参数 -->

</s:text>

</s:i18n>

处理action级别信息,在Validate()中的国际化

在配置文件中添加key

this.addActionError( this.getText("username.empty") );

动态添加信息

List list = new ArrayList();

list.add( username );

this.addActionError( this.getText("username.empty",list) );

关于xml文件中处理field级别信息的国际化

在配置文件中增加key

message元素中增加key属性

对于配置文件的优先级

在src根目录中建立的properties文件可以理解为全局配置文件,

在包中以"package"为baseName建立的properties文件为包配置文件

在包中以类名为baseName建立的properties文件为类配置文件

则,三种配置问件的优先级为:

作用范围越小,优先级越高

你可能感兴趣的:(Struts2学习笔记17:Struts2的国际化)