【问题标题】:ISO 639 - Reliable Lookup Resource in PHPISO 639 - PHP 中的可靠查找资源
【发布时间】: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 代码翻译成它们各自的语言名称(例如 enEnglish)。虽然这不是必需的,但如果有可用的能力会很有帮助。

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 很好,文档应该更清晰。

标签: php standards iso intl


【解决方案1】:

intl 扩展依赖于 ICU 来提供语言代码等。 ICU 版本存储在常量PHP_ICU_VERSION 中。 ICU 本身依赖于您在 Locale 类中引用的同一文档中指定的 Unicode Common Locale Data Repository (CLDR):“CLDR 在 [Unicode Standard Annex] #35 中使用的扩展名(并由 ICU 继承)是有效的并已使用他们通常在 ICU 的任何地方。”

【讨论】: