Я написал небольшую библиотеку для хранения переведенных материалов в атрибутах модели. Все, что вам нужно сделать, это добавить следующее к модели:Крючок в Rails 'I18n
class Page < ActiveRecord::Base
i18n_attributes :title, :content
end
По соглашению, данные записываются в реальных атрибутов i18n_title и i18n_content как хэш (или hstore хэш для Postgres). И ряд добытчиков и сеттера дают вам доступ к «локализованным виртуальным атрибутам»:
page = Page.new
page.title_en = 'Hello'
page.title_es = 'Hola'
page.i18n_title # => { en: "Hello", es: "Hola" }
I18n.locale = :es
page.title # => "Hola"
page.title_en # => "Hello"
Вы можете использовать эти виртуальные атрибуты в формах, а также, но есть и обратная сторона: Форма строитель использует I18N, чтобы получить метку и переводить ошибки проверки атрибута. И, конечно, вы найдете ключи, такие как activerecord.attributes.page.title_en
, если вы используете title_en
в форме.
Было бы очень громоздким повторить тот же перевод для каждого available_locale в файлах locales/en.yml
и т.д.:
activerecord:
attributes:
page:
title_en: "Title"
title_es: "Title"
...
То, что я хотел бы сделать, это выполнить некоторый код после того, как Rails загрузил все локали в багажнике а затем клонировать переводы для этих ключей. Есть ли способ сделать это? Может быть, крючок, который вызывается после переводов, был загружен из файлов YAML? (Перевод еще не загружен, когда мои библиотеки загружаются.)
Или вы видите другой способ решения этой проблемы? (Я пытался переименовать I18n.translate, но я боюсь, что это может вызвать серьезную головную боль в будущем.)
Спасибо за ваши подсказки!
Я отбросил этот подход, поэтому вопрос больше не уместен - по крайней мере, не для меня , – svoop