国际化语种名称的标识

栏目: 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";
}

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

查看所有标签

猜你喜欢:

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

Python Data Structures and Algorithms

Python Data Structures and Algorithms

Benjamin Baka / Packt Publishing / 2017-5-30 / USD 44.99

Key Features A step by step guide, which will provide you with a thorough discussion on the analysis and design of fundamental Python data structures.Get a better understanding of advanced Python c......一起来看看 《Python Data Structures and Algorithms》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

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

HSV CMYK互换工具