2016-11-25 1 views
0

J'ai une situation, il y a plusieurs types de reçus dans mon projet. Je les stocke au integer.Rails i18n use array

Dans le fichier i18n, je déclare la traduction de cette manière.

hash[:"Receipt"] = { 
    :"receipt_choice1"   => "Rc1", 
    :"choise_detail2"    => "Rc_datail1", 
    :"receipt_choice2"   => "Rc2", 
    :"choise_detail2"    => "Rc_datail2", 
    :"receipt_choice2"   => "Rc3", 
    :"choise_detail2"    => "Rc_datail3", 
    } 

Cependant, ce n'est pas pratique pour moi. En vue, j'ai besoin d'écrire la syntaxe if, else pour choisir quel terme j'ai besoin. Comme ça.

<% if receipt.type == 1 %> 
    <p> <%= t(:"receipt.Receipt.receipt_choice1") </p> 
    <p> <%= t(:"receipt.Receipt.choise_detail2") </p> 
<% elsif receipt.type == 2 %> 
    <p> <%= t(:"receipt.Receipt.receipt_choice1") </p> 
    <p> <%= t(:"receipt.Receipt.choise_detail2") </p> 
... 

Y a-t-il un moyen que je peux utiliser array pour déclarer? Comme

<%= t(:"receipt.Receipt[receipt.type]") %>

Ou est-il une meilleure façon que je peux utiliser?

Répondre

0

La syntaxe des symboles :"..." permet l'interpolation de chaîne comme des chaînes entre guillemets afin que vous puissiez dire des choses comme:

<p><%= t(:"receipt.Receipt.receipt_choice#{receipt.type}") %></p> 
<p><%= t(:"receipt.Receipt.choise_detail#{receipt.type}") %></p> 

En outre, l'aide t appelle éventuellement I18n.translate et that doesn't care if you give it strings or symbols:

# Key can be either a single key or a dot-separated key (both Strings and Symbols 
# work). <em>E.g.</em>, the short format can be looked up using both: 
# I18n.t 'date.formats.short' 
# I18n.t :'date.formats.short' 

de sorte que vous peut passer les symboles et utiliser des chaînes:

<p><%= t("receipt.Receipt.receipt_choice#{receipt.type}") %></p> 
<p><%= t("receipt.Receipt.choise_detail#{receipt.type}") %></p> 
+0

Merci, je vais modifier le code comme votre réponse! –