Twig 3.x format_currency过滤器选项文档及千位分隔符不显示问题
问题现象
- 运行环境:Twig 3.x,已安装启用PHP Intl扩展
- 故障表现:使用
format_currency过滤器输出本地化货币时,货币类型、小数位数配置可正常生效,但输出结果无千位分隔符 - 原调用代码:
{{ reservation.balance_due|format_currency('USD',{fraction_digit: 0}) }}
- 实际输出:
$ 1234,不符合带千位分隔符的预期 - 排查卡点:找不到
format_currency过滤器的选项公开说明文档,部分选项(如grouping_used)命名含义不明确,无法定位是配置错误还是使用方式问题。
原因说明
format_currency底层依赖PHP Intl扩展的NumberFormatter类实现格式化,传入的属性参数会直接映射到NumberFormatter的格式化属性,问题来自两点:
- 小数位数参数名拼写错误:正确的属性名是
fraction_digits(复数形式),原代码写的单数fraction_digit是无效参数,不会被解析生效 - 传入自定义属性数组时,数字千位分组(即千位分隔符)规则不会默认继承本地化配置,需要显式开启。你提到的
grouping_used就是控制该功能的开关,参数值设为true时就会按照当前本地化规则自动插入千位分隔符。
修复方案
将过滤器调用改为如下写法即可:
{{ reservation.balance_due|format_currency('USD', { fraction_digits: 0, grouping_used: true }) }}
传入1234作为金额时,上述代码会正常输出带千位分隔符的$1,234格式结果。
如果需要调整其他格式化规则,直接参考PHP Intl扩展中NumberFormatter的属性命名传参即可,format_currency没有单独的专属参数规则。
内容的提问来源于stack exchange,提问作者mike traveller
相关产品推荐
相关产品推荐

