Ответ 1
Мне пришлось явно установить область трансляции
например
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
в случае
fooo.de.xlf
Я пытаюсь получить перевод полей формы для работы. У меня есть messages.en.yml
в папке Bundle Ressource.
test: it works
form:
description: Add a description.
Я хочу создать форму в EntityType
, которая соответственно преобразует метки полей формы.
$builder->add(
'description',
null,
array('label' => 'form.description', 'required' => false)
);
Пока отображается только буквальная строка 'form.description'
, а не ожидаемый перевод Add a description.
Служба перевода и messages.en.yml
загружаются правильно, так как я могу позвонить
var_dump($this->get('translator')->trans('test'));
в контроллере и получить переведенный результат.
Что мне не хватает, когда я хочу обработать строку 'form.description'
как что-то, что нужно перевести?
Я полагаю, что я должен называть функцию trans на них так или иначе, но как я могу сделать это за один раз автоматически?
Мне пришлось явно установить область трансляции
например
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
в случае
fooo.de.xlf
В symfony 3.1 Вам не нужно передавать переводчик в конструктор типа формы. Он будет автоматически преобразован с именем поля формы следующим образом:
Действие контроллера:
$form = $this->createForm(LoginType::class);
Класс FormType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username',
TextType::class, ['label_format' => '%name%',]
);
}
И ваш файл переводов (yml):
username: Your translation for username field
Надеюсь, это поможет кому-то:)
Добавить перевод в форму для лучшей идеи - потому что нашел, если в twig гораздо проще
{% trans_default_domain 'YourNameBundle' %}
{{'shot.tag.for.transle'|trans }}
также вы должны помнить о файле перевода в своем комплекте, если вы расширяете пакет из другого (пример - вы расширяете FosUserBundle) вы можете взять перевод из этого пакета или использовать func trans с параметрами
{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}
Хорошая локализация.
Скажем, вы хотите перевести на французский язык. Затем у вас есть filename.en.xlf и filename.fr.xlf.
теперь для следующего элемента формы, который вы хотите сделать description переводимым.
$builder->add(
'description',
null,
array('label' => 'form.description', 'required' => false)
);
поэтому в filename.en.xlf
<trans-unit id="17">
<source>description</source>
<target>description</target>
</trans-unit>
и для французского, поэтому в filename.fr.xlf, как показано ниже
<trans-unit id="17">
<source>description</source>
<target>fr descrip</target>
</trans-unit>
надеюсь, что это поможет кому-то