python - 如何将 IETF BCP 47 语言标识符转换为 ISO-639-2?

标签 python ios iso-639-2 ietf-bcp-47

我正在为 iOS 应用程序编写服务器 API。作为初始化过程的一部分,应用程序应通过 API 调用将电话界面语言发送到服务器。

问题是 Apple 使用了一种叫做 IETF BCP 47 language identifier 的东西在其 NSLocale preferredLanguages function .

返回值有不同的长度(例如[aa, ab, ace, ach, ada, ady, ae, af, afa, afh, agq, ...],我发现很很少有解析器可以将此代码转换为适当的语言标识符。

我想使用更常见的 ISO-639-2 three-letters language identifier ,无处不在,有多种语言的许多解析器,并且有标准的 3 字母语言表示。

如何将 IETF BCP 47 语言标识符转换为 ISO-639-2 三字母语言标识符,最好是在 Python 中?

最佳答案

BCP 47 标识符以 2 个字母的 ISO 639-1 3 个字母的 639-2、639-3 或 639-5 语言代码开头;查看RFC 5646 Syntax section :

Language-Tag  = langtag             ; normal language tags
              / privateuse          ; private use tag
              / grandfathered       ; grandfathered tags

langtag       = language
                ["-" script]
                ["-" region]
                *("-" variant)
                *("-" extension)
                ["-" privateuse]

language      = 2*3ALPHA            ; shortest ISO 639 code
                ["-" extlang]       ; sometimes followed by
                                    ; extended language subtags
              / 4ALPHA              ; or reserved for future use
              / 5*8ALPHA            ; or registered language subtag

我不希望 Apple 使用 privateusegrandfathered 形式,因此您可以假设您正在查看 ISO 639-1、ISO 639-2、此处为 ISO 639-3 或 ISO 639-5 语言代码。只需将 2 个字母的 ISO-639-1 代码映射到 3 个字母的 ISO 639-* 代码。

您可以使用 pycountry package为此:

import pycountry

lang = pycountry.languages.get(alpha2=two_letter_code)
three_letter_code = lang.terminology

演示:

>>> import pycountry
>>> lang = pycountry.languages.get(alpha2='aa')
>>> lang.terminology
u'aar'

其中术语 形式是首选的 3 字母代码;还有一个引用书目表格,只有 22 个条目不同。参见 ISO 639-2 B and T codes .但是,该软件包不包含 ISO 639-5 中的条目;该列表在某些地方与 639-2 重叠和冲突,我认为 Apple 根本不使用此类代码。

关于python - 如何将 IETF BCP 47 语言标识符转换为 ISO-639-2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26085570/

相关文章:

Android:获取 ISO 639 3 字母格式的设备界面语言?

python - TensorFlow:将张量拆分为 `batch_size` 片

python - 创建具有正确权限的文件夹 django uploads

python - 将文件路径干净地拆分为其组件

python - 使用整数张量在 tensorflow 中索引张量

iphone - 为什么我无法在 iOS 应用程序的 bundle 中查看 PNG 图像?

ios 如果没有提供所有功能供审查,我的应用程序会被拒绝吗

ios - 每次重新加载 tableview 部分时,UITableView 都不会向上滚动