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/year/pending/proposal-intl-currency-display-choices.md.
  • 简体中文
  • More Currency Display Choices S1

    中文标题:更多货币显示选项

    提案概览
    提案速览

    该提案旨在增强 Intl.NumberFormat 的 currencyDisplay 选项,添加两个新值:formalSymbol 用于更宽的正式符号(例如 "US$" 而非 "$"),以及 never 用于完全省略货币指示符。它解决了在同一上下文中区分多种货币以及当货币隐含时节省空间的需求。

    Note

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

    更多货币显示选项

    状态

    提案发起人:Eemeli Aro (Mozilla)
    阶段:2

    动机与使用场景

    在 JavaScript 中,本地化货币格式化可通过 Intl.NumberFormat 及其 style: 'currency' 选项实现。

    货币的指示由 currencyDisplay 选项控制,目前支持将其格式化为 symbol(例如 "$ " 或 "US$")、narrowSymbol(例如 "$")、ISO 货币 code(例如 "USD")或拼写完整的 name(例如 "US dollars")。

    对于 symbol 格式化,"窄"符号与"正式"符号的选择按货币和区域设置进行,例如 USD 值在 en-US 区域设置中格式化为 "$",但在 en-CA 区域设置中格式化为 "US$"。

    这些现有选项不支持以下使用场景:

    • 在同一上下文(如网页)中格式化多种货币时,应能使用完整的正式符号区分每种货币,例如对 USD 使用 "US$",对 CAD 使用 "CA$"。然而,在 en-US 区域设置中无法将 USD 格式化为 "US$",因为其 symbol 样式总是格式化为 "$"。 [功能请求]

    • 在非常狭窄的空间中格式化货币值,或在货币符号或名称由其他方式提供的设置中,能够完全省略货币指示符,同时仍使用货币格式化样式来控制小数位数(这取决于货币),会很有用。目前唯一的方式是使用 toParts 格式化,并从输出中过滤掉货币符号或代码以及任何相邻空白。 [Stack Overflow 问题]

    描述

    提议的解决方案是添加以下两个 currencyDisplay 选项值:

    • formalSymbol — 更宽的格式符号或 ISO 货币代码("US$100" 而非 "$100")。 另一种拼写可能是 wideSymbol
    • never — 不显示任何货币符号或名称。
    const formal = new Intl.NumberFormat("en-US", {
      style: "currency",
      currency: "USD",
      currencyDisplay: "formalSymbol",
    });
    formal.format(42); // "US$42.00"
    
    const never = new Intl.NumberFormat("en-US", {
      style: "currency",
      currency: "USD",
      currencyDisplay: "never",
    });
    never.format(42); // "42.00"

    比较

    ICU 包含 FORMAL_SYMBOL_NAME / UCURR_FORMAL_SYMBOL_NAME 以提供与 formalSymbol 相同的功能:

    正式货币符号类似于常规货币符号,但它始终采用正式设置(如银行)中使用的形式;例如,在 zh-TW 中,TWD 使用 "NT$" 而不是 "$"。