国际化语种名称的标识

国内因为版号的问题,导致很多游戏厂商选择出海。在国际化的市场要想取得好的成绩,就必须要做好深度的本地化,其中最基础的一块就是语言。

为了给用户提供更好的游戏体验,通常用户第一次进游戏的时候,会根据用户当前设备设置里所选择的语言来设置游戏的默认语言。

通常系统返回的是  语言-国家/地区标识,如 ja-jp,日语-日本。en-us,英文-美国。当然还有比如 en-CA,英文-加拿大。每一个语言都可能对应很多国家/地区,一个国家/地区也可能有很多种语言。比如中国香港,可能用繁体中文 zh-HK/zh-Hant-HK 或者 en-HK。这就让情况变得比较复杂了,所以我们需要先了解相应的规范。

根据RFC 4646的规范,语言的标签表示法

A Language-Tag consists of: langtag ; generated tag -or- private-use ; a private use tag -or- grandfathered ; grandfathered registrations langtag = (language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse]) language = "en", "ale", or a registered value ;shortest ISO 639 code script = "Latn", "Cyrl", "Hant" ; ISO 15924 code region = "US", "CS", "FR" ISO 3166 codes "419", "019", or UN M.49 codes ;ISO 3166 code variant = "rozaj", "nedis", "1996", multiple subtags can be used in a tag extension = single letter followed by additional subtags; more than one extension may be used in a language tag private-use = "x-" followed by additional subtags, as many as are required Note that these can start a tag or appear at the end (but not in the middle) grandfathered = tags listed in the old registry that are not otherwise redundant (a closed list)

分为 language["-" script]["-" region]*("-" variant)*("-" extension)["-" privateuse] 六个部分。

在安卓和iOS上返回的通常只用到前三项(如果语言没有变种,则略过script项,返回类似 en-US 这种,其中 US 为美国),分别是 language – ISO 639,script – ISO 15924, region – ISO 3166。

其中地区 region 全大写(如中国CN,美国US),language 全小与(如中文zh,英文en), script 是首字母大写(语言的变种,如中文分:简体中文与繁体中文)。

示例:zh-Hant-HK  中文 - 繁体中文 - 中国香港地区。

language 由 ISO 639 规范进行定义的,将不同语种的名称分为二个字母的简称和三个字母的简称,这里使用最短的(二个字母)的简称,比如简体中文/繁体中文都使用zh表示。

详情可查看维基百科>>

ISO 51924 列表>>  简体中文就是 Hans 繁体中文就是 Hant

最后一个是地区 region,它在  ISO 3166 规范 中定义过了,这里使用二位字母表示。CN 表示中国、TW表示中国台湾、US 表示美国、HK 表示中国香港,全部为大写。

到这里基本上理清楚了,当我们看到

zh-Hant-MO 时就知道是繁体中文 - 澳门地区。

更多的示例如下:

zh-Hans 简体中文 zh-Hans-CN 大陆地区使用的简体中文 zh-Hans-HK 香港地区使用的简体中文 zh-Hans-MO 澳门使用的简体中文 zh-Hans-SG 新加坡使用的简体中文 zh-Hans-TW 台湾使用的简体中文

zh-Hant 繁体中文 zh-Hant-CN 大陆地区使用的繁体中文 zh-Hant-HK 香港地区使用的繁体中文 zh-Hant-MO 澳门使用的繁体中文 zh-Hant-SG 新加坡使用的繁体中文 zh-Hant-TW 台湾使用的繁体中文

对应获取设备当前语种标识的代码。

安卓(注意 getScript 方法需要 API 21+才支持):

Locale locale; if (Build.VERSION.SDK_INT >= 24) { locale = LocaleList.getDefault().get(0); } else { locale = Locale.getDefault(); } String strLanguageIden = locale.getLanguage() + "-" + locale.getScript() + "-" + locale.getCountry();

iOS代码

NSString *pfLanguage = [NSLocale preferredLanguages][0];

preferredLanguage : zh-Hant-HK

如果只选英文,不选英文(国家/地区)它会将下面的地区带上。

preferredLanguage : en-CN  (这里的CN就是上面截图中的地区-中国这一栏)

如果选择 English(Canada)加拿大地区,则会输出 en-CA

preferredLanguage : en-CA

根据以上特征,我们只需要区分第一位是什么。特别要注意的是我们只区分简体与繁体中文,其它语言如果我们需要区分变体,可内嵌判断。

if (strLanguageIden.indexOf("zh-") > -1) { // 中文 if (strLanguageIden.indexOf("zh-CN") > -1 || strLanguageIden.indexOf("zh-Hans") > -1) { // 简体中文 strLanguage = "cn"; } else { // 繁体中文 strLanguage = "tw"; } } else if (strLanguageIden.indexOf("en-") > -1) { // 英语 strLanguage = "en"; } else if (strLanguageIden.indexOf("ja-") > -1) { // 日语 strLanguage = "jp"; } else if (strLanguageIden.indexOf("ko-") > -1) { // 韩语 strLanguage = "kr"; } else if (strLanguageIden.indexOf("fr-") > -1) { // 法语 strLanguage = "fr"; } else if (strLanguageIden.indexOf("de") > -1) { // 德语 strLanguage = "ge"; } else if (strLanguageIden.indexOf("vi-") > -1) { // 越南文 strLanguage = "vn"; } else if (strLanguageIden.indexOf("th-") > -1) { // 泰文 strLanguage = "th"; } else { // 默认英语 strLanguage = "en"; }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

ExtJs学习笔记(3)_GridPanel[XML做数据源]

这一节,将学习到除了用JSON做GridPanel的数据源外,还可以使用XML 一。静态示例 1.xml文件内容: <?xml version="1.0...

2308
来自专栏叁金大数据

WPF播放器

最近由于工作需要,需要做一个播放软件,在网上参考了很多例子,园子里有很多代码。其中最多的就是wpf自带的MediaElement控件,或者VLC视频播放器。

3542
来自专栏菩提树下的杨过

Silverlight Telerik控件学习:GridView双向绑定

做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定后,如果允许行编辑,数据一顿修改后,想批量保存修改后的结果,通常是将DataGrid的所有...

2305
来自专栏GIS讲堂

Openlayers2中统计图的实现

在前文中,介绍了Arcgis for js和Openlayers3中统计图的实现,在本文,书接上文,介绍在Openlayers2中,统计图的实现。

1463
来自专栏Hongten

pygame系列_箭刺Elephant游戏_源码下载

http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html

1734
来自专栏数据结构与算法

BZOJ3262: 陌上花开(cdq分治)

第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值。

1392
来自专栏GIS讲堂

Arcgis for JS实现台风运动路径与影像范围的显示

3902
来自专栏hotqin888的专栏

MeritMS+jQuery.Gantt价值管理系统增加项目进度展示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

2971
来自专栏ml

HDUOJ --2544最短路(基础)

输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛...

2594
来自专栏菩提树下的杨过

Flash在线拍摄用户头象

很多网站在上传用户头象时,除了传统方式上传外,都支持在线摄像头拍照并做简单编辑,完成之后再将图象数据提交到服务端(比如ASP.Net),这几天正好需要这个功能,...

3408

扫码关注云+社区

领取腾讯云代金券