From e35a9e00365f710cbbff2818a56c28af39f33073 Mon Sep 17 00:00:00 2001 From: Nat Date: Tue, 22 Apr 2025 16:17:39 +0800 Subject: [PATCH 1/2] DEV: Functional class to get the active selected translator --- .../discourse_translator/translator_controller.rb | 10 ++-------- app/jobs/regular/detect_translatable_language.rb | 2 +- app/jobs/regular/translate_translatable.rb | 5 +---- app/jobs/scheduled/automatic_translation_backfill.rb | 3 +-- .../provider/translator_provider.rb | 9 +++++++++ 5 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 app/services/discourse_translator/provider/translator_provider.rb diff --git a/app/controllers/discourse_translator/translator_controller.rb b/app/controllers/discourse_translator/translator_controller.rb index bffe9ff0..e04e6d22 100644 --- a/app/controllers/discourse_translator/translator_controller.rb +++ b/app/controllers/discourse_translator/translator_controller.rb @@ -40,15 +40,9 @@ def translate begin title_json = {} - detected_lang, translation = - "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize.translate( - post, - ) + detected_lang, translation = DiscourseTranslator::Provider.get.translate(post) if post.is_first_post? - _, title_translation = - "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize.translate( - post.topic, - ) + _, title_translation = DiscourseTranslator::Provider.get.translate(post.topic) title_json = { title_translation: title_translation } end render json: { translation: translation, detected_lang: detected_lang }.merge(title_json), diff --git a/app/jobs/regular/detect_translatable_language.rb b/app/jobs/regular/detect_translatable_language.rb index 033a0625..710f8206 100644 --- a/app/jobs/regular/detect_translatable_language.rb +++ b/app/jobs/regular/detect_translatable_language.rb @@ -11,7 +11,7 @@ def execute(args) translatable = args[:type].constantize.find_by(id: args[:translatable_id]) return if translatable.blank? begin - translator = "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize + translator = DiscourseTranslator::Provider.get translator.detect(translatable) rescue ::DiscourseTranslator::Provider::ProblemCheckedTranslationError # problem-checked translation errors gracefully diff --git a/app/jobs/regular/translate_translatable.rb b/app/jobs/regular/translate_translatable.rb index bdf4d7d5..d819ed4a 100644 --- a/app/jobs/regular/translate_translatable.rb +++ b/app/jobs/regular/translate_translatable.rb @@ -11,10 +11,7 @@ def execute(args) target_locales = SiteSetting.automatic_translation_target_languages.split("|") target_locales.each do |target_locale| - "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize.translate( - translatable, - target_locale.to_sym, - ) + DiscourseTranslator::Provider.get.translate(translatable, target_locale.to_sym) end topic_id, post_id = diff --git a/app/jobs/scheduled/automatic_translation_backfill.rb b/app/jobs/scheduled/automatic_translation_backfill.rb index dfb9e1e0..fd6ef3ff 100644 --- a/app/jobs/scheduled/automatic_translation_backfill.rb +++ b/app/jobs/scheduled/automatic_translation_backfill.rb @@ -67,8 +67,7 @@ def backfill_locales end def translator - @translator_klass ||= - "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize + @translator_klass ||= DiscourseTranslator::Provider.get end def translate_records(type, record_ids, target_locale) diff --git a/app/services/discourse_translator/provider/translator_provider.rb b/app/services/discourse_translator/provider/translator_provider.rb new file mode 100644 index 00000000..0b15c4a6 --- /dev/null +++ b/app/services/discourse_translator/provider/translator_provider.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module DiscourseTranslator + module Provider + def self.get + DiscourseTranslator::Provider.get + end + end +end From 0b0dc80fedafe03370ad3f237b719e99c15e9f07 Mon Sep 17 00:00:00 2001 From: Nat Date: Tue, 22 Apr 2025 16:25:11 +0800 Subject: [PATCH 2/2] zeitwerk --- .../discourse_translator/translator_controller.rb | 6 ++++-- app/jobs/regular/detect_translatable_language.rb | 2 +- app/jobs/regular/translate_translatable.rb | 5 ++++- app/jobs/scheduled/automatic_translation_backfill.rb | 2 +- .../discourse_translator/provider/translator_provider.rb | 6 ++++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/controllers/discourse_translator/translator_controller.rb b/app/controllers/discourse_translator/translator_controller.rb index e04e6d22..2205c508 100644 --- a/app/controllers/discourse_translator/translator_controller.rb +++ b/app/controllers/discourse_translator/translator_controller.rb @@ -40,9 +40,11 @@ def translate begin title_json = {} - detected_lang, translation = DiscourseTranslator::Provider.get.translate(post) + detected_lang, translation = + DiscourseTranslator::Provider::TranslatorProvider.get.translate(post) if post.is_first_post? - _, title_translation = DiscourseTranslator::Provider.get.translate(post.topic) + _, title_translation = + DiscourseTranslator::Provider::TranslatorProvider.get.translate(post.topic) title_json = { title_translation: title_translation } end render json: { translation: translation, detected_lang: detected_lang }.merge(title_json), diff --git a/app/jobs/regular/detect_translatable_language.rb b/app/jobs/regular/detect_translatable_language.rb index 710f8206..65f4480b 100644 --- a/app/jobs/regular/detect_translatable_language.rb +++ b/app/jobs/regular/detect_translatable_language.rb @@ -11,7 +11,7 @@ def execute(args) translatable = args[:type].constantize.find_by(id: args[:translatable_id]) return if translatable.blank? begin - translator = DiscourseTranslator::Provider.get + translator = DiscourseTranslator::Provider::TranslatorProvider.get translator.detect(translatable) rescue ::DiscourseTranslator::Provider::ProblemCheckedTranslationError # problem-checked translation errors gracefully diff --git a/app/jobs/regular/translate_translatable.rb b/app/jobs/regular/translate_translatable.rb index d819ed4a..20db120f 100644 --- a/app/jobs/regular/translate_translatable.rb +++ b/app/jobs/regular/translate_translatable.rb @@ -11,7 +11,10 @@ def execute(args) target_locales = SiteSetting.automatic_translation_target_languages.split("|") target_locales.each do |target_locale| - DiscourseTranslator::Provider.get.translate(translatable, target_locale.to_sym) + DiscourseTranslator::Provider::TranslatorProvider.get.translate( + translatable, + target_locale.to_sym, + ) end topic_id, post_id = diff --git a/app/jobs/scheduled/automatic_translation_backfill.rb b/app/jobs/scheduled/automatic_translation_backfill.rb index fd6ef3ff..b7fe5bbb 100644 --- a/app/jobs/scheduled/automatic_translation_backfill.rb +++ b/app/jobs/scheduled/automatic_translation_backfill.rb @@ -67,7 +67,7 @@ def backfill_locales end def translator - @translator_klass ||= DiscourseTranslator::Provider.get + @translator_klass ||= DiscourseTranslator::Provider::TranslatorProvider.get end def translate_records(type, record_ids, target_locale) diff --git a/app/services/discourse_translator/provider/translator_provider.rb b/app/services/discourse_translator/provider/translator_provider.rb index 0b15c4a6..3e5de694 100644 --- a/app/services/discourse_translator/provider/translator_provider.rb +++ b/app/services/discourse_translator/provider/translator_provider.rb @@ -2,8 +2,10 @@ module DiscourseTranslator module Provider - def self.get - DiscourseTranslator::Provider.get + class TranslatorProvider + def self.get + "DiscourseTranslator::Provider::#{SiteSetting.translator_provider}".constantize + end end end end