在Symfony2表单输入中设置带翻译的占位符属性
我使用FOSUserBundle管理我的用户。为了注册用户,我重新使用了满足我需要的包的形式。然而,我需要设置字段的一些属性。这是用树枝很容易做到的,就像这样:在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(
{{ 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,如下所示