Я пытаюсь получить перевод полей формы для работы. У меня есть message.en.yml в папке Ressource в Bundle.
test: it works form: description: Add a description.
Я хочу создать форму в EntityType
которая соответственно преобразует метки полей формы.
$builder->add( 'description', null, array('label' => 'form.description', 'required' => false) );
'form.description'
только буквальная строка '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 .
теперь для следующего элемента формы, который вы хотите, чтобы сделать описание переводимым.
$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>
надеюсь, это поможет кому-то