I18n перевод с i18n-active_record: та же форма для того же ключа

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

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

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

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

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

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

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

2 ответа

Решение

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

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

    переводит: значение globalize_accessors:locales => I18n.available_locales,:attribute => [:value]

В 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

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

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

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

Другие вопросы по тегам