Мне удалось это решить. Главное, помнить, что I18n.locale
- это настройка, которую следует устанавливать при каждом запросе.
Поэтому в точке входа моего двигателя (lib/cron_monitor.rb
) я определил настройку:
module CronMonitor
class << self
attr_accessor :i18n
end
self.i18n = I18n.default_locale
Затем в моем движке ApplicationController
, следуя документации Rails i18n :
module CronMonitor
class ApplicationController < ActionController::Base
around_action :switch_locale
private
def switch_locale(&action)
locale = CronMonitor.i18n || I18n.default_locale
I18n.with_locale(locale, &action)
end
end
end
Кроме того, если у вас есть код в моделях или объектах обслуживания, который вы также хотите перевести, вы следует также использовать I18n. Пример:
module CronMonitor
class Category < ApplicationRecord
def self.some_method
message = I18n.translate(
"cron_monitor.starting_or_finishing.failure",
title: self.title,
locale: CronMonitor.i18n
)
end
end