App多语言本地化开发中语言编码知识介绍及使用
所属分类:Csbase | 发布于 2023-06-09 11:57:23
开发的App支持本地化,也就是提供了多语言的版本,本地化的配置一般在app项目里直接配置,但是还有一些数据需要从后台接口返回,那么这个时候接口的返回也需要多语言。常见的做法是将app正在使用的语言传给后台接口,后台接口根据传入的语言信息返回对应的内容。
想要Android和iOS开发中,获取当前使用的语言,并且能正确的使用它们,就必须要了解语言编码,也就是国家语种代码标准。
介绍
先来看在网站在多语言的示例:
https://domain.com/cn
https://domain.com/en
https://domian.com/zh
https://domian.com/zh-cn
https://domain.com/zh-hans
https://domain.com/zh-hans-cn
https://domain.com/zh-tw
https://domain.com/zh-hk
看起来五花八门,它们之间到底有什么区别,在开发中到底要怎么使用,我们将在这篇文章中搞清楚。
语言标准
ISO 639
ISO 639是国际标准组织为各语言定制的语言代码;
这个标准用两个字母表示一个语种,比如说zh表示中文、en表示英文;zh是zhongwen这个拼音的缩写;en是english这个单词的缩写;
问题与解决
字母只有26个,平方一下两个字母最多也就能表示676个语种;面对世界上几千个语种,这种表示明显是不够用的;于是两个字母的ISO 639的标准作为ISO 639-1;接着又扩展了一个三个字母的版本ISO 639-2;这套三个字母的标准对大多数国家已经够用了;比如中文对应的语种代码是zho。
但是另外一个问题出来了,中文可是分简体中文和繁体中文的;如果语种还有子类,那这个标准就又不够我们用了。
结论
ISO 639是以语种为区分的。
ISO 6399
上面的ISO 639规范的是语种代码,但是我们知道英国和美国都使用的英语,如果我想具体表达某个国家地区呢?
ISO 3166规范就是定义国家和地区代码的:CN 是 China 的简称,TW 是 Taiwan,Province Of China 的简称,US 是 United States Of America 的简称;
ISO 3166标准还被广泛的应用于域名后缀,中国的国家顶级域名就是 .cn ;
RFC 1766
有了ISO 639语种代码和ISO 3166国家地区代码,我们组合起来就可以同时满足语种和国家的需求了。
RFC 1766 标准就是一个组合方案,它把 ISO 639 和 ISO 3166 用 - 拼接来表示不同国家和地区使用的语种;
比如说 zh-CN 表示中国大陆的中文,zh-TW 则表示台湾地区使用的中文,zh-HK 则表示香港地区使用的中文;
在 RFC 1766 标准下;我们一般使用 zh-CN 表示简体中文,而用 zh-TW 表示繁体中文;
RFC 1766 还被广泛的用于HTML 的 lang;
RFC 4646
上面的 RFC 1766 标准已经可以让我们具体到语种和地区了;
但是又有很多时候我们并不很关心地区,而是比较关心子语种;比如说我们可能值需要细化到中文简体和中文繁体就行了,而并不打算具体到香港地区使用的繁体还是太晚地区使用的繁体;
虽然 RFC 1766 中用 zh-TW 表示繁体;已经满足区分简体中文和繁体中文的需求,但是面向香港客户给一个 zh-TW 而不是 zh-HK 总还是让人略有不爽,这时候我们需要一个能用来代表繁体中文又没有起义的代码,这就是接下来要将的 RFC 4646。
这里依然以中文为例,在 RFC 4646 中代码第一部分同样是 ISO 639-1 的两位缩写 zh ;后面跟的是 Hans 和 Hant ;Han 是汉语的意思;s 是 Simplified 简体;t 是 Traditional 繁体;zh-Hans 表示简体中文;zh-Hant 表示繁体中文;
如果想具体到地区呢?RFC 4646 标准还可以再加第三部分 ISO 3166国家代码;比如说 zh-Hans-CN 表示大陆地区使用的简体中文;
比如说 zh-Hant-TW 表示台湾地区使用的繁体中文;不过一般不用第三部分;
总结
在开发过程中:
如果是想按国家划分可以使用 ISO 3166标准;如果是想按语种划分可以使用 ISO 639-1 标准。
如果是想具体到简体和繁体;RFC 1766 和 RFC 4646 两个标准都可以。
但是如果只是想表示语种而不想纠结地区;那么显然 RFC 4646 会更合适。