Rails: хранить переводы в базе данных
Я искал решение plugin/gem для расширения собственных рельсов i18n для хранения моих переводов в мою базу данных. Возможно, я использовал неправильные условия поиска, но все, что я нашел, это информация о том, что изменение бэкэнда действительно возможно и это запись в блоге, в котором описывается, как напишите мой собственный бэкэнд.
Трудно себе представить, что все эти приложения с рельсами там, где их переводы хранятся в yml файлах, или каждый разработчик написал собственные бэкэнды!
Знаете ли вы рабочие решения для этого? Хранение многострочных текстов в yml действительно меня заводит!;)
Спасибо и приветствуем,
Джо
Ответы
Ответ 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!;)
Ответ 3
Возможно, вы захотите попробовать http://github.com/joshmh/globalize2/tree/master
Ответ 4
У нас был хороший опыт работы с fast_gettext
у него есть бэкэнд с поддержкой БД, который поставляется с контроллером для выполнения переводов через Интернет.
Кэширование является встроенным, хотя нам пришлось запрограммировать предварительную загрузку всех переводов при загрузке (это намного быстрее, чем получить их один за другим с кешированием).