Rails: хранить переводы в базе данных
Я искал решение плагина / gem для расширения собственных rails i18n для хранения моих переводов в мою базу данных. Может быть, я использовал неправильные условия поиска, но все, что я нашел, это информацию, что изменение бэкэнда на самом деле возможно и это запись в блог что descripes как написать свой собственный движок.
трудно представить, что все эти приложения rails там имеют свои переводы, хранящиеся в yml-файлах, или каждый разработчик написал собственный бэкэнды!
знаете ли Вы решения для этого? Хранение многострочных текстов в yml действительно меня расстраивает! ;)
спасибо и здоровается,
Джо
4 ответов
реализация i18n имеет встроенную поддержку для использования базы данных в качестве основы перевода.
создать таблицу, используя этот код в миграции:
create_table :translations do |t|
t.string :locale
t.string :key
t.text :value
t.text :interpolations
t.boolean :is_proc, :default => false
end
затем добавьте инициализатор в config/initializers / i18n.rb с содержанием:
I18n.backend = I18n::Backend::ActiveRecord.new
и последнее... поместите переводы в таблицу. Что-то вроде:
locale key value
en Cool Cool
es Cool Frio
en nav.Home home
es nav.Home casa
...
по состоянию на i18n 0.5.0 я считаю, что они переместили этот код в собственный драгоценный камень... Я забыл, как называется этот камень.
Я, наконец, нашел то, что искал с помощью Свена Фукса:
этот довольно удивительный плагин Дилан Стамат делает именно то, что указывает имя и дополнительно обрабатывает кэширование!
Свен также упомянул, что текущая ветвь i18n / active_record также предоставляет бэкэнд ActiveRecord:
http://github.com/svenfuchs/i18n/blob/active_record/lib/i18n/backend/active_record.rb
некоторое обсуждение этой темы происходит в группе пользователей goolge i18n:
http://groups.google.com/group/rails-i18n/browse_thread/thread/6b7ba3c401890a7e
проблема решена, благодаря Mr как i18n Свен Фукс! ;)
вы можете попробовать http://github.com/joshmh/globalize2/tree/master
У нас был хороший опыт с fast_gettext
Он имеет бэкэнд с поддержкой БД, который поставляется с контроллером для выполнения переводов через интернет. Кэширование встроено, хотя нам пришлось закодировать предварительную загрузку всех переводов при загрузке (это намного быстрее, чем получить их один за другим с кэшированием).