國際化(i18n)方法
阿新 • • 發佈:2018-11-04
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()); } }