如何规范化语义相同的语言标签?[CLDR]
关于CLDR语言标签规范化及使用场景的解答
先明确ar-EG和arz的核心差异
ar-EG是**ISO 639-1语言码(ar=阿拉伯语)+ ISO 3166-1区域码(EG=埃及)**的组合标签,代表「埃及地区使用的标准阿拉伯语」;而arz是ISO 639-3的独立语言码,专门指代「埃及阿拉伯语方言」——CLDR会根据数据用途的不同,分别使用这两种标签:
- 当存储面向埃及地区的标准阿拉伯语翻译内容时,用
ar-EG; - 当需要查询「埃及阿拉伯语」这个方言在其他语言中的名称翻译时,用
arz。
程序化规范化的实现方式
无需自行维护规整数据库,直接利用现有工具和CLDR自带数据即可:
- CLDR内置映射数据:在cldr-common-42的
supplemental目录下,languageData.json和likelySubtags.json包含了所有语言标签的关联逻辑。比如通过likelySubtags可以自动推导ar-EG对应的方言码,或把arz关联到对应的区域化标签。 - ICU库:Unicode官方的ICU组件封装了CLDR的映射规则,支持多语言(Java、C++、Python等)。比如用ICU的
Locale类,可快速完成标签的转换、规范化,比如将arz转换为ar-EG,或反向推导。
不同场景的标签选择优先级
- 内容本地化(翻译面向特定区域的标准语言):优先用
语言码-区域码形式(如ar-EG),这是本地化场景的通用标准,适配绝大多数翻译系统和区域化需求。 - 指代独立方言/语言变体(如多语言选择器的选项名称、方言专属内容处理):优先用ISO 639-3独立码(如
arz),它能精准代表方言本身,而非「某地区的标准语言」。 - CLDR内部查询:查目标区域的翻译内容用
ar-EG;查该语言变体的跨语言名称翻译用arz,这是CLDR数据组织的既定规则。
规范化资源指引
- CLDR补充数据:直接查看cldr-common-42包内的
supplemental文件夹,其中的languageData.json包含语言码的层级、关联关系,likelySubtags.json提供标签自动补全与映射逻辑。 - ICU库:各语言的ICU绑定库可直接调用API处理标签规范化,无需自行维护映射关系。
- ISO 639-3代码集:下载官方代码集,里面包含所有语言/方言的代码,以及与ISO 639-1/2的映射关系,和CLDR数据完全兼容。
内容的提问来源于stack exchange,提问作者Vasco Lange
相关产品推荐
相关产品推荐

