Подтвердить что ты не робот

Rails: хранить переводы в базе данных

Я искал решение plugin/gem для расширения собственных рельсов i18n для хранения моих переводов в мою базу данных. Возможно, я использовал неправильные условия поиска, но все, что я нашел, это информация о том, что изменение бэкэнда действительно возможно и это запись в блоге, в котором описывается, как напишите мой собственный бэкэнд.

Трудно себе представить, что все эти приложения с рельсами там, где их переводы хранятся в yml файлах, или каждый разработчик написал собственные бэкэнды!

Знаете ли вы рабочие решения для этого? Хранение многострочных текстов в yml действительно меня заводит!;)

Спасибо и приветствуем,

Джо

4b9b3361

Ответ 1

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

Ответ 2

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

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

Этот довольно потрясающий плагин от Dylan Stamat делает именно то, что имя указывает и дополнительно обрабатывает кеширование!

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

Проблема решена, благодаря г-ну I18n Sven Fuchs!;)

Ответ 4

У нас был хороший опыт работы с fast_gettext

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