Android 语言适配简单记录

android 多语言适配,是通过res下新建不同的values-xx文件夹,以及values文件夹下的strings.xml文件实现的。一般有2种命名:values-xxvalues-xx-rxx
对于values-xx这种命名,如下所示:
res/values-es/strings.xml 西班牙语
res/values-en/strings.xml 英语
这里的values-xxxx是语言代码,并不是国家地区代码。一开始,我以为这里是用的国家地区代码,发现新建values-xx后并没有图标。语言代码与地区代码,有时候并不一致。例如,阿尔巴尼亚,地区代码是AL,语言代码是sq,那么就应该使用values-sq去命名。

https://developer.android.com/guide/topics/resources/providing-resources?hl=zh-cn#AlternativeResources

ISO 639-1是国际标准化组织ISO 639语言代码标准的第一部分。它含有 184 个两字母的编码,用来标示世界上主要的语言。
ISO 639-1代码表

代码 语言 代码 语言 代码 语言 代码 语言
aa 阿法尔语 fr 法语 li 林堡语 se 北萨米语
ab 阿布哈兹语 fy 弗里西亚语 ln 林加拉语 sg 桑戈语
ae 阿维斯陀语 ga 爱尔兰语 lo 老挝语 sh 塞尔维亚-克罗地亚语
af 南非语 gd 苏格兰盖尔语 lt 立陶宛语 si 僧伽罗语
ak 阿坎语 gl 加利西亚语 lu 卢巴语 sk 斯洛伐克语
am 阿姆哈拉语 gn 瓜拉尼语 lv 拉脱维亚语 sl 斯洛文尼亚语
an 阿拉贡语 gu 古吉拉特语 mg 马达加斯加语 sm 萨摩亚语
ar 阿拉伯语 gv 马恩岛语 mh 马绍尔语 sn 修纳语
as 阿萨姆语 ha 豪萨语 mi 毛利语 so 索马里语
av 阿瓦尔语 he 希伯来语 mk 马其顿语 sq 阿尔巴尼亚语
ay 艾马拉语 hi 印地语 ml 马拉雅拉姆语 sr 塞尔维亚语
az 阿塞拜疆语 ho 希里莫图语 mn 蒙古语 ss 斯威士语
ba 巴什基尔语 hr 克罗地亚语 mo 摩尔达维亚语 st 塞索托语
be 白俄罗斯语 ht 海地克里奥尔语 mr 马拉地语 su 巽他语
bg 保加利亚语 hu 匈牙利语 ms 马来语 sv 瑞典语
bh 比哈尔语 hy 亚美尼亚语 mt 马耳他语 sw 斯瓦希里语
bi 比斯拉马语 hz 赫雷罗语 my 缅甸语 ta 泰米尔语
bm 班巴拉语 ia 因特语 na 瑙鲁语 te 泰卢固语
bn 孟加拉语 id 印尼语 nb 书面挪威语 tg 塔吉克斯坦语
bo 藏语 ie 西方国际语 nd 北恩德贝莱语 th 泰语
br 布列塔尼语 ig 伊博语 ne 尼泊尔语 ti 提格雷尼亚语
bs 波斯尼亚语 ii 四川彝语(诺苏语) ng 恩敦加语 tk 土库曼语
ca 加泰隆语 ik 伊努皮克语 nl 荷兰语 tl 他加禄语
ce 车臣语 io 伊多语 nn 新挪威语 tn 茨瓦纳语
ch 查莫罗语 is 冰岛语 no 挪威语 to 汤加语
co 科西嘉语 it 意大利语 nr 南恩德贝莱语 tr 土耳其语
cr 克里语 iu 因纽特语 nv 纳瓦霍语 ts 宗加语
cs 捷克语 ja 日语 ny 尼扬贾语 tt 塔塔尔语
cu 古教会斯拉夫语 jv 爪哇语 oc 奥克语 tw 特威语
cv 楚瓦什语 ka 格鲁吉亚语 oj 奥杰布瓦语 ty 塔希提语
cy 威尔士语 kg 刚果语 om 奥罗莫语 ug 维吾尔语
da 丹麦语 ki 基库尤语 or 奥里亚语 uk 乌克兰语
de 德语 kj 宽亚玛语 os 奥塞梯语 ur 乌尔都语
dv 迪维西语 kk 哈萨克语 pa 旁遮普语 uz 乌兹别克语
dz 不丹语 kl 格陵兰语 pi 巴利语 ve 文达语
ee 埃维语 km 高棉语 pl 波兰语 vi 越南语
el 现代希腊语 kn 卡纳达语 ps 普什图语 vo 沃拉普克语
en 英语 ko 朝鲜语、韩语 pt 葡萄牙语 wa 瓦隆语
eo 世界语 kr 卡努里语 qu 克丘亚语 wo 沃洛夫语
es 西班牙语 ks 克什米尔语 rm 罗曼什语 xh 科萨语
et 爱沙尼亚语 ku 库尔德语 rn 基隆迪语 yi 依地语
eu 巴斯克语 kv 科米语 ro 罗马尼亚语 yo 约鲁巴语
fa 波斯语 kw 康沃尔语 ru 俄语 za 壮语
ff 富拉语 ky 吉尔吉斯语 rw 卢旺达语 zh 中文、汉语
fi 芬兰语 la 拉丁语 sa 梵语 zu 祖鲁语
fj 斐济语 lb 卢森堡语 sc 撒丁语
fo 法罗语 lg 卢干达语 sd 信德语

对于values-xx-rxx 这种,例如values-en-rUS。r 前缀用于区分区域码,US是ISO 3166-1二位字母代码。ISO 3166-1二位字母代码是目前应用最为广泛的国家代码。rXX,这里才是国家代码。

下面的这2份文档比较全。如需快速查找,直接点进去使用ctrl+f快速查找。
每个国家对应的values语言Locale和国家代码对照表
zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)

另外,Android studio中选中res后,点击new,再选中Android resource directory。


image.png

选中Locale,移到右边。


image.png

image.png

选中所需的语言和地区。


image.png

然后就生成了文件夹了。


image.png

最后有一种比较少见的使用b+xx+xxx的。
这是一种特殊的使用 BCP 47 语言标记: b + xx (ISO 639-1)+xxx
它以b开头,然后是语言,脚本,区域和变体。
以塞尔维亚 (拉丁文)为例,早期可能是使用sr-SP-Latn 塞尔维亚 (拉丁文),但是现在使用这个文件夹命名编译会报错。

https://blog.csdn.net/chengze5915/article/details/100708680

然后在源码目录(搜索sr相关)中找到了values-b+sr+Latn。
https://github.com/Iscle/OrangePi_4G-IOT_Android_8.1_BSP/tree/master/frameworks/base/packages/SystemUI/res

image.png

还有一个比较好的官方源码网站:https://cs.android.com/
塞尔维亚 (拉丁文)应使用values-b+sr+Latn
Latn这个命名规则我没有找到代码表。
BCP 47 语言标记简单了解可看这里:
BCP 47 语言标记句法浅析

参考链接:
BCP 47 语言标记句法浅析
应用资源概览
支持不同的语言和文化
国家地区代码
ISO 639-1
Android各国语言对照表
android开发环境的几个问题
b代表什么?b + sr + Latn背后的语法是什么?(What does b stand for, and what is the syntax behind b+sr+Latn?)

你可能感兴趣的:(Android 语言适配简单记录)