Symfony 4 表单字段定义的placeholder翻译值未生效问题
Symfony 4 表单placeholder翻译不生效解决方案
问题根因
Symfony 表单组件默认仅对label、help等顶层字段选项自动执行翻译,直接写在attr数组下的placeholder属性不会触发自动翻译逻辑,因此直接填写翻译key只会原样输出字符串,无法读取翻译文件中的对应值。
可用解决方案
方案1:表单类中注入翻译器手动转译
在表单类中注入TranslatorInterface,定义placeholder属性时直接调用翻译方法即可,适合仅少量字段需要配置翻译placeholder的场景:
use Symfony\Contracts\Translation\TranslatorInterface; // 表单类内代码 private $translator; public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } // 字段定义部分修改为 $builder ->add('phonenumber', TextType::class, [ 'label' => false, 'required' => true, 'constraints' => [ new NotBlank(), ], 'attr' => [ 'placeholder' => $this->translator->trans('change.lead_form.placeholders.phonenumber', [], 'admin') ] ])
方案2:自定义表单主题实现全局自动翻译
如果项目中大量字段需要配置翻译placeholder,可以通过自定义表单主题的方式,让所有attr下的placeholder自动触发翻译,无需修改原有表单定义代码:
你已经在模板中声明了表单主题为当前文件,只需在Twig模板中添加如下块定义即可:
{% block form_widget_simple %} {% if attr.placeholder is defined %} {% set attr = attr|merge({placeholder: attr.placeholder|trans({}, translation_domain)}) %} {% endif %} {{ parent() }} {% endblock %}
配置完成后,原有表单定义中直接写翻译key的代码无需修改,placeholder会自动使用你配置的translation_domain完成翻译。
内容的提问来源于stack exchange,提问作者crmpicco
相关产品推荐
相关产品推荐

