не работает тип translation_domain формы symfony?

#forms #symfony #dns #translation

#формы #symfony #dns #перевод

Вопрос:

у меня есть тип формы, например:

 public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', null, [
            'translation_domain' => 'Admin.Global',
        ])
        ->add('isoCode', null, [
            'translation_domain' => 'Admin.Global',
        ])
        ->add('languageCode')
        ->add('flag_image', FileType::class, [
            'mapped' => false,
            'label' => 'flag',
            'constraints' => [
                new Image([
                    'maxSize' => '1024K'
                ])
            ],
            'required' => false,
            'translation_domain' => 'Admin.Global',
        ])
        ->add('active', CheckboxType::class, [
            'label_attr' => [
                'class' => 'switch-custom'
            ]
        ])
        ->add('isDefault', CheckboxType::class, [
            'label_attr' => [
                'class' => 'switch-custom'
            ]
        ]);
}
 

после того, как я выполню команду:

 php bin/console translation:update --force en(or zh_CN)
 

только метка ‘name’ в Admin.Глобальный международный-icu.ru(или zh_CN).xlf файл

почему изокод и флаг не в файле xlf? и мне добавить ‘translation_domain’ => ‘Admin.Глобальный’, для каждого formtype?

Комментарии:

1. Попробуйте изменить name поле в этой форме на ключ, который больше нигде не встречается в вашем проекте. Например, используйте name123 вместо name . Запустите команду еще раз и посмотрите, попадает ли name123 ключ в файл xlf. Я почти уверен, что он туда не попадет.

2. @xtx я меняю его на name123 или добавляю ‘label’ => ‘name1234’, тоже не работает

Ответ №1:

Проблема в том, что translation:update команда, согласно документам, извлекает строки для перевода только из 2 местоположений:

  • шаблоны
  • любой PHP-файл / класс, который вводит или автоматически подключает службу translator и вызывает метод trans() .

Ваш класс типа формы не является ни одним из этих двух, поэтому он не обрабатывается.

Вы упомянули, что метка имени попадает в xlf-файл, в то время как другие метки этого не делают. Очевидно, что имя попало туда из какого-то другого места (например, из шаблона), а не из класса form.

Для обработки классов типов форм вы можете установить JMSTranslationBundle. Он предоставляет другую команду, translation:extract , которая, помимо прочего, поддерживает извлечение сообщений из (цитата из документов):

все метки формы, которые определены как опции для метода -> add() FormBuilder