1. 程式人生 > >國際化(i18n)方法

國際化(i18n)方法

package i18n;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

import org.junit.Test;
public class i18ntest {
	@Test
	public void MessageFormat2(){
		String  str="Date:{0},Salary:{1}";
		Locale  locale=Locale.CHINA;
		Date date=new Date ();
		double  sal=12345.12;
		StringBuffer   result=new StringBuffer();
		FieldPosition   fieldPosition=new FieldPosition(0);
		MessageFormat messageFormat=new MessageFormat(str,locale);
    	result = messageFormat.format(date,result,fieldPosition);
		System.out.println(result);
		
		
	}
	/*ResourceBundle:資源包
	 * 1.在類路徑下需要有對應的資原始檔:baseName.properties 其中  baseName是基名
	 * 2.可以使用基名_語言程式碼_國家程式碼.properties來新增不同國家或地區的資原始檔  i18n_en_US.properties
	 * 3.要求所有基名相同的原始檔的key一樣、
	 * 4.可以使用native2ASCII命令來得到漢子的ASC碼  Eclipse內建了工具
	 * 5.可以呼叫ResourceBundle的getBundle(基名,locale例項)獲取ResourceBundle物件
	 * 6.可以呼叫ResourceBundle的getString(key)方法來獲取資原始檔的value字串的值
	 * 7.結合DateFormat,NumberFormat,MessageFormat即可實現國家化
	 * 
	 * */
	
	@Test
	public  void testResourceBundle(){
		Locale  locale=Locale.CHINA;
		ResourceBundle   resourceBundle=ResourceBundle.getBundle("i18n",locale);
//		System.out.println(resourceBundle.getString("date"));
//		System.out.println(resourceBundle.getString("salary"));
		String   datelob=resourceBundle.getString("date");
		String   salarylob=resourceBundle.getString("salary");
		    String  str="{0}:{1},{2}:{3}";
		   Date  date=new Date() ;
		   double sal=12345.12;
		   DateFormat   date1=DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
		   String str1=date1.format(date);
		   NumberFormat  numb=NumberFormat.getCurrencyInstance(locale);
		   String  str2=numb.format(sal);
		   String  result = MessageFormat.format(str, datelob,str1,salarylob,str2);
		   System.out.println(result);//日期:2018-9-30,工資:¥12,345.12
	}
		//	MessageFormat :可以格式化模式字串
		//	模式字串:帶佔位符的字串
		//	可以通過format方法會對模式字串進行格式化
	    @Test
	   public  void  MassageFromat(){
		   String str="Date:{0},Salary{1}";
		   Locale  locale=Locale.CHINA;
		   Date  date=new Date() ;
		   double sal=12345.12;
		   DateFormat   date1=DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
		   String str1=date1.format(date);
		   NumberFormat  numb=NumberFormat.getCurrencyInstance(locale);
		   String  str2=numb.format(sal);
		   String  result = MessageFormat.format(str, str1,str2);
		   System.out.println(result);
		   
		   
		   
	   }
	
   // NumberFormat:格式化數字到數字字串 或貨幣字串的工具類
   // 1.通過工廠方式來進行格式化 
   //NumberFormat.getNumberInstance(locale) //僅化為數字的字串
	//NumberFormat.getCurrencyInstance(locale)//格式化為貨幣的字串
	//2.通過format方法來進行格式化
	//3.通過parse方法把一個字串解析為Number型別
	         @Test
	    public  void  NumberFromat() throws ParseException {
	    	double  d=123456789.123d;
	    	Locale   locale=Locale.FRANCE;
	    	//Date date=new Date() ;
	    	NumberFormat   nb=NumberFormat.getNumberInstance(locale);
	    	String str1=nb.format(d);
	    	System.out.println(str1);
	    	NumberFormat   numb=NumberFormat.getCurrencyInstance(locale);
	    	String  str2=numb.format(d);
	    	System.out.println(str2);
	    	//字串轉化為Number型別
	    	//1.23456789123E8
	    	//1.2345678912E8
	    	String  str="123 456 789,123";
	    	d=(double) nb.parse(str);
	    	System.out.println(d);
	    	
            String  str3="123 456 789,12 €";
            d=(double) numb.parse(str3);
            System.out.println(d);
            
	    	
	    }
	
	
	    @Test
	   public  void  testDateFormat2() throws Exception{
		   String  str="1997-02-11 12:12:12";
		   DateFormat  dateformat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		   Date  date=dateformat.parse(str);
		   System.out.println(date);
	   }
	
//	 /*DateFormat  日期格式化的工具類
//	  *DateFormat   是一個抽象類 
//	  *1.若只希望通過 DateFormat 把一個Date物件轉化為一個字串,則可以通過DateFormat工廠的方法來獲取
//	  *DateFormat物件 
//	  *
//	  *2.可以獲取只格式化的Date的DateFormat物件:getDateFormat物件 getDateInstance(int style, Locale aLocale)
//	  *3.可以獲取只格式化的Time的DateFormat物件:getDateFormat物件 getDateTimeInstance(int style, Locale aLocale)
//	  *4.可以獲取即格式化Date,也格式化Time的DateFormat物件   :
//	  * getDateTimeInstance(int dateStyle, int  timeStyle, Locale aLocale) 
//	  *5. 其中style可以取之為DateFormat的常量 :SHORT,MEDIUM,LONG,FULL,Locale則為代表國家地區的Locale物件
//	  *6.通過DateFormat的format方法來格式化Date對像 到字串
//	  *7.若有一個字串  如何解析一個Date物件呢
//	  *I  。先建立DATEORMAT物件:建立DateFormat的子類  SimpleDateFormat的物件昂
//	  *SimpleDateFormat(String pattern)
//	  *其中 pattern為日期  時間的格式為   YYYY-MM-DD hh:mm:ss
//	  *II二呼叫DateFormat的parse方法來解析字串到Date物件 
	@Test
	public   void  testDateFormat(){
		Locale locale=Locale.UK;
		Date  date=new Date();
		System.out.println(date);
		//獲取DateFormat物件
		DateFormat  dateformat=DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM, locale);
		String  str=dateformat.format(date);
		System.out.println(str);
		
	}
//	   
//	  Locale:Java中表示國家或地區的類  JDK提供了恆多常量
//	 * 也可以通過Locale(languageCode,countryCode)的方式來建立
//	 * 在WEB應用中可已通過request.getLocale()方法來獲取
//	 * 
//	 
	@Test
      public  void testLocale(){
    	  Locale   locale=Locale.CHINA;
    	  System.out.println(locale.getCountry());//國家
          System.out.println(locale.getLanguage());//語言
          locale=new Locale("en","US");
          System.out.println(locale.getCountry());
          System.out.println(locale.getLanguage());
      }
}