android 多语言适配,是通过res下新建不同的values-xx
文件夹,以及values文件夹下的strings.xml文件实现的。一般有2种命名:values-xx
和values-xx-rxx
。
对于values-xx
这种命名,如下所示:
res/values-es/strings.xml
西班牙语
res/values-en/strings.xml
英语
这里的values-xx
,xx
是语言代码,并不是国家地区代码。一开始,我以为这里是用的国家地区代码,发现新建values-xx
后并没有图标。语言代码与地区代码,有时候并不一致。例如,阿尔巴尼亚,地区代码是AL
,语言代码是sq
,那么就应该使用values-sq
去命名。
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 塞尔维亚 (拉丁文),但是现在使用这个文件夹命名编译会报错。
然后在源码目录(搜索sr相关)中找到了values-b+sr+Latn。
https://github.com/Iscle/OrangePi_4G-IOT_Android_8.1_BSP/tree/master/frameworks/base/packages/SystemUI/res
。
还有一个比较好的官方源码网站: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?)
网友评论