`

JAVA国际化

 
阅读更多

http://www.cnblogs.com/jjtech/archive/2011/02/14/1954291.html

国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母。国际化又称本地化(Localization,L10N)。


国际化相关的Java类

Java国际化主要通过如下3个类完成

  • java.util.ResourceBundle:用于加载一个资源包
  • java.util.Locale:对应一个特定的国家/区域、语言环境。
  • java.text.MessageFormat:用于将消息格式化

国际化资源文件

为实现程序的国际化,必须提供程序所需要的资源文件。资源文件的内容由key-value对组成。

资源文件的命名可以有3种格式:

  • basename_language_country.properties
  • basename_language.properties
  • basename_properties

若资源文件包含非西方字符,则需要用JDK自带的工具来处理:native2ascii,这个工具的语法格式如下:

native2ascii 资源文件名 目标资源文件名

如:

native2ascii mess_zh_XXX.proerties mess_zh_CN.proerties

Locale类可获取各国区域环境(如:Locale.ENGLISH、Locale.CHINESE,这些常量返回一个Locale实例),也可以获取当前系统所使用的区域语言环境。

ResourceBundle类可根据指定参数获取相应的资源,常用方法如下

ResourceBundle.getBundle(basename)//获取当前系统所使用的区域环境获得指定资源文件

ResourceBundle.getBundle(basename,locale)//根据指定的区域获取对应的资源文件


语言环境


在 Java 语言中,语言环境(locale)仅仅是一个标识符,而不是一组本地化的属性。java.util.Locale 类的一个实例表示一个特定的地理政治区域,使用表示语言、区域以及国家或地区的参数创建。每个与语言环境相关的类都维护着它自己的一组本地化属性,并且确定如何对含有 Locale 参数的方法请求做出响应。

Java支持的语言和国家

若要获取Java所支持的语言和国家,可调用Locale类的getAvailableLocale方法获取,该方法返回一个Locale数组,该数组里包含了java所支持的语言和国家。

java代码如下:

Locale[] localeList = Locale.getAvailableLocales();
for(inti=0; i<localeList.length; i++) {    
	System.out.println(localeList[i].getDisplayCountry()+"="+localeList[i].getCounrtry() + " "+ localeList[i].getDisplayLanguage() + "="+localeList[i].getLanguage());   
}

 

程序运行结果如下:


Japan=JP Japanese=ja
Peru=PE Spanish=es
= English=en
Japan=JP Japanese=ja
Panama=PA Spanish=es
Bosnia and Herzegovina=BA Serbian=sr
= Macedonian=mk
Guatemala=GT Spanish=es
United Arab Emirates=AE Arabic=ar
Norway=NO Norwegian=no
Albania=AL Albanian=sq
= Bulgarian=bg
Iraq=IQ Arabic=ar
Yemen=YE Arabic=ar
= Hungarian=hu
Portugal=PT Portuguese=pt
Cyprus=CY Greek=el
Qatar=QA Arabic=ar
Macedonia=MK Macedonian=mk
= Swedish=sv
Switzerland=CH German=de
United States=US English=en
Finland=FI Finnish=fi
= Icelandic=is
= Czech=cs
Malta=MT English=en
Slovenia=SI Slovenian=sl
Slovakia=SK Slovak=sk
= Italian=it
Turkey=TR Turkish=tr
= Chinese=zh
= Thai=th
Saudi Arabia=SA Arabic=ar
= Norwegian=no
United Kingdom=GB English=en
Serbia and Montenegro=CS Serbian=sr
= Lithuanian=lt
= Romanian=ro
New Zealand=NZ English=en
Norway=NO Norwegian=no
Lithuania=LT Lithuanian=lt
Nicaragua=NI Spanish=es
= Dutch=nl
Ireland=IE Irish=ga
Belgium=BE French=fr
Spain=ES Spanish=es
Lebanon=LB Arabic=ar
= Korean=ko
Canada=CA French=fr
Estonia=EE Estonian=et
Kuwait=KW Arabic=ar
Serbia=RS Serbian=sr
United States=US Spanish=es
Mexico=MX Spanish=es
Sudan=SD Arabic=ar
Indonesia=ID Indonesian=in
= Russian=ru
= Latvian=lv
Uruguay=UY Spanish=es
Latvia=LV Latvian=lv
= Hebrew=iw
Brazil=BR Portuguese=pt
Syria=SY Arabic=ar
= Croatian=hr
= Estonian=et
Dominican Republic=DO Spanish=es
Switzerland=CH French=fr
India=IN Hindi=hi
Venezuela=VE Spanish=es
Bahrain=BH Arabic=ar
Philippines=PH English=en
Tunisia=TN Arabic=ar
= Finnish=fi
Austria=AT German=de
= Spanish=es
Netherlands=NL Dutch=nl
Ecuador=EC Spanish=es
Taiwan=TW Chinese=zh
Jordan=JO Arabic=ar
= Belarusian=be
Iceland=IS Icelandic=is
Colombia=CO Spanish=es
Costa Rica=CR Spanish=es
Chile=CL Spanish=es
Egypt=EG Arabic=ar
South Africa=ZA English=en
Thailand=TH Thai=th
Greece=GR Greek=el
Italy=IT Italian=it
= Catalan=ca
Hungary=HU Hungarian=hu
= French=fr
Ireland=IE English=en
Ukraine=UA Ukrainian=uk
Poland=PL Polish=pl
Luxembourg=LU French=fr
Belgium=BE Dutch=nl
India=IN English=en
Spain=ES Catalan=ca
Morocco=MA Arabic=ar
Bolivia=BO Spanish=es
Australia=AU English=en
= Serbian=sr
Singapore=SG Chinese=zh
= Portuguese=pt
= Ukrainian=uk
El Salvador=SV Spanish=es
Russia=RU Russian=ru
South Korea=KR Korean=ko
= Vietnamese=vi
Algeria=DZ Arabic=ar
Vietnam=VN Vietnamese=vi
Montenegro=ME Serbian=sr
= Albanian=sq
Libya=LY Arabic=ar
= Arabic=ar
China=CN Chinese=zh
Belarus=BY Belarusian=be
Hong Kong=HK Chinese=zh
= Japanese=ja
Israel=IL Hebrew=iw
Bulgaria=BG Bulgarian=bg
= Indonesian=in
Malta=MT Maltese=mt
Paraguay=PY Spanish=es
= Slovenian=sl
France=FR French=fr
Czech Republic=CZ Czech=cs
Switzerland=CH Italian=it
Romania=RO Romanian=ro
Puerto Rico=PR Spanish=es
Canada=CA English=en
Germany=DE German=de
= Irish=ga
Luxembourg=LU German=de
= German=de
Argentina=AR Spanish=es
= Slovak=sk
Malaysia=MY Malay=ms
Croatia=HR Croatian=hr
Singapore=SG English=en
= Danish=da
= Maltese=mt
= Polish=pl
Oman=OM Arabic=ar
= Turkish=tr
Thailand=TH Thai=th
= Greek=el
= Malay=ms
Sweden=SE Swedish=sv
Denmark=DK Danish=da
Honduras=HN Spanish=es

 

通过该程序,我们就可以获得Java程序所支持的国家/语言环境。


JAVA程序的国际化

原始程序:

system.out.println("Hello");

其中Hello字符串需国际化,定义资源文件,文件名分别为base_zh_CN.properties和base_en_US

base_zh_CN.properties文件内容如下:

hello=你好

base_en_US.properties文件内容如下:

hello=Hello

将这两个文件放入某个包中,如“com.jj.test”,用native2ascii重新生成资源文件

修改程序:

Locale myLocale = Locale.getDefault();//获得系统默认的国家/语言环境
ResourceBundle bundle = ResourceBundle.getBundle("base",myLocale);//根据指定的国家/语言环

 境加载对应的资源文件

System.out.println(bundle.getString(hello"));//获得本地化字符串


JAVA国际化流程

ResourceBundle根据Locale加载资源文件->返回一个ResourceBundle实例->ResourceBundle调用getString方法返回指定key对应的字符串

带占位符的消息

上面的输出消息是一个间的的消息,若要输出的消息中必须包含动态的内容,这些内容必须是从程序中获取的,可利用带占位符的国际化资源文件来实现。

例如下面的字符串:

你好,Eason!今天是07-5-30 下午 13:00

Eason是浏览者的姓名,必须动态改变,后面的时间也必须动态改变,则此处需要2个占位符。

资源文件示例:

msg=你好,{0}!今天是{1}

程序中需要使用MessageFormat类

该类有个静态方法:

format(String pattern,Object … values)

上例对应的JAVA中的字符串输出代码如下:

ResourceBundle bundle = ResourceBundle.getBundle("MyResource", currentLocale);

String msg = bundle.getString("msg");

System.out.println(MessageFormat.format(msg,"Eason", new Date()));

使用类文件代替资源文件

Java允许使用类文件来代替资源文件,即手动书写代码来实现国际化,

  • 该类要求继承于ListResourceBundle,并重写getContents方法该方法返回Object数组,该数组的每一个项都是key-value对。
  • 类的名字必须为basename_language_contry,这与属性文件的命名相似。

如:


public class MyResource_zh_CN extends ListResourceBundle {
private final Object myData[][]= {
    {"msg","{0},Hello"}
};
public Object[][] getContents() {return myData;}
}

 

上面这个是简体中文语言环境下的资源文件,该类可以替换MyResource_zh_CN.properties属性文件。

如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。例如对于basename为MyResourse的这一系列中文资源文件,系统搜索顺序如下:

  1. MyResourse_zh_CN。class
  2. MyResourse_zh_CN.properties
  3. MyResourse_zh.class
  4. MyResourse_zh.properties
  5. MyResourse.class
  6. MyResourse.properties
分享到:
评论

相关推荐

    java国际化&时间处理

    Java国际化(Internationalization)与时间处理是开发过程中两个重要的领域,尤其对于构建全球化应用程序来说,理解和掌握这些概念至关重要。国际化允许软件适应不同地区的语言、文化习惯和格式,而时间处理则涉及...

    java国际化官方指南

    Java作为广泛使用的编程语言之一,提供了强大的国际化支持。国际化,通常指软件能够支持多种语言和地区的不同习惯,...遵循Java国际化官方指南,开发者可以将应用程序本地化为多种语言,适应不同地区用户的使用习惯。

    Java 国际化问题

    Java 国际化 Java 国际化 Java 国际化

    java国际化实现框架底层源码

    Java国际化实现框架底层源码分析 Java国际化(i18n,Internationalization)是为了支持不同地区的语言和文化差异,提供了一种灵活的方式来管理和显示应用程序的文本、日期、数字和其他文化敏感的信息。Java提供了...

    java国际化i18n

    Java国际化(i18n)是Java平台为支持全球不同地区的用户和语言而设计的一种机制。i18n这个名字来源于“internationalization”这个单词,其中'i'是第9个字母,'n'是第14个字母,所以18代表了两者之间的字母数。Java的...

    Java国际化编程及其实现.rar

    Java国际化编程,简称i18n(取"internationalization"一词中第18个字母i作为缩写),是Java平台提供的一种强大的功能,旨在帮助开发者创建能够适应不同语言和地区需求的应用程序。Java的国际化设计使得软件能够在...

    java国际化例子I18N.rar

    java国际化实例,内置源码,还有说明文档。源码包里有编译好的jar文件,已经可以执行,可以实现中文和英文界面的切换,无需要安装插件,调用系统资源,有需要的朋友们请下载吧。 个人体会:做项目时需要用到国际化的...

    java国际化.ppt

    Java 国际化(i18n)是开发支持多语言的应用程序的关键步骤,使得软件能够适应不同国家和地区用户的需求。以下将详细讲解Java中实现国际化涉及的主要知识点: 1. **软件国际化的意义**: - 提高软件的全球适用性,...

    java国际化组件

    Java国际化组件是Java开发中一个重要的功能模块,它允许开发者为不同地区的用户创建多语言支持的应用程序。在Java中,国际化通常通过使用Resource Bundle和Java的Locale类来实现。资源库(Resource Bundle)包含了...

    Java国际化配置

    用Java写的一个国际化语言配置模块,可实现简单的国际化配置。

    java 实现国际化 中英文语言切换

    Java 实现国际化是一种重要的软件开发技术,特别是在构建多语言支持的应用程序时。国际化(i18n)使得软件能够适应不同国家和地区的语言环境,包括中文和英文。在这个主题中,我们将深入探讨如何使用Java和JSP进行...

    JAVA国际化文件生成工具

    标题提到的"JAVA国际化文件生成工具"是一种辅助开发者创建和管理这些多语言资源文件的工具。这种工具可能提供以下功能: 1. **资源文件创建**:自动生成基础的`.properties`文件结构,这些文件通常命名为`messages_...

    最简单的java国际化例子

    Java国际化(Internationalization,通常缩写为i18n)是一种设计和开发应用程序的方法,使得它们可以适应不同的语言和地域文化。在Java中,通过使用特定的API和资源文件,我们可以实现应用程序的国际化,以便在不同...

    Java 国际化操作

    2. **Resource Bundle**:资源包是Java国际化的关键组成部分,它是一个包含特定语言环境下的文本和数据的文件集合。通常以.properties格式存储,例如`messages_en.properties`和`messages_fr.properties`分别代表...

    Java国际化的工具 propedit

    Java国际化的工具propedit是Java开发中用于处理国际化(i18n)和本地化(l10n)过程的一款实用程序。在Java应用程序中,为了支持不同地区的用户,我们需要提供多语言支持,这就涉及到了国际化和本地化。propedit正是...

    java 国际化转换

    ### Java国际化转换详解 #### 一、Java国际化概念与意义 在软件开发过程中,随着产品的全球化,越来越多的应用程序需要支持多种语言环境。这就引出了一个重要的概念——国际化(Internationalization)。通常简称...

    java国际化代码(jsp)

    Java国际化(i18n,Internationalization)是Java平台提供的一种强大的功能,使得软件能够适应不同语言和文化环境。在Java中,国际化主要通过资源包(Resource Bundle)和Locale对象来实现。资源包是一个包含特定...

Global site tag (gtag.js) - Google Analytics