RubyOnRails I18n.t traductions et paramètres

I18n.t et paramètres

Voici la syntaxe pour envoyer des paramètres à une chaine traduite : ci-dessous 'username' dépend de la personne connectée mais la chaine de bienvenue est commune à tout le monde donc on injecte le nom dans la chaine traduite :

<%= t('welcome_html', 'Bonjour %{username}', username: 'Sylvain') %>

Cas concret plus compliqué

I18n.t avec plusieurs zones encapsulées : Il se peut que vous vous trouviez dans ce cas de figure : Vous avez une phrase avec un mot mis en évidence avec de l’html :

<p>Vous ne devez pas écrire votre <strong>mot de passe</strong> sur un post'it</p>
<p>Du musst dein <strong>Passwort</strong> nicht auf ein Post'it schreiben</p>
Dans ce cas précis, vous pouvez faire 3 chaines de traduction :
<p><%= I18n.t('phrase-part-1', default: 'Vous ne devez pas écrire votre') %> <strong><%= I18n.t('phrase-mot-de-passe', default: 'mot de passe') %></strong><%= I18n.t('phrase-part-2', default: 'sur un post\'it') %></p>
Mais c’est problèmatique :
- Parce que vous traduisez des morceaux de phrase (comme du mot à mot)
- Parce qu’en allemand par exemple un mot de la partie gauche va se retrouver à droite (écrire => schreiben).
Il convient plutôt d’utiliser les variables de traduction et d’injecter une traduction dans la variable de traduction :
<p><%= I18n.t('phrase', default: 'Vous ne devez pas écrire votre %{password} sur un post\'it',  password: "<strong>#{I18n.t('mot de passe', default: 'mot de passe')}</strong>") %></p>

J'espère que ça vous servira ;)