詳解Java中用于國(guó)際化的locale類
1. Locale 介紹
Locale 表示地區(qū)。每一個(gè)Locale對(duì)象都代表了一個(gè)特定的地理、政治和文化地區(qū)。
在操作 Date, Calendar等表示日期/時(shí)間的對(duì)象時(shí),經(jīng)常會(huì)用到;因?yàn)椴煌膮^(qū)域,時(shí)間表示方式都不同。
下面說(shuō)說(shuō)Locale對(duì)象的3種常用創(chuàng)建方式。
(1)獲取默認(rèn)的Locale
使用方法:
Locale locale = Locale.getDefault()
(2) 直接使用Locale的靜態(tài)對(duì)象
Locale.java中提供了以下靜態(tài)對(duì)象
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對(duì)象是對(duì)應(yīng) “中國(guó)(大陸)”的
Locale locale = Locale.SIMPLIFIED_CHINESE
(3)通過(guò)Locale的構(gòu)造函數(shù)創(chuàng)建Locale對(duì)象
Locale的構(gòu)造函數(shù)共有3個(gè)。如下:
Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)
使用方法:
Locale local = new Locale("zh", "CN");
Locale類支持非常多的國(guó)家和地區(qū)。我們可以通過(guò)以下方法,查看Locale支持的全部區(qū)域:
Locale[] ls = Locale.getAvailableLocales(); for (Locale locale:ls) { System.out.println("locale :"+locale); }
輸入結(jié)果如下:
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
下面選擇其中的兩個(gè)進(jìn)行說(shuō)明,如何利用它們來(lái)創(chuàng)建Locale對(duì)象:
例如,第一個(gè)輸出是“ja_JP”。
其中,ja代表“語(yǔ)言”,這里指日語(yǔ);“JP”代表國(guó)家,這里指日本。
我們可以通過(guò)如下方法,創(chuàng)建“語(yǔ)言是日語(yǔ),國(guó)家是日本的Locale對(duì)象”。
Locale locale = new Locale("ja", "JP");
例如,第三個(gè)輸出是“en”。
其中,en代表“語(yǔ)言”,這里指英語(yǔ)。
我們可以通過(guò)如下方法,創(chuàng)建“語(yǔ)言是英文的Locale對(duì)象”。
Locale locale = new Locale("en");
Locale 函數(shù)列表
// Locale的構(gòu)造函數(shù) 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示例
下面通過(guò)示例演示在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 的測(cè)試程序 */ public class LocaleTest { public static void main(String[] args) { // 2種不同的Locale的創(chuàng)建方法 testDiffDateLocales(); // 顯示所有的Locales testAllLocales(); } /** * 2種不同的Locale的創(chuàng)建方法 */ private static void testDiffDateLocales() { // date為2013-09-19 14:22:30 Date date = new Date(113, 8, 19, 14, 22, 30); // 創(chuàng)建“簡(jiǎn)體中文”的Locale Locale localeCN = Locale.SIMPLIFIED_CHINESE; // 創(chuàng)建“英文/美國(guó)”的Locale Locale localeUS = new Locale("en", "US"); // 獲取“簡(jiǎn)體中文”對(duì)應(yīng)的date字符串 String cn = DateFormat.getDateInstance(DateFormat.MEDIUM, localeCN).format(date); // 獲取“英文/美國(guó)”對(duì)應(yīng)的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讀取國(guó)際化資源文件
ResourceBundle資源包包含特定語(yǔ)言環(huán)境的對(duì)象。使用其可以加載并讀取語(yǔ)言環(huán)境資源。
1.輕松的本地化或者翻譯成不同的語(yǔ)言
2.一次處理多個(gè)語(yǔ)言環(huán)境
3.以后可以輕松的進(jìn)行修改,一遍支持更多的語(yǔ)言環(huán)境。
當(dāng)程序需要特定于語(yǔ)言環(huán)境的對(duì)象時(shí),它使用getBundle()方法加載ResourceBundle類
ResourceBundle rb = ResourceBundle.getBundle(“res.MessageBundle”, currentLocale);
其中,res.MessageBundle代表的是我們?cè)趕rc下建立了一個(gè)res文件夾,而res文件夾下有一個(gè)名為MessageBundle.properteis的資源文件。我們?cè)试S在此建立多個(gè)國(guó)際化資源文件:
MessageBundle_zh_CN.properties;MessageBundle_en_US.properteis;
其中MessageBundle就是要在構(gòu)造ResourceBundle時(shí)使用的字符串,這個(gè)名字合法即可,不需要特定約束。后邊的名字一定要遵循規(guī)則,
resourceName_language_country.properteis;
然后我們使用rb.getString(key);就可以獲取資源文件中的Key對(duì)應(yīng)的value.
使用Struts1.x實(shí)現(xiàn)國(guó)際化自動(dòng)切換
查看Struts源碼就可以發(fā)現(xiàn),語(yǔ)言環(huán)境信息就存放在session中,通過(guò)this.setLocale(request, locale);
所以要實(shí)現(xiàn)國(guó)際化就要在頁(yè)面上點(diǎn)擊超鏈接經(jīng)過(guò)Action的時(shí)候改變會(huì)話中Locale(語(yǔ)言環(huán)境)的值。在Action中:
//接受客戶端傳過(guò)來(lái)的語(yǔ)言請(qǐng)求信息 String language = request.getParameter(“myLanguage”); //定義語(yǔ)言地區(qū)信息 Locale currentLocale = null; //根據(jù)不同的請(qǐng)求創(chuàng)建不同的語(yǔ)言環(huán)境信息 if (“zh”.equals(language)) { currentLocale = new Locale(“zh”, “CN”); } else if (“en”.equals(language)) { currentLocale = new Locale(“en”, “US”); } //…… //將session中的信息更改掉 this.setLocale(request, currentLocale); //當(dāng)然,在頁(yè)面顯示資源文件信息的時(shí)候采用如下這種方式: //<bean:message key=”key” />
- Java多線程下解決資源競(jìng)爭(zhēng)的7種方法詳解
- Java實(shí)現(xiàn)的讀取資源文件工具類ResourcesUtil實(shí)例【可動(dòng)態(tài)更改值的內(nèi)容】
- 淺談Java工程讀取resources中資源文件路徑的問(wèn)題
- 詳解Java讀取Jar中資源文件及示例代碼
- Java 讀取類路徑下的資源文件實(shí)現(xiàn)代碼
- Java 使用getClass().getResourceAsStream()方法獲取資源
- Java國(guó)際化簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java語(yǔ)言資源國(guó)際化步驟解析
相關(guān)文章
ssm項(xiàng)目session使用及其作用域問(wèn)題
這篇文章主要介紹了ssm項(xiàng)目session使用及其作用域問(wèn)題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問(wèn)題
這篇文章主要介紹了解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10Spring Data JPA中的動(dòng)態(tài)查詢實(shí)例
本篇文章主要介紹了詳解Spring Data JPA中的動(dòng)態(tài)查詢。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04