2012-03-02 38 views
-1

我需要區域設置轉換爲字符串,我怎麼能做到這一點:的Java語言環境爲String

我有語言環境祿和字符串LOC1,需要從價值轉換的區域設置爲String。謝謝

+0

你看過http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Locale.html嗎? – nwinkler 2012-03-02 15:41:29

+0

thanx ..只是一個新手..試圖找出... – 2012-03-02 15:47:49

+0

@Jack:在未來,您可能希望(Google | Bing)先搜索答案,並詢問**詳細**問題,如果您無法找到答案或感到困惑。我知道Locale類可能會讓人感到困惑,尤其是從Java 7開始,但這並不意味着您不應該自己處理這個問題,而不是尋找快速解決方案。 – 2012-03-02 20:10:23

回答

17

這真的取決於你使用的Java版本。當你說轉換爲字符串時,我假設你可能想要:

  1. 將其轉換爲區域設置標識符,以便將來可以輕鬆地重新創建區域設置。
  2. 將它作爲字符串表示傳遞給系統的某個部分。
  3. 獲取(可能爲本地)語言,國家或Locale對象的名稱。

其他人指出你的文檔,但我認爲最好走過幾種可能性。

廣告1.如果您需要轉換爲語言環境標識符,Java 7(以前版本中不存在)的最佳方法是toLanguageTag()

這是因爲您可以輕鬆地將語言環境標識符存儲在字符串中(包括所有選項,如腳本,Unicode擴展等),並在不丟失信息的情況下使用forLanguageTag(String)重新創建語言環境對象。簡單toString()不包含此屬性。
下面的代碼片段說明了我的觀點:

Locale locale = Locale.getDefault(Locale.Category.DISPLAY); 
String localeId = locale.toLanguageTag(); 
Locale recreatedLocale = Locale.forLanguageTag(localeId); 

此前的Java 7,你真的需要使用toString()和手動處理國家和變體(區域設置包括由分隔的三個標識符和下劃線,即no_NO_NY。 )

廣告2.如果您需要將區域設置傳遞給系統的其他部分(即網絡服務),則toString()可能並不是您要查找的內容。這是因爲什麼,我上面寫的 - 如果你需要衝作爲分隔符並不在乎這麼多變種,我會去與getLanguage()getCountry()方法,而不是簡單的toString()

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 
String localeId = MessageFormat.format("{0}-{1}", 
             uiLocale.getLanguage(), 
             uiLocale.getCountry()); 

這種方法應該很好地工作與版本1.4以來的Java版本。

廣告3.如果你想展示的語言,國家或區域設置顯示名稱,讓用戶可以選擇有效的區域設置(即在他/她的個人資料),你可能尋找的getDisplayCountry(Locale)getDisplayLanguage(Locale)getDisplayName(Locale)。你可以用它們來顯示在目標用戶的語言名稱(前提是JVM有合適的翻譯,這對許多語言爲true):

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 
String languageName = uiLocale.getDisplayLanguage(uiLocale); 
String countryName = uiLocale.getDisplayLanguage(uiLocale); 
// usually something like langage (country), i.e. polski (Polska) 
String localeName = uiLocale.getDisplayName(uiLocale); 
0

它非常簡單隻需使用下面的代碼,請考慮您正在使用語言環境從iso當前ca器日期轉換到Hijri Calander。

Chronology iso = ISOChronology.getInstanceUTC(); 
    Chronology hijri = IslamicChronology.getInstanceUTC(); 
    LocalDate todayIso = new LocalDate(2016, 1, 
      20, iso); 
    LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), 
      hijri); 
    String currenthijridate = "" + todayHijri; 
    /*currenthijridate will will appear as 1437-04-08 which is a string now its simple String=""+locale*/