Переведите выбранные опции в формы классов Symfony2 - PullRequest
29 голосов
/ 31 мая 2011

Я использую форму класса в 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')));
        ...

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

Ответы [ 4 ]

86 голосов
/ 04 января 2013

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

    $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'
    ));

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

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

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

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

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

4 голосов
/ 18 августа 2011

Я некоторое время искал ответ, но в конце концов выяснил, как Symfony переводит содержимое форм.В вашем случае проще всего добавить перевод «да» и «нет», добавив файл перевода YAML или XLIFF в ваше приложение (например, app / 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

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

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

3 голосов
/ 31 июля 2015

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

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

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

0 голосов
/ 08 сентября 2015

Ответ 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',
        ]
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...