国际化语种名称的标识

栏目: IOS · 发布时间: 7年前

内容简介:国内因为版号的问题,导致很多游戏厂商选择出海。在国际化的市场要想取得好的成绩,就必须要做好深度的本地化,其中最基础的一块就是语言。为了给用户提供更好的游戏体验,通常用户第一次进游戏的时候,会根据用户当前设备设置里所选择的语言来设置游戏的默认语言。通常系统返回的是  语言-国家/地区标识,如 ja-jp,日语-日本。en-us,英文-美国。当然还有比如 en-CA,英文-加拿大。每一个语言都可能对应很多国家/地区,一个国家/地区也可能有很多种语言。比如香港,可能用繁体中文 zh-HK/zh-Hant-HK

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

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

通常系统返回的是  语言-国家/地区标识,如 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  ;<strong>shortest ISO 639 code</strong> 

script        = "Latn", "Cyrl", "Hant" ; <strong>ISO 15924 code</strong>

region        = "US", "CS", "FR" ISO 3166 codes
                "419", "019",  or UN M.49 codes
;<strong>ISO 3166 code</strong>

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";
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件测试的艺术

软件测试的艺术

梅尔斯 / 机械工业出版社 / 2006年01月 / 22.0

《软件测试的艺术》(原书第2版)成功、有效地进行软件测试的实用策略和技术:    基本的测试原理和策略      验收测试    程序检查和走查         安装测试    代码检查            模块(单元)测试    错误列表            测试规划与控制    同行评分            独立测试机构    黑盒、白盒测试    ......一起来看看 《软件测试的艺术》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具