2016-08-05 2 views
8

Я работаю над приложением в Rails 4, используя i18n-active_record 0.1.0, чтобы сохранить мои переводы в базе данных, а не в .yml-файле. Он работает нормально.I18n перевод с i18n-active_record: та же форма для того же ключа

Одна вещь, которую я борюсь с, однако, заключается в том, что каждый перевод запись одна запись на местности, т.е.

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

что делает обновление их утомительной усилий. Я хотел бы вместо того, чтобы иметь его как один, т.е .:

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

или подобное для того, чтобы обновить все экземпляры одного ключа в одной форме. Кажется, я ничего не могу найти об этом, что меня озадачивает.

Есть ли способ легко сделать это? Любой тип хаков был бы в порядке.

ответ

0

В результате я создал свои собственные функции перевода, используя Globalize. Он явно не полагается на I18n, поэтому он является параллельной системой, но он работает, хотя и не очень хорош и не является заменой для I18n, но имеет важную функциональность, позволяющую легко добавлять локаль и обрабатывать все переводы в одной форме.

  • модель перевода с ключом: строка
  • В модели перевода:

    переводит: значение globalize_accessors: локали => I18n.available_locales,: атрибуты => [: значение]

In 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

Вы можете создать объект ActiveRecord для таблицы переводов, а затем создать функции чтения и записи на этой модели.

Функция чтения потянет все связанные записи, а затем объединит их в один хэш.

Функция Write будет принимать ваш единственный хеш-вход и разделять их на несколько записей для записи/обновления.

+0

Я получаю это теоретически, но как заставить его работать с драгоценным камнем и сделать его на практике - это совсем другое дело. – Christoffer