veilletech.fr
10 nov. Feed du jour
#08 SYMFONY Article

Symfony 8.2 : extraire plus de messages à traduire

Les messages que votre extracteur ne voyait pas, il les voit.

Symfony 8.2 améliore la chaîne de traduction. translation:extract résout désormais ternaires, match, chaînes interpolées, variables et méthodes, et lit les libellés des formulaires Twig. Les fichiers XLIFF gardent leur élément source, Twig gagne un domaine par défaut pour tout le fichier, et le group_by de ChoiceType accepte des objets traduisibles.

3 min de lectureintermédiairevidéo 1:23
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. L'extracteur voit enfin plus de messages
  3. Les autres changements
  4. Comment s'y prendre
  5. À retenir

Ce qui se passe

La série « New in Symfony 8.2 » consacre un billet au composant Translation et à son intégration avec Twig et les formulaires. Le point central touche translation:extract.

L'extracteur voit enfin plus de messages

Jusqu'ici, la commande ne trouvait que les messages passés à trans(), t() ou new TranslatableMessage() sous forme de chaînes littérales, de concaténations de littéraux ou de constantes de classe. Tout autre cas échappait au catalogue, et la traduction manquante se découvrait en production. En 8.2, l'extracteur résout aussi :

Contribution de Guillaume Sainthillier. Côté Twig, il trouve aussi les messages passés à form_label(), form_widget(), form_help() et form_row(), dans le domaine de la variable translation_domain, à défaut dans le domaine par défaut. Le tag trans_default_domain est ignoré exprès, car les thèmes de formulaire ne s'en servent pas pour traduire libellés et aides (Nicolas Grekas).

Les autres changements

Comment s'y prendre

  1. En passant à 8.2, relancez translation:extract et comparez le catalogue : de nouveaux messages vont apparaître.
  2. Si votre thème de formulaire surcharge le bloc choice_widget_options, lisez le libellé du groupe dans choice.label, avec la clé de boucle en repli : la clé du tableau n'en est plus le libellé dès qu'on utilise des objets traduisibles.
  3. Ajoutez for _self aux gabarits qui utilisent des embed, au lieu de répéter le domaine dans chaque corps.

Source : blog Symfony, en anglais.