问题:Symfony工具栏显示缺少的消息,而消息是......好,不会丢失。
似乎{{ form_label(...) }}
调用尝试双重翻译消息。例如:
我在app / Resources / translations / messages.en.yml中有以下内容:
...
entity:
recipe:
title: translated title
description: translated description
...
我在FormType(AppBundle)类中有以下内容:
$builder
->add('title', TextType::class, ['label' => 'entity.recipe.title'])
->add('description', TextareaType::class, ['label' => 'entity.recipe.description']);
并在app / Resources / views模板中:
<div class="title_row">
{{ form_label(form.title) }}
{{ form_widget(form.title, {
'attr': {
'class': 'supertitle',
'placeholder': 'entity.recipe.title'|trans
}})
}}
{{ form_errors(form.title) }}
</div>
<div class="description_row">
{{ form_label(form.description) }}
{{ form_errors(form.description) }}
{{ form_widget(form.description, {
'attr': {
'class': 'metro',
'placeholder': 'recipe.describe_your_recipe'|trans
}})
}}
</div>
在这种情况下,Symfony工具栏会显示translated title
和translated description
的2条消息。它不是抱怨消息密钥,而是关于已经翻译的消息。好像symfony试图翻译同一个消息两次。
如果我放弃form_label
,form_errors
和form_widget
并将其替换为单个form_row
,那么一切正常。
此外,php bin/console debug:trans
并未将这些消息显示为缺失。
我使用原始form_div_layout.html.twig
对此进行了测试,没有任何自定义设置,但仍显示这些错误。
在form_label块下的该文件中,我找到了:
<label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}</label>
这没什么特别的?
还试图在Type类中指定translation_domain,没有什么区别。
目前正在使用Symfony 3.0,虽然我认为我在2.8中看到了相同的错误。
有什么想法吗?
感谢 Karolis
答案 0 :(得分:1)
占位符和标题属性值会在widget_attributes
块内自动翻译:
{%- for attrname, attrvalue in attr -%}
{{- " " -}}
{%- if attrname in ['placeholder', 'title'] -%}
{{- attrname }}="{{ attrvalue|trans({}, translation_domain) }}"
{%- elseif attrvalue is sameas(true) -%}
{{- attrname }}="{{ attrname }}"
{%- elseif attrvalue is not sameas(false) -%}
{{- attrname }}="{{ attrvalue }}"
{%- endif -%}
{%- endfor -%}
您所要做的就是从标题和占位符值中删除多余的trans
过滤器,即:
{{ form_widget(form.title, {
'attr': {
'class': 'supertitle',
'placeholder': 'entity.recipe.title'
}})
}}