java國際化介紹+Demo

引言

        今天小編聽到了一個詞:國際化。現在全球都要多元化了,所以程序國際化也是順勢而出的……(ps:其實這個早就有了,小編也是硬扯到一起的!)

國際化簡介

     國際化的英文爲Internationalization,這個也太長了,所以它又稱爲I18n(英文單詞 internationalization的首末字符i和n,18爲中間的字符數)。

     除了i18n還有L10n(localization),g11n(globalization),還有m17n(multilingualization)

        它們的區別是:

  • i18n支持多種語言,但是同一時間只能是英文和一種選定的語言,例如英文+中文、英文+德文、英文+韓文等等;
  • L10n(localization),支持2種語言,英文和另外一種語言(例如中文);
  • g11n(globalization),簡單的理解可以認爲g11n = i18n + L10n。
  • m17n(multilingualization)可以在同一時間支持多種語言,例如你可以在一個頁面裏看到中文、英文、德文和韓文。

        國際化的操作就是指一個程序可以同時適應多門語言,即:如果現在程序者是中國人,則會以中文爲顯示文字,如果現在程序的使用者是美國人,則會以英語爲顯示的文字,也就是說可以通過國際化操作,讓一個程序適應各個國家的語言要求。由此可知,國際化是java的必要元素呀!

原理

        程序根據不同的語言環境找到不同的資源文件,之後從資源文件中取出內容,資源文件中的內容是以key-àvalue的形式保存的,所以在讀取的時候通過其key找到對應的value.

國際化實現的支持類

        如果想要實現java程序的國際化操作必須通過以下的三個類完成:

       1.Java.util.Locale:用於表示一個國家語言類

       2.Java.util.ResourceBundle:用於訪問資源文件

       3.Java.text.MessageFormat:格式化資源文件的佔位字符串

Locale類

        Locale表示的是本地,實際上使用的是ISO編碼的封裝類。對於各個國家來說都存在一個唯一的編碼,那麼這種編碼就成爲ISO編碼,使用Locale以指定好一個具體的國家編碼。

        例如: 中國的編碼:zh_CH

                     英語的編碼:en-US

ResourceBundle類

         這個類是專門完成屬性文件讀取操作的,讀取的時候直接指定文件名即可(此文件名稱一般不需要指定後綴名,統一爲*.properties),可以更具Locale所指定的區域碼來自動選擇所需要的資源文件。

方法:

        1. Public static final ResourceBundlegetBundle(String baseName)//此方法就是指定要操作的資源文件,此方法找到的是默認的操作系統的語言Locale對象

        2.Public staticfinal ResourceBundle getBundle(String baseName,Local locale)//此方法也是指定操作的資源文件,並傳入Locale對象

        3.Public finalString getString(String key)根據key取得對應的value

MessageFormat類

         如果想出現“你好,XXX”的效果,就必須在資源文件中進行一些動態文本的配置,設置佔位符,這些符號中的內容暫時不固定,而是在程序執行的時候由程序進行設置的,而要想實現這樣的功能,則必須使用MessageFormat類。此類在java.text包中定義的。

        佔位符使用數字的形式表示,如果現在表示第一個內容”{0}”、第二個內容”{1}”……

Demo

1、首先建一個java類

package com.bjpowernode.i18n;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;

public class I18nSample {

	public static void main(String[] args){
		Locale defaultLocale = Locale.getDefault();
		System.out.println("country="+ defaultLocale.getCountry());
		System.out.println("language="+ defaultLocale.getLanguage());
		
		Locale currentLocale = new Locale("en","CN");
		ResourceBundle rb = ResourceBundle.getBundle("MessageBundle",defaultLocale);
		
		MessageFormat mf = new MessageFormat(rb.getString("k1"));
		System.out.println(mf.format(new Object[]{"張三"}));
	}
}

2、建立國際化資源文件(這裏我們建立一箇中文的,一個英文的)

        

            MessageBundle_zh_CN.properties

    k1=\u4F60\u597D,{0}
    k2=\u518D\u89C1
            k1就是“你好”,k2就是“再見”,上面使用的是unicode。可以使用Unicode的轉換器來進行轉換,也可以使用命令,這裏就給讀者自己一個研究的機會吧……

           MessageBundle_en_US.properties

    k1=hello,{0}
    k2=good bye


注:當我們隨便設置一個Locale,如果沒有它對應的資源恩見怎麼辦?那麼就需要有一個缺省的國際化資源文件。只要添加一個名爲 MessageBundle.properties的資源文件,在裏面進行相應的設置就可以了。

3、效果

       當我們的本機是中文的時候,去讀取中文的國際化資源文件:

       


    當我們的本機調成英文的時候,去讀取英文的國際化資源文件:




擴展

struts國際化配置:

1、在struts-config.xml文件中加入<message-resources parameter="MessageResources"/>

2、提供國際化資源文件

3、在jsp中採用<bean:message>讀取國際化消息文本

總結

    國際化的知識雖然只是入了門,但是感覺這個思想還是很重要的!以後我們做的東西要靈活,對着中國人說中國話,對着外國人說外國話!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章