Rails: хранить переводы в базе данных - PullRequest
17 голосов
/ 28 августа 2009

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

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

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

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

Джо

Ответы [ 4 ]

21 голосов
/ 24 ноября 2010

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

9 голосов
/ 29 августа 2009

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

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 Свену Фуксу! ;)

1 голос
/ 28 августа 2009

Возможно, вы захотите попробовать http://github.com/joshmh/globalize2/tree/master

0 голосов
/ 01 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...