`
puppy117
  • 浏览: 52197 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

**struts程序的国际化(上)-JAVA程序国际化

阅读更多
国际化是指应用程序运行时,可根据客户端请求来自的国家/地区、语言的不同而显示不同的界面。例如,如果请求来自于中文操作系统的客户端,则应用程序中的各种标签、错误提示和帮助等都使用中文:如果客户端使用英文操作系统,则应用程序能自动识别,并作出英文的响应。国际化的英文单词是Internationalization ,有时也简称I18N。其中I 是这个单词的第一个字母, 18 表示这个单词的长度,而N 代表这个单词的最后一个字母。
Struts 的国际化也是基于Java 的国际化的,下面先介绍Java 程序的国际化。
一、Java 程序的国际化
Java 程序的国际化思路是将程序中的标签、提示等信息放在资源文件中,每个程序需要所有支持的国家飞语言,都必须提供对应的资源文件。其资源文件是key-value 对,每个资源文件中的key 是不变的,但value 则随不同国家飞语言而变化。
Java 程序的国际化主要通过如下三个类完成。
• java.util.ResourceBundle: 对应用于加载一个资源包。
• java.util.Locale: 对应一个特定的国家/区域及语言环境。
• java.text.MessageFormat: 用于将消息格式化。
为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是和很多key-value 对。其中key 是程序使用的部分,而value 则是程序界面的显示。
资源文件的命名可以有如下三种形式。
• baseName_language_country.properties。
• baseName_language.properties。
• baseName.properties 。
其中baseName 是资源文件的基本名,用户可以自由定义。而language 和country都不可随意变化,必须是Java 所支持的语言和国家。
(1)国际化支持的语言和国家
事实上, Java 也不可能支持所有国家和语言,如需要获取Java 所支持的语言和国家,可调用Locale 类的getAvailableLocale 方法来获取。该方法返回一个Locale 数组,该数组里包含了Java 所支持的语言和国家。
下面的程序简单地示范了如何获取Java 所支持的国家和语言:
import java.util.Locale;
public class qq {
	public static void main(String[] args) {
		// 返回Java 所支持的全部国家和语言的数组
		Locale[] localeList = Locale.getAvailableLocales();
		// 遍历数组的每个元素,依次获取所支持的国家和语言
		for (int i = 0; i < localeList.length; i++) {
			// 打印出所支持的国家和语言
			System.out.println(localeList[i].getDisplayCountry() + "="
					+ localeList[i].getCountry() + " "
					+ localeList[i].getDisplayLanguage() + "="
					+ localeList[i].getLanguage());
		}
	}
}

运行结果如下:
= 阿拉伯文=ar
阿拉伯联合酋长国=AE 阿拉伯文=ar
巴林=BH 阿拉伯文=ar
阿尔及利亚=DZ 阿拉伯文=ar
埃及=EG 阿拉伯文=ar
伊拉克=IQ 阿拉伯文=ar
约旦=JO 阿拉伯文=ar
科威特=KW 阿拉伯文=ar
黎巴嫩=LB 阿拉伯文=ar
利比亚=LY 阿拉伯文=ar
摩洛哥=MA 阿拉伯文=ar
阿曼=OM 阿拉伯文=ar
卡塔尔=QA 阿拉伯文=ar
沙特阿拉伯=SA 阿拉伯文=ar
苏丹=SD 阿拉伯文=ar
叙利亚=SY 阿拉伯文=ar
突尼斯=TN 阿拉伯文=ar
也门=YE 阿拉伯文=ar
印度=IN 印地文=hi
= 希伯来文=iw
以色列=IL 希伯来文=iw
= 日文=ja
日本=JP 日文=ja
= 朝鲜文=ko
韩国=KR 朝鲜文=ko
= 泰文=th
泰国=TH 泰文=th
泰国=TH 泰文=th
= 越南文=vi
越南=VN 越南文=vi
= 中文=zh
中国=CN 中文=zh
香港=HK 中文=zh
台湾地区=TW 中文=zh
= 白俄罗斯文=be
白俄罗斯=BY 白俄罗斯文=be
= 保加利亚文=bg
保加利亚=BG 保加利亚文=bg
= 加泰罗尼亚文=ca
西班牙=ES 加泰罗尼亚文=ca
= 捷克文=cs
捷克共和国=CZ 捷克文=cs
= 丹麦文=da
丹麦=DK 丹麦文=da
= 德文=de
奥地利=AT 德文=de
瑞士=CH 德文=de
德国=DE 德文=de
卢森堡=LU 德文=de
= 希腊文=el
希腊=GR 希腊文=el
澳大利亚=AU 英文=en
加拿大=CA 英文=en
英国=GB 英文=en
爱尔兰=IE 英文=en
印度=IN 英文=en
新西兰=NZ 英文=en
南非=ZA 英文=en
= 西班牙文=es
阿根廷=AR 西班牙文=es
玻利维亚=BO 西班牙文=es
智利=CL 西班牙文=es
哥伦比亚=CO 西班牙文=es
哥斯达黎加=CR 西班牙文=es
多米尼加共和国=DO 西班牙文=es
厄瓜多尔=EC 西班牙文=es
西班牙=ES 西班牙文=es
危地马拉=GT 西班牙文=es
洪都拉斯=HN 西班牙文=es
墨西哥=MX 西班牙文=es
尼加拉瓜=NI 西班牙文=es
巴拿马=PA 西班牙文=es
秘鲁=PE 西班牙文=es
波多黎哥=PR 西班牙文=es
巴拉圭=PY 西班牙文=es
萨尔瓦多=SV 西班牙文=es
乌拉圭=UY 西班牙文=es
委内瑞拉=VE 西班牙文=es
= 爱沙尼亚文=et
爱沙尼亚=EE 爱沙尼亚文=et
= 芬兰文=fi
芬兰=FI 芬兰文=fi
= 法文=fr
比利时=BE 法文=fr
加拿大=CA 法文=fr
瑞士=CH 法文=fr
法国=FR 法文=fr
卢森堡=LU 法文=fr
= 克罗地亚文=hr
克罗地亚=HR 克罗地亚文=hr
= 匈牙利文=hu
匈牙利=HU 匈牙利文=hu
= 冰岛文=is
冰岛=IS 冰岛文=is
= 意大利文=it
瑞士=CH 意大利文=it
意大利=IT 意大利文=it
= 立陶宛文=lt
立陶宛=LT 立陶宛文=lt
= 拉托维亚文(列托)=lv
拉脱维亚=LV 拉托维亚文(列托)=lv
= 马其顿文=mk
马其顿王国=MK 马其顿文=mk
= 荷兰文=nl
比利时=BE 荷兰文=nl
荷兰=NL 荷兰文=nl
= 挪威文=no
挪威=NO 挪威文=no
挪威=NO 挪威文=no
= 波兰文=pl
波兰=PL 波兰文=pl
= 葡萄牙文=pt
巴西=BR 葡萄牙文=pt
葡萄牙=PT 葡萄牙文=pt
= 罗马尼亚文=ro
罗马尼亚=RO 罗马尼亚文=ro
= 俄文=ru
俄罗斯=RU 俄文=ru
= 斯洛伐克文=sk
斯洛伐克=SK 斯洛伐克文=sk
= 斯洛文尼亚文=sl
斯洛文尼亚=SI 斯洛文尼亚文=sl
= 阿尔巴尼亚文=sq
阿尔巴尼亚=AL 阿尔巴尼亚文=sq
= 塞尔维亚文=sr
波斯尼亚和黑山共和国=BA 塞尔维亚文=sr
塞尔维亚及黑山=CS 塞尔维亚文=sr
= 瑞典文=sv
瑞典=SE 瑞典文=sv
= 土耳其文=tr
土耳其=TR 土耳其文=tr
= 乌克兰文=uk
乌克兰=UA 乌克兰文=uk
美国=US 英文=en
= 英文=en

(2)编写国际化所需的资源
国际化所需的资源文件内容是key-value 对,下面提供了两个资源文件,这两个资源文件很简单,只包含一个key-value 对。
下面是MyResource.properties 的文件的内容:
// 资源文件的内容: key-value 对。
msg=Hello , {O} ! Today is {1}.
下面是MyResource_zh_CN.properties 文件的内容:
// 资源文件的内容: key-value 对
msg=你好 , {O}! 今天是{l}。
所有资源文件的key 都是相同的,只是value 会随国家和语言的不同而变化。
对于所有的非西欧文字还必须使用native2ascii 命令转化,该命令负责将非西欧文字转换成系统可以识别的文字。
因此必须对MyResouce_zh_CN.properties文件进行转化。命令的格式如下:
native2ascii MyResouce_zh_CN.properties MyResouce_x.properties
转换后新生成的文件内容会出现很多乱码,这是正常的。可将其转换成生成的MyResouce_x.properties文件重命名为MyResouce_zh_CN.properties 即可。
(3)完成程序国际化
上面的资源文件实质上有如下两种。
• MyResouce_zh_CN.properties: 指定了确定的国家和语言的资源文件。
• MyResouce.properties: 没有指定国家和语言的资源文件。
下面的程序可实现程序的国际化:
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

public class qq {
	public static void main(String[] args) {
		Locale currentLocale = null;
		// 如果运行程序时指定了国家和语言参数,则以此创建Locale 对象
		if (args.length == 2) {
			currentLocale = new Locale(args[0], args[1]);
		}
		// 否则,直接使用默认的国家和语言
		else {
			currentLocale = Locale.getDefault();
		}
		// 根据Locale 加载资源包
		ResourceBundle bundle = ResourceBundle.getBundle("MyResource",
				currentLocale);
		// 根据key 获取对应的资源
		String msg = (String) bundle.getObject("msg");
		// 创建MessageFormat对象,用于获取格式化消息
		MessageFormat mf = new MessageFormat("");
		// 创建Locale 对象
		// 设置国际化时所使用的Locale 实例
		mf.setLocale(currentLocale);
		// 设置需要格式化的消息
		mf.applyPattern(msg);
		Date now = new Date();
		// 为消息中需要的参数指定值
		Object[] msgParams = { "yeeku", now };
		// 输出国际化消息
		System.out.println(mf.format(msgParams));
	}
}

运行时,如果指定了两个参数: en Us ,则表明用于显示美国英语的环境
但是,程序并没有指定MyResource_en_US.properties 文件,程序从哪里获取资源呢?在ResourceBundle 加载资源时按如下顺序搜索。搜索所有国家和语言都匹配的资源文件,例如,对于简体中文的环境,先搜索如下文件:MyResource_zh_CN.properties。如果没有找到国家和语言都匹配的资源文件,则再搜索语言匹配的文件,即搜索如下文件:MyResource_zh.properties。如果上面的文件依然无法搜索到,则搜索baseNarne 匹配的文件,即搜索如下文件:MyResource.properties
(4)使用类文件代替资源文件
Java 也允许使用类文件代替资源文件,即将所有的key-value对存入class 文件,而不是属性文件。
用来代替资源文件的Java 文件必须满足如下条件。
·类的名字必须为baseName_language_country,这与属性文件的命名相似。
·该类必须继承ListResourceBundle,并重写getContents 方法,该方法返回Object数组,该数组的每一个项都是key-value 对。
下面的类文件可以代替上面的属性文件:
import java.util.ListResourceBundle;
public class MyResource_zh_CN extends ListResourceBundle {
	// 定义资源
	private final Object myData[][] = { { "msg", "{0},您好!今天是{1}" } };
	// 重写方法getContents()
	public Object[][] getContents() {
		//该方法返回资源的key-value对
		return myData;
	}
}

如果系统同时存在资源文件及类文件,则系统将以类文件为主,而不会调用资源文件。对于简体中文的Lοcale, ResourceBundle 搜索资源的顺序是:
(1) baseName_zh_CN.class 。
(2) baseName_zh_CN.properties。
(3) baseName_zh.class 。
(4) baseName_zh.properties。
(5) baseName.class。
(6) baseName.properties。
当系统按上面的顺序搜索资源文件时,如果前面的文件不存在,则会使用下一个;如果一直找不到对应的文件,系统将抛出异常。

分享到:
评论

相关推荐

    struts-2.3.16.3-all

    7. **国际化与本地化**:Struts 2支持多语言环境,通过资源bundle文件实现内容的国际化和本地化。 8. **富客户端支持**:Struts 2可以很好地支持AJAX和富互联网应用程序(RIA),提供了一套Ajax插件来简化异步交互...

    struts-2.1.8.1-lib-src.zip

    Struts 2是Java平台上的一个开源MVC框架,它为构建基于J2EE的Web应用程序提供了强大的支持。Struts 2.1.8.1是该框架的一个版本,其lib-src.zip文件包含了该版本所需的库文件源代码,这对于开发者来说是极其宝贵的...

    struts-2.3.1.2-lib精简必须包

    Struts 2.3.1.2 是一个流行的开源Java框架,主要用于构建MVC(Model-View-Controller)架构的Web应用程序。此“struts-2.3.1.2-lib精简必须包”包含了运行Struts 2应用程序所需的核心库文件。下面将详细介绍这个精简...

    struts-2.2.3.1-apps

    Struts 2 是一个流行的开源Java Web框架,用于构建企业级Web应用程序。版本2.2.3.1是该框架的一个特定发行版,提供了一系列增强的功能和修复了已知的安全漏洞。这个压缩包"struts-2.2.3.1-apps"包含了Struts 2框架的...

    struts-1.2.9-all-bin

    Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发并维护。这个"struts-1.2.9-all-bin"压缩包包含了Struts框架的完整二进制版本,适用于那些想要在项目中使用或者学习Struts 1.x版本的开发者...

    struts-2.1.8.1-all.zip完整jar包

    Struts 2.1.8.1 是一个流行的开源Java框架,主要用于构建企业级Web应用程序。这个"struts-2.1.8.1-all.zip"压缩包包含了该版本Struts框架的所有必需组件,便于开发者在项目中快速集成和使用。下面我们将详细探讨...

    struts-2.3.16.3-docs.zip

    Struts 2是Java平台上的一个开源MVC框架,它为构建基于J2EE的Web应用程序提供了强大的架构支持。此压缩包"struts-2.3.16.3-docs.zip"包含了Struts 2版本2.3.16.3的官方文档,这个版本在Struts 2的生命周期中扮演了...

    struts1.x 最简洁国际化 源代码

    在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化的一些核心知识点: 1. **资源包(Resource Bundle)**: - 在Java中,资源包是包含...

    struts2-spring-plugin-2.2.1.jar

    Struts2的核心功能包括:Action映射、结果映射、拦截器机制、强大的表单验证和国际化支持等。通过使用Struts2,开发者可以更专注于业务逻辑的实现,而非底层的HTTP请求处理。 **Spring框架** Spring 是一个全面的...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许开发者在Struts 2中轻松地创建能够返回JSON的Action,使得前端(通常使用JavaScript库如jQuery)可以...

    struts-2.5.26-min-lib.zip

    Struts 2是Java平台上的一个开源MVC框架,它为构建基于J2EE的Web应用程序提供了强大的支持。Struts 2.5.26-min-lib.zip是一个精简版的库文件集合,主要包含了运行Struts 2应用程序所需的最小依赖库。这个压缩包可能...

    struts-2.3.15.1-lib.zip

    Struts 2是Java平台上的一个开源MVC框架,它为构建基于J2EE的Web应用程序提供了强大的支持。Struts 2的版本2.3.15.1是该框架的一个稳定版本,其中包含了用于开发的全套库文件,即描述中的"lib.zip"。这个压缩包主要...

    struts-2.3.15.3-all.zip

    Struts 2是Java平台上的一个开源MVC框架,它为构建基于J2EE的Web应用程序提供了强大的架构支持。此压缩包"struts-2.3.15.3-all.zip"包含了Struts 2框架的版本2.3.15.3的所有组件,但不含示例和文档。以下是对Struts ...

    struts从入门到精通.doc

    - **3.5 为Web服务构建Struts应用程序** - 讲述了如何利用Struts框架来构建Web服务应用。 - **3.6 Struts标记库是如何工作的** - 解释了Struts标记库的工作原理及其内部机制。 - **3.7 Struts** - 此节可能是指更...

    struts-2.3.24.1-all jar包

    Struts 2是Java Web开发中的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的应用程序。此“struts-2.3.24.1-all.jar”包是Struts 2框架的一个特定版本,包含了所有必要的组件和库,便于开发者在一个项目中...

    Struts框架基础包

    4. **国际化与本地化支持**:`struts-i18n-x.x.x.jar`包含国际化和本地化资源,使得应用能够根据用户的语言和地区提供相应的界面。 5. **异常处理**:`struts-exception-x.x.x.jar`包含了Struts框架对异常的处理...

    struts1.2 国际化

    Struts 1.2 框架作为 Java Web 开发的经典框架之一,提供了强大的国际化支持。本文将详细介绍 Struts 1.2 如何实现国际化,以及如何利用该框架创建国际化应用。 #### 二、本地化与国际化基础 ##### 1. 本地化 ...

    struts-------资料.rar

    Struts 是一个开源的Web应用程序框架,主要用于构建和维护MVC(Model-View-Controller)架构的Java Web应用。在Java EE世界中,Struts框架是早期非常流行的一个选择,它帮助开发者组织和管理复杂的业务逻辑,使得...

    struts-2.1.8-all-src.zip

    Struts2是一个非常著名的Java Web框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性、可扩展性极高的Web应用程序的工具。2.1.8是Struts2的一个版本,它在之前的基础上进行了一些改进和...

    struts-2.3.15

    7. **国际化与本地化**:Struts 2支持多语言,可以轻松实现应用的国际化和本地化,通过资源包(properties文件)管理不同语言的文本。 8. **结果类型(Result Types)**:Struts 2预定义了多种结果类型,如...

Global site tag (gtag.js) - Google Analytics