Java的國際化與格式化

java程序都國際化思路是將程序中的標籤、提示等信息放在資源文件中,程序須要支持哪些國家、語言環境,就對應提供哪些相應的資源文件。資源文件就是key-value,每一個資源文件的key能夠保持不變的,但value則雖不一樣的國家、語言而改變。java

1.java程序國際化主要通三個類來實現的,java.util.ResourceBundle:用於加載國家、語言資源包;java.util.Locale:用於封裝特定的國家|區域、語言環境。java.text.MessageFormat:用於格式化帶佔位符的字符串。數組

2.java不可能支持全部的國家和語言,咱們能夠經過調用Locale類的getAvailableLocales()方法,該方法返回一個Locale數組,該數組裏麪包含了java支持的國家和語言。code

package com.lanou.test;

import java.util.Locale;

public class Demo005 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Locale[] localelist = Locale.getAvailableLocales();
		for (int i = 1; i < localelist.length; i++) {
			System.out.println(localelist[i].getDisplayCountry() + "=" + localelist[i].getCountry() + "   "
					+ localelist[i].getDisplayLanguage() + "=" + localelist[i].getLanguage());
		}

	}

}

3.使用MessageFormat處理包含佔位符的字符串,除了使用屬性的文件做爲資源文件外,java也容許使用類文件代替資源文件,即將全部的key-value對存入到class的文件中,而不是屬性文件。使用類文件代替資源文件必須知足條件爲該類名字必須爲baseName_language_country,這與屬性文件的命名類似。該類必須繼承ListResourceBundle,並重寫getContents(),該方法返回Object數組,該數組的每一項都是key-value對。orm

4.MessageFormat類是抽象類Format的子類,Format抽象類的另外兩個子類:NumberFormat和DateFormat,他們分別是用來實現數值、日期的格式化,能夠將數值、日期轉化成字符串,也能夠將字符串裝換成數值日期。NumberFormat和DateFormat都包含了format()和parse(),其中format()用於將數組、日期格式轉換成字符串,parse()用於將字符串解析成數值、日期。NumberFormat也是一個抽象基類,因此沒法用構造器來建立NumberFormat對象,可經過以下幾個類方法來獲得NumberFormat對象。getCurrencyInstance():返回默認的locale的貨幣格式器。getInterInstance():返回默認Locale的整數格式器。getNumberInstance():返回默認Locale的通用的數字格式。getPrecentInstance():返回默認Lacale的百分數格式器。一旦獲取了NumberFormat對象能夠調用他的format()方法來格式化數值。對象

package com.lanou.test;

import java.text.NumberFormat;
import java.util.Locale;

public class Demo06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double a=13140.126;
		Locale[] locales={Locale.CHINA,Locale.JAPAN,
				Locale.ENGLISH,Locale.US};
		NumberFormat[] nf=new NumberFormat[12];
		for(int i=0;i<locales.length;i++){
			nf[i*3]=NumberFormat.getNumberInstance(locales[i]);
			nf[i*3+1]=NumberFormat.getPercentInstance(locales[i]);
			nf[i*3+2]=NumberFormat.getCurrencyInstance(locales[i]);
		}
		for(int i=0;i<locales.length;i++){
			String tip=i==0?"------中國的格式------":
				i==1?"----日本的格式--------":
			    i==2?"----英國格式-------":"------美國的格式-------"	;
			System.out.println(tip);
			System.out.println("通用的數值格式:" +nf[i].format(a));
			System.out.println("百分數比值格式:" +nf[i*3+1].format(a));
			System.out.println("貨幣數值格式:" +nf[i*3+2].format(a));	
		}
	}
}


結果:

------中國的格式------
通用的數值格式:13,140.126
百分數比值格式:13,140.126
貨幣數值格式:13,140.126
----日本的格式--------
通用的數值格式:13,140.126
百分數比值格式:1,314,013%
貨幣數值格式:¥13,140
----英國格式-------
通用的數值格式:13,140.126
百分數比值格式:1,314,013%
貨幣數值格式:¤13,140.13
------美國的格式-------
通用的數值格式:13,140.126
百分數比值格式:1,314,013%
貨幣數值格式:$13,140.13

4.使用DateFormat格式化日期、時間,它與NumberFormat類似也是一個抽象的類,也提供以下幾個類方法來獲取DateFormat對象。getDateInstance():返回一個日期格式器,它格式化後的字符串只有日期、沒有時間。getTimeInstance():返回一個時間格式器,他的格式後的字符串只有時間,沒有日期。getDateTimeInstance():返回一個時間日期的格式,他的格式後的字符串既有時間也有時間。繼承

5.使用SimpleDateFormat格式化日期,DateFormat的parse()方法能夠把字符串解析成Date對象,但實際上DateFormat的parse()方法還不夠靈活--他要求必須是解析的字符串,而SimpleDateFormat是DateFormat的子類,SimpleDateFormat能夠很是靈活的格式化Date,能夠用於解析各類格式的日期字符串,建立SimpleDateFormat對象是須要傳入一個Pattern字符串,這只是一個日期模型。ip

package com.lanou.test;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo07 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Date date=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("Gyyyy-mm--dd--hh--mm--ss");
		String datedtr=sdf.format(date);
		System.out.println(datedtr);
	}
}
相關文章
相關標籤/搜索