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 я считаю, что они переместили этот код в собственный драгоценный камень... Я забыл, как называется этот камень.


Я, наконец, нашел то, что искал с помощью Свена Фукса:

http://github.com/dylanz/i18n_backend_database/tree/master

этот довольно удивительный плагин Дилан Стамат делает именно то, что указывает имя и дополнительно обрабатывает кэширование!

Свен также упомянул, что текущая ветвь 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

Он имеет бэкэнд с поддержкой БД, который поставляется с контроллером для выполнения переводов через интернет. Кэширование встроено, хотя нам пришлось закодировать предварительную загрузку всех переводов при загрузке (это намного быстрее, чем получить их один за другим с кэшированием).