我得到ISO2語言代碼是這樣的:如何獲取語言環境的ISO2語言代碼?
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有沒有更好的方式來做到這一點?
編輯:當我使用getLanguage時,我得到一個空字符串。
我得到ISO2語言代碼是這樣的:如何獲取語言環境的ISO2語言代碼?
public String getLang(Locale language)
return language.toString().substring(0,2).toLowerCase()
}
有沒有更好的方式來做到這一點?
編輯:當我使用getLanguage時,我得到一個空字符串。
也許通過調用Locale#getLanguage()
Locale locale = ?; locale.getLanguage();
什麼
public String getLang(Locale language)
return language.getLanguage();
}
當然,這僅是一個ISO 639-1 2 lettercode如果有這種語言定義的,否則它可能會返回一個3個字母的代碼(甚至更長)。
您的代碼會給愚蠢的結果,如果你有沒有語言代碼語言環境(如_DE
)(我將回空字符串,這是一個好一點,恕我直言)。如果區域設置包含語言代碼,則它將返回該語言代碼,但您不需要撥打toLowerCase()
。
對我而言,這返回「nl_be」,而不是預期的「nl」。這怎麼可能?我不得不使用locale.getLanguage()。split(「_」)[0]得到它:( – Wouter 2014-04-23 07:36:13
我有同樣的問題,這是我發現的。
如果用構造函數創建Locale
:
Locale locale = new Locale("en_US");
然後調用getLanguage
:
String language = locale.getLanguage();
的language
值將是 「EN_US」;
如果創建Locale
與建築商:
Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build()
那麼該值locale.getLanguage()
將返回將是 「恩」。
這對我來說很奇怪,但它是它實施的方式。
因此,如果您希望語言代碼返回兩個字母的ISO語言(需要使用Java Locale
構建器或進行一些字符串操作),那麼這是解釋的長答案。
您的方法與substring
的作品,但我會用我寫下面的東西來涵蓋分隔符可能是「 - 」或「_」的情況。
public String getLang(Locale language)
String[] localeStrings = (language.split("[-_]+"));
return localeStrings[0];
}
您的方法並不安全。例如。 Aragonese的ISO3代碼是'arg',而ISO2代碼是'an'。 – 2016-07-29 00:36:39