程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java頂用於國際化的locale類

詳解Java頂用於國際化的locale類

編輯:關於JAVA

詳解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” /> 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved