diff --git a/app/jobs/scheduled/posts_locale_detection_backfill.rb b/app/jobs/scheduled/posts_locale_detection_backfill.rb index 2f665791..61b90a13 100644 --- a/app/jobs/scheduled/posts_locale_detection_backfill.rb +++ b/app/jobs/scheduled/posts_locale_detection_backfill.rb @@ -24,6 +24,8 @@ def execute(args) posts.each do |post| begin DiscourseTranslator::PostLocaleDetector.detect_locale(post) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to detect post #{post.id}'s locale: #{e.message}", diff --git a/app/jobs/scheduled/topics_locale_detection_backfill.rb b/app/jobs/scheduled/topics_locale_detection_backfill.rb index fb0d30b8..cbd96bc4 100644 --- a/app/jobs/scheduled/topics_locale_detection_backfill.rb +++ b/app/jobs/scheduled/topics_locale_detection_backfill.rb @@ -23,6 +23,8 @@ def execute(args) topics.each do |topic| begin DiscourseTranslator::TopicLocaleDetector.detect_locale(topic) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to detect topic #{topic.id}'s locale: #{e.message}", diff --git a/app/services/discourse_translator/topic_locale_detector.rb b/app/services/discourse_translator/topic_locale_detector.rb index 5be9d939..46e1f3c8 100644 --- a/app/services/discourse_translator/topic_locale_detector.rb +++ b/app/services/discourse_translator/topic_locale_detector.rb @@ -8,7 +8,7 @@ def self.detect_locale(topic) translator = DiscourseTranslator::Provider::TranslatorProvider.get detected_locale = translator.detect!(topic) locale = LocaleNormalizer.normalize_to_i18n(detected_locale) - topic.update!(locale:) + topic.update_column(:locale, locale) locale end end diff --git a/spec/services/topic_locale_detector_spec.rb b/spec/services/topic_locale_detector_spec.rb index 2dc868de..4038a555 100644 --- a/spec/services/topic_locale_detector_spec.rb +++ b/spec/services/topic_locale_detector_spec.rb @@ -23,5 +23,16 @@ nil, ).to("zh_CN") end + + it "bypasses validations when updating locale" do + topic.update_column(:title, "A") + SiteSetting.min_topic_title_length = 15 + SiteSetting.max_topic_title_length = 16 + + translator.stubs(:detect!).with(topic).returns("zh") + + described_class.detect_locale(topic) + expect(topic.reload.locale).to eq("zh_CN") + end end end