2016-08-05 13 views
8

Pracuję nad aplikacją w Rails 4 przy użyciu i18n-active_record 0.1.0, aby zachować moje tłumaczenia w bazie danych, a nie w pliku .yml. To działa dobrze.Tłumaczenie I18n z i18n-active_record: ta sama forma dla tego samego klucza

Jedna rzecz, że walczę ze jednak to, że każdy rekord tłumaczenie jest jeden rekord za lokalizacji, tj

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

co sprawia, że ​​uaktualnianie im żmudnego wysiłku. Chciałbym zamiast tego mieć go jako jedno, tj .:

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

lub podobny w celu zaktualizowania wszystkich wystąpień jednego klucza w jednej formie. Nie mogę niczego znaleźć, co mnie zastanawia.

Czy można to łatwo zrobić? Każdy rodzaj hacków również byłby w porządku.

Odpowiedz

0

Skończyło się na stworzeniu własnej funkcji tłumaczenia przy użyciu Globalize. Nie opiera się to wyraźnie na I18n, więc jest to system równoległy, ale działa, chociaż nie jest ładny i nie zastępuje I18n, ale ma ważną funkcjonalność łatwego dodawania ustawień regionalnych i obsługi wszystkich tłumaczeń w jednej formie.

  • modelu Tłumaczenie z kluczem: string
  • W modelu Tłumaczenie:

    tłumaczy: wartość globalize_accessors: locale => I18n.available_locales,: atrybuty => [: wartość]

W ApplicationHelper:

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

Można utworzyć obiekt ActiveRecord dla tabeli translacji, a następnie utworzyć funkcje odczytu i zapisu dla tego modelu.

Funkcja odczytu może pobrać wszystkie powiązane rekordy, a następnie połączyć je w jeden skrót.

Funkcja zapisu zajęłaby jedno wejście mieszania i podzielono je na wiele zapisów do zapisu/aktualizacji.

+0

Rozumiem to w teorii, ale jak sprawić, by działało z klejnotem i sprawiło, że jest to w praktyce zupełnie inna sprawa. – Christoffer

Powiązane problemy