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?
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
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:)
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.
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