Подтвердить что ты не робот

Как перевести метки в symfony2 с помощью messages.en.yml?

Я пытаюсь получить перевод полей формы для работы. У меня есть 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 на них так или иначе, но как я могу сделать это за один раз автоматически?

4b9b3361

Ответ 1

Мне пришлось явно установить область трансляции

например

->add('description','hidden',
 array(
   "label"=>"form.description",
   "required"=>true,
   'translation_domain' => 'fooo'
 )
);

в случае

fooo.de.xlf

Ответ 2

В 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

Надеюсь, это поможет кому-то:)

Ответ 3

Добавить перевод в форму для лучшей идеи - потому что нашел, если в twig гораздо проще

{% trans_default_domain 'YourNameBundle' %}

{{'shot.tag.for.transle'|trans }}

также вы должны помнить о файле перевода в своем комплекте, если вы расширяете пакет из другого (пример - вы расширяете FosUserBundle) вы можете взять перевод из этого пакета или использовать func trans с параметрами

{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}

Хорошая локализация.

Ответ 4

Скажем, вы хотите перевести на французский язык. Затем у вас есть 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>

надеюсь, что это поможет кому-то