首页/新闻资讯/正文详情

Twig IntlExtension 的 currency_name 过滤器:在模板中把 ISO 4217 货币代码转为本地化货币名称

发布时间:2026/9/25 5:41:45 来源:云帆数科 栏目:资讯中心
Twig IntlExtension 的 currency_name 过滤器:在模板中把 ISO 4217 货币代码转为本地化货币名称
后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载currency_name过滤器是 Twig 国际化扩展twig/intl-extra包中的IntlExtension提供的基础设施之一它接收一个 ISO 4217 三位货币代码如EUR、JPY返回符合目标语言环境的货币名称如Euro、yen japonais。读完本篇你将掌握它的模板用法、locale参数规范、完整的安装与注册流程并能从源码层面理解它在空值、未知代码、ICU 资源缺失时的降级行为从而在电商价格展示、多语言结算页等场景中放心使用。一、模板中的基本用法currency_name过滤器将一个 ISO 4217 货币代码转换为该货币的本地化名称。默认情况下使用当前 locale即 PHP 进程通过Locale::getDefault()生效的区域设置也可以显式传入 locale{# Euro #} {{ EUR|currency_name }} {# Japanese Yen #} {{ JPY|currency_name }}显式指定 locale 后输出语言随之切换。例如以法语环境渲染日元{# yen japonais #} {{ JPY|currency_name(fr_FR) }}参数说明参数类型默认值说明过滤器输入string货币代码必填ISO 4217 三位字母代码如EUR、USD、JPYlocalestringnull使用当前 locale区域设置代码遵循 RFC 5646 定义如fr、fr_FR、en_US返回值string—本地化货币名称输入为null时返回空字符串代码无法识别时原样返回该代码二、安装与扩展注册currency_name过滤器不属于 Twig 核心而是IntlExtension的一部分默认并不安装。仓库文档doc/filters/currency_name.rst给出的安装步骤如下先安装 intl 扩展包$ composer require twig/intl-extra如果是 Symfony 项目接着安装twig/extra-bundle它会自动装配该扩展$ composer require twig/extra-bundle非 Symfony 项目则需要在 Twig 环境上显式注册扩展use Twig\Extra\Intl\IntlExtension; $twig new \Twig\Environment(...); $twig-addExtension(new IntlExtension());从 composer.json 可以确认该包的适用前提要求 PHP 8.1 及以上依赖twig/twig ^3.13|^4.0和symfony/intl ^5.4|^6.4|^7.0|^8.0。货币名称的数据来源正是symfony/intl组件提供的 ICU 数据Currencies类这也是过滤器能够按 locale 返回不同语言名称的底层原因。三、源码级实现降级策略与容错设计过滤器在 IntlExtension.php 中注册getFilters()方法内将其映射到getCurrencyName方法new TwigFilter(currency_name, [$this, getCurrencyName]),核心实现非常短但包含了三层容错逻辑见 IntlExtension.phppublic function getCurrencyName(?string $currency, ?string $locale null): string { if (null $currency) { return ; } try { return Currencies::getName($currency, $locale); } catch (MissingResourceException $exception) { return $currency; } }逐层解读空值安全输入为null时直接返回空字符串不会抛出类型错误。这意味着模板里写{{ item.currency|currency_name }}时即使currency字段缺失也不会导致页面崩溃。正常路径调用Symfony\Component\Intl\Currencies::getName()由 symfony/intl 组件根据 ICU 数据返回对应 locale 下的货币名称。资源缺失降级如果symfony/intl的 ICU 资源无法覆盖该代码抛出MissingResourceException则原样返回输入的货币代码而不是抛出异常。这是一种“优雅降级”设计即使翻译资源不完整页面仍然能展示一个对用户有辨识度的占位符如XXX便于快速定位数据问题。同一文件中getCountryName、getLanguageName、getCurrencySymbol、getTimezoneName等方法采用完全相同的结构null 检查 try/catch 降级说明这是整个IntlExtension命名查询类方法的统一范式。四、测试用例验证实际行为仓库自带集成测试夹具 currency_name.test 覆盖了五种典型输入可以把它当作该过滤器行为契约的权威说明{{ UNKNOWN|currency_name }} {# UNKNOWN未知代码原样返回 #} {{ null|currency_name }} {# 空字符串 #} {{ EUR|currency_name }} {# Euro #} {{ JPY|currency_name }} {# Japanese Yen #} {{ EUR|currency_name(fr) }} {# euro #} {{ JPY|currency_name(fr_FR) }} {# yen japonais #}该夹具由 IntegrationTest.php 驱动——它继承 Twig 核心的IntegrationTestCase并在getExtensions()中注册new IntlExtension()与生产环境的注册方式一致。从测试期望输出可以印证两点其一当前默认 locale英文环境下EUR渲染为Euro其二传入fr/fr_FR后分别输出euro法语中货币名小写和yen japonais日语“yen”的法语借词带拼写验证了 locale 参数确实切换了 ICU 的命名资源。五、在整个 IntlExtension 中的位置与相关能力currency_name只是IntlExtension国际命名能力的一块拼图。查看 IntlExtension.php 的getFilters()与getFunctions()可以看到完整清单命名类过滤器与本文同族country_name、currency_name、currency_symbol、language_name、locale_name、timezone_name命名类函数返回完整映射数组country_names、currency_names、locale_names、language_names、script_names、timezone_names、country_timezones本地化格式化过滤器format_currency把金额格式化为货币、format_number、format_date、format_time、format_datetime、format_list。在实际项目中常见的组合用法是用currency_name/currency_names做货币下拉框的本地化标签用format_currency渲染价格本体。例如模板中可以同时写出货币名称与格式化金额format_currency同样接受locale参数机制与本文一致。另外README.md 中对本包的官方描述是“returns the currency name given its three-letter code”与本文用法一致。六、小结与注意事项currency_name的输入是ISO 4217 三位代码locale参数遵循RFC 5646格式省略时使用进程默认 locale。该过滤器来自twig/intl-extra的IntlExtension不在 Twig 核心中Symfony 项目需额外安装twig/extra-bundle独立项目需手动addExtension(new IntlExtension())。行为契约以仓库源码与测试为准null输入返回空字符串未知代码或 ICU 资源缺失时原样返回输入代码不抛异常。运行环境要求 PHP 8.1且货币名称数据依赖symfony/intl组件所封装的 ICU 数据集。相关文档与源码入口currency_name 官方文档、currency_symbol 文档、过滤器实现、行为测试夹具。赞分享后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载相关推荐ISO 4217货币标准落地实战精通cj-money的Currency对象与Currencies单例设计ISO 4217货币标准落地实战精通cj money的Currency对象与Currencies单例设计 cj money 是一个面向 Cangjie 语言、金融科技如何参与Nouns DAO新手必备的NFT拍卖与治理入门教程如何参与Nouns DAO新手必备的NFT拍卖与治理入门教程 Nouns DAO是一个基于区块链的去中心化自治组织通过NFT拍卖机制实现社区治理。本文将为新测试开发工具nest-router被NestJS 8收入核心后如何迁移?内置RouterModule平滑过渡指南nest router被NestJS 8收入核心后如何迁移?内置RouterModule平滑过渡指南 NestJS 8 已把社区路由模块 nest router上一篇Slim-Rails实战教程从零构建响应式Rails应用视图层下一篇如何快速开发ca/card扩展创建自定义验证规则与错误提示的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

SUMO交通仿真入门:从零搭建交叉口仿真与TraCI控制
SUMO交通仿真入门:从零搭建交叉口仿真与TraCI控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 5:41:45

开源可审计的AI代码审查新范式:LLM嵌入Git流程实践
开源可审计的AI代码审查新范式:LLM嵌入Git流程实践

1. 项目概述:这不是一个“工具”,而是一套可落地的代码审查新范式“open-code-review”这个词乍看像某个开源项目名,但实际它代表的是一种正在快速成型的工程实践——用开源、透明、可审计的方式,把大语言模型(LLM&… · 2026/9/25 5:41:45

Windows 7 SP1 x64 ISO镜像深度解析与安全部署指南
Windows 7 SP1 x64 ISO镜像深度解析与安全部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 5:41:39

光储直柔系统:建筑能源革命的第四代解决方案
光储直柔系统:建筑能源革命的第四代解决方案

1. 光储直柔系统概述:建筑能源革命的第四代解决方案在深圳某科技园区,一座采用光储直柔系统的办公楼宇正悄然改变着传统建筑的供能模式。光伏幕墙在阳光下泛着蓝光,地下室的储能集装箱安静运转,直流供电的LED灯带发出均匀的光线—… · 2026/9/25 6:13:18

Vibe Coding:嵌入式协同开发的工程节奏革命
Vibe Coding:嵌入式协同开发的工程节奏革命

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:13:18

把MySQL电子书当工程做:从建库到主从复制的落地实操
把MySQL电子书当工程做:从建库到主从复制的落地实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:13:18

Zotero + WPS:参考文献一键插入与自动管理实战指南
Zotero + WPS:参考文献一键插入与自动管理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:13:18

Delphi 13 实战:TMS VCL UI Pack Full Source 编译与迁移指南
Delphi 13 实战:TMS VCL UI Pack Full Source 编译与迁移指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:13:12

08 - U-Boot 源码目录结构详解
08 - U-Boot 源码目录结构详解

文章目录 一、概述 二、形象比喻:国际化连锁酒店的部门分工 三、U-Boot 源码顶层全景 四、关键目录深度解析 4.1 `arch/arm/mach-rockchip/` -- Rockchip 平台核心 4.2 `board/rockchip/evb_rk3506/` -- 评估板代码 4.3 `drivers/` -- 驱动模型(DM) 4.4 `configs/` -- defco… · 2026/9/25 6:13:12

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码