2016-11-25 1 views
0

Ich habe eine Situation, gibt es viele Arten von Empfang in meinem Projekt. Ich speichere sie in integer.Schienen i18n Array verwenden

In i18n Datei, erkläre ich die Übersetzung auf diese Weise.

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

Allerdings ist es nicht bequem für mich. In Sicht muss ich if, else Syntax schreiben, um zu wählen, welcher Ausdruck ich benötige. So was.

<% 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> 
... 

Gibt es eine Möglichkeit, Array zu deklarieren? Wie

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

Oder gibt es einen besseren Weg, die ich benutzen kann?

Antwort

0

Die :"..." Symbol Syntax ermöglicht String Interpolation wie Doppelsaiten zitiert, so dass Sie Dinge wie sagen kann:

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

Auch die t Helfer schließlich ruft I18n.translate und 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' 

, so dass Sie kann die Symbole überspringen und nur Zeichenfolgen verwenden:

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

Danke, ich werde den Code wie deine Antwort ändern! –

Verwandte Themen