Change language opt-out to language opt-in (#7823)

* Switch filtered_languages to chosen_languages

* Adjust interface

* Remove unused translations
master
Eugen Rochko 7 years ago committed by GitHub
parent 31e5d7efd7
commit 7eec279c7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/controllers/settings/preferences_controller.rb
  2. 2
      app/models/account.rb
  3. 6
      app/models/status.rb
  4. 5
      app/models/user.rb
  5. 2
      app/views/settings/preferences/show.html.haml
  6. 3
      config/locales/simple_form.ar.yml
  7. 3
      config/locales/simple_form.ca.yml
  8. 3
      config/locales/simple_form.co.yml
  9. 3
      config/locales/simple_form.de.yml
  10. 6
      config/locales/simple_form.en.yml
  11. 3
      config/locales/simple_form.eo.yml
  12. 3
      config/locales/simple_form.es.yml
  13. 3
      config/locales/simple_form.eu.yml
  14. 3
      config/locales/simple_form.fa.yml
  15. 3
      config/locales/simple_form.fi.yml
  16. 3
      config/locales/simple_form.fr.yml
  17. 3
      config/locales/simple_form.gl.yml
  18. 3
      config/locales/simple_form.he.yml
  19. 3
      config/locales/simple_form.hu.yml
  20. 3
      config/locales/simple_form.it.yml
  21. 3
      config/locales/simple_form.ja.yml
  22. 3
      config/locales/simple_form.ko.yml
  23. 3
      config/locales/simple_form.nl.yml
  24. 3
      config/locales/simple_form.no.yml
  25. 3
      config/locales/simple_form.oc.yml
  26. 3
      config/locales/simple_form.pl.yml
  27. 3
      config/locales/simple_form.pt-BR.yml
  28. 3
      config/locales/simple_form.pt.yml
  29. 3
      config/locales/simple_form.ru.yml
  30. 3
      config/locales/simple_form.sk.yml
  31. 3
      config/locales/simple_form.sr-Latn.yml
  32. 3
      config/locales/simple_form.sr.yml
  33. 3
      config/locales/simple_form.sv.yml
  34. 3
      config/locales/simple_form.zh-CN.yml
  35. 3
      config/locales/simple_form.zh-HK.yml
  36. 3
      config/locales/simple_form.zh-TW.yml
  37. 5
      db/migrate/20180616192031_add_chosen_languages_to_users.rb
  38. 3
      db/schema.rb
  39. 4
      spec/controllers/settings/preferences_controller_spec.rb
  40. 16
      spec/models/status_spec.rb
  41. 4
      spec/models/user_spec.rb

@ -27,7 +27,7 @@ class Settings::PreferencesController < ApplicationController
def user_params def user_params
params.require(:user).permit( params.require(:user).permit(
:locale, :locale,
filtered_languages: [] chosen_languages: []
) )
end end

@ -141,7 +141,7 @@ class Account < ApplicationRecord
prefix: true, prefix: true,
allow_nil: true allow_nil: true
delegate :filtered_languages, to: :user, prefix: false, allow_nil: true delegate :chosen_languages, to: :user, prefix: false, allow_nil: true
def local? def local?
domain.nil? domain.nil?

@ -190,8 +190,8 @@ class Status < ApplicationRecord
before_validation :set_local before_validation :set_local
class << self class << self
def not_in_filtered_languages(account) def in_chosen_languages(account)
where(language: nil).or where.not(language: account.filtered_languages) where(language: nil).or where(language: account.chosen_languages)
end end
def as_home_timeline(account) def as_home_timeline(account)
@ -333,7 +333,7 @@ class Status < ApplicationRecord
def filter_timeline_for_account(query, account, local_only) def filter_timeline_for_account(query, account, local_only)
query = query.not_excluded_by_account(account) query = query.not_excluded_by_account(account)
query = query.not_domain_blocked_by_account(account) unless local_only query = query.not_domain_blocked_by_account(account) unless local_only
query = query.not_in_filtered_languages(account) if account.filtered_languages.present? query = query.in_chosen_languages(account) if account.chosen_languages.present?
query.merge(account_silencing_filter(account)) query.merge(account_silencing_filter(account))
end end

@ -35,6 +35,7 @@
# moderator :boolean default(FALSE), not null # moderator :boolean default(FALSE), not null
# invite_id :bigint(8) # invite_id :bigint(8)
# remember_token :string # remember_token :string
# chosen_languages :string is an Array
# #
class User < ApplicationRecord class User < ApplicationRecord
@ -317,7 +318,9 @@ class User < ApplicationRecord
private private
def sanitize_languages def sanitize_languages
filtered_languages.reject!(&:blank?) return if chosen_languages.nil?
chosen_languages.reject!(&:blank?)
self.chosen_languages = nil if chosen_languages.empty?
end end
def prepare_new_user! def prepare_new_user!

@ -12,7 +12,7 @@
.fields-group .fields-group
= f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: lambda { |locale| human_locale(locale) }, selected: I18n.locale = f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: lambda { |locale| human_locale(locale) }, selected: I18n.locale
= f.input :filtered_languages, collection: filterable_languages, wrapper: :with_block_label, include_blank: false, label_method: lambda { |locale| human_locale(locale) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' = f.input :chosen_languages, collection: filterable_languages.sort, wrapper: :with_block_label, include_blank: false, label_method: lambda { |locale| human_locale(locale) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
%h4= t 'preferences.publishing' %h4= t 'preferences.publishing'

@ -23,8 +23,6 @@ ar:
data: ملف CSV تم تصديره مِن مثيل خادوم ماستدون آخر data: ملف CSV تم تصديره مِن مثيل خادوم ماستدون آخر
sessions: sessions:
otp: 'قم بإدخال رمز المصادقة بخطوتين الذي قام بتوليده تطبيق جهازك أو إستخدم أحد رموز النفاذ الإحتياطية :' otp: 'قم بإدخال رمز المصادقة بخطوتين الذي قام بتوليده تطبيق جهازك أو إستخدم أحد رموز النفاذ الإحتياطية :'
user:
filtered_languages: سوف يتم تصفية و إخفاء اللغات المختارة من خيوطك العمومية
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ ar:
email: عنوان البريد الإلكتروني email: عنوان البريد الإلكتروني
expires_in: تنتهي مدة صلاحيته بعد expires_in: تنتهي مدة صلاحيته بعد
fields: واصفات بيانات الملف الشخصي fields: واصفات بيانات الملف الشخصي
filtered_languages: اللغات التي تم تصفيتها
header: الرأسية header: الرأسية
locale: اللغة locale: اللغة
locked: تجميد الحساب locked: تجميد الحساب

@ -23,8 +23,6 @@ ca:
data: Fitxer CSV exportat des de una altra instància de Mastodon data: Fitxer CSV exportat des de una altra instància de Mastodon
sessions: sessions:
otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:'
user:
filtered_languages: Les llengües seleccionades s'eliminaran de les línies de temps públiques
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ ca:
email: Adreça de correu electrònic email: Adreça de correu electrònic
expires_in: Expira després expires_in: Expira després
fields: Metadades del perfil fields: Metadades del perfil
filtered_languages: Llengües filtrades
header: Capçalera header: Capçalera
locale: Llengua locale: Llengua
locked: Fes aquest compte privat locked: Fes aquest compte privat

@ -22,8 +22,6 @@ co:
data: Un fugliale CSV da un’altr’istanza di Mastodon data: Un fugliale CSV da un’altr’istanza di Mastodon
sessions: sessions:
otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:' otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:'
user:
filtered_languages: Ùn viderete micca e lingue selezziunate nant’à e linee pubbliche
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ co:
email: Indirizzu e-mail email: Indirizzu e-mail
expires_in: Spira dopu à expires_in: Spira dopu à
fields: Metadata di u prufile fields: Metadata di u prufile
filtered_languages: Lingue filtrate
header: Ritrattu di cuprendula header: Ritrattu di cuprendula
locale: Lingua locale: Lingua
locked: Privatizà u contu locked: Privatizà u contu

@ -22,8 +22,6 @@ de:
data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde
sessions: sessions:
otp: 'Gib den Zwei-Faktor-Authentisierungscode von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:' otp: 'Gib den Zwei-Faktor-Authentisierungscode von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:'
user:
filtered_languages: Ausgewählte Sprachen werden aus deinen öffentlichen Zeitleisten gefiltert
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ de:
email: E-Mail-Adresse email: E-Mail-Adresse
expires_in: Gültig bis expires_in: Gültig bis
fields: Profil-Metadaten fields: Profil-Metadaten
filtered_languages: Gefilterte Sprachen
header: Kopfbild header: Kopfbild
locale: Sprache locale: Sprache
locked: Gesperrtes Profil locked: Gesperrtes Profil

@ -24,7 +24,7 @@ en:
sessions: sessions:
otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:'
user: user:
filtered_languages: Checked languages will be filtered from public timelines for you chosen_languages: Only toots in selected languages will be displayed in public timelines. Select nothing to see toots in all languages
labels: labels:
account: account:
fields: fields:
@ -34,6 +34,7 @@ en:
autofollow: Invite to follow your account autofollow: Invite to follow your account
avatar: Avatar avatar: Avatar
bot: This is a bot account bot: This is a bot account
chosen_languages: Filter languages
confirm_new_password: Confirm new password confirm_new_password: Confirm new password
confirm_password: Confirm password confirm_password: Confirm password
current_password: Current password current_password: Current password
@ -42,9 +43,8 @@ en:
email: E-mail address email: E-mail address
expires_in: Expire after expires_in: Expire after
fields: Profile metadata fields: Profile metadata
filtered_languages: Filtered languages
header: Header header: Header
locale: Language locale: Interface language
locked: Lock account locked: Lock account
max_uses: Max number of uses max_uses: Max number of uses
new_password: New password new_password: New password

@ -22,8 +22,6 @@ eo:
data: CSV-dosiero el alia nodo de Mastodon data: CSV-dosiero el alia nodo de Mastodon
sessions: sessions:
otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:' otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:'
user:
filtered_languages: Markitaj lingvoj estos elfiltritaj de publikaj tempolinioj por vi
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ eo:
email: Retadreso email: Retadreso
expires_in: Eksvalidiĝas post expires_in: Eksvalidiĝas post
fields: Profilaj metadatumoj fields: Profilaj metadatumoj
filtered_languages: Filtritaj lingvoj
header: Fonbildo header: Fonbildo
locale: Lingvo locale: Lingvo
locked: Ŝlosi konton locked: Ŝlosi konton

@ -19,8 +19,6 @@ es:
data: Archivo CSV exportado desde otra instancia de Mastodon data: Archivo CSV exportado desde otra instancia de Mastodon
sessions: sessions:
otp: Introduce el código de autenticación de dos factores de tu teléfono o usa uno de tus códigos de recuperación. otp: Introduce el código de autenticación de dos factores de tu teléfono o usa uno de tus códigos de recuperación.
user:
filtered_languages: Los idiomas seleccionados dejarán de mostrarse para ti en las líneas de tiempo públicas
labels: labels:
defaults: defaults:
avatar: Avatar avatar: Avatar
@ -31,7 +29,6 @@ es:
display_name: Nombre para mostrar display_name: Nombre para mostrar
email: Dirección de correo electrónico email: Dirección de correo electrónico
expires_in: Expirar tras expires_in: Expirar tras
filtered_languages: Idiomas filtrados
header: Img. cabecera header: Img. cabecera
locale: Idioma locale: Idioma
locked: Hacer privada esta cuenta locked: Hacer privada esta cuenta

@ -22,8 +22,6 @@ eu:
data: Beste Mastodon instantzia batetik esportatutako CSV fitxategia data: Beste Mastodon instantzia batetik esportatutako CSV fitxategia
sessions: sessions:
otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:' otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:'
user:
filtered_languages: Ez dira aukeratutako hizkuntzak erakutsiko zure denbora-lerro publikoetan
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ eu:
email: E-mail helbidea email: E-mail helbidea
expires_in: Iraungitzea expires_in: Iraungitzea
fields: Profilaren metadatuak fields: Profilaren metadatuak
filtered_languages: Iragazitako hizkuntzak
header: Goiburua header: Goiburua
locale: Hizkuntza locale: Hizkuntza
locked: Giltzapetu kontua locked: Giltzapetu kontua

@ -23,8 +23,6 @@ fa:
data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده
sessions: sessions:
otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:'
user:
filtered_languages: زبانهای انتخابشده از فهرست عمومی نوشتههایی که میبینید حذف میشوند
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ fa:
email: نشانی ایمیل email: نشانی ایمیل
expires_in: تاریخ انقضا expires_in: تاریخ انقضا
fields: اطلاعات تکمیلی نمایه fields: اطلاعات تکمیلی نمایه
filtered_languages: زبانهای فیلترشده
header: تصویر زمینه header: تصویر زمینه
locale: زبان locale: زبان
locked: خصوصیکردن حساب locked: خصوصیکردن حساب

@ -20,8 +20,6 @@ fi:
data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto
sessions: sessions:
otp: Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia. otp: Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia.
user:
filtered_languages: Valitut kielet suodatetaan pois julkisilta aikajanoilta
labels: labels:
account: account:
fields: fields:
@ -36,7 +34,6 @@ fi:
email: Sähköpostiosoite email: Sähköpostiosoite
expires_in: Vanhenee expires_in: Vanhenee
fields: Profiilin metadata fields: Profiilin metadata
filtered_languages: Suodatetut kielet
header: Otsakekuva header: Otsakekuva
locale: Kieli locale: Kieli
locked: Lukitse tili locked: Lukitse tili

@ -22,8 +22,6 @@ fr:
data: Un fichier CSV généré par une autre instance de Mastodon data: Un fichier CSV généré par une autre instance de Mastodon
sessions: sessions:
otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :' otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :'
user:
filtered_languages: Les langues sélectionnées seront filtrées hors de vos fils publics pour vous
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ fr:
email: Adresse courriel email: Adresse courriel
expires_in: Expire après expires_in: Expire après
fields: Métadonnées du profil fields: Métadonnées du profil
filtered_languages: Langues filtrées
header: Image d’en-tête header: Image d’en-tête
locale: Langue locale: Langue
locked: Verrouiller le compte locked: Verrouiller le compte

@ -22,8 +22,6 @@ gl:
data: Ficheiro CSV exportado desde outra instancia Mastodon data: Ficheiro CSV exportado desde outra instancia Mastodon
sessions: sessions:
otp: Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación. otp: Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación.
user:
filtered_languages: Os idiomas marcados filtraranse das liñas temporais públicas para vostede
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ gl:
email: enderezo correo electrónico email: enderezo correo electrónico
expires_in: Caducidade despois de expires_in: Caducidade despois de
fields: Metadatos do perfil fields: Metadatos do perfil
filtered_languages: Idiomas filtrados
header: Cabeceira header: Cabeceira
locale: Idioma locale: Idioma
locked: Protexer conta locked: Protexer conta

@ -19,8 +19,6 @@ he:
data: קובץ CSV שיוצא משרת מסטודון אחר data: קובץ CSV שיוצא משרת מסטודון אחר
sessions: sessions:
otp: נא להקליד קוד אימות דו-שלבי ממכשירך או קוד אחזור גישה. otp: נא להקליד קוד אימות דו-שלבי ממכשירך או קוד אחזור גישה.
user:
filtered_languages: שפות שנבחרו יוסתרו מציר הזמן הציבורי בשבילך
labels: labels:
defaults: defaults:
avatar: תמונת פרופיל avatar: תמונת פרופיל
@ -31,7 +29,6 @@ he:
display_name: שם להצגה display_name: שם להצגה
email: כתובת דוא"ל email: כתובת דוא"ל
expires_in: תפוגה לאחר expires_in: תפוגה לאחר
filtered_languages: שפות מסוננות
header: ראשה header: ראשה
locale: שפה locale: שפה
locked: הפוך חשבון לפרטי locked: הפוך חשבון לפרטי

@ -19,8 +19,6 @@ hu:
data: Egy másik Mastodon szerverről exportált CSV fájl data: Egy másik Mastodon szerverről exportált CSV fájl
sessions: sessions:
otp: Add meg a Második-faktor kódodat a telefonodról vagy használd az egyik tartalék bejelentkező kódodat. otp: Add meg a Második-faktor kódodat a telefonodról vagy használd az egyik tartalék bejelentkező kódodat.
user:
filtered_languages: A kiválasztott nyelvek nem jelennek majd meg a nyilvános idővonaladon
labels: labels:
defaults: defaults:
avatar: Profilkép avatar: Profilkép
@ -31,7 +29,6 @@ hu:
display_name: Megjelenített név display_name: Megjelenített név
email: E-mail cím email: E-mail cím
expires_in: Elévül expires_in: Elévül
filtered_languages: Szűrt nyelvek
header: Fejléc header: Fejléc
locale: Nyelv locale: Nyelv
locked: Zárt felhasználói fiók locked: Zárt felhasználói fiók

@ -22,8 +22,6 @@ it:
data: File CSV esportato da un'altra istanza di Mastodon data: File CSV esportato da un'altra istanza di Mastodon
sessions: sessions:
otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:' otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:'
user:
filtered_languages: Le lingue selezionate verranno filtrate dalla tua timeline pubblica
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ it:
email: Indirizzo email email: Indirizzo email
expires_in: Scade dopo expires_in: Scade dopo
fields: Metadati del profilo fields: Metadati del profilo
filtered_languages: Lingue filtrate
header: Header header: Header
locale: Lingua locale: Lingua
locked: Blocca account locked: Blocca account

@ -19,8 +19,6 @@ ja:
data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい
sessions: sessions:
otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:'
user:
filtered_languages: 選択した言語があなたの公開タイムラインから取り除かれます
labels: labels:
account: account:
fields: fields:
@ -38,7 +36,6 @@ ja:
email: メールアドレス email: メールアドレス
expires_in: 有効期限 expires_in: 有効期限
fields: プロフィール補足情報 fields: プロフィール補足情報
filtered_languages: 除外する言語
header: ヘッダー header: ヘッダー
locale: 言語 locale: 言語
locked: 承認制アカウントにする locked: 承認制アカウントにする

@ -23,8 +23,6 @@ ko:
data: 다른 마스토돈 인스턴스에서 추출된 CSV 파일 data: 다른 마스토돈 인스턴스에서 추출된 CSV 파일
sessions: sessions:
otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:'
user:
filtered_languages: 선택된 언어가 공개 타임라인에서 제외 될 것입니다
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ ko:
email: 이메일 주소 email: 이메일 주소
expires_in: 만료시각 expires_in: 만료시각
fields: 프로필 메타데이터 fields: 프로필 메타데이터
filtered_languages: 숨긴 언어들
header: 헤더 header: 헤더
locale: 언어 locale: 언어
locked: 계정 잠금 locked: 계정 잠금

@ -23,8 +23,6 @@ nl:
data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd
sessions: sessions:
otp: Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes. otp: Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes.
user:
filtered_languages: Geselecteerde talen worden uit de lokale en globale tijdlijn verwijderd
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ nl:
email: E-mailadres email: E-mailadres
expires_in: Vervalt na expires_in: Vervalt na
fields: Metadata profiel fields: Metadata profiel
filtered_languages: Gefilterde talen
header: Omslagfoto header: Omslagfoto
locale: Taal locale: Taal
locked: Maak account besloten locked: Maak account besloten

@ -19,8 +19,6 @@
data: CSV-fil eksportert fra en annen Mastodon-instans data: CSV-fil eksportert fra en annen Mastodon-instans
sessions: sessions:
otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder.
user:
filtered_languages: Språk som er avhuket vil ikke vises på offentlige tidslinjer fra deg
labels: labels:
defaults: defaults:
avatar: Avatar avatar: Avatar
@ -31,7 +29,6 @@
display_name: Visningsnavn display_name: Visningsnavn
email: E-postadresse email: E-postadresse
expires_in: Utløper etter expires_in: Utløper etter
filtered_languages: Filtrerte språk
header: Overskrift header: Overskrift
locale: Språk locale: Språk
locked: Lås konto locked: Lås konto

@ -23,8 +23,6 @@ oc:
data: Fichièr CSV exportat d’una autra instància Mastodon data: Fichièr CSV exportat d’una autra instància Mastodon
sessions: sessions:
otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :' otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :'
user:
filtered_languages: Las lengas seleccionadas seràn levadas de vòstre flux d’actualitat
labels: labels:
account: account:
fields: fields:
@ -42,7 +40,6 @@ oc:
email: Corrièl email: Corrièl
expires_in: Expira aprèp expires_in: Expira aprèp
fields: Metadonada del perfil fields: Metadonada del perfil
filtered_languages: Lengas filtradas
header: Bandièra header: Bandièra
locale: Lenga locale: Lenga
locked: Far venir lo compte privat locked: Far venir lo compte privat

@ -26,8 +26,6 @@ pl:
data: Plik CSV wyeksportowany z innej instancji Mastodona data: Plik CSV wyeksportowany z innej instancji Mastodona
sessions: sessions:
otp: 'Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych:' otp: 'Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych:'
user:
filtered_languages: Wpisy w wybranych językach nie będą wyświetlać się na publicznych osiach czasu
labels: labels:
account: account:
fields: fields:
@ -44,7 +42,6 @@ pl:
email: Adres e-mail email: Adres e-mail
expires_in: Wygaśnie po expires_in: Wygaśnie po
fields: Metadane profilu fields: Metadane profilu
filtered_languages: Filtrowane języki
header: Nagłówek header: Nagłówek
locale: Język locale: Język
locked: Ustaw konto jako prywatne locked: Ustaw konto jako prywatne

@ -22,8 +22,6 @@ pt-BR:
data: Arquivo CSV exportado de outra instância do Mastodon data: Arquivo CSV exportado de outra instância do Mastodon
sessions: sessions:
otp: 'Insira o código de autenticação gerado pelo app no seu celular ou use um dos códigos de recuperação:' otp: 'Insira o código de autenticação gerado pelo app no seu celular ou use um dos códigos de recuperação:'
user:
filtered_languages: Selecione os idiomas que devem ser removidos de suas timelines públicas
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ pt-BR:
email: Endereço de e-mail email: Endereço de e-mail
expires_in: Expira em expires_in: Expira em
fields: Metadados do perfil fields: Metadados do perfil
filtered_languages: Idiomas filtrados
header: Cabeçalho header: Cabeçalho
locale: Idioma locale: Idioma
locked: Trancar conta locked: Trancar conta

@ -19,8 +19,6 @@ pt:
data: Arquivo CSV exportado de outra instância do Mastodon data: Arquivo CSV exportado de outra instância do Mastodon
sessions: sessions:
otp: Inserir o código de autenticação de dois factores do teu telemóvel ou usa um dos códigos de recuperação. otp: Inserir o código de autenticação de dois factores do teu telemóvel ou usa um dos códigos de recuperação.
user:
filtered_languages: Seleciona os idiomas que devem ser removidos das tuas timelines públicas
labels: labels:
defaults: defaults:
avatar: Imagem de Perfil avatar: Imagem de Perfil
@ -31,7 +29,6 @@ pt:
display_name: Nome Público display_name: Nome Público
email: Endereço de e-mail email: Endereço de e-mail
expires_in: Expira em expires_in: Expira em
filtered_languages: Idiomas filtrados
header: Cabeçalho header: Cabeçalho
locale: Idioma locale: Idioma
locked: Trancar conta locked: Trancar conta

@ -26,8 +26,6 @@ ru:
data: Файл CSV, экспортированный с другого узла Mastodon data: Файл CSV, экспортированный с другого узла Mastodon
sessions: sessions:
otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из Ваших кодов восстановления:' otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из Ваших кодов восстановления:'
user:
filtered_languages: Выбранные языки будут убраны из Ваших публичных лет.
labels: labels:
account: account:
fields: fields:
@ -44,7 +42,6 @@ ru:
email: Адрес e-mail email: Адрес e-mail
expires_in: Срок действия expires_in: Срок действия
fields: Метаданные профиля fields: Метаданные профиля
filtered_languages: Фильтруемые языки
header: Заголовок header: Заголовок
locale: Язык locale: Язык
locked: Сделать аккаунт закрытым locked: Сделать аккаунт закрытым

@ -25,8 +25,6 @@ sk:
data: CSV súbor vyexportovaný z inej Mastodon inštancie data: CSV súbor vyexportovaný z inej Mastodon inštancie
sessions: sessions:
otp: 'Napíš sem dvoj-faktorový kód z telefónu, alebo použi jeden z tvojích obnovovacích kódov:' otp: 'Napíš sem dvoj-faktorový kód z telefónu, alebo použi jeden z tvojích obnovovacích kódov:'
user:
filtered_languages: Zaškrtnuté jazyky budú pre teba vynechané z verejnej časovej osi
labels: labels:
account: account:
fields: fields:
@ -44,7 +42,6 @@ sk:
email: Emailová adresa email: Emailová adresa
expires_in: Expirovať po expires_in: Expirovať po
fields: Metadáta profilu fields: Metadáta profilu
filtered_languages: Vynechanie jazykov
header: Obrázok v hlavičke header: Obrázok v hlavičke
locale: Jazyk locale: Jazyk
locked: Zamknúť účet locked: Zamknúť účet

@ -23,8 +23,6 @@ sr-Latn:
data: CSV fajl izvezen sa druge Mastodont instance data: CSV fajl izvezen sa druge Mastodont instance
sessions: sessions:
otp: Unesite dvofaktorski kod sa Vašeg telefona ili koristite jedan od kodova za oporavak. otp: Unesite dvofaktorski kod sa Vašeg telefona ili koristite jedan od kodova za oporavak.
user:
filtered_languages: Označeni jezici će za Vas biti isfiltrirani sa javnih lajni
labels: labels:
defaults: defaults:
avatar: Avatar avatar: Avatar
@ -35,7 +33,6 @@ sr-Latn:
display_name: Ime za prikaz display_name: Ime za prikaz
email: Adresa e-pošte email: Adresa e-pošte
expires_in: Ističe nakon expires_in: Ističe nakon
filtered_languages: Filtrirani jezici
header: Zaglavlje header: Zaglavlje
locale: Jezik locale: Jezik
locked: Zaključaj nalog locked: Zaključaj nalog

@ -23,8 +23,6 @@ sr:
data: CSV фајл извезен са друге Мастодонт инстанце data: CSV фајл извезен са друге Мастодонт инстанце
sessions: sessions:
otp: Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак. otp: Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак.
user:
filtered_languages: Означени језици ће за Вас бити исфилтрирани са јавних лајни
labels: labels:
defaults: defaults:
avatar: Аватар avatar: Аватар
@ -35,7 +33,6 @@ sr:
display_name: Име за приказ display_name: Име за приказ
email: Адреса е-поште email: Адреса е-поште
expires_in: Истиче након expires_in: Истиче након
filtered_languages: Филтрирани језици
header: Заглавље header: Заглавље
locale: Језик locale: Језик
locked: Закључај налог locked: Закључај налог

@ -22,8 +22,6 @@ sv:
data: CSV-fil som exporteras från en annan Mastodon-instans data: CSV-fil som exporteras från en annan Mastodon-instans
sessions: sessions:
otp: 'Ange tvåfaktorkoden genererad från din telefonapp eller använd någon av dina återställningskoder:' otp: 'Ange tvåfaktorkoden genererad från din telefonapp eller använd någon av dina återställningskoder:'
user:
filtered_languages: Kontrollerade språk filtreras från offentliga tidslinjer för dig
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ sv:
email: E-postadress email: E-postadress
expires_in: Förfaller efter expires_in: Förfaller efter
fields: Profil-metadata fields: Profil-metadata
filtered_languages: Filtrerade språk
header: Bakgrundsbild header: Bakgrundsbild
locale: Språk locale: Språk
locked: Lås konto locked: Lås konto

@ -19,8 +19,6 @@ zh-CN:
data: 请上传从其他 Mastodon 实例导出的 CSV 文件 data: 请上传从其他 Mastodon 实例导出的 CSV 文件
sessions: sessions:
otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码: otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码:
user:
filtered_languages: 被勾选语言的嘟文将不会出现在你的公共时间轴上
labels: labels:
account: account:
fields: fields:
@ -38,7 +36,6 @@ zh-CN:
email: 电子邮件地址 email: 电子邮件地址
expires_in: 失效时间 expires_in: 失效时间
fields: 个人资料附加信息 fields: 个人资料附加信息
filtered_languages: 语言过滤
header: 个人资料页横幅图片 header: 个人资料页横幅图片
locale: 语言 locale: 语言
locked: 保护你的帐户(锁嘟) locked: 保护你的帐户(锁嘟)

@ -22,8 +22,6 @@ zh-HK:
data: 自其他服務站匯出的 CSV 檔案 data: 自其他服務站匯出的 CSV 檔案
sessions: sessions:
otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼: otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼:
user:
filtered_languages: 下面被選擇的語言的文章將不會出現在你的公共時間軸上
labels: labels:
account: account:
fields: fields:
@ -40,7 +38,6 @@ zh-HK:
email: 電郵地址 email: 電郵地址
expires_in: 失效時間 expires_in: 失效時間
fields: 資料 fields: 資料
filtered_languages: 封鎖下面語言的文章
header: 個人頁面頂部 header: 個人頁面頂部
locale: 語言 locale: 語言
locked: 將用戶轉為「私人」 locked: 將用戶轉為「私人」

@ -10,8 +10,6 @@ zh-TW:
note: 最多 160 個字元 note: 最多 160 個字元
imports: imports:
data: 自其他服務站匯出的 CSV 檔案 data: 自其他服務站匯出的 CSV 檔案
user:
filtered_languages: 下面被選擇的語言的文章將不會出現在你的公共時間軸上。
labels: labels:
defaults: defaults:
avatar: 大頭貼 avatar: 大頭貼
@ -21,7 +19,6 @@ zh-TW:
data: 資料 data: 資料
display_name: 顯示名稱 display_name: 顯示名稱
email: 電子信箱 email: 電子信箱
filtered_languages: 封鎖下面語言的文章
header: 個人頁面頂部 header: 個人頁面頂部
locale: 語言 locale: 語言
locked: 將帳號轉為「私密」 locked: 將帳號轉為「私密」

@ -0,0 +1,5 @@
class AddChosenLanguagesToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :chosen_languages, :string, array: true, null: true, default: nil
end
end

@ -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: 2018_06_15_122121) do ActiveRecord::Schema.define(version: 2018_06_16_192031) 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"
@ -525,6 +525,7 @@ ActiveRecord::Schema.define(version: 2018_06_15_122121) do
t.boolean "moderator", default: false, null: false t.boolean "moderator", default: false, null: false
t.bigint "invite_id" t.bigint "invite_id"
t.string "remember_token" t.string "remember_token"
t.string "chosen_languages", array: true
t.index ["account_id"], name: "index_users_on_account_id" t.index ["account_id"], name: "index_users_on_account_id"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["email"], name: "index_users_on_email", unique: true t.index ["email"], name: "index_users_on_email", unique: true

@ -18,12 +18,12 @@ describe Settings::PreferencesController do
describe 'PUT #update' do describe 'PUT #update' do
it 'updates the user record' do it 'updates the user record' do
put :update, params: { user: { locale: 'en', filtered_languages: ['es', 'fr', ''] } } put :update, params: { user: { locale: 'en', chosen_languages: ['es', 'fr', ''] } }
expect(response).to redirect_to(settings_preferences_path) expect(response).to redirect_to(settings_preferences_path)
user.reload user.reload
expect(user.locale).to eq 'en' expect(user.locale).to eq 'en'
expect(user.filtered_languages).to eq ['es', 'fr'] expect(user.chosen_languages).to eq ['es', 'fr']
end end
it 'updates user settings' do it 'updates user settings' do

@ -259,18 +259,18 @@ RSpec.describe Status, type: :model do
end end
end end
describe '.not_in_filtered_languages' do describe '.in_chosen_languages' do
context 'for accounts with language filters' do context 'for accounts with language filters' do
let(:user) { Fabricate(:user, filtered_languages: ['en']) } let(:user) { Fabricate(:user, chosen_languages: ['en']) }
it 'does not include statuses in filtered languages' do it 'does not include statuses in not in chosen languages' do
status = Fabricate(:status, language: 'en') status = Fabricate(:status, language: 'de')
expect(Status.not_in_filtered_languages(user.account)).not_to include status expect(Status.in_chosen_languages(user.account)).not_to include status
end end
it 'includes status with unknown language' do it 'includes status with unknown language' do
status = Fabricate(:status, language: nil) status = Fabricate(:status, language: nil)
expect(Status.not_in_filtered_languages(user.account)).to include status expect(Status.in_chosen_languages(user.account)).to include status
end end
end end
end end
@ -518,7 +518,7 @@ RSpec.describe Status, type: :model do
context 'with language preferences' do context 'with language preferences' do
it 'excludes statuses in languages not allowed by the account user' do it 'excludes statuses in languages not allowed by the account user' do
user = Fabricate(:user, filtered_languages: [:fr]) user = Fabricate(:user, chosen_languages: [:en, :es])
@account.update(user: user) @account.update(user: user)
en_status = Fabricate(:status, language: 'en') en_status = Fabricate(:status, language: 'en')
es_status = Fabricate(:status, language: 'es') es_status = Fabricate(:status, language: 'es')
@ -531,7 +531,7 @@ RSpec.describe Status, type: :model do
end end
it 'includes all languages when user does not have a setting' do it 'includes all languages when user does not have a setting' do
user = Fabricate(:user, filtered_languages: []) user = Fabricate(:user, chosen_languages: nil)
@account.update(user: user) @account.update(user: user)
en_status = Fabricate(:status, language: 'en') en_status = Fabricate(:status, language: 'en')

@ -41,9 +41,9 @@ RSpec.describe User, type: :model do
end end
it 'cleans out empty string from languages' do it 'cleans out empty string from languages' do
user = Fabricate.build(:user, filtered_languages: ['']) user = Fabricate.build(:user, chosen_languages: [''])
user.valid? user.valid?
expect(user.filtered_languages).to eq [] expect(user.chosen_languages).to eq nil
end end
end end

Loading…
Cancel
Save