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 для таблицы перевода, а затем создать функции чтения и записи для этой модели.
Функция чтения извлекает все связанные записи и объединяет их в один хеш.
Функция записи будет принимать ваш единственный хэш-ввод и разбивать их на несколько записей для записи / обновления.