summaryrefslogtreecommitdiffstats
path: root/app/lib/language_detector.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-07-14 04:05:36 +0200
committerGitHub <noreply@github.com>2018-07-14 04:05:36 +0200
commit38e9662d78784d8286917f0d0e47d76d0df916df (patch)
treefd398f94334eb23179872d95c0888447638adcf8 /app/lib/language_detector.rb
parent0180037dfb45b80c3e3a04bc9cfb69fae1da37c0 (diff)
Disable language detection for texts shorter than 140 characters (#8010)
If the input text is blank after preparation (only mention, or only URL, or empty as in a media post), then use nil as language, since it's OK to show to everyone. Otherwise, always fall back to the server's default locale
Diffstat (limited to 'app/lib/language_detector.rb')
-rw-r--r--app/lib/language_detector.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/app/lib/language_detector.rb b/app/lib/language_detector.rb
index c6f52f0c7ea..688d21fd820 100644
--- a/app/lib/language_detector.rb
+++ b/app/lib/language_detector.rb
@@ -3,12 +3,16 @@
class LanguageDetector
include Singleton
+ CHARACTER_THRESHOLD = 140
+
def initialize
@identifier = CLD3::NNetLanguageIdentifier.new(1, 2048)
end
def detect(text, account)
- detect_language_code(text) || default_locale(account)
+ input_text = prepare_text(text)
+ return if input_text.blank?
+ detect_language_code(input_text) || default_locale(account)
end
def language_names
@@ -23,8 +27,13 @@ class LanguageDetector
simplify_text(text).strip
end
+ def unreliable_input?(text)
+ text.size < CHARACTER_THRESHOLD
+ end
+
def detect_language_code(text)
- result = @identifier.find_language(prepare_text(text))
+ return if unreliable_input?(text)
+ result = @identifier.find_language(text)
iso6391(result.language.to_s).to_sym if result.reliable?
end
@@ -66,6 +75,6 @@ class LanguageDetector
end
def default_locale(account)
- account.user_locale&.to_sym
+ account.user_locale&.to_sym || I18n.default_locale
end
end