Ada*_*tan 5 python ios iso-639-2 ietf-bcp-47
我正在为iOS应用程序编写服务器API.作为初始化过程的一部分,应用程序应通过API调用将电话界面语言发送到服务器.
问题是Apple 在其功能中使用了称为IETF BCP 47语言标识符的东西.NSLocale preferredLanguages
返回的值具有不同的长度(例如[aa, ab, ace, ach, ada, ady, ae, af, afa, afh, agq, ...],我发现很少的解析器可以将此代码转换为适当的语言标识符.
我想使用更常见的ISO-639-2三字母语言标识符,它无处不在,有许多语言的许多解析器,并且有一个标准的3个字母的语言表示.
如何将IETF BCP 47语言标识符转换为ISO-639-2三字母语言标识符,最好是在Python中?
BCP 47标识符以2个字母ISO 639-1 或 3个字母639-2,639-3或639-5语言代码开头; 请参阅RFC 5646语法部分:
Run Code Online (Sandbox Code Playgroud)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使用这些privateuse或grandfathered表格,因此您可以假设您在此处查看ISO 639-1,ISO 639-2,ISO 639-3或ISO 639-5语言代码.只需将2个字母的ISO-639-1代码映射到3个字母的ISO 639-*代码即可.
你可以使用这个pycountry包:
import pycountry
lang = pycountry.languages.get(alpha2=two_letter_code)
three_letter_code = lang.terminology
Run Code Online (Sandbox Code Playgroud)
演示:
>>> import pycountry
>>> lang = pycountry.languages.get(alpha2='aa')
>>> lang.terminology
u'aar'
Run Code Online (Sandbox Code Playgroud)
其中术语形式是优选的3个字母的代码; 还有一个参考书目表格,仅有22个参赛作品不同.参见ISO 639-2 B和T代码.该套餐不包括ISO 639-5的条目; 该列表在某些地方与639-2重叠并发生冲突,我认为Apple根本不会使用这些代码.
| 归档时间: |
|
| 查看次数: |
2748 次 |
| 最近记录: |