Итак, я делаю многоязычный сайт с использованием Symfony 2.8, но у меня возникла эта проблема при переводе форм, мне удалось изменить метки с помощью параметра translation_domain, как в этом примере:
->add('save','submit',
array('label'=>'btn.send',
'translation_domain' => 'FrontBundle',
'attr'=>array(
'class'=>'btn btn-blue',
)))
но у меня возникла проблема при переводе типа сущности, потому что имена берутся из базы данных, поэтому я добавил поля для другого языка как это:
name_fr ,name_en , name_es ,...
Проблема заключалась в том, как использовать их с формой, после нескольких часов поиска в Google я нашел это решение, хотя оно мне не понравилось.
используя документация, я передал _local из запроса в свою форму следующим образом:
contactController:
public function contactAction(Request $request)
{
$contact = new contact();
$contact->setSendTime(new \DateTime('now'));
$form = $this->createForm(new contactType(), $contact,array('lang'=>$request->getLocale()));
//...
}
Тип контакта:
class TaskType extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
// ...
$resolver->setRequired('lang');
}
//...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$local = $options['lang'];
// ...
$builder
->add('civility', 'entity', array(
'class'=>'BackBundle\Entity\civility',
//use this
'property' => $local == 'fr'?'name_fr':'name_en',
//or this or dont use them both
//'choice_label' => 'name',
'label'=>'Civilité:',
'expanded'=>true,
))
/...
;
}
}
Интересно, есть ли менее беспорядочное и лучшее решение для перевода сущности в формы
я прочитаю документацию и дам вам ответ






вы можете использовать Symfony Form Events для динамического управления данными формы. Проверь это https://symfony.com/doc/2.8/form/dynamic_form_modification.html
Похоже, это именно то, что вам нужно. Вы можете передать языковой стандарт из вашего контроллера в свою форму (как вариант), а в классе формы добавить прослушиватель событий, прослушивающий событие (выберите тот, который лучше всего соответствует вашим потребностям, я предполагаю, что вам нужно событие PRE_SET_DATA - тот, который управляет данными из базы данных), и в соответствии с переданной опцией локали вы можете изменить нужные поля формы.
Итак, я прочитал Переводимый из DoctrineExtensions, который дал мне @dbrumann, и я использую его бок о бок с Комплект перевода сонаты на стороне администратора, и он работает нормально. если у кого-то есть вопросы по конфигурации, оставьте комментарий
Вы пробовали Переводимый из DoctrineExtensions?