2016-08-05 28 views
8

Ich arbeite an einer App in Rails 4 mit i18n-active_record 0.1.0, um meine Übersetzungen in der Datenbank statt in einer .yml-Datei zu behalten. Es funktioniert gut.I18n Übersetzung mit i18n-active_record: dasselbe Formular für denselben Schlüssel

Eine Sache, die, mit denen ich zu kämpfen, ist jedoch, dass jede Übersetzung Datensatz einen Datensatz pro locale ist, das heißt

#1. { locale: "en", key: "hello", value: "hello") 
#2. { locale: "se", key: "hello", value: "hej") 

, die ihnen eine mühsame Anstrengung macht aktualisieren. Ich mag es stattdessen haben, wie eine, d.h .:

{ key: "hello", value_en: "hello", value_se: "hej" } 

oder ähnliches, um alle Instanzen von einem Schlüssel in einer Form zu aktualisieren. Ich kann nichts darüber finden, was mich verwirrt.

Gibt es eine Möglichkeit, dies einfach zu tun? Jede Art von Hacks wäre auch in Ordnung.

Antwort

0

Ich habe am Ende meine eigene Übersetzungsfunktion mit Globalize erstellt. Es ist nicht explizit auf I18n angewiesen, also ist es ein paralleles System, aber es funktioniert, obwohl es nicht hübsch ist und es ist kein Ersatz für I18n, aber es hat die wichtige Funktionalität, ein Gebietsschema leicht hinzuzufügen und alle Übersetzungen in einer Form zu behandeln.

  • Translation-Modell mit Schlüssel: string
  • In Translation Modell:

    übersetzt: Wert globalize_accessors: locales => I18n.available_locales,: attributes => [: value]

In AnwendungHelper:

def t2(key_str) 
    key_stringified = key_str.to_s.gsub(":", "") 
    t = Transl8er.find_by_key(key_stringified) 
    if t.blank? 
     # Translation missing 
     if t.is_a? String 
     return_string = "Translation missing for #{key_str}" 
     else 
     return_string = key_str 
     end 
    else 
     begin 
     return_string = t.value.strip 
     rescue 
     return_string = t.value 
     end 
    end 
    return_string 
    end 
2

Sie könnten ein ActiveRecord-Objekt für die Übersetzungstabelle erstellen und dann Lese- und Schreibfunktionen für dieses Modell erstellen.

Read-Funktion würde alle zugehörigen Datensätze ziehen dann kombinieren sie zu einem einzigen Hash.

Write Funktion würde Ihre einzige Hash-Eingabe und teilen sie in mehrere Datensätze zum Schreiben/Aktualisieren.

+0

Das verstehe ich in der Theorie, aber wie man mit dem Juwel arbeiten und es in der Praxis machen kann, ist eine ganz andere Sache. – Christoffer