Il est en fait une alternative à la lourdeur de l'i18n approche. La solution est appelée Tr8n.
Votre code ci-dessus serait tout simplement:
<%= tr("You have {num || kid}", num: 1) %>
C'est tout. Pas besoin d'extraire vos clés à partir de votre code et de les maintenir en ressources, pas besoin de mettre en œuvre la pluralisation des règles pour chaque langue. Tr8n vient avec le contexte numérique des règles pour toutes les langues. Il est également livré avec le genre de règles, les règles de liste et de la langue des cas.
La définition complète de la traduction ci-dessus clé serait effectivement ressembler à ceci:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Mais depuis que nous voulons économiser de l'espace et du temps, num est automatiquement adressé numériques règles et il n'est pas nécessaire de fournir toutes les options pour les valeurs de la règle. Tr8n est livré avec pluralizers et inflectors qui va faire le travail pour vous à la volée.
La traduction de votre clé en russe, serait tout simplement:
"У вас есть {num || ребенок, ребенка, детей}"
Par ailleurs, votre traduction serait inexact dans les langues qui ont le sexe des règles spécifiques.
Par exemple, en hébreu, vous auriez fait devez spécifier au moins 2 traductions pour ton exemple, comme "Vous" serait différent en fonction du sexe de l'affichage de l'utilisateur. Tr8n le gère très bien. Voici une translittération de l'hébreu traductions:
"Yesh leha yeled ahad" with {context: {viewing_user: male, num: one}}
"Yesh leha {num} yeladim" with {context: {viewing_user: male, num: other}}
"Yesh lah yeled ahad" with {context: {viewing_user: female, num: one}}
"Yesh lah {num} yeladim" with {context: {viewing_user: female, num: other}}
Si votre seul anglais de la clé, dans ce cas, les besoins 4 traductions. Toutes les traductions sont effectuées dans un contexte d' - vous n'avez pas à casser la phrase. Tr8n a un mécanisme à la carte l'une des clés de multiples traductions basées sur la langue et le contexte - tout se fait à la volée.
Une dernière chose. Que faire si vous aviez à faire le décompte de la partie en gras? Il serait tout simplement:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
Juste au cas où vous voulez redéfinir votre "bold" plus tard, il serait très facile - vous n'avez pas à aller à travers tous vos fichiers YAML et de le modifier, - vous venez de le faire en un seul endroit.
Pour en savoir plus, veuillez jeter un oeil ici:
https://github.com/tr8n/tr8n_rails_clientsdk
Divulgation: je suis le développeur et le responsable de Tr8n cadre et l'ensemble de ses bibliothèques.