2014-02-05 6 views
5

Ich verwende Arrays in einer Locale-Datei, um Textblöcke in verschiedenen Ausgabemethoden (ActionMailer-Vorlagen, Prawn-Dokumente, HAML-Vorlagen) zu generieren, die länderspezifisch sind. Es funktioniert perfekt, aber manchmal möchte ich Variablen in diese I18n-Aufrufe übergeben. Dies funktioniert jedoch nicht.Interpolation im I18n-Array

Say my locale-Datei wie folgt aussieht:

en: 
    my_array: 
    - "Line 1" 
    - "Line 2" 
    - "Line 3 has a %{variable}" 
    - "Line 4" 

ich die Ausgabe von I18n.t('my_array', :variable => 'variable named variable') wollen wie folgt sein:

["Line 1", "Line 2", "Line 3 has a %{variable}", "Line 4"] 

:

["Line 1", "Line 2", "Line 3 has a variable named variable", "Line 4"] 

jedoch der Ausgang Muss ich nach dem Abrufen des Arrays die Interpolation selbst durchführen? Oder gibt es einen besseren Weg, dies zu tun?

+0

versuchen Sie dies: http://guides.rubyonrails.org/i18n.html – Dheer

+0

ich etwas fehlen könnte, aber bitte darauf hinweisen, wo diese ist in diesem Leitfaden dokumentiert. Ich kenne die ROR-Guides ziemlich gut. –

+0

Plx check this para: 3.2 Übergeben von Variablen an Übersetzungen http://guides.rubyonrails.org/i18n.html#passing-variables-to-translations – Dheer

Antwort

5

Ich denke, so etwas wird nicht nativ in i18n Juwel unterstützt, aber es ist machbar mit einigen Meta-Programmierung Magie.

In einem Initialisierer (etwa config/initializers/i18n.rb) fügen Sie folgendes

I18n.backend.instance_eval do 
    def interpolate(locale, string, values = {}) 
    if string.is_a?(::Array) && !values.empty? 
     string.map { |el| super(locale, el, values) } 
    else 
     super 
    end 
    end 
end 
+1

Git Problem und PR zu I18n Edelstein erstellt. Kredite für dich. Folgen Sie hier: https://github.com/svenfuchs/i18n/issues/281 –

+0

Ich habe damals ein Problem erstellt und mir wurde gesagt, dass dies nicht etwas ist, das sie gerne in I18n sehen würden. Also habe ich nicht verfolgt, aber deine Lösung sieht gut aus. Ich erinnere mich jedoch, dass ich Schwierigkeiten mit Schlüsseln hatte, die nicht in der Übersetzungszeichenfolge enthalten waren, weshalb ich meinen eigenen Interpolationshelfer baute (was trivial war). –