Динамически переводить формы в зависимости от локальных

Итак, я делаю многоязычный сайт с использованием 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,
            ))
            /...
            ;

    }

}

Интересно, есть ли менее беспорядочное и лучшее решение для перевода сущности в формы

Вы пробовали Переводимый из DoctrineExtensions?

dbrumann 18.04.2018 13:50

я прочитаю документацию и дам вам ответ

LeavingTown 18.04.2018 15:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете использовать Symfony Form Events для динамического управления данными формы. Проверь это https://symfony.com/doc/2.8/form/dynamic_form_modification.html

Похоже, это именно то, что вам нужно. Вы можете передать языковой стандарт из вашего контроллера в свою форму (как вариант), а в классе формы добавить прослушиватель событий, прослушивающий событие (выберите тот, который лучше всего соответствует вашим потребностям, я предполагаю, что вам нужно событие PRE_SET_DATA - тот, который управляет данными из базы данных), и в соответствии с переданной опцией локали вы можете изменить нужные поля формы.

Ответ принят как подходящий

Итак, я прочитал Переводимый из DoctrineExtensions, который дал мне @dbrumann, и я использую его бок о бок с Комплект перевода сонаты на стороне администратора, и он работает нормально. если у кого-то есть вопросы по конфигурации, оставьте комментарий

Другие вопросы по теме