Android如何获取ISO 639双字母格式的用户语言代码?
解决获取双字母语言代码的问题
这个坑我之前踩过!你完全不用绕弯子去处理三位代码,Java的Locale类本身就提供了直接获取双字母语言代码的方法,而且绝对靠谱。
正确的解决方案
直接调用Locale.getDefault().getLanguage()就可以了!这个方法返回的是ISO 639-1标准的双字母语言代码,比如:
- 英文返回
"en"(而不是三位的"eng") - 葡萄牙语返回
"pt"(而不是"por") - 日语返回
"ja"(而不是"jap")
代码示例:
// 获取当前系统默认的双字母语言代码 String twoLetterLangCode = Locale.getDefault().getLanguage(); System.out.println(twoLetterLangCode); // 输出符合需求的双字母代码
为什么substring截取三位代码不可靠?
你说的没错,这种方法完全适配不了所有场景。因为ISO 639-2的三位语言代码和ISO 639-1的双字母代码并不是简单的前两位对应关系,举个典型反例:
- 爱尔兰语的三位代码是
"gle",但双字母代码是"ga",如果用substring(0,2)会得到错误的"gl"。
所以手动截取的方式会在部分语言上出现错误,绝对不能用。
额外补充:获取带国家的语言标签
如果需要类似 "en-US"、"pt-BR" 这种包含国家/地区的完整语言标签,可以用toLanguageTag()方法:
String fullLanguageTag = Locale.getDefault().toLanguageTag(); System.out.println(fullLanguageTag); // 输出如 "en-US"
内容的提问来源于stack exchange,提问作者Gilian Marques
相关产品推荐
相关产品推荐

