Skip to content

Commit cab0ae0

Browse files
committed
DEV: Move logic for language support into translators
1 parent 4509cd5 commit cab0ae0

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

app/services/discourse_translator/base.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,12 @@ def self.get_text(topic_or_post)
6060
topic_or_post.title
6161
end
6262
end
63+
64+
def self.language_supported?(detected_lang)
65+
raise NotImplementedError unless self.const_defined?(:SUPPORTED_LANG_MAPPING)
66+
supported_lang = const_get(:SUPPORTED_LANG_MAPPING)
67+
return false if supported_lang[I18n.locale].nil?
68+
detected_lang != supported_lang[I18n.locale]
69+
end
6370
end
6471
end

plugin.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,9 @@ module ::DiscourseTranslator
5050
Discourse.redis.sadd?(DiscourseTranslator::LANG_DETECT_NEEDED, object.id)
5151
false
5252
else
53-
detected_lang !=
54-
"DiscourseTranslator::#{SiteSetting.translator}::SUPPORTED_LANG_MAPPING".constantize[
55-
I18n.locale
56-
]
53+
"DiscourseTranslator::#{SiteSetting.translator}".constantize.language_supported?(
54+
detected_lang,
55+
)
5756
end
5857
end
5958
end

spec/services/base_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
describe DiscourseTranslator::Base do
6+
class TestTranslator < DiscourseTranslator::Base
7+
SUPPORTED_LANG_MAPPING = { en: "en", ar: "ar", es_MX: "es-MX", pt: "pt" }
8+
end
9+
10+
class EmptyTranslator < DiscourseTranslator::Base
11+
end
12+
13+
describe ".language_supported?" do
14+
it "raises an error when the method is not implemented" do
15+
expect { EmptyTranslator.language_supported?("en") }.to raise_error(NotImplementedError)
16+
end
17+
18+
it "returns false when the locale is not supported" do
19+
I18n.stubs(:locale).returns(:xx)
20+
expect(TestTranslator.language_supported?("en")).to eq(false)
21+
end
22+
23+
it "returns true when the detected language is not the current locale" do
24+
I18n.locale = :pt
25+
expect(TestTranslator.language_supported?("en")).to eq(true)
26+
expect(TestTranslator.language_supported?("ar")).to eq(true)
27+
expect(TestTranslator.language_supported?("es-MX")).to eq(true)
28+
end
29+
30+
it "returns false when the detected language is the detected locale" do
31+
I18n.locale = :pt
32+
expect(TestTranslator.language_supported?("pt")).to eq(false)
33+
end
34+
end
35+
end

0 commit comments

Comments
 (0)