Java之国际化操作

                                       国际化操作

一.国际化对照表

Arabic, Egypt (ar-EG) —————————–阿拉伯语,埃及 
Arabic, Israel (ar-IL) ——————————-阿拉伯语,以色列 
Bulgarian, Bulgaria (bg-BG) ———————保加利亚语,保加利亚 
Catalan, Spain (ca-ES) —————————加泰隆语,西班牙 
Czech, Czech Republic (cs-CZ) —————–捷克语,捷克共和国 
Danish, Denmark(da-DK) ————————丹麦语,丹麦 
German, Austria (de-AT) ————————-德语,奥地利 
German, Switzerland (de-CH) ——————-德语,瑞士 
German, Germany (de-DE) ———————-德语,德国 
German, Liechtenstein (de-LI) ——————德语,列支敦士登的 
Greek, Greece (el-GR) —————————-希腊语,希腊 
English, Australia (en-AU) ————————-英语,澳大利亚 
English, Canada (en-CA) ————————–英语,加拿大 
English, Britain (en-GB) —————————-英语,英国 
English, Ireland (en-IE) —————————–英语,爱尔兰 
English, India (en-IN) ——————————–英语,印度 
English, New Zealand (en-NZ) ———————英语,新西兰 
English, Singapore(en-SG) ————————–英语,新加坡 
English, US (en-US) ———————————–英语,美国 
English, Zimbabwe (en-ZA) ————————–英语,津巴布韦 
Spanish (es-ES) —————————————-西班牙 
Spanish, US (es-US) ———————————–西班牙语,美国 
Finnish, Finland (fi-FI) ———————————芬兰语,芬兰 
French, Belgium (fr-BE) ——————————-法语,比利时 
French, Canada (fr-rCA) ——————————-法语,加拿大 
French, Switzerland (fr-CH) ————————–法语,瑞士 
French, France (fr-FR) ——————————–法语,法国 
Hebrew, Israel (he-IL) ———————————希伯来语,以色列 
Hindi, India (hi-IN) ————————————-印地语,印度 
Croatian, Croatia (hr-HR) —————————-克罗地亚语,克罗地亚 
Hungarian, Hungary (hu-HU) ————————匈牙利语,匈牙利 
Indonesian, Indonesia (id-ID) ————————印尼语,印尼 
Italian, Switzerland (it-CH) —————————-意大利语,瑞士 
Italian, Italy (it-IT) —————————————意大利语,意大利 
Japanese (ja-JP) —————————————-日语 
Korean (ko-KR) ——————————————朝鲜语 
Lithuanian, Lithuania (lt-LT) ————————–立陶宛语,立陶宛 
Latvian, Latvia (lv-LV) ———————————拉托维亚语,拉托维亚 
Norwegian-Bokmol, Norway(nb-NO) —————挪威语,挪威 
Dutch, Belgium (nl-BE) ——————————–荷兰语,比利时 
Dutch, Netherlands (nl-NL) —————————荷兰语,荷兰 
Polish (pl-PL) ——————————————-波兰 
Portuguese, Brazil (pt-BR) —————————葡萄牙语,巴西 
Portuguese, Portugal (pt-PT) ————————葡萄牙语,葡萄牙 
Romanian, Romania (ro-RO) ————————罗马尼亚语,罗马尼亚 
Russian (ru-RU) —————————————-俄语 
Slovak, Slovakia (sk-SK) ——————————斯洛伐克语,斯洛伐克 
Slovenian, Slovenia (sl-SI) —————————-斯洛文尼亚语,斯洛文尼亚 
Serbian (sr-RS) —————————————-塞尔维亚语 
Swedish, Sweden (sv-SE) —————————-瑞典语,瑞典 
Thai, Thailand (th-TH) ——————————–泰语,泰国 
Tagalog, Philippines (tl-PH) ————————–菲律宾语,菲律宾 
Turkish, Turkey (tr-TR) ——————————-土耳其语,土耳其 
Ukrainian, Ukraine (uk-UA) ————————–联合王国 
Vietnamese, Vietnam (vi-VN) ———————–越南语,越南 
Chinese, PRC (zh-CN)——————————–中文,中国 
Chinese, Taiwan (zh-TW)—————————–中文,台湾

二.Java中的国际化操作

国际化程序可以这样理解:

                  · 同一套程序代码可以在各个语言环境下进行使用。

         · 各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能。

         在实际的开发中如果要想进行一个国际化程序的开发,则肯定会非常的麻烦,而且此种项目一般较少,那么理解国际化的基本操作和实现思想即可。

       所谓的国际化的实现核心在于显示的语言上,那么对于这些显示的语言,最好的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的形式进行操作。

         如果要想实现国际化程序则肯定需要依靠以下几个类:

                   · java.util.Locale类:用于表示一个国家的语言类

                   · java.util.ResourceBundle类:用于读取资源文件(属性文件,*.properties)

                   · java.text.MessageFormat类:用于进行文本的格式化操作

2.1、Locale类

         Locale类本身表示一个国际化程序的语言操作类,是整个操作的核心,那么此类的操作方法如下:

No.

方法名称

类型

描述

1

public Locale(String language,String country)

构造

构造的时候跟上语言和国家

2

public static Locale getDefault()

普通

根据本地的语言环境得到Locale类对象

         如果现在要想设置一个表示中文的Locale对象,则必须使用如下的方式:new Locale("zh","CN") ;

         如果是英文的美国的语言环境:new Locale("en","US") ;

         但是,以上的这些代码你是怎么知道的呢?

         浏览器本身是不是属于多国语言的操作,那么实际上所有的国家的编码都可以通过浏览器找到。

         【工具】 à 【Internet选项】 à 【语言】

         没有任何的必要去强记这些操作,因为所有的编码在浏览器之上全都有显示。

2.2、ResourceBundle类

         ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用ResourceBundle进行读取,读取的时候不需要加上文件的后缀,文件的后缀默认就是“*.properties”。

         那么此类的方法如下:

No.

方法名称

类型

描述

1

public static final ResourceBundle getBundle(String baseName)

普通

根据本地的语言环境,并设置要操作的属性文件的名称,得到实例

2

public static final ResourceBundle getBundle(String baseName,Locale locale)

普通

根据指定的语言环境,设置要操作属性文件的名称,得到实例

3

public final String getString(String key)

普通

根据资源文件中的key取得对应的value

         下面就使用ResouceBundler类得到资源文件中的内容。

1、   建立一个资源文件:Message.properties

info = Hello

2、   建立操作类,访问此属性文件,并且得到相关的信息

import java.util.ResourceBundle;

public class InternationDemo01 {

    public static void main(String[] args) {

         //设置本地语言格式

Locale locale  = new Locale("en","US");

        // 得到ResourceBundle类的实例,并且设置要操作的资源文件的名称

        ResourceBundle res = ResourceBundle.getBundle("Message",locale );

        String str = res.getString("info"); // 根据所指定的资源文件中key取得与之对应value

        System.out.println("内容:" + str) ;

    }

}

         那么以上的程序中可以发现通过ResouceBundle类找到了资源文件中的内容并进行显示。

2.3、实现国际化

         下面编写一个程序,此程序可以显示中文的“你好”或者显示英文的“hello”,为了完成此种操作,那么此时需要建立多个资源文件,而且每一个资源文件的后缀是不同的,后缀的形式“资源文件_后缀.properties”/

1、   中文的资源文件:Message_zh_CN.properties

         ·但是在Eclipse中在保存中文信息的时候将出现提示,说只能保存的是“ISO 8859-1的英文”内容,而不能保存中文内容,所以,此时如果是想操作中文的话,则必须对中文进行转码操作,使用JDK 目录中的一个“native2ascii.exe”。

# 你好!!!!!!!

info = \u4f60\u597d\uff01\uff01\uff01\uff01\uff01\uff01\uff01

         “#”开头的信息表示的是注释,只要是注释中也不能存在中文。

2、   英文的资源文件:Message_en_US.properties

info = Hello !!!!!!!!!

         之后,编写程序,同时建立两个Locale对象,一个表示读取中文,另外一个表示读取英文。

import java.util.Locale;

import java.util.ResourceBundle;

public class InternationDemo02 {

    public static void main(String[] args) {

        Locale zhLoc = new Locale("zh", "CN"); // 得到中文的Locale对象

        Locale enLoc = new Locale("en", "US"); // 得到英文的Locale对象

        // 得到ResourceBundle类的实例,并且取得资源文件的名称

        // 以下得到的是中文的资源文件:Message_zh_CN.properties

        ResourceBundle zhRes = ResourceBundle.getBundle("Message", zhLoc);

        // 以下得到的是英文的资源文件:Message_en_US.properites

        ResourceBundle enRes = ResourceBundle.getBundle("Message", enLoc);

        System.out.println("中文内容:" + zhRes.getString("info"));

        System.out.println("英文内容:" + enRes.getString("info"));

    }

}

         此时,只要设置了正确的区域,则会读取不同的文件,根据资源文件的所指定的区域。

         因为此时存在了更家具体的语言的资源文件,所以“Message.properties”根本就不会被读取到。

         如果此时要读的具体的资源文件不存在。则会使用默认的文件进行内容的读取。

2.4、处理动态文本

         之前的所有操作中,读取的内容都是固定的,但是如果现在假设要想打印这样的信息“欢迎,Xxx光临!”,具体的登陆名称不是固定的,所以之前的操作就会存在问题了,那么此时就可以使用动态文本进行程序的处理。

         如果要想进行动态的文本处理,则必须使用java.text.MessageFormat类完成。此类是java.text.Format的子类。

         java.text.Format类中有三个常用的子类:MessageFormat、DateFormat、NumberFormat。

         修改之前的资源文件:

1、   修改Message_zh_CN.properties文件:

# 你好,{0},欢迎{1}光临!

info = \u4f60\u597d\uff0c{0}\uff0c\u6b22\u8fce{1}\u5149\u4e34\uff01

2、   修改Message_en_US.properties文件:

info = Hello ,{0}.Welcome {1} !

         以上有两个参数,所以在使用的时候就需要准确的设置,使用的方法如下:

No.

方法名称

类型

描述

1

public static String format(String pattern,Object... arguments)

普通

设置动态文本,采用可变参数的形式进行设置

范例:读取动态文本

import java.text.MessageFormat;

import java.util.Locale;

import java.util.ResourceBundle;

public class InternationDemo03 {

    public static void main(String[] args) {

        Locale zhLoc = new Locale("zh", "CN"); // 得到中文的Locale对象

        Locale enLoc = new Locale("en", "US"); // 得到英文的Locale对象

        // 得到ResourceBundle类的实例,并且取得资源文件的名称

        // 以下得到的是中文的资源文件:Message_zh_CN.properties

        ResourceBundle zhRes = ResourceBundle.getBundle("Message", zhLoc);

        // 以下得到的是英文的资源文件:Message_en_US.properites

        ResourceBundle enRes = ResourceBundle.getBundle("Message", enLoc);

        String zhInfo = zhRes.getString("info"); // 读取中文的内容,但是里面存在占位符

        String enInfo = enRes.getString("info"); // 读取英文的内容,但是里面存在占位符

        System.out

                .println("中文内容:" + MessageFormat.format(zhInfo, "爪哇", "java"));

        System.out.println("英文内容:"

                + MessageFormat.format(enInfo, "pig", "psir"));

    }

}

         以上在开发中使用较多,属于动态文本的操作

三.JSP中如何实现国际化:

<%

Locale locale = request.getLocale();

ResourceBundle bundle =ResourceBundle.getBundle("xx.xx.xx",locale);

%>

 

<title><%=bundle.getString("jsp.title")%></title>

 

四.Struts中关于国际化的操作:

1.      首先必须继承ActionSupport,需要使用该类提供的方法

2.      如果在程序中需要使用, 如下代码:

publicString execute(){

               String   i18nText= getText("key");

               return SUCCESS;

      }

 

 

3.      大部分时候我们还是在JSP页面的呈现上:

<s:textname="key" />

或者

<s:i18n name="xx.xx.xx">

  <s:text name="key" />

   </s:i18n>

4.      我们的国际化配置文件,可以写成全局的,也可以写成动作的:

全局的:package_en_US.properties

动作的:XXAction_en_US.properties

猜你喜欢

转载自blog.csdn.net/DaySurprise/article/details/78630848