Интернационализация тысяч ярлыков продуктов в Rails

#ruby-on-rails #ruby #internationalization

#ruby-на-рельсах #ruby #интернационализация #ruby-on-rails

Вопрос:

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

Подойдет любая помощь 🙂

Ответ №1:

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

Смотрите 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)
  

Ответ №2:

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

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

 has_many :labels
  

В вашей модели ярлыков:

  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