JAVA國際化

    大家好,我是成都[LD],今天給大家帶來的是JAVA國際化。如果您用過Struts,那您對國際化應該並不陌生。

    通常來說,在代碼中我們會夾雜一些字符串,這樣其實並不好看,維護起來也不是特別方便。舉個例子:假設你開發系統是中文版本,突然來了個需求,需要英文版本,如果你將字符串寫在代碼裏面,這樣你又不得不將所有的中文字符替換成英文字符。爲了減少這種需求下重複勞動,我們通常會自己去寫一個配置文件,然後將所有字符串放在配置文件裏面,然後去讀這個配置文件等等一系列的操作。當然這屬於我們自己的一種解決問題的方法。其實在JDK中已經爲我們提供了一種的很好解決方案,那就是國際化。

    本文旨在起個引導作用,不會太多做原理上分析,如果想進一步瞭解,請大家自尋查閱資料,如果有不懂可以給我留言。

開發環境:Windows XP、Eclipse(Kepler)、JDK1.7。

如下代碼:如果我們需要將字符串"世界,你好!"做國際化,我們該如何去做。

package ld.i18n;
/**
 * 
 * @author Ld
 *
 */
public class Print {
	
	public void print(){
		System.out.println("世界,你好!");
	}
}

在Eclipse中已經爲我們提供了國際化比較方便的方法,首先在類中單擊右鍵,在彈出菜單中找到Source,然後找到Externalize Strings.如下圖所示:

wKiom1O0viCDRyVgAALbgdOVpa0538.jpg

點擊這個之後,在彈出對話框中可以選擇默認,然後點擊Next,然後確定,這樣,你會發現你的目錄下面生成了一個properties文件,我這裏生成的文件叫做message.proerties,並且我們的類中的字符串被替換成Print.0

package ld.i18n;
/**
 * 
 * @author Ld
 *
 */
public class Print {
	
	public void print(){
		System.out.println(Messages.getString("Print.0")); //$NON-NLS-1$
	}
}

下面我們新建個Main.java調用下Print類的print方法

package ld.i18n;

import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		//Locale.setDefault(Locale.US);
		new Print().print();
	}
}

運行一下,控制檯打印出:世界,你好!

現在我們要將中文改變爲英文,首先拷貝一份messages.properties,將名稱改爲messages_en_US.properties,並將裏面的世界,你好,改爲Hello World!同上打開Main.java裏面的

//Locale.setDefault(Locale.US);//爲什麼這麼寫請大家自己去研究下

註釋。運行一下,發現打印出的就是Hello World!

    到這裏,有的同學可能會發現我上面的字符串在程序編譯時就指定了。假設在程序中有變化的字符串該怎麼辦?

    這裏我們就需要MessageFormat類的支持(這個類在java.text包中),以Hello World爲例。假設我們的World是動態變化的,那麼我們可以在properties文件中,將Hello World改爲Hello {0},這裏的0是第一個參數,因爲我們要替換字符串時傳入的是個數組,這裏和數組下標相對應。因此我們將上述代碼進行修改下:

package ld.i18n;

import java.text.MessageFormat;

/**
 * 
 * @author Ld
 *
 */
public class Print {
	
	public void print(String args[]){
		System.out.println(MessageFormat.format(Messages.getString("Print.0"),args)); //$NON-NLS-1$
	}
}

同時修改Main.java爲print方法指定參數

package ld.i18n;
import java.util.Locale;

public class Main {
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);;

		new Print().print(new String[]{"LD"});
	}
}

 運行一下,控制檯輸出Hello LD!

    其實大家可以想一想這個過程,不就是類似於我們自定義配置文件,並通過程序來讀取字符串信息的過程嗎,只不過JAVA幫我們封裝這個讀取過程。好了,希望對大家有所幫助!

    

    

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