Интернационализация тысяч товарных этикеток в Rails - PullRequest
4 голосов
/ 14 июня 2011

Каков наилучший способ интернационализации тысяч меток продуктов в Rails?Должен ли я ввести все тысячи меток в файл YAML?Или есть лучшие решения?

Любая помощь подойдет:)

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Rails поддерживает не-YAML-хранилище для переводов.Если вы хотите сохранить переводы в таблице, используйте i18n-active_record gem.

Наблюдайте за Railscast на настраиваемых бэкэндах I18n.

Если вы используете гем i18n-active_record , убедитесь, что memoize и flatten ключи для оптимальной производительности, как показано ниже (пример кода взят из readme из i18n-active_record драгоценный камень)

I18n.backend = I18n::Backend::ActiveRecord.new
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Flatten)
I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::Simple.new, I18n.backend)
0 голосов
/ 14 июня 2011

Вы должны создать таблицу с именем translations.

В вашей модели продукта:

has_many :labels

В вашей модели Label:

 has_one :translation

Тогда в вашей таблице перевода может быть столько языков, сколько вам нужно:

 Product.first.labels.first.translation.en
 Product.first.labels.first.translation.cn
 Product.first.labels.first.translation.fn

С помощью этой логики вы можете позвонить:

Product.all.each do |p|
    p.lables.each do |l|
        l.translation.en
        l.translation.cn
        #etc.... 
    end
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...