1. 程式人生 > >java獲取系統語言(區分簡體中文和繁體中文)

java獲取系統語言(區分簡體中文和繁體中文)

之前做android應用時遇到過一個問題,就是根據語言的不同而顯示不同的內容

網上很多程式碼都是錯誤的,起碼無法區分簡體和繁體,這裡給出一種方法

不涉及android任何知識,所以就歸類到java這邊了

Locale locale = Locale.getDefault();
System.out.println(locale.getLanguage());
System.out.println(locale.getCountry());

這裡我們關注兩個方法

public String getLanguage()

Since: API Level 1

Returns the language code for this Locale or the empty string if no language was set.

public String getCountry()

Since: API Level 1

Returns the country code for this locale, or "" if this locale doesn't correspond to a specific country.

返回的都是程式碼(code),需要解釋下語言程式碼和國家程式碼

語言程式碼(或語言編碼)是一組用來代表語言的程式碼。語言程式碼是由字母或數字組成的短字串,用於分類圖書館典藏、電腦程式上的本地化和翻譯等用途。(轉自中文維基百科)

國家程式碼(或國家編碼)是一組用來代表國家和境外領土的地理程式碼。國家程式碼是由字母或數字組成的短字串,方便用於資料處理和通訊。世界上有許多不同的國家程式碼標準,其中最廣為人知是為國際標準化組織的ISO 3166-1。國家程式碼也可以指國際長途電話國家號碼,即國際電信聯盟的國際電話區號(E.164)。(轉自中文維基百科)(這裡指的是前者)

那麼語言程式碼和國家程式碼的對應關係是什麼呢,我們可以參考下面兩個文獻

如果系統使用的是漢語,那麼getLanguage()返回的字串為zh,然後根據getCountry()返回結果可以判斷出簡體還是繁體了。如果是TW,那麼就是繁體了,返回CN則是簡體,如果返回了HK,這個自己看著辦吧。。。

在android中,切換系統語言後,這兩個函式的返回值就都會做出相應的改變

在android中,簡體中文和繁體中文字串資源要分別放到res/values-zh-rCN和res/values-zh-rTW下,這裡為什麼會有個r,我也不清楚

ps:ISO 3166-1 alpha-2中,TW的說明為:Taiwan, Province of China

,還是有些令人欣慰的

轉貼請保留以下連結

本人blog地址