S2.03.1Locale-aware currency formatting设计

货币符号的位置与间隔随地区不同

别名: 本地化货币格式 · 货币符号位置 · currency spacing

概念解释

地区感知货币格式化(locale-aware currency formatting)把“数值、币种、显示地区”共同转换成金额字符串。货币标识可能位于数字前或后,可能紧贴数字,也可能由普通空格、不换行空格或窄不换行空格隔开。位置和间隔属于 locale 的格式数据,而不是货币符号自身的固定属性;同一种货币换一个显示地区,结果就可能改变。

机制

Unicode LDML 用货币格式 pattern 中的 ¤ 占位符表达标识与数字的相对位置,并以 locale 的正负格式、数字系统和分隔符完成组合。字母型标识贴近数字时容易连读,所以 CLDR 还提供 alphaNextToNumber 变体;较早实现可能通过 currencySpacing 在边界插入不换行间隔。由此可见,手工写成“符号 + 数字”会同时丢掉后置符号、受控空白和双向文本等信息。$¥ 等符号还可能对应多种货币,版式正确并不等于币种明确。

边界

用户 locale 决定熟悉的呈现方式,币种代码决定金额是什么,两者不可互相推断。紧凑列表可以使用窄符号,但跨境结算、对账或多个同符号币种并列时通常需要 ISO 货币代码或带地区限定的符号。普通网页空格可能在换行处把符号与金额拆开;从界面复制到表格或读屏软件时,不可见的 NBSP、NNBSP 和双向控制也可能产生不同结果。会计负数格式与普通货币格式可以不同,不应仅凭视觉样例反向猜 locale。

怎么落地

  • 把金额作为数值与 ISO 货币代码保存,把 locale 作为显示参数;调用维护中的 CLDR/ICU 或平台货币格式器,不拼接符号和数字。
  • 为同一币种分别验证主要目标 locale 的正数、负数、零值、大数与窄容器;检查符号前后位置、真实 Unicode 空白、换行和复制结果。
  • 在歧义会影响决策的报价、账单和结算页显示 USDCAD 等代码;若空间不足,至少在首次出现或可访问名称中消歧。
  • 用拉丁与阿拉伯文字方向混排、不同数字系统、缩放、读屏和表格粘贴做回归测试,并核对输出来自格式器而不是硬编码快照。

延伸

  • 同组S2.03.2 小数位数随币种不同 · S2.03.3 汇率换算需标明时点与来源 · S2.03.4 含税与不含税的显示惯例不同
  • 相邻S2.02 数字、小数与千分位 · S1.02 从右至左语言的镜像
  • 站内检索locale-aware currency formatting · currency pattern · currency spacing

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/S2.03.1