Symfony 6自定义表单:输入变量名转格式化占位符并实现翻译
解决方案
1. 修改Twig模板代码
将占位符部分的{{ name }}替换为格式化+翻译的组合过滤器,代码如下:
{% block text_widget %} <div class="input_placeholder" style="width: 244px; background-color: white;"> <div class="input_frame" style="width: 244px; background-color: white;"> <input type="text" class="input_field" id="{{ id }}" name="{{ full_name }}" placeholder="{{ name|humanize|trans({}, translation_domain|default('form')) }}"/> </div> </div> {% endblock %}
2. 代码说明
humanize过滤器:Symfony内置的Twig过滤器,自动将下划线分隔的变量名(如user_name)转换为空格分隔、首字母大写的友好格式(如User name),作为无翻译时的默认显示文本。trans过滤器:实现翻译功能,第二个参数translation_domain|default('form')表示优先使用表单字段定义时指定的翻译域,若未指定则默认使用form翻译域。
3. 配置翻译文件
在项目的translations目录下创建对应语言的翻译文件,例如中文翻译文件form.zh_CN.yaml,添加字段名与对应翻译的映射:
# translations/form.zh_CN.yaml user_name: "用户名" email: "邮箱" phone_number: "手机号码" # 其他需要翻译的字段名
4. 确认翻译组件配置
确保config/packages/translation.yaml中翻译组件已正确配置(默认情况下Symfony会自动配置,若有需要可调整):
framework: default_locale: zh_CN translator: default_path: '%kernel.project_dir%/translations' fallbacks: - en
这样配置后,当表单渲染时:
- 如果翻译文件中存在对应字段的翻译条目,占位符会显示翻译后的文本;
- 如果没有翻译条目,则自动显示
humanize处理后的友好格式文本。
内容的提问来源于stack exchange,提问作者Galuk
相关产品推荐
相关产品推荐

