新闻详情

新闻详情

首页 / 资讯中心 / 详情

Twig script_names 函数详解:按语言环境获取书写系统名称列表

发布时间:2026/9/26 8:28:30来源:尧图网络
Twig script_names 函数详解:按语言环境获取书写系统名称列表
后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载script_names是 Twig 3.5 起在IntlExtension中提供的国际化函数用于一次性返回当前或指定语言环境下的全部书写系统script本地化名称映射。本指南完整覆盖该函数的调用语法、locale参数规则、安装注册方式并结合仓库源码与集成测试说明其返回值形态、异常兜底行为及典型实战用法读完即可在模板中直接落地使用。函数概览script_names返回一个以书写系统代码为键、以对应语言环境下的本地化名称为值的映射关联数组其核心用途是构建语言/文字相关的选择器、筛选器或展示列表。引入版本Twig 3.5所属扩展IntlExtensiontwig/intl-extra包并非 Twig 核心内置需单独安装底层实现基于 Symfony Intl 组件的Symfony\Component\Intl\Scripts::getNames()数据源为 ICUInternational Components for Unicode的脚本名称数据库{# 输出示例Adlam, Afaka, ... #} {{ script_names()|join(, ) }}基本用法使用当前语言环境默认行为不传任何参数时script_names使用当前语言环境即 PHP\Locale::getDefault()返回的默认 locale{# 按默认 locale 输出所有书写系统的本地化名称用逗号连接 #} {{ script_names()|join(, ) }}显式指定语言环境可以通过第一个参数显式传入 locale 代码覆盖默认语言环境{# 用法语 locale 输出结果如Adlam, Afaka, ... #} {{ script_names(fr)|join(, ) }}由于返回的是映射你还可以直接按下标取值{{ script_names()[Marc] }} {# Marchen #} {{ script_names(fr)[Marc] }} {# Marchen #}参数说明参数类型必填说明localestring否语言环境代码遵循 RFC 5646BCP 47规范例如fr、en_US、zh_CN。缺省时使用当前默认语言环境从源码看参数为可空类型对应 IntlExtension.php 中的方法签名public function getScriptNames(?string $locale null): array { try { return Scripts::getNames($locale); } catch (MissingResourceException $exception) { return []; } }关键行为有测试佐证见下节传入未知/无效 locale如UNKNOWN时Scripts::getNames()抛出MissingResourceException函数捕获异常并返回空数组正常 locale 下返回的数组包含200 余项覆盖 ICU 收录的全部书写系统代码键为 ISO 15924 脚本代码如Adlm、Afak、Marc值为该脚本在指定 locale 下的本地化名称同一个脚本代码在不同 locale 下可能得到相同或不同的本地化名称。安装与注册script_names位于IntlExtension中该扩展默认不随 Twig 核心安装需要按以下步骤启用。1. 安装扩展包$ composer require twig/intl-extra该包的依赖要求见 composer.jsonPHP8.1.0、twig/twig^3.13|^4.0、symfony/intl^5.4|^6.4|^7.0|^8.0。2a. Symfony 项目安装 extra-bundle在 Symfony 项目上再安装twig/extra-bundle扩展会自动注册$ composer require twig/extra-bundlebundle 的依赖注入配置extra/twig-extra-bundle/Resources/config/intl.php会把IntlExtension注册为twig.extension.intl服务并打上twig.extension标签从而被 Twig 自动加载。2b. 其他项目手动添加扩展不使用 Symfony 时直接在 Twig 环境上显式注册扩展use Twig\Extra\Intl\IntlExtension; $twig new \Twig\Environment(...); $twig-addExtension(new IntlExtension());源码实现与返回形态script_names在IntlExtension::getFunctions()中被注册IntlExtension.phpnew TwigFunction(script_names, [$this, getScriptNames]),同一扩展还注册了language_names、country_names、locale_names、currency_names、timezone_names、country_timezones等一组国际化名称函数它们共享相同的“*::getNames($locale) 异常兜底返回空数组”实现模式。值得注意的实现细节异常兜底所有名称类函数都捕获Symfony\Component\Intl\Exception\MissingResourceException。这意味着 locale 资源缺失或无效时不会抛出RuntimeError而是静默返回空数组便于模板安全降级例如{{ script_names(UNKNOWN)|length }}得到0纯数据函数该函数不依赖Environment只做本地化数据查询无副作用可在模板任意位置多次调用。测试验证仓库中的集成测试用例 extra/intl-extra/Tests/Fixtures/script_names.test 对该函数的行为做了直接验证{{ script_names(UNKNOWN)|length }} {{ script_names()|length 200 ? more than 200 : less than 200 }} {{ script_names(fr)|length 200 ? more than 200 : less than 200 }} {{ script_names()[Marc] }} {{ script_names(fr)[Marc] }}对应期望输出0 more than 200 more than 200 Marchen Marchen这组断言从测试层面确认了四个事实无效 locale 返回空数组默认 locale 与frlocale 的条目数都超过 200返回的是可用脚本代码直接取值的关联数组Marc玛尔辰文在不同 locale 下的名称一致。典型应用场景与最佳实践script_names适用于需要按书写系统组织内容的场景例如文字筛选下拉框配合for循环渲染脚本选项以 ISO 15924 代码作值、本地化名称为显示文本select namescript {% for code, name in script_names() %} option value{{ code }}{{ name }}/option {% endfor %} /select多语言站点展示传入当前请求的 locale让脚本名称随界面语言切换{{ script_names(app.request.locale)|join(、) }}降级处理由于无效 locale 返回空数组可在渲染前用length判断是否为空避免输出空列表{% if script_names(locale)|length 0 %} {{ script_names(locale)|join(, ) }} {% endif %}注意事项函数的输出受 PHP 进程默认 locale\Locale::getDefault()影响不同环境下默认值可能不同需要稳定输出时应始终显式传参返回条目数量较大200 余项直接join输出会得到很长的字符串通常应配合slice、batch或条件过滤使用或仅用于渲染下拉选项该函数仅返回脚本名称数据不包含每个脚本是否被当前页面使用等业务信息结合业务数据过滤应在模板调用处完成。小结script_names是 Twig 3.5 之后处理书写系统本地化命名的最直接手段一条表达式即可拿到完整的脚本代码到本地化名称的映射且对无效 locale 有优雅的空数组兜底。使用时记得先通过composer require twig/intl-extra安装扩展并在 Symfony通过 extra-bundle 自动注册或手动addExtension两种方式中选择其一启用。赞分享后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载相关推荐Twig locale_names 函数详解按当前语言环境批量获取全部区域名称IntlExtensionTwig locale_names 函数详解按当前语言环境批量获取全部区域名称IntlExtension locale_names 是 Twig 自 3.后端Twig country_names 函数详解按 locale 批量获取本地化国家名称列表Twig country_names 函数详解按 locale 批量获取本地化国家名称列表 country_names 是 Twig 3.5 起由 IntlE后端如何为 marimo 添加一条新的 lint 规则如何为 marimo 添加一条新的 lint 规则 marimo 内置了一个 linter用来在 notebook 运行之前发现会导致执行失败或产生混淆的问后端上一篇Audacity 免费音频编辑4 个场景快速上手指南下一篇微信小程序逆向工程深度解析unveilr架构原理与实战应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

open-code-review:用数据驱动的开放式代码评审实践 2026/9/26 9:15:21

open-code-review:用数据驱动的开放式代码评审实践

前阵子线上出了个事故,追根溯源,问题代码在合并之前其实走过一遍评审,甚至还有两个 Approve。可评审记录里只留下了两句“LGTM”和一个表情包。这不是个例——我在好几支团队里见过同样的状态:评审流于形式、通过率高得吓人、评审…

阅读更多 →
如何设计 Agent 的 Harness:从架构到代码实战(TaoToken 配置骨架版) 2026/9/26 9:15:21

如何设计 Agent 的 Harness:从架构到代码实战(TaoToken 配置骨架版)

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

阅读更多 →
蓝牙定位方案选型指南:RSSI、AoA RTLS与Channel Sounding工程实践 2026/9/26 9:15:21

蓝牙定位方案选型指南:RSSI、AoA RTLS与Channel Sounding工程实践

1. 蓝牙定位方案的整体设计思路与选型逻辑 蓝牙定位这件事,表面上看是“信号强度换算距离”或者“天线阵列测角度”的数学问题,但真正落到工程现场,第一道坎其实是方案选型。我做过几个不同规模的室内定位项目,从几十个标签的小型…

阅读更多 →
RAG多Embedding模型实战:从单模型翻车到多路召回融合 2026/9/26 9:15:21

RAG多Embedding模型实战:从单模型翻车到多路召回融合

1. 单Embedding模型的效果天花板:问题先从一次召回翻车说起我做RAG项目踩过一个特别典型的坑。当时业务方要做一个企业内部知识库问答,文档类型很杂——有技术规范、有行政制度、还有销售话术。我图省事,全库统一用了一个通用Embedding模型做…

阅读更多 →
金融聚合平台实战:账户接入、净值计算与消费分析 2026/9/26 9:15:15

金融聚合平台实战:账户接入、净值计算与消费分析

我最近把一个personal finance聚合管理类项目完整地落地了,核心方向正好落在financial-services这个大类里,所以想把这套从思路到实现的东西整理出来。做这类项目最容易被卡住的不是功能开发,而是金融数据怎么接、账怎么算对、异常情况怎么兜…

阅读更多 →
Claude Code 为什么这么好用:用 TaoToken 统一 Key 复刻 Agent 工具调用魔法 2026/9/26 9:15:15

Claude Code 为什么这么好用:用 TaoToken 统一 Key 复刻 Agent 工具调用魔法

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉