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

Перевести варианты выбора в формах классов Symfony2

Я использую класс в Symfony2 Beta3 следующим образом:

namespace Partners\FrontendBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ConfigForm extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('no_containers', 'choice', array('choices' => array(1 => 'yes', 0 => 'no')));
        ...

Я хочу перевести опции "да" и "нет", но я не знаю, как использовать переводчик здесь.

4b9b3361

Ответ 1

Вы можете использовать ресурсы перевода, как обычно. Это сработало для меня:

    $builder->add('sex', 'choice', array( 
        'choices'   => array(
            1 => 'profile.show.sex.male', 
            2 => 'profile.show.sex.female',
        ),
        'required' => false,
        'label'     => 'profile.show.sex.label',
        'translation_domain' => 'AcmeUserBundle'
    ));

И затем добавьте свои переводы в каталог Resources- > translations вашего Bundle.

Обновление с @CptSadface:

В symfony 2.7, используя аргумент choice_label, вы можете указать домен перевода следующим образом:

'choice_label' => 'typeName',
'choice_translation_domain' => 'messages',

Без указания домена параметры не переводятся.

Ответ 2

Я искал какое-то время, чтобы найти ответ, но, наконец, я узнал, как Symfony переводит контент формы. Самый простой способ в вашем случае - просто добавить перевод для "да" и "нет", добавив в приложение файл перевода YAML или XLIFF (например, приложение /Resources/translations/messages.de.yml) или ваш пакет, Это описано здесь: http://symfony.com/doc/current/book/translation.html

Проблема - по-моему, заключается в том, что вы, похоже, не можете использовать собственные ключи перевода. Ребята из FOSUserBundle решают эту (или аналогичную) проблему с помощью "Темы форм" (http://symfony.com/doc/2.0/cookbook/form/form_customization.html). Вот две важные строки кода для достижения использования идентификатора элемента формы в качестве ключа трансляции:

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Registration/register_content.html.twig#L1/https://github.com/FriendsOfSymfony/FOSUserBundle/blob/50ab4d8fdfd324c1e722cb982e685abdc111be0b/Resources/views/form.html.twig#L4 p >

Добавив тему формы, вы можете в значительной степени модифицировать все формы в шаблонах - это, кажется, правильный способ сделать это.

(Извините, мне пришлось разделить две ссылки b/c. У меня недостаточно репутации, чтобы опубликовать более двух ссылок. Печально.)

Ответ 3

В symfony 2.7, используя аргумент choice_label, вы можете указать домен перевода следующим образом:

'choice_label' => 'typeName',
'choice_translation_domain' => 'messages',

Без указания домена параметры не переводятся.

Ответ 4

Ответ CptSadface был тем, что помогло мне перевести мои сущности.

$builder
    ->add(
        'authorizationRoles',
        null,
        [
            'label' => 'app.user.fields.authorization_roles',
            'multiple' => true,
            'choice_label' => 'name', // entity field storing your translation key
            'choice_translation_domain' => 'messages',
        ]
    );