【发布时间】:2023-10-10 04:54:01
【问题描述】:
国际扩展使用 RFC 4646 语言标签
在 PHP intl extension,特别是 Locale class 中,它说:
使用 RFC 4646 语言标签识别区域设置
RFC 4646 已弃用
我提到这一点的原因是 RFC 4646 已被弃用,取而代之的是 RFC 5646。
我原本打算使用 intl extension 将 ISO 639 代码翻译成它们各自的语言名称(例如 en 到 English)。虽然这不是必需的,但如果有可用的能力会很有帮助。
ISO 639 变化频繁
639 语言代码由各自的注册机构积极维护和更改。这也不是假设的问题,只需查看change-log for ISO 639-3。
现在已弃用的语言标签的使用让我有点担心intl extension 的维护情况如何; RFC 5656 于 2009 年发布,这算不上什么尖端标准。
问题
- intl 使用的 ISO-639 语言代码是否定期更新?
- 能否将 intl 用作 ISO 639 的权威查找资源?
- 如果没有,是否有 PHP 中 ISO 639 的权威查找资源?
【问题讨论】:
-
intl 扩展依赖于 ICU 来提供语言代码等。 ICU 版本存储在常量
PHP_ICU_VERSION中。但是,我不熟悉 ICU 如何存储语言代码,除了它可能依赖于 Unicode 通用区域设置日期存储库 (CLDR)。 -
@PeterO。 ICU 使用公共更改日志进行积极维护,
PHP_ICU_VERSION常量将为我提供合适的跟踪方式,以确保 intl 提供最新信息.所以,有点膨胀,我会接受你的评论作为答案。 -
标准的时代与使用的具体代码无关,更不用说将它们翻译成各种语言(这是您的具体问题)。参考 RFC 4646 或 5646 并不是最佳实践——更好的引用是“IETF BCP 47”。您会注意到两个 RFC 都被指定为“BCP 47”。
-
@StevenR.Loomis 我提到了 RFC,因为 intl 文档提到了 RFC 4646(而不是 BCP 47)。无论如何,IETF BCP 47 标准明确地describes the ways in which RFC 4646 is now obsolete; 639-3 和 639-5 代码的引入意义重大。简而言之,RFC 4646 中描述的标签不再详尽。那么......我的问题有什么问题?
-
@PeterTòmasScott 我的意思是你提到的 PHP Intl 文档应该参考 BCP 47,而不是 RFC。比 RFC 的时代更令人担忧的是:*是否包含对 ISO 639 的更新? * 本地化数据何时更新? * 本地化数据是如何收集和审查的?如前所述,ICU/CLDR 引入更新的 ISO 代码并定期更新本地化数据。那么让我们从ICU版本开始回答你的问题。也就是说,CLDR 并未全面翻译所有有效的 ISO-639 语言标识符。摘要:您的 Q 很好,文档应该更清晰。