Comment traduire des étiquettes dans des formes symfony2 avec des messages.fr.yml?

j'essaie de faire fonctionner la traduction des champs de formulaires. J'ai messages.en.yml dans le dossier Ressource de mon paquet.

test: it works
form:
    description: Add a description.

je veux créer un formulaire dans un EntityType qui traduit les étiquettes des champs de la forme en conséquence.

$builder->add(
    'description',
    null,
    array('label' => 'form.description', 'required' => false)
);

pourtant seulement la chaîne littérale 'form.description' on montre, non traduction de Add a description.

le service de traduction et le messages.en.yml sont chargés correctement car je peux appeler

var_dump($this->get('translator')->trans('test'));

dans un controller et obtenir le résultat traduit.

Ce qui me manque quand je veux traiter la chaîne 'form.description' comme quelque chose qui devrait être traduit?

je suppose que je dois appeler la fonction trans sur eux de toute façon, mais comment puis-je faire en une seule fois automatiquement?

23
demandé sur k0pernikus 2014-01-20 18:32:42

4 réponses

j'ai dû définir explicitement le domaine de traduction

->add('description','hidden',
 array(
   "label"=>"form.description",
   "required"=>true,
   'translation_domain' => 'fooo'
 )
);

en cas de

fooo.de.xlf
34
répondu john Smith 2016-02-22 17:49:33

dans symfony 3.1 Vous n'avez pas besoin de passer translator pour former type constructor. Il sera traduit automatiquement par nom de champ comme ceci:

Action du contrôleur:

$form = $this->createForm(LoginType::class);

Classe FormType:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('username',
            TextType::class, ['label_format' => '%name%',]
        );
}

Et vos fichiers de traduction (yml):

username: Your translation for username field

j'Espère que ça aidera quelqu'un:)

6
répondu Michał Zwierzyński 2016-10-22 07:13:23

ajouter la traduction dans la forme pour est la meilleure idée-parce que trouvé si dans la brindille beaucoup plus facile

{% trans_default_domain 'YourNameBundle' %}

{{'shot.tag.for.transle'|trans }}

vous devez aussi vous souvenir du fichier de traduction dans votre paquet, si vous prolongez faisceau d'un autre (exemple-vous prolongez FosUserBundle) vous pouvez prendre translate de ce paquet ou utiliser func trans avec params

{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}

Avoir une belle localisation.

4
répondu Moris Finkel 2015-06-24 22:01:52

disons que vous voulez traduire en français. Ensuite, vous avez nom du fichier.fr.xlf et Nom du fichier.fr.xlf.

maintenant pour l'élément de formulaire suivant que vous voulez faire description traduisible.

$builder->add(
    'description',
    null,
    array('label' => 'form.description', 'required' => false)
);

dans le nom du fichier.fr.xlf

<trans-unit id="17">
    <source>description</source>
    <target>description</target>
</trans-unit>

et pour le français, donc dans le Nom du fichier.fr.xlf comme ci-dessous

<trans-unit id="17">
    <source>description</source>
    <target>fr descrip</target>
</trans-unit>

espérons que cela aidera quelqu'un

1
répondu mapmalith 2016-10-11 09:58:58