Change language opt-out to language opt-in (#7823)
* Switch filtered_languages to chosen_languages * Adjust interface * Remove unused translations
This commit is contained in:
		| @@ -27,7 +27,7 @@ class Settings::PreferencesController < ApplicationController | ||||
|   def user_params | ||||
|     params.require(:user).permit( | ||||
|       :locale, | ||||
|       filtered_languages: [] | ||||
|       chosen_languages: [] | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -141,7 +141,7 @@ class Account < ApplicationRecord | ||||
|            prefix: 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? | ||||
|     domain.nil? | ||||
|   | ||||
| @@ -190,8 +190,8 @@ class Status < ApplicationRecord | ||||
|   before_validation :set_local | ||||
|  | ||||
|   class << self | ||||
|     def not_in_filtered_languages(account) | ||||
|       where(language: nil).or where.not(language: account.filtered_languages) | ||||
|     def in_chosen_languages(account) | ||||
|       where(language: nil).or where(language: account.chosen_languages) | ||||
|     end | ||||
|  | ||||
|     def as_home_timeline(account) | ||||
| @@ -333,7 +333,7 @@ class Status < ApplicationRecord | ||||
|     def filter_timeline_for_account(query, account, local_only) | ||||
|       query = query.not_excluded_by_account(account) | ||||
|       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)) | ||||
|     end | ||||
|  | ||||
|   | ||||
| @@ -35,6 +35,7 @@ | ||||
| #  moderator                 :boolean          default(FALSE), not null | ||||
| #  invite_id                 :bigint(8) | ||||
| #  remember_token            :string | ||||
| #  chosen_languages          :string           is an Array | ||||
| # | ||||
|  | ||||
| class User < ApplicationRecord | ||||
| @@ -317,7 +318,9 @@ class User < ApplicationRecord | ||||
|   private | ||||
|  | ||||
|   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 | ||||
|  | ||||
|   def prepare_new_user! | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|   .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 :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' | ||||
|  | ||||
|   | ||||
| @@ -23,8 +23,6 @@ ar: | ||||
|         data: ملف CSV تم تصديره مِن مثيل خادوم ماستدون آخر | ||||
|       sessions: | ||||
|         otp: 'قم بإدخال رمز المصادقة بخطوتين الذي قام بتوليده تطبيق جهازك أو إستخدم أحد رموز النفاذ الإحتياطية :' | ||||
|       user: | ||||
|         filtered_languages: سوف يتم تصفية و إخفاء اللغات المختارة من خيوطك العمومية | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ ar: | ||||
|         email: عنوان البريد الإلكتروني | ||||
|         expires_in: تنتهي مدة صلاحيته بعد | ||||
|         fields: واصفات بيانات الملف الشخصي | ||||
|         filtered_languages: اللغات التي تم تصفيتها | ||||
|         header: الرأسية | ||||
|         locale: اللغة | ||||
|         locked: تجميد الحساب | ||||
|   | ||||
| @@ -23,8 +23,6 @@ ca: | ||||
|         data: Fitxer CSV exportat des de una altra instància de Mastodon | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ ca: | ||||
|         email: Adreça de correu electrònic | ||||
|         expires_in: Expira després | ||||
|         fields: Metadades del perfil | ||||
|         filtered_languages: Llengües filtrades | ||||
|         header: Capçalera | ||||
|         locale: Llengua | ||||
|         locked: Fes aquest compte privat | ||||
|   | ||||
| @@ -22,8 +22,6 @@ co: | ||||
|         data: Un fugliale CSV da un’altr’istanza di Mastodon | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ co: | ||||
|         email: Indirizzu e-mail | ||||
|         expires_in: Spira dopu à | ||||
|         fields: Metadata di u prufile | ||||
|         filtered_languages: Lingue filtrate | ||||
|         header: Ritrattu di cuprendula | ||||
|         locale: Lingua | ||||
|         locked: Privatizà u contu | ||||
|   | ||||
| @@ -22,8 +22,6 @@ de: | ||||
|         data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ de: | ||||
|         email: E-Mail-Adresse | ||||
|         expires_in: Gültig bis | ||||
|         fields: Profil-Metadaten | ||||
|         filtered_languages: Gefilterte Sprachen | ||||
|         header: Kopfbild | ||||
|         locale: Sprache | ||||
|         locked: Gesperrtes Profil | ||||
|   | ||||
| @@ -24,7 +24,7 @@ en: | ||||
|       sessions: | ||||
|         otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' | ||||
|       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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -34,6 +34,7 @@ en: | ||||
|         autofollow: Invite to follow your account | ||||
|         avatar: Avatar | ||||
|         bot: This is a bot account | ||||
|         chosen_languages: Filter languages | ||||
|         confirm_new_password: Confirm new password | ||||
|         confirm_password: Confirm password | ||||
|         current_password: Current password | ||||
| @@ -42,9 +43,8 @@ en: | ||||
|         email: E-mail address | ||||
|         expires_in: Expire after | ||||
|         fields: Profile metadata | ||||
|         filtered_languages: Filtered languages | ||||
|         header: Header | ||||
|         locale: Language | ||||
|         locale: Interface language | ||||
|         locked: Lock account | ||||
|         max_uses: Max number of uses | ||||
|         new_password: New password | ||||
|   | ||||
| @@ -22,8 +22,6 @@ eo: | ||||
|         data: CSV-dosiero el alia nodo de Mastodon | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ eo: | ||||
|         email: Retadreso | ||||
|         expires_in: Eksvalidiĝas post | ||||
|         fields: Profilaj metadatumoj | ||||
|         filtered_languages: Filtritaj lingvoj | ||||
|         header: Fonbildo | ||||
|         locale: Lingvo | ||||
|         locked: Ŝlosi konton | ||||
|   | ||||
| @@ -19,8 +19,6 @@ es: | ||||
|         data: Archivo CSV exportado desde otra instancia de Mastodon | ||||
|       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. | ||||
|       user: | ||||
|         filtered_languages: Los idiomas seleccionados dejarán de mostrarse para ti en las líneas de tiempo públicas | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: Avatar | ||||
| @@ -31,7 +29,6 @@ es: | ||||
|         display_name: Nombre para mostrar | ||||
|         email: Dirección de correo electrónico | ||||
|         expires_in: Expirar tras | ||||
|         filtered_languages: Idiomas filtrados | ||||
|         header: Img. cabecera | ||||
|         locale: Idioma | ||||
|         locked: Hacer privada esta cuenta | ||||
|   | ||||
| @@ -22,8 +22,6 @@ eu: | ||||
|         data: Beste Mastodon instantzia batetik esportatutako CSV fitxategia | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ eu: | ||||
|         email: E-mail helbidea | ||||
|         expires_in: Iraungitzea | ||||
|         fields: Profilaren metadatuak | ||||
|         filtered_languages: Iragazitako hizkuntzak | ||||
|         header: Goiburua | ||||
|         locale: Hizkuntza | ||||
|         locked: Giltzapetu kontua | ||||
|   | ||||
| @@ -23,8 +23,6 @@ fa: | ||||
|         data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده | ||||
|       sessions: | ||||
|         otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' | ||||
|       user: | ||||
|         filtered_languages: زبانهای انتخابشده از فهرست عمومی نوشتههایی که میبینید حذف میشوند | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ fa: | ||||
|         email: نشانی ایمیل | ||||
|         expires_in: تاریخ انقضا | ||||
|         fields: اطلاعات تکمیلی نمایه | ||||
|         filtered_languages: زبانهای فیلترشده | ||||
|         header: تصویر زمینه | ||||
|         locale: زبان | ||||
|         locked: خصوصیکردن حساب | ||||
|   | ||||
| @@ -20,8 +20,6 @@ fi: | ||||
|         data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto | ||||
|       sessions: | ||||
|         otp: Syötä puhelimeen saamasi kaksivaiheisen tunnistautumisen koodi tai käytä palautuskoodia. | ||||
|       user: | ||||
|         filtered_languages: Valitut kielet suodatetaan pois julkisilta aikajanoilta | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -36,7 +34,6 @@ fi: | ||||
|         email: Sähköpostiosoite | ||||
|         expires_in: Vanhenee | ||||
|         fields: Profiilin metadata | ||||
|         filtered_languages: Suodatetut kielet | ||||
|         header: Otsakekuva | ||||
|         locale: Kieli | ||||
|         locked: Lukitse tili | ||||
|   | ||||
| @@ -22,8 +22,6 @@ fr: | ||||
|         data: Un fichier CSV généré par une autre instance de Mastodon | ||||
|       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 :' | ||||
|       user: | ||||
|         filtered_languages: Les langues sélectionnées seront filtrées hors de vos fils publics pour vous | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ fr: | ||||
|         email: Adresse courriel | ||||
|         expires_in: Expire après | ||||
|         fields: Métadonnées du profil | ||||
|         filtered_languages: Langues filtrées | ||||
|         header: Image d’en-tête | ||||
|         locale: Langue | ||||
|         locked: Verrouiller le compte | ||||
|   | ||||
| @@ -22,8 +22,6 @@ gl: | ||||
|         data: Ficheiro CSV exportado desde outra instancia Mastodon | ||||
|       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. | ||||
|       user: | ||||
|         filtered_languages: Os idiomas marcados filtraranse das liñas temporais públicas para vostede | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ gl: | ||||
|         email: enderezo correo electrónico | ||||
|         expires_in: Caducidade despois de | ||||
|         fields: Metadatos do perfil | ||||
|         filtered_languages: Idiomas filtrados | ||||
|         header: Cabeceira | ||||
|         locale: Idioma | ||||
|         locked: Protexer conta | ||||
|   | ||||
| @@ -19,8 +19,6 @@ he: | ||||
|         data: קובץ CSV שיוצא משרת מסטודון אחר | ||||
|       sessions: | ||||
|         otp: נא להקליד קוד אימות דו-שלבי ממכשירך או קוד אחזור גישה. | ||||
|       user: | ||||
|         filtered_languages: שפות שנבחרו יוסתרו מציר הזמן הציבורי בשבילך | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: תמונת פרופיל | ||||
| @@ -31,7 +29,6 @@ he: | ||||
|         display_name: שם להצגה | ||||
|         email: כתובת דוא"ל | ||||
|         expires_in: תפוגה לאחר | ||||
|         filtered_languages: שפות מסוננות | ||||
|         header: ראשה | ||||
|         locale: שפה | ||||
|         locked: הפוך חשבון לפרטי | ||||
|   | ||||
| @@ -19,8 +19,6 @@ hu: | ||||
|         data: Egy másik Mastodon szerverről exportált CSV fájl | ||||
|       sessions: | ||||
|         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: | ||||
|       defaults: | ||||
|         avatar: Profilkép | ||||
| @@ -31,7 +29,6 @@ hu: | ||||
|         display_name: Megjelenített név | ||||
|         email: E-mail cím | ||||
|         expires_in: Elévül | ||||
|         filtered_languages: Szűrt nyelvek | ||||
|         header: Fejléc | ||||
|         locale: Nyelv | ||||
|         locked: Zárt felhasználói fiók | ||||
|   | ||||
| @@ -22,8 +22,6 @@ it: | ||||
|         data: File CSV esportato da un'altra istanza di Mastodon | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ it: | ||||
|         email: Indirizzo email | ||||
|         expires_in: Scade dopo | ||||
|         fields: Metadati del profilo | ||||
|         filtered_languages: Lingue filtrate | ||||
|         header: Header | ||||
|         locale: Lingua | ||||
|         locked: Blocca account | ||||
|   | ||||
| @@ -19,8 +19,6 @@ ja: | ||||
|         data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい | ||||
|       sessions: | ||||
|         otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' | ||||
|       user: | ||||
|         filtered_languages: 選択した言語があなたの公開タイムラインから取り除かれます | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -38,7 +36,6 @@ ja: | ||||
|         email: メールアドレス | ||||
|         expires_in: 有効期限 | ||||
|         fields: プロフィール補足情報 | ||||
|         filtered_languages: 除外する言語 | ||||
|         header: ヘッダー | ||||
|         locale: 言語 | ||||
|         locked: 承認制アカウントにする | ||||
|   | ||||
| @@ -23,8 +23,6 @@ ko: | ||||
|         data: 다른 마스토돈 인스턴스에서 추출된 CSV 파일 | ||||
|       sessions: | ||||
|         otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' | ||||
|       user: | ||||
|         filtered_languages: 선택된 언어가 공개 타임라인에서 제외 될 것입니다 | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ ko: | ||||
|         email: 이메일 주소 | ||||
|         expires_in: 만료시각 | ||||
|         fields: 프로필 메타데이터 | ||||
|         filtered_languages: 숨긴 언어들 | ||||
|         header: 헤더 | ||||
|         locale: 언어 | ||||
|         locked: 계정 잠금 | ||||
|   | ||||
| @@ -23,8 +23,6 @@ nl: | ||||
|         data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ nl: | ||||
|         email: E-mailadres | ||||
|         expires_in: Vervalt na | ||||
|         fields: Metadata profiel | ||||
|         filtered_languages: Gefilterde talen | ||||
|         header: Omslagfoto | ||||
|         locale: Taal | ||||
|         locked: Maak account besloten | ||||
|   | ||||
| @@ -19,8 +19,6 @@ | ||||
|         data: CSV-fil eksportert fra en annen Mastodon-instans | ||||
|       sessions: | ||||
|         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: | ||||
|       defaults: | ||||
|         avatar: Avatar | ||||
| @@ -31,7 +29,6 @@ | ||||
|         display_name: Visningsnavn | ||||
|         email: E-postadresse | ||||
|         expires_in: Utløper etter | ||||
|         filtered_languages: Filtrerte språk | ||||
|         header: Overskrift | ||||
|         locale: Språk | ||||
|         locked: Lås konto | ||||
|   | ||||
| @@ -23,8 +23,6 @@ oc: | ||||
|         data: Fichièr CSV exportat d’una autra instància Mastodon | ||||
|       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 :' | ||||
|       user: | ||||
|         filtered_languages: Las lengas seleccionadas seràn levadas de vòstre flux d’actualitat | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -42,7 +40,6 @@ oc: | ||||
|         email: Corrièl | ||||
|         expires_in: Expira aprèp | ||||
|         fields: Metadonada del perfil | ||||
|         filtered_languages: Lengas filtradas | ||||
|         header: Bandièra | ||||
|         locale: Lenga | ||||
|         locked: Far venir lo compte privat | ||||
|   | ||||
| @@ -26,8 +26,6 @@ pl: | ||||
|         data: Plik CSV wyeksportowany z innej instancji Mastodona | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -44,7 +42,6 @@ pl: | ||||
|         email: Adres e-mail | ||||
|         expires_in: Wygaśnie po | ||||
|         fields: Metadane profilu | ||||
|         filtered_languages: Filtrowane języki | ||||
|         header: Nagłówek | ||||
|         locale: Język | ||||
|         locked: Ustaw konto jako prywatne | ||||
|   | ||||
| @@ -22,8 +22,6 @@ pt-BR: | ||||
|         data: Arquivo CSV exportado de outra instância do Mastodon | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ pt-BR: | ||||
|         email: Endereço de e-mail | ||||
|         expires_in: Expira em | ||||
|         fields: Metadados do perfil | ||||
|         filtered_languages: Idiomas filtrados | ||||
|         header: Cabeçalho | ||||
|         locale: Idioma | ||||
|         locked: Trancar conta | ||||
|   | ||||
| @@ -19,8 +19,6 @@ pt: | ||||
|         data: Arquivo CSV exportado de outra instância do Mastodon | ||||
|       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. | ||||
|       user: | ||||
|         filtered_languages: Seleciona os idiomas que devem ser removidos das tuas timelines públicas | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: Imagem de Perfil | ||||
| @@ -31,7 +29,6 @@ pt: | ||||
|         display_name: Nome Público | ||||
|         email: Endereço de e-mail | ||||
|         expires_in: Expira em | ||||
|         filtered_languages: Idiomas filtrados | ||||
|         header: Cabeçalho | ||||
|         locale: Idioma | ||||
|         locked: Trancar conta | ||||
|   | ||||
| @@ -26,8 +26,6 @@ ru: | ||||
|         data: Файл CSV, экспортированный с другого узла Mastodon | ||||
|       sessions: | ||||
|         otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из Ваших кодов восстановления:' | ||||
|       user: | ||||
|         filtered_languages: Выбранные языки будут убраны из Ваших публичных лет. | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -44,7 +42,6 @@ ru: | ||||
|         email: Адрес e-mail | ||||
|         expires_in: Срок действия | ||||
|         fields: Метаданные профиля | ||||
|         filtered_languages: Фильтруемые языки | ||||
|         header: Заголовок | ||||
|         locale: Язык | ||||
|         locked: Сделать аккаунт закрытым | ||||
|   | ||||
| @@ -25,8 +25,6 @@ sk: | ||||
|         data: CSV súbor vyexportovaný z inej Mastodon inštancie | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -44,7 +42,6 @@ sk: | ||||
|         email: Emailová adresa | ||||
|         expires_in: Expirovať po | ||||
|         fields: Metadáta profilu | ||||
|         filtered_languages: Vynechanie jazykov | ||||
|         header: Obrázok v hlavičke | ||||
|         locale: Jazyk | ||||
|         locked: Zamknúť účet | ||||
|   | ||||
| @@ -23,8 +23,6 @@ sr-Latn: | ||||
|         data: CSV fajl izvezen sa druge Mastodont instance | ||||
|       sessions: | ||||
|         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: | ||||
|       defaults: | ||||
|         avatar: Avatar | ||||
| @@ -35,7 +33,6 @@ sr-Latn: | ||||
|         display_name: Ime za prikaz | ||||
|         email: Adresa e-pošte | ||||
|         expires_in: Ističe nakon | ||||
|         filtered_languages: Filtrirani jezici | ||||
|         header: Zaglavlje | ||||
|         locale: Jezik | ||||
|         locked: Zaključaj nalog | ||||
|   | ||||
| @@ -23,8 +23,6 @@ sr: | ||||
|         data: CSV фајл извезен са друге Мастодонт инстанце | ||||
|       sessions: | ||||
|         otp: Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак. | ||||
|       user: | ||||
|         filtered_languages: Означени језици ће за Вас бити исфилтрирани са јавних лајни | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: Аватар | ||||
| @@ -35,7 +33,6 @@ sr: | ||||
|         display_name: Име за приказ | ||||
|         email: Адреса е-поште | ||||
|         expires_in: Истиче након | ||||
|         filtered_languages: Филтрирани језици | ||||
|         header: Заглавље | ||||
|         locale: Језик | ||||
|         locked: Закључај налог | ||||
|   | ||||
| @@ -22,8 +22,6 @@ sv: | ||||
|         data: CSV-fil som exporteras från en annan Mastodon-instans | ||||
|       sessions: | ||||
|         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: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ sv: | ||||
|         email: E-postadress | ||||
|         expires_in: Förfaller efter | ||||
|         fields: Profil-metadata | ||||
|         filtered_languages: Filtrerade språk | ||||
|         header: Bakgrundsbild | ||||
|         locale: Språk | ||||
|         locked: Lås konto | ||||
|   | ||||
| @@ -19,8 +19,6 @@ zh-CN: | ||||
|         data: 请上传从其他 Mastodon 实例导出的 CSV 文件 | ||||
|       sessions: | ||||
|         otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码: | ||||
|       user: | ||||
|         filtered_languages: 被勾选语言的嘟文将不会出现在你的公共时间轴上 | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -38,7 +36,6 @@ zh-CN: | ||||
|         email: 电子邮件地址 | ||||
|         expires_in: 失效时间 | ||||
|         fields: 个人资料附加信息 | ||||
|         filtered_languages: 语言过滤 | ||||
|         header: 个人资料页横幅图片 | ||||
|         locale: 语言 | ||||
|         locked: 保护你的帐户(锁嘟) | ||||
|   | ||||
| @@ -22,8 +22,6 @@ zh-HK: | ||||
|         data: 自其他服務站匯出的 CSV 檔案 | ||||
|       sessions: | ||||
|         otp: 輸入你手機上生成的雙重認證碼,或者任意一個恢復代碼: | ||||
|       user: | ||||
|         filtered_languages: 下面被選擇的語言的文章將不會出現在你的公共時間軸上 | ||||
|     labels: | ||||
|       account: | ||||
|         fields: | ||||
| @@ -40,7 +38,6 @@ zh-HK: | ||||
|         email: 電郵地址 | ||||
|         expires_in: 失效時間 | ||||
|         fields: 資料 | ||||
|         filtered_languages: 封鎖下面語言的文章 | ||||
|         header: 個人頁面頂部 | ||||
|         locale: 語言 | ||||
|         locked: 將用戶轉為「私人」 | ||||
|   | ||||
| @@ -10,8 +10,6 @@ zh-TW: | ||||
|         note: 最多 160 個字元 | ||||
|       imports: | ||||
|         data: 自其他服務站匯出的 CSV 檔案 | ||||
|       user: | ||||
|         filtered_languages: 下面被選擇的語言的文章將不會出現在你的公共時間軸上。 | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: 大頭貼 | ||||
| @@ -21,7 +19,6 @@ zh-TW: | ||||
|         data: 資料 | ||||
|         display_name: 顯示名稱 | ||||
|         email: 電子信箱 | ||||
|         filtered_languages: 封鎖下面語言的文章 | ||||
|         header: 個人頁面頂部 | ||||
|         locale: 語言 | ||||
|         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. | ||||
|  | ||||
| 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 | ||||
|   enable_extension "plpgsql" | ||||
| @@ -525,6 +525,7 @@ ActiveRecord::Schema.define(version: 2018_06_15_122121) do | ||||
|     t.boolean "moderator", default: false, null: false | ||||
|     t.bigint "invite_id" | ||||
|     t.string "remember_token" | ||||
|     t.string "chosen_languages", array: true | ||||
|     t.index ["account_id"], name: "index_users_on_account_id" | ||||
|     t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true | ||||
|     t.index ["email"], name: "index_users_on_email", unique: true | ||||
|   | ||||
| @@ -18,12 +18,12 @@ describe Settings::PreferencesController do | ||||
|  | ||||
|   describe 'PUT #update' 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) | ||||
|       user.reload | ||||
|       expect(user.locale).to eq 'en' | ||||
|       expect(user.filtered_languages).to eq ['es', 'fr'] | ||||
|       expect(user.chosen_languages).to eq ['es', 'fr'] | ||||
|     end | ||||
|  | ||||
|     it 'updates user settings' do | ||||
|   | ||||
| @@ -259,18 +259,18 @@ RSpec.describe Status, type: :model do | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe '.not_in_filtered_languages' do | ||||
|   describe '.in_chosen_languages' 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 | ||||
|         status = Fabricate(:status, language: 'en') | ||||
|         expect(Status.not_in_filtered_languages(user.account)).not_to include status | ||||
|       it 'does not include statuses in not in chosen languages' do | ||||
|         status = Fabricate(:status, language: 'de') | ||||
|         expect(Status.in_chosen_languages(user.account)).not_to include status | ||||
|       end | ||||
|  | ||||
|       it 'includes status with unknown language' do | ||||
|         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 | ||||
| @@ -518,7 +518,7 @@ RSpec.describe Status, type: :model do | ||||
|  | ||||
|       context 'with language preferences' 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) | ||||
|           en_status = Fabricate(:status, language: 'en') | ||||
|           es_status = Fabricate(:status, language: 'es') | ||||
| @@ -531,7 +531,7 @@ RSpec.describe Status, type: :model do | ||||
|         end | ||||
|  | ||||
|         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) | ||||
|  | ||||
|           en_status = Fabricate(:status, language: 'en') | ||||
|   | ||||
| @@ -41,9 +41,9 @@ RSpec.describe User, type: :model do | ||||
|     end | ||||
|  | ||||
|     it 'cleans out empty string from languages' do | ||||
|       user = Fabricate.build(:user, filtered_languages: ['']) | ||||
|       user = Fabricate.build(:user, chosen_languages: ['']) | ||||
|       user.valid? | ||||
|       expect(user.filtered_languages).to eq [] | ||||
|       expect(user.chosen_languages).to eq nil | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user