Плагин для использования Ruby on Rails Простой бэкэнд I18n с переводами, перезаписываемыми в базе данных - PullRequest
1 голос
/ 19 августа 2009

Надеемся, что некоторые опытные разработчики Rails здесь могут порекомендовать существующий плагин или гем Ruby on Rails, который позволяет вам продолжать использовать бэкэнд Simple I18n, при этом вы можете дополнительно указывать переводы в базе данных.

И вот почему:

У меня есть одно приложение Rails, которое используется для многих веб-сайтов. Для примера я буду использовать только 2 сайта:

Сайт 1: Лепреконы R Us

Сайт 2: Единороги R Us

Большинство переводов одинаковы для обоих сайтов, но иногда я хочу переопределить перевод. Например, в моем файле en-US.yml у меня есть следующий перевод:

view_all: Просмотреть все

И для большинства веб-сайтов этот перевод подходит, в том числе для веб-сайта 1 (Лепреконы), где я с удовольствием использую «Просмотреть все».

Однако для веб-сайта 2 я хотел бы использовать «Просмотр всех единорогов» в качестве перевода view_all, и я хотел бы указать это в базе данных. По причинам обслуживания я не хочу указывать это переопределение в файле YAML.

Большое спасибо,

Элиот

1 Ответ

1 голос
/ 03 сентября 2009

В конце концов я решил воспользоваться преимуществами способности Rails I18n :: Backend :: Simple обрабатывать как файлы .yml, так и файлы .rb как словари локали.

Создано артефактов:

  1. Миграция БД для создания таблицы переводов со столбцами: локаль, ключ, текст

  2. Модель перевода для сопоставления с таблицей переводов

  3. Метод класса to_locale_hash в модели трансляции, который возвращает хеш с локальным ключом, как того требует I18n :: Backend :: Simple.load_rb

  4. Однострочный файл, расположенный в config / translations.rb со строкой 'Translation.to_locale_hash'

Исходный код см. В расширении Spree (извините, не в структуре плагина Rails, вам будет легко перейти к плагину, если вам потребуется) здесь:

http://github.com/eliotsykes/spree-i18n-db/tree/master

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