Language detection defaults to nil (#3666)

* Default to nil for statuses.language

* Language detection defaults to nil instead of instance UI default
signup-info-prompt
Matt Jankowski 2017-06-09 12:09:37 -04:00 committed by Eugen Rochko
parent a3715598cc
commit 022008a2a6
5 changed files with 21 additions and 16 deletions

View File

@ -10,7 +10,7 @@ class LanguageDetector
end end
def to_iso_s def to_iso_s
detected_language_code || default_locale.to_sym detected_language_code || default_locale
end end
def prepared_text def prepared_text
@ -43,6 +43,6 @@ class LanguageDetector
end end
def default_locale def default_locale
account&.user_locale || I18n.default_locale account&.user_locale&.to_sym || nil
end end
end end

View File

@ -20,7 +20,7 @@
# reply :boolean default(FALSE) # reply :boolean default(FALSE)
# favourites_count :integer default(0), not null # favourites_count :integer default(0), not null
# reblogs_count :integer default(0), not null # reblogs_count :integer default(0), not null
# language :string default("en"), not null # language :string
# conversation_id :integer # conversation_id :integer
# #

View File

@ -0,0 +1,5 @@
class RemoveDefaultLanguageFromStatuses < ActiveRecord::Migration[5.1]
def change
change_column :statuses, :language, :string, default: nil, null: true
end
end

View File

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170606113804) do ActiveRecord::Schema.define(version: 20170609145826) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -277,7 +277,7 @@ ActiveRecord::Schema.define(version: 20170606113804) do
t.boolean "reply", default: false t.boolean "reply", default: false
t.integer "favourites_count", default: 0, null: false t.integer "favourites_count", default: 0, null: false
t.integer "reblogs_count", default: 0, null: false t.integer "reblogs_count", default: 0, null: false
t.string "language", default: "en", null: false t.string "language"
t.bigint "conversation_id" t.bigint "conversation_id"
t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["account_id"], name: "index_statuses_on_account_id"
t.index ["conversation_id"], name: "index_statuses_on_conversation_id" t.index ["conversation_id"], name: "index_statuses_on_conversation_id"

View File

@ -43,7 +43,7 @@ describe LanguageDetector do
describe 'to_iso_s' do describe 'to_iso_s' do
it 'detects english language for basic strings' do it 'detects english language for basic strings' do
strings = [ strings = [
"Hello and welcome to mastodon", "Hello and welcome to mastodon how are you today?",
"I'd rather not!", "I'd rather not!",
"a lot of people just want to feel righteous all the time and that's all that matters", "a lot of people just want to feel righteous all the time and that's all that matters",
] ]
@ -62,20 +62,20 @@ describe LanguageDetector do
end end
describe 'when language can\'t be detected' do describe 'when language can\'t be detected' do
it 'uses default locale when sent an empty document' do it 'uses nil when sent an empty document' do
result = described_class.new('').to_iso_s result = described_class.new('').to_iso_s
expect(result).to eq :en expect(result).to eq nil
end end
describe 'because of a URL' do describe 'because of a URL' do
it 'uses default locale when sent just a URL' do it 'uses nil when sent just a URL' do
string = 'http://example.com/media/2kFTgOJLXhQf0g2nKB4' string = 'http://example.com/media/2kFTgOJLXhQf0g2nKB4'
cld_result = CLD3::NNetLanguageIdentifier.new(0, 2048).find_language(string) cld_result = CLD3::NNetLanguageIdentifier.new(0, 2048).find_language(string)
expect(cld_result).not_to eq :en expect(cld_result).not_to eq :en
result = described_class.new(string).to_iso_s result = described_class.new(string).to_iso_s
expect(result).to eq :en expect(result).to eq nil
end end
end end
@ -87,20 +87,20 @@ describe LanguageDetector do
expect(result).to eq :fr expect(result).to eq :fr
end end
it 'uses default locale when account is present but has no locale' do it 'uses nil when account is present but has no locale' do
account = double(user_locale: nil) account = double(user_locale: nil)
result = described_class.new('', account).to_iso_s result = described_class.new('', account).to_iso_s
expect(result).to eq :en expect(result).to eq nil
end end
end end
describe 'with an `en` default locale' do describe 'with an `en` default locale' do
it 'uses the default locale' do it 'uses nil for undetectable string' do
string = '' string = ''
result = described_class.new(string).to_iso_s result = described_class.new(string).to_iso_s
expect(result).to eq :en expect(result).to eq nil
end end
end end
@ -112,11 +112,11 @@ describe LanguageDetector do
I18n.default_locale = before I18n.default_locale = before
end end
it 'uses the default locale' do it 'uses nil for undetectable string' do
string = '' string = ''
result = described_class.new(string).to_iso_s result = described_class.new(string).to_iso_s
expect(result).to eq :ja expect(result).to eq nil
end end
end end
end end