1. Locale 介紹
Locale 表示地區。每一個Locale對像都代表了一個特定的地理、政治和文化地區。
在操作Date, Calendar等表示日期/時間的對象時,經常會用到;因為不同的區域,時間表示方式都不同。
下面說說Locale對象的3種常用創建方式。
(1)獲取默認的Locale
使用方法:
Locale locale = Locale.getDefault()
(2)直接使用Locale的靜態對象
Locale.java中提供了以下靜態對象
public static final Locale CANADApublic static final Locale CANADA_FRENCHpublic static final Locale CHINApublic static final Locale CHINESEpublic static final Locale ENGLISHpublic static final Locale FRANCEpublic static final Locale FRENCHpublic static final Locale GERMANpublic static final Locale GERMANYpublic static final Locale ITALIANpublic static final Locale ITALYpublic static final Locale JAPANpublic static final Locale JAPANESEpublic static final Locale KOREApublic static final Locale KOREANpublic static final Locale PRCpublic static final Locale ROOTpublic static final Locale SIMPLIFIED_CHINESEpublic static final Locale TAIWANpublic static final Locale TRADITIONAL_CHINESEpublic static final Locale UKpublic 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” />