Вы можете просто создать языковой атрибут в модели товара для хранения информации, вашего второго варианта может быть достаточно.
Я думаю, что языковая модель была бы просто слишком большой без реальной выгоды.
Если вы хотите инкапсулировать его дальше, вы можете создать модуль, расширяющий вашу модель до методов экземпляра, которые обрабатывают языки. И это, вероятно, предпочтительный способ, если вы хотите сделать вещи чистыми.
Если вы хотите придерживаться модели, помните, что вы можете использовать помощник делегата, чтобы сделать вещи прозрачными для вашей языковой модели. Таким образом, вместо article.language.locale вы можете напрямую вызвать article.language_locale (очень тонкий, но важный шаблон проектирования).
Многие вещи, которые вы можете сделать, но я, вероятно, сделаю это просто с модулем здесь.