Skip to content

Commit 3d12bad

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

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ 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+
detected_lang.to_sym != I18n.locale &&
54+
"DiscourseTranslator::#{SiteSetting.translator}".constantize.language_supported?(
55+
detected_lang,
56+
)
5757
end
5858
end
5959
end

spec/serializers/post_serializer_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@
8989

9090
describe "when post has DETECTED_LANG_CUSTOM_FIELD matches user locale" do
9191
before do
92-
post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD] = "en"
92+
I18n.stubs(:locale).returns(:xx)
93+
post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD] = "xx"
9394
post.save
9495
end
9596

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)