diff --git a/app/lib/language_detector.rb b/app/lib/language_detector.rb index b6f81923b5f..9a32d6a6423 100644 --- a/app/lib/language_detector.rb +++ b/app/lib/language_detector.rb @@ -9,11 +9,19 @@ class LanguageDetector end def to_iso_s - WhatLanguage.new(:all).language_iso(text) || default_locale.to_sym + WhatLanguage.new(:all).language_iso(text_without_urls) || default_locale.to_sym end private + def text_without_urls + text.dup.tap do |new_text| + URI.extract(new_text).each do |url| + new_text.gsub!(url, '') + end + end + end + def default_locale account&.user&.locale || I18n.default_locale end diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml index 626b97f41ad..0b4eeba547a 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/stream_entries/_detailed_status.html.haml @@ -12,7 +12,7 @@ %p{ style: 'margin-bottom: 0' }< %span.p-summary>= "#{status.spoiler_text} " %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') - %div.e-content{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) + %div.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) - unless status.media_attachments.empty? diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml index 52518bc3340..99acae23dc1 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/stream_entries/_simple_status.html.haml @@ -17,7 +17,7 @@ %p{ style: 'margin-bottom: 0' }< %span.p-summary>= "#{status.spoiler_text} " %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') - %div.e-content{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) + %div.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) - unless status.media_attachments.empty? .status__attachments diff --git a/spec/lib/language_detector_spec.rb b/spec/lib/language_detector_spec.rb index 2e68ec63bc0..5fb19a1e7d4 100644 --- a/spec/lib/language_detector_spec.rb +++ b/spec/lib/language_detector_spec.rb @@ -23,6 +23,18 @@ describe LanguageDetector do expect(result).to be_nil end + describe 'because of a URL' do + it 'uses default locale when sent just a URL' do + string = 'http://example.com/media/2kFTgOJLXhQf0g2nKB4' + wl_result = WhatLanguage.new(:all).language_iso(string) + expect(wl_result).not_to eq :en + + result = described_class.new(string).to_iso_s + + expect(result).to eq :en + end + end + describe 'with an account' do it 'uses the account locale when present' do user = double(:user, locale: 'fr')