在Symfony2表单输入中设置带翻译的占位符属性

在Symfony2表单输入中设置带翻译的占位符属性,symfony,twig,symfony-forms,fosuserbundle,Symfony,Twig,Symfony Forms,Fosuserbundle,我使用FOSUserBundle管理我的用户。为了注册用户,我重新使用了满足我需要的包的形式。然而,我需要设置字段的一些属性。这是用树枝很容易做到的,就像这样: {{ form_widget(form.username, { 'attr': {'class': "span12", 'placeholder': "Username"} }) }} $builder ->add('information', 'textarea', array(

我使用FOSUserBundle管理我的用户。为了注册用户,我重新使用了满足我需要的包的形式。然而,我需要设置字段的一些属性。这是用树枝很容易做到的,就像这样:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}
    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));
{'attr':{'placeholder': "Text to translate"}}
现在,我的目标是对占位符进行自动翻译,因此我提出了以下代码:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "{{'security.login.usernameplaceholder'|trans}}"} }) }}
前面的代码生成了一个占位符值等于{{security.login.usernamepholder'|trans}}

为了解决这个问题,我尝试设置变量,但是symfony产生了一个错误

    {% set usernameplaceholder = {{'security.login.usernameplaceholder'|trans}} %}
    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': usernameplaceholder} }) }}
有什么建议可以解决这个问题吗


谢谢,

在Twig中,你不应该把
{{{
放在
{{{
中(与
{%
相同);把它当作php标签

以下几点应该有效

{% set usernameplaceholder = 'security.login.usernameplaceholder'|trans %}
{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': usernameplaceholder} }) }}


您还可以将其添加到表单定义中,如下所示:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}
    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));
{'attr':{'placeholder': "Text to translate"}}
对于Symfony 3.x和4.x 另一种添加占位符(或任何属性)的方法是将一个选项数组传递到包含另一个数组
attr
的表单
$builder
,属性为键值对

// The parameters are column name, form-type and options-array respectively.
$builder->add('field', null, array(
            'attr' => array(
                 'placeholder' => 'support.contact.titleplaceholder'
             )
        ));

您也可以在twig中以这种方式进行翻译(使用symfony4): 在表格占位符中,它的书写方式如下:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}
    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));
{'attr':{'placeholder': "Text to translate"}}
对于html中的占位符,您可以这样翻译:

<input placeholder="{{"Text to translate"|trans }}">

如果要在中(而不是在模板中)设置占位符,必须在
attr
选项中设置占位符。例如:

->add('search', TextType::class, ['attr' => ['placeholder' => 'form.custom.placeholder']])
要在后台翻译占位符,必须。 在本例中,我们只希望在表单类型中显式设置时触发自动翻译。这就是我们实现自动翻译的方式:

{% block form_widget_simple -%}
    ....
    {% if attr.placeholder|default and translation_domain|default %}
        {%- set attr = attr|merge({placeholder: (attr.placeholder|trans({}, translation_domain))|trim}) -%}
    {% endif %}
    ....
{{- parent() -}}
{%- endblock form_widget_simple %}
如果您希望始终触发自动翻译。这应该可以:

{% block form_widget_simple -%}
    ....
    {%- set attr = attr|merge({placeholder: (attr.placeholder|default|trans({}, translation_domain))|trim}) -%}
    ....
{{- parent() -}}
{%- endblock form_widget_simple %}

占位符应该在“attr”中,比如:“label'=>false,'attr'=>array('placeholder'=>'support.contact.titleplaceholder'..我在Symfony 3.4中做了一点测试,它似乎不会被自动翻译。关于如何使用这种方法获得翻译,有什么建议吗?我也很想知道,是否会自动翻译您可以添加另一个属性
'translation\u domain'=>'fooo“
其中fooo指的是您的翻译文件fooo.de.xlf,如下所示