#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