2016-08-24 1 views
9

Je rencontre un problème dans mon application de traduction Rails utilisant I18n. Je crée des phrases dynamiques dans des tableaux comme celui-ci [:this_is_a, 5, :which_is_a_number, "."] pour lequel je traduis chaque mot un par un. Lorsque je parcoure ceci et que je traduis I18n.t ("."), J'obtiens le tableau complet de toutes les traductions de mon application entière qui génère un texte de tableau de plus de 1000+. Cela semble également être vrai pour I18n.t ("%").I18N traduire "." ou "%" provoque un tableau complet de toutes les traductions

Y a-t-il un paramètre qui empêche cela de se produire? Ma seule solution de piratage pour le moment est de tout changer "." à "." mais j'espère qu'il y a une meilleure solution. Aucun conseil?

+0

Comment obtenez-vous ces jetons? Etes-vous en train d'analyser une phrase et de la rendre symbolique ou créez-vous ces groupes d'une autre manière? – Azolo

+0

Je ne suis pas sûr à 100% de ce que vous entendez par jetons mais supposons que vous voulez dire les éléments du tableau. Ceux-ci sont créés dynamiquement à la suite d'un calcul. Il pourrait s'agir de [: this_is_a, "A",: which_is_a_letter, "!"] Aussi. Ainsi, les traductions sont prédéfinies mais les chaînes sont utilisées différemment. Je ne souhaite pas mettre le "." à l'intérieur de la traduction pour cette raison, par exemple. – Christoffer

Répondre

4

"." est utilisé pour les clés de traduction. Si vous avez le fichier comme ceci:

module1: 
    key_a: "Module1 Translation A" 
    key_b: "Module1 Translation B" 
module2: 
    key_a: "Module2 Translation A" 

Ensuite, vous accéder à ceux qui « »

I18n.t("module1.key_a") 
I18n.t("module2.key_a") 

Si vous utilisez juste I18n.t(".") il donnera tout l'espace de noms de niveau supérieur. Vous pouvez modifier ce comportement en changeant le séparateur

I18n.t("[email protected]_a", separator: "@") 

Il suffit de choisir un personnage que vous savez ne pas apparaître comme jeton.

caractère "%" est utilisé pour l'interpolation:

module1: 
    name: "My name is %{name}" 

Et puis

I18n.t("module1.name", name: "John") 

Il ne semble pas que vous pouvez changer "%" à ​​autre chose parce qu'il est codé en dur. Mais il ne devrait pas retourner tout le tableau de la traduction. Il devrait juste retourner l'erreur "translation missing". Au moins c'est ce que j'ai sur ma version de I18n gem.

+0

Merci, votre solution semble fonctionner. En fin de compte, j'ai réalisé que j'étais en mesure de contourner cela d'une manière très spécialisée qui était hors de la portée de cette question. Pour répondre à ma question, votre réponse était correcte. – Christoffer