多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

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

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),仅供参考
返回列表