1

В приложении для рельсов у меня есть две модели: Food и Drink.
В обеих продуктах и ​​напитках есть name, которые необходимо хранить на двух языках.
Как лучше понимать переводы для этих таблиц?Рельсы: переводы для колонны таблицы

Первое решение, которое я понял, заключалось в замене колонны name на name_en и name_ru.
Другим решением является кодирование с помощью хэша YAML, например { :en => 'eng', :ru => 'rus' }, и сохранение yaml в качестве имени.

Что вы посоветуете, если контент не является статичным?
Может быть, хорошая статья?

ответ

1

Первый вариант (name_en, name_ru) является самым простым в реализации.

Вы можете включить метод имени, который возвращает правильное значение в зависимости от выбранной локали. Можно даже создать модуль, если вы собираетесь использовать это на много моделей/полей:

class Food < ActiveRecord::Base 
... 
    def name 
    self.send("name_#{I18n.locale}") 
    end 
end 

Если в будущем вы должны включать в себя дополнительный язык, вам придется добавить миграцию, конечно. Но это не слишком хлопотно.

Второй (кодирование с использованием YAML) кажется немного более громоздким - вам не придется выполнять дополнительную миграцию с ним, но вы теряете другие функции. Например, поиск делается намного сложнее - вы больше не можете использовать SQL для просмотра описаний, поскольку они закодированы на YAML вместо простого текста.

Поэтому я рекомендую иметь два поля.

Смежные вопросы