For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/stage/4/proposal-intl-displaynames-v2.md.
  • 简体中文
  • Intl.DisplayNames v2 S4

    中文标题:Intl.DisplayNames 第二版

    提案概览
    提案速览

    该提案扩展了 Intl.DisplayNames,以支持更多类型,包括日历名称和日期时间字段名称,并添加了 languageDisplay 选项来控制语言名称以方言还是标准形式显示。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    提案:Intl.DisplayNames 第二版

    阶段

    阶段 3

    倡导者

    • Frank Tang @FrankYFTang

    审阅者

    • Shane Carr @sffc
    • Ujjwal Sharma @ryzokuken

    编辑

    • Richard Gibson @gibson042

    动机

    Intl.DisplayNames 项目的主要动机是使开发人员能够在客户端上获取语言、地区或文字的显示名称翻译。语言、地区或文字的显示名称翻译需要在网络上传输大量数据,而这些数据在大多数浏览器中已经可用。这些显示名称翻译也给开发人员带来了很高的数据大小代价。这个 API 将使 Web 开发人员能够缩小他们的 HTML 和/或 ECMAScript 代码的大小,而不需要包含人类可读形式的显示名称,从而减少下载大小以降低延迟。此外,这个 API 将降低 Web 开发人员的本地化成本。我们的目标是通过 Intl API 公开这些数据,以便用于例如语言、地区和文字选择器等。

    在 Intl.DisplayNames API 中,我们已经覆盖了语言、地区、文字和货币。本提案增强了 Intl.DisplayNames API,并覆盖更多内容。

    还请参阅 Intl.DisplayNames 仓库中 Intl.DisplayNames 第一版的先前工作。

    范围增强

    • 日期时间字段
    • 日历名称
    • 语言显示:标准 vs 方言

    范围变更

    • 在 2021-01 ECMA402 会议期间,我们决定不包括星期、月份、时区和编号系统。
    • 在 2021-03-11 ECMA402 会议期间,我们决定重新加入 dateTimeField。
    • 在 2021-04-08 ECMA402 会议期间,我们同意 dialectHandling 的名称,并继续进行 TC39 阶段 3。Shane 和 Ujjwal 同意担任阶段 3 审阅者。
    • 在 2021-05-06 ECMA402 会议期间,我们同意放弃“unit”支持,并将 dialectHandling 重命名为 languageDisplay。

    示例

    日历名称

    d8> dn = new Intl.DisplayNames("en", {type: "calendar"})
    d8> dn.of("roc")
    "Minguo Calendar"
    d8> dn.of("persian")
    "Persian Calendar"
    d8> dn.of("gregory")
    "Gregorian Calendar"
    d8> dn.of("ethioaa")
    "Ethiopic Amete Alem Calendar"
    d8> dn.of("japanese")
    "Japanese Calendar"
    d8> dn.of("dangi")
    "Dangi Calendar"
    d8> dn.of("chinese")
    "Chinese Calendar"
    
    
    d8>  dn = new Intl.DisplayNames("zh", {type: "calendar"})
    d8> dn.of("roc")
    "民国纪年"
    d8> dn.of("persian")
    "波斯历"
    d8> dn.of("gregory")
    "公历"
    d8> dn.of("ethioaa")
    "埃塞俄比亚阿米特阿莱姆日历"
    d8> dn.of("japanese")
    "和历"
    d8> dn.of("dangi")
    "檀纪历"
    8> dn.of("chinese")
    "农历"

    日期时间字段名称

    $ out/x64.release/d8 --harmony_intl_displaynames_v2
    d8> dn = new Intl.DisplayNames("zh", {type: "dateTimeField"})
    [object Intl.DisplayNames]
    d8> dn.of("era")
    "纪元"
    d8> dn.of("year")
    "年"
    d8> dn.of("month")
    "月"
    d8> dn.of("quarter")
    "季度"
    d8> dn.of("weekOfYear")
    "周"
    d8> dn.of("weekday")
    "工作日"
    d8> dn.of("dayPeriod")
    "上午/下午"
    d8> dn.of("day")
    "日"
    d8> dn.of("hour")
    "小时"
    d8> dn.of("minute")
    "分钟"
    d8> dn.of("second")
    "秒"
    
    d8> dn = new Intl.DisplayNames("es", {type: "dateTimeField"})
    [object Intl.DisplayNames]
    d8> dn.of("era")
    "era"
    d8> dn.of("year")
    "año"
    d8> dn.of("month")
    "mes"
    d8> dn.of("quarter")
    "trimestre"
    d8> dn.of("weekOfYear")
    "semana"
    d8> dn.of("weekday")
    "día de la semana"
    d8> dn.of("dayPeriod")
    "a. m./p. m."
    d8> dn.of("day")
    "día"
    d8> dn.of("hour")
    "hora"
    d8> dn.of("minute")
    "minuto"
    d8> dn.of("second")
    "segundo"

    语言显示

    ~/v8/v8$ out/x64.release/d8 --harmony_intl_displaynames_v2
    V8 version 9.1.0 (candidate)
    d8> dn1 = new Intl.DisplayNames("en", {type: "language"})                  
    [object Intl.DisplayNames]
    d8> dn1.of("en")
    "English"
    d8> dn1.of("en-GB")
    "British English"
    d8> dn1.of("en-US")
    "American English"
    d8> dn1.of("en-AU")
    "Australian English"
    d8> dn1.of("en-CA")
    "Canadian English"
    d8> dn1.of("zh")
    "Chinese"
    d8> dn1.of("zh-Hant")
    "Traditional Chinese"
    d8> dn1.of("zh-Hans")
    "Simplified Chinese"
    
    // Same as above
    d8> dn2 = new Intl.DisplayNames("en", {type: "language", languageDisplay: "dialect"})
    [object Intl.DisplayNames]
    d8> dn2.of("en")
    "English"
    d8> dn2.of("en-GB")
    "British English"
    d8> dn2.of("en-US")
    "American English"
    d8> dn2.of("en-AU")
    "Australian English"
    d8> dn2.of("en-CA")
    "Canadian English"
    d8> dn2.of("zh")
    "Chinese"
    d8> dn2.of("zh-Hant")
    "Traditional Chinese"
    d8> dn2.of("zh-Hans")
    "Simplified Chinese"
    
    // Now switch to standard name
    d8> dn3 = new Intl.DisplayNames("en", {type: "language", languageDisplay: "standard"})
    [object Intl.DisplayNames]
    d8> dn3.of("en")
    "English"
    d8> dn3.of("en-GB")
    "English (United Kingdom)"
    d8> dn3.of("en-AU")
    "English (Australia)"
    d8> dn3.of("en-CA")
    "English (Canada)"
    d8> dn3.of("en-US")
    "English (United States)"
    d8> dn3.of("zh")
    "Chinese"
    d8> dn3.of("zh-Hant")
    "Chinese (Traditional)"
    d8> dn3.of("zh-Hans")
    "Chinese (Simplified)"

    阶段 1 期间讨论的范围

    阶段 2 期间讨论的范围

    • 2021-03-11:重新加入 dateTimeField
    • 2021-05-06:移除 unit

    阶段 3 的进入标准

    • 所有阶段 2 标准
    • 完整的规范文本
    • 指定的审阅者已签署当前规范文本
    • 所有 ECMAScript 编辑已签署当前规范文本

    阶段 2 的进入标准

    • 所有阶段 1 标准
    • 初始规范文本

    阶段 1 的进入标准

    • 确定推进该增量的“倡导者”:完成 - @FrankYFTang
    • 概述问题或需求以及解决方案总体形态的散文
    • 说明性的使用示例
    • 高级 API
    • 讨论关键算法、抽象和语义
    • 识别潜在的“跨领域”关注点和实现挑战/复杂性
    • 一个公开可用的提案仓库,捕获上述要求:完成 https://github.com/tc39/intl-displaynames-v2

    实验性