web-dev-qa-db-fra.com

Comment traduire des étiquettes dans des formulaires symfony2 avec messages.en.yml?

J'essaie de faire fonctionner la traduction des champs de formulaire. J'ai messages.en.yml Dans le dossier Ressource de mon bundle.

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

Je veux construire un formulaire dans un EntityType qui traduit les étiquettes des champs du formulaire en conséquence.

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

Pourtant, seule la chaîne littérale 'form.description' Est affichée, pas la traduction attendue 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 contrôleur et obtenir le résultat traduit.

Que manque-t-il lorsque je veux traiter la chaîne 'form.description' Comme quelque chose qui doit être traduit?

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

25
k0pernikus

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

par exemple

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

en cas de

fooo.de.xlf
38
john Smith

Dans symfony 3.1, vous n'avez pas besoin de passer le traducteur au constructeur de type de formulaire. Il sera traduit automatiquement par nom de champ de formulaire 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 votre fichier de traductions (yml):

username: Your translation for username field

J'espère que cela aidera quelqu'un :)

6

Ajouter la traduction dans le formulaire pour est la meilleure idée - car trouvé si dans twig beaucoup plus facile

{% trans_default_domain 'YourNameBundle' %}

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

vous devez également vous rappeler du fichier de traduction dans votre bundle, si vous étendez le bundle à partir d'un autre (exemple - vous étend FosUserBundle), vous pouvez prendre la traduction de ce bundle ou utiliser func trans avec params

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

Avoir une bonne localisation.

4
Moris Finkel

Disons que vous voulez traduire en français. Ensuite, vous avez filename.fr.xlf et filename.fr.xlf.

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

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

donc dans le filename.en.xlf

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

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

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

j'espère que cela aidera quelqu'un

1
mapmalith