diff --git a/app/controllers/concerns/remotely_translatable.rb b/app/controllers/concerns/remotely_translatable.rb index 7508a29f3..2524566fc 100644 --- a/app/controllers/concerns/remotely_translatable.rb +++ b/app/controllers/concerns/remotely_translatable.rb @@ -4,25 +4,7 @@ module RemotelyTranslatable def detect_remote_translations(*args) return [] unless Setting["feature.remote_translations"].present? && api_key_has_been_set_in_secrets? - resources_groups(*args).flatten.select { |resource| translation_empty?(resource) }.map do |resource| - remote_translation_for(resource) - end - end - - def remote_translation_for(resource) - { "remote_translatable_id" => resource.id.to_s, - "remote_translatable_type" => resource.class.to_s, - "locale" => I18n.locale } - end - - def translation_empty?(resource) - resource.class.translates? && resource.translations.where(locale: I18n.locale).empty? - end - - def resources_groups(*args) - feeds = args.find { |arg| arg&.first.class == Widget::Feed } || [] - - args.compact - [feeds] + feeds.map(&:items) + RemoteTranslation.remote_translations_for(*args) end def api_key_has_been_set_in_secrets? diff --git a/app/models/remote_translation.rb b/app/models/remote_translation.rb index 63b4cfc92..6eec7ca0a 100644 --- a/app/models/remote_translation.rb +++ b/app/models/remote_translation.rb @@ -19,6 +19,28 @@ class RemoteTranslation < ApplicationRecord error_message: nil).any? end + def self.remote_translations_for(*args) + resources_groups(*args).flatten.select { |resource| translation_empty?(resource) }.map do |resource| + remote_translation_for(resource) + end + end + + def self.resources_groups(*args) + feeds = args.find { |arg| arg&.first.class == Widget::Feed } || [] + + args.compact - [feeds] + feeds.map(&:items) + end + + def self.remote_translation_for(resource) + { "remote_translatable_id" => resource.id.to_s, + "remote_translatable_type" => resource.class.to_s, + "locale" => I18n.locale } + end + + def self.translation_empty?(resource) + resource.class.translates? && resource.translations.where(locale: I18n.locale).empty? + end + def already_translated_resource if remote_translatable&.translations&.where(locale: locale).present? errors.add(:locale, :already_translated)