You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:43:26