詳解Java頂用於國際化的locale類。本站提示廣大學習愛好者:(詳解Java頂用於國際化的locale類)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java頂用於國際化的locale類正文
1. Locale 引見
Locale 表現地域。每個Locale對象都代表了一個特定的地輿、政治和文明地域。
在操作 Date, Calendar等表現日期/時光的對象時,常常會用到;由於分歧的區域,時光表現方法都分歧。
上面說說Locale對象的3種經常使用創立方法。
(1)獲得默許的Locale
應用辦法:
Locale locale = Locale.getDefault()
(2) 直接應用Locale的靜態對象
Locale.java中供給了以下靜態對象
public static final Locale CANADA public static final Locale CANADA_FRENCH public static final Locale CHINA public static final Locale CHINESE public static final Locale ENGLISH public static final Locale FRANCE public static final Locale FRENCH public static final Locale GERMAN public static final Locale GERMANY public static final Locale ITALIAN public static final Locale ITALY public static final Locale JAPAN public static final Locale JAPANESE public static final Locale KOREA public static final Locale KOREAN public static final Locale PRC public static final Locale ROOT public static final Locale SIMPLIFIED_CHINESE public static final Locale TAIWAN public static final Locale TRADITIONAL_CHINESE public static final Locale UK public static final Locale US
應用辦法:上面的Locale對象是對應 “中國(年夜陸)”的
Locale locale = Locale.SIMPLIFIED_CHINESE
(3)經由過程Locale的結構函數創立Locale對象
Locale的結構函數共有3個。以下:
Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)
應用辦法:
Locale local = new Locale("zh", "CN");
Locale類支撐異常多的國度和地域。我們可以經由過程以下辦法,檢查Locale支撐的全體區域:
Locale[] ls = Locale.getAvailableLocales(); for (Locale locale:ls) { System.out.println("locale :"+locale); }
輸出成果以下:
All Locales: ja_JP, es_PE, en, ja_JP_JP, es_PA, sr_BA, mk, es_GT, ar_AE, no_NO, sq_AL, bg, ar_IQ, ar_YE, hu, pt_PT, el_CY, ar_QA, mk_MK, sv, de_CH, en_US, fi_FI, is, cs, en_MT, sl_SI, sk_SK, it, tr_TR, zh, th, ar_SA, no, en_GB, sr_CS, lt, ro, en_NZ, no_NO_NY, lt_LT, es_NI, nl, ga_IE, fr_BE, es_ES, ar_LB, ko, fr_CA, et_EE, ar_KW, sr_RS, es_US, es_MX, ar_SD, in_ID, ru, lv, es_UY, lv_LV, iw, pt_BR, ar_SY, hr, et, es_DO, fr_CH, hi_IN, es_VE, ar_BH, en_PH, ar_TN, fi, de_AT, es, nl_NL, es_EC, zh_TW, ar_JO, be, is_IS, es_CO, es_CR, es_CL, ar_EG, en_ZA, th_TH, el_GR, it_IT, ca, hu_HU, fr, en_IE, uk_UA, pl_PL, fr_LU, nl_BE, en_IN, ca_ES, ar_MA, es_BO, en_AU, sr, zh_SG, pt, uk, es_SV, ru_RU, ko_KR, vi, ar_DZ, vi_VN, sr_ME, sq, ar_LY, ar, zh_CN, be_BY, zh_HK, ja, iw_IL, bg_BG, in, mt_MT, es_PY, sl, fr_FR, cs_CZ, it_CH, ro_RO, es_PR, en_CA, de_DE, ga, de_LU, de, es_AR, sk, ms_MY, hr_HR, en_SG, da, mt, pl, ar_OM, tr, th_TH_TH, el, ms, sv_SE, da_DK, es_HN
上面選擇個中的兩個停止解釋,若何應用它們來創立Locale對象:
例如,第一個輸入是“ja_JP”。
個中,ja代表“說話”,這裡指日語;“JP”代表國度,這裡指日本。
我們可以經由過程以下辦法,創立“說話是日語,國度是日本的Locale對象”。
Locale locale = new Locale("ja", "JP");
例如,第三個輸入是“en”。
個中,en代表“說話”,這裡指英語。
我們可以經由過程以下辦法,創立“說話是英文的Locale對象”。
Locale locale = new Locale("en");
Locale 函數列表
// Locale的結構函數 Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)
Object clone() boolean equals(Object object) static Locale[] getAvailableLocales() String getCountry() static Locale getDefault() String getDisplayCountry(Locale locale) final String getDisplayCountry() final String getDisplayLanguage() String getDisplayLanguage(Locale locale) String getDisplayName(Locale locale) final String getDisplayName() final String getDisplayVariant() String getDisplayVariant(Locale locale) String getISO3Country() String getISO3Language() static String[] getISOCountries() static String[] getISOLanguages() String getLanguage() String getVariant() synchronized int hashCode() synchronized static void setDefault(Locale locale) final String toString()
2. Locale示例
上面經由過程示例演示在Date中應用Locale的。
參考代碼以下(LocaleTest.java):
import java.util.Locale; import java.util.Date; import java.util.Calendar; import java.text.SimpleDateFormat; import java.text.DateFormat; /** * Locale 的測試法式 */ public class LocaleTest { public static void main(String[] args) { // 2種分歧的Locale的創立辦法 testDiffDateLocales(); // 顯示一切的Locales testAllLocales(); } /** * 2種分歧的Locale的創立辦法 */ private static void testDiffDateLocales() { // date為2013-09-19 14:22:30 Date date = new Date(113, 8, 19, 14, 22, 30); // 創立“簡體中文”的Locale Locale localeCN = Locale.SIMPLIFIED_CHINESE; // 創立“英文/美國”的Locale Locale localeUS = new Locale("en", "US"); // 獲得“簡體中文”對應的date字符串 String cn = DateFormat.getDateInstance(DateFormat.MEDIUM, localeCN).format(date); // 獲得“英文/美國”對應的date字符串 String us = DateFormat.getDateInstance(DateFormat.MEDIUM, localeUS).format(date); System.out.printf("cn=%s\nus=%s\n", cn, us); } /** * 顯示一切的Locales */ private static void testAllLocales() { Locale[] ls = Locale.getAvailableLocales(); System.out.print("All Locales: "); for (Locale locale:ls) { System.out.printf(locale+", "); } System.out.println(); } }
3.應用ResouceBundle讀取國際化資本文件
ResourceBundle資本包包括特定說話情況的對象。應用其可以加載並讀取說話情況資本。
1.輕松的當地化或許翻譯成分歧的說話
2.一次處置多個說話情況
3.今後可以輕松的停止修正,一遍支撐更多的說話情況。
當法式須要特定於說話情況的對象時,它應用getBundle()辦法加載ResourceBundle類
ResourceBundle rb = ResourceBundle.getBundle(“res.MessageBundle”, currentLocale);
個中,res.MessageBundle代表的是我們在src下樹立了一個res文件夾,而res文件夾下有一個名為MessageBundle.properteis的資本文件。我們許可在此樹立多個國際化資本文件:
MessageBundle_zh_CN.properties;MessageBundle_en_US.properteis;
個中MessageBundle就是要在結構ResourceBundle時應用的字符串,這個名字正當便可,不須要特定束縛。後邊的名字必定要遵守規矩,
resourceName_language_country.properteis;
然後我們應用rb.getString(key);便可以獲得資本文件中的Key對應的value.
應用Struts1.x完成國際化主動切換
檢查Struts源碼便可以發明,說話情況信息就寄存在session中,經由過程this.setLocale(request, locale);
所以要完成國際化就要在頁面上點擊超鏈接經由Action的時刻轉變會話中Locale(說話情況)的值。在Action中:
//接收客戶端傳過去的說話要求信息 String language = request.getParameter(“myLanguage”); //界說說話地域信息 Locale currentLocale = null; //依據分歧的要求創立分歧的說話情況信息 if (“zh”.equals(language)) { currentLocale = new Locale(“zh”, “CN”); } else if (“en”.equals(language)) { currentLocale = new Locale(“en”, “US”); } //…… //將session中的信息更改失落 this.setLocale(request, currentLocale); //固然,在頁面顯示資本文件信息的時刻采取以下這類方法: //<bean:message key=”key” />