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>
<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>
- 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 ;)