From 202077517c298c918782b764c7073215856c70db Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 12 Sep 2024 16:09:55 -0400 Subject: [PATCH 001/467] Add "search" group for chewy classes in simplecov config (#31890) --- spec/rails_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 0b24f68f736267..ee03b49bc6aa16 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -21,6 +21,7 @@ add_group 'Libraries', 'lib' add_group 'Policies', 'app/policies' add_group 'Presenters', 'app/presenters' + add_group 'Search', 'app/chewy' add_group 'Serializers', 'app/serializers' add_group 'Services', 'app/services' add_group 'Validators', 'app/validators' From 353ade767b32f2237a46e0bbac53cb07ac3e91e2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 10:41:46 +0200 Subject: [PATCH 002/467] New Crowdin Translations (automated) (#31898) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/an.json | 1 - app/javascript/mastodon/locales/ar.json | 11 ++- app/javascript/mastodon/locales/ast.json | 1 - app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/bg.json | 1 - app/javascript/mastodon/locales/bn.json | 1 - app/javascript/mastodon/locales/br.json | 1 - app/javascript/mastodon/locales/ca.json | 1 - app/javascript/mastodon/locales/ckb.json | 1 - app/javascript/mastodon/locales/co.json | 1 - app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 1 - app/javascript/mastodon/locales/da.json | 2 +- app/javascript/mastodon/locales/de.json | 4 +- app/javascript/mastodon/locales/el.json | 1 - app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 1 - app/javascript/mastodon/locales/es-AR.json | 1 - app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/es.json | 4 +- app/javascript/mastodon/locales/et.json | 1 - app/javascript/mastodon/locales/eu.json | 1 - app/javascript/mastodon/locales/fa.json | 9 ++- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/fo.json | 1 - app/javascript/mastodon/locales/fr-CA.json | 3 +- app/javascript/mastodon/locales/fr.json | 5 +- app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 1 - app/javascript/mastodon/locales/gd.json | 1 - app/javascript/mastodon/locales/gl.json | 6 +- app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/hr.json | 1 - app/javascript/mastodon/locales/hu.json | 2 +- app/javascript/mastodon/locales/hy.json | 1 - app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 1 - app/javascript/mastodon/locales/ie.json | 1 - app/javascript/mastodon/locales/io.json | 1 - app/javascript/mastodon/locales/is.json | 1 - app/javascript/mastodon/locales/it.json | 4 +- app/javascript/mastodon/locales/ja.json | 1 - app/javascript/mastodon/locales/ka.json | 1 - app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/kk.json | 1 - app/javascript/mastodon/locales/ko.json | 1 - app/javascript/mastodon/locales/ku.json | 1 - app/javascript/mastodon/locales/kw.json | 1 - app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 1 - app/javascript/mastodon/locales/lv.json | 12 ++- app/javascript/mastodon/locales/ml.json | 1 - app/javascript/mastodon/locales/ms.json | 1 - app/javascript/mastodon/locales/my.json | 1 - app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/nn.json | 2 +- app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/oc.json | 1 - app/javascript/mastodon/locales/pa.json | 1 - app/javascript/mastodon/locales/pl.json | 2 +- app/javascript/mastodon/locales/pt-BR.json | 2 +- app/javascript/mastodon/locales/pt-PT.json | 6 +- app/javascript/mastodon/locales/ro.json | 1 - app/javascript/mastodon/locales/ru.json | 1 - app/javascript/mastodon/locales/sa.json | 1 - app/javascript/mastodon/locales/sc.json | 1 - app/javascript/mastodon/locales/sco.json | 1 - app/javascript/mastodon/locales/si.json | 1 - app/javascript/mastodon/locales/sk.json | 1 - app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 2 +- app/javascript/mastodon/locales/sr-Latn.json | 1 - app/javascript/mastodon/locales/sr.json | 1 - app/javascript/mastodon/locales/sv.json | 2 +- app/javascript/mastodon/locales/ta.json | 1 - app/javascript/mastodon/locales/te.json | 1 - app/javascript/mastodon/locales/th.json | 1 - app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 2 +- app/javascript/mastodon/locales/tt.json | 1 - app/javascript/mastodon/locales/uk.json | 2 +- app/javascript/mastodon/locales/vi.json | 1 - app/javascript/mastodon/locales/zh-CN.json | 2 +- app/javascript/mastodon/locales/zh-HK.json | 1 - app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.es-MX.yml | 6 ++ config/locales/activerecord.es.yml | 6 ++ config/locales/activerecord.fr-CA.yml | 3 + config/locales/activerecord.fr.yml | 3 + config/locales/activerecord.lv.yml | 6 ++ config/locales/ar.yml | 7 ++ config/locales/doorkeeper.lv.yml | 1 + config/locales/es-MX.yml | 11 +++ config/locales/es.yml | 11 +++ config/locales/fa.yml | 82 ++++++++++++++++++++ config/locales/fi.yml | 2 + config/locales/fo.yml | 3 + config/locales/fr-CA.yml | 7 ++ config/locales/fr.yml | 7 ++ config/locales/lv.yml | 26 +++++++ config/locales/simple_form.ar.yml | 1 + config/locales/simple_form.es-MX.yml | 3 + config/locales/simple_form.es.yml | 3 + config/locales/simple_form.fi.yml | 1 + config/locales/simple_form.fr-CA.yml | 2 + config/locales/simple_form.fr.yml | 2 + 106 files changed, 256 insertions(+), 92 deletions(-) diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index 893882fe7a3a8d..fcd30804219961 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -480,7 +480,6 @@ "status.detailed_status": "Vista de conversación detallada", "status.edit": "Editar", "status.edited_x_times": "Editau {count, plural, one {{count} vez} other {{count} veces}}", - "status.embed": "Incrustado", "status.filter": "Filtrar esta publicación", "status.history.created": "{name} creyó {date}", "status.history.edited": "{name} editó {date}", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 0dbeb0a1902dad..dc89dc6e399ecb 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -3,7 +3,7 @@ "about.contact": "للاتصال:", "about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.", "about.domain_blocks.no_reason_available": "السبب غير متوفر", - "about.domain_blocks.preamble": "يسمح لك ماستدون عموماً بعرض المحتوى من المستخدمين من أي خادم آخر في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادم بالذات.", + "about.domain_blocks.preamble": "يتيح مَستُدون عمومًا لمستخدميه مطالعة المحتوى من المستخدمين من الخواديم الأخرى في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم.", "about.domain_blocks.silenced.explanation": "لن تظهر لك ملفات التعريف الشخصية والمحتوى من هذا الخادوم، إلا إن بحثت عنه عمدًا أو تابعته.", "about.domain_blocks.silenced.title": "محدود", "about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.", @@ -34,7 +34,7 @@ "account.follow_back": "تابعه بالمثل", "account.followers": "مُتابِعون", "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.", - "account.followers_counter": "{count, plural, zero {}one {{counter} متابع} two {{counter} متابعين} few {{counter} متابعين} many {{counter} متابعين} other {{counter} متابعين}}", + "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}", "account.following": "الاشتراكات", "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.", "account.go_to_profile": "اذهب إلى الملف الشخصي", @@ -43,7 +43,7 @@ "account.joined_short": "انضم في", "account.languages": "تغيير اللغات المشترَك فيها", "account.link_verified_on": "تمَّ التَّحقق مِن مِلْكيّة هذا الرابط بتاريخ {date}", - "account.locked_info": "تمَّ تعيين حالة خصوصية هذا الحساب إلى مُقفَل. يُراجع المالك يدويًا من يمكنه متابعته.", + "account.locked_info": "تم ضبط حالة خصوصية هذا الحساب على أنه مؤمّن. إذ يراجع صاحبه يدويًا من يُسمح له بالمتابعة.", "account.media": "وسائط", "account.mention": "أذكُر @{name}", "account.moved_to": "أشار {name} إلى أن حسابه الجديد الآن:", @@ -443,6 +443,7 @@ "lists.subheading": "قوائمك", "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}", "loading_indicator.label": "جاري التحميل…", + "media_gallery.hide": "إخفاء", "moved_to_account_banner.text": "حسابك {disabledAccount} معطل حاليًا لأنك انتقلت إلى {movedToAccount}.", "mute_modal.hide_from_notifications": "إخفاء من قائمة الإشعارات", "mute_modal.hide_options": "إخفاء الخيارات", @@ -744,6 +745,7 @@ "status.bookmark": "أضفه إلى الفواصل المرجعية", "status.cancel_reblog_private": "إلغاء إعادة النشر", "status.cannot_reblog": "لا يمكن إعادة نشر هذا المنشور", + "status.continued_thread": "تكملة للخيط", "status.copy": "انسخ رابط الرسالة", "status.delete": "احذف", "status.detailed_status": "تفاصيل المحادثة", @@ -752,7 +754,7 @@ "status.edit": "تعديل", "status.edited": "آخر تعديل يوم {date}", "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}", - "status.embed": "إدماج", + "status.embed": "الحصول على شفرة الإدماج", "status.favourite": "فضّل", "status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}", "status.filter": "تصفية هذا المنشور", @@ -777,6 +779,7 @@ "status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", "status.redraft": "إزالة وإعادة الصياغة", "status.remove_bookmark": "احذفه مِن الفواصل المرجعية", + "status.replied_in_thread": "رد في خيط", "status.replied_to": "رَدًا على {name}", "status.reply": "ردّ", "status.replyAll": "رُد على الخيط", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 507703023c2bb7..008dc6a663fee6 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -419,7 +419,6 @@ "status.direct": "Mentar a @{name} per privao", "status.direct_indicator": "Mención privada", "status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}", - "status.embed": "Empotrar", "status.filter": "Peñerar esti artículu", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editó {date}", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 412eae14818f80..a0900b84e67f7c 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -748,7 +748,6 @@ "status.edit": "Рэдагаваць", "status.edited": "Апошняе рэдагаванне {date}", "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}", - "status.embed": "Убудаваць", "status.favourite": "Упадабанае", "status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}", "status.filter": "Фільтраваць гэты допіс", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index b89b539dcfb039..2a435c20743d2f 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -766,7 +766,6 @@ "status.edit": "Редактиране", "status.edited": "Последно редактирано на {date}", "status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}", - "status.embed": "Вграждане", "status.favourite": "Любимо", "status.favourites": "{count, plural, one {любимо} other {любими}}", "status.filter": "Филтриране на публ.", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index df97abdff5109b..9512f6a92b3400 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -408,7 +408,6 @@ "status.detailed_status": "বিস্তারিত কথোপকথনের হিসেবে দেখতে", "status.edit": "সম্পাদন", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "এমবেড করতে", "status.favourite": "পছন্দ", "status.load_more": "আরো দেখুন", "status.media_hidden": "মিডিয়া লুকানো আছে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 226ff756ffe9d3..18616fcef2cc29 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -575,7 +575,6 @@ "status.edit": "Kemmañ", "status.edited": "Kemmet da ziwezhañ d'an {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Enframmañ", "status.favourite": "Muiañ-karet", "status.filter": "Silañ ar c'hannad-mañ", "status.history.created": "Krouet gant {name} {date}", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 91f28bd1514d97..d0ee437af9f919 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -789,7 +789,6 @@ "status.edit": "Edita", "status.edited": "Darrera edició {date}", "status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}", - "status.embed": "Incrusta", "status.favourite": "Favorit", "status.favourites": "{count, plural, one {favorit} other {favorits}}", "status.filter": "Filtra aquest tut", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 61b81c9f312595..2a3a391eab4885 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -539,7 +539,6 @@ "status.direct_indicator": "ئاماژەی تایبەت", "status.edit": "دەستکاری", "status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}", - "status.embed": "نیشتەجێ بکە", "status.filter": "ئەم پۆستە فلتەر بکە", "status.history.created": "{name} دروستکراوە لە{date}", "status.history.edited": "{name} دروستکاریکراوە لە{date}", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 180616b782ec08..37eb945615a192 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -319,7 +319,6 @@ "status.delete": "Toglie", "status.detailed_status": "Vista in ditagliu di a cunversazione", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Integrà", "status.load_more": "Vede di più", "status.media_hidden": "Media piattata", "status.mention": "Mintuvà @{name}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 8dd8f31fa82686..134e683fa16343 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -729,7 +729,6 @@ "status.edit": "Upravit", "status.edited": "Naposledy upraveno {date}", "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", - "status.embed": "Vložit na web", "status.favourite": "Oblíbit", "status.favourites": "{count, plural, one {oblíbený} few {oblíbené} many {oblíbených} other {oblíbených}}", "status.filter": "Filtrovat tento příspěvek", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 7f058d8912faf2..a5855929557093 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -789,7 +789,6 @@ "status.edit": "Golygu", "status.edited": "Golygwyd ddiwethaf {date}", "status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}", - "status.embed": "Mewnblannu", "status.favourite": "Ffafrio", "status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}", "status.filter": "Hidlo'r postiad hwn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index dea313ffed4ce3..97d82155353e4f 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -789,7 +789,7 @@ "status.edit": "Redigér", "status.edited": "Senest redigeret {date}", "status.edited_x_times": "Redigeret {count, plural, one {{count} gang} other {{count} gange}}", - "status.embed": "Indlejr", + "status.embed": "Hent indlejringskode", "status.favourite": "Favorit", "status.favourites": "{count, plural, one {# favorit} other {# favoritter}}", "status.filter": "Filtrér dette indlæg", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 46bb08d7cb5938..03be4487895bb2 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -236,7 +236,7 @@ "domain_pill.your_handle": "Deine Adresse:", "domain_pill.your_server": "Dein digitales Zuhause. Hier „leben“ alle Beiträge von dir. Dir gefällt es hier nicht? Du kannst jederzeit den Server wechseln und ebenso deine Follower übertragen.", "domain_pill.your_username": "Deine eindeutige Identität auf diesem Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.", - "embed.instructions": "Du kannst diesen Beitrag außerhalb des Fediverse (z. B. auf deiner Website) einbetten, indem du diesen iFrame-Code einfügst.", + "embed.instructions": "Du kannst diesen Beitrag auf deiner Website einbetten, indem du den nachfolgenden Code kopierst.", "embed.preview": "Vorschau:", "emoji_button.activity": "Aktivitäten", "emoji_button.clear": "Leeren", @@ -789,7 +789,7 @@ "status.edit": "Beitrag bearbeiten", "status.edited": "Zuletzt am {date} bearbeitet", "status.edited_x_times": "{count, plural, one {{count}-mal} other {{count}-mal}} bearbeitet", - "status.embed": "Beitrag per iFrame einbetten", + "status.embed": "Code zum Einbetten", "status.favourite": "Favorisieren", "status.favourites": "{count, plural, one {Mal favorisiert} other {Mal favorisiert}}", "status.filter": "Beitrag filtern", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 64a603923ecc36..d832fa101401e4 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -780,7 +780,6 @@ "status.edit": "Επεξεργασία", "status.edited": "Τελευταία επεξεργασία {date}", "status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}", - "status.embed": "Ενσωμάτωσε", "status.favourite": "Αγαπημένα", "status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}", "status.filter": "Φιλτράρισμα αυτής της ανάρτησης", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index c727b8e49faf3d..a40353a73937c7 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -789,7 +789,6 @@ "status.edit": "Edit", "status.edited": "Last edited {date}", "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", - "status.embed": "Embed", "status.favourite": "Favourite", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filter this post", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index d8ec27748e94f4..ce7201dacfbe98 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -628,7 +628,6 @@ "status.direct_indicator": "Privata mencio", "status.edit": "Redakti", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", - "status.embed": "Enkorpigi", "status.favourite": "Ŝatata", "status.filter": "Filtri ĉi tiun afiŝon", "status.history.created": "{name} kreis {date}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index dfba0fe5d97f20..65eab7f437b996 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -789,7 +789,6 @@ "status.edit": "Editar", "status.edited": "Última edición: {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", - "status.embed": "Insertar", "status.favourite": "Marcar como favorito", "status.favourites": "{count, plural, one {# voto} other {# votos}}", "status.filter": "Filtrar este mensaje", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 63f3d53812ca67..ae9658cd907655 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -457,6 +457,7 @@ "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", "loading_indicator.label": "Cargando…", + "media_gallery.hide": "Ocultar", "moved_to_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada porque te has mudado a {movedToAccount}.", "mute_modal.hide_from_notifications": "Ocultar de las notificaciones", "mute_modal.hide_options": "Ocultar opciones", @@ -779,6 +780,7 @@ "status.bookmark": "Añadir marcador", "status.cancel_reblog_private": "Eliminar retoot", "status.cannot_reblog": "Este toot no puede retootearse", + "status.continued_thread": "Continuó el hilo", "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", "status.detailed_status": "Vista de conversación detallada", @@ -787,7 +789,6 @@ "status.edit": "Editar", "status.edited": "Última edición {date}", "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}", - "status.embed": "Incrustado", "status.favourite": "Favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicación", @@ -812,6 +813,7 @@ "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", "status.remove_bookmark": "Eliminar marcador", + "status.replied_in_thread": "Respondió en el hilo", "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b01eb68222a294..61a958ed38d0a6 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -457,6 +457,7 @@ "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", "loading_indicator.label": "Cargando…", + "media_gallery.hide": "Ocultar", "moved_to_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada porque te has mudado a {movedToAccount}.", "mute_modal.hide_from_notifications": "Ocultar de las notificaciones", "mute_modal.hide_options": "Ocultar opciones", @@ -779,6 +780,7 @@ "status.bookmark": "Añadir marcador", "status.cancel_reblog_private": "Deshacer impulso", "status.cannot_reblog": "Esta publicación no se puede impulsar", + "status.continued_thread": "Continuó el hilo", "status.copy": "Copiar enlace a la publicación", "status.delete": "Borrar", "status.detailed_status": "Vista de conversación detallada", @@ -787,7 +789,6 @@ "status.edit": "Editar", "status.edited": "Última edición {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", - "status.embed": "Incrustado", "status.favourite": "Favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicación", @@ -812,6 +813,7 @@ "status.reblogs.empty": "Nadie ha impulsado esta publicación todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", "status.remove_bookmark": "Eliminar marcador", + "status.replied_in_thread": "Respondió en el hilo", "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index ca37a152fe593c..93c2cefb4795b7 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -787,7 +787,6 @@ "status.edit": "Muuda", "status.edited": "Viimati muudetud {date}", "status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}", - "status.embed": "Manustamine", "status.favourite": "Lemmik", "status.favourites": "{count, plural, one {lemmik} other {lemmikud}}", "status.filter": "Filtreeri seda postitust", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 15dd63486b603b..2248ffbf9d0aa0 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -783,7 +783,6 @@ "status.edit": "Editatu", "status.edited": "Azken edizioa: {date}", "status.edited_x_times": "{count, plural, one {behin} other {{count} aldiz}} editatua", - "status.embed": "Txertatu", "status.favourite": "Gogokoa", "status.favourites": "{count, plural, one {gogoko} other {gogoko}}", "status.filter": "Iragazi bidalketa hau", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index d2b520e1d2e8c3..4221859fea4409 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -447,6 +447,7 @@ "lists.subheading": "سیاهه‌هایتان", "load_pending": "{count, plural, one {# مورد جدید} other {# مورد جدید}}", "loading_indicator.label": "در حال بارگذاری…", + "media_gallery.hide": "نهفتن", "moved_to_account_banner.text": "حسابتان {disabledAccount} اکنون از کار افتاده؛ چرا که به {movedToAccount} منتقل شدید.", "mute_modal.hide_from_notifications": "نهفتن از آگاهی‌ها", "mute_modal.hide_options": "گزینه‌های نهفتن", @@ -487,9 +488,13 @@ "notification.admin.report": "{name}، {target} را گزارش داد", "notification.admin.report_statuses_other": "{name}، {target} را گزارش داد", "notification.admin.sign_up": "{name} ثبت نام کرد", + "notification.admin.sign_up.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} ثبت‌نام کردند", "notification.favourite": "{name} فرسته‌تان را برگزید", + "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.follow": "‫{name}‬ پی‌گیرتان شد", + "notification.follow.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} پیتان گرفتند", "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", + "notification.follow_request.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} درخواست پی‌گیریتان را دادند", "notification.label.mention": "اشاره", "notification.label.private_mention": "اشارهٔ خصوصی", "notification.label.private_reply": "پاسخ خصوصی", @@ -507,6 +512,7 @@ "notification.own_poll": "نظرسنجیتان پایان یافت", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسید", "notification.reblog": "‫{name}‬ فرسته‌تان را تقویت کرد", + "notification.reblog.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را تقویت کردند", "notification.relationships_severance_event": "قطع ارتباط با {name}", "notification.relationships_severance_event.learn_more": "بیشتر بدانید", "notification.status": "{name} چیزی فرستاد", @@ -742,6 +748,7 @@ "status.bookmark": "نشانک", "status.cancel_reblog_private": "ناتقویت", "status.cannot_reblog": "این فرسته قابل تقویت نیست", + "status.continued_thread": "رشتهٔ دنباله دار", "status.copy": "رونوشت از پیوند فرسته", "status.delete": "حذف", "status.detailed_status": "نمایش کامل گفتگو", @@ -750,7 +757,6 @@ "status.edit": "ویرایش", "status.edited": "آخرین ویرایش {date}", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", - "status.embed": "جاسازی", "status.favourite": "برگزیده‌", "status.favourites": "{count, plural, one {برگزیده} other {برگزیده}}", "status.filter": "پالایش این فرسته", @@ -775,6 +781,7 @@ "status.reblogs.empty": "هنوز هیچ کسی این فرسته را تقویت نکرده است. وقتی کسی چنین کاری کند، این‌جا نمایش داده خواهد شد.", "status.redraft": "حذف و بازنویسی", "status.remove_bookmark": "برداشتن نشانک", + "status.replied_in_thread": "در رشته پاسخ داده", "status.replied_to": "به {name} پاسخ داد", "status.reply": "پاسخ", "status.replyAll": "پاسخ به رشته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index d8c5b7204050d6..e1a411e52eee08 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -789,7 +789,7 @@ "status.edit": "Muokkaa", "status.edited": "Viimeksi muokattu {date}", "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}", - "status.embed": "Upota", + "status.embed": "Hanki upotuskoodi", "status.favourite": "Suosikki", "status.favourites": "{count, plural, one {suosikki} other {suosikkia}}", "status.filter": "Suodata tämä julkaisu", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 6e7eb3b7c28459..73c64b1b826fc6 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -789,7 +789,6 @@ "status.edit": "Rætta", "status.edited": "Seinast broytt {date}", "status.edited_x_times": "Rættað {count, plural, one {{count} ferð} other {{count} ferð}}", - "status.embed": "Legg inní", "status.favourite": "Dámdur postur", "status.favourites": "{count, plural, one {yndispostur} other {yndispostar}}", "status.filter": "Filtrera hendan postin", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 9f51aaaa7d5315..96ae81c58aedc2 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -456,6 +456,7 @@ "lists.subheading": "Vos listes", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", "loading_indicator.label": "Chargement…", + "media_gallery.hide": "Masquer", "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous avez déménagé sur {movedToAccount}.", "mute_modal.hide_from_notifications": "Cacher des notifications", "mute_modal.hide_options": "Masquer les options", @@ -778,6 +779,7 @@ "status.bookmark": "Ajouter aux signets", "status.cancel_reblog_private": "Débooster", "status.cannot_reblog": "Cette publication ne peut pas être boostée", + "status.continued_thread": "Suite du fil", "status.copy": "Copier un lien vers cette publication", "status.delete": "Supprimer", "status.detailed_status": "Vue détaillée de la conversation", @@ -786,7 +788,6 @@ "status.edit": "Modifier", "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifiée {count, plural, one {{count} fois} other {{count} fois}}", - "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer cette publication", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5bcc1c946b6e23..fb0bfac29dd05a 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -456,6 +456,7 @@ "lists.subheading": "Vos listes", "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", "loading_indicator.label": "Chargement…", + "media_gallery.hide": "Masquer", "moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous l'avez déplacé à {movedToAccount}.", "mute_modal.hide_from_notifications": "Cacher des notifications", "mute_modal.hide_options": "Masquer les options", @@ -778,6 +779,7 @@ "status.bookmark": "Ajouter aux marque-pages", "status.cancel_reblog_private": "Annuler le partage", "status.cannot_reblog": "Ce message ne peut pas être partagé", + "status.continued_thread": "Suite du fil", "status.copy": "Copier le lien vers le message", "status.delete": "Supprimer", "status.detailed_status": "Vue détaillée de la conversation", @@ -786,7 +788,6 @@ "status.edit": "Modifier", "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifié {count, plural, one {{count} fois} other {{count} fois}}", - "status.embed": "Intégrer", "status.favourite": "Ajouter aux favoris", "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer ce message", @@ -794,7 +795,7 @@ "status.history.edited": "modifié par {name} {date}", "status.load_more": "Charger plus", "status.media.open": "Cliquez pour ouvrir", - "status.media.show": "Cliquez pour voir", + "status.media.show": "Cliquer pour afficher", "status.media_hidden": "Média caché", "status.mention": "Mentionner @{name}", "status.more": "Plus", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index badd6a1c216d9e..0a51db36a4953b 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -787,7 +787,6 @@ "status.edit": "Bewurkje", "status.edited": "Lêst bywurke op {date}", "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke", - "status.embed": "Ynslute", "status.favourite": "Favoryt", "status.favourites": "{count, plural, one {favoryt} other {favoriten}}", "status.filter": "Dit berjocht filterje", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 95bb2938549168..794a433cd2aaaa 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -787,7 +787,6 @@ "status.edit": "Cuir in eagar", "status.edited": "Arna chuir in eagar anuas {date}", "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}", - "status.embed": "Leabaigh", "status.favourite": "Is fearr leat", "status.favourites": "{count, plural, one {a bhfuil grá agat do} two {gráite} few {gráite} many {gráite} other {gráite}}", "status.filter": "Déan scagadh ar an bpostáil seo", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index e2f67bc296accc..3f1b353e75aee6 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -787,7 +787,6 @@ "status.edit": "Deasaich", "status.edited": "An deasachadh mu dheireadh {date}", "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{count} turas} two {{count} thuras} few {{count} tursan} other {{count} turas}}", - "status.embed": "Leabaich", "status.favourite": "Cuir ris na h-annsachdan", "status.favourites": "{count, plural, one {annsachd} two {annsachd} few {annsachdan} other {annsachd}}", "status.filter": "Criathraich am post seo", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index b0b530e88f09bd..1293d96bbd8742 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -236,8 +236,8 @@ "domain_pill.your_handle": "O teu alcume:", "domain_pill.your_server": "O teu fogar dixital, onde están as túas publicacións. Non é do teu agrado? Podes cambiar de servidor cando queiras levando as túas seguidoras contigo.", "domain_pill.your_username": "O teu identificador único neste servidor. É posible que atopes usuarias co mesmo nome de usuaria en outros servidores.", - "embed.instructions": "Engade esta publicación ó teu sitio web copiando o seguinte código.", - "embed.preview": "Así será mostrado:", + "embed.instructions": "Inclúe esta publicación no teu sitio web copiando o seguinte código.", + "embed.preview": "Vaise ver así:", "emoji_button.activity": "Actividade", "emoji_button.clear": "Limpar", "emoji_button.custom": "Personalizado", @@ -789,7 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edición {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", - "status.embed": "Incrustar", + "status.embed": "O código a incluír", "status.favourite": "Favorecer", "status.favourites": "{count, plural, one {favorecemento} other {favorecementos}}", "status.filter": "Filtrar esta publicación", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 80d9f054ccee81..532c11d17cd829 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -789,7 +789,6 @@ "status.edit": "עריכה", "status.edited": "נערך לאחרונה {date}", "status.edited_x_times": "נערך {count, plural, one {פעם {count}} other {{count} פעמים}}", - "status.embed": "הטמעה", "status.favourite": "חיבוב", "status.favourites": "{count, plural, one {חיבוב אחד} two {זוג חיבובים} other {# חיבובים}}", "status.filter": "סנן הודעה זו", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 9f5782767b6ff0..26c527f2fed48b 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -457,7 +457,6 @@ "status.delete": "Obriši", "status.edit": "Uredi", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Umetni", "status.filter": "Filtriraj ovu objavu", "status.history.created": "Kreirao/la {name} prije {date}", "status.history.edited": "Uredio/la {name} prije {date}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 1e4e02cb9de9a3..587f58f2486b1e 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -789,7 +789,7 @@ "status.edit": "Szerkesztés", "status.edited": "Utoljára szerkesztve {date}", "status.edited_x_times": "{count, plural, one {{count} alkalommal} other {{count} alkalommal}} szerkesztve", - "status.embed": "Beágyazás", + "status.embed": "Beágyazási kód lekérése", "status.favourite": "Kedvenc", "status.favourites": "{count, plural, one {kedvenc} other {kedvenc}}", "status.filter": "E bejegyzés szűrése", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index d1475338fd81a1..a81abb82f014a1 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -448,7 +448,6 @@ "status.direct_indicator": "Մասնաւոր յիշատակում", "status.edit": "Խմբագրել", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Ներդնել", "status.favourite": "Հավանել", "status.filter": "Զտել այս գրառումը", "status.history.created": "{name}-ը ստեղծել է՝ {date}", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 9d7e3ff2c7c5cc..e301363f272344 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -759,7 +759,6 @@ "status.edit": "Modificar", "status.edited": "Ultime modification le {date}", "status.edited_x_times": "Modificate {count, plural, one {{count} vice} other {{count} vices}}", - "status.embed": "Incastrar", "status.favourite": "Adder al favorites", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filtrar iste message", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 3e2cc03145872c..687c32c1b155cf 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -583,7 +583,6 @@ "status.detailed_status": "Tampilan detail percakapan", "status.edit": "Edit", "status.edited_x_times": "Diedit {count, plural, other {{count} kali}}", - "status.embed": "Tanam", "status.filter": "Saring kiriman ini", "status.history.created": "{name} membuat {date}", "status.history.edited": "{name} mengedit {date}", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 7a176dfbb621ee..322680101922a1 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -698,7 +698,6 @@ "status.edit": "Modificar", "status.edited": "Ultimmen actualisat ye {date}", "status.edited_x_times": "Modificat {count, plural, one {{count} vez} other {{count} vezes}}", - "status.embed": "Inbedar", "status.favourite": "Favoritisar", "status.favourites": "{count, plural, one {favorit} other {favorites}}", "status.filter": "Filtrar ti-ci posta", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index d0ccb923bae205..bb0a86ac2bbec9 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -589,7 +589,6 @@ "status.direct_indicator": "Privata menciono", "status.edit": "Modifikez", "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", - "status.embed": "Eninsertez", "status.favourite": "Favorizar", "status.filter": "Filtragez ca posto", "status.history.created": "{name} kreis ye {date}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 83932f1b4ba251..ba362afc8a450a 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -789,7 +789,6 @@ "status.edit": "Breyta", "status.edited": "Síðast breytt {date}", "status.edited_x_times": "Breytt {count, plural, one {{count} sinni} other {{count} sinnum}}", - "status.embed": "Ívefja", "status.favourite": "Eftirlæti", "status.favourites": "{count, plural, one {eftirlæti} other {eftirlæti}}", "status.filter": "Sía þessa færslu", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 1c8cff5490166b..daa135afeab1f5 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -780,6 +780,7 @@ "status.bookmark": "Aggiungi segnalibro", "status.cancel_reblog_private": "Annulla reblog", "status.cannot_reblog": "Questo post non può essere condiviso", + "status.continued_thread": "Discussione continua", "status.copy": "Copia link al post", "status.delete": "Elimina", "status.detailed_status": "Vista conversazione dettagliata", @@ -788,7 +789,7 @@ "status.edit": "Modifica", "status.edited": "Ultima modifica {date}", "status.edited_x_times": "Modificato {count, plural, one {{count} volta} other {{count} volte}}", - "status.embed": "Incorpora", + "status.embed": "Ottieni codice incorporato", "status.favourite": "Preferito", "status.favourites": "{count, plural, one {preferito} other {preferiti}}", "status.filter": "Filtra questo post", @@ -813,6 +814,7 @@ "status.reblogs.empty": "Ancora nessuno ha rebloggato questo post. Quando qualcuno lo farà, apparirà qui.", "status.redraft": "Elimina e riscrivi", "status.remove_bookmark": "Rimuovi segnalibro", + "status.replied_in_thread": "Ha risposto nella discussione", "status.replied_to": "Risposta a {name}", "status.reply": "Rispondi", "status.replyAll": "Rispondi alla conversazione", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 60dd8b12ea7cd4..7ea1694f1ecd57 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -787,7 +787,6 @@ "status.edit": "編集", "status.edited": "最終更新日 {date}", "status.edited_x_times": "{count}回編集", - "status.embed": "埋め込み", "status.favourite": "お気に入り", "status.favourites": "{count, plural, one {お気に入り} other {お気に入り}}", "status.filter": "この投稿をフィルターする", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 0bd86a24760564..fc0ed0730d78cf 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -222,7 +222,6 @@ "status.copy": "Copy link to status", "status.delete": "წაშლა", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "ჩართვა", "status.load_more": "მეტის ჩატვირთვა", "status.media_hidden": "მედია დამალულია", "status.mention": "ასახელე @{name}", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index ae783b6c246138..5ccfbecf815616 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -584,7 +584,6 @@ "status.direct_indicator": "Abdar uslig", "status.edit": "Ẓreg", "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}", - "status.embed": "Seddu", "status.favourite": "Amenyaf", "status.favourites": "{count, plural, one {n usmenyaf} other {n ismenyafen}}", "status.filter": "Sizdeg tassufeɣt-a", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index eace5d95b8c010..f146fc652d54d2 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -315,7 +315,6 @@ "status.delete": "Өшіру", "status.detailed_status": "Толық пікірталас көрінісі", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Embеd", "status.load_more": "Тағы әкел", "status.media_hidden": "Жабық медиа", "status.mention": "Аталым @{name}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 4c78f4332e8cbe..751e5790e141fb 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -788,7 +788,6 @@ "status.edit": "수정", "status.edited": "{date}에 마지막으로 편집됨", "status.edited_x_times": "{count, plural, other {{count}}} 번 수정됨", - "status.embed": "임베드", "status.favourite": "좋아요", "status.favourites": "{count, plural, other {좋아요}}", "status.filter": "이 게시물을 필터", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index d69f4b0d05e1a8..dd10000d1813c8 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -498,7 +498,6 @@ "status.direct_indicator": "Qalkirinê taybet", "status.edit": "Serrast bike", "status.edited_x_times": "{count, plural, one {{count} car} other {{count} car}} hate serrastkirin", - "status.embed": "Bi cih bike", "status.filter": "Vê şandiyê parzûn bike", "status.history.created": "{name} {date} afirand", "status.history.edited": "{name} {date} serrast kir", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 046910daf8e29c..60b8321d53be76 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -317,7 +317,6 @@ "status.delete": "Dilea", "status.detailed_status": "Gwel kesklapp a-vanyl", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Staga", "status.load_more": "Karga moy", "status.media_hidden": "Myski kudhys", "status.mention": "Meneges @{name}", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index e63c22ec696f3d..f956abfb1e28ee 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -707,7 +707,6 @@ "status.edit": "Edita", "status.edited": "Ultima edisyon: {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} vezes}}", - "status.embed": "Inkrusta", "status.favourite": "Te plaze", "status.filter": "Filtra esta publikasyon", "status.history.created": "{name} kriyo {date}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index cc905e3a21ca15..86e8d092b84d4e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -779,7 +779,6 @@ "status.edit": "Redaguoti", "status.edited": "Paskutinį kartą redaguota {date}", "status.edited_x_times": "Redaguota {count, plural, one {{count} kartą} few {{count} kartus} many {{count} karto} other {{count} kartų}}", - "status.embed": "Įterpti", "status.favourite": "Pamėgti", "status.favourites": "{count, plural, one {mėgstamas} few {mėgstamai} many {mėgstamų} other {mėgstamų}}", "status.filter": "Filtruoti šį įrašą", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 37dc1d06dbfe97..77dc5c497cf90b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -11,6 +11,7 @@ "about.not_available": "Šī informācija nav padarīta pieejama šajā serverī.", "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", + "account.account_note_header": "Personīga piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", "account.badges.bot": "Automatizēts", "account.badges.group": "Grupa", @@ -91,6 +92,8 @@ "block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.", "block_modal.they_cant_see_posts": "Nevar redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.", "boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu", + "boost_modal.reblog": "Pastiprināt ierakstu?", + "boost_modal.undo_reblog": "Atcelt ieraksta pastiprināšanu?", "bundle_column_error.copy_stacktrace": "Kopēt kļūdu ziņojumu", "bundle_column_error.error.body": "Pieprasīto lapu nevarēja atveidot. Tas varētu būt saistīts ar kļūdu mūsu kodā, vai tā ir pārlūkprogrammas saderības problēma.", "bundle_column_error.error.title": "Ak vai!", @@ -163,21 +166,29 @@ "confirmations.block.confirm": "Bloķēt", "confirmations.delete.confirm": "Dzēst", "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", + "confirmations.delete.title": "Izdzēst ierakstu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešām neatgriezeniski izdzēst šo sarakstu?", + "confirmations.delete_list.title": "Izdzēst sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", "confirmations.discard_edit_media.message": "Ir nesaglabātas izmaiņas informācijas nesēja aprakstā vai priekšskatījumā. Vēlies tās atmest tik un tā?", "confirmations.edit.confirm": "Labot", "confirmations.edit.message": "Labošana pārrakstīs ziņojumu, kas šobrīd tiek sastādīts. Vai tiešām turpināt?", + "confirmations.edit.title": "Pārrakstīt ierakstu?", "confirmations.logout.confirm": "Iziet", "confirmations.logout.message": "Vai tiešām vēlies izrakstīties?", + "confirmations.logout.title": "Atteikties?", "confirmations.mute.confirm": "Apklusināt", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", "confirmations.redraft.message": "Vai tiešām vēlies dzēst šo ziņu un no jauna noformēt to? Izlase un pastiprinājumi tiks zaudēti, un atbildes uz sākotnējo ziņu tiks atstātas bez autoratlīdzības.", "confirmations.reply.confirm": "Atbildēt", "confirmations.reply.message": "Tūlītēja atbildēšana pārrakstīs pašlaik sastādīto ziņu. Vai tiešām turpināt?", + "confirmations.reply.title": "Pārrakstīt ierakstu?", "confirmations.unfollow.confirm": "Pārstāt sekot", "confirmations.unfollow.message": "Vai tiešam vairs nevēlies sekot lietotājam {name}?", + "confirmations.unfollow.title": "Pārtraukt sekošanu lietotājam?", + "content_warning.hide": "Paslēpt ierakstu", + "content_warning.show": "Tomēr rādīt", "conversation.delete": "Dzēst sarunu", "conversation.mark_as_read": "Atzīmēt kā izlasītu", "conversation.open": "Skatīt sarunu", @@ -649,7 +660,6 @@ "status.edit": "Labot", "status.edited": "Pēdējoreiz labots {date}", "status.edited_x_times": "Labots {count, plural, zero {{count} reižu} one {{count} reizi} other {{count} reizes}}", - "status.embed": "Iegult", "status.favourite": "Izlasē", "status.favourites": "{count, plural, zero {izlasēs} one {izlasē} other {izlasēs}}", "status.filter": "Filtrē šo ziņu", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 48ea29f9836ca1..5ed6f219db5ae0 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -308,7 +308,6 @@ "status.delete": "മായ്ക്കുക", "status.detailed_status": "വിശദമായ സംഭാഷണ കാഴ്‌ച", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "ഉൾച്ചേർക്കുക", "status.load_more": "കൂടുതൽ ലോഡു ചെയ്യുക", "status.media_hidden": "മീഡിയ മറച്ചു", "status.mention": "@{name} സൂചിപ്പിക്കുക", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c6bc630bfefa55..44403ec959486e 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -613,7 +613,6 @@ "status.direct_indicator": "Sebutan peribadi", "status.edit": "Sunting", "status.edited_x_times": "Disunting {count, plural, other {{count} kali}}", - "status.embed": "Benaman", "status.favourite": "Kegemaran", "status.filter": "Tapiskan hantaran ini", "status.history.created": "{name} mencipta pada {date}", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 2127d69baa8022..e93b47fd542f14 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -589,7 +589,6 @@ "status.direct_indicator": "သီးသန့်ဖော်ပြခြင်း။", "status.edit": "ပြင်ဆင်ရန်", "status.edited_x_times": "{count, plural, one {{count} time} other {{count} times}} ပြင်ဆင်ခဲ့သည်", - "status.embed": "Embed", "status.favourite": "Favorite", "status.filter": "ဤပို့စ်ကို စစ်ထုတ်ပါ", "status.history.created": "{name} က {date} က ဖန်တီးခဲ့သည်", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index e5d8e8d2ebc263..d4c6b727f76a18 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -789,7 +789,7 @@ "status.edit": "Bewerken", "status.edited": "Laatste bewerking op {date}", "status.edited_x_times": "{count, plural, one {{count} keer} other {{count} keer}} bewerkt", - "status.embed": "Embedden", + "status.embed": "Embed-code verkrijgen", "status.favourite": "Favoriet", "status.favourites": "{count, plural, one {favoriet} other {favorieten}}", "status.filter": "Dit bericht filteren", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index d21ebffe226eb2..3d0634ef612595 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -789,7 +789,7 @@ "status.edit": "Rediger", "status.edited": "Sist endra {date}", "status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}", - "status.embed": "Bygg inn", + "status.embed": "Få innbyggingskode", "status.favourite": "Favoritt", "status.favourites": "{count, plural, one {favoritt} other {favorittar}}", "status.filter": "Filtrer dette innlegget", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index b805b9852886bb..1222f404241e9f 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -727,7 +727,6 @@ "status.direct_indicator": "Privat omtale", "status.edit": "Rediger", "status.edited_x_times": "Redigert {count, plural,one {{count} gang} other {{count} ganger}}", - "status.embed": "Bygge inn", "status.favourite": "Favoritt", "status.filter": "Filtrer dette innlegget", "status.history.created": "{name} opprettet {date}", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 1d9008dbd1fa0a..22193f82aa41e5 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -505,7 +505,6 @@ "status.direct_indicator": "Mencion privada", "status.edit": "Modificar", "status.edited_x_times": "Modificat {count, plural, un {{count} còp} other {{count} còps}}", - "status.embed": "Embarcar", "status.favourite": "Apondre als favorits", "status.filter": "Filtrar aquesta publicacion", "status.history.created": "{name} o creèt lo {date}", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index a71c01b3c14cff..5da88ff08f7e4d 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -320,7 +320,6 @@ "status.delete": "ਹਟਾਓ", "status.edit": "ਸੋਧ", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "ਮੜ੍ਹੋ", "status.favourite": "ਪਸੰਦ", "status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ", "status.history.edited": "{name} ਨੇ {date} ਨੂੰ ਸੋਧਿਆ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 2ef437ef04df5e..34154fe5a3be39 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -789,7 +789,7 @@ "status.edit": "Edytuj", "status.edited": "Ostatnio edytowane {date}", "status.edited_x_times": "Edytowano {count, plural, one {{count} raz} other {{count} razy}}", - "status.embed": "Osadź", + "status.embed": "Kod osadzenia", "status.favourite": "Dodaj do ulubionych", "status.favourites": "{count, plural, one {polubienie} few {polubienia} other {polubień}}", "status.filter": "Filtruj ten wpis", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 9978bf7644d520..235cec145d48ec 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -789,7 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edição em {date}", "status.edited_x_times": "Editado {count, plural, one {{count} hora} other {{count} vezes}}", - "status.embed": "Incorporar", + "status.embed": "Obter código de incorporação", "status.favourite": "Favorita", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filtrar esta publicação", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 24f59931128e58..1dc4bc5109f522 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -359,6 +359,8 @@ "hints.profiles.see_more_followers": "Ver mais seguidores no {domain}", "hints.profiles.see_more_follows": "Veja mais perfis seguidos em {domain}", "hints.profiles.see_more_posts": "Ver mais publicações em {domain}", + "hints.threads.replies_may_be_missing": "As respostas de outros servidores podem estar a faltar.", + "hints.threads.see_more": "Veja mais respostas em {domain}", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Ocultar comunicações", @@ -366,6 +368,9 @@ "home.pending_critical_update.link": "Ver atualizações", "home.pending_critical_update.title": "Atualização de segurança crítica disponível!", "home.show_announcements": "Exibir comunicações", + "ignore_notifications_modal.disclaimer": "O Mastodon não pode informar utilizadores que ignoraste as notificações deles. Ignorar notificações não irá parar as mensagens serem enviadas.", + "ignore_notifications_modal.filter_instead": "Filtrar em vez disso", + "ignore_notifications_modal.filter_to_act_users": "Ainda poderá aceitar, rejeitar, ou reportar utilizadores", "interaction_modal.description.favourite": "Com uma conta no Mastodon, pode adicionar assinalar esta publicação como favorita para que o autor saiba que gostou e guardá-la para mais tarde.", "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.", "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.", @@ -749,7 +754,6 @@ "status.edit": "Editar", "status.edited": "Última edição em {date}", "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}", - "status.embed": "Embutir", "status.favourite": "Assinalar como favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicação", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 18380928b34be2..73b8140de65845 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -556,7 +556,6 @@ "status.direct_indicator": "Mențiune privată", "status.edit": "Modifică", "status.edited_x_times": "Modificată {count, plural, one {o dată} few {de {count} ori} other {de {count} de ori}}", - "status.embed": "Înglobează", "status.filter": "Filtrează această postare", "status.history.created": "creată de {name} pe {date}", "status.history.edited": "modificată de {name} pe {date}", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ab8974346786ed..e335bff299f371 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -716,7 +716,6 @@ "status.edit": "Изменить", "status.edited": "Дата последнего изменения: {date}", "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", - "status.embed": "Встроить на свой сайт", "status.favourite": "Избранное", "status.filter": "Фильтровать этот пост", "status.history.created": "{name} создал {date}", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index ac715e718e88bb..85bd9aa9ddc79e 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -503,7 +503,6 @@ "status.detailed_status": "विस्तृतसंभाषणदृश्यम्", "status.edit": "सम्पादय", "status.edited_x_times": "Edited {count, plural, one {{count} वारम्} other {{count} वारम्}}", - "status.embed": "निहितम्", "status.filter": "पत्रमिदं फिल्तरं कुरु", "status.history.created": "{name} असृजत् {date}", "status.history.edited": "{name} समपादयत् {date}", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 0e055716e1af82..ecf5141eb50563 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -545,7 +545,6 @@ "status.detailed_status": "Visualizatzione de detàlliu de arresonada", "status.edit": "Modìfica", "status.edited_x_times": "Modificadu {count, plural, one {{count} # borta} other {{count} bortas}}", - "status.embed": "Afissa", "status.favourites": "{count, plural, one {preferidu} other {preferidos}}", "status.load_more": "Càrriga·nde àteros", "status.media_hidden": "Elementos multimediales cuados", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index b1b17b57db2d6c..269e29a86ff6ff 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -474,7 +474,6 @@ "status.detailed_status": "Detailt conversation view", "status.edit": "Edit", "status.edited_x_times": "Editit {count, plural, one {{count} time} other {{count} times}}", - "status.embed": "Embed", "status.filter": "Filter this post", "status.history.created": "{name} creatit {date}", "status.history.edited": "{name} editit {date}", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index a9288fd104945a..93ce9dd7e27113 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -415,7 +415,6 @@ "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", "status.edit": "සංස්කරණය", "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", - "status.embed": "කාවැද්දූ", "status.filter": "මෙම ලිපිය පෙරන්න", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index f89e8cf5ab0ab4..d21dc5e1ab4fa9 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -702,7 +702,6 @@ "status.edit": "Upraviť", "status.edited": "Naposledy upravený {date}", "status.edited_x_times": "Upravený {count, plural, other {{count}×}}", - "status.embed": "Vložiť", "status.favourite": "Ohviezdičkované", "status.filter": "Filtrovanie tohto príspevku", "status.history.created": "Vytvorené účtom {name} {date}", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 4e83b150892cb1..183636a653a0b6 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -746,7 +746,6 @@ "status.edit": "Uredi", "status.edited": "Zadnje urejanje {date}", "status.edited_x_times": "Urejeno {count, plural, one {#-krat} two {#-krat} few {#-krat} other {#-krat}}", - "status.embed": "Vdelaj", "status.favourite": "Priljubljen_a", "status.favourites": "{count, plural, one {priljubitev} two {priljubitvi} few {priljubitve} other {priljubitev}}", "status.filter": "Filtriraj to objavo", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 1904c186f7af81..745bba179f4c54 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -789,7 +789,7 @@ "status.edit": "Përpunojeni", "status.edited": "Përpunuar së fundi më {date}", "status.edited_x_times": "Përpunuar {count, plural, one {{count} herë} other {{count} herë}}", - "status.embed": "Trupëzim", + "status.embed": "Merrni kod trupëzimi", "status.favourite": "I vini shenjë si të parapëlqyer", "status.favourites": "{count, plural, one {i parapëlqyer} other {të parapëlqyer}}", "status.filter": "Filtroje këtë postim", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 02be70f5bf2e6c..de30ca280fae12 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -706,7 +706,6 @@ "status.edit": "Uredi", "status.edited": "Poslednje uređivanje {date}", "status.edited_x_times": "Uređeno {count, plural, one {{count} put} other {{count} puta}}", - "status.embed": "Ugradi", "status.favourite": "Omiljeno", "status.favourites": "{count, plural, one {# omiljeno} few {# omiljena} other {# omiljenih}}", "status.filter": "Filtriraj ovu objavu", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index dfd10579e6b65e..255215a1671f72 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -706,7 +706,6 @@ "status.edit": "Уреди", "status.edited": "Последње уређивање {date}", "status.edited_x_times": "Уређено {count, plural, one {{count} пут} other {{count} пута}}", - "status.embed": "Угради", "status.favourite": "Омиљено", "status.favourites": "{count, plural, one {# омиљено} few {# омиљена} other {# омиљених}}", "status.filter": "Филтрирај ову објаву", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 61cad916cae7f1..14fac1ec8daf0a 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -783,7 +783,7 @@ "status.edit": "Redigera", "status.edited": "Senast ändrad {date}", "status.edited_x_times": "Redigerad {count, plural, one {{count} gång} other {{count} gånger}}", - "status.embed": "Bädda in", + "status.embed": "Hämta kod för inbäddning", "status.favourite": "Favoritmarkera", "status.favourites": "{count, plural, one {favorit} other {favoriter}}", "status.filter": "Filtrera detta inlägg", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 4f209b7e3ebb03..87d6660f053a8d 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -345,7 +345,6 @@ "status.delete": "நீக்கு", "status.detailed_status": "விரிவான உரையாடல் காட்சி", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "கிடத்து", "status.load_more": "அதிகமாய் ஏற்று", "status.media_hidden": "மீடியா மறைக்கப்பட்டது", "status.mention": "குறிப்பிடு @{name}", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index a6dc74b290dcf5..40fbd7f7bdec1d 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -245,7 +245,6 @@ "status.delete": "తొలగించు", "status.detailed_status": "వివరణాత్మక సంభాషణ వీక్షణ", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "ఎంబెడ్", "status.load_more": "మరిన్ని లోడ్ చేయి", "status.media_hidden": "మీడియా దాచబడింది", "status.mention": "@{name}ను ప్రస్తావించు", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 81424a9490fbd9..b8c942f99966d4 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -787,7 +787,6 @@ "status.edit": "แก้ไข", "status.edited": "แก้ไขล่าสุดเมื่อ {date}", "status.edited_x_times": "แก้ไข {count, plural, other {{count} ครั้ง}}", - "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", "status.favourites": "{count, plural, other {รายการโปรด}}", "status.filter": "กรองโพสต์นี้", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 0ca30c57da552c..6c21026bdbd0e4 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -359,7 +359,6 @@ "status.cancel_reblog_private": "o pini e pana", "status.delete": "o weka", "status.edit": "o ante", - "status.embed": "ni o lon insa pi lipu ante", "status.favourite": "o sitelen pona", "status.history.created": "{name} li pali e ni lon {date}", "status.history.edited": "{name} li ante lon {date}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 6577737bf11c09..5e875ff64f425a 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -789,7 +789,7 @@ "status.edit": "Düzenle", "status.edited": "Son düzenleme {date}", "status.edited_x_times": "{count, plural, one {{count} kez} other {{count} kez}} düzenlendi", - "status.embed": "Gömülü", + "status.embed": "Gömme kodunu al", "status.favourite": "Favori", "status.favourites": "{count, plural, one {beğeni} other {beğeni}}", "status.filter": "Bu gönderiyi süzgeçle", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 1439e2ef5830b0..01429f9431b132 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -410,7 +410,6 @@ "status.direct_indicator": "Хосусый искә алу", "status.edit": "Үзгәртү", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", - "status.embed": "Веб-биткә кертү", "status.history.created": "{name} ясалды {date}", "status.history.edited": "{name} төзәтте {date}", "status.load_more": "Күбрәк йөкләү", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 638a84b64f59c4..a9fd44ee6ce3b4 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -789,7 +789,7 @@ "status.edit": "Редагувати", "status.edited": "Востаннє змінено {date}", "status.edited_x_times": "Відредаговано {count, plural, one {{count} раз} few {{count} рази} many {{counter} разів} other {{counter} разів}}", - "status.embed": "Вбудувати", + "status.embed": "Отримати код вставки", "status.favourite": "Уподобане", "status.favourites": "{count, plural, one {вподобання} few {вподобання} many {вподобань} other {вподобання}}", "status.filter": "Фільтрувати цей допис", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 09f288469dc8b0..449435847e926b 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -787,7 +787,6 @@ "status.edit": "Sửa", "status.edited": "Sửa lần cuối {date}", "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", - "status.embed": "Nhúng", "status.favourite": "Thích", "status.favourites": "{count, plural, other {lượt thích}}", "status.filter": "Lọc tút này", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 9a6076f23fb675..dd86b92ccea469 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -789,7 +789,7 @@ "status.edit": "编辑", "status.edited": "最近编辑于 {date}", "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}", - "status.embed": "嵌入", + "status.embed": "获取嵌入代码", "status.favourite": "喜欢", "status.favourites": "{count, plural, other {次喜欢}}", "status.filter": "过滤此嘟文", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 2a55e6fc20a5d2..6fc1b9d2673a3d 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -699,7 +699,6 @@ "status.edit": "編輯", "status.edited": "最後編輯於 {date}", "status.edited_x_times": "Edited {count, plural, one {{count} 次} other {{count} 次}}", - "status.embed": "嵌入", "status.favourite": "最愛", "status.favourites": "{count, plural, one {則最愛} other {則最愛}}", "status.filter": "篩選此帖文", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index cdc6c977b71aca..a2168c42a40046 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -789,7 +789,7 @@ "status.edit": "編輯", "status.edited": "上次編輯於 {date}", "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}", - "status.embed": "內嵌嘟文", + "status.embed": "取得嵌入程式碼", "status.favourite": "最愛", "status.favourites": "{count, plural, other {# 則最愛}}", "status.filter": "過濾此嘟文", diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index 882c40ae8de618..4d2cba3a277dc6 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -15,6 +15,12 @@ es-MX: user/invite_request: text: Motivo errors: + attributes: + domain: + invalid: no es un nombre de dominio válido + messages: + invalid_domain_on_line: "%{value} no es un nombre de dominio válido" + too_many_lines: excede el límite de %{limit} líneas models: account: attributes: diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index 569b783103c96a..16e2c66cbef671 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -15,6 +15,12 @@ es: user/invite_request: text: Razón errors: + attributes: + domain: + invalid: no es un nombre de dominio válido + messages: + invalid_domain_on_line: "%{value} no es un nombre de dominio válido" + too_many_lines: excede el límite de %{limit} líneas models: account: attributes: diff --git a/config/locales/activerecord.fr-CA.yml b/config/locales/activerecord.fr-CA.yml index 1a83a0e9e26a55..b6f005d2202bd7 100644 --- a/config/locales/activerecord.fr-CA.yml +++ b/config/locales/activerecord.fr-CA.yml @@ -15,6 +15,9 @@ fr-CA: user/invite_request: text: Raison errors: + attributes: + domain: + invalid: n'est pas un nom de domaine valide models: account: attributes: diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 24bb39502bd4c9..05eb7ce67b4299 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -15,6 +15,9 @@ fr: user/invite_request: text: Motif errors: + attributes: + domain: + invalid: n'est pas un nom de domaine valide models: account: attributes: diff --git a/config/locales/activerecord.lv.yml b/config/locales/activerecord.lv.yml index 5e41f4630e46f1..b7e2db65e88e58 100644 --- a/config/locales/activerecord.lv.yml +++ b/config/locales/activerecord.lv.yml @@ -15,6 +15,12 @@ lv: user/invite_request: text: Iemesls errors: + attributes: + domain: + invalid: nav derīgs domēna nosaukums + messages: + invalid_domain_on_line: "%{value} nav derīgs domēna nosaukums" + too_many_lines: pārsniedz %{limit} līniju ierobežojumu models: account: attributes: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 480feeba2d1ac5..7512e03fd50f18 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -53,6 +53,7 @@ ar: title: تعديل عنوان البريد الإلكتروني الخاص بـ %{username} change_role: changed_msg: تم تغيير بنجاح! + edit_roles: إدارة أدوار المستخدمين label: تغيير الدور no_role: بلا دور title: تغيير دور %{username} @@ -1164,6 +1165,11 @@ ar: view_strikes: عرض العقوبات السابقة المُطَبَّقة ضد حسابك too_fast: تم إرسال النموذج بسرعة كبيرة، حاول مرة أخرى. use_security_key: استخدام مفتاح الأمان + author_attribution: + example_title: عينة نص + more_from_html: المزيد من %{name} + s_blog: مدونة %{name} + title: إسناد المؤلف challenge: confirm: واصل hint_html: "توصية: لن نطلب منك ثانية كلمتك السرية في غضون الساعة اللاحقة." @@ -1971,6 +1977,7 @@ ar: instructions_html: قم بنسخ ولصق التعليمة البرمجية أدناه في شفرة HTML لموقعك الخاص على الويب. ثم أضف عنوان موقع الويب الخاص بك إلى أحد الحقول الإضافية في ملفك التعريفي عبر لسان "تعديل الملف التعريفي" ثم احفظ التغييرات. verification: التحقق verified_links: روابطك التي تم التحقق منها + website_verification: التحقق من موقع الويب webauthn_credentials: add: إضافة مفتاح أمان جديد create: diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 11c50203050e4c..0f05adf1486c1b 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -83,6 +83,7 @@ lv: access_denied: Resursa īpašnieks vai autorizācijas serveris pieprasījumu noraidīja. credential_flow_not_configured: Resursa īpašnieka paroles akreditācijas datu plūsma neizdevās, jo Doorkeeper.configure.resource_owner_from_credentials nebija konfigurēts. invalid_client: Klienta autentifikācija neizdevās nezināma klienta, klienta autentifikācijas vai neatbalstītas autentifikācijas metodes dēļ. + invalid_code_challenge_method: Koda izaicinājuma veidam jābūt S256, vienkāršs netiek atbalstīts. invalid_grant: Sniegtā autorizācijas piekrišana nav derīga, tai ir beidzies derīguma termiņš, tā ir atsaukta, tā neatbilst autorizācijas pieprasījumā izmantotajam novirzīšanas URI vai tika izsniegta citam klientam. invalid_redirect_uri: Iekļauts novirzīšanas uri nav derīgs. invalid_request: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 050388c180ae66..7916e27f3acc39 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -24,6 +24,8 @@ es-MX: admin: account_actions: action: Realizar acción + already_silenced: Esta cuenta ya ha sido limitada. + already_suspended: Esta cuenta ya ha sido suspendida. title: Moderar %{acct} account_moderation_notes: create: Crear @@ -45,6 +47,7 @@ es-MX: title: Cambiar el correo electrónico de %{username} change_role: changed_msg: Rol cambiado exitosamente! + edit_roles: Administrar roles de usuario label: Cambiar de rol no_role: Sin rol title: Cambiar el rol para %{username} @@ -601,6 +604,7 @@ es-MX: suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. + actions_no_posts: Este informe no incluye ninguna publicación asociada a eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -1156,6 +1160,12 @@ es-MX: view_strikes: Ver amonestaciones pasadas contra tu cuenta too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo. use_security_key: Usar la clave de seguridad + author_attribution: + example_title: Texto de ejemplo + hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + more_from_html: Más de %{name} + s_blog: Blog de %{name} + title: Atribución del autor challenge: confirm: Continuar hint_html: "Tip: No volveremos a preguntarte por la contraseña durante la siguiente hora." @@ -1933,6 +1943,7 @@ es-MX: instructions_html: Copia y pega el siguiente código en el HTML de tu sitio web. A continuación, añade la dirección de su sitio web en uno de los campos extra de tu perfil desde la pestaña "Editar perfil" y guarda los cambios. verification: Verificación verified_links: Tus links verificados + website_verification: Verificación del sitio web webauthn_credentials: add: Agregar nueva clave de seguridad create: diff --git a/config/locales/es.yml b/config/locales/es.yml index 81a547ad88fc47..16716641f97582 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -24,6 +24,8 @@ es: admin: account_actions: action: Realizar acción + already_silenced: Esta cuenta ya ha sido limitada. + already_suspended: Esta cuenta ya ha sido suspendida. title: Moderar %{acct} account_moderation_notes: create: Crear @@ -45,6 +47,7 @@ es: title: Cambiar el correo electrónico de %{username} change_role: changed_msg: "¡Rol cambiado con éxito!" + edit_roles: Administrar roles de usuario label: Cambiar rol no_role: Sin rol title: Cambiar rol para %{username} @@ -601,6 +604,7 @@ es: suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y finalmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los informes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este informe. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. + actions_no_posts: Este informe no incluye ninguna publicación asociada a eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -1156,6 +1160,12 @@ es: view_strikes: Ver amonestaciones pasadas contra tu cuenta too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo. use_security_key: Usar la clave de seguridad + author_attribution: + example_title: Texto de ejemplo + hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + more_from_html: Más de %{name} + s_blog: Blog de %{name} + title: Atribución del autor challenge: confirm: Continuar hint_html: "Tip: No volveremos a preguntarte por la contraseña durante la siguiente hora." @@ -1933,6 +1943,7 @@ es: instructions_html: Copia y pega el siguiente código en el HTML de tu sitio web. A continuación, añade la dirección de su sitio web en uno de los campos extra de tu perfil desde la pestaña "Editar perfil" y guarda los cambios. verification: Verificación verified_links: Tus enlaces verificados + website_verification: Verificación del sitio web webauthn_credentials: add: Agregar nueva clave de seguridad create: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f2fe134e325f23..996c8d6cd2abdf 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -24,12 +24,15 @@ fa: admin: account_actions: action: انجامِ کنش + already_silenced: این جساب از پیش محدود شده. + already_suspended: این جساب از پیش معلّق شده. title: انجام کنش مدیریتی روی %{acct} account_moderation_notes: create: افزودن یادداشت created_msg: یادداشت مدیر با موفقیت ساخته شد! destroyed_msg: یادداشت نظارتی با موفقیت نابود شد! accounts: + add_email_domain_block: انسداد دامنهٔ رایانامه approve: پذیرفتن approved_msg: کارهٔ ثبت‌نام %{username} با موفقیت تأیید شد are_you_sure: مطمئنید؟ @@ -44,6 +47,7 @@ fa: title: تغییر رایانامه برای %{username} change_role: changed_msg: نقش با موفقیت تغییر کرد! + edit_roles: مدیریت نقش‌های کاربر label: تغییر نقش no_role: بدون نقش title: تغییر نقش برای %{username} @@ -56,6 +60,7 @@ fa: demote: تنزل‌دادن destroyed_msg: داده‌های %{username} در صف حدف قرار گرفتند disable: از کار انداختن + disable_sign_in_token_auth: از کار انداختن تأیید هویت ژتون رایانامه‌ای disable_two_factor_authentication: از کار انداختن ورود دومرحله‌ای disabled: از کار افتاده display_name: نام نمایشی @@ -64,6 +69,7 @@ fa: email: رایانامه email_status: وضعیت رایانامه enable: به کار انداختن + enable_sign_in_token_auth: به کار انداختن تأیید هویت ژتون رایانامه‌ای enabled: به کار افتاده enabled_msg: حساب %{username} با موفقیت به کار انداخته شد followers: پیگیران @@ -128,6 +134,7 @@ fa: resubscribe: اشتراک دوباره role: نقش search: جست‌وجو + search_same_email_domain: دیگر کاربران با دامنهٔ رایانامهٔ یکسان search_same_ip: دیگر کاربران با IP یکسان security: امنیت security_measures: @@ -168,13 +175,16 @@ fa: approve_appeal: پذیرش درخواست تجدیدنظر approve_user: تایید کاربر assigned_to_self_report: واگذاری گزارش + change_email_user: تغییر رایانامه برای کاربر change_role_user: تغیر نقش کاربر confirm_user: تأیید کاربر create_account_warning: ایجاد هشدار create_announcement: ایجاد اعلامیه + create_canonical_email_block: ایجاد انسداد رایانامه create_custom_emoji: ایجاد اموجی سفارشی create_domain_allow: ایجاد اجازهٔ دامنه create_domain_block: ایجاد انسداد دامنه + create_email_domain_block: ایجاد انسداد دامنهٔ رایانامه create_ip_block: ایجاد قاعدهٔ آی‌پی create_unavailable_domain: ایجاد دامنهٔ ناموجود create_user_role: ایجاد نقش @@ -214,6 +224,7 @@ fa: update_custom_emoji: به‌روز رسانی اموجی سفارشی update_domain_block: به‌روزرسانی مسدودسازی دامنه update_ip_block: بروزرسانی قاعدهٔ آی‌پی + update_report: به‌روز رسانی گزارش update_status: به‌روز رسانی وضعیت update_user_role: به روزرسانی نقش actions: @@ -250,6 +261,7 @@ fa: reject_user_html: "%{name} ثبت نام %{target} را رد کرد" remove_avatar_user_html: "%{name} تصویر نمایهٔ %{target} را حذف کرد" reopen_report_html: "%{name} گزارش %{target} را دوباره به جریان انداخت" + resend_user_html: "%{name} رایانامهٔ تأیید برای %{target} را دوباره فرستاد" reset_password_user_html: "%{name} گذرواژه کاربر %{target} را بازنشاند" resolve_report_html: "%{name} گزارش %{target} را رفع کرد" sensitive_account_html: "%{name} رسانهٔ %{target} را به عنوان حساس علامت‌گذاری کرد" @@ -264,6 +276,7 @@ fa: update_custom_emoji_html: "%{name} شکلک %{target} را به‌روز کرد" update_domain_block_html: "%{name} مسدودسازی دامنه را برای %{target} به‌روزرسانی کرد" update_ip_block_html: "%{name} قانون آی‌پی %{target} را تغییر داد" + update_report_html: "%{name} گزارش %{target} را به‌روز کرد" update_status_html: "%{name} نوشتهٔ %{target} را به‌روز کرد" update_user_role_html: "%{name} نقش %{target} را تغییر داد" deleted_account: حساب حذف شد @@ -271,6 +284,7 @@ fa: filter_by_action: پالایش بر اساس کنش filter_by_user: پالایش بر اساس کاربر title: سیاههٔ بازرسی + unavailable_instance: "(نام دامنه ناموجود)" announcements: destroyed_msg: اعلامیه با موفقیت حذف شد! edit: @@ -405,6 +419,7 @@ fa: attempts_over_week: one: "%{count} تلاش در هفتهٔ گذشته" other: "%{count} تلاش ورود در هفتهٔ گذشته" + created_msg: دامنهٔ رایانامه با موفقیت مسدود شد delete: پاک‌کردن dns: types: @@ -413,7 +428,10 @@ fa: new: create: ساختن مسدودسازی resolve: حل و فصل دامنه + title: مسدودسازی دامنهٔ رایانامهٔ جدید + no_email_domain_block_selected: هیچ انسداد دامنهٔ رایانامه‌ای تغییر نکرد زیرا هیچ‌کدامشان انتخاب نشده بودند not_permitted: مجاز نیست + title: دامنه‌های رایانامهٔ مسدود شده export_domain_allows: new: title: درون‌ریزی اجازه‌های دامنه @@ -586,6 +604,7 @@ fa: target_origin: خاستگاه حساب گزارش‌شده title: گزارش‌ها unassign: پس‌گرفتن مسئولیت + unknown_action_msg: 'کنش ناشناخته: %{action}' unresolved: حل‌نشده updated_at: به‌روز شد view_profile: دیدن نمایه @@ -625,6 +644,7 @@ fa: manage_taxonomies: مدیریت طیقه‌بندی‌ها manage_user_access: مدیریت دسترسی کاربران manage_users: مدیریت کاربران + manage_webhooks: مدیریت قلّاب‌های وب view_dashboard: دیدن داشبورد view_dashboard_description: اجازه به کاربران برای دسترسی به داشتبورد و سنجه‌های مختلف view_devops: دواپس @@ -643,6 +663,8 @@ fa: appearance: preamble: سفارشی‌سازی رابطس وب ماستودون. title: ظاهر + branding: + title: ویژندگی default_noindex: title: درخواست خروج از اندیس‌گذاری پیش‌گزیدهٔ موتور جست‌وجو discovery: @@ -743,6 +765,16 @@ fa: action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید message_html: "ذخیره‌سازتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است." tags: + moderation: + not_trendable: غیر قابل داغ شدن + not_usable: غير قابل استفاده + pending_review: بازبینی منتظر + review_requested: بازبینی درخواست شده + reviewed: بازبینی شده + title: وضعیت + trendable: قابل داغ شدن + unreviewed: بررسی نشده + usable: قابل استفاده review: وضعیت بازبینی updated_msg: تنظیمات برچسب‌ها با موفقیت به‌روز شد title: مدیریت @@ -753,15 +785,25 @@ fa: links: allow: اجازه به پیوند allow_provider: اجازه به ناشر + confirm_disallow: مطمئنید که می خواهید پیوندهای گزیده را ممنوع کنید؟ + confirm_disallow_provider: مطمئنید که می خواهید فراهم کننده‌های گزیده را ممنوع کنید؟ disallow: اجازه ندادن به پیوند disallow_provider: اجازه ندادن به ناشر no_link_selected: هیچ پیوندی تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند + publishers: + no_publisher_selected: هیچ ناشری تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند title: پیوندهای داغ + not_allowed_to_trend: اجازهٔ داغ شدن ندارد pending_review: بازبینی منتظر preview_card_providers: title: ناشران rejected: رد شده statuses: + allow: اجازه به فرسته + allow_account: اجازه به نگارنده + disallow: ممنوع کردن فرسته + disallow_account: ممنوع کردن نگارنده + no_status_selected: هیچ فرستهٔ داغی تغییری نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند title: فرسته‌های داغ tags: current_score: امتیاز کنونی %{score} @@ -845,7 +887,9 @@ fa: guide_link_text: همه می‌توانند کمک کنند. sensitive_content: محتوای حساس application_mailer: + notification_preferences: تغییر ترجیحات رایانامه salutation: "%{name}،" + settings: 'تغییر ترجیحات رایانامه: %{link}' unsubscribe: لغو اشتراک view: 'نمایش:' view_profile: دیدن نمایه @@ -863,6 +907,7 @@ fa: captcha_confirmation: title: بررسی های امنیتی confirmations: + awaiting_review_title: ثبت‌نامتان دارد بررسی می‌شود login_link: ورود welcome_title: خوش آمدید، %{name}! delete_account: پاک‌کردن حساب @@ -914,6 +959,10 @@ fa: view_strikes: دیدن شکایت‌های گذشته از حسابتان too_fast: فرم با سرعت بسیار زیادی فرستاده شد، دوباره تلاش کنید. use_security_key: استفاده از کلید امنیتی + author_attribution: + example_title: متن نمونه + more_from_html: بیش‌تر از %{name} + s_blog: بلاگ %{name} challenge: confirm: ادامه hint_html: "نکته: ما در یک ساعت آینده گذرواژه‌تان را از شما نخواهیم پرسید." @@ -1079,6 +1128,9 @@ fa: none: هیچ‌کدام order_by: مرتب‌سازی save_changes: ذخیرهٔ تغییرات + select_all_matching_items: + one: گزینش %{count} مورد مطابق با جست‌وجویتان. + other: گزینش %{count} مورد مطابق با جست‌وجویتان. today: امروز validation_errors: one: یک چیزی هنوز درست نیست! لطفاً خطاهای زیر را ببینید @@ -1087,6 +1139,7 @@ fa: errors: over_rows_processing_limit: دارای بیش از %{count} ردیف too_large: حجم فایل خیلی بزرگ است + failures: شکست‌ها imported: وارد شد modes: merge: ادغام @@ -1103,11 +1156,23 @@ fa: status: وضعیت success: داده‌های شما با موفقیت بارگذاری شد و به زودی پردازش می‌شود time_started: آغاز شده در + titles: + blocking: درون ریختن حساب‌های مسدود + bookmarks: درون ریختن نشانک‌ها + domain_blocking: درون ریختن دامنه‌های مسدود + following: درون ریختن حساب‌های پی‌گرفته + lists: درون ریختن سیاهه‌ها + muting: درون ریختن حساب‌های خموش + type: گونهٔ درون‌ریزی + type_groups: + constructive: پی‌گیری‌ها و نشانک‌ها + destructive: انسدادها و خموشی‌ها types: blocking: سیاههٔ انسداد bookmarks: نشانک‌ها domain_blocking: سیاههٔ انسداد دامنه following: سیاههٔ پی‌گیری + lists: سیاهه‌ها muting: سیاههٔ خموشی upload: بارگذاری invites: @@ -1140,6 +1205,7 @@ fa: authentication_methods: otp: کارهٔ تأیید هویت دوعاملی password: گذرواژه + sign_in_token: کد امنیتی رایانامه‌ای webauthn: کلیدهای امنیتی description_html: اگر فعالیتی می‌بینید که تشخیصش نمی‌دهید، تغییر گذرواژه و به کار انداختن تأیید هویت دوعاملی را در نظر داشته باشید. empty: هیچ تاریخچه‌ای از تأییدهویت موجود نیست @@ -1315,6 +1381,8 @@ fa: over_daily_limit: شما از حد مجاز %{limit} فرسته زمان‌بندی‌شده در آن روز فراتر رفته‌اید over_total_limit: شما از حد مجاز %{limit} فرسته زمان‌بندی‌شده فراتر رفته‌اید too_soon: زمان تعیین‌شده باید در آینده باشد + self_destruct: + title: این کارساز دارد بسته می‌شود sessions: activity: آخرین فعالیت browser: مرورگر @@ -1339,6 +1407,7 @@ fa: unknown_browser: مرورگر ناشناخته weibo: وبیو current_session: نشست فعلی + date: تاریخ description: "%{browser} روی %{platform}" explanation: مرورگرهای زیر هم‌اینک به حساب شما وارد شده‌اند. ip: آی‌پی @@ -1375,6 +1444,7 @@ fa: import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری migrate: انتقال حساب + notifications: آگاهی‌های رایانامه‌ای preferences: ترجیحات profile: نمایه relationships: پیگیری‌ها و پیگیران @@ -1382,6 +1452,9 @@ fa: strikes: شکایت‌های مدیریتی two_factor_authentication: ورود دومرحله‌ای webauthn_authentication: کلیدهای امنیتی + severed_relationships: + download: بارگیری (%{count}) + type: رویداد statuses: attached: audio: @@ -1520,7 +1593,16 @@ fa: silence: حساب محدود شده است suspend: حساب معلق شده است welcome: + apps_android_action: گرفتن از پلی گوگل + apps_ios_action: بارگیری روی فروشگاه کاره + apps_step: بارگیری کارهٔ رسمیمان. + apps_title: کاره‌های ماستودون + edit_profile_action: شخصی سازی explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند + follow_action: پی‌گیری + post_action: ایجاد + share_action: هم‌رسانی + sign_in_action: ورود subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! users: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 30837b6003ca50..b48b499bbe463a 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1162,8 +1162,10 @@ fi: use_security_key: Käytä suojausavainta author_attribution: example_title: Esimerkkiteksti + hint_html: Määrää, kuinka tulet tunnustetuksi, kun Mastodonissa jaetaan linkkejä. more_from_html: Lisää tekijältä %{name} s_blog: Käyttäjän %{name} blogi + title: Tekijän tunnustus challenge: confirm: Jatka hint_html: "Vihje: Emme pyydä sinulta salasanaa uudelleen seuraavan tunnin aikana." diff --git a/config/locales/fo.yml b/config/locales/fo.yml index d5127b4ad3838f..266b73bb10aa1d 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1913,6 +1913,9 @@ fo: follows_subtitle: Fylg vælkendar kontur follows_title: Hvørji tú átti at fylgt follows_view_more: Sí fleiri fólk at fylgja + hashtags_recent_count: + one: "%{people} fólk seinastu 2 dagarnar" + other: "%{people} fólk seinastu 2 dagarnar" hashtags_subtitle: Kanna rákið seinastu 2 dagarnar hashtags_title: Vælumtókt frámerki hashtags_view_more: Sí fleiri vælumtókt frámerki diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index a47d7447a12b45..5290ff53745315 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1147,6 +1147,12 @@ fr-CA: view_strikes: Voir les sanctions précédemment appliquées à votre compte too_fast: Formulaire envoyé trop rapidement, veuillez réessayer. use_security_key: Utiliser la clé de sécurité + author_attribution: + example_title: Exemple de texte + hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. + more_from_html: Plus via %{name} + s_blog: Blog de %{name} + title: Attribution de l'auteur·e challenge: confirm: Continuer hint_html: "Astuce : Nous ne vous demanderons plus votre mot de passe pour la prochaine heure." @@ -1914,6 +1920,7 @@ fr-CA: instructions_html: Copiez et collez le code ci-dessous dans le code HTML de votre site web. Ajoutez ensuite l’adresse de votre site dans l’un des champs supplémentaires de votre profil à partir de l‘onglet "Modifier le profil" et enregistrez les modifications. verification: Vérification verified_links: Vos liens vérifiés + website_verification: Vérification du site web webauthn_credentials: add: Ajouter une nouvelle clé de sécurité create: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b2c692ea6ffe87..8ee4e35acc608c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1147,6 +1147,12 @@ fr: view_strikes: Voir les sanctions précédemment appliquées à votre compte too_fast: Formulaire envoyé trop rapidement, veuillez réessayer. use_security_key: Utiliser la clé de sécurité + author_attribution: + example_title: Exemple de texte + hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. + more_from_html: Plus via %{name} + s_blog: Blog de %{name} + title: Attribution de l'auteur·e challenge: confirm: Continuer hint_html: "Astuce : Nous ne vous demanderons plus votre mot de passe pour la prochaine heure." @@ -1914,6 +1920,7 @@ fr: instructions_html: Copiez et collez le code ci-dessous dans le code HTML de votre site web. Ajoutez ensuite l’adresse de votre site dans l’un des champs supplémentaires de votre profil à partir de l‘onglet « Modifier le profil » et enregistrez les modifications. verification: Vérification verified_links: Vos liens vérifiés + website_verification: Vérification du site web webauthn_credentials: add: Ajouter une nouvelle clé de sécurité create: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 09e6b9ba0e1a5f..c902625eaa03bc 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -26,6 +26,8 @@ lv: admin: account_actions: action: Veikt darbību + already_silenced: Šis konts jau ir ierobežots. + already_suspended: Šis konts jau ir aizturēts. title: Veikt moderācijas darbību %{acct} account_moderation_notes: create: Atstāt piezīmi @@ -46,6 +48,7 @@ lv: title: Mainīt e-pastu %{username} change_role: changed_msg: Loma veiksmīgi nomainīta! + edit_roles: Pārvaldīt lietotāju lomas label: Mainīt lomu no_role: Nav lomas title: Mainīt lomu %{username} @@ -131,6 +134,7 @@ lv: resubscribe: Pieteikties vēlreiz role: Loma search: Meklēt + search_same_email_domain: Citi lietotāji ar tādu pašu e-pasta domēnu search_same_ip: Citi lietotāji ar tādu pašu IP security: Drošība security_measures: @@ -171,6 +175,7 @@ lv: approve_appeal: Apstiprināt Apelāciju approve_user: Apstiprināt lietotāju assigned_to_self_report: Piešķirt Pārskatu + change_email_user: Mainīt lietotāja e-pasta adresi change_role_user: Mainīt lietotāja lomu confirm_user: Apstiprināt lietotāju create_account_warning: Izveidot Brīdinājumu @@ -217,13 +222,16 @@ lv: update_custom_emoji: Atjaunināt pielāgoto emocijzīmi update_domain_block: Atjaunināt Domēna Bloku update_ip_block: Atjaunināt IP noteikumu + update_report: Atjaunināt atskaiti update_status: Atjaunināt ziņu update_user_role: Atjaunināt lomu actions: approve_appeal_html: "%{name} apstiprināja moderācijas lēmuma apelāciju no %{target}" approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}" assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" + change_email_user_html: "%{name} nomainīja lietotāja %{target} e-pasta adresi" change_role_user_html: "%{name} nomainīja lomu uz %{target}" + confirm_user_html: "%{name} apstiprināja lietotāja %{target} e-pasta adresi" create_account_warning_html: "%{name} nosūtīja brīdinājumu %{target}" create_announcement_html: "%{name} izveidoja jaunu paziņojumu %{target}" create_custom_emoji_html: "%{name} augšupielādēja jaunu emocijzīmi %{target}" @@ -253,6 +261,7 @@ lv: reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}" remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu" reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" + resend_user_html: "%{name} atkārtoti nosūtīja %{target} apstiprinājuma e-pasta ziņojumu" reset_password_user_html: "%{name} atiestatīja paroli lietotājam %{target}" resolve_report_html: "%{name} atrisināja ziņojumu %{target}" sensitive_account_html: "%{name} atzīmēja %{target} multividi kā sensitīvu" @@ -267,6 +276,7 @@ lv: update_custom_emoji_html: "%{name} atjaunināja emocijzīmi %{target}" update_domain_block_html: "%{name} atjaunināja domēna bloku %{target}" update_ip_block_html: "%{name} mainīja nosacījumu priekš IP %{target}" + update_report_html: "%{name} atjaunināja %{target} pārskatu" update_status_html: "%{name} atjaunināja ziņu %{target}" update_user_role_html: "%{name} nomainīja %{target} lomu" deleted_account: dzēsts konts @@ -274,6 +284,7 @@ lv: filter_by_action: Filtrēt pēc darbības filter_by_user: Filtrēt pēc lietotāja title: Auditācijas pieraksti + unavailable_instance: "(domēna vārds nav pieejams)" announcements: destroyed_msg: Paziņojums ir veiksmīgi izdzēsts! edit: @@ -855,7 +866,13 @@ lv: action: Pārbaudi šeit, lai iegūtu plašāku informāciju message_html: "Tava objektu krātuve ir nepareizi konfigurēta. Tavu lietotāju privātums ir apdraudēts." tags: + moderation: + not_usable: Nav izmantojams + pending_review: Gaida pārskatīšanu + review_requested: Pieprasīta pārskatīšana + reviewed: Pārskatīts review: Pārskatīt stāvokli + title: Tēmturi updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti title: Administrēšana trends: @@ -929,6 +946,7 @@ lv: delete: Dzēst edit_preset: Labot iepriekš iestatītus brīdinājumus empty: Tu vēl neesi definējis iepriekš iestatītos brīdinājumus. + title: Brīdinājumu priekšiestatījums webhooks: add_new: Pievienot galapunktu delete: Dzēst @@ -1004,7 +1022,9 @@ lv: guide_link_text: Ikviens var piedalīties. sensitive_content: Sensitīvs saturs application_mailer: + notification_preferences: Mainīt e-pasta uztādījumus salutation: "%{name}," + settings: 'Mainīt e-pasta uztādījumus: %{link}' unsubscribe: Atcelt abonēšanu view: 'Skatīt:' view_profile: Skatīt profilu @@ -1024,6 +1044,7 @@ lv: hint_html: Vēl tikai viena lieta! Mums ir jāapstiprina, ka tu esi cilvēks (tas ir tāpēc, lai mēs varētu nepieļaut surogātpasta izsūtīšanu!). Atrisini tālāk norādīto CAPTCHA un noklikšķini uz "Turpināt". title: Drošības pārbaude confirmations: + awaiting_review: E-pasta adrese ir apstiprināta. %{domain} darbinieki tagad pārskata reģistrāciju. Tiks saņemts e-pasta ziņojums, ja viņi apstiprinās kontu. awaiting_review_title: Tava reģistrācija tiek izskatīta clicking_this_link: klikšķinot šo saiti login_link: pieteikties @@ -1031,6 +1052,7 @@ lv: redirect_to_app_html: Tev vajadzētu būt novirzītam uz lietotni %{app_name}. Ja tas nenotika, mēģini %{clicking_this_link} vai manuāli atgriezieties lietotnē. registration_complete: Tava reģistrācija domēnā %{domain} tagad ir pabeigta! welcome_title: Laipni lūdzam, %{name}! + wrong_email_hint: Ja šī e-pasta adrese nav pareiza, to var mainīt konta iestatījumos. delete_account: Dzēst kontu delete_account_html: Ja vēlies dzēst savu kontu, tu vari turpināt šeit. Tev tiks lūgts apstiprinājums. description: @@ -1051,6 +1073,7 @@ lv: or_log_in_with: Vai piesakies ar privacy_policy_agreement_html: Esmu izlasījis un piekrītu privātuma politikai progress: + confirm: Apstiprināt e-pasta adresi details: Tavi dati review: Mūsu apskats rules: Pieņemt noteikumus @@ -1072,8 +1095,10 @@ lv: security: Drošība set_new_password: Iestatīt jaunu paroli setup: + email_below_hint_html: Jāpārbauda sava surogātpasta mape vai jāpieprasa vēl vienu! Savu e-pasta adresi var labot, ja tā ir nepareiza. email_settings_hint_html: Noklikšķini uz saites, kuru mēs tev nosūtījām, lai apstiprinātu %{email}. Mēs tepat pagaidīsim. link_not_received: Vai nesaņēmi sati? + new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pasta ziņojumu ar apstiprinājuma saiti. title: Pārbaudi savu iesūtni sign_in: preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja Tavs konts tiek mitināts citā serverī, Tu nevarēsi šeit pieteikties. @@ -1084,6 +1109,7 @@ lv: title: Atļauj tevi iestatīt %{domain}. status: account_status: Konta statuss + confirming: Gaida e-pasta adreses apstiprināšanas pabeigšanu. functional: Tavs konts ir pilnā darba kārtībā. redirecting_to: Tavs konts ir neaktīvs, jo pašlaik tas tiek novirzīts uz %{acct}. self_destruct: Tā kā %{domain} tiek slēgts, tu iegūsi tikai ierobežotu piekļuvi savam kontam. diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 0a665fb784d415..b591cdca5754eb 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -3,6 +3,7 @@ ar: simple_form: hints: account: + attribution_domains_as_text: يحمي من الإسناد الزائف. discoverable: يمكن عرض مشاركاتك العامة وملفك الشخصي أو التوصية به في مختلف مناطق ماستدون ويمكن اقتراح ملفك الشخصي على مستخدمين آخرين. display_name: اسمك الكامل أو اسمك المرح. fields: صفحتك الرئيسية، ضمائرك، عمرك، أي شيء تريده. diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index ff66bcb59e081c..2a2d06ce9b2974 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -3,6 +3,7 @@ es-MX: simple_form: hints: account: + attribution_domains_as_text: Protege frente atribuciones fraudulentas. discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu nick. fields: Tu página de inicio, pronombres, edad, todo lo que quieras. @@ -130,6 +131,7 @@ es-MX: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos + role: El rol controla qué permisos tiene el usuario. user_role: color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal highlighted: Esto hace que el rol sea públicamente visible @@ -142,6 +144,7 @@ es-MX: url: Donde los eventos serán enviados labels: account: + attribution_domains_as_text: Solo permitir sitios web específicos discoverable: Destacar el perfil y las publicaciones en el algoritmo de descubrimiento fields: name: Etiqueta diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 143c5d80756f9e..b22701aae7b0b8 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -3,6 +3,7 @@ es: simple_form: hints: account: + attribution_domains_as_text: Protege frente atribuciones fraudulentas. discoverable: Tu perfil y publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu apodo. fields: Tu carta de presentación, pronombres, edad, lo que quieras. @@ -130,6 +131,7 @@ es: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas + role: El rol controla qué permisos tiene el usuario. user_role: color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal highlighted: Esto hace que el rol sea públicamente visible @@ -142,6 +144,7 @@ es: url: Donde los eventos serán enviados labels: account: + attribution_domains_as_text: Solo permitir sitios web específicos discoverable: Destacar perfil y publicaciones en algoritmos de descubrimiento fields: name: Etiqueta diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index a2b29566f62b62..5c85367dbb7906 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,6 +3,7 @@ fi: simple_form: hints: account: + attribution_domains_as_text: Suojaa vääriltä tunnustuksilta. discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa. diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index 1128335f11c41d..794c3f4533178c 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -3,6 +3,7 @@ fr-CA: simple_form: hints: account: + attribution_domains_as_text: Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom cool. fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez. @@ -141,6 +142,7 @@ fr-CA: url: Là où les événements seront envoyés labels: account: + attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index c06453298468b7..e29d9f0a944d09 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -3,6 +3,7 @@ fr: simple_form: hints: account: + attribution_domains_as_text: Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom rigolo. fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez. @@ -141,6 +142,7 @@ fr: url: Là où les événements seront envoyés labels: account: + attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette From 49cbee383612bb58efeebd3377acc0d618fbf80e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 13 Sep 2024 04:43:21 -0400 Subject: [PATCH 003/467] Remove unused argument from `AccountMigration.within_cooldown` (#31892) --- app/models/account_migration.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb index dc22e329421df6..7a01e250e2c213 100644 --- a/app/models/account_migration.rb +++ b/app/models/account_migration.rb @@ -31,10 +31,14 @@ class AccountMigration < ApplicationRecord validate :validate_migration_cooldown validate :validate_target_account - scope :within_cooldown, ->(now = Time.now.utc) { where(arel_table[:created_at].gteq(now - COOLDOWN_PERIOD)) } + scope :within_cooldown, -> { where(created_at: cooldown_duration_ago..) } attr_accessor :current_password, :current_username + def self.cooldown_duration_ago + Time.current - COOLDOWN_PERIOD + end + def save_with_challenge(current_user) if current_user.encrypted_password.present? errors.add(:current_password, :invalid) unless current_user.valid_password?(current_password) From a2c4f5f5c0de75fb67cee011b98c82e0d75f0fbd Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 13 Sep 2024 04:49:03 -0400 Subject: [PATCH 004/467] Add coverage for `ListAccount` follow/follow_request set up (#31896) --- app/models/list_account.rb | 8 ++++-- spec/models/list_account_spec.rb | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 spec/models/list_account_spec.rb diff --git a/app/models/list_account.rb b/app/models/list_account.rb index e7016f2714a43f..2ff86057171e5c 100644 --- a/app/models/list_account.rb +++ b/app/models/list_account.rb @@ -20,13 +20,11 @@ class ListAccount < ApplicationRecord validates :account_id, uniqueness: { scope: :list_id } validate :validate_relationship - before_validation :set_follow + before_validation :set_follow, unless: :list_owner_account_is_account? private def set_follow - return if list.account_id == account.id - self.follow = Follow.find_by!(account_id: list.account_id, target_account_id: account.id) rescue ActiveRecord::RecordNotFound self.follow_request = FollowRequest.find_by!(account_id: list.account_id, target_account_id: account.id) @@ -39,4 +37,8 @@ def validate_relationship errors.add(:follow, 'mismatched accounts') if follow_id.present? && follow.target_account_id != account_id errors.add(:follow_request, 'mismatched accounts') if follow_request_id.present? && follow_request.target_account_id != account_id end + + def list_owner_account_is_account? + list.account_id == account_id + end end diff --git a/spec/models/list_account_spec.rb b/spec/models/list_account_spec.rb new file mode 100644 index 00000000000000..e5aad2affa9dce --- /dev/null +++ b/spec/models/list_account_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ListAccount do + describe 'Callbacks to set follows' do + context 'when list owner follows account' do + let!(:follow) { Fabricate :follow } + let(:list) { Fabricate :list, account: follow.account } + + it 'finds and sets the follow with the list account' do + list_account = described_class.create list: list, account: follow.target_account + expect(list_account) + .to have_attributes( + follow: eq(follow), + follow_request: be_nil + ) + end + end + + context 'when list owner has a follow request for account' do + let!(:follow_request) { Fabricate :follow_request } + let(:list) { Fabricate :list, account: follow_request.account } + + it 'finds and sets the follow request with the list account' do + list_account = described_class.create list: list, account: follow_request.target_account + expect(list_account) + .to have_attributes( + follow: be_nil, + follow_request: eq(follow_request) + ) + end + end + + context 'when list owner is the account' do + let(:list) { Fabricate :list } + + it 'does not set follow or follow request' do + list_account = described_class.create list: list, account: list.account + expect(list_account) + .to have_attributes( + follow: be_nil, + follow_request: be_nil + ) + end + end + end +end From ba81e4e0192371e1fc07ad6d7cf58e86766d0e77 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 13 Sep 2024 11:11:10 +0200 Subject: [PATCH 005/467] Fix inability to locally suspend remotely-suspended accounts in moderation interface (#31899) --- app/models/account.rb | 4 +++ app/models/admin/account_action.rb | 2 +- app/views/admin/account_actions/new.html.haml | 2 +- app/views/admin/reports/_actions.html.haml | 6 ++-- spec/models/account_spec.rb | 29 +++++++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 0a2cff2fe8705f..a4cab99f7b4152 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -259,6 +259,10 @@ def suspended? suspended_at.present? && !instance_actor? end + def suspended_locally? + suspended? && suspension_origin_local? + end + def suspended_permanently? suspended? && deletion_request.nil? end diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index 4be58ba85306bf..7c66b6e64625f7 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -74,7 +74,7 @@ def types_for_account(account) end def disabled_types_for_account(account) - if account.suspended? + if account.suspended_locally? %w(silence suspend) elsif account.silenced? %w(silence) diff --git a/app/views/admin/account_actions/new.html.haml b/app/views/admin/account_actions/new.html.haml index 5b98582d8c769a..c4311eba963cde 100644 --- a/app/views/admin/account_actions/new.html.haml +++ b/app/views/admin/account_actions/new.html.haml @@ -1,7 +1,7 @@ - content_for :page_title do = t('admin.account_actions.title', acct: @account.pretty_acct) -- if @account.suspended? +- if @account.suspended_locally? .flash-message.alert = t('admin.account_actions.already_suspended') - elsif @account.silenced? diff --git a/app/views/admin/reports/_actions.html.haml b/app/views/admin/reports/_actions.html.haml index 7317d401e766ca..ef016e949bddf0 100644 --- a/app/views/admin/reports/_actions.html.haml +++ b/app/views/admin/reports/_actions.html.haml @@ -27,7 +27,7 @@ = form.button t('admin.accounts.silence'), name: :silence, class: 'button button--destructive', - disabled: report.target_account.silenced? || report.target_account.suspended?, + disabled: report.target_account.silenced? || report.target_account.suspended_locally?, title: report.target_account.silenced? ? t('admin.account_actions.already_silenced') : '' .report-actions__item__description = t('admin.reports.actions.silence_description_html') @@ -36,8 +36,8 @@ = form.button t('admin.accounts.suspend'), name: :suspend, class: 'button button--destructive', - disabled: report.target_account.suspended?, - title: report.target_account.suspended? ? t('admin.account_actions.already_suspended') : '' + disabled: report.target_account.suspended_locally?, + title: report.target_account.suspended_locally? ? t('admin.account_actions.already_suspended') : '' .report-actions__item__description = t('admin.reports.actions.suspend_description_html') .report-actions__item diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 2ec7aafc510432..e8d761f38b5049 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -10,10 +10,39 @@ let(:bob) { Fabricate(:account, username: 'bob') } + describe '#suspended_locally?' do + context 'when the account is not suspended' do + it 'returns false' do + expect(subject.suspended_locally?).to be false + end + end + + context 'when the account is suspended locally' do + before do + subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) + end + + it 'returns true' do + expect(subject.suspended_locally?).to be true + end + end + + context 'when the account is suspended remotely' do + before do + subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) + end + + it 'returns false' do + expect(subject.suspended_locally?).to be false + end + end + end + describe '#suspend!' do it 'marks the account as suspended and creates a deletion request' do expect { subject.suspend! } .to change(subject, :suspended?).from(false).to(true) + .and change(subject, :suspended_locally?).from(false).to(true) .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) end From c1b2c4fd9a3ae8110d75794c98fe0833c31ff9cc Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Fri, 13 Sep 2024 13:37:15 +0200 Subject: [PATCH 006/467] Strip protocol from attribution domains (#31900) --- .../concerns/account/attribution_domains.rb | 6 +++- spec/models/account_spec.rb | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/account/attribution_domains.rb b/app/models/concerns/account/attribution_domains.rb index 37a498a150dfdc..163c2291fea770 100644 --- a/app/models/concerns/account/attribution_domains.rb +++ b/app/models/concerns/account/attribution_domains.rb @@ -13,7 +13,11 @@ def attribution_domains_as_text def attribution_domains_as_text=(str) self[:attribution_domains] = str.split.filter_map do |line| - line.strip.delete_prefix('*.') + line + .strip + .delete_prefix('http://') + .delete_prefix('https://') + .delete_prefix('*.') end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index e8d761f38b5049..a8f6ed74937af4 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -792,6 +792,34 @@ end end + describe '#attribution_domains_as_text=' do + subject { Fabricate(:account) } + + it 'sets attribution_domains accordingly' do + subject.attribution_domains_as_text = "hoge.com\nexample.com" + + expect(subject.attribution_domains).to contain_exactly('hoge.com', 'example.com') + end + + it 'strips leading "*."' do + subject.attribution_domains_as_text = "hoge.com\n*.example.com" + + expect(subject.attribution_domains).to contain_exactly('hoge.com', 'example.com') + end + + it 'strips the protocol if present' do + subject.attribution_domains_as_text = "http://hoge.com\nhttps://example.com" + + expect(subject.attribution_domains).to contain_exactly('hoge.com', 'example.com') + end + + it 'strips a combination of leading "*." and protocol' do + subject.attribution_domains_as_text = "http://*.hoge.com\nhttps://*.example.com" + + expect(subject.attribution_domains).to contain_exactly('hoge.com', 'example.com') + end + end + describe 'Normalizations' do describe 'username' do it { is_expected.to normalize(:username).from(" \u3000bob \t \u00a0 \n ").to('bob') } From 5ba3405be4c1f708f198580b481f822698dab392 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:07:33 +0200 Subject: [PATCH 007/467] Update dependency opentelemetry-instrumentation-pg to '~> 0.29.0' (#31897) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 4c808fa48006b7..4cce095ec595bc 100644 --- a/Gemfile +++ b/Gemfile @@ -111,7 +111,7 @@ group :opentelemetry do gem 'opentelemetry-instrumentation-http', '~> 0.23.2', require: false gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false - gem 'opentelemetry-instrumentation-pg', '~> 0.28.0', require: false + gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 206178a530f847..19e66659bf7879 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -502,8 +502,8 @@ GEM opentelemetry-common (~> 0.20) opentelemetry-sdk (~> 1.2) opentelemetry-semantic_conventions - opentelemetry-helpers-sql-obfuscation (0.1.0) - opentelemetry-common (~> 0.20) + opentelemetry-helpers-sql-obfuscation (0.2.0) + opentelemetry-common (~> 0.21) opentelemetry-instrumentation-action_mailer (0.1.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) @@ -528,8 +528,9 @@ GEM opentelemetry-instrumentation-active_support (0.6.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-base (0.22.3) + opentelemetry-instrumentation-base (0.22.6) opentelemetry-api (~> 1.0) + opentelemetry-common (~> 0.21) opentelemetry-registry (~> 0.1) opentelemetry-instrumentation-concurrent_ruby (0.21.4) opentelemetry-api (~> 1.0) @@ -549,7 +550,7 @@ GEM opentelemetry-instrumentation-net_http (0.22.7) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-pg (0.28.0) + opentelemetry-instrumentation-pg (0.29.0) opentelemetry-api (~> 1.0) opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) @@ -991,7 +992,7 @@ DEPENDENCIES opentelemetry-instrumentation-http (~> 0.23.2) opentelemetry-instrumentation-http_client (~> 0.22.3) opentelemetry-instrumentation-net_http (~> 0.22.4) - opentelemetry-instrumentation-pg (~> 0.28.0) + opentelemetry-instrumentation-pg (~> 0.29.0) opentelemetry-instrumentation-rack (~> 0.24.1) opentelemetry-instrumentation-rails (~> 0.31.0) opentelemetry-instrumentation-redis (~> 0.25.3) From 4b40d13cb37a465cc334e20d8131070c8a23d268 Mon Sep 17 00:00:00 2001 From: Claire Date: Sat, 14 Sep 2024 02:16:02 +0200 Subject: [PATCH 008/467] Increase preview card image size limit from 2MB to 8MB when using libvips (#31904) --- app/models/preview_card.rb | 2 +- spec/models/preview_card_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 5a11351e58808a..7579178f83ea23 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -39,7 +39,7 @@ class PreviewCard < ApplicationRecord include Attachmentable IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze - LIMIT = 2.megabytes + LIMIT = Rails.configuration.x.use_vips ? 8.megabytes : 2.megabytes BLURHASH_OPTIONS = { x_comp: 4, diff --git a/spec/models/preview_card_spec.rb b/spec/models/preview_card_spec.rb index 2f0ea38ee450ef..c0bc2b6e0e01bf 100644 --- a/spec/models/preview_card_spec.rb +++ b/spec/models/preview_card_spec.rb @@ -3,6 +3,12 @@ require 'rails_helper' RSpec.describe PreviewCard do + describe 'file size limit', :attachment_processing do + it 'is set differently whether vips is enabled or not' do + expect(described_class::LIMIT).to eq(Rails.configuration.x.use_vips ? 8.megabytes : 2.megabytes) + end + end + describe 'validations' do describe 'urls' do it 'allows http schemes' do From 0cc05fbb7cf818a0ef95576ba663182d02fdd4c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:50:43 +0200 Subject: [PATCH 009/467] Update dependency i18n to v1.14.6 (#31925) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 19e66659bf7879..b5515128594281 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -331,7 +331,7 @@ GEM httplog (1.7.0) rack (>= 2.0) rainbow (>= 2.0.0) - i18n (1.14.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) i18n-tasks (1.0.14) activesupport (>= 4.0.2) From 2afaa3b3d48248a057f206ae3a3840622e5b959d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:50:51 +0200 Subject: [PATCH 010/467] Update dependency husky to v9.1.6 (#31923) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 50443c6db9909a..7731124539638f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9535,11 +9535,11 @@ __metadata: linkType: hard "husky@npm:^9.0.11": - version: 9.1.5 - resolution: "husky@npm:9.1.5" + version: 9.1.6 + resolution: "husky@npm:9.1.6" bin: husky: bin.js - checksum: 10c0/f42efb95a026303eb880898760f802d88409780dd72f17781d2dfc302177d4f80b641cf1f1694f53f6d97c536c7397684133d8c8fe4a4426f7460186a7d1c6b8 + checksum: 10c0/705673db4a247c1febd9c5df5f6a3519106cf0335845027bb50a15fba9b1f542cb2610932ede96fd08008f6d9f49db0f15560509861808b0031cdc0e7c798bac languageName: node linkType: hard From 9ea270526cc4d8c0d1b5a546d7bc598b2c3a9e93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:51:13 +0200 Subject: [PATCH 011/467] Update DefinitelyTyped types (non-major) (#31922) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7731124539638f..5f12dfe932232a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3661,12 +3661,12 @@ __metadata: linkType: hard "@types/jest@npm:^29.5.2": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" + version: 29.5.13 + resolution: "@types/jest@npm:29.5.13" dependencies: expect: "npm:^29.0.0" pretty-format: "npm:^29.0.0" - checksum: 10c0/25fc8e4c611fa6c4421e631432e9f0a6865a8cb07c9815ec9ac90d630271cad773b2ee5fe08066f7b95bebd18bb967f8ce05d018ee9ab0430f9dfd1d84665b6f + checksum: 10c0/9c31af0b155387b9860908830de63c6b79011d7c87c8b61b39da124e26e55423dd51b006749aafe4f0ef3a065016619a1f93ef4b055157d43727f448e67824b7 languageName: node linkType: hard @@ -3768,13 +3768,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.8 - resolution: "@types/pg@npm:8.11.8" + version: 8.11.10 + resolution: "@types/pg@npm:8.11.10" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/040eb04edda338a13dccee47585b4479549fd54561e1bc3768690545adb8708a089b178e04fab9241935d7bad361314fc57af3ad87b391cfb9dc0895dd049763 + checksum: 10c0/c8800d0ab2c6424308e6c6b40c73f19583ee1aed758462bd07694844b0a551b5841442205a4ee05207b80109ba502f33f20241b1bd9b4902e713611fb9e08f6c languageName: node linkType: hard From c24de04f9c828b4b64aee5bb8fa133a88b590b65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:51:36 +0200 Subject: [PATCH 012/467] Update dependency postcss to v8.4.47 (#31913) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5f12dfe932232a..a0c1bb7bae233e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13088,10 +13088,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 languageName: node linkType: hard @@ -14050,13 +14050,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.41": - version: 8.4.45 - resolution: "postcss@npm:8.4.45" + version: 8.4.47 + resolution: "postcss@npm:8.4.47" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10c0/ad6f8b9b1157d678560373696109745ab97a947d449f8a997acac41c7f1e4c0f3ca4b092d6df1387f430f2c9a319987b1780dbdc27e35800a88cde9b606c1e8f + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 languageName: node linkType: hard @@ -15981,10 +15981,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard From 822e918a56055223be009974d581a8295d60b709 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 16 Sep 2024 03:52:22 -0400 Subject: [PATCH 013/467] Add coverage for `Bookmark` validation and reblog/status check callback (#31907) --- spec/models/bookmark_spec.rb | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 spec/models/bookmark_spec.rb diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb new file mode 100644 index 00000000000000..e0d91000e77d8d --- /dev/null +++ b/spec/models/bookmark_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Bookmark do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + it { is_expected.to belong_to(:status).required } + end + + describe 'Validations' do + subject { Fabricate.build :bookmark } + + it { is_expected.to validate_uniqueness_of(:status_id).scoped_to(:account_id) } + end + + describe 'Callbacks' do + describe 'reblog statuses' do + context 'when status is not a reblog' do + let(:status) { Fabricate :status } + + it 'keeps status set to assigned value' do + bookmark = Fabricate.build :bookmark, status: status + + expect { bookmark.valid? } + .to_not change(bookmark, :status) + end + end + + context 'when status is a reblog' do + let(:original) { Fabricate :status } + let(:status) { Fabricate :status, reblog: original } + + it 'keeps status set to assigned value' do + bookmark = Fabricate.build :bookmark, status: status + + expect { bookmark.valid? } + .to change(bookmark, :status).to(original) + end + end + end + end +end From abd2f5654a5d1b2baa4a210c8175d6ed5e6ff5c5 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 16 Sep 2024 03:53:03 -0400 Subject: [PATCH 014/467] Add validation coverage for `CustomEmoji` shortcode value (#31906) --- app/models/custom_emoji.rb | 3 ++- spec/models/custom_emoji_spec.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 6e788c0c1c6746..f1423bc2face51 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -25,6 +25,7 @@ class CustomEmoji < ApplicationRecord include Attachmentable LIMIT = 256.kilobytes + MINIMUM_SHORTCODE_SIZE = 2 SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}' @@ -44,7 +45,7 @@ class CustomEmoji < ApplicationRecord normalizes :domain, with: ->(domain) { domain.downcase } validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT } - validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: 2 } + validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: MINIMUM_SHORTCODE_SIZE } scope :local, -> { where(domain: nil) } scope :remote, -> { where.not(domain: nil) } diff --git a/spec/models/custom_emoji_spec.rb b/spec/models/custom_emoji_spec.rb index 87b111441a1df3..f812cf75847f0b 100644 --- a/spec/models/custom_emoji_spec.rb +++ b/spec/models/custom_emoji_spec.rb @@ -84,4 +84,13 @@ it { is_expected.to normalize(:domain).from(nil).to(nil) } end end + + describe 'Validations' do + subject { Fabricate.build :custom_emoji } + + it { is_expected.to validate_uniqueness_of(:shortcode).scoped_to(:domain) } + it { is_expected.to validate_length_of(:shortcode).is_at_least(described_class::MINIMUM_SHORTCODE_SIZE) } + it { is_expected.to allow_values('cats').for(:shortcode) } + it { is_expected.to_not allow_values('@#$@#$', 'X').for(:shortcode) } + end end From bf8b55ce91809874169e5fec889f58962d331977 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 16 Sep 2024 04:29:06 -0400 Subject: [PATCH 015/467] Enable `Rails/Output` in `spec/` dir (#31905) --- .rubocop/strict.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.rubocop/strict.yml b/.rubocop/strict.yml index 2222c6d8b93402..c2655a1470cc8f 100644 --- a/.rubocop/strict.yml +++ b/.rubocop/strict.yml @@ -7,8 +7,13 @@ RSpec/Focus: # Require full spec run on CI Exclude: [] Rails/Output: # Remove any `puts` debugging + inherit_mode: + merge: + - Include Enabled: true Exclude: [] + Include: + - spec/**/*.rb Rails/FindEach: # Using `each` could impact performance, use `find_each` Enabled: true From 1d58f93670a057ce7a4cf757585d4f0b6fd79a0f Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 10:48:13 +0200 Subject: [PATCH 016/467] Update dependencies omniauth-saml, ruby-xml and ruby-saml (#31926) --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b5515128594281..4a139155f5bb14 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -472,9 +472,9 @@ GEM omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) - omniauth-saml (2.1.0) - omniauth (~> 2.0) - ruby-saml (~> 1.12) + omniauth-saml (2.2.1) + omniauth (~> 2.1) + ruby-saml (~> 1.17) omniauth_openid_connect (0.6.1) omniauth (>= 1.9, < 3) openid_connect (~> 1.1) @@ -764,7 +764,7 @@ GEM rubocop-rspec (~> 3, >= 3.0.1) ruby-prof (1.7.0) ruby-progressbar (1.13.0) - ruby-saml (1.16.0) + ruby-saml (1.17.0) nokogiri (>= 1.13.10) rexml ruby-vips (2.2.2) From 474abf3c7f38803fe826ccb69afd44511739a256 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:48:20 +0200 Subject: [PATCH 017/467] New Crowdin Translations (automated) (#31911) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 1 + app/javascript/mastodon/locales/en-GB.json | 1 + app/javascript/mastodon/locales/es-AR.json | 1 + app/javascript/mastodon/locales/es-MX.json | 3 +- app/javascript/mastodon/locales/es.json | 3 +- app/javascript/mastodon/locales/et.json | 4 + app/javascript/mastodon/locales/eu.json | 4 + app/javascript/mastodon/locales/fo.json | 1 + app/javascript/mastodon/locales/fr-CA.json | 3 + app/javascript/mastodon/locales/fr.json | 3 + app/javascript/mastodon/locales/ga.json | 4 + app/javascript/mastodon/locales/gd.json | 4 + app/javascript/mastodon/locales/ia.json | 1 + app/javascript/mastodon/locales/is.json | 1 + app/javascript/mastodon/locales/pt-PT.json | 37 +++++++++ app/javascript/mastodon/locales/th.json | 4 + app/javascript/mastodon/locales/vi.json | 4 + config/locales/activerecord.et.yml | 6 ++ config/locales/activerecord.fr-CA.yml | 3 + config/locales/activerecord.fr.yml | 3 + config/locales/activerecord.ga.yml | 6 ++ config/locales/activerecord.gd.yml | 6 ++ config/locales/activerecord.ro.yml | 12 ++- config/locales/activerecord.th.yml | 6 ++ config/locales/activerecord.vi.yml | 6 ++ config/locales/devise.lv.yml | 8 +- config/locales/devise.ro.yml | 88 +++++++++++----------- config/locales/doorkeeper.ro.yml | 56 +++++++------- config/locales/es-MX.yml | 8 +- config/locales/es.yml | 8 +- config/locales/et.yml | 40 ++++++++++ config/locales/fr-CA.yml | 25 +++++- config/locales/fr.yml | 25 +++++- config/locales/ga.yml | 8 ++ config/locales/gd.yml | 8 ++ config/locales/lt.yml | 29 +++++-- config/locales/lv.yml | 7 +- config/locales/pt-PT.yml | 43 +++++++++++ config/locales/simple_form.et.yml | 2 + config/locales/simple_form.fr-CA.yml | 2 + config/locales/simple_form.fr.yml | 2 + config/locales/simple_form.ga.yml | 2 + config/locales/simple_form.gd.yml | 2 + config/locales/simple_form.lt.yml | 2 + config/locales/simple_form.lv.yml | 7 ++ config/locales/simple_form.th.yml | 2 + config/locales/simple_form.vi.yml | 2 + config/locales/th.yml | 8 ++ config/locales/vi.yml | 8 ++ 49 files changed, 420 insertions(+), 99 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index d0ee437af9f919..a6378895034de2 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -789,6 +789,7 @@ "status.edit": "Edita", "status.edited": "Darrera edició {date}", "status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}", + "status.embed": "Obté el codi encastat", "status.favourite": "Favorit", "status.favourites": "{count, plural, one {favorit} other {favorits}}", "status.filter": "Filtra aquest tut", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index a40353a73937c7..d182cf6fe8cd58 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -789,6 +789,7 @@ "status.edit": "Edit", "status.edited": "Last edited {date}", "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", + "status.embed": "Get embed code", "status.favourite": "Favourite", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filter this post", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 65eab7f437b996..9618616165c5d7 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -789,6 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edición: {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", + "status.embed": "Obtener código para insertar", "status.favourite": "Marcar como favorito", "status.favourites": "{count, plural, one {# voto} other {# votos}}", "status.filter": "Filtrar este mensaje", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index ae9658cd907655..14afd1e108c6d1 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -376,7 +376,7 @@ "ignore_notifications_modal.ignore": "Ignorar notificaciones", "ignore_notifications_modal.limited_accounts_title": "¿Ignorar notificaciones de cuentas moderadas?", "ignore_notifications_modal.new_accounts_title": "¿Ignorar notificaciones de cuentas nuevas?", - "ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te sigue?", + "ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te siguen?", "ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de personas a las que no sigues?", "ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?", "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.", @@ -789,6 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edición {date}", "status.edited_x_times": "Editado {count, plural, one {{count} time} other {{count} veces}}", + "status.embed": "Obtener código para incrustar", "status.favourite": "Favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicación", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 61a958ed38d0a6..c9f050b9de6eef 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -376,7 +376,7 @@ "ignore_notifications_modal.ignore": "Ignorar notificaciones", "ignore_notifications_modal.limited_accounts_title": "¿Ignorar notificaciones de cuentas moderadas?", "ignore_notifications_modal.new_accounts_title": "¿Ignorar notificaciones de cuentas nuevas?", - "ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te sigue?", + "ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te siguen?", "ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de personas a las que no sigues?", "ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?", "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.", @@ -789,6 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edición {date}", "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", + "status.embed": "Obtener código para incrustar", "status.favourite": "Favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicación", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 93c2cefb4795b7..d202fb61a4ad5b 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -457,6 +457,7 @@ "lists.subheading": "Sinu nimekirjad", "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", "loading_indicator.label": "Laadimine…", + "media_gallery.hide": "Peida", "moved_to_account_banner.text": "Kontot {disabledAccount} ei ole praegu võimalik kasutada, sest kolisid kontole {movedToAccount}.", "mute_modal.hide_from_notifications": "Peida teavituste hulgast", "mute_modal.hide_options": "Peida valikud", @@ -779,6 +780,7 @@ "status.bookmark": "Järjehoidja", "status.cancel_reblog_private": "Lõpeta jagamine", "status.cannot_reblog": "Seda postitust ei saa jagada", + "status.continued_thread": "Jätkatud lõim", "status.copy": "Kopeeri postituse link", "status.delete": "Kustuta", "status.detailed_status": "Detailne vestluskuva", @@ -787,6 +789,7 @@ "status.edit": "Muuda", "status.edited": "Viimati muudetud {date}", "status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}", + "status.embed": "Hangi manustamiskood", "status.favourite": "Lemmik", "status.favourites": "{count, plural, one {lemmik} other {lemmikud}}", "status.filter": "Filtreeri seda postitust", @@ -811,6 +814,7 @@ "status.reblogs.empty": "Keegi pole seda postitust veel jaganud. Kui keegi seda teeb, näeb seda siin.", "status.redraft": "Kustuta & alga uuesti", "status.remove_bookmark": "Eemalda järjehoidja", + "status.replied_in_thread": "Vastatud lõimes", "status.replied_to": "Vastas kasutajale {name}", "status.reply": "Vasta", "status.replyAll": "Vasta lõimele", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 2248ffbf9d0aa0..989a328d0a9c17 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -457,6 +457,7 @@ "lists.subheading": "Zure zerrendak", "load_pending": "{count, plural, one {elementu berri #} other {# elementu berri}}", "loading_indicator.label": "Kargatzen…", + "media_gallery.hide": "Ezkutatu", "moved_to_account_banner.text": "Zure {disabledAccount} kontua desgaituta dago une honetan, {movedToAccount} kontura aldatu zinelako.", "mute_modal.hide_from_notifications": "Ezkutatu jakinarazpenetatik", "mute_modal.hide_options": "Ezkutatu aukerak", @@ -775,6 +776,7 @@ "status.bookmark": "Laster-marka", "status.cancel_reblog_private": "Kendu bultzada", "status.cannot_reblog": "Bidalketa honi ezin zaio bultzada eman", + "status.continued_thread": "Harian jarraitu zuen", "status.copy": "Kopiatu bidalketaren esteka", "status.delete": "Ezabatu", "status.detailed_status": "Elkarrizketaren ikuspegi xehetsua", @@ -783,6 +785,7 @@ "status.edit": "Editatu", "status.edited": "Azken edizioa: {date}", "status.edited_x_times": "{count, plural, one {behin} other {{count} aldiz}} editatua", + "status.embed": "Lortu txertatzeko kodea", "status.favourite": "Gogokoa", "status.favourites": "{count, plural, one {gogoko} other {gogoko}}", "status.filter": "Iragazi bidalketa hau", @@ -807,6 +810,7 @@ "status.reblogs.empty": "Inork ez dio bultzada eman bidalketa honi oraindik. Inork egiten badu, hemen agertuko da.", "status.redraft": "Ezabatu eta berridatzi", "status.remove_bookmark": "Kendu laster-marka", + "status.replied_in_thread": "Harian erantzun zuen", "status.replied_to": "{name} erabiltzaileari erantzuna", "status.reply": "Erantzun", "status.replyAll": "Erantzun harian", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 73c64b1b826fc6..9dd8feaf2fa6cb 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -789,6 +789,7 @@ "status.edit": "Rætta", "status.edited": "Seinast broytt {date}", "status.edited_x_times": "Rættað {count, plural, one {{count} ferð} other {{count} ferð}}", + "status.embed": "Fá kodu at seta inn", "status.favourite": "Dámdur postur", "status.favourites": "{count, plural, one {yndispostur} other {yndispostar}}", "status.filter": "Filtrera hendan postin", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 96ae81c58aedc2..f58e3b81e4ec8e 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -36,6 +36,7 @@ "account.followers.empty": "Personne ne suit ce compte pour l'instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", "account.following": "Abonné·e", + "account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}", "account.follows.empty": "Ce compte ne suit personne présentement.", "account.go_to_profile": "Voir ce profil", "account.hide_reblogs": "Masquer les boosts de @{name}", @@ -788,6 +789,7 @@ "status.edit": "Modifier", "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifiée {count, plural, one {{count} fois} other {{count} fois}}", + "status.embed": "Obtenir le code d'intégration", "status.favourite": "Ajouter aux favoris", "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer cette publication", @@ -812,6 +814,7 @@ "status.reblogs.empty": "Personne n’a encore boosté cette publication. Lorsque quelqu’un le fera, elle apparaîtra ici.", "status.redraft": "Supprimer et réécrire", "status.remove_bookmark": "Retirer des signets", + "status.replied_in_thread": "A répondu dans un fil de discussion", "status.replied_to": "A répondu à {name}", "status.reply": "Répondre", "status.replyAll": "Répondre à cette discussion", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index fb0bfac29dd05a..175601eb27ddc4 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -36,6 +36,7 @@ "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", "account.following": "Abonnements", + "account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.go_to_profile": "Aller au profil", "account.hide_reblogs": "Masquer les partages de @{name}", @@ -788,6 +789,7 @@ "status.edit": "Modifier", "status.edited": "Dernière modification le {date}", "status.edited_x_times": "Modifié {count, plural, one {{count} fois} other {{count} fois}}", + "status.embed": "Obtenir le code d'intégration", "status.favourite": "Ajouter aux favoris", "status.favourites": "{count, plural, one {favori} other {favoris}}", "status.filter": "Filtrer ce message", @@ -812,6 +814,7 @@ "status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.", "status.redraft": "Supprimer et réécrire", "status.remove_bookmark": "Retirer des marque-pages", + "status.replied_in_thread": "A répondu dans un fil de discussion", "status.replied_to": "En réponse à {name}", "status.reply": "Répondre", "status.replyAll": "Répondre au fil", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 794a433cd2aaaa..29d4f574c0df17 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -457,6 +457,7 @@ "lists.subheading": "Do liostaí", "load_pending": "{count, plural, one {# mír nua} two {# mír nua} few {# mír nua} many {# mír nua} other {# mír nua}}", "loading_indicator.label": "Á lódáil…", + "media_gallery.hide": "Folaigh", "moved_to_account_banner.text": "Tá do chuntas {disabledAccount} díchumasaithe faoi láthair toisc gur bhog tú go {movedToAccount}.", "mute_modal.hide_from_notifications": "Folaigh ó fhógraí", "mute_modal.hide_options": "Folaigh roghanna", @@ -779,6 +780,7 @@ "status.bookmark": "Leabharmharcanna", "status.cancel_reblog_private": "Dímhol", "status.cannot_reblog": "Ní féidir an phostáil seo a mholadh", + "status.continued_thread": "Snáithe ar lean", "status.copy": "Cóipeáil an nasc chuig an bpostáil", "status.delete": "Scrios", "status.detailed_status": "Amharc comhrá mionsonraithe", @@ -787,6 +789,7 @@ "status.edit": "Cuir in eagar", "status.edited": "Arna chuir in eagar anuas {date}", "status.edited_x_times": "Curtha in eagar {count, plural, one {{count} uair amháin} two {{count} uair} few {{count} uair} many {{count} uair} other {{count} uair}}", + "status.embed": "Faigh cód leabú", "status.favourite": "Is fearr leat", "status.favourites": "{count, plural, one {a bhfuil grá agat do} two {gráite} few {gráite} many {gráite} other {gráite}}", "status.filter": "Déan scagadh ar an bpostáil seo", @@ -811,6 +814,7 @@ "status.reblogs.empty": "Níor mhol éinne an phostáil seo fós. Nuair a mholfaidh duine éigin í, taispeánfar anseo é sin.", "status.redraft": "Scrios ⁊ athdhréachtaigh", "status.remove_bookmark": "Bain leabharmharc", + "status.replied_in_thread": "D'fhreagair sa snáithe", "status.replied_to": "D'fhreagair {name}", "status.reply": "Freagair", "status.replyAll": "Freagair le snáithe", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 3f1b353e75aee6..76eb0c26b528ba 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -457,6 +457,7 @@ "lists.subheading": "Na liostaichean agad", "load_pending": "{count, plural, one {# nì ùr} two {# nì ùr} few {# nithean ùra} other {# nì ùr}}", "loading_indicator.label": "’Ga luchdadh…", + "media_gallery.hide": "Falaich", "moved_to_account_banner.text": "Tha an cunntas {disabledAccount} agad à comas on a rinn thu imrich gu {movedToAccount}.", "mute_modal.hide_from_notifications": "Falaich o na brathan", "mute_modal.hide_options": "Roghainnean falaich", @@ -779,6 +780,7 @@ "status.bookmark": "Cuir ris na comharran-lìn", "status.cancel_reblog_private": "Na brosnaich tuilleadh", "status.cannot_reblog": "Cha ghabh am post seo brosnachadh", + "status.continued_thread": "Pàirt de shnàithlean", "status.copy": "Dèan lethbhreac dhen cheangal dhan phost", "status.delete": "Sguab às", "status.detailed_status": "Mion-shealladh a’ chòmhraidh", @@ -787,6 +789,7 @@ "status.edit": "Deasaich", "status.edited": "An deasachadh mu dheireadh {date}", "status.edited_x_times": "Chaidh a dheasachadh {count, plural, one {{count} turas} two {{count} thuras} few {{count} tursan} other {{count} turas}}", + "status.embed": "Faigh còd leabachaidh", "status.favourite": "Cuir ris na h-annsachdan", "status.favourites": "{count, plural, one {annsachd} two {annsachd} few {annsachdan} other {annsachd}}", "status.filter": "Criathraich am post seo", @@ -811,6 +814,7 @@ "status.reblogs.empty": "Chan deach am post seo a bhrosnachadh le duine sam bith fhathast. Nuair a bhrosnaicheas cuideigin e, nochdaidh iad an-seo.", "status.redraft": "Sguab às ⁊ dèan dreachd ùr", "status.remove_bookmark": "Thoir an comharra-lìn air falbh", + "status.replied_in_thread": "Freagairt do shnàithlean", "status.replied_to": "Air {name} fhreagairt", "status.reply": "Freagair", "status.replyAll": "Freagair dhan t-snàithlean", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index e301363f272344..8cfe2ecac055a2 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -355,6 +355,7 @@ "hints.profiles.see_more_followers": "Vider plus de sequitores sur {domain}", "hints.profiles.see_more_follows": "Vider plus de sequites sur {domain}", "hints.profiles.see_more_posts": "Vider plus de messages sur {domain}", + "hints.threads.replies_may_be_missing": "Responsas de altere servitores pote esser perdite.", "hints.threads.see_more": "Vider plus de responsas sur {domain}", "home.column_settings.show_reblogs": "Monstrar impulsos", "home.column_settings.show_replies": "Monstrar responsas", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index ba362afc8a450a..dc0b563f1f923e 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -789,6 +789,7 @@ "status.edit": "Breyta", "status.edited": "Síðast breytt {date}", "status.edited_x_times": "Breytt {count, plural, one {{count} sinni} other {{count} sinnum}}", + "status.embed": "Ná í innfellanlegan kóða", "status.favourite": "Eftirlæti", "status.favourites": "{count, plural, one {eftirlæti} other {eftirlæti}}", "status.filter": "Sía þessa færslu", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 1dc4bc5109f522..dd70e809a30155 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -371,6 +371,14 @@ "ignore_notifications_modal.disclaimer": "O Mastodon não pode informar utilizadores que ignoraste as notificações deles. Ignorar notificações não irá parar as mensagens serem enviadas.", "ignore_notifications_modal.filter_instead": "Filtrar em vez disso", "ignore_notifications_modal.filter_to_act_users": "Ainda poderá aceitar, rejeitar, ou reportar utilizadores", + "ignore_notifications_modal.filter_to_avoid_confusion": "A filtragem ajuda a evitar potenciais equívocos", + "ignore_notifications_modal.filter_to_review_separately": "Pode rever as notificações filtradas separadamente", + "ignore_notifications_modal.ignore": "Ignorar notificações", + "ignore_notifications_modal.limited_accounts_title": "Ignorar notificações de contas moderadas?", + "ignore_notifications_modal.new_accounts_title": "Ignorar notificações de contas novas?", + "ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não o seguem?", + "ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que não segue?", + "ignore_notifications_modal.private_mentions_title": "Ignorar notificações de Menções Privadas não solicitadas?", "interaction_modal.description.favourite": "Com uma conta no Mastodon, pode adicionar assinalar esta publicação como favorita para que o autor saiba que gostou e guardá-la para mais tarde.", "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.", "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.", @@ -449,6 +457,7 @@ "lists.subheading": "As tuas listas", "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", "loading_indicator.label": "A carregar…", + "media_gallery.hide": "Esconder", "moved_to_account_banner.text": "A sua conta {disabledAccount} está, no momento, desativada, porque você migrou para {movedToAccount}.", "mute_modal.hide_from_notifications": "Ocultar das notificações", "mute_modal.hide_options": "Ocultar opções", @@ -460,6 +469,7 @@ "mute_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.", "mute_modal.you_wont_see_posts": "Eles podem continuar a ver as suas publicações, mas você não verá as deles.", "navigation_bar.about": "Sobre", + "navigation_bar.administration": "Administração", "navigation_bar.advanced_interface": "Abrir na interface web avançada", "navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.bookmarks": "Marcadores", @@ -476,6 +486,7 @@ "navigation_bar.follows_and_followers": "Seguindo e seguidores", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Sair", + "navigation_bar.moderation": "Moderação", "navigation_bar.mutes": "Utilizadores silenciados", "navigation_bar.opened_in_classic_interface": "Por norma, publicações, contas, e outras páginas específicas são abertas na interface web clássica.", "navigation_bar.personal": "Pessoal", @@ -491,9 +502,13 @@ "notification.admin.report_statuses": "{name} denunicou {target} por {category}", "notification.admin.report_statuses_other": "{name} denunciou {target}", "notification.admin.sign_up": "{name} inscreveu-se", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} inscreveram-se", "notification.favourite": "{name} assinalou a sua publicação como favorita", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} assinalou a sua publicação como favorita", "notification.follow": "{name} começou a seguir-te", + "notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} começaram a segui-lo", "notification.follow_request": "{name} pediu para segui-lo", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} pediram para segui-lo", "notification.label.mention": "Menção", "notification.label.private_mention": "Menção privada", "notification.label.private_reply": "Resposta privada", @@ -511,6 +526,7 @@ "notification.own_poll": "A sua sondagem terminou", "notification.poll": "Terminou uma sondagem em que votou", "notification.reblog": "{name} reforçou a tua publicação", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} reforçaram a sua publicação", "notification.relationships_severance_event": "Perdeu as ligações com {name}", "notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não pode receber atualizações dele ou interagir com ele.", "notification.relationships_severance_event.domain_block": "Um administrador de {from} bloqueou {target}, incluindo {followersCount} dos seus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segue.", @@ -519,13 +535,24 @@ "notification.status": "{name} acabou de publicar", "notification.update": "{name} editou uma publicação", "notification_requests.accept": "Aceitar", + "notification_requests.accept_multiple": "{count, plural, one {Aceitar # pedidos…} other {Aceitar # pedidos…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceitar pedido} other {Aceitar pedidos}}", + "notification_requests.confirm_accept_multiple.message": "Está prestes a aceitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Tem a certeza de que pretende continuar?", + "notification_requests.confirm_accept_multiple.title": "Aceitar pedidos de notificação?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejeitar pedido} other {Rejeitar pedidos}}", + "notification_requests.confirm_dismiss_multiple.message": "Está prestes a rejeitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Não será fácil voltar a {count, plural, one {aceder-lhe} other {aceder-lhes}}. Tem a certeza de que pretende continuar?", + "notification_requests.confirm_dismiss_multiple.title": "Rejeitar pedidos de notificação?", "notification_requests.dismiss": "Descartar", + "notification_requests.dismiss_multiple": "{count, plural, one {Rejeitar # pedido…} other {Rejeitar # pedidos…}}", + "notification_requests.edit_selection": "Editar", + "notification_requests.exit_selection": "Concluído", "notification_requests.explainer_for_limited_account": "As notificações desta conta foram filtradas porque a conta foi limitada por um moderador.", "notification_requests.explainer_for_limited_remote_account": "As notificações desta conta foram filtradas porque a conta ou o seu servidor foram limitados por um moderador.", "notification_requests.maximize": "Maximizar", "notification_requests.minimize_banner": "Minimizar o cabeçalho das notificações filtradas", "notification_requests.notifications_from": "Notificações de {name}", "notification_requests.title": "Notificações filtradas", + "notification_requests.view": "Ver notificações", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", "notifications.clear_title": "Limpar notificações?", @@ -562,6 +589,12 @@ "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", "notifications.permission_denied_alert": "Notificações no ambiente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", + "notifications.policy.accept": "Aceitar", + "notifications.policy.accept_hint": "Mostrar nas notificações", + "notifications.policy.drop": "Ignorar", + "notifications.policy.drop_hint": "Enviar para o vazio, para nunca mais ser visto", + "notifications.policy.filter": "Filtrar", + "notifications.policy.filter_hint": "Enviar para a caixa de notificações filtradas", "notifications.policy.filter_limited_accounts_hint": "Limitado pelos moderadores do servidor", "notifications.policy.filter_limited_accounts_title": "Contas moderadas", "notifications.policy.filter_new_accounts.hint": "Criada nos últimos {days, plural, one {um dia} other {# dias}}", @@ -572,6 +605,7 @@ "notifications.policy.filter_not_following_title": "Pessoas que você não segue", "notifications.policy.filter_private_mentions_hint": "Filtrado, a menos que seja em resposta à sua própria menção ou se você seguir o remetente", "notifications.policy.filter_private_mentions_title": "Menções privadas não solicitadas", + "notifications.policy.title": "Gerir notificações de…", "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca perca nada", @@ -746,6 +780,7 @@ "status.bookmark": "Guardar nos marcadores", "status.cancel_reblog_private": "Deixar de reforçar", "status.cannot_reblog": "Não é possível partilhar esta publicação", + "status.continued_thread": "Continuação da conserva", "status.copy": "Copiar hiperligação para a publicação", "status.delete": "Eliminar", "status.detailed_status": "Vista pormenorizada da conversa", @@ -754,6 +789,7 @@ "status.edit": "Editar", "status.edited": "Última edição em {date}", "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}", + "status.embed": "Obter código de incorporação", "status.favourite": "Assinalar como favorito", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicação", @@ -778,6 +814,7 @@ "status.reblogs.empty": "Ainda ninguém reforçou esta publicação. Quando alguém o fizer, ele irá aparecer aqui.", "status.redraft": "Apagar & reescrever", "status.remove_bookmark": "Retirar dos marcadores", + "status.replied_in_thread": "Responder na conversa", "status.replied_to": "Respondeu a {name}", "status.reply": "Responder", "status.replyAll": "Responder à conversa", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index b8c942f99966d4..69651df82c557f 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -457,6 +457,7 @@ "lists.subheading": "รายการของคุณ", "load_pending": "{count, plural, other {# รายการใหม่}}", "loading_indicator.label": "กำลังโหลด…", + "media_gallery.hide": "ซ่อน", "moved_to_account_banner.text": "มีการปิดใช้งานบัญชีของคุณ {disabledAccount} ในปัจจุบันเนื่องจากคุณได้ย้ายไปยัง {movedToAccount}", "mute_modal.hide_from_notifications": "ซ่อนจากการแจ้งเตือน", "mute_modal.hide_options": "ซ่อนตัวเลือก", @@ -779,6 +780,7 @@ "status.bookmark": "เพิ่มที่คั่นหน้า", "status.cancel_reblog_private": "เลิกดัน", "status.cannot_reblog": "ไม่สามารถดันโพสต์นี้", + "status.continued_thread": "กระทู้ต่อเนื่อง", "status.copy": "คัดลอกลิงก์ไปยังโพสต์", "status.delete": "ลบ", "status.detailed_status": "มุมมองการสนทนาโดยละเอียด", @@ -787,6 +789,7 @@ "status.edit": "แก้ไข", "status.edited": "แก้ไขล่าสุดเมื่อ {date}", "status.edited_x_times": "แก้ไข {count, plural, other {{count} ครั้ง}}", + "status.embed": "รับโค้ดฝังตัว", "status.favourite": "ชื่นชอบ", "status.favourites": "{count, plural, other {รายการโปรด}}", "status.filter": "กรองโพสต์นี้", @@ -811,6 +814,7 @@ "status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่", "status.redraft": "ลบแล้วร่างใหม่", "status.remove_bookmark": "เอาที่คั่นหน้าออก", + "status.replied_in_thread": "ตอบกลับในกระทู้", "status.replied_to": "ตอบกลับ {name}", "status.reply": "ตอบกลับ", "status.replyAll": "ตอบกลับกระทู้", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 449435847e926b..08fc44d83d4125 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -457,6 +457,7 @@ "lists.subheading": "Danh sách của bạn", "load_pending": "{count, plural, one {# tút mới} other {# tút mới}}", "loading_indicator.label": "Đang tải…", + "media_gallery.hide": "Ẩn", "moved_to_account_banner.text": "Tài khoản {disabledAccount} của bạn hiện không khả dụng vì bạn đã chuyển sang {movedToAccount}.", "mute_modal.hide_from_notifications": "Ẩn thông báo", "mute_modal.hide_options": "Tùy chọn ẩn", @@ -779,6 +780,7 @@ "status.bookmark": "Lưu", "status.cancel_reblog_private": "Hủy đăng lại", "status.cannot_reblog": "Không thể đăng lại tút này", + "status.continued_thread": "Tiếp tục trong chủ đề", "status.copy": "Sao chép URL", "status.delete": "Xóa", "status.detailed_status": "Xem chi tiết thêm", @@ -787,6 +789,7 @@ "status.edit": "Sửa", "status.edited": "Sửa lần cuối {date}", "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", + "status.embed": "Lấy mã nhúng", "status.favourite": "Thích", "status.favourites": "{count, plural, other {lượt thích}}", "status.filter": "Lọc tút này", @@ -811,6 +814,7 @@ "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", + "status.replied_in_thread": "Trả lời trong chủ đề", "status.replied_to": "Trả lời {name}", "status.reply": "Trả lời", "status.replyAll": "Trả lời", diff --git a/config/locales/activerecord.et.yml b/config/locales/activerecord.et.yml index 8cabf0e0fe78ed..7af2c362db7b79 100644 --- a/config/locales/activerecord.et.yml +++ b/config/locales/activerecord.et.yml @@ -15,6 +15,12 @@ et: user/invite_request: text: Põhjus errors: + attributes: + domain: + invalid: pole kehtiv domeeninimi + messages: + invalid_domain_on_line: "%{value} ei ole kehtiv domeeninimi" + too_many_lines: on üle limiidi %{limit} rida models: account: attributes: diff --git a/config/locales/activerecord.fr-CA.yml b/config/locales/activerecord.fr-CA.yml index b6f005d2202bd7..8deeeee015f8b5 100644 --- a/config/locales/activerecord.fr-CA.yml +++ b/config/locales/activerecord.fr-CA.yml @@ -18,6 +18,9 @@ fr-CA: attributes: domain: invalid: n'est pas un nom de domaine valide + messages: + invalid_domain_on_line: "%{value} n'est pas un nom de domaine valide" + too_many_lines: dépasse la limite de %{limit} lignes models: account: attributes: diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index 05eb7ce67b4299..2f74b16d533c58 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -18,6 +18,9 @@ fr: attributes: domain: invalid: n'est pas un nom de domaine valide + messages: + invalid_domain_on_line: "%{value} n'est pas un nom de domaine valide" + too_many_lines: dépasse la limite de %{limit} lignes models: account: attributes: diff --git a/config/locales/activerecord.ga.yml b/config/locales/activerecord.ga.yml index 1b61edb2e2fe00..4f83bc40aa23e7 100644 --- a/config/locales/activerecord.ga.yml +++ b/config/locales/activerecord.ga.yml @@ -15,6 +15,12 @@ ga: user/invite_request: text: Fáth errors: + attributes: + domain: + invalid: nach ainm fearainn bailí é + messages: + invalid_domain_on_line: Ní ainm fearainn bailí é %{value} + too_many_lines: thar an teorainn de %{limit} línte models: account: attributes: diff --git a/config/locales/activerecord.gd.yml b/config/locales/activerecord.gd.yml index 895f035c039db0..26848e25844910 100644 --- a/config/locales/activerecord.gd.yml +++ b/config/locales/activerecord.gd.yml @@ -15,6 +15,12 @@ gd: user/invite_request: text: Adhbhar errors: + attributes: + domain: + invalid: "– chan eil seo ’na ainm àrainne dligheach" + messages: + invalid_domain_on_line: Chan eil %{value} ’na ainm àrainne dligheach + too_many_lines: "– tha seo thar crìoch de %{limit} nan loidhnichean" models: account: attributes: diff --git a/config/locales/activerecord.ro.yml b/config/locales/activerecord.ro.yml index 83c90eda29fe2f..1adec0b1493c55 100644 --- a/config/locales/activerecord.ro.yml +++ b/config/locales/activerecord.ro.yml @@ -11,15 +11,21 @@ ro: locale: Localizare password: Parolă user/account: - username: Nume utilizator + username: Nume de utilizator user/invite_request: text: Motiv errors: + attributes: + domain: + invalid: nu este un nume de domeniu valid + messages: + invalid_domain_on_line: "%{value} nu este un nume de domeniu valid" + too_many_lines: este peste limita de %{limit} linii models: account: attributes: username: - invalid: doar litere, numere și sublinieri + invalid: trebuie să conțină numai litere, cifre și bară jos (_) reserved: este rezervat admin/webhook: attributes: @@ -56,4 +62,4 @@ ro: webhook: attributes: events: - invalid_permissions: nu poate include evenimente la care nu aveți drepturi + invalid_permissions: nu poate include evenimente la care nu aveți dreptul diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index 3b4b57a236e2f2..e1021b8afa8785 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -15,6 +15,12 @@ th: user/invite_request: text: เหตุผล errors: + attributes: + domain: + invalid: ไม่ใช่ชื่อโดเมนที่ถูกต้อง + messages: + invalid_domain_on_line: "%{value} ไม่ใช่ชื่อโดเมนที่ถูกต้อง" + too_many_lines: เกินขีดจำกัด %{limit} บรรทัด models: account: attributes: diff --git a/config/locales/activerecord.vi.yml b/config/locales/activerecord.vi.yml index 1b4ad0a4d27177..b48510c2e23a6d 100644 --- a/config/locales/activerecord.vi.yml +++ b/config/locales/activerecord.vi.yml @@ -15,6 +15,12 @@ vi: user/invite_request: text: Lý do errors: + attributes: + domain: + invalid: không phải là một tên miền hợp lệ + messages: + invalid_domain_on_line: "%{value} không phải là một tên miền hợp lệ" + too_many_lines: vượt quá giới hạn %{limit} dòng models: account: attributes: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 94b4774b60f001..4470c8109e2d99 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -14,9 +14,9 @@ lv: not_found_in_database: Nederīga %{authentication_keys} vai parole. omniauth_user_creation_failure: Kļūda šīs identitātes konta izveidošanā. pending: Tavs konts joprojām tiek pārskatīts. - timeout: Tava sesija ir beigusies. Lūdzu, pieraksties vēlreiz, lai turpinātu. - unauthenticated: Lai turpinātu, tev ir jāpierakstās vai jāreģistrējas. - unconfirmed: Lai turpinātu, tev ir jāapstiprina savu e-pasta adresi. + timeout: Sesijair beigusies. Lūgums vēlreiz pieteikties, lai turpinātu. + unauthenticated: Lai turpinātu, jāpiesakās vai jāreģistrējas. + unconfirmed: Lai turpinātu, jāapliecina sava e-pasta adrese. mailer: confirmation_instructions: action: Apstiprini savu e-pasta adresi @@ -108,7 +108,7 @@ lv: unlocks: send_instructions: Pēc dažām minūtēm tu saņemsi e-pastu ar norādījumiem, kā atbloķēt savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. send_paranoid_instructions: Ja tavs konts eksistē, dažu minūšu laikā tu saņemsi e-pastu ar norādījumiem, kā to atbloķēt. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - unlocked: Tavs konts ir veiksmīgi atbloķēts. Lūdzu, pieraksties, lai turpinātu. + unlocked: Konts tika veiksmīgi atbloķēts. Lūgums pieteikties, lai turpinātu. errors: messages: already_confirmed: jau tika apstiprināts, lūdzu, mēģini pierakstīties diff --git a/config/locales/devise.ro.yml b/config/locales/devise.ro.yml index 40cb6a7581b833..f570f77e1d3c4e 100644 --- a/config/locales/devise.ro.yml +++ b/config/locales/devise.ro.yml @@ -2,58 +2,58 @@ ro: devise: confirmations: - confirmed: Adresa ta de e-mail a fost confirmată cu succes. - send_instructions: Vei primi un e-mail cu instrucțiuni despre cum să confirmi adresa ta de e-mail în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. - send_paranoid_instructions: Dacă adresa ta de e-mail există în baza noastră de date, în câteva minute vei primi un e-mail cu instrucțiuni pentru confirmarea adresei tale de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. + confirmed: Adresa dvs. de e-mail a fost confirmată cu succes. + send_instructions: Veți primi un e-mail în câteva minute cu instrucțiuni despre cum să vă confirmați adresa de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. + send_paranoid_instructions: Dacă adresa dvs. de e-mail există în baza noastră de date, veți primi în câteva minute un e-mail cu instrucțiuni pentru confirmarea adresei de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. failure: - already_authenticated: Ești deja conectat. - inactive: Contul tău nu este încă activat. + already_authenticated: Sunteți deja conectat. + inactive: Contul dvs. nu este încă activat. invalid: "%{authentication_keys} sau parolă greșită." - last_attempt: Mai ai încă o încercare înainte ca contul tău să fie blocat. - locked: Contul tău este blocat. + last_attempt: Mai aveți o încercare înainte ca contul dvs. să fie blocat. + locked: Contul dvs. este blocat. not_found_in_database: "%{authentication_keys} sau parolă greșită." omniauth_user_creation_failure: Eroare la crearea unui cont pentru această identitate. - pending: Contul tău este încă în curs de revizuire. - timeout: Sesiunea ta a expirat. Te rugăm să te conectezi din nou pentru a continua. - unauthenticated: Trebuie să te conectezi sau să te înregistrezi înainte de a continua. - unconfirmed: Trebuie să confirmi adresa ta de e-mail înainte de a continua. + pending: Contul dvs. este încă în curs de revizuire. + timeout: Sesiunea dvs. a expirat. Vă rugăm să vă conectați din nou pentru a continua. + unauthenticated: Trebuie să vă conectați sau să vă înregistrați înainte de a continua. + unconfirmed: Trebuie să vă confirmați adresa de e-mail înainte de a continua. mailer: confirmation_instructions: - action: Verifică adresa de e-mail + action: Verificare adresă de e-mail action_with_app: Confirmați și reveniți la %{app} - explanation: Ai creat un cont pe %{host} cu această adresă de e-mail. Ești la un clic distanță de a-l activa. Dacă nu ai fost tu, ignoră acest e-mail. - explanation_when_pending: Ai solicitat o invitație către %{host} cu această adresă de e-mail. Odată ce îți confirmi adresa de e-mail, îți vom revizui cererea. Te poți autentifica pentru a-ți schimba detaliile sau pentru a-ți șterge contul, dar nu poți accesa majoritatea funcțiilor până când contul tău nu este aprobat. Dacă cererea ta este respinsă, datele tale vor fi șterse, astfel încât nu va fi necesară nicio altă acțiune din partea ta. Dacă nu ai fost tu, ignoră acest e-mail. + explanation: Ați creat un cont pe %{host} cu această adresă de e-mail. Sunteți la un clic distanță de a-l activa. Dacă nu ați fost dvs., vă rugăm să ignorați acest e-mail. + explanation_when_pending: Ați aplicat pentru o invitație pentru %{host} cu această adresă de e-mail. Odată ce vă confirmați adresa de e-mail, vă vom examina cererea. Vă puteți autentifica pentru a vă schimba detaliile sau pentru a vă șterge contul, dar nu puteți accesa majoritatea funcțiilor până când contul dvs. nu este aprobat. Dacă cererea dvs. este respinsă, datele dvs. vor fi șterse, astfel încât nu va fi necesară nicio acțiune suplimentară din partea dvs. Dacă nu ați fost dvs., vă rugăm să ignorați acest e-mail. extra_html: Te rugăm să verifici și regulile serverului și termenii noștri de serviciu. subject: 'Mastodon: Instrucțiuni de confirmare pentru %{instance}' - title: Verifică adresa de e-mail + title: Verificați adresa de e-mail email_changed: - explanation: 'Adresa de e-mail pentru contul tău este schimbată la:' - extra: Dacă nu v-ați schimbat adresa de e-mail, probabil că cineva a obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. - subject: 'Mastodon: E-mail schimbat' - title: Noua adresa de e-mail + explanation: 'Adresa de e-mail a contului dvs. este schimbată în:' + extra: Dacă nu v-ați schimbat adresa de e-mail, probabil că cineva a obținut acces la contul dvs. Vă rugăm să vă schimbați parola imediat sau să contactați administratorul serverului dacă nu aveți acces la contul dvs. + subject: 'Mastodon: Adresă de e-mail schimbată' + title: Adresă de e-mail nouă password_change: - explanation: Parola contului tău a fost schimbată. - extra: Dacă nu v-ați schimbat parola, este posibil ca cineva să fi obținut acces la contul dvs. Te rugăm să îți schimbi parola imediat sau să contactezi administratorul serverului dacă nu ai acces la contul tău. + explanation: Parola pentru contul dvs. a fost schimbată. + extra: Dacă nu v-ați schimbat parola, probabil că cineva a obținut acces la contul dvs. Vă rugăm să vă schimbați parola imediat sau să contactați administratorul serverului dacă nu aveți acces la contul dvs. subject: 'Mastodon: Parolă schimbată' title: Parolă schimbată reconfirmation_instructions: - explanation: Confirmă noua adresă pentru a schimba adresa de e-mail. + explanation: Confirmați noua adresă pentru a vă schimba adresa de e-mail. extra: Dacă această modificare nu a fost inițiată de dvs., vă rugăm să ignorați acest e-mail. Adresa de e-mail pentru contul Mastodon nu se va schimba până când nu accesați link-ul de mai sus. subject: 'Mastodon: Confirmați e-mailul pentru %{instance}' - title: Verifică adresa de e-mail + title: Verificați adresa de e-mail reset_password_instructions: - action: Schimbă parola + action: Schimbați parola explanation: Ați solicitat o nouă parolă pentru contul dvs. - extra: Dacă nu ați solicitat acest lucru, ignorați acest e-mail. Parola dvs. nu se va schimba până când nu veți accesa link-ul de mai sus și nu veți crea unul nou. + extra: Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest e-mail. Parola dvs. nu se va schimba până când nu veți accesa link-ul de mai sus și nu veți crea unul nou. subject: 'Mastodon: Instrucțiuni pentru resetarea parolei' title: Resetare parolă two_factor_disabled: explanation: Conectarea este acum posibilă folosind doar adresa de e-mail și parola. - subject: 'Mastodon: Autentificare cu doi factori dezactivată' + subject: 'Mastodon: Autentificarea cu doi factori dezactivată' subtitle: Autentificarea cu doi factori pentru contul dvs. a fost dezactivată. title: A2F dezactivată two_factor_enabled: - explanation: Pentru autentificare va fi necesar un token generat de aplicația TOTP asociată. + explanation: Pentru conectare va fi necesar un token generat de aplicația TOTP asociată. subject: 'Mastodon: Autentificare în doi pași activată' subtitle: Autentificarea cu doi factori a fost activată pentru contul dvs. title: A2F activată @@ -61,18 +61,18 @@ ro: explanation: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi. subject: 'Mastodon: Coduri de recuperare în doi pași regenerate' subtitle: Codurile de recuperare anterioare au fost invalidate și s-au generat altele noi. - title: Codurile de recuperare în doi pași au fost modificate + title: Codurile de recuperare în doi pași modificate unlock_instructions: subject: 'Mastodon: Instrucțiuni de deblocare' webauthn_credential: added: - explanation: Următoarea cheie de securitate a fost adăugată în contul tău + explanation: Următoarea cheie de securitate a fost adăugată în contul dvs. subject: 'Mastodon: Noua cheie de securitate' title: A fost adăugată o nouă cheie de securitate deleted: - explanation: Următoarea cheie de securitate a fost ștearsă din contul tău + explanation: Următoarea cheie de securitate a fost ștearsă din contul dvs. subject: 'Mastodon: Cheie de securitate ștearsă' - title: Una dintre cheile tale de securitate a fost ștearsă + title: Una dintre cheile dvs. de securitate a fost ștearsă webauthn_disabled: explanation: Autentificarea cu chei de securitate a fost dezactivată pentru contul dvs. extra: Conectarea este acum posibilă folosind doar token-ul generat de aplicația TOTP asociată. @@ -84,31 +84,31 @@ ro: subject: 'Mastodon: Autentificarea prin chei de securitate activată' title: Chei de securitate activate omniauth_callbacks: - failure: Nu te-am putut autentifica de la %{kind} deoarece "%{reason}". + failure: Nu v-am putut autentifica de la %{kind} deoarece "%{reason}". success: Autentificat cu succes din contul %{kind}. passwords: - no_token: Nu puteți accesa această pagină fără să veniți dintr-un e-mail de resetare a parolei. Dacă vii dintr-un e-mail de resetare a parolei, te rugăm să te asiguri că ai folosit URL-ul complet furnizat. - send_instructions: Dacă adresa ta de e-mail există în baza noastră de date, vei primi în câteva minute un link de recuperare a parolei la adresa ta de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. - send_paranoid_instructions: Dacă adresa ta de e-mail există în baza noastră de date, vei primi în câteva minute un link de recuperare a parolei la adresa ta de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. - updated: Parola ta a fost schimbată cu succes. Acum ești conectat. - updated_not_active: Parola ta a fost schimbată cu succes. + no_token: Nu puteți accesa această pagină fără să veniți dintr-un e-mail de resetare a parolei. Dacă veniți dintr-un e-mail de resetare a parolei, vă rugăm asigurați-vă că ați folosit URL-ul complet furnizat. + send_instructions: Dacă adresa dvs. de e-mail există în baza noastră de date, veți primi în câteva minute un link de recuperare a parolei la adresa dvs. de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. + send_paranoid_instructions: Dacă adresa dvs. de e-mail există în baza noastră de date, veți primi în câteva minute un link de recuperare a parolei la adresa dvs. de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. + updated: Parola dvs. a fost schimbată cu succes. Acum sunteți conectat. + updated_not_active: Parola dvs. a fost schimbată cu succes. registrations: - destroyed: La revedere! Contul tău a fost anulat cu succes. Sperăm să te vedem din nou în curând. + destroyed: La revedere! Contul dvs. a fost anulat cu succes. Sperăm să vă vedem din nou în curând. signed_up: Bine ați venit! V-ați înregistrat cu succes. signed_up_but_inactive: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. nu este încă activat. signed_up_but_locked: V-ați înregistrat cu succes. Cu toate acestea, nu vă putem conecta deoarece contul dvs. este blocat. - signed_up_but_pending: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. După ce faceți clic pe link, vă vom revizui cererea. Veți fi notificat dacă este aprobat. - signed_up_but_unconfirmed: Un mesaj cu un link de confirmare a fost trimis la adresa ta de e-mail. Vă rugăm să urmați link-ul pentru a vă activa contul. Vă rugăm să verificați folderul spam dacă nu ați primit acest e-mail. - update_needs_confirmation: Ți-ai actualizat contul cu succes, dar trebuie să verificăm noua ta adresă de e-mail. Vă rugăm să verificați adresa de e-mail și să urmați link-ul de confirmare pentru a confirma noua dvs. adresă de e-mail. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. + signed_up_but_pending: Un mesaj cu un link de confirmare a fost trimis la adresa dvs. de e-mail. După ce faceți clic pe link, vă vom revizui cererea. Veți fi notificat dacă este aprobat. + signed_up_but_unconfirmed: Un mesaj cu un link de confirmare a fost trimis la adresa dvs. de e-mail. Vă rugăm să urmați link-ul pentru a vă activa contul. Vă rugăm să verificați folderul spam dacă nu ați primit acest e-mail. + update_needs_confirmation: V-ați actualizat contul cu succes, dar trebuie să verificăm noua dvs. adresă de e-mail. Vă rugăm să verificați adresa de e-mail și să urmați link-ul de confirmare pentru a confirma noua dvs. adresă de e-mail. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. updated: Contul dvs. a fost actualizat cu succes. sessions: already_signed_out: Deconectat cu succes. signed_in: Conectat cu succes. signed_out: Deconectat cu succes. unlocks: - send_instructions: Veți primi un e-mail cu instrucțiuni despre cum să vă deblocați contul în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. - send_paranoid_instructions: Dacă contul tău există, vei primi un e-mail cu instrucțiuni pentru cum să-l deblochezi în câteva minute. Te rugăm să verifici dosarul spam dacă nu ai primit acest e-mail. - unlocked: Contul tău a fost deblocat cu succes. Te rugăm să te autentifici pentru a continua. + send_instructions: Veți primi un e-mail cu instrucțiuni despre cum să vă deblocați contul în câteva minute. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. + send_paranoid_instructions: Dacă contul dvs. există, veți primi un e-mail cu instrucțiuni pentru cum să-l deblocați în câteva minute. Vă rugăm să verificați dosarul spam dacă nu ați primit acest e-mail. + unlocked: Contul dvs. a fost deblocat cu succes. Vă rugăm să vă autentificați pentru a continua. errors: messages: already_confirmed: a fost deja confirmat, încercați să vă conectați diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml index fa28373521c0dd..7091bcaf7b565e 100644 --- a/config/locales/doorkeeper.ro.yml +++ b/config/locales/doorkeeper.ro.yml @@ -3,10 +3,10 @@ ro: activerecord: attributes: doorkeeper/application: - name: Numele aplicației + name: Nume aplicație redirect_uri: URI de redirecționare scopes: Domenii - website: Pagina web a aplicației + website: Website aplicație errors: models: doorkeeper/application: @@ -19,60 +19,60 @@ ro: doorkeeper: applications: buttons: - authorize: Autorizează - cancel: Anulează - destroy: Distruge - edit: Editează - submit: Trimite + authorize: Autorizare + cancel: Anulare + destroy: Distrugere + edit: Editare + submit: Trimitere confirmations: - destroy: Ești sigur? + destroy: Sunteți sigur? edit: - title: Editați aplicația + title: Editare aplicație form: error: Ups! Verificați formularul pentru posibile erori help: native_redirect_uri: Utilizați %{native_redirect_uri} pentru teste locale - redirect_uri: Folosește câte o linie per URI + redirect_uri: Folosiți câte o linie per URI scopes: Separați domeniile cu spații. Lăsați necompletat pentru a utiliza domeniile implicite. index: application: Aplicație - callback_url: URL pentru callback - delete: Șterge + callback_url: Callback URL + delete: Ștergere empty: Nu aveți aplicații. name: Nume new: Aplicație nouă scopes: Domenii - show: Arată - title: Aplicațiile tale + show: Afișare + title: Aplicațiile dvs. new: title: Aplicație nouă show: actions: Acțiuni application_id: Cheie client - callback_urls: URL-uri de callback + callback_urls: Callback URL-uri scopes: Domenii - secret: Codul secret al clientului + secret: Secretul clientului title: 'Aplicație: %{name}' authorizations: buttons: - authorize: Autorizează - deny: Interzice + authorize: Autorizare + deny: Refuzare error: title: A apărut o eroare new: prompt_html: "%{client_name} dorește să îți acceseze contul. Este o aplicație terță. Dacă nu aveți încredere în ea, atunci nu ar trebui să o autorizați." - review_permissions: Revizuiește permisiunile + review_permissions: Revizuiți permisiunile title: Autorizare necesară show: title: Copiați acest cod de autorizare și lipiți-l în aplicație. authorized_applications: buttons: - revoke: Revocați + revoke: Revocare confirmations: - revoke: Ești sigur? + revoke: Sunteți sigur? index: authorized_at: Autorizat pe %{date} - description_html: Acestea sunt aplicațiile care vă pot accesa contul folosind API. Dacă există aplicații pe care nu le recunoașteți, sau o aplicație se comportă necorespunzător, puteți revoca accesul. + description_html: Acestea sunt aplicațiile care vă pot accesa contul folosind API-ul. Dacă există aplicații pe care nu le recunoașteți, sau o aplicație se comportă necorespunzător, puteți revoca accesul. last_used_at: Utilizat ultima dată pe %{date} never_used: Nu a fost folosit niciodată scopes: Permisiuni @@ -86,9 +86,9 @@ ro: invalid_grant: Acordarea autorizației furnizată este invalidă, expirată, revocată, nu corespunde URI-ului de redirecționare folosit în cererea de autorizare, sau a fost eliberat altui client. invalid_redirect_uri: Uri-ul de redirecționare inclus nu este valid. invalid_request: - missing_param: 'Lipseste parametrul necesar: %{value}.' + missing_param: 'Lipsește parametrul necesar: %{value}.' request_not_authorized: Solicitarea trebuie să fie autorizată. Parametrul necesar pentru solicitarea de autorizare lipsește sau este invalid. - unknown: Solicitarea nu are un parametru necesar, include un parametru nesuportat sau este dealtfel formatat incorect. + unknown: Solicitarea nu are un parametru necesar, include un parametru nesuportat sau este formatat incorect. invalid_resource_owner: Acreditările proprietarului de resurse nu sunt valide sau proprietarul de resurse nu poate fi găsit invalid_scope: Domeniul de aplicare solicitat este invalid, necunoscut sau incorect. invalid_token: @@ -137,12 +137,12 @@ ro: notifications: Notificări push: Notificări push reports: Rapoarte - search: Caută + search: Căutare statuses: Postări layouts: admin: nav: - applications: Aplicaţii + applications: Aplicații oauth2_provider: Furnizor OAuth2 application: title: Este necesară autorizarea OAuth @@ -160,7 +160,7 @@ ro: read:accounts: vede informațiile privind conturile read:blocks: vede blocurile tale read:bookmarks: vede marcajele tale - read:favourites: vezi favoritele tale + read:favourites: vede favoritele tale read:filters: vede filtrele tale read:follows: vede urmăririle tale read:lists: vede listele tale @@ -168,7 +168,7 @@ ro: read:notifications: vede notificările tale read:reports: vede raportările tale read:search: caută în numele tău - read:statuses: vede toate stările + read:statuses: vede toate postările write: modifică toate datele contului tău write:accounts: modifică profilul tău write:blocks: blochează conturile și domeniile diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 7916e27f3acc39..ebe26c3f14f398 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -604,7 +604,7 @@ es-MX: suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. - actions_no_posts: Este informe no incluye ninguna publicación asociada a eliminar + actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -911,8 +911,8 @@ es-MX: trends: allow: Permitir approved: Aprobado - confirm_allow: "¿Estás seguro de que deseas permitir la etiqueta seleccionada?" - confirm_disallow: "¿Estás seguro de que deseas restringir la etiqueta seleccionada?" + confirm_allow: "¿Estás seguro de que deseas permitir las etiquetas seleccionadas?" + confirm_disallow: "¿Estás seguro de que deseas restringir las etiquetas seleccionadas?" disallow: Rechazar links: allow: Permitir enlace @@ -980,7 +980,7 @@ es-MX: used_by_over_week: one: Usada por una persona durante la última semana other: Usada por %{count} personas durante la última semana - title: Recomendaciones y tendencias + title: Recomendaciones y Tendencias trending: En tendencia warning_presets: add_new: Añadir nuevo diff --git a/config/locales/es.yml b/config/locales/es.yml index 16716641f97582..c652876f3a9ef3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -604,7 +604,7 @@ es: suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y finalmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los informes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este informe. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. - actions_no_posts: Este informe no incluye ninguna publicación asociada a eliminar + actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -911,8 +911,8 @@ es: trends: allow: Permitir approved: Aprobadas - confirm_allow: "¿Estás seguro de que deseas permitir la etiqueta seleccionada?" - confirm_disallow: "¿Estás seguro de que deseas restringir la etiqueta seleccionada?" + confirm_allow: "¿Estás seguro de que deseas permitir las etiquetas seleccionadas?" + confirm_disallow: "¿Estás seguro de que deseas restringir las etiquetas seleccionadas?" disallow: No permitir links: allow: Permitir enlace @@ -980,7 +980,7 @@ es: used_by_over_week: one: Usada por una persona durante la última semana other: Usada por %{count} personas durante la última semana - title: Recomendaciones y tendencias + title: Recomendaciones y Tendencias trending: En tendencia warning_presets: add_new: Añadir nuevo diff --git a/config/locales/et.yml b/config/locales/et.yml index d8cdbf41431aed..aca4f93c4db164 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -24,6 +24,7 @@ et: admin: account_actions: action: Täida tegevus + already_silenced: See konto on juba piiratud. already_suspended: See konto on juba peatatud. title: Rakenda moderaatori tegevus kasutajale %{acct} account_moderation_notes: @@ -133,6 +134,7 @@ et: resubscribe: Telli taas role: Roll search: Otsi + search_same_email_domain: Muud kasutajad sama e-posti domeeniga search_same_ip: Teised kasutajad, kellel on sama IP security: Turvalisus security_measures: @@ -173,21 +175,26 @@ et: approve_appeal: Rahulda vaidlustus approve_user: Kinnita kasutaja assigned_to_self_report: Määras Teavituse + change_email_user: Muuda kasutaja e-posti change_role_user: Muuda kasutaja rolli confirm_user: Kasutaja kinnitatud create_account_warning: Lisas hoiatuse create_announcement: Lisas teadaande + create_canonical_email_block: Loo e-posti blokeering create_custom_emoji: Lisas kohandatud emotikoni create_domain_allow: Lisas lubatud domeeni create_domain_block: Domeeni blokeerimine + create_email_domain_block: Loo e-posti domeeni blokeering create_ip_block: IP-reegli lisamine create_unavailable_domain: Kättesaamatu domeeni lisamine create_user_role: Loo roll demote_user: Alandas kasutaja destroy_announcement: Eemaldas teadaande + destroy_canonical_email_block: Kustuta e-posti blokeering destroy_custom_emoji: Eemaldas kohandatud emotikoni destroy_domain_allow: Eemaldas lubatud domeeni destroy_domain_block: Domeeniblokeeringu eemaldamine + destroy_email_domain_block: Kustuta e-posti domeeni blokeering destroy_instance: Domeeni kustutamine destroy_ip_block: IP-reegli kustutamine destroy_status: Kustuta postitus @@ -228,20 +235,26 @@ et: approve_appeal_html: "%{name} kiitis heaks modereerimise otsuse vaidlustuse %{target} poolt" approve_user_html: "%{name} kiitis heaks registreerimise %{target} poolt" assigned_to_self_report_html: "%{name} määras raporti %{target} endale" + change_email_user_html: "%{name} muutis kasutaja %{target} e-postiaadressi" change_role_user_html: "%{name} muutis %{target} rolli" + confirm_user_html: "%{name} kinnitas kasutaja %{target} e-postiaadressi" create_account_warning_html: "%{name} saatis %{target} hoiatuse" create_announcement_html: "%{name} lõi uue teate %{target}" + create_canonical_email_block_html: "%{name} blokeeris e-posti räsiga %{target}" create_custom_emoji_html: "%{name} laadis üles uue emotikoni %{target}" create_domain_allow_html: "%{name} lubas föderatsiooni domeeniga %{target}" create_domain_block_html: "%{name} keelas domeeni %{target}" + create_email_domain_block_html: "%{name} blokeeris e-posti domeeni %{target}" create_ip_block_html: "%{name} lõi IP-aadressile %{target} reegli" create_unavailable_domain_html: "%{name} lõpetas edastamise domeeni %{target}" create_user_role_html: "%{name} lõi rolli %{target}" demote_user_html: "%{name} alandas kasutajat %{target}" destroy_announcement_html: "%{name} kustutas teadaande %{target}" + destroy_canonical_email_block_html: "%{name} eemaldas blokeeringu e-postilt räsiga %{target}" destroy_custom_emoji_html: "%{name} kustutas emotikoni %{target}" destroy_domain_allow_html: "%{name} keelas föderatsiooni domeeniga %{target}" destroy_domain_block_html: "%{name} lubas domeeni %{target}" + destroy_email_domain_block_html: "%{name} eemaldas blokeeringu e-posti domeenilt %{target}" destroy_instance_html: "%{name} kustutas domeeni %{target}" destroy_ip_block_html: "%{name} kustutas IP-aadressi %{target} reegli" destroy_status_html: "%{name} kustutas %{target} postituse" @@ -260,6 +273,7 @@ et: reject_user_html: "%{name} lükkas %{target} liitumissoovi tagasi" remove_avatar_user_html: "%{name} eemaldas %{target} avatari" reopen_report_html: "%{name} taasavas raporti %{target}" + resend_user_html: "%{name} lähtestas %{target} kinnituskirja e-posti" reset_password_user_html: "%{name} lähtestas %{target} salasõna" resolve_report_html: "%{name} lahendas raporti %{target}" sensitive_account_html: "%{name} märkis %{target} meedia kui tundlik sisu" @@ -420,6 +434,7 @@ et: attempts_over_week: one: "%{count} katse viimase nädala kestel" other: "%{count} liitumiskatset viimase nädala kestel" + created_msg: E-posti domeen edukalt blokeeritud delete: Kustuta dns: types: @@ -428,8 +443,12 @@ et: new: create: Lisa domeen resolve: Domeeni lahendamine + title: Blokeeri uus e-posti domeen + no_email_domain_block_selected: Ühtegi e-posti domeeni blokeeringut ei muudetud, kuna ühtegi ei valitud not_permitted: Ei ole lubatud + resolved_dns_records_hint_html: Domeeninimi lahendatakse järgmistele MX-domeenidele, mis on lõppkokkuvõttes vastutavad e-kirjade vastuvõtmise eest. MX-domeeni blokeerimine blokeerib registreerimise mis tahes e-posti aadressilt, mis kasutab sama MX-domeeni, isegi kui nähtav domeeninimi on erinev. Ole ettevaatlik, et mitte blokeerida peamisi e-posti teenusepakkujaid. resolved_through_html: Lahendatud %{domain} kaudu + title: Blokeeritud e-posti domeenid export_domain_allows: new: title: Lubatud domeenide import @@ -583,6 +602,7 @@ et: resolve_description_html: Raporteeritud konto suhtes ei võeta midagi ette, juhtumit ei registreerita ja raport suletakse. silence_description_html: Konto saab olema nähtav ainult senistele jälgijatele või otsestele pöördujatele, mõjutates avalikku levi. On tagasipööratav. Sulgeb kõik konto suhtes esitatud raportid. suspend_description_html: See konto ja kogu selle sisu muutub kättesaamatuks ning kustub lõpuks ja igasugune suhtlus sellega muutub võimatuks. Tagasipööratav 30 päeva jooksul. Lõpetab kõik selle konto kohta esitatud kaebused. + actions_description_html: Otsusta, milliseid meetmeid selle raporti lahendamiseks võtta. Kui võtad raporteeritud konto suhtes karistusmeetme, saadetakse talle e-posti teade, välja arvatud juhul, kui valid kategooria Rämps. actions_description_remote_html: Otsusta, mida teha selle raporti lahendamiseks. See mõjutab ainult seda, kuidas Sinu server selle kaugkontoga suhtleb ning selle sisu käsitleb. actions_no_posts: Selle raportiga pole seotud ühtegi postitust, mida kustutada add_to_report: Lisa raportile juurde @@ -648,6 +668,7 @@ et: delete_data_html: Kustuta tänasest 30 päeva pärast kasutaja @%{acct} profiil ja sisu, kui vahepeal tema kontot ei taastata preview_preamble_html: "@%{acct} saab järgmise sisuga hoiatuse:" record_strike_html: Salvesta @%{acct} kohta juhtum, et aidata selle konto tulevaste rikkumiste puhul reageerida + send_email_html: Saada hoiatuskiri @%{acct} warning_placeholder: Valikuline täiendav põhjendus modereerimisele. target_origin: Raporteeritud konto päritolu title: Teavitused @@ -687,6 +708,7 @@ et: manage_appeals: Vaidlustuste haldamine manage_appeals_description: Lubab kasutajail läbi vaadata modereerimisotsuste vaidlustusi manage_blocks: Keeldude haldamine + manage_blocks_description: Lubab kasutajatel blokeerida e-posti teenusepakkujaid ja IP-aadresse manage_custom_emojis: Halda isetehtud emotikone manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone manage_federation: Halda födereerumist @@ -704,6 +726,7 @@ et: manage_taxonomies: Halda taksonoomiaid manage_taxonomies_description: Luba kasutajatel populaarset sisu üle vaadata ning uuendada siltide sätteid manage_user_access: Halda kasutajate ligipääsu + manage_user_access_description: Võimaldab kasutajatel keelata teiste kasutajate kaheastmelise autentimise, muuta oma e-posti aadressi ja lähtestada oma parooli manage_users: Kasutajate haldamine manage_users_description: Lubab kasutajail näha teiste kasutajate üksikasju ja teha nende suhtes modereerimisotsuseid manage_webhooks: Halda webhook'e @@ -1137,6 +1160,12 @@ et: view_strikes: Vaata enda eelnevaid juhtumeid too_fast: Vorm esitatud liiga kiirelt, proovi uuesti. use_security_key: Kasuta turvavõtit + author_attribution: + example_title: Näidistekst + hint_html: Määra, kuidas sind krediteeritakse, kui linke Mastodonis jagatakse. + more_from_html: Rohkem kasutajalt %{name} + s_blog: Kasutaja %{name} blogi + title: Autori tunnustamine challenge: confirm: Jätka hint_html: "Nõuanne: Me ei küsi salasõna uuesti järgmise tunni jooksul." @@ -1418,6 +1447,16 @@ et: unsubscribe: action: Jah, lõpeta tellimine complete: Tellimine lõpetatud + confirmation_html: Kas oled kindel, et soovid loobuda %{type} tellimisest oma e-postiaadressile %{email} Mastodonist kohas %{domain}? Saad alati uuesti tellida oma e-posti teavituste seadetest. + emails: + notification_emails: + favourite: lemmikuks märkimise teavituskirjade + follow: jälgimiste teavituskirjade + follow_request: jälgimistaotluste teavituskirjade + mention: mainimiste teavituskirjade + reblog: jagamiste teavituskirjade + resubscribe_html: Kui loobusid tellimisest ekslikult, saad uuesti tellida oma e-posti teavituste seadetest. + success_html: Sa ei saa enam %{type} teateid oma e-postile %{email} Mastodonist kohas %{domain}. title: Loobu tellimisest media_attachments: validations: @@ -1906,6 +1945,7 @@ et: instructions_html: Kopeeri ja kleebi allpool olev kood oma lehe HTML lähtekoodi. Seejärel lisa oma kodulehe aadress profiili "Muuda profiili" taabi ühte lisavälja ning salvesta muudatused. verification: Kinnitamine verified_links: Sinu kontrollitud lingid + website_verification: Veebilehe kontrollimine webauthn_credentials: add: Uue turvavõtme lisamine create: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 5290ff53745315..b70a515fd16eec 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -24,6 +24,7 @@ fr-CA: admin: account_actions: action: Effectuer l'action + already_silenced: Ce compte a déjà été limité. already_suspended: Ce compte est déjà suspendu. title: Effectuer une action de modération sur %{acct} account_moderation_notes: @@ -133,7 +134,7 @@ fr-CA: resubscribe: Se réabonner role: Rôle search: Rechercher - search_same_email_domain: Autres utilisateurs avec le même domaine de courriel + search_same_email_domain: Autres utilisateur·rice·s ayant le même domaine de messagerie search_same_ip: Autres utilisateur·rice·s avec la même IP security: Sécurité security_measures: @@ -270,6 +271,7 @@ fr-CA: reject_user_html: "%{name} a rejeté l’inscription de %{target}" remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}" reopen_report_html: "%{name} a rouvert le signalement %{target}" + resend_user_html: "%{name} a renvoyé l'e-mail de confirmation pour %{target}" reset_password_user_html: "%{name} a réinitialisé le mot de passe de l'utilisateur·rice %{target}" resolve_report_html: "%{name} a résolu le signalement %{target}" sensitive_account_html: "%{name} a marqué le média de %{target} comme sensible" @@ -284,6 +286,7 @@ fr-CA: update_custom_emoji_html: "%{name} a mis à jour l'émoji %{target}" update_domain_block_html: "%{name} a mis à jour le blocage de domaine pour %{target}" update_ip_block_html: "%{name} a modifié la règle pour l'IP %{target}" + update_report_html: "%{name} a mis à jour le rapport de signalement %{target}" update_status_html: "%{name} a mis à jour le message de %{target}" update_user_role_html: "%{name} a changé le rôle %{target}" deleted_account: compte supprimé @@ -439,7 +442,12 @@ fr-CA: create: Créer le blocage resolve: Résoudre le domaine title: Blocage d'un nouveau domaine de messagerie électronique + no_email_domain_block_selected: Aucun blocage de domaine de messagerie n'a été modifié comme aucun n'a été sélectionné not_permitted: Non autorisé + resolved_dns_records_hint_html: |- + Le nom de domaine se réfère aux domaines MX suivants, qui sont à leur tour responsables de la réception des courriels. + + Le blocage d'un domaine MX empêchera l'inscription depuis toute adresse électronique ayant recours au même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} title: Domaines de messagerie électronique bloqués export_domain_allows: @@ -595,7 +603,9 @@ fr-CA: resolve_description_html: Aucune mesure ne sera prise contre le compte signalé, aucune sanction ne sera enregistrée et le sigalement sera clôturé. silence_description_html: Le compte ne sera visible que par ceux qui le suivent déjà ou qui le recherchent manuellement, ce qui limite fortement sa portée. Cette action peut toujours être annulée. Cloture tous les signalements concernant ce compte. suspend_description_html: Le compte et tous ses contenus seront inaccessibles et finalement supprimés, et il sera impossible d'interagir avec lui. Réversible dans les 30 jours. Cloture tous les signalements concernant ce compte. + actions_description_html: Décidez de l'action à entreprendre pour résoudre ce signalement. Si vous prenez une mesure punitive à l'encontre du compte signalé, une notification par courrier électronique lui sera envoyée, excepté lorsque la catégorie Spam est sélectionnée. actions_description_remote_html: Décidez des mesures à prendre pour résoudre ce signalement. Cela n'affectera que la manière dont votre serveur communique avec ce compte distant et traite son contenu. + actions_no_posts: Ce signalement n'a pas de messages qui lui sont associés et qui devraient être supprimés add_to_report: Ajouter davantage au rapport already_suspended_badges: local: Déjà suspendu sur ce serveur @@ -717,6 +727,7 @@ fr-CA: manage_taxonomies: Gérer les taxonomies manage_taxonomies_description: Permet aux utilisateur⋅rice⋅s d'examiner les contenus tendance et de mettre à jour les paramètres des hashtags manage_user_access: Gérer l'accès utilisateur + manage_user_access_description: Permet aux utilisateur·rice·s de désactiver l'authentification à deux facteurs des autres utilisateur·rice·s, de modifier leur adresse électronique et de réinitialiser leur mot de passe manage_users: Gérer les utilisateur·rice·s manage_users_description: Permet aux utilisateur⋅rice⋅s de voir les détails des autres utilisateur⋅rice⋅s et d'effectuer des actions de modération en conséquence manage_webhooks: Gérer les points d’ancrage web @@ -879,16 +890,19 @@ fr-CA: message_html: "Votre serveur web est mal configuré. La confidentialité de vos utilisateurs est en péril." tags: moderation: + not_trendable: Ne peut être en tendance not_usable: Non utilisable pending_review: En attente de traitement review_requested: Révision requise reviewed: Traité title: État + trendable: Peut s'afficher dans les tendances unreviewed: Non traité usable: Utilisable name: Nom newest: Plus récents oldest: Plus anciens + open: Afficher publiquement reset: Réinitialiser review: État du traitement search: Recherche @@ -1434,6 +1448,15 @@ fr-CA: unsubscribe: action: Oui, me désabonner complete: Désabonné·e + emails: + notification_emails: + favourite: e-mails de notifications de favoris + follow: e-mails de notifications d’abonnements + follow_request: e-mails de demandes d’abonnements + mention: e-mails de notifications de mentions + reblog: e-mails de notifications de partages + resubscribe_html: Si vous vous êtes désinscrit par erreur, vous pouvez vous réinscrire à partir de vos paramètres de notification par e-mail. + success_html: Vous ne recevrez plus de %{type} pour Mastodon sur %{domain} à votre adresse e-mail à %{email}. title: Se désabonner media_attachments: validations: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 8ee4e35acc608c..bc616d28963b55 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -24,6 +24,7 @@ fr: admin: account_actions: action: Effectuer l'action + already_silenced: Ce compte a déjà été limité. already_suspended: Ce compte est déjà suspendu. title: Effectuer une action de modération sur %{acct} account_moderation_notes: @@ -133,7 +134,7 @@ fr: resubscribe: Se réabonner role: Rôle search: Rechercher - search_same_email_domain: Autres utilisateurs avec le même domaine de courriel + search_same_email_domain: Autres utilisateur·rice·s ayant le même domaine de messagerie search_same_ip: Autres utilisateur·rice·s avec la même IP security: Sécurité security_measures: @@ -270,6 +271,7 @@ fr: reject_user_html: "%{name} a rejeté l’inscription de %{target}" remove_avatar_user_html: "%{name} a supprimé l'avatar de %{target}" reopen_report_html: "%{name} a rouvert le signalement %{target}" + resend_user_html: "%{name} a renvoyé l'e-mail de confirmation pour %{target}" reset_password_user_html: "%{name} a réinitialisé le mot de passe de l'utilisateur·rice %{target}" resolve_report_html: "%{name} a résolu le signalement %{target}" sensitive_account_html: "%{name} a marqué le média de %{target} comme sensible" @@ -284,6 +286,7 @@ fr: update_custom_emoji_html: "%{name} a mis à jour l'émoji %{target}" update_domain_block_html: "%{name} a mis à jour le blocage de domaine pour %{target}" update_ip_block_html: "%{name} a modifié la règle pour l'IP %{target}" + update_report_html: "%{name} a mis à jour le rapport de signalement %{target}" update_status_html: "%{name} a mis à jour le message de %{target}" update_user_role_html: "%{name} a changé le rôle %{target}" deleted_account: compte supprimé @@ -439,7 +442,12 @@ fr: create: Créer le blocage resolve: Résoudre le domaine title: Blocage d'un nouveau domaine de messagerie électronique + no_email_domain_block_selected: Aucun blocage de domaine de messagerie n'a été modifié comme aucun n'a été sélectionné not_permitted: Non autorisé + resolved_dns_records_hint_html: |- + Le nom de domaine se réfère aux domaines MX suivants, qui sont à leur tour responsables de la réception des courriels. + + Le blocage d'un domaine MX empêchera l'inscription depuis toute adresse électronique ayant recours au même domaine MX, et ce même si le nom de domaine visible est différent. Veillez à ne pas bloquer les principaux fournisseurs de services de messagerie. resolved_through_html: Résolu par %{domain} title: Domaines de messagerie électronique bloqués export_domain_allows: @@ -595,7 +603,9 @@ fr: resolve_description_html: Aucune mesure ne sera prise contre le compte signalé, aucune sanction ne sera enregistrée et le sigalement sera clôturé. silence_description_html: Le compte ne sera visible que par ceux qui le suivent déjà ou qui le recherchent manuellement, ce qui limite fortement sa portée. Cette action peut toujours être annulée. Cloture tous les signalements concernant ce compte. suspend_description_html: Le compte et tous ses contenus seront inaccessibles et finalement supprimés, et il sera impossible d'interagir avec lui. Réversible dans les 30 jours. Cloture tous les signalements concernant ce compte. + actions_description_html: Décidez de l'action à entreprendre pour résoudre ce signalement. Si vous prenez une mesure punitive à l'encontre du compte signalé, une notification par courrier électronique lui sera envoyée, excepté lorsque la catégorie Spam est sélectionnée. actions_description_remote_html: Décidez des mesures à prendre pour résoudre ce signalement. Cela n'affectera que la manière dont votre serveur communique avec ce compte distant et traite son contenu. + actions_no_posts: Ce signalement n'a pas de messages qui lui sont associés et qui devraient être supprimés add_to_report: Ajouter davantage au rapport already_suspended_badges: local: Déjà suspendu sur ce serveur @@ -717,6 +727,7 @@ fr: manage_taxonomies: Gérer les taxonomies manage_taxonomies_description: Permet aux utilisateur⋅rice⋅s d'examiner les contenus tendance et de mettre à jour les paramètres des hashtags manage_user_access: Gérer l'accès utilisateur + manage_user_access_description: Permet aux utilisateur·rice·s de désactiver l'authentification à deux facteurs des autres utilisateur·rice·s, de modifier leur adresse électronique et de réinitialiser leur mot de passe manage_users: Gérer les utilisateur·rice·s manage_users_description: Permet aux utilisateur⋅rice⋅s de voir les détails des autres utilisateur⋅rice⋅s et d'effectuer des actions de modération en conséquence manage_webhooks: Gérer les points d’ancrage web @@ -879,16 +890,19 @@ fr: message_html: "Votre serveur web est mal configuré. La confidentialité de vos utilisateurs est en péril." tags: moderation: + not_trendable: Ne peut être en tendance not_usable: Non utilisable pending_review: En attente de traitement review_requested: Révision requise reviewed: Traité title: État + trendable: Peut s'afficher dans les tendances unreviewed: Non traité usable: Utilisable name: Nom newest: Plus récents oldest: Plus anciens + open: Afficher publiquement reset: Réinitialiser review: État du traitement search: Recherche @@ -1434,6 +1448,15 @@ fr: unsubscribe: action: Oui, se désinscrire complete: Désinscrit + emails: + notification_emails: + favourite: e-mails de notifications de favoris + follow: e-mails de notifications d’abonnements + follow_request: e-mails de demandes d’abonnements + mention: e-mails de notifications de mentions + reblog: e-mails de notifications de partages + resubscribe_html: Si vous vous êtes désinscrit par erreur, vous pouvez vous réinscrire à partir de vos paramètres de notification par e-mail. + success_html: Vous ne recevrez plus de %{type} pour Mastodon sur %{domain} à votre adresse e-mail à %{email}. title: Se désinscrire media_attachments: validations: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 09d5f7ae18c7f3..1071871c952327 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -30,6 +30,7 @@ ga: admin: account_actions: action: Déan gníomh + already_silenced: Tá teorainn leis an gcuntas seo cheana féin. already_suspended: Tá an cuntas seo curtha ar fionraí cheana féin. title: Dean gníomh modhnóireachta ar %{acct} account_moderation_notes: @@ -1213,6 +1214,12 @@ ga: view_strikes: Féach ar stailceanna san am atá caite i gcoinne do chuntais too_fast: Cuireadh an fhoirm isteach róthapa, triail arís. use_security_key: Úsáid eochair shlándála + author_attribution: + example_title: Téacs samplach + hint_html: Rialú conas a chuirtear chun sochair tú nuair a roinntear naisc ar Mastodon. + more_from_html: Tuilleadh ó %{name} + s_blog: Blag %{name} + title: Leithdháil an údair challenge: confirm: Lean ar aghaidh hint_html: "Leid: Ní iarrfaimid do phasfhocal ort arís go ceann uair an chloig eile." @@ -2029,6 +2036,7 @@ ga: instructions_html: Cóipeáil agus greamaigh an cód thíos isteach i HTML do shuíomh Gréasáin. Ansin cuir seoladh do shuíomh Gréasáin isteach i gceann de na réimsí breise ar do phróifíl ón gcluaisín "Cuir próifíl in eagar" agus sábháil athruithe. verification: Fíorú verified_links: Do naisc fhíoraithe + website_verification: Fíorú láithreán gréasáin webauthn_credentials: add: Cuir eochair shlándála nua leis create: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 3f30d37823ecf9..5e63b5bd2300d0 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -28,6 +28,7 @@ gd: admin: account_actions: action: Gabh an gnìomh + already_silenced: Chaidh an cunntas seo a chuingeachadh mu thràth. already_suspended: Chaidh an cunntas seo a chur à rèim mu thràth. title: Gabh gnìomh maorsainneachd air %{acct} account_moderation_notes: @@ -1195,6 +1196,12 @@ gd: view_strikes: Seall na rabhaidhean a fhuair an cunntas agad roimhe too_fast: Chaidh am foirm a chur a-null ro luath, feuch ris a-rithist. use_security_key: Cleachd iuchair tèarainteachd + author_attribution: + example_title: Ball-sampaill teacsa + hint_html: Stùirich mar a thèid iomradh a thoirt ort nuair a thèid ceangal a cho-roinneadh air Mastodon. + more_from_html: Barrachd o %{name} + s_blog: Bloga aig %{name} + title: Aithris air an ùghdar challenge: confirm: Lean air adhart hint_html: "Gliocas: Chan iarr sinn am facal-faire agad ort a-rithist fad uair a thìde." @@ -1998,6 +2005,7 @@ gd: instructions_html: Dèan lethbhreac dhen chòd gu h-ìosal is cuir a-steach ann an HTML na làraich-lìn agad e. An uairsin, cuir seòladh na làraich-lìn agad ri fear dhe na raointean a bharrachd air a’ phròifil agad o thaba “Deasaich a’ phròifil” agus sàbhail na h-atharraichean. verification: Dearbhadh verified_links: Na ceanglaichean dearbhte agad + website_verification: Dearbhadh làraich-lìn webauthn_credentials: add: Cuir iuchair tèarainteachd ùr ris create: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 42495053e9ae03..fa07eb6f59dfc0 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -421,9 +421,21 @@ lt: domain: Domenas new: create: Pridėto domeną + export_domain_allows: + new: + title: Importuoti domeno leidžiamus + no_file: Nėra pasirinkto failo export_domain_blocks: import: description_html: Netrukus importuosi domenų blokavimų sąrašą. Labai atidžiai peržiūrėk šį sąrašą, ypač jei ne tu jį sudarei. + existing_relationships_warning: Esami sekimo sąryšiai + private_comment_description_html: 'Kad būtų lengviau atsekti, iš kur importuoti blokavimai, importuoti blokavimai bus kuriami su šiuo privačiu komentaru: %{comment}' + private_comment_template: Importuota iš %{source}, %{date} + title: Importuoti domeno blokavimus + invalid_domain_block: 'Vienas ar daugiau domenų blokavimų buvo praleisti dėl toliau nurodytos (-ų) klaidos (-ų): %{error}' + new: + title: Importuoti domeno blokavimus + no_file: Nėra pasirinkto failo follow_recommendations: language: Kalbui status: Būsena @@ -853,18 +865,18 @@ lt: exports: archive_takeout: date: Data - download: Parsisiųsti archyvą - hint_html: Jūs galite prašyti savo įrašų bei medijos archyvo. Eksportuota informacija bus ActivityPub formatu, skaitoma suderintų programų. Galite prašyti archyvo, kas 7 dienas. + download: Atsisiųsti archyvą + hint_html: Gali paprašyti savo įrašų ir įkeltos medijos archyvo. Eksportuoti duomenys bus „ActivityPub“ formatu, kurį galima perskaityti bet kuria suderinama programine įranga. Archyvo galima prašyti kas 7 dienas. in_progress: Sudaromas archyvas... request: Prašyti savo archyvo size: Dydis - blocks: Jūs blokuojate + blocks: Blokuoji bookmarks: Žymės csv: CSV - domain_blocks: Domeno blokai + domain_blocks: Domeno blokavimai lists: Sąrašai - mutes: Jūs tildote - storage: Medijos sandėlis + mutes: Nutildei + storage: Medijos saugykla featured_tags: add_new: Pridėti naują hint_html: "Savo profilyje parodyk svarbiausius saitažodžius. Tai puikus įrankis kūrybiniams darbams ir ilgalaikiams projektams sekti, todėl svarbiausios saitažodžiai rodomi matomoje vietoje profilyje ir leidžia greitai pasiekti tavo paties įrašus." @@ -904,7 +916,7 @@ lt: merge_long: Išsaugoti esančius įrašus ir pridėti naujus overwrite: Perrašyti overwrite_long: Pakeisti senus įrašus naujais - preface: Jūs galite importuoti informaciją iš kito serverio, tokią kaip sąrašą žmonių kuriuos sekate. + preface: Gali importuoti duomenis, kuriuos eksportavai iš kito serverio, pavyzdžiui, sekamų arba blokuojamų žmonių sąrašą. success: Jūsų informacija sėkmingai įkelta ir bus apdorota kaip įmanoma greičiau types: blocking: Blokuojamų sąrašas @@ -955,6 +967,8 @@ lt: migrations: acct: Perkelta į cancel: Atšaukti nukreipimą + warning: + disabled_account: Po to tavo dabartine paskyra nebus galima naudotis visiškai. Tačiau turėsi prieigą prie duomenų eksporto ir pakartotinio aktyvavimo. moderation: title: Prižiūrėjimas notification_mailer: @@ -1079,6 +1093,7 @@ lt: export: Duomenų eksportas featured_tags: Rodomi saitažodžiai import: Importuoti + import_and_export: Importas ir eksportas migrate: Paskyros migracija notifications: El. laiško pranešimai preferences: Nuostatos diff --git a/config/locales/lv.yml b/config/locales/lv.yml index c902625eaa03bc..55a0751811efad 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -461,6 +461,9 @@ lv: title: Sekošanas ieteikumi unsuppress: Atjaunot sekošanas rekomendāciju instances: + audit_log: + title: Nesenie pārbaudes žurnāli + view_all: Skatīt pilnus pārbaudes žurnālus availability: description_html: one: Ja piegāde uz domēnu neizdodas %{count} dienu bez panākumiem, turpmāki piegādes mēģinājumi netiks veikti, ja vien netiks saņemta piegāde no domēna. @@ -591,7 +594,9 @@ lv: resolve_description_html: Pret norādīto kontu netiks veiktas nekādas darbības, netiks reģistrēts brīdinājums, un ziņojums tiks slēgts. silence_description_html: Konts būs redzams tikai tiem, kas tam jau seko vai meklē to manuāli, ievērojami ierobežojot tā sasniedzamību. To vienmēr var atgriezt. Tiek aizvērti visi šī konta pārskati. suspend_description_html: Konts un viss tā saturs nebūs pieejams un galu galā tiks izdzēsts, un mijiedarbība ar to nebūs iespējama. Atgriežams 30 dienu laikā. Tiek aizvērti visi šī konta pārskati. + actions_description_html: Izlem, kādas darbības jāveic, lai atrisinātu šo ziņojumu. Ja tiks pieņemti sodoši mēri pret kontu, par kuru ziņots, tam e-pastā tiks nosūtīts paziņojums, izņemot gadījumus, kad ir atlasīta kategorija Mēstules. actions_description_remote_html: Izlem, kādas darbības jāveic, lai atrisinātu šo ziņojumu. Tas ietekmēs tikai to, kā tavs serveris sazinās ar šo attālo kontu un apstrādā tā saturu. + actions_no_posts: Šim ziņojumam nav saistītu ierakstu, kurus izdzēst add_to_report: Pievienot varāk paziņošanai are_you_sure: Vai esi pārliecināts? assign_to_self: Piešķirt man @@ -1120,7 +1125,7 @@ lv: confirm: Turpināt hint_html: "Padoms: Nākamās stundas laikā mēs tev vairs neprasīsim paroli." invalid_password: Nepareiza parole - prompt: Lai turpinātu, apstiprini paroli + prompt: Lai turpinātu, jāapstiprina parole crypto: errors: invalid_key: nav derīga Ed25519 vai Curve25519 atslēga diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 489fb2b89b0f58..f155490eb5f2c2 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -24,6 +24,7 @@ pt-PT: admin: account_actions: action: Executar acção + already_silenced: Esta conta já foi limitada. already_suspended: Esta conta já foi suspensa. title: Executar ação de moderação em %{acct} account_moderation_notes: @@ -272,6 +273,7 @@ pt-PT: reject_user_html: "%{name} rejeitou a inscrição de %{target}" remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}" reopen_report_html: "%{name} reabriu a denúncia %{target}" + resend_user_html: "%{name} reenviou e-mail de confirmação para %{target}" reset_password_user_html: "%{name} restabeleceu a palavra-passe do utilizador %{target}" resolve_report_html: "%{name} resolveu a denúncia %{target}" sensitive_account_html: "%{name} marcou a media de %{target} como sensível" @@ -432,6 +434,7 @@ pt-PT: attempts_over_week: one: "%{count} tentativa na última semana" other: "%{count} tentativas de inscrição na última semana" + created_msg: Domínio de e-mail bloqueado com sucesso delete: Eliminar dns: types: @@ -440,8 +443,12 @@ pt-PT: new: create: Adicionar domínio resolve: Domínio de resolução + title: Bloquear novo domínio de e-mail + no_email_domain_block_selected: Não foram alterados quaisquer bloqueios de domínios de e-mail, uma vez que nenhum foi selecionado not_permitted: Não permitido + resolved_dns_records_hint_html: O nome de domínio resolve para os seguintes domínios MX, que são, em última análise, responsáveis por aceitar o e-mail. Bloquear um domínio MX irá bloquear as inscrições de qualquer endereço de e-mail que use o mesmo domínio MX, mesmo quando o nome de domínio visível é diferente. Cuidado para não bloquear os principais provedores de e-mail. resolved_through_html: Resolvido através de %{domain} + title: Domínios de e-mail bloqueados export_domain_allows: new: title: Importar permissões de domínio @@ -595,7 +602,9 @@ pt-PT: resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, não será registada nenhuma reprimenda, e a denúncia será fechada. silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando fortemente o seu alcance. Pode sempre ser revertido. Encerrar todas as denúncias contra esta conta. suspend_description_html: A conta e todo o seu conteúdo ficará inacessível e, eventualmente apagado, pelo que interagir com ela será impossível. Reversível durante 30 dias. Encerra todas as denúncias contra esta conta. + actions_description_html: Decida a ação a tomar para resolver esta denúncia. Se decidir por uma ação punitiva contra a conta denunciada, um e-mail de notificação será enviado, excetuando quando selecionada a categoria Spam. actions_description_remote_html: Decida quais as medidas a tomar para resolver esta denúncia. Isso apenas afetará como o seu servido comunica com esta conta remota e gere o seu conteúdo. + actions_no_posts: Este relatório não tem nenhuma publicação associada para eliminar add_to_report: Adicionar mais à denúncia already_suspended_badges: local: Já suspenso neste servidor @@ -659,6 +668,7 @@ pt-PT: delete_data_html: Eliminar o perfil de @%{acct} e conteúdos daqui a 30 dias, a menos que entretanto sejam suspensos preview_preamble_html: "@%{acct} receberá um aviso com o seguinte conteúdo:" record_strike_html: Registar um ataque contra @%{acct} para ajudar a escalar futuras violações desta conta + send_email_html: Enviar um e-mail de aviso a @%{acct} warning_placeholder: Argumentos adicionais opcionais para a acção de moderação. target_origin: Origem da conta denunciada title: Denúncias @@ -698,6 +708,7 @@ pt-PT: manage_appeals: Gerir apelos manage_appeals_description: Permite aos utilizadores rever recursos de moderação manage_blocks: Gerir bloqueios + manage_blocks_description: Permite aos utilizadores bloquear fornecedores de e-mail e endereços IP manage_custom_emojis: Gerir emojis personalizados manage_custom_emojis_description: Permite aos utilizadores gerirem os emojis personalizados do servidor manage_federation: Gerir federação @@ -715,6 +726,7 @@ pt-PT: manage_taxonomies: Gerir taxonomias manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag manage_user_access: Gerir acesso de utilizador + manage_user_access_description: Permite aos utilizadores desativar a autenticação de dois factores de outros utilizadores, alterar o seu e-mail e reiniciar a sua palavra-passe manage_users: Gerir utilizadores manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles manage_webhooks: Gerir webhooks @@ -789,6 +801,7 @@ pt-PT: destroyed_msg: Envio do site eliminado com sucesso! software_updates: critical_update: Crítico — por favor, atualize rapidamente + description: Recomenda-se que mantenha a sua instalação do Mastodon atualizada para beneficiar das últimas correções e funcionalidades. Além disso, é por vezes crítico atualizar o Mastodon de forma atempada para evitar problemas de segurança. Por estas razões, o Mastodon verifica se há actualizações a cada 30 minutos e notifica-o de acordo com as suas preferências de notificação por e-mail. documentation_link: Saber mais release_notes: Notas de lançamento title: Atualizações disponíveis @@ -888,6 +901,7 @@ pt-PT: name: Nome newest: Mais recente oldest: Mais antiga + open: Visualizar Publicamente reset: Repor review: Estado da revisão search: Pesquisar @@ -897,10 +911,16 @@ pt-PT: trends: allow: Permitir approved: Aprovado + confirm_allow: Tem a certeza que pretende permitir as etiquetas selecionadas? + confirm_disallow: Tem a certeza que pretende rejeitar as etiquetas selecionadas? disallow: Não permitir links: allow: Permitir hiperligação allow_provider: Permitir editor + confirm_allow: Tem a certeza que pretende permitir as hiperligações selecionadas? + confirm_allow_provider: Tem a certeza que pretende permitir os fornecedores selecionados? + confirm_disallow: Tem a certeza que pretende rejeitar as hiperligações selecionadas? + confirm_disallow_provider: Tem a certeza que pretende rejeitar os fornecedores selecionados? description_html: Estas são as ligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma ligação é exibida publicamente até que o editor a aprove. Também pode permitir ou rejeitar ligações em avulso. disallow: Não permitir ligação disallow_provider: Não permitir editor @@ -924,6 +944,10 @@ pt-PT: statuses: allow: Permitir publicação allow_account: Permitir autor + confirm_allow: Tem a certeza que pretende aceitar os estados selecionados? + confirm_allow_account: Tem a certeza que pretende aceitar as contas selecionadas? + confirm_disallow: Tem a certeza que pretende rejeitar os estados selecionados? + confirm_disallow_account: Tem a certeza que pretende rejeitar as contas selecionadas? description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente. disallow: Não permitir publicação disallow_account: Não permitir autor @@ -1041,7 +1065,9 @@ pt-PT: guide_link_text: Todos podem contribuir. sensitive_content: Conteúdo problemático application_mailer: + notification_preferences: Alterar preferências de e-mail salutation: "%{name}," + settings: 'Alterar preferências de e-mail: %{link}' unsubscribe: Cancelar subscrição view: 'Ver:' view_profile: Ver perfil @@ -1061,6 +1087,7 @@ pt-PT: hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isto para que possamos evitar spam!). Resolva o CAPTCHA abaixo e clique em "Continuar". title: Verificação de segurança confirmations: + awaiting_review: O seu endereço de e-mail está confirmado! A equipa de %{domain} está agora a analisar a sua inscrição. Receberá um e-mail se a sua conta for aprovada! awaiting_review_title: A sua inscrição está a ser revista clicking_this_link: clicar nesta hiperligação login_link: iniciar sessão @@ -1068,6 +1095,7 @@ pt-PT: redirect_to_app_html: Devia ter sido reencaminhado para a aplicação %{app_name}. Se isso não aconteceu, tente %{clicking_this_link} ou volte manualmente para a aplicação. registration_complete: O seu registo sem %{domain} está agora concluído! welcome_title: Bem-vindo(a), %{name}! + wrong_email_hint: Se este endereço de correio eletrónico não estiver correto, pode alterá-lo nas definições de conta. delete_account: Eliminar conta delete_account_html: Se deseja eliminar a sua conta, pode continuar aqui. Uma confirmação será solicitada. description: @@ -1088,6 +1116,7 @@ pt-PT: or_log_in_with: Ou iniciar sessão com privacy_policy_agreement_html: Eu li e concordo com a política de privacidade progress: + confirm: Confirmar e-mail details: Os seus dados review: A nossa avaliação rules: Aceitar regras @@ -1109,8 +1138,10 @@ pt-PT: security: Alterar palavra-passe set_new_password: Editar palavra-passe setup: + email_below_hint_html: Verifique a sua pasta de spam ou solicite outra. Pode corrigir o seu endereço de e-mail se estiver errado. email_settings_hint_html: Clique no link que enviamos para verificar %{email}. Esperaremos aqui. link_not_received: Não recebeu um link? + new_confirmation_instructions_sent: Irá receber uma nova mensagem de e-mail com a ligação de confirmação dentro de alguns minutos! title: Verifique a caixa de entrada do seu e-mail sign_in: preamble_html: Iniciar sessão com as suas credenciais de %{domain}. Se a sua conta estiver hospedada noutro servidor, não poderá iniciar sessão aqui. @@ -1121,12 +1152,20 @@ pt-PT: title: Vamos lá inscrevê-lo em %{domain}. status: account_status: Estado da conta + confirming: A aguardar a confirmação do e-mail para ser concluída. functional: A sua conta está totalmente operacional. + pending: A sua inscrição está a ser analisada pela nossa equipa. Este processo pode demorar algum tempo. Receberá um e-mail se a sua inscrição for aprovada. redirecting_to: A sua conta está inativa porque está atualmente a ser redirecionada para %{acct}. self_destruct: Como %{domain} vai fechar, só terá acesso limitado à sua conta. view_strikes: Veja as reprimendas anteriores sobre a sua conta too_fast: Formulário enviado demasiado rapidamente, tente novamente. use_security_key: Usar chave de segurança + author_attribution: + example_title: Texto de exemplo + hint_html: Controle a forma como é creditado quando as hiperligações são partilhadas no Mastodon. + more_from_html: Mais de %{name} + s_blog: Blog de %{name} + title: Atribuição de autor challenge: confirm: Continuar hint_html: "Dica: Não vamos pedir novamente a sua palavra-passe durante a próxima hora." @@ -1164,6 +1203,9 @@ pt-PT: before: 'Antes de continuar, por favor leia cuidadosamente estas notas:' caches: O conteúdo que foi armazenado em cache por outras instâncias pode perdurar data_removal: As suas publicações e outros dados serão eliminados permanentemente + email_change_html: Pode alterar o seu e-mail sem eliminar a sua conta + email_contact_html: Se ainda assim não o recebeu, pode enviar um e-mail para %{email} para obter ajuda + email_reconfirmation_html: Se não recebeu a mensagem de e-mail de confirmação, pode solicitá-la novamente irreversible: Não será possível restaurar ou reativar sua conta more_details_html: Para mais pormenores, leia a política de privacidade. username_available: O seu nome de utilizador ficará novamente disponível @@ -1394,6 +1436,7 @@ pt-PT: authentication_methods: otp: aplicação de autenticação em duas etapas password: palavra-passe + sign_in_token: código de segurança de e-mail webauthn: chaves de segurança description_html: Se vê atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação em duas etapas. empty: Sem histórico de autenticação disponível diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 4a9245682d4f05..8d045cfcfe34df 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -3,6 +3,7 @@ et: simple_form: hints: account: + attribution_domains_as_text: Kaitseb valede omistuste eest. discoverable: Su profiili ja avalikke postitusi võidakse Mastodoni erinevates piirkondades esile tõsta või soovitada ning su profiili soovitada teistele kasutajatele. display_name: Su täisnimi või naljanimi. fields: Su koduleht, sugu, vanus. Mistahes, mida soovid. @@ -143,6 +144,7 @@ et: url: Kuhu sündmused saadetakse labels: account: + attribution_domains_as_text: Luba vaid kindlad veebilehed discoverable: Tõsta postitused ja profiil avastamise algoritmides esile fields: name: Nimetus diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index 794c3f4533178c..90a268f411bd0c 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -78,9 +78,11 @@ fr-CA: warn: Cacher le contenu filtré derrière un avertissement mentionnant le nom du filtre form_admin_settings: activity_api_enabled: Nombre de messages publiés localement, de comptes actifs et de nouvelles inscriptions par tranche hebdomadaire + app_icon: WEBP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. backups_retention_period: Les utilisateur·rice·s ont la possibilité de générer des archives de leurs messages pour les télécharger plus tard. Lorsqu'elles sont définies à une valeur positive, ces archives seront automatiquement supprimées de votre stockage après le nombre de jours spécifié. bootstrap_timeline_accounts: Ces comptes seront épinglés en tête de liste des recommandations pour les nouveaux utilisateurs. closed_registrations_message: Affiché lorsque les inscriptions sont fermées + content_cache_retention_period: Tous les messages provenant d'autres serveurs (y compris les partages et les réponses) seront supprimés passé le nombre de jours spécifié, sans tenir compte de l'interaction de l'utilisateur·rice local·e avec ces messages. Cela inclut les messages qu'un·e utilisateur·rice aurait marqué comme signets ou comme favoris. Les mentions privées entre utilisateur·rice·s de différentes instances seront également perdues et impossibles à restaurer. L'utilisation de ce paramètre est destinée à des instances spécifiques et contrevient à de nombreuses attentes des utilisateurs lorsqu'elle est appliquée à des fins d'utilisation ordinaires. custom_css: Vous pouvez appliquer des styles personnalisés sur la version Web de Mastodon. favicon: WEBP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. mascot: Remplace l'illustration dans l'interface Web avancée. diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index e29d9f0a944d09..370f5c1e46e058 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -78,9 +78,11 @@ fr: warn: Cacher le contenu filtré derrière un avertissement mentionnant le nom du filtre form_admin_settings: activity_api_enabled: Nombre de messages publiés localement, de comptes actifs et de nouvelles inscriptions par tranche hebdomadaire + app_icon: WEBP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. backups_retention_period: Les utilisateur·rice·s ont la possibilité de générer des archives de leurs messages pour les télécharger plus tard. Lorsqu'elles sont définies à une valeur positive, ces archives seront automatiquement supprimées de votre stockage après le nombre de jours spécifié. bootstrap_timeline_accounts: Ces comptes seront épinglés en tête de liste des recommandations pour les nouveaux utilisateurs. closed_registrations_message: Affiché lorsque les inscriptions sont fermées + content_cache_retention_period: Tous les messages provenant d'autres serveurs (y compris les partages et les réponses) seront supprimés passé le nombre de jours spécifié, sans tenir compte de l'interaction de l'utilisateur·rice local·e avec ces messages. Cela inclut les messages qu'un·e utilisateur·rice aurait marqué comme signets ou comme favoris. Les mentions privées entre utilisateur·rice·s de différentes instances seront également perdues et impossibles à restaurer. L'utilisation de ce paramètre est destinée à des instances spécifiques et contrevient à de nombreuses attentes des utilisateurs lorsqu'elle est appliquée à des fins d'utilisation ordinaires. custom_css: Vous pouvez appliquer des styles personnalisés sur la version Web de Mastodon. favicon: WEBP, PNG, GIF ou JPG. Remplace la favicon Mastodon par défaut avec une icône personnalisée. mascot: Remplace l'illustration dans l'interface Web avancée. diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 7c125b165a0cd4..772f996ca6c92c 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,6 +3,7 @@ ga: simple_form: hints: account: + attribution_domains_as_text: Cosnaíonn sé ó sannadh bréagach. discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile. display_name: D'ainm iomlán nó d'ainm spraoi. fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat. @@ -143,6 +144,7 @@ ga: url: An áit a seolfar imeachtaí chuig labels: account: + attribution_domains_as_text: Ná ceadaigh ach láithreáin ghréasáin ar leith discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana fields: name: Lipéad diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 9b6c156de79c94..de585c7a218ac5 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -3,6 +3,7 @@ gd: simple_form: hints: account: + attribution_domains_as_text: Dìonadh seo o bhuaidh-aithrisean cearra. discoverable: Dh’fhaoidte gun dèid na postaichean poblach ’s a’ phròifil agad a bhrosnachadh no a mholadh ann an caochladh roinnean de Mhastodon agus gun dèid a’ phròifil agad a mholadh do chàch. display_name: D’ ainm slàn no spòrsail. fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu. @@ -143,6 +144,7 @@ gd: url: Far an dèid na tachartasan a chur labels: account: + attribution_domains_as_text: Na ceadaich ach làraichean-lìnn sònraichte discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh fields: name: Leubail diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 41f55f183d4540..5d3a02993bb319 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -90,6 +90,8 @@ lt: timeline_preview: Atsijungę lankytojai galės naršyti naujausius viešus įrašus, esančius serveryje. trends: Trendai rodo, kurios įrašai, saitažodžiai ir naujienų istorijos tavo serveryje sulaukia didžiausio susidomėjimo. trends_as_landing_page: Rodyti tendencingą turinį atsijungusiems naudotojams ir lankytojams vietoj šio serverio aprašymo. Reikia, kad tendencijos būtų įjungtos. + imports: + data: CSV failas, eksportuotas iš kito „Mastodon“ serverio. invite_request: text: Tai padės mums peržiūrėti tavo paraišką rule: diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index d96f57058b6704..4369c3c42bb52e 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -3,6 +3,7 @@ lv: simple_form: hints: account: + attribution_domains_as_text: Aizsargā no nepatiesas piedēvēšanas. discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. @@ -128,6 +129,7 @@ lv: name: Tu vari mainīt tikai burtu lielumu, piemēram, lai tie būtu vieglāk lasāmi user: chosen_languages: Ja ieķeksēts, publiskos laika grafikos tiks parādītas tikai ziņas noteiktajās valodās + role: Loma nosaka, kādas lietotājam ir atļaujas. user_role: color: Krāsa, kas jāizmanto lomai visā lietotāja saskarnē, kā RGB hex formātā highlighted: Tas padara lomu publiski redzamu @@ -140,6 +142,7 @@ lv: url: Kur notikumi tiks nosūtīti labels: account: + attribution_domains_as_text: Ļaut tikai noteiktas tīmekļvietnes discoverable: Funkcijas profils un ziņas atklāšanas algoritmos fields: name: Marķējums @@ -208,6 +211,7 @@ lv: setting_default_privacy: Publicēšanas privātums setting_default_sensitive: Atļaut atzīmēt multividi kā sensitīvu setting_delete_modal: Parādīt apstiprinājuma dialogu pirms ziņas dzēšanas + setting_disable_hover_cards: Atspējot profila priekšskatījumu pēc kursora novietošanas setting_disable_swiping: Atspējot vilkšanas kustības setting_display_media: Multivides rādīšana setting_display_media_default: Noklusējums @@ -239,11 +243,13 @@ lv: warn: Paslēpt ar brīdinājumu form_admin_settings: activity_api_enabled: Publicējiet apkopotu statistiku par lietotāju darbībām API + app_icon: Lietotnes ikona backups_retention_period: Lietotāja arhīva glabāšanas periods bootstrap_timeline_accounts: Vienmēr iesaki šos kontus jaunajiem lietotājiem closed_registrations_message: Pielāgots ziņojums, ja reģistrēšanās nav pieejama content_cache_retention_period: Attālā satura paturēšanas laika posms custom_css: Pielāgots CSS + favicon: Favikona mascot: Pielāgots talismans (mantots) media_cache_retention_period: Multivides kešatmiņas saglabāšanas periods peers_api_enabled: Publicēt API atklāto serveru sarakstu @@ -308,6 +314,7 @@ lv: listable: Atļaut šim tēmturim parādīties meklējumos un ieteikumos name: Tēmturis trendable: Atļaut šim tēmturim parādīties zem tendencēm + usable: Ļaut ierakstos vietēji izmantot šo tēmturi user: role: Loma time_zone: Laika josla diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 8bd782c1405d32..1ecd672a97a14c 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -3,6 +3,7 @@ th: simple_form: hints: account: + attribution_domains_as_text: ปกป้องจากการระบุแหล่งที่มาที่ผิด discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ @@ -143,6 +144,7 @@ th: url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: + attribution_domains_as_text: อนุญาตเฉพาะเว็บไซต์ที่เฉพาะเจาะจงเท่านั้น discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ fields: name: ป้ายชื่อ diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 4e7c8b0a97e203..eab025c6655466 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -3,6 +3,7 @@ vi: simple_form: hints: account: + attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai. discoverable: Các tút và hồ sơ công khai của bạn có thể được giới thiệu hoặc đề xuất ở nhiều khu vực khác nhau của Mastodon và hồ sơ của bạn có thể được đề xuất cho những người dùng khác. display_name: Tên đầy đủ hoặc biệt danh đều được. fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. @@ -143,6 +144,7 @@ vi: url: Nơi những sự kiện được gửi đến labels: account: + attribution_domains_as_text: Chỉ cho phép các website đặc biệt discoverable: Cho phép khám phá hồ sơ fields: name: Nhãn diff --git a/config/locales/th.yml b/config/locales/th.yml index cbacdfac48d42b..65424f4eb6c66c 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -22,6 +22,7 @@ th: admin: account_actions: action: ทำการกระทำ + already_silenced: มีการจำกัดบัญชีนี้ไปแล้ว already_suspended: มีการระงับบัญชีนี้ไปแล้ว title: ทำการกระทำการกลั่นกรองต่อ %{acct} account_moderation_notes: @@ -1141,6 +1142,12 @@ th: view_strikes: ดูการดำเนินการที่ผ่านมาต่อบัญชีของคุณ too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง use_security_key: ใช้กุญแจความปลอดภัย + author_attribution: + example_title: ข้อความตัวอย่าง + hint_html: ควบคุมวิธีที่ให้เครดิตแก่คุณเมื่อมีการแบ่งปันลิงก์ใน Mastodon + more_from_html: เพิ่มเติมจาก %{name} + s_blog: บล็อกของ %{name} + title: การระบุแหล่งที่มาผู้สร้าง challenge: confirm: ดำเนินการต่อ hint_html: "เคล็ดลับ: เราจะไม่ถามรหัสผ่านของคุณกับคุณสำหรับชั่วโมงถัดไป" @@ -1905,6 +1912,7 @@ th: instructions_html: คัดลอกแล้ววางโค้ดด้านล่างลงใน HTML ของเว็บไซต์ของคุณ จากนั้นเพิ่มที่อยู่ของเว็บไซต์ของคุณลงในหนึ่งในช่องพิเศษในโปรไฟล์ของคุณจากแท็บ "แก้ไขโปรไฟล์" และบันทึกการเปลี่ยนแปลง verification: การตรวจสอบ verified_links: ลิงก์ที่ยืนยันแล้วของคุณ + website_verification: การตรวจสอบเว็บไซต์ webauthn_credentials: add: เพิ่มกุญแจความปลอดภัยใหม่ create: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index a03b46c9116ea5..8f047a2cb7b2c4 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -22,6 +22,7 @@ vi: admin: account_actions: action: Thực hiện hành động + already_silenced: Tài khoản này đã bị hạn chế. already_suspended: Tài khoản này đã bị vô hiệu hóa. title: Áp đặt kiểm duyệt với %{acct} account_moderation_notes: @@ -1141,6 +1142,12 @@ vi: view_strikes: Xem những lần cảnh cáo cũ too_fast: Nghi vấn đăng ký spam, xin thử lại. use_security_key: Dùng khóa bảo mật + author_attribution: + example_title: Văn bản mẫu + hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon. + more_from_html: Thêm từ %{name} + s_blog: "%{name}'s Blog" + title: Ghi nhận tác giả challenge: confirm: Tiếp tục hint_html: "Mẹo: Chúng tôi sẽ không hỏi lại mật khẩu của bạn sau này." @@ -1905,6 +1912,7 @@ vi: instructions_html: Sao chép và dán mã bên dưới vào mã nguồn trang web của bạn. Sau đó, thêm địa chỉ trang web của bạn vào một trong các trường metadata trên hồ sơ của bạn từ tab "Sửa hồ sơ" và lưu thay đổi. verification: Xác minh verified_links: Những liên kết bạn đã xác minh + website_verification: Xác minh website webauthn_credentials: add: Thêm khóa bảo mật mới create: From c54cbf7943693f2aa63cf9cb32941a674a7ba63b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 16 Sep 2024 04:56:40 -0400 Subject: [PATCH 018/467] Remove `follow` creation from `ListAccount` fabricator (#31902) --- spec/fabricators/list_account_fabricator.rb | 6 ++++-- spec/models/list_account_spec.rb | 8 +++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/spec/fabricators/list_account_fabricator.rb b/spec/fabricators/list_account_fabricator.rb index 00dde83cdf00c2..fe5a4712097942 100644 --- a/spec/fabricators/list_account_fabricator.rb +++ b/spec/fabricators/list_account_fabricator.rb @@ -2,6 +2,8 @@ Fabricator(:list_account) do list - account - before_create { |list_account, _| list_account.list.account.follow!(account) } + + initialize_with do + resolved_class.new(list: list, account: list.account) + end end diff --git a/spec/models/list_account_spec.rb b/spec/models/list_account_spec.rb index e5aad2affa9dce..b2ec17a563fef5 100644 --- a/spec/models/list_account_spec.rb +++ b/spec/models/list_account_spec.rb @@ -9,7 +9,7 @@ let(:list) { Fabricate :list, account: follow.account } it 'finds and sets the follow with the list account' do - list_account = described_class.create list: list, account: follow.target_account + list_account = Fabricate :list_account, list: list, account: follow.target_account expect(list_account) .to have_attributes( follow: eq(follow), @@ -23,7 +23,7 @@ let(:list) { Fabricate :list, account: follow_request.account } it 'finds and sets the follow request with the list account' do - list_account = described_class.create list: list, account: follow_request.target_account + list_account = Fabricate :list_account, list: list, account: follow_request.target_account expect(list_account) .to have_attributes( follow: be_nil, @@ -33,10 +33,8 @@ end context 'when list owner is the account' do - let(:list) { Fabricate :list } - it 'does not set follow or follow request' do - list_account = described_class.create list: list, account: list.account + list_account = Fabricate :list_account expect(list_account) .to have_attributes( follow: be_nil, From d5cf27e667e86b023f60780a4e9cdd5d3d1babfd Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 11:40:18 +0200 Subject: [PATCH 019/467] Add global Regexp timeout (#31928) --- config/initializers/regexp.rb | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 config/initializers/regexp.rb diff --git a/config/initializers/regexp.rb b/config/initializers/regexp.rb new file mode 100644 index 00000000000000..a820d2b5d3d473 --- /dev/null +++ b/config/initializers/regexp.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +# 0.5s is a fairly high timeout, but that should account for slow servers under load +Regexp.timeout = 0.5 if Regexp.respond_to?(:timeout=) From c0eda832f3cc0f4009a59836cd4494e9daeb844c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 11:54:03 +0200 Subject: [PATCH 020/467] Convert notification requests actions and reducers to Typescript (#31866) --- .../mastodon/actions/notification_groups.ts | 8 +- .../mastodon/actions/notification_requests.ts | 234 +++++++++++++ .../mastodon/actions/notifications.js | 328 ------------------ app/javascript/mastodon/api/notifications.ts | 75 +++- .../mastodon/api_types/notifications.ts | 9 + .../components/notification_request.jsx | 6 +- .../features/notifications/request.jsx | 32 +- .../features/notifications/requests.jsx | 33 +- .../mastodon/models/notification_request.ts | 19 + .../reducers/notification_requests.js | 114 ------ .../reducers/notification_requests.ts | 182 ++++++++++ .../mastodon/store/typed_functions.ts | 37 +- 12 files changed, 585 insertions(+), 492 deletions(-) create mode 100644 app/javascript/mastodon/actions/notification_requests.ts create mode 100644 app/javascript/mastodon/models/notification_request.ts delete mode 100644 app/javascript/mastodon/reducers/notification_requests.js create mode 100644 app/javascript/mastodon/reducers/notification_requests.ts diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index 2ee46500ab8035..9d3fc0d4254dcf 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -2,7 +2,7 @@ import { createAction } from '@reduxjs/toolkit'; import { apiClearNotifications, - apiFetchNotifications, + apiFetchNotificationGroups, } from 'mastodon/api/notifications'; import type { ApiAccountJSON } from 'mastodon/api_types/accounts'; import type { @@ -71,7 +71,7 @@ function dispatchAssociatedRecords( export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => - apiFetchNotifications({ exclude_types: getExcludedTypes(getState()) }), + apiFetchNotificationGroups({ exclude_types: getExcludedTypes(getState()) }), ({ notifications, accounts, statuses }, { dispatch }) => { dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedStatuses(statuses)); @@ -92,7 +92,7 @@ export const fetchNotifications = createDataLoadingThunk( export const fetchNotificationsGap = createDataLoadingThunk( 'notificationGroups/fetchGap', async (params: { gap: NotificationGap }, { getState }) => - apiFetchNotifications({ + apiFetchNotificationGroups({ max_id: params.gap.maxId, exclude_types: getExcludedTypes(getState()), }), @@ -108,7 +108,7 @@ export const fetchNotificationsGap = createDataLoadingThunk( export const pollRecentNotifications = createDataLoadingThunk( 'notificationGroups/pollRecentNotifications', async (_params, { getState }) => { - return apiFetchNotifications({ + return apiFetchNotificationGroups({ max_id: undefined, exclude_types: getExcludedTypes(getState()), // In slow mode, we don't want to include notifications that duplicate the already-displayed ones diff --git a/app/javascript/mastodon/actions/notification_requests.ts b/app/javascript/mastodon/actions/notification_requests.ts new file mode 100644 index 00000000000000..ef9cbef03ee4bb --- /dev/null +++ b/app/javascript/mastodon/actions/notification_requests.ts @@ -0,0 +1,234 @@ +import { + apiFetchNotificationRequest, + apiFetchNotificationRequests, + apiFetchNotifications, + apiAcceptNotificationRequest, + apiDismissNotificationRequest, + apiAcceptNotificationRequests, + apiDismissNotificationRequests, +} from 'mastodon/api/notifications'; +import type { ApiAccountJSON } from 'mastodon/api_types/accounts'; +import type { + ApiNotificationGroupJSON, + ApiNotificationJSON, +} from 'mastodon/api_types/notifications'; +import type { ApiStatusJSON } from 'mastodon/api_types/statuses'; +import type { AppDispatch, RootState } from 'mastodon/store'; +import { createDataLoadingThunk } from 'mastodon/store/typed_functions'; + +import { importFetchedAccounts, importFetchedStatuses } from './importer'; +import { decreasePendingNotificationsCount } from './notification_policies'; + +// TODO: refactor with notification_groups +function dispatchAssociatedRecords( + dispatch: AppDispatch, + notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[], +) { + const fetchedAccounts: ApiAccountJSON[] = []; + const fetchedStatuses: ApiStatusJSON[] = []; + + notifications.forEach((notification) => { + if (notification.type === 'admin.report') { + fetchedAccounts.push(notification.report.target_account); + } + + if (notification.type === 'moderation_warning') { + fetchedAccounts.push(notification.moderation_warning.target_account); + } + + if ('status' in notification && notification.status) { + fetchedStatuses.push(notification.status); + } + }); + + if (fetchedAccounts.length > 0) + dispatch(importFetchedAccounts(fetchedAccounts)); + + if (fetchedStatuses.length > 0) + dispatch(importFetchedStatuses(fetchedStatuses)); +} + +export const fetchNotificationRequests = createDataLoadingThunk( + 'notificationRequests/fetch', + async (_params, { getState }) => { + let sinceId = undefined; + + if (getState().notificationRequests.items.length > 0) { + sinceId = getState().notificationRequests.items[0]?.id; + } + + return apiFetchNotificationRequests({ + since_id: sinceId, + }); + }, + ({ requests, links }, { dispatch }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + dispatch(importFetchedAccounts(requests.map((request) => request.account))); + + return { requests, next: next?.uri }; + }, + { + condition: (_params, { getState }) => + !getState().notificationRequests.isLoading, + }, +); + +export const fetchNotificationRequest = createDataLoadingThunk( + 'notificationRequest/fetch', + async ({ id }: { id: string }) => apiFetchNotificationRequest(id), + { + condition: ({ id }, { getState }) => + !( + getState().notificationRequests.current.item?.id === id || + getState().notificationRequests.current.isLoading + ), + }, +); + +export const expandNotificationRequests = createDataLoadingThunk( + 'notificationRequests/expand', + async (_, { getState }) => { + const nextUrl = getState().notificationRequests.next; + if (!nextUrl) throw new Error('missing URL'); + + return apiFetchNotificationRequests(undefined, nextUrl); + }, + ({ requests, links }, { dispatch }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + dispatch(importFetchedAccounts(requests.map((request) => request.account))); + + return { requests, next: next?.uri }; + }, + { + condition: (_, { getState }) => + !!getState().notificationRequests.next && + !getState().notificationRequests.isLoading, + }, +); + +export const fetchNotificationsForRequest = createDataLoadingThunk( + 'notificationRequest/fetchNotifications', + async ({ accountId }: { accountId: string }, { getState }) => { + const sinceId = + // @ts-expect-error current.notifications.items is not yet typed + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + getState().notificationRequests.current.notifications.items[0]?.get( + 'id', + ) as string | undefined; + + return apiFetchNotifications({ + since_id: sinceId, + account_id: accountId, + }); + }, + ({ notifications, links }, { dispatch }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + dispatchAssociatedRecords(dispatch, notifications); + + return { notifications, next: next?.uri }; + }, + { + condition: ({ accountId }, { getState }) => { + const current = getState().notificationRequests.current; + return !( + current.item?.account_id === accountId && + current.notifications.isLoading + ); + }, + }, +); + +export const expandNotificationsForRequest = createDataLoadingThunk( + 'notificationRequest/expandNotifications', + async (_, { getState }) => { + const nextUrl = getState().notificationRequests.current.notifications.next; + if (!nextUrl) throw new Error('missing URL'); + + return apiFetchNotifications(undefined, nextUrl); + }, + ({ notifications, links }, { dispatch }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + dispatchAssociatedRecords(dispatch, notifications); + + return { notifications, next: next?.uri }; + }, + { + condition: ({ accountId }: { accountId: string }, { getState }) => { + const url = getState().notificationRequests.current.notifications.next; + + return ( + !!url && + !getState().notificationRequests.current.notifications.isLoading && + getState().notificationRequests.current.item?.account_id === accountId + ); + }, + }, +); + +const selectNotificationCountForRequest = (state: RootState, id: string) => { + const requests = state.notificationRequests.items; + const thisRequest = requests.find((request) => request.id === id); + return thisRequest ? thisRequest.notifications_count : 0; +}; + +export const acceptNotificationRequest = createDataLoadingThunk( + 'notificationRequest/accept', + ({ id }: { id: string }) => apiAcceptNotificationRequest(id), + (_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { + const count = selectNotificationCountForRequest(getState(), id); + + dispatch(decreasePendingNotificationsCount(count)); + + // The payload is not used in any functions + return discardLoadData; + }, +); + +export const dismissNotificationRequest = createDataLoadingThunk( + 'notificationRequest/dismiss', + ({ id }: { id: string }) => apiDismissNotificationRequest(id), + (_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { + const count = selectNotificationCountForRequest(getState(), id); + + dispatch(decreasePendingNotificationsCount(count)); + + // The payload is not used in any functions + return discardLoadData; + }, +); + +export const acceptNotificationRequests = createDataLoadingThunk( + 'notificationRequests/acceptBulk', + ({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids), + (_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { + const count = ids.reduce( + (count, id) => count + selectNotificationCountForRequest(getState(), id), + 0, + ); + + dispatch(decreasePendingNotificationsCount(count)); + + // The payload is not used in any functions + return discardLoadData; + }, +); + +export const dismissNotificationRequests = createDataLoadingThunk( + 'notificationRequests/dismissBulk', + ({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids), + (_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { + const count = ids.reduce( + (count, id) => count + selectNotificationCountForRequest(getState(), id), + 0, + ); + + dispatch(decreasePendingNotificationsCount(count)); + + // The payload is not used in any functions + return discardLoadData; + }, +); diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index f5105d460f7642..14072562d4c0e9 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -18,7 +18,6 @@ import { importFetchedStatuses, } from './importer'; import { submitMarkers } from './markers'; -import { decreasePendingNotificationsCount } from './notification_policies'; import { notificationsUpdate } from "./notifications_typed"; import { register as registerPushNotifications } from './push_notifications'; import { saveSettings } from './settings'; @@ -44,26 +43,6 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; -export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST'; -export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS'; -export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL'; - -export const NOTIFICATION_REQUESTS_EXPAND_REQUEST = 'NOTIFICATION_REQUESTS_EXPAND_REQUEST'; -export const NOTIFICATION_REQUESTS_EXPAND_SUCCESS = 'NOTIFICATION_REQUESTS_EXPAND_SUCCESS'; -export const NOTIFICATION_REQUESTS_EXPAND_FAIL = 'NOTIFICATION_REQUESTS_EXPAND_FAIL'; - -export const NOTIFICATION_REQUEST_FETCH_REQUEST = 'NOTIFICATION_REQUEST_FETCH_REQUEST'; -export const NOTIFICATION_REQUEST_FETCH_SUCCESS = 'NOTIFICATION_REQUEST_FETCH_SUCCESS'; -export const NOTIFICATION_REQUEST_FETCH_FAIL = 'NOTIFICATION_REQUEST_FETCH_FAIL'; - -export const NOTIFICATION_REQUEST_ACCEPT_REQUEST = 'NOTIFICATION_REQUEST_ACCEPT_REQUEST'; -export const NOTIFICATION_REQUEST_ACCEPT_SUCCESS = 'NOTIFICATION_REQUEST_ACCEPT_SUCCESS'; -export const NOTIFICATION_REQUEST_ACCEPT_FAIL = 'NOTIFICATION_REQUEST_ACCEPT_FAIL'; - -export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMISS_REQUEST'; -export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS'; -export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL'; - export const NOTIFICATION_REQUESTS_ACCEPT_REQUEST = 'NOTIFICATION_REQUESTS_ACCEPT_REQUEST'; export const NOTIFICATION_REQUESTS_ACCEPT_SUCCESS = 'NOTIFICATION_REQUESTS_ACCEPT_SUCCESS'; export const NOTIFICATION_REQUESTS_ACCEPT_FAIL = 'NOTIFICATION_REQUESTS_ACCEPT_FAIL'; @@ -72,14 +51,6 @@ export const NOTIFICATION_REQUESTS_DISMISS_REQUEST = 'NOTIFICATION_REQUESTS_DISM export const NOTIFICATION_REQUESTS_DISMISS_SUCCESS = 'NOTIFICATION_REQUESTS_DISMISS_SUCCESS'; export const NOTIFICATION_REQUESTS_DISMISS_FAIL = 'NOTIFICATION_REQUESTS_DISMISS_FAIL'; -export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST'; -export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS'; -export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL'; - -export const NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST'; -export const NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS'; -export const NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL'; - defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -93,12 +64,6 @@ const fetchRelatedRelationships = (dispatch, notifications) => { } }; -const selectNotificationCountForRequest = (state, id) => { - const requests = state.getIn(['notificationRequests', 'items']); - const thisRequest = requests.find(request => request.get('id') === id); - return thisRequest ? thisRequest.get('notifications_count') : 0; -}; - export const loadPending = () => ({ type: NOTIFICATIONS_LOAD_PENDING, }); @@ -343,296 +308,3 @@ export function setBrowserPermission (value) { value, }; } - -export const fetchNotificationRequests = () => (dispatch, getState) => { - const params = {}; - - if (getState().getIn(['notificationRequests', 'isLoading'])) { - return; - } - - if (getState().getIn(['notificationRequests', 'items'])?.size > 0) { - params.since_id = getState().getIn(['notificationRequests', 'items', 0, 'id']); - } - - dispatch(fetchNotificationRequestsRequest()); - - api().get('/api/v1/notifications/requests', { params }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedAccounts(response.data.map(x => x.account))); - dispatch(fetchNotificationRequestsSuccess(response.data, next ? next.uri : null)); - }).catch(err => { - dispatch(fetchNotificationRequestsFail(err)); - }); -}; - -export const fetchNotificationRequestsRequest = () => ({ - type: NOTIFICATION_REQUESTS_FETCH_REQUEST, -}); - -export const fetchNotificationRequestsSuccess = (requests, next) => ({ - type: NOTIFICATION_REQUESTS_FETCH_SUCCESS, - requests, - next, -}); - -export const fetchNotificationRequestsFail = error => ({ - type: NOTIFICATION_REQUESTS_FETCH_FAIL, - error, -}); - -export const expandNotificationRequests = () => (dispatch, getState) => { - const url = getState().getIn(['notificationRequests', 'next']); - - if (!url || getState().getIn(['notificationRequests', 'isLoading'])) { - return; - } - - dispatch(expandNotificationRequestsRequest()); - - api().get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedAccounts(response.data.map(x => x.account))); - dispatch(expandNotificationRequestsSuccess(response.data, next?.uri)); - }).catch(err => { - dispatch(expandNotificationRequestsFail(err)); - }); -}; - -export const expandNotificationRequestsRequest = () => ({ - type: NOTIFICATION_REQUESTS_EXPAND_REQUEST, -}); - -export const expandNotificationRequestsSuccess = (requests, next) => ({ - type: NOTIFICATION_REQUESTS_EXPAND_SUCCESS, - requests, - next, -}); - -export const expandNotificationRequestsFail = error => ({ - type: NOTIFICATION_REQUESTS_EXPAND_FAIL, - error, -}); - -export const fetchNotificationRequest = id => (dispatch, getState) => { - const current = getState().getIn(['notificationRequests', 'current']); - - if (current.getIn(['item', 'id']) === id || current.get('isLoading')) { - return; - } - - dispatch(fetchNotificationRequestRequest(id)); - - api().get(`/api/v1/notifications/requests/${id}`).then(({ data }) => { - dispatch(fetchNotificationRequestSuccess(data)); - }).catch(err => { - dispatch(fetchNotificationRequestFail(id, err)); - }); -}; - -export const fetchNotificationRequestRequest = id => ({ - type: NOTIFICATION_REQUEST_FETCH_REQUEST, - id, -}); - -export const fetchNotificationRequestSuccess = request => ({ - type: NOTIFICATION_REQUEST_FETCH_SUCCESS, - request, -}); - -export const fetchNotificationRequestFail = (id, error) => ({ - type: NOTIFICATION_REQUEST_FETCH_FAIL, - id, - error, -}); - -export const acceptNotificationRequest = (id) => (dispatch, getState) => { - const count = selectNotificationCountForRequest(getState(), id); - dispatch(acceptNotificationRequestRequest(id)); - - api().post(`/api/v1/notifications/requests/${id}/accept`).then(() => { - dispatch(acceptNotificationRequestSuccess(id)); - dispatch(decreasePendingNotificationsCount(count)); - }).catch(err => { - dispatch(acceptNotificationRequestFail(id, err)); - }); -}; - -export const acceptNotificationRequestRequest = id => ({ - type: NOTIFICATION_REQUEST_ACCEPT_REQUEST, - id, -}); - -export const acceptNotificationRequestSuccess = id => ({ - type: NOTIFICATION_REQUEST_ACCEPT_SUCCESS, - id, -}); - -export const acceptNotificationRequestFail = (id, error) => ({ - type: NOTIFICATION_REQUEST_ACCEPT_FAIL, - id, - error, -}); - -export const dismissNotificationRequest = (id) => (dispatch, getState) => { - const count = selectNotificationCountForRequest(getState(), id); - dispatch(dismissNotificationRequestRequest(id)); - - api().post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{ - dispatch(dismissNotificationRequestSuccess(id)); - dispatch(decreasePendingNotificationsCount(count)); - }).catch(err => { - dispatch(dismissNotificationRequestFail(id, err)); - }); -}; - -export const dismissNotificationRequestRequest = id => ({ - type: NOTIFICATION_REQUEST_DISMISS_REQUEST, - id, -}); - -export const dismissNotificationRequestSuccess = id => ({ - type: NOTIFICATION_REQUEST_DISMISS_SUCCESS, - id, -}); - -export const dismissNotificationRequestFail = (id, error) => ({ - type: NOTIFICATION_REQUEST_DISMISS_FAIL, - id, - error, -}); - -export const acceptNotificationRequests = (ids) => (dispatch, getState) => { - const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0); - dispatch(acceptNotificationRequestsRequest(ids)); - - api().post(`/api/v1/notifications/requests/accept`, { id: ids }).then(() => { - dispatch(acceptNotificationRequestsSuccess(ids)); - dispatch(decreasePendingNotificationsCount(count)); - }).catch(err => { - dispatch(acceptNotificationRequestFail(ids, err)); - }); -}; - -export const acceptNotificationRequestsRequest = ids => ({ - type: NOTIFICATION_REQUESTS_ACCEPT_REQUEST, - ids, -}); - -export const acceptNotificationRequestsSuccess = ids => ({ - type: NOTIFICATION_REQUESTS_ACCEPT_SUCCESS, - ids, -}); - -export const acceptNotificationRequestsFail = (ids, error) => ({ - type: NOTIFICATION_REQUESTS_ACCEPT_FAIL, - ids, - error, -}); - -export const dismissNotificationRequests = (ids) => (dispatch, getState) => { - const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0); - dispatch(acceptNotificationRequestsRequest(ids)); - - api().post(`/api/v1/notifications/requests/dismiss`, { id: ids }).then(() => { - dispatch(dismissNotificationRequestsSuccess(ids)); - dispatch(decreasePendingNotificationsCount(count)); - }).catch(err => { - dispatch(dismissNotificationRequestFail(ids, err)); - }); -}; - -export const dismissNotificationRequestsRequest = ids => ({ - type: NOTIFICATION_REQUESTS_DISMISS_REQUEST, - ids, -}); - -export const dismissNotificationRequestsSuccess = ids => ({ - type: NOTIFICATION_REQUESTS_DISMISS_SUCCESS, - ids, -}); - -export const dismissNotificationRequestsFail = (ids, error) => ({ - type: NOTIFICATION_REQUESTS_DISMISS_FAIL, - ids, - error, -}); - -export const fetchNotificationsForRequest = accountId => (dispatch, getState) => { - const current = getState().getIn(['notificationRequests', 'current']); - const params = { account_id: accountId }; - - if (current.getIn(['item', 'account']) === accountId) { - if (current.getIn(['notifications', 'isLoading'])) { - return; - } - - if (current.getIn(['notifications', 'items'])?.size > 0) { - params.since_id = current.getIn(['notifications', 'items', 0, 'id']); - } - } - - dispatch(fetchNotificationsForRequestRequest()); - - api().get('/api/v1/notifications', { params }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedAccounts(response.data.map(item => item.account))); - dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); - dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); - - dispatch(fetchNotificationsForRequestSuccess(response.data, next?.uri)); - }).catch(err => { - dispatch(fetchNotificationsForRequestFail(err)); - }); -}; - -export const fetchNotificationsForRequestRequest = () => ({ - type: NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, -}); - -export const fetchNotificationsForRequestSuccess = (notifications, next) => ({ - type: NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, - notifications, - next, -}); - -export const fetchNotificationsForRequestFail = (error) => ({ - type: NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, - error, -}); - -export const expandNotificationsForRequest = () => (dispatch, getState) => { - const url = getState().getIn(['notificationRequests', 'current', 'notifications', 'next']); - - if (!url || getState().getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])) { - return; - } - - dispatch(expandNotificationsForRequestRequest()); - - api().get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(importFetchedAccounts(response.data.map(item => item.account))); - dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); - dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); - - dispatch(expandNotificationsForRequestSuccess(response.data, next?.uri)); - }).catch(err => { - dispatch(expandNotificationsForRequestFail(err)); - }); -}; - -export const expandNotificationsForRequestRequest = () => ({ - type: NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, -}); - -export const expandNotificationsForRequestSuccess = (notifications, next) => ({ - type: NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, - notifications, - next, -}); - -export const expandNotificationsForRequestFail = (error) => ({ - type: NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, - error, -}); diff --git a/app/javascript/mastodon/api/notifications.ts b/app/javascript/mastodon/api/notifications.ts index cb07e4114cf8b5..e34dc85bb0d4a4 100644 --- a/app/javascript/mastodon/api/notifications.ts +++ b/app/javascript/mastodon/api/notifications.ts @@ -1,7 +1,36 @@ -import api, { apiRequest, getLinks } from 'mastodon/api'; -import type { ApiNotificationGroupsResultJSON } from 'mastodon/api_types/notifications'; +import api, { + apiRequest, + getLinks, + apiRequestGet, + apiRequestPost, +} from 'mastodon/api'; +import type { + ApiNotificationGroupsResultJSON, + ApiNotificationRequestJSON, + ApiNotificationJSON, +} from 'mastodon/api_types/notifications'; -export const apiFetchNotifications = async (params?: { +export const apiFetchNotifications = async ( + params?: { + account_id?: string; + since_id?: string; + }, + url?: string, +) => { + const response = await api().request({ + method: 'GET', + url: url ?? '/api/v1/notifications', + params, + }); + + return { + notifications: response.data, + links: getLinks(response), + }; +}; + +export const apiFetchNotificationGroups = async (params?: { + url?: string; exclude_types?: string[]; max_id?: string; since_id?: string; @@ -24,3 +53,43 @@ export const apiFetchNotifications = async (params?: { export const apiClearNotifications = () => apiRequest('POST', 'v1/notifications/clear'); + +export const apiFetchNotificationRequests = async ( + params?: { + since_id?: string; + }, + url?: string, +) => { + const response = await api().request({ + method: 'GET', + url: url ?? '/api/v1/notifications/requests', + params, + }); + + return { + requests: response.data, + links: getLinks(response), + }; +}; + +export const apiFetchNotificationRequest = async (id: string) => { + return apiRequestGet( + `v1/notifications/requests/${id}`, + ); +}; + +export const apiAcceptNotificationRequest = async (id: string) => { + return apiRequestPost(`v1/notifications/requests/${id}/accept`); +}; + +export const apiDismissNotificationRequest = async (id: string) => { + return apiRequestPost(`v1/notifications/requests/${id}/dismiss`); +}; + +export const apiAcceptNotificationRequests = async (id: string[]) => { + return apiRequestPost('v1/notifications/requests/accept', { id }); +}; + +export const apiDismissNotificationRequests = async (id: string[]) => { + return apiRequestPost('v1/notifications/dismiss/dismiss', { id }); +}; diff --git a/app/javascript/mastodon/api_types/notifications.ts b/app/javascript/mastodon/api_types/notifications.ts index 4ab9a4c90a7388..28ba7eb5c20909 100644 --- a/app/javascript/mastodon/api_types/notifications.ts +++ b/app/javascript/mastodon/api_types/notifications.ts @@ -149,3 +149,12 @@ export interface ApiNotificationGroupsResultJSON { statuses: ApiStatusJSON[]; notification_groups: ApiNotificationGroupJSON[]; } + +export interface ApiNotificationRequestJSON { + id: string; + created_at: string; + updated_at: string; + notifications_count: string; + account: ApiAccountJSON; + last_status?: ApiStatusJSON; +} diff --git a/app/javascript/mastodon/features/notifications/components/notification_request.jsx b/app/javascript/mastodon/features/notifications/components/notification_request.jsx index 2f378942bc9aad..626929ae508ac7 100644 --- a/app/javascript/mastodon/features/notifications/components/notification_request.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification_request.jsx @@ -12,7 +12,7 @@ import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { initBlockModal } from 'mastodon/actions/blocks'; import { initMuteModal } from 'mastodon/actions/mutes'; -import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notification_requests'; import { initReport } from 'mastodon/actions/reports'; import { Avatar } from 'mastodon/components/avatar'; import { CheckBox } from 'mastodon/components/check_box'; @@ -40,11 +40,11 @@ export const NotificationRequest = ({ id, accountId, notificationsCount, checked const { push: historyPush } = useHistory(); const handleDismiss = useCallback(() => { - dispatch(dismissNotificationRequest(id)); + dispatch(dismissNotificationRequest({ id })); }, [dispatch, id]); const handleAccept = useCallback(() => { - dispatch(acceptNotificationRequest(id)); + dispatch(acceptNotificationRequest({ id })); }, [dispatch, id]); const handleMute = useCallback(() => { diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx index 30ec004e707bc2..a7e5180a4f71e2 100644 --- a/app/javascript/mastodon/features/notifications/request.jsx +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -10,7 +10,13 @@ import { useSelector, useDispatch } from 'react-redux'; import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; import DoneIcon from '@/material-icons/400-24px/done.svg?react'; import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react'; -import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import { + fetchNotificationRequest, + fetchNotificationsForRequest, + expandNotificationsForRequest, + acceptNotificationRequest, + dismissNotificationRequest, +} from 'mastodon/actions/notification_requests'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import { IconButton } from 'mastodon/components/icon_button'; @@ -44,28 +50,28 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => { const columnRef = useRef(); const intl = useIntl(); const dispatch = useDispatch(); - const notificationRequest = useSelector(state => state.getIn(['notificationRequests', 'current', 'item', 'id']) === id ? state.getIn(['notificationRequests', 'current', 'item']) : null); - const accountId = notificationRequest?.get('account'); + const notificationRequest = useSelector(state => state.notificationRequests.current.item?.id === id ? state.notificationRequests.current.item : null); + const accountId = notificationRequest?.account_id; const account = useSelector(state => state.getIn(['accounts', accountId])); - const notifications = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'items'])); - const isLoading = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])); - const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'current', 'notifications', 'next'])); - const removed = useSelector(state => state.getIn(['notificationRequests', 'current', 'removed'])); + const notifications = useSelector(state => state.notificationRequests.current.notifications.items); + const isLoading = useSelector(state => state.notificationRequests.current.notifications.isLoading); + const hasMore = useSelector(state => !!state.notificationRequests.current.notifications.next); + const removed = useSelector(state => state.notificationRequests.current.removed); const handleHeaderClick = useCallback(() => { columnRef.current?.scrollTop(); }, [columnRef]); const handleLoadMore = useCallback(() => { - dispatch(expandNotificationsForRequest()); - }, [dispatch]); + dispatch(expandNotificationsForRequest({ accountId })); + }, [dispatch, accountId]); const handleDismiss = useCallback(() => { - dispatch(dismissNotificationRequest(id)); + dispatch(dismissNotificationRequest({ id })); }, [dispatch, id]); const handleAccept = useCallback(() => { - dispatch(acceptNotificationRequest(id)); + dispatch(acceptNotificationRequest({ id })); }, [dispatch, id]); const handleMoveUp = useCallback(id => { @@ -79,12 +85,12 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => { }, [columnRef, notifications]); useEffect(() => { - dispatch(fetchNotificationRequest(id)); + dispatch(fetchNotificationRequest({ id })); }, [dispatch, id]); useEffect(() => { if (accountId) { - dispatch(fetchNotificationsForRequest(accountId)); + dispatch(fetchNotificationsForRequest({ accountId })); } }, [dispatch, accountId]); diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx index 622a171fd30026..ccaed312b499f4 100644 --- a/app/javascript/mastodon/features/notifications/requests.jsx +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -11,7 +11,12 @@ import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?rea import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { openModal } from 'mastodon/actions/modal'; -import { fetchNotificationRequests, expandNotificationRequests, acceptNotificationRequests, dismissNotificationRequests } from 'mastodon/actions/notifications'; +import { + fetchNotificationRequests, + expandNotificationRequests, + acceptNotificationRequests, + dismissNotificationRequests, +} from 'mastodon/actions/notification_requests'; import { changeSetting } from 'mastodon/actions/settings'; import { CheckBox } from 'mastodon/components/check_box'; import Column from 'mastodon/components/column'; @@ -84,7 +89,7 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM message: intl.formatMessage(messages.confirmAcceptMultipleMessage, { count: selectedItems.length }), confirm: intl.formatMessage(messages.confirmAcceptMultipleButton, { count: selectedItems.length}), onConfirm: () => - dispatch(acceptNotificationRequests(selectedItems)), + dispatch(acceptNotificationRequests({ ids: selectedItems })), }, })); }, [dispatch, intl, selectedItems]); @@ -97,7 +102,7 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM message: intl.formatMessage(messages.confirmDismissMultipleMessage, { count: selectedItems.length }), confirm: intl.formatMessage(messages.confirmDismissMultipleButton, { count: selectedItems.length}), onConfirm: () => - dispatch(dismissNotificationRequests(selectedItems)), + dispatch(dismissNotificationRequests({ ids: selectedItems })), }, })); }, [dispatch, intl, selectedItems]); @@ -161,9 +166,9 @@ export const NotificationRequests = ({ multiColumn }) => { const columnRef = useRef(); const intl = useIntl(); const dispatch = useDispatch(); - const isLoading = useSelector(state => state.getIn(['notificationRequests', 'isLoading'])); - const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items'])); - const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next'])); + const isLoading = useSelector(state => state.notificationRequests.isLoading); + const notificationRequests = useSelector(state => state.notificationRequests.items); + const hasMore = useSelector(state => !!state.notificationRequests.next); const [selectionMode, setSelectionMode] = useState(false); const [checkedRequestIds, setCheckedRequestIds] = useState([]); @@ -182,7 +187,7 @@ export const NotificationRequests = ({ multiColumn }) => { else ids.push(id); - setSelectAllChecked(ids.length === notificationRequests.size); + setSelectAllChecked(ids.length === notificationRequests.length); return [...ids]; }); @@ -193,7 +198,7 @@ export const NotificationRequests = ({ multiColumn }) => { if(checked) setCheckedRequestIds([]); else - setCheckedRequestIds(notificationRequests.map(request => request.get('id')).toArray()); + setCheckedRequestIds(notificationRequests.map(request => request.id)); return !checked; }); @@ -217,7 +222,7 @@ export const NotificationRequests = ({ multiColumn }) => { multiColumn={multiColumn} showBackButton appendContent={ - notificationRequests.size > 0 && ( + notificationRequests.length > 0 && ( )} > @@ -236,12 +241,12 @@ export const NotificationRequests = ({ multiColumn }) => { > {notificationRequests.map(request => ( ))} diff --git a/app/javascript/mastodon/models/notification_request.ts b/app/javascript/mastodon/models/notification_request.ts new file mode 100644 index 00000000000000..bd98d213d402b4 --- /dev/null +++ b/app/javascript/mastodon/models/notification_request.ts @@ -0,0 +1,19 @@ +import type { ApiNotificationRequestJSON } from 'mastodon/api_types/notifications'; + +export interface NotificationRequest + extends Omit { + account_id: string; + notifications_count: number; +} + +export function createNotificationRequestFromJSON( + requestJSON: ApiNotificationRequestJSON, +): NotificationRequest { + const { account, notifications_count, ...request } = requestJSON; + + return { + account_id: account.id, + notifications_count: +notifications_count, + ...request, + }; +} diff --git a/app/javascript/mastodon/reducers/notification_requests.js b/app/javascript/mastodon/reducers/notification_requests.js deleted file mode 100644 index f73c641965a0c5..00000000000000 --- a/app/javascript/mastodon/reducers/notification_requests.js +++ /dev/null @@ -1,114 +0,0 @@ -import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; - -import { blockAccountSuccess, muteAccountSuccess } from 'mastodon/actions/accounts'; -import { - NOTIFICATION_REQUESTS_EXPAND_REQUEST, - NOTIFICATION_REQUESTS_EXPAND_SUCCESS, - NOTIFICATION_REQUESTS_EXPAND_FAIL, - NOTIFICATION_REQUESTS_FETCH_REQUEST, - NOTIFICATION_REQUESTS_FETCH_SUCCESS, - NOTIFICATION_REQUESTS_FETCH_FAIL, - NOTIFICATION_REQUEST_FETCH_REQUEST, - NOTIFICATION_REQUEST_FETCH_SUCCESS, - NOTIFICATION_REQUEST_FETCH_FAIL, - NOTIFICATION_REQUEST_ACCEPT_REQUEST, - NOTIFICATION_REQUEST_DISMISS_REQUEST, - NOTIFICATION_REQUESTS_ACCEPT_REQUEST, - NOTIFICATION_REQUESTS_DISMISS_REQUEST, - NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, - NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, - NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, - NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, - NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, - NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, -} from 'mastodon/actions/notifications'; - -import { notificationToMap } from './notifications'; - -const initialState = ImmutableMap({ - items: ImmutableList(), - isLoading: false, - next: null, - current: ImmutableMap({ - isLoading: false, - item: null, - removed: false, - notifications: ImmutableMap({ - items: ImmutableList(), - isLoading: false, - next: null, - }), - }), -}); - -const normalizeRequest = request => fromJS({ - ...request, - account: request.account.id, -}); - -const removeRequest = (state, id) => { - if (state.getIn(['current', 'item', 'id']) === id) { - state = state.setIn(['current', 'removed'], true); - } - - return state.update('items', list => list.filterNot(item => item.get('id') === id)); -}; - -const removeRequestByAccount = (state, account_id) => { - if (state.getIn(['current', 'item', 'account']) === account_id) { - state = state.setIn(['current', 'removed'], true); - } - - return state.update('items', list => list.filterNot(item => item.get('account') === account_id)); -}; - -export const notificationRequestsReducer = (state = initialState, action) => { - switch(action.type) { - case NOTIFICATION_REQUESTS_FETCH_SUCCESS: - return state.withMutations(map => { - map.update('items', list => ImmutableList(action.requests.map(normalizeRequest)).concat(list)); - map.set('isLoading', false); - map.update('next', next => next ?? action.next); - }); - case NOTIFICATION_REQUESTS_EXPAND_SUCCESS: - return state.withMutations(map => { - map.update('items', list => list.concat(ImmutableList(action.requests.map(normalizeRequest)))); - map.set('isLoading', false); - map.set('next', action.next); - }); - case NOTIFICATION_REQUESTS_EXPAND_REQUEST: - case NOTIFICATION_REQUESTS_FETCH_REQUEST: - return state.set('isLoading', true); - case NOTIFICATION_REQUESTS_EXPAND_FAIL: - case NOTIFICATION_REQUESTS_FETCH_FAIL: - return state.set('isLoading', false); - case NOTIFICATION_REQUEST_ACCEPT_REQUEST: - case NOTIFICATION_REQUEST_DISMISS_REQUEST: - return removeRequest(state, action.id); - case NOTIFICATION_REQUESTS_ACCEPT_REQUEST: - case NOTIFICATION_REQUESTS_DISMISS_REQUEST: - return action.ids.reduce((state, id) => removeRequest(state, id), state); - case blockAccountSuccess.type: - return removeRequestByAccount(state, action.payload.relationship.id); - case muteAccountSuccess.type: - return action.payload.relationship.muting_notifications ? removeRequestByAccount(state, action.payload.relationship.id) : state; - case NOTIFICATION_REQUEST_FETCH_REQUEST: - return state.set('current', initialState.get('current').set('isLoading', true)); - case NOTIFICATION_REQUEST_FETCH_SUCCESS: - return state.update('current', map => map.set('isLoading', false).set('item', normalizeRequest(action.request))); - case NOTIFICATION_REQUEST_FETCH_FAIL: - return state.update('current', map => map.set('isLoading', false)); - case NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST: - case NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST: - return state.setIn(['current', 'notifications', 'isLoading'], true); - case NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS: - return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => ImmutableList(action.notifications.map(notificationToMap)).concat(list)).update('next', next => next ?? action.next)); - case NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS: - return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => list.concat(ImmutableList(action.notifications.map(notificationToMap)))).set('next', action.next)); - case NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL: - case NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL: - return state.setIn(['current', 'notifications', 'isLoading'], false); - default: - return state; - } -}; diff --git a/app/javascript/mastodon/reducers/notification_requests.ts b/app/javascript/mastodon/reducers/notification_requests.ts new file mode 100644 index 00000000000000..1ca92d9990008f --- /dev/null +++ b/app/javascript/mastodon/reducers/notification_requests.ts @@ -0,0 +1,182 @@ +import { createReducer, isAnyOf } from '@reduxjs/toolkit'; + +import { + blockAccountSuccess, + muteAccountSuccess, +} from 'mastodon/actions/accounts'; +import { + fetchNotificationRequests, + expandNotificationRequests, + fetchNotificationRequest, + fetchNotificationsForRequest, + expandNotificationsForRequest, + acceptNotificationRequest, + dismissNotificationRequest, + acceptNotificationRequests, + dismissNotificationRequests, +} from 'mastodon/actions/notification_requests'; +import type { NotificationRequest } from 'mastodon/models/notification_request'; +import { createNotificationRequestFromJSON } from 'mastodon/models/notification_request'; + +import { notificationToMap } from './notifications'; + +interface NotificationsListState { + items: unknown[]; // TODO + isLoading: boolean; + next: string | null; +} + +interface CurrentNotificationRequestState { + item: NotificationRequest | null; + isLoading: boolean; + removed: boolean; + notifications: NotificationsListState; +} + +interface NotificationRequestsState { + items: NotificationRequest[]; + isLoading: boolean; + next: string | null; + current: CurrentNotificationRequestState; +} + +const initialState: NotificationRequestsState = { + items: [], + isLoading: false, + next: null, + current: { + item: null, + isLoading: false, + removed: false, + notifications: { + isLoading: false, + items: [], + next: null, + }, + }, +}; + +const removeRequest = (state: NotificationRequestsState, id: string) => { + if (state.current.item?.id === id) { + state.current.removed = true; + } + + state.items = state.items.filter((item) => item.id !== id); +}; + +const removeRequestByAccount = ( + state: NotificationRequestsState, + account_id: string, +) => { + if (state.current.item?.account_id === account_id) { + state.current.removed = true; + } + + state.items = state.items.filter((item) => item.account_id !== account_id); +}; + +export const notificationRequestsReducer = + createReducer(initialState, (builder) => { + builder + .addCase(fetchNotificationRequests.fulfilled, (state, action) => { + state.items = action.payload.requests + .map(createNotificationRequestFromJSON) + .concat(state.items); + state.isLoading = false; + state.next ??= action.payload.next ?? null; + }) + .addCase(expandNotificationRequests.fulfilled, (state, action) => { + state.items = state.items.concat( + action.payload.requests.map(createNotificationRequestFromJSON), + ); + state.isLoading = false; + state.next = action.payload.next ?? null; + }) + .addCase(blockAccountSuccess, (state, action) => { + removeRequestByAccount(state, action.payload.relationship.id); + }) + .addCase(muteAccountSuccess, (state, action) => { + if (action.payload.relationship.muting_notifications) + removeRequestByAccount(state, action.payload.relationship.id); + }) + .addCase(fetchNotificationRequest.pending, (state) => { + state.current = { ...initialState.current, isLoading: true }; + }) + .addCase(fetchNotificationRequest.rejected, (state) => { + state.current.isLoading = false; + }) + .addCase(fetchNotificationRequest.fulfilled, (state, action) => { + state.current.isLoading = false; + state.current.item = createNotificationRequestFromJSON(action.payload); + }) + .addCase(fetchNotificationsForRequest.fulfilled, (state, action) => { + state.current.notifications.isLoading = false; + state.current.notifications.items.unshift( + ...action.payload.notifications.map(notificationToMap), + ); + state.current.notifications.next ??= action.payload.next ?? null; + }) + .addCase(expandNotificationsForRequest.fulfilled, (state, action) => { + state.current.notifications.isLoading = false; + state.current.notifications.items.push( + ...action.payload.notifications.map(notificationToMap), + ); + state.current.notifications.next = action.payload.next ?? null; + }) + .addMatcher( + isAnyOf( + fetchNotificationRequests.pending, + expandNotificationRequests.pending, + ), + (state) => { + state.isLoading = true; + }, + ) + .addMatcher( + isAnyOf( + fetchNotificationRequests.rejected, + expandNotificationRequests.rejected, + ), + (state) => { + state.isLoading = false; + }, + ) + .addMatcher( + isAnyOf( + acceptNotificationRequest.pending, + dismissNotificationRequest.pending, + ), + (state, action) => { + removeRequest(state, action.meta.arg.id); + }, + ) + .addMatcher( + isAnyOf( + acceptNotificationRequests.pending, + dismissNotificationRequests.pending, + ), + (state, action) => { + action.meta.arg.ids.forEach((id) => { + removeRequest(state, id); + }); + }, + ) + .addMatcher( + isAnyOf( + fetchNotificationsForRequest.pending, + expandNotificationsForRequest.pending, + ), + (state) => { + state.current.notifications.isLoading = true; + }, + ) + .addMatcher( + isAnyOf( + fetchNotificationsForRequest.rejected, + expandNotificationsForRequest.rejected, + ), + (state) => { + state.current.notifications.isLoading = false; + }, + ); + }); diff --git a/app/javascript/mastodon/store/typed_functions.ts b/app/javascript/mastodon/store/typed_functions.ts index 544d619682949a..9fcc90c61b241e 100644 --- a/app/javascript/mastodon/store/typed_functions.ts +++ b/app/javascript/mastodon/store/typed_functions.ts @@ -33,8 +33,12 @@ interface AppThunkConfig { } type AppThunkApi = Pick, 'getState' | 'dispatch'>; -interface AppThunkOptions { +interface AppThunkOptions { useLoadingBar?: boolean; + condition?: ( + arg: Arg, + { getState }: { getState: AppThunkApi['getState'] }, + ) => boolean; } const createBaseAsyncThunk = createAsyncThunk.withTypes(); @@ -42,7 +46,7 @@ const createBaseAsyncThunk = createAsyncThunk.withTypes(); export function createThunk( name: string, creator: (arg: Arg, api: AppThunkApi) => Returned | Promise, - options: AppThunkOptions = {}, + options: AppThunkOptions = {}, ) { return createBaseAsyncThunk( name, @@ -70,6 +74,7 @@ export function createThunk( if (options.useLoadingBar) return { useLoadingBar: true }; return {}; }, + condition: options.condition, }, ); } @@ -96,7 +101,7 @@ type ArgsType = Record | undefined; export function createDataLoadingThunk( name: string, loadData: (args: Args) => Promise, - thunkOptions?: AppThunkOptions, + thunkOptions?: AppThunkOptions, ): ReturnType>; // Overload when the `onData` method returns discardLoadDataInPayload, then the payload is empty @@ -104,17 +109,19 @@ export function createDataLoadingThunk( name: string, loadData: LoadData, onDataOrThunkOptions?: - | AppThunkOptions + | AppThunkOptions | OnData, - thunkOptions?: AppThunkOptions, + thunkOptions?: AppThunkOptions, ): ReturnType>; // Overload when the `onData` method returns nothing, then the mayload is the `onData` result export function createDataLoadingThunk( name: string, loadData: LoadData, - onDataOrThunkOptions?: AppThunkOptions | OnData, - thunkOptions?: AppThunkOptions, + onDataOrThunkOptions?: + | AppThunkOptions + | OnData, + thunkOptions?: AppThunkOptions, ): ReturnType>; // Overload when there is an `onData` method returning something @@ -126,9 +133,9 @@ export function createDataLoadingThunk< name: string, loadData: LoadData, onDataOrThunkOptions?: - | AppThunkOptions + | AppThunkOptions | OnData, - thunkOptions?: AppThunkOptions, + thunkOptions?: AppThunkOptions, ): ReturnType>; /** @@ -154,6 +161,7 @@ export function createDataLoadingThunk< * @param maybeThunkOptions * Additional Mastodon specific options for the thunk. Currently supports: * - `useLoadingBar` to display a loading bar while this action is pending. Defaults to true. + * - `condition` is passed to `createAsyncThunk` (https://redux-toolkit.js.org/api/createAsyncThunk#canceling-before-execution) * @returns The created thunk */ export function createDataLoadingThunk< @@ -164,12 +172,12 @@ export function createDataLoadingThunk< name: string, loadData: LoadData, onDataOrThunkOptions?: - | AppThunkOptions + | AppThunkOptions | OnData, - maybeThunkOptions?: AppThunkOptions, + maybeThunkOptions?: AppThunkOptions, ) { let onData: OnData | undefined; - let thunkOptions: AppThunkOptions | undefined; + let thunkOptions: AppThunkOptions | undefined; if (typeof onDataOrThunkOptions === 'function') onData = onDataOrThunkOptions; else if (typeof onDataOrThunkOptions === 'object') @@ -203,6 +211,9 @@ export function createDataLoadingThunk< return undefined as Returned; else return result; }, - { useLoadingBar: thunkOptions?.useLoadingBar ?? true }, + { + useLoadingBar: thunkOptions?.useLoadingBar ?? true, + condition: thunkOptions?.condition, + }, ); } From efb0e2c34b2c2921ac0c0b999d99384882667d6c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 16 Sep 2024 14:08:37 +0200 Subject: [PATCH 021/467] Fix horizontal scrollbar on who to follow carousel in web UI (#31912) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a53eef52c4e347..3a2564df45f3c6 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -10234,6 +10234,7 @@ noscript { scroll-padding: 16px; scroll-behavior: smooth; overflow-x: scroll; + scrollbar-width: none; &__card { background: var(--background-color); From e0648a916ab81925545504173bf4f43ec64d4f3c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 14:10:02 +0200 Subject: [PATCH 022/467] Rename `/api/v2_alpha/notifications*` to `/api/v2/notifications*` (#31840) --- .../notifications/accounts_controller.rb | 6 +- .../notifications_controller.rb | 12 +- app/javascript/mastodon/api/notifications.ts | 2 +- app/serializers/rest/instance_serializer.rb | 4 +- config/routes/api.rb | 32 +- lib/mastodon/version.rb | 6 + .../notifications/accounts_spec.rb | 8 +- spec/requests/api/v2/notifications_spec.rb | 343 ++++++++++++++++++ .../api/v2_alpha/notifications_spec.rb | 14 +- 9 files changed, 391 insertions(+), 36 deletions(-) rename app/controllers/api/{v2_alpha => v2}/notifications/accounts_controller.rb (77%) rename app/controllers/api/{v2_alpha => v2}/notifications_controller.rb (89%) rename spec/requests/api/{v2_alpha => v2}/notifications/accounts_spec.rb (84%) create mode 100644 spec/requests/api/v2/notifications_spec.rb diff --git a/app/controllers/api/v2_alpha/notifications/accounts_controller.rb b/app/controllers/api/v2/notifications/accounts_controller.rb similarity index 77% rename from app/controllers/api/v2_alpha/notifications/accounts_controller.rb rename to app/controllers/api/v2/notifications/accounts_controller.rb index 9933b63373e1fc..771e9663883479 100644 --- a/app/controllers/api/v2_alpha/notifications/accounts_controller.rb +++ b/app/controllers/api/v2/notifications/accounts_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Api::V2Alpha::Notifications::AccountsController < Api::BaseController +class Api::V2::Notifications::AccountsController < Api::BaseController before_action -> { doorkeeper_authorize! :read, :'read:notifications' } before_action :require_user! before_action :set_notifications! @@ -33,11 +33,11 @@ def set_notifications! end def next_path - api_v2_alpha_notification_accounts_url pagination_params(max_id: pagination_max_id) if records_continue? + api_v2_notification_accounts_url pagination_params(max_id: pagination_max_id) if records_continue? end def prev_path - api_v2_alpha_notification_accounts_url pagination_params(min_id: pagination_since_id) unless @paginated_notifications.empty? + api_v2_notification_accounts_url pagination_params(min_id: pagination_since_id) unless @paginated_notifications.empty? end def pagination_collection diff --git a/app/controllers/api/v2_alpha/notifications_controller.rb b/app/controllers/api/v2/notifications_controller.rb similarity index 89% rename from app/controllers/api/v2_alpha/notifications_controller.rb rename to app/controllers/api/v2/notifications_controller.rb index e8aa0b9e498777..c070c0e5e71892 100644 --- a/app/controllers/api/v2_alpha/notifications_controller.rb +++ b/app/controllers/api/v2/notifications_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Api::V2Alpha::NotificationsController < Api::BaseController +class Api::V2::NotificationsController < Api::BaseController before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, except: [:clear, :dismiss] before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: [:clear, :dismiss] before_action :require_user! @@ -21,7 +21,7 @@ def index ActiveRecord::Associations::Preloader.new(records: @presenter.accounts, associations: [:account_stat, { user: :role }]).call end - MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#index rendering') do |span| + MastodonOTELTracer.in_span('Api::V2::NotificationsController#index rendering') do |span| statuses = @grouped_notifications.filter_map { |group| group.target_status&.id } span.add_attributes( @@ -64,7 +64,7 @@ def dismiss private def load_notifications - MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_notifications') do + MastodonOTELTracer.in_span('Api::V2::NotificationsController#load_notifications') do notifications = browserable_account_notifications.includes(from_account: [:account_stat, :user]).to_a_grouped_paginated_by_id( limit_param(DEFAULT_NOTIFICATIONS_LIMIT), params.slice(:max_id, :since_id, :min_id, :grouped_types).permit(:max_id, :since_id, :min_id, grouped_types: []) @@ -79,7 +79,7 @@ def load_notifications def load_grouped_notifications return [] if @notifications.empty? - MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_grouped_notifications') do + MastodonOTELTracer.in_span('Api::V2::NotificationsController#load_grouped_notifications') do NotificationGroup.from_notifications(@notifications, pagination_range: (@notifications.last.id)..(@notifications.first.id), grouped_types: params[:grouped_types]) end end @@ -101,11 +101,11 @@ def target_statuses_from_notifications end def next_path - api_v2_alpha_notifications_url pagination_params(max_id: pagination_max_id) unless @notifications.empty? + api_v2_notifications_url pagination_params(max_id: pagination_max_id) unless @notifications.empty? end def prev_path - api_v2_alpha_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty? + api_v2_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty? end def pagination_collection diff --git a/app/javascript/mastodon/api/notifications.ts b/app/javascript/mastodon/api/notifications.ts index e34dc85bb0d4a4..24d526655cefc4 100644 --- a/app/javascript/mastodon/api/notifications.ts +++ b/app/javascript/mastodon/api/notifications.ts @@ -37,7 +37,7 @@ export const apiFetchNotificationGroups = async (params?: { }) => { const response = await api().request({ method: 'GET', - url: '/api/v2_alpha/notifications', + url: '/api/v2/notifications', params, }); diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index cced83587d0736..19361277ae4dde 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -108,9 +108,7 @@ def registrations end def api_versions - { - mastodon: 1, - } + Mastodon::Version.api_versions end private diff --git a/config/routes/api.rb b/config/routes/api.rb index df975065bd7bdc..b237791736f872 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -316,6 +316,21 @@ end end + concern :grouped_notifications do + resources :notifications, param: :group_key, only: [:index, :show] do + collection do + post :clear + get :unread_count + end + + member do + post :dismiss + end + + resources :accounts, only: [:index], module: :notifications + end + end + namespace :v2 do get '/search', to: 'search#index', as: :search @@ -341,21 +356,12 @@ namespace :notifications do resource :policy, only: [:show, :update] end - end - - namespace :v2_alpha do - resources :notifications, param: :group_key, only: [:index, :show] do - collection do - post :clear - get :unread_count - end - member do - post :dismiss - end + concerns :grouped_notifications + end - resources :accounts, only: [:index], module: :notifications - end + namespace :v2_alpha, module: 'v2' do + concerns :grouped_notifications end namespace :web do diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index caafa96b361b29..00e6160890beb2 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -43,6 +43,12 @@ def gem_version @gem_version ||= Gem::Version.new(to_s.split('+')[0]) end + def api_versions + { + mastodon: 2, + } + end + def repository ENV.fetch('GITHUB_REPOSITORY', 'mastodon/mastodon') end diff --git a/spec/requests/api/v2_alpha/notifications/accounts_spec.rb b/spec/requests/api/v2/notifications/accounts_spec.rb similarity index 84% rename from spec/requests/api/v2_alpha/notifications/accounts_spec.rb rename to spec/requests/api/v2/notifications/accounts_spec.rb index 3c5bcd89963dff..102b009c0b9f4a 100644 --- a/spec/requests/api/v2_alpha/notifications/accounts_spec.rb +++ b/spec/requests/api/v2/notifications/accounts_spec.rb @@ -8,9 +8,9 @@ let(:scopes) { 'read:notifications write:notifications' } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - describe 'GET /api/v2_alpha/notifications/:group_key/accounts', :inline_jobs do + describe 'GET /api/v2/notifications/:group_key/accounts', :inline_jobs do subject do - get "/api/v2_alpha/notifications/#{user.account.notifications.first.group_key}/accounts", headers: headers, params: params + get "/api/v2/notifications/#{user.account.notifications.first.group_key}/accounts", headers: headers, params: params end let(:params) { {} } @@ -71,8 +71,8 @@ expect(response) .to include_pagination_headers( - prev: api_v2_alpha_notification_accounts_url(limit: params[:limit], min_id: notifications.first.id), - next: api_v2_alpha_notification_accounts_url(limit: params[:limit], max_id: notifications.second.id) + prev: api_v2_notification_accounts_url(limit: params[:limit], min_id: notifications.first.id), + next: api_v2_notification_accounts_url(limit: params[:limit], max_id: notifications.second.id) ) end end diff --git a/spec/requests/api/v2/notifications_spec.rb b/spec/requests/api/v2/notifications_spec.rb new file mode 100644 index 00000000000000..edf333ecd85586 --- /dev/null +++ b/spec/requests/api/v2/notifications_spec.rb @@ -0,0 +1,343 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Notifications' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v2/notifications/unread_count', :inline_jobs do + subject do + get '/api/v2/notifications/unread_count', headers: headers, params: params + end + + let(:params) { {} } + + before do + first_status = PostStatusService.new.call(user.account, text: 'Test') + ReblogService.new.call(Fabricate(:account), first_status) + PostStatusService.new.call(Fabricate(:account), text: 'Hello @alice') + FavouriteService.new.call(Fabricate(:account), first_status) + FavouriteService.new.call(Fabricate(:account), first_status) + FollowService.new.call(Fabricate(:account), user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns expected notifications count' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq 4 + end + end + + context 'with grouped_types parameter' do + let(:params) { { grouped_types: %w(reblog) } } + + it 'returns expected notifications count' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq 5 + end + end + + context 'with a read marker' do + before do + id = user.account.notifications.browserable.order(id: :desc).offset(2).first.id + user.markers.create!(timeline: 'notifications', last_read_id: id) + end + + it 'returns expected notifications count' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq 2 + end + end + + context 'with exclude_types param' do + let(:params) { { exclude_types: %w(mention) } } + + it 'returns expected notifications count' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq 3 + end + end + + context 'with a user-provided limit' do + let(:params) { { limit: 2 } } + + it 'returns a capped value' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq 2 + end + end + + context 'when there are more notifications than the limit' do + before do + stub_const('Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT', 2) + end + + it 'returns a capped value' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:count]).to eq Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT + end + end + end + + describe 'GET /api/v2/notifications', :inline_jobs do + subject do + get '/api/v2/notifications', headers: headers, params: params + end + + let(:bob) { Fabricate(:user) } + let(:tom) { Fabricate(:user) } + let(:params) { {} } + + before do + first_status = PostStatusService.new.call(user.account, text: 'Test') + ReblogService.new.call(bob.account, first_status) + PostStatusService.new.call(bob.account, text: 'Hello @alice') + FavouriteService.new.call(bob.account, first_status) + FavouriteService.new.call(tom.account, first_status) + FollowService.new.call(bob.account, user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'when there are no notifications' do + before do + user.account.notifications.destroy_all + end + + it 'returns 0 notifications' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:notification_groups]).to eq [] + end + end + + context 'with no options' do + it 'returns expected notification types', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow') + end + end + + context 'with grouped_types param' do + let(:params) { { grouped_types: %w(reblog) } } + + it 'returns everything, but does not group favourites' do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:notification_groups]).to contain_exactly( + a_hash_including( + type: 'reblog', + sample_account_ids: [bob.account_id.to_s] + ), + a_hash_including( + type: 'mention', + sample_account_ids: [bob.account_id.to_s] + ), + a_hash_including( + type: 'favourite', + sample_account_ids: [bob.account_id.to_s] + ), + a_hash_including( + type: 'favourite', + sample_account_ids: [tom.account_id.to_s] + ), + a_hash_including( + type: 'follow', + sample_account_ids: [bob.account_id.to_s] + ) + ) + end + end + + context 'with exclude_types param' do + let(:params) { { exclude_types: %w(mention) } } + + it 'returns everything but excluded type', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body.size).to_not eq 0 + expect(body_json_types.uniq).to_not include 'mention' + end + end + + context 'with types param' do + let(:params) { { types: %w(mention) } } + + it 'returns only requested type', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_json_types.uniq).to eq ['mention'] + expect(response.parsed_body.dig(:notification_groups, 0, :page_min_id)).to_not be_nil + end + end + + context 'with limit param' do + let(:params) { { limit: 3 } } + let(:notifications) { user.account.notifications.reorder(id: :desc) } + + it 'returns the requested number of notifications paginated', :aggregate_failures do + subject + + expect(response.parsed_body[:notification_groups].size) + .to eq(params[:limit]) + + expect(response) + .to include_pagination_headers( + prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), + # TODO: one downside of the current approach is that we return the first ID matching the group, + # not the last that has been skipped, so pagination is very likely to give overlap + next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[3].id) + ) + end + end + + context 'with since_id param' do + let(:params) { { since_id: notifications[2].id } } + let(:notifications) { user.account.notifications.reorder(id: :desc) } + + it 'returns the requested number of notifications paginated', :aggregate_failures do + subject + + expect(response.parsed_body[:notification_groups].size) + .to eq(2) + + expect(response) + .to include_pagination_headers( + prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), + # TODO: one downside of the current approach is that we return the first ID matching the group, + # not the last that has been skipped, so pagination is very likely to give overlap + next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[1].id) + ) + end + end + + context 'when requesting stripped-down accounts' do + let(:params) { { expand_accounts: 'partial_avatars' } } + + let(:recent_account) { Fabricate(:account) } + + before do + FavouriteService.new.call(recent_account, user.account.statuses.first) + end + + it 'returns an account in "partial_accounts", with the expected keys', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body[:partial_accounts].size).to be > 0 + expect(response.parsed_body[:partial_accounts][0].keys.map(&:to_sym)).to contain_exactly(:acct, :avatar, :avatar_static, :bot, :id, :locked, :url) + expect(response.parsed_body[:partial_accounts].pluck(:id)).to_not include(recent_account.id.to_s) + expect(response.parsed_body[:accounts].pluck(:id)).to include(recent_account.id.to_s) + end + end + + context 'when passing an invalid value for "expand_accounts"' do + let(:params) { { expand_accounts: 'unknown_foobar' } } + + it 'returns http bad request' do + subject + + expect(response).to have_http_status(400) + end + end + + def body_json_types + response.parsed_body[:notification_groups].pluck(:type) + end + end + + describe 'GET /api/v2/notifications/:id' do + subject do + get "/api/v2/notifications/#{notification.group_key}", headers: headers + end + + let(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') } + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + context 'when notification belongs to someone else' do + let(:notification) { Fabricate(:notification, group_key: 'foobar') } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v2/notifications/:id/dismiss' do + subject do + post "/api/v2/notifications/#{notification.group_key}/dismiss", headers: headers + end + + let!(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'destroys the notification' do + subject + + expect(response).to have_http_status(200) + expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + + context 'when notification belongs to someone else' do + let(:notification) { Fabricate(:notification) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v2/notifications/clear' do + subject do + post '/api/v2/notifications/clear', headers: headers + end + + before do + Fabricate(:notification, account: user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'clears notifications for the account' do + subject + + expect(user.account.reload.notifications).to be_empty + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/api/v2_alpha/notifications_spec.rb b/spec/requests/api/v2_alpha/notifications_spec.rb index b7821de561f9eb..6d7df45b6563ff 100644 --- a/spec/requests/api/v2_alpha/notifications_spec.rb +++ b/spec/requests/api/v2_alpha/notifications_spec.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +# TODO: remove this before 4.3.0-rc1 + require 'rails_helper' RSpec.describe 'Notifications' do @@ -84,14 +86,14 @@ context 'when there are more notifications than the limit' do before do - stub_const('Api::V2Alpha::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT', 2) + stub_const('Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT', 2) end it 'returns a capped value' do subject expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq Api::V2Alpha::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT + expect(response.parsed_body[:count]).to eq Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT end end end @@ -206,10 +208,10 @@ expect(response) .to include_pagination_headers( - prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.first.id), + prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), # TODO: one downside of the current approach is that we return the first ID matching the group, # not the last that has been skipped, so pagination is very likely to give overlap - next: api_v2_alpha_notifications_url(limit: params[:limit], max_id: notifications[3].id) + next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[3].id) ) end end @@ -226,10 +228,10 @@ expect(response) .to include_pagination_headers( - prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.first.id), + prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), # TODO: one downside of the current approach is that we return the first ID matching the group, # not the last that has been skipped, so pagination is very likely to give overlap - next: api_v2_alpha_notifications_url(limit: params[:limit], max_id: notifications[1].id) + next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[1].id) ) end end From c620452fd7e0e3b083bae4b68fa09384df322f4a Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 15:12:10 +0200 Subject: [PATCH 023/467] Enable grouped notifications unconditionally (#31929) --- app/javascript/mastodon/actions/markers.ts | 8 +----- .../actions/notifications_migration.tsx | 8 ++---- app/javascript/mastodon/actions/streaming.js | 28 ++++++------------- .../components/column_settings.jsx | 14 ---------- .../features/notifications_wrapper.jsx | 7 +---- .../ui/components/navigation_panel.jsx | 11 +++----- app/javascript/mastodon/initial_state.js | 2 -- app/javascript/mastodon/locales/en.json | 2 -- app/javascript/mastodon/selectors/settings.ts | 5 ---- app/serializers/initial_state_serializer.rb | 1 - 10 files changed, 16 insertions(+), 70 deletions(-) diff --git a/app/javascript/mastodon/actions/markers.ts b/app/javascript/mastodon/actions/markers.ts index 6254e3f083ff12..0b3280c2128dea 100644 --- a/app/javascript/mastodon/actions/markers.ts +++ b/app/javascript/mastodon/actions/markers.ts @@ -2,7 +2,6 @@ import { debounce } from 'lodash'; import type { MarkerJSON } from 'mastodon/api_types/markers'; import { getAccessToken } from 'mastodon/initial_state'; -import { selectUseGroupedNotifications } from 'mastodon/selectors/settings'; import type { AppDispatch, RootState } from 'mastodon/store'; import { createAppAsyncThunk } from 'mastodon/store/typed_functions'; @@ -76,12 +75,7 @@ interface MarkerParam { } function getLastNotificationId(state: RootState): string | undefined { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return selectUseGroupedNotifications(state) - ? state.notificationGroups.lastReadId - : // @ts-expect-error state.notifications is not yet typed - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - state.getIn(['notifications', 'lastReadId']); + return state.notificationGroups.lastReadId; } const buildPostMarkersParams = (state: RootState) => { diff --git a/app/javascript/mastodon/actions/notifications_migration.tsx b/app/javascript/mastodon/actions/notifications_migration.tsx index 0d4da765ec327b..cd9f5ca3d6d2bf 100644 --- a/app/javascript/mastodon/actions/notifications_migration.tsx +++ b/app/javascript/mastodon/actions/notifications_migration.tsx @@ -1,14 +1,10 @@ -import { selectUseGroupedNotifications } from 'mastodon/selectors/settings'; import { createAppAsyncThunk } from 'mastodon/store'; import { fetchNotifications } from './notification_groups'; -import { expandNotifications } from './notifications'; export const initializeNotifications = createAppAsyncThunk( 'notifications/initialize', - (_, { dispatch, getState }) => { - if (selectUseGroupedNotifications(getState())) - void dispatch(fetchNotifications()); - else void dispatch(expandNotifications({})); + (_, { dispatch }) => { + void dispatch(fetchNotifications()); }, ); diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index 03013110c38779..b6fc31fae855ac 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -1,7 +1,5 @@ // @ts-check -import { selectUseGroupedNotifications } from 'mastodon/selectors/settings'; - import { getLocale } from '../locales'; import { connectStream } from '../stream'; @@ -105,18 +103,14 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti const notificationJSON = JSON.parse(data.payload); dispatch(updateNotifications(notificationJSON, messages, locale)); // TODO: remove this once the groups feature replaces the previous one - if(selectUseGroupedNotifications(getState())) { - dispatch(processNewNotificationForGroups(notificationJSON)); - } + dispatch(processNewNotificationForGroups(notificationJSON)); break; } case 'notifications_merged': const state = getState(); if (state.notifications.top || !state.notifications.mounted) dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); - if (selectUseGroupedNotifications(state)) { - dispatch(refreshStaleNotificationGroups()); - } + dispatch(refreshStaleNotificationGroups()); break; case 'conversation': // @ts-expect-error @@ -141,21 +135,15 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti /** * @param {Function} dispatch - * @param {Function} getState */ -async function refreshHomeTimelineAndNotification(dispatch, getState) { +async function refreshHomeTimelineAndNotification(dispatch) { await dispatch(expandHomeTimeline({ maxId: undefined })); - // TODO: remove this once the groups feature replaces the previous one - if(selectUseGroupedNotifications(getState())) { - // TODO: polling for merged notifications - try { - await dispatch(pollRecentGroupNotifications()); - } catch { - // TODO - } - } else { - await dispatch(expandNotifications({})); + // TODO: polling for merged notifications + try { + await dispatch(pollRecentGroupNotifications()); + } catch { + // TODO } await dispatch(fetchAnnouncements()); diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.jsx b/app/javascript/mastodon/features/notifications/components/column_settings.jsx index ed2f4ada3a4c27..ed2947c1754be1 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.jsx +++ b/app/javascript/mastodon/features/notifications/components/column_settings.jsx @@ -6,7 +6,6 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; -import { forceGroupedNotifications } from 'mastodon/initial_state'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions'; import ClearColumnButton from './clear_column_button'; @@ -36,7 +35,6 @@ class ColumnSettings extends PureComponent { const filterAdvancedStr = ; const unreadMarkersShowStr = ; - const groupingShowStr = ; const alertStr = ; const showStr = ; const soundStr = ; @@ -68,18 +66,6 @@ class ColumnSettings extends PureComponent { - {!forceGroupedNotifications && ( -
-

- -

- -
- -
-
- )} -

diff --git a/app/javascript/mastodon/features/notifications_wrapper.jsx b/app/javascript/mastodon/features/notifications_wrapper.jsx index 4b3efeb54e182c..50383d5ebf9d28 100644 --- a/app/javascript/mastodon/features/notifications_wrapper.jsx +++ b/app/javascript/mastodon/features/notifications_wrapper.jsx @@ -1,13 +1,8 @@ -import Notifications from 'mastodon/features/notifications'; import Notifications_v2 from 'mastodon/features/notifications_v2'; -import { selectUseGroupedNotifications } from 'mastodon/selectors/settings'; -import { useAppSelector } from 'mastodon/store'; export const NotificationsWrapper = (props) => { - const optedInGroupedNotifications = useAppSelector(selectUseGroupedNotifications); - return ( - optedInGroupedNotifications ? : + ); }; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 407276d12619bd..0ca21e89765449 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -37,7 +37,6 @@ import { timelinePreview, trendsEnabled } from 'mastodon/initial_state'; import { transientSingleColumn } from 'mastodon/is_mobile'; import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions'; import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications'; -import { selectUseGroupedNotifications } from 'mastodon/selectors/settings'; import ColumnLink from './column_link'; import DisabledAccountBanner from './disabled_account_banner'; @@ -65,19 +64,17 @@ const messages = defineMessages({ }); const NotificationsLink = () => { - const optedInGroupedNotifications = useSelector(selectUseGroupedNotifications); - const count = useSelector(state => state.getIn(['notifications', 'unread'])); - const intl = useIntl(); - const newCount = useSelector(selectUnreadNotificationGroupsCount); + const count = useSelector(selectUnreadNotificationGroupsCount); + const intl = useIntl(); return ( } - activeIcon={} + icon={} + activeIcon={} text={intl.formatMessage(messages.notifications)} /> ); diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index cf33b12dd9232e..60b35cb31ac72e 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -43,7 +43,6 @@ * @property {boolean=} use_pending_items * @property {string} version * @property {string} sso_redirect - * @property {boolean} force_grouped_notifications */ /** @@ -119,7 +118,6 @@ export const criticalUpdatesPending = initialState?.critical_updates_pending; // @ts-expect-error export const statusPageUrl = getMeta('status_page_url'); export const sso_redirect = getMeta('sso_redirect'); -export const forceGroupedNotifications = getMeta('force_grouped_notifications'); /** * @returns {string | undefined} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 1de2dce4409b56..7f2e88d44019e4 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.beta.category": "Experimental features", - "notifications.column_settings.beta.grouping": "Group notifications", "notifications.column_settings.favourite": "Favorites:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", diff --git a/app/javascript/mastodon/selectors/settings.ts b/app/javascript/mastodon/selectors/settings.ts index 22e7c13b932e46..93276c66920609 100644 --- a/app/javascript/mastodon/selectors/settings.ts +++ b/app/javascript/mastodon/selectors/settings.ts @@ -1,4 +1,3 @@ -import { forceGroupedNotifications } from 'mastodon/initial_state'; import type { RootState } from 'mastodon/store'; /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ @@ -26,10 +25,6 @@ export const selectSettingsNotificationsQuickFilterAdvanced = ( ) => state.settings.getIn(['notifications', 'quickFilter', 'advanced']) as boolean; -export const selectUseGroupedNotifications = (state: RootState) => - forceGroupedNotifications || - (state.settings.getIn(['notifications', 'groupingBeta']) as boolean); - export const selectSettingsNotificationsShowUnread = (state: RootState) => state.settings.getIn(['notifications', 'showUnread']) as boolean; diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 25a352806fc317..13f332c95c4d7b 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -109,7 +109,6 @@ def default_meta_store trends_as_landing_page: Setting.trends_as_landing_page, trends_enabled: Setting.trends, version: instance_presenter.version, - force_grouped_notifications: ENV['FORCE_GROUPED_NOTIFICATIONS'] == 'true', } end From 6c76a7a90778e6b0f1daf33ff6a2725079c8f335 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 15:20:44 +0200 Subject: [PATCH 024/467] =?UTF-8?q?Fix=20cancel=20follow=20request=20butto?= =?UTF-8?q?n=20sometimes=20saying=20=E2=80=9CFollow=20back=E2=80=9D=20(#31?= =?UTF-8?q?934)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/components/follow_button.tsx | 4 ++-- .../mastodon/features/account/components/header.jsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/components/follow_button.tsx b/app/javascript/mastodon/components/follow_button.tsx index 222789318e83ba..46314af309f24b 100644 --- a/app/javascript/mastodon/components/follow_button.tsx +++ b/app/javascript/mastodon/components/follow_button.tsx @@ -75,10 +75,10 @@ export const FollowButton: React.FC<{ label = ; } else if (relationship.following && relationship.followed_by) { label = intl.formatMessage(messages.mutual); - } else if (!relationship.following && relationship.followed_by) { - label = intl.formatMessage(messages.followBack); } else if (relationship.following || relationship.requested) { label = intl.formatMessage(messages.unfollow); + } else if (relationship.followed_by) { + label = intl.formatMessage(messages.followBack); } else { label = intl.formatMessage(messages.follow); } diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index 1326874e50a796..6583c1f60486b7 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -92,10 +92,10 @@ const messageForFollowButton = relationship => { if (relationship.get('following') && relationship.get('followed_by')) { return messages.mutual; - } else if (!relationship.get('following') && relationship.get('followed_by')) { - return messages.followBack; } else if (relationship.get('following') || relationship.get('requested')) { return messages.unfollow; + } else if (relationship.get('followed_by')) { + return messages.followBack; } else { return messages.follow; } From ca8e892c1abb91722c256030c83cabec8e3445ff Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 16 Sep 2024 16:51:56 +0200 Subject: [PATCH 025/467] Fix selectSettingsNotificationsExcludedTypes not being memoized properly (#31881) --- app/javascript/mastodon/selectors/settings.ts | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/app/javascript/mastodon/selectors/settings.ts b/app/javascript/mastodon/selectors/settings.ts index 93276c66920609..e722ad09112034 100644 --- a/app/javascript/mastodon/selectors/settings.ts +++ b/app/javascript/mastodon/selectors/settings.ts @@ -1,17 +1,27 @@ +import { createSelector } from '@reduxjs/toolkit'; + import type { RootState } from 'mastodon/store'; /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ // state.settings is not yet typed, so we disable some ESLint checks for those selectors -export const selectSettingsNotificationsShows = (state: RootState) => - state.settings.getIn(['notifications', 'shows']).toJS() as Record< - string, - boolean - >; - -export const selectSettingsNotificationsExcludedTypes = (state: RootState) => - Object.entries(selectSettingsNotificationsShows(state)) - .filter(([_type, enabled]) => !enabled) - .map(([type, _enabled]) => type); +export const selectSettingsNotificationsShows = createSelector( + [ + (state) => + state.settings.getIn(['notifications', 'shows']) as Immutable.Map< + string, + boolean + >, + ], + (shows) => shows.toJS() as Record, +); + +export const selectSettingsNotificationsExcludedTypes = createSelector( + [selectSettingsNotificationsShows], + (shows) => + Object.entries(shows) + .filter(([_type, enabled]) => !enabled) + .map(([type, _enabled]) => type), +); export const selectSettingsNotificationsQuickFilterShow = (state: RootState) => state.settings.getIn(['notifications', 'quickFilter', 'show']) as boolean; From 5a33a5658b904b97a664f18eaad6587c7c6cf04e Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Mon, 16 Sep 2024 22:19:04 -0500 Subject: [PATCH 026/467] Fix background of text detection progress (#31943) --- app/javascript/styles/mastodon/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 3a2564df45f3c6..5016480f324ee8 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3921,7 +3921,7 @@ $ui-header-logo-wordmark-width: 99px; } &__wrapper { - background: $white; + background: $ui-base-color; border: 1px solid var(--background-border-color); margin-bottom: 10px; border-radius: 4px; From d2f907507857fb0d256c45dda34403ae1fe95cd8 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 17 Sep 2024 05:19:42 +0200 Subject: [PATCH 027/467] Increase no-gap-breakpoint by 32px to fix overflow (#31889) --- .../mastodon/features/ui/components/columns_area.jsx | 4 ++-- app/javascript/styles/mastodon/variables.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index 063ac28d96fd26..5a2ea8c2c88216 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -63,8 +63,8 @@ export default class ColumnsArea extends ImmutablePureComponent { children: PropTypes.node, }; - // Corresponds to (max-width: $no-gap-breakpoint + 285px - 1px) in SCSS - mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)'); + // Corresponds to (max-width: $no-gap-breakpoint - 1px) in SCSS + mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1206px)'); state = { renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches), diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index c477e7a750cecc..17442b9748b668 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -87,7 +87,7 @@ $media-modal-media-max-width: 100%; // put margins on top and bottom of image to avoid the screen covered by image. $media-modal-media-max-height: 80%; -$no-gap-breakpoint: 1175px; +$no-gap-breakpoint: 1207px; $mobile-breakpoint: 630px; $font-sans-serif: 'mastodon-font-sans-serif' !default; From 6a233cbfcfa6e14e9575fd490ed018670793e9ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:02:53 +0200 Subject: [PATCH 028/467] New Crowdin Translations (automated) (#31946) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 2 -- app/javascript/mastodon/locales/ast.json | 1 - app/javascript/mastodon/locales/be.json | 2 -- app/javascript/mastodon/locales/bg.json | 2 -- app/javascript/mastodon/locales/ca.json | 2 -- app/javascript/mastodon/locales/cs.json | 2 -- app/javascript/mastodon/locales/cy.json | 2 -- app/javascript/mastodon/locales/da.json | 2 -- app/javascript/mastodon/locales/de.json | 4 +--- app/javascript/mastodon/locales/el.json | 2 -- app/javascript/mastodon/locales/en-GB.json | 2 -- app/javascript/mastodon/locales/es-AR.json | 2 -- app/javascript/mastodon/locales/es-MX.json | 2 -- app/javascript/mastodon/locales/es.json | 2 -- app/javascript/mastodon/locales/et.json | 2 -- app/javascript/mastodon/locales/eu.json | 2 -- app/javascript/mastodon/locales/fa.json | 2 -- app/javascript/mastodon/locales/fi.json | 2 -- app/javascript/mastodon/locales/fo.json | 2 -- app/javascript/mastodon/locales/fr-CA.json | 2 -- app/javascript/mastodon/locales/fr.json | 2 -- app/javascript/mastodon/locales/fy.json | 2 -- app/javascript/mastodon/locales/ga.json | 2 -- app/javascript/mastodon/locales/gd.json | 2 -- app/javascript/mastodon/locales/gl.json | 2 -- app/javascript/mastodon/locales/he.json | 2 -- app/javascript/mastodon/locales/hu.json | 2 -- app/javascript/mastodon/locales/ia.json | 2 -- app/javascript/mastodon/locales/is.json | 2 -- app/javascript/mastodon/locales/it.json | 2 -- app/javascript/mastodon/locales/ja.json | 2 -- app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/ko.json | 2 -- app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 2 -- app/javascript/mastodon/locales/lv.json | 10 ++++++++++ app/javascript/mastodon/locales/nl.json | 2 -- app/javascript/mastodon/locales/nn.json | 2 -- app/javascript/mastodon/locales/pl.json | 2 -- app/javascript/mastodon/locales/pt-BR.json | 2 -- app/javascript/mastodon/locales/pt-PT.json | 2 -- app/javascript/mastodon/locales/ru.json | 1 - app/javascript/mastodon/locales/sc.json | 2 -- app/javascript/mastodon/locales/sl.json | 2 -- app/javascript/mastodon/locales/sq.json | 2 -- app/javascript/mastodon/locales/sv.json | 2 -- app/javascript/mastodon/locales/th.json | 2 -- app/javascript/mastodon/locales/tr.json | 2 -- app/javascript/mastodon/locales/uk.json | 2 -- app/javascript/mastodon/locales/vi.json | 2 -- app/javascript/mastodon/locales/zh-CN.json | 2 -- app/javascript/mastodon/locales/zh-TW.json | 2 -- 52 files changed, 11 insertions(+), 99 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index dc89dc6e399ecb..43256506cdc38f 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -528,8 +528,6 @@ "notifications.column_settings.admin.report": "التبليغات الجديدة:", "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", - "notifications.column_settings.beta.category": "ميزات تجريبية", - "notifications.column_settings.beta.grouping": "جمّع الإشعارات", "notifications.column_settings.favourite": "المفضلة:", "notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات", "notifications.column_settings.filter_bar.category": "شريط التصفية السريعة", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 008dc6a663fee6..219ea0d17cf1c4 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -297,7 +297,6 @@ "notifications.clear": "Borrar los avisos", "notifications.column_settings.admin.report": "Informes nuevos:", "notifications.column_settings.admin.sign_up": "Rexistros nuevos:", - "notifications.column_settings.beta.category": "Funciones esperimentales", "notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow_request": "Solicitúes de siguimientu nueves:", "notifications.column_settings.mention": "Menciones:", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index a0900b84e67f7c..8c28e71d2cf2b5 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -523,8 +523,6 @@ "notifications.column_settings.admin.report": "Новыя скаргі:", "notifications.column_settings.admin.sign_up": "Новыя ўваходы:", "notifications.column_settings.alert": "Апавяшчэнні на працоўным стале", - "notifications.column_settings.beta.category": "Эксперыментальныя функцыі", - "notifications.column_settings.beta.grouping": "Групаваць апавяшчэннi", "notifications.column_settings.favourite": "Упадабанае:", "notifications.column_settings.filter_bar.advanced": "Паказаць усе катэгорыі", "notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 2a435c20743d2f..507b8d29372570 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -540,8 +540,6 @@ "notifications.column_settings.admin.report": "Нови доклади:", "notifications.column_settings.admin.sign_up": "Нови регистрации:", "notifications.column_settings.alert": "Известия на работния плот", - "notifications.column_settings.beta.category": "Експериментални функции", - "notifications.column_settings.beta.grouping": "Групови известия", "notifications.column_settings.favourite": "Любими:", "notifications.column_settings.filter_bar.advanced": "Показване на всички категории", "notifications.column_settings.filter_bar.category": "Лента за бърз филтър", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index a6378895034de2..3cdeab3ae42d46 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nous informes:", "notifications.column_settings.admin.sign_up": "Registres nous:", "notifications.column_settings.alert": "Notificacions d'escriptori", - "notifications.column_settings.beta.category": "Característiques experimentals", - "notifications.column_settings.beta.grouping": "Notificacions de grup", "notifications.column_settings.favourite": "Favorits:", "notifications.column_settings.filter_bar.advanced": "Mostra totes les categories", "notifications.column_settings.filter_bar.category": "Barra ràpida de filtres", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 134e683fa16343..af7a0128132bf0 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -509,8 +509,6 @@ "notifications.column_settings.admin.report": "Nová hlášení:", "notifications.column_settings.admin.sign_up": "Nové registrace:", "notifications.column_settings.alert": "Oznámení na počítači", - "notifications.column_settings.beta.category": "Experimentální funkce", - "notifications.column_settings.beta.grouping": "Seskupit notifikace", "notifications.column_settings.favourite": "Oblíbené:", "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie", "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index a5855929557093..51ea1bdf3a6ecc 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Adroddiadau newydd:", "notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", - "notifications.column_settings.beta.category": "Nodweddion arbrofol", - "notifications.column_settings.beta.grouping": "Grŵpio hysbysiadau", "notifications.column_settings.favourite": "Ffefrynnau:", "notifications.column_settings.filter_bar.advanced": "Dangos pob categori", "notifications.column_settings.filter_bar.category": "Bar hidlo cyflym", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 97d82155353e4f..2c36869622ce80 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nye anmeldelser:", "notifications.column_settings.admin.sign_up": "Nye tilmeldinger:", "notifications.column_settings.alert": "Computernotifikationer", - "notifications.column_settings.beta.category": "Eksperimentelle funktioner", - "notifications.column_settings.beta.grouping": "Gruppér notifikationer", "notifications.column_settings.favourite": "Favoritter:", "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", "notifications.column_settings.filter_bar.category": "Hurtigfiltreringsbjælke", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 03be4487895bb2..e6c086bfa29b84 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Neue Meldungen:", "notifications.column_settings.admin.sign_up": "Neue Registrierungen:", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", - "notifications.column_settings.beta.category": "Experimentelle Funktionen", - "notifications.column_settings.beta.grouping": "Benachrichtigungen gruppieren", "notifications.column_settings.favourite": "Favoriten:", "notifications.column_settings.filter_bar.advanced": "Alle Filterkategorien anzeigen", "notifications.column_settings.filter_bar.category": "Filterleiste", @@ -777,7 +775,7 @@ "status.admin_domain": "{domain} moderieren", "status.admin_status": "Beitrag moderieren", "status.block": "@{name} blockieren", - "status.bookmark": "Beitrag als Lesezeichen setzen", + "status.bookmark": "Lesezeichen setzen", "status.cancel_reblog_private": "Beitrag nicht mehr teilen", "status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden", "status.continued_thread": "Fortgeführter Thread", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index d832fa101401e4..367efe1cd9b923 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -551,8 +551,6 @@ "notifications.column_settings.admin.report": "Νέες αναφορές:", "notifications.column_settings.admin.sign_up": "Νέες εγγραφές:", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", - "notifications.column_settings.beta.category": "Πειραματικές λειτουργίες", - "notifications.column_settings.beta.grouping": "Ομαδοποίηση ειδοποιήσεων", "notifications.column_settings.favourite": "Αγαπημένα:", "notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών", "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index d182cf6fe8cd58..c81f389b9dd2b1 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.beta.category": "Experimental features", - "notifications.column_settings.beta.grouping": "Group notifications", "notifications.column_settings.favourite": "Favourites:", "notifications.column_settings.filter_bar.advanced": "Display all categories", "notifications.column_settings.filter_bar.category": "Quick filter bar", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 9618616165c5d7..968b01babc28eb 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", - "notifications.column_settings.beta.category": "Funciones experimentales", - "notifications.column_settings.beta.grouping": "Agrupar notificaciones", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 14afd1e108c6d1..d1abc392bf0950 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Registros nuevos:", "notifications.column_settings.alert": "Notificaciones de escritorio", - "notifications.column_settings.beta.category": "Características experimentales", - "notifications.column_settings.beta.grouping": "Agrupar notificaciones", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index c9f050b9de6eef..6a428e353b3e69 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", - "notifications.column_settings.beta.category": "Características experimentales", - "notifications.column_settings.beta.grouping": "Agrupar notificaciones", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index d202fb61a4ad5b..5b8e8369f6a437 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Uued teavitused:", "notifications.column_settings.admin.sign_up": "Uued kasutajad:", "notifications.column_settings.alert": "Töölauateated", - "notifications.column_settings.beta.category": "Eksperimentaalsed oskused", - "notifications.column_settings.beta.grouping": "Teavituste rühmitamine", "notifications.column_settings.favourite": "Lemmikud:", "notifications.column_settings.filter_bar.advanced": "Näita kõiki kategooriaid", "notifications.column_settings.filter_bar.category": "Kiirfiltri riba", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 989a328d0a9c17..acdd27ce2bea5d 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -555,8 +555,6 @@ "notifications.column_settings.admin.report": "Txosten berriak:", "notifications.column_settings.admin.sign_up": "Izen-emate berriak:", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", - "notifications.column_settings.beta.category": "Ezaugarri esperimentalak", - "notifications.column_settings.beta.grouping": "Multzokatu jakinarazpenak", "notifications.column_settings.favourite": "Gogokoak:", "notifications.column_settings.filter_bar.advanced": "Bistaratu kategoria guztiak", "notifications.column_settings.filter_bar.category": "Iragazki-barra bizkorra", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 4221859fea4409..fba8d902351362 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -534,8 +534,6 @@ "notifications.column_settings.admin.report": "گزارش‌های جدید:", "notifications.column_settings.admin.sign_up": "ثبت نام‌های جدید:", "notifications.column_settings.alert": "آگاهی‌های میزکار", - "notifications.column_settings.beta.category": "ویژگی‌های آزمایشی", - "notifications.column_settings.beta.grouping": "گروه‌بندی آگاهی‌ها", "notifications.column_settings.favourite": "برگزیده‌ها:", "notifications.column_settings.filter_bar.advanced": "نمایش همۀ دسته‌ها", "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index e1a411e52eee08..681f5d5bb20a9a 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Uudet raportit:", "notifications.column_settings.admin.sign_up": "Uudet rekisteröitymiset:", "notifications.column_settings.alert": "Työpöytäilmoitukset", - "notifications.column_settings.beta.category": "Kokeelliset ominaisuudet", - "notifications.column_settings.beta.grouping": "Ryhmittele ilmoitukset", "notifications.column_settings.favourite": "Suosikit:", "notifications.column_settings.filter_bar.advanced": "Näytä kaikki luokat", "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 9dd8feaf2fa6cb..793a75bb05a5f5 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nýggjar fráboðanir:", "notifications.column_settings.admin.sign_up": "Nýggjar tilmeldingar:", "notifications.column_settings.alert": "Skriviborðsfráboðanir", - "notifications.column_settings.beta.category": "Royndarhentleikar", - "notifications.column_settings.beta.grouping": "Bólkafráboðanir", "notifications.column_settings.favourite": "Dámdir postar:", "notifications.column_settings.filter_bar.advanced": "Vís allar bólkar", "notifications.column_settings.filter_bar.category": "Skjótfilturbjálki", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index f58e3b81e4ec8e..e89256bc2f80bb 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nouveaux signalements:", "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions:", "notifications.column_settings.alert": "Notifications navigateur", - "notifications.column_settings.beta.category": "Fonctionnalités expérimentales", - "notifications.column_settings.beta.grouping": "Grouper les notifications", "notifications.column_settings.favourite": "Favoris:", "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 175601eb27ddc4..03cb6471d6d068 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nouveaux signalements :", "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions :", "notifications.column_settings.alert": "Notifications du navigateur", - "notifications.column_settings.beta.category": "Fonctionnalités expérimentales", - "notifications.column_settings.beta.grouping": "Grouper les notifications", "notifications.column_settings.favourite": "Favoris :", "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 0a51db36a4953b..2443692133af18 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -558,8 +558,6 @@ "notifications.column_settings.admin.report": "Nije rapportaazjes:", "notifications.column_settings.admin.sign_up": "Nije registraasjes:", "notifications.column_settings.alert": "Desktopmeldingen", - "notifications.column_settings.beta.category": "Eksperimintele funksjes", - "notifications.column_settings.beta.grouping": "Notifikaasjes groepearje", "notifications.column_settings.favourite": "Favoriten:", "notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane", "notifications.column_settings.filter_bar.category": "Flugge filterbalke", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 29d4f574c0df17..11da6b64e94d31 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Tuairiscí nua:", "notifications.column_settings.admin.sign_up": "Clárúcháin nua:", "notifications.column_settings.alert": "Fógraí deisce", - "notifications.column_settings.beta.category": "Gnéithe turgnamhacha", - "notifications.column_settings.beta.grouping": "Fógraí grúpa", "notifications.column_settings.favourite": "Ceanáin:", "notifications.column_settings.filter_bar.advanced": "Taispeáin gach catagóir", "notifications.column_settings.filter_bar.category": "Barra scagairí tapa", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 76eb0c26b528ba..97748e0ee97b1e 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Gearanan ùra:", "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:", "notifications.column_settings.alert": "Brathan deasga", - "notifications.column_settings.beta.category": "Gleusan deuchainneil", - "notifications.column_settings.beta.grouping": "Buidhnich na brathan", "notifications.column_settings.favourite": "Annsachdan:", "notifications.column_settings.filter_bar.advanced": "Seall a h-uile roinn-seòrsa", "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 1293d96bbd8742..d35bcd8cf5b2ab 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Novas denuncias:", "notifications.column_settings.admin.sign_up": "Novas usuarias:", "notifications.column_settings.alert": "Notificacións de escritorio", - "notifications.column_settings.beta.category": "Características experimentais", - "notifications.column_settings.beta.grouping": "Notificacións de grupo", "notifications.column_settings.favourite": "Favoritas:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorías", "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 532c11d17cd829..de20d505c04c06 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "דו\"חות חדשים", "notifications.column_settings.admin.sign_up": "הרשמות חדשות:", "notifications.column_settings.alert": "התראות לשולחן העבודה", - "notifications.column_settings.beta.category": "יכולות ניסיוניות", - "notifications.column_settings.beta.grouping": "התראות קבוצה", "notifications.column_settings.favourite": "חיבובים:", "notifications.column_settings.filter_bar.advanced": "להציג את כל הקטגוריות", "notifications.column_settings.filter_bar.category": "שורת סינון מהיר", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 587f58f2486b1e..d4ced224634fe6 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Új jelentések:", "notifications.column_settings.admin.sign_up": "Új regisztrálók:", "notifications.column_settings.alert": "Asztali értesítések", - "notifications.column_settings.beta.category": "Kísérleti funkciók", - "notifications.column_settings.beta.grouping": "Csoportértesítések", "notifications.column_settings.favourite": "Kedvencek:", "notifications.column_settings.filter_bar.advanced": "Minden kategória megjelenítése", "notifications.column_settings.filter_bar.category": "Gyorsszűrő sáv", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 8cfe2ecac055a2..9e7b583375bd78 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -535,8 +535,6 @@ "notifications.column_settings.admin.report": "Nove reportos:", "notifications.column_settings.admin.sign_up": "Nove inscriptiones:", "notifications.column_settings.alert": "Notificationes de scriptorio", - "notifications.column_settings.beta.category": "Functionalitates experimental", - "notifications.column_settings.beta.grouping": "Notificationes de gruppo", "notifications.column_settings.favourite": "Favorites:", "notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias", "notifications.column_settings.filter_bar.category": "Barra de filtro rapide", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index dc0b563f1f923e..fb807429f7056f 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nýjar kærur:", "notifications.column_settings.admin.sign_up": "Nýjar skráningar:", "notifications.column_settings.alert": "Tilkynningar á skjáborði", - "notifications.column_settings.beta.category": "Eiginleikar á tilraunastigi", - "notifications.column_settings.beta.grouping": "Tilkynningar hópa", "notifications.column_settings.favourite": "Eftirlæti:", "notifications.column_settings.filter_bar.advanced": "Birta alla flokka", "notifications.column_settings.filter_bar.category": "Skyndisíustika", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index daa135afeab1f5..97518c586268a9 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nuove segnalazioni:", "notifications.column_settings.admin.sign_up": "Nuove iscrizioni:", "notifications.column_settings.alert": "Notifiche desktop", - "notifications.column_settings.beta.category": "Funzioni sperimentali", - "notifications.column_settings.beta.grouping": "Notifiche di gruppo", "notifications.column_settings.favourite": "Preferiti:", "notifications.column_settings.filter_bar.advanced": "Mostra tutte le categorie", "notifications.column_settings.filter_bar.category": "Barra del filtro veloce", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 7ea1694f1ecd57..38492a73612b16 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -558,8 +558,6 @@ "notifications.column_settings.admin.report": "新しい通報:", "notifications.column_settings.admin.sign_up": "新規登録:", "notifications.column_settings.alert": "デスクトップ通知", - "notifications.column_settings.beta.category": "実験段階の機能", - "notifications.column_settings.beta.grouping": "通知をグループにまとめる", "notifications.column_settings.favourite": "お気に入り:", "notifications.column_settings.filter_bar.advanced": "すべてのカテゴリを表示", "notifications.column_settings.filter_bar.category": "クイックフィルターバー:", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 5ccfbecf815616..24286a119feb98 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -411,7 +411,6 @@ "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk alɣuten-inek·em i lebda?", "notifications.column_settings.admin.report": "Ineqqisen imaynuten:", "notifications.column_settings.alert": "Alɣuten n tnarit", - "notifications.column_settings.beta.grouping": "Segrew alɣuten", "notifications.column_settings.favourite": "Imenyafen:", "notifications.column_settings.filter_bar.advanced": "Sken-d akk taggayin", "notifications.column_settings.filter_bar.category": "Iri n usizdeg uzrib", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 751e5790e141fb..6795bc647c58cb 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "새 신고:", "notifications.column_settings.admin.sign_up": "새로운 가입:", "notifications.column_settings.alert": "데스크탑 알림", - "notifications.column_settings.beta.category": "실험적인 기능", - "notifications.column_settings.beta.grouping": "알림 그룹화", "notifications.column_settings.favourite": "좋아요:", "notifications.column_settings.filter_bar.advanced": "모든 범주 표시", "notifications.column_settings.filter_bar.category": "빠른 필터 막대", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index f956abfb1e28ee..72bf26050106c4 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -490,7 +490,6 @@ "notifications.column_settings.admin.report": "Muveos raportos:", "notifications.column_settings.admin.sign_up": "Muevas enrejistrasyones:", "notifications.column_settings.alert": "Avizos de ensimameza", - "notifications.column_settings.beta.category": "Funksyones eksperimentalas", "notifications.column_settings.favourite": "Te plazen:", "notifications.column_settings.filter_bar.advanced": "Amostra todas las kategorias", "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 86e8d092b84d4e..5a510f5b96c986 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -552,8 +552,6 @@ "notifications.column_settings.admin.report": "Naujos ataskaitos:", "notifications.column_settings.admin.sign_up": "Naujos registracijos:", "notifications.column_settings.alert": "Darbalaukio pranešimai", - "notifications.column_settings.beta.category": "Eksperimentinės funkcijos", - "notifications.column_settings.beta.grouping": "Grupuoti pranešimus", "notifications.column_settings.favourite": "Mėgstami:", "notifications.column_settings.filter_bar.advanced": "Rodyti visas kategorijas", "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 77dc5c497cf90b..b53f65ab431236 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -91,6 +91,7 @@ "block_modal.show_more": "Parādīt mazāk", "block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.", "block_modal.they_cant_see_posts": "Nevar redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.", + "block_modal.title": "Bloķēt lietotāju?", "boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu", "boost_modal.reblog": "Pastiprināt ierakstu?", "boost_modal.undo_reblog": "Atcelt ieraksta pastiprināšanu?", @@ -155,6 +156,7 @@ "compose_form.poll.single": "Jāizvēlas viens", "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", + "compose_form.poll.type": "Stils", "compose_form.publish": "Iesūtīt", "compose_form.publish_form": "Jauns ieraksts", "compose_form.reply": "Atbildēt", @@ -181,6 +183,7 @@ "confirmations.mute.confirm": "Apklusināt", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", "confirmations.redraft.message": "Vai tiešām vēlies dzēst šo ziņu un no jauna noformēt to? Izlase un pastiprinājumi tiks zaudēti, un atbildes uz sākotnējo ziņu tiks atstātas bez autoratlīdzības.", + "confirmations.redraft.title": "Dzēst un rakstīt vēlreiz?", "confirmations.reply.confirm": "Atbildēt", "confirmations.reply.message": "Tūlītēja atbildēšana pārrakstīs pašlaik sastādīto ziņu. Vai tiešām turpināt?", "confirmations.reply.title": "Pārrakstīt ierakstu?", @@ -208,7 +211,11 @@ "dismissable_banner.explore_statuses": "Šie ir ieraksti, kas šodien gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti jaunāki ieraksti, kuri tiek vairāk pastiprināti un ievietoti izlasēs.", "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.", + "domain_block_modal.block": "Bloķēt serveri", "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", + "domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.", + "domain_block_modal.title": "Bloķēt domēnu?", + "domain_block_modal.you_will_lose_followers": "Tiks noņemti visi tavi sekotāji no šī servera.", "domain_pill.server": "Serveris", "domain_pill.username": "Lietotājvārds", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", @@ -277,6 +284,7 @@ "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", + "filter_warning.matches_filter": "Atbilst filtram “{title}”", "firehose.all": "Visi", "firehose.local": "Šis serveris", "firehose.remote": "Citi serveri", @@ -285,6 +293,7 @@ "follow_requests.unlocked_explanation": "Lai gan Tavs konts nav slēgts, {domain} darbinieki iedomājās, ka Tu varētu vēlēties pašrocīgi pārskatīt sekošanas pieprasījumus no šiem kontiem.", "follow_suggestions.curated_suggestion": "Darbinieku izvēle", "follow_suggestions.dismiss": "Vairs nerādīt", + "follow_suggestions.friends_of_friends_longer": "Populārs to cilvēku vidū, kuriem tu seko", "follow_suggestions.personalized_suggestion": "Pielāgots ieteikums", "follow_suggestions.similar_to_recently_followed_longer": "Līdzīgi profieliem, kuriem nesen sāki sekot", "follow_suggestions.view_all": "Skatīt visu", @@ -315,6 +324,7 @@ "hashtag.follow": "Sekot tēmturim", "hashtag.unfollow": "Pārstāt sekot tēmturim", "hashtags.and_other": "… un {count, plural, other {vēl #}}", + "hints.threads.replies_may_be_missing": "Var trūkt atbildes no citiem serveriem.", "home.column_settings.show_reblogs": "Rādīt pastiprinātos ierakstus", "home.column_settings.show_replies": "Rādīt atbildes", "home.hide_announcements": "Slēpt paziņojumus", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index d4c6b727f76a18..1043ca8376caf8 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nieuwe rapportages:", "notifications.column_settings.admin.sign_up": "Nieuwe registraties:", "notifications.column_settings.alert": "Desktopmeldingen", - "notifications.column_settings.beta.category": "Experimentele functies", - "notifications.column_settings.beta.grouping": "Gegroepeerde meldingen", "notifications.column_settings.favourite": "Favorieten:", "notifications.column_settings.filter_bar.advanced": "Alle categorieën tonen", "notifications.column_settings.filter_bar.category": "Snelle filterbalk", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 3d0634ef612595..c4b5f0291df130 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nye rapportar:", "notifications.column_settings.admin.sign_up": "Nyleg registrerte:", "notifications.column_settings.alert": "Skrivebordsvarsel", - "notifications.column_settings.beta.category": "Eksperimentelle funksjonar", - "notifications.column_settings.beta.grouping": "Grupper varslingar", "notifications.column_settings.favourite": "Favorittar:", "notifications.column_settings.filter_bar.advanced": "Vis alle kategoriar", "notifications.column_settings.filter_bar.category": "Snøggfilterline", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 34154fe5a3be39..d415bb38119c89 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Nowe zgłoszenia:", "notifications.column_settings.admin.sign_up": "Nowe rejestracje:", "notifications.column_settings.alert": "Powiadomienia na pulpicie", - "notifications.column_settings.beta.category": "Funkcje eksperymentalne", - "notifications.column_settings.beta.grouping": "Powiadomienia grupowe", "notifications.column_settings.favourite": "Ulubione:", "notifications.column_settings.filter_bar.advanced": "Wyświetl wszystkie kategorie", "notifications.column_settings.filter_bar.category": "Szybkie filtrowanie", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 235cec145d48ec..053ae25822b277 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Novas denúncias:", "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no computador", - "notifications.column_settings.beta.category": "Recursos experimentais", - "notifications.column_settings.beta.grouping": "Agrupar notificações", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Exibir todas as categorias", "notifications.column_settings.filter_bar.category": "Barra de filtro rápido", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index dd70e809a30155..ed4bb9ba010a6d 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Novas denúncias:", "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no ambiente de trabalho", - "notifications.column_settings.beta.category": "Funcionalidades experimentais", - "notifications.column_settings.beta.grouping": "Agrupar notificações", "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index e335bff299f371..4a03f2b6e80db9 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -502,7 +502,6 @@ "notifications.column_settings.admin.report": "Новые жалобы:", "notifications.column_settings.admin.sign_up": "Новые регистрации:", "notifications.column_settings.alert": "Уведомления на рабочем столе", - "notifications.column_settings.beta.category": "Экспериментальные функции", "notifications.column_settings.favourite": "Избранные:", "notifications.column_settings.filter_bar.advanced": "Отображать все категории", "notifications.column_settings.filter_bar.category": "Панель сортировки", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index ecf5141eb50563..071643a1538f1a 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -421,8 +421,6 @@ "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", "notifications.column_settings.admin.report": "Informes noos:", "notifications.column_settings.alert": "Notìficas de iscrivania", - "notifications.column_settings.beta.category": "Funtzionalidades isperimentales", - "notifications.column_settings.beta.grouping": "Notìficas de grupu", "notifications.column_settings.favourite": "Preferidos:", "notifications.column_settings.filter_bar.advanced": "Ammustra totu is categorias", "notifications.column_settings.filter_bar.category": "Barra de filtru lestru", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 183636a653a0b6..bdc1d5606289ab 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -520,8 +520,6 @@ "notifications.column_settings.admin.report": "Nove prijave:", "notifications.column_settings.admin.sign_up": "Novi vpisi:", "notifications.column_settings.alert": "Namizna obvestila", - "notifications.column_settings.beta.category": "Poskusne funkcionalnosti", - "notifications.column_settings.beta.grouping": "Skupine obvestil", "notifications.column_settings.favourite": "Priljubljeni:", "notifications.column_settings.filter_bar.advanced": "Prikaži vse kategorije", "notifications.column_settings.filter_bar.category": "Vrstica za hitro filtriranje", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 745bba179f4c54..ea3c6d5c7c66c6 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Raportime të reja:", "notifications.column_settings.admin.sign_up": "Regjistrime të reja:", "notifications.column_settings.alert": "Njoftime desktopi", - "notifications.column_settings.beta.category": "Veçori eksperimentale", - "notifications.column_settings.beta.grouping": "Njoftime grupi", "notifications.column_settings.favourite": "Të parapëlqyer:", "notifications.column_settings.filter_bar.advanced": "Shfaq krejt kategoritë", "notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 14fac1ec8daf0a..4d560a6495e451 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -554,8 +554,6 @@ "notifications.column_settings.admin.report": "Nya rapporter:", "notifications.column_settings.admin.sign_up": "Nya registreringar:", "notifications.column_settings.alert": "Skrivbordsaviseringar", - "notifications.column_settings.beta.category": "Experimentella funktioner", - "notifications.column_settings.beta.grouping": "Gruppera notifikationer", "notifications.column_settings.favourite": "Favoriter:", "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier", "notifications.column_settings.filter_bar.category": "Snabbfilter", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 69651df82c557f..9578431ff741b2 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "รายงานใหม่:", "notifications.column_settings.admin.sign_up": "การลงทะเบียนใหม่:", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", - "notifications.column_settings.beta.category": "คุณลักษณะการทดลอง", - "notifications.column_settings.beta.grouping": "การแจ้งเตือนกลุ่ม", "notifications.column_settings.favourite": "รายการโปรด:", "notifications.column_settings.filter_bar.advanced": "แสดงหมวดหมู่ทั้งหมด", "notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 5e875ff64f425a..d4d7d3d113929c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Yeni bildirimler:", "notifications.column_settings.admin.sign_up": "Yeni kayıtlar:", "notifications.column_settings.alert": "Masaüstü bildirimleri", - "notifications.column_settings.beta.category": "Deneysel özellikler", - "notifications.column_settings.beta.grouping": "Grup bildirimleri", "notifications.column_settings.favourite": "Favorilerin:", "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle", "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a9fd44ee6ce3b4..a1d3a872dfd91a 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Нові скарги:", "notifications.column_settings.admin.sign_up": "Нові реєстрації:", "notifications.column_settings.alert": "Сповіщення стільниці", - "notifications.column_settings.beta.category": "Експериментальні функції", - "notifications.column_settings.beta.grouping": "Групові сповіщення", "notifications.column_settings.favourite": "Уподобане:", "notifications.column_settings.filter_bar.advanced": "Показати всі категорії", "notifications.column_settings.filter_bar.category": "Панель швидкого фільтра", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 08fc44d83d4125..9fcd00ddc7c56a 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Người mới tham gia:", "notifications.column_settings.alert": "Báo trên máy tính", - "notifications.column_settings.beta.category": "Tính năng thử nghiệm", - "notifications.column_settings.beta.grouping": "Gộp thông báo theo loại", "notifications.column_settings.favourite": "Lượt thích:", "notifications.column_settings.filter_bar.advanced": "Toàn bộ", "notifications.column_settings.filter_bar.category": "Thanh lọc nhanh", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index dd86b92ccea469..6df3cde2085ab6 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "新举报:", "notifications.column_settings.admin.sign_up": "新注册:", "notifications.column_settings.alert": "桌面通知", - "notifications.column_settings.beta.category": "实验性功能", - "notifications.column_settings.beta.grouping": "通知分组", "notifications.column_settings.favourite": "喜欢:", "notifications.column_settings.filter_bar.advanced": "显示所有类别", "notifications.column_settings.filter_bar.category": "快速筛选栏", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a2168c42a40046..d69f54f7c8b984 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -559,8 +559,6 @@ "notifications.column_settings.admin.report": "新檢舉報告:", "notifications.column_settings.admin.sign_up": "新註冊帳號:", "notifications.column_settings.alert": "桌面通知", - "notifications.column_settings.beta.category": "實驗性功能", - "notifications.column_settings.beta.grouping": "分組通知", "notifications.column_settings.favourite": "最愛:", "notifications.column_settings.filter_bar.advanced": "顯示所有分類", "notifications.column_settings.filter_bar.category": "快速過濾器", From d8f9db547a3d3354b747b2aa609ff12017f60edd Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 17 Sep 2024 16:59:29 +0200 Subject: [PATCH 029/467] Merge commit from fork Co-authored-by: Eugen Rochko --- app/javascript/mastodon/reducers/accounts_map.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/reducers/accounts_map.js b/app/javascript/mastodon/reducers/accounts_map.js index 9053dcc9c0528b..d1229169cc3821 100644 --- a/app/javascript/mastodon/reducers/accounts_map.js +++ b/app/javascript/mastodon/reducers/accounts_map.js @@ -4,11 +4,10 @@ import { ACCOUNT_LOOKUP_FAIL } from '../actions/accounts'; import { importAccounts } from '../actions/accounts_typed'; import { domain } from '../initial_state'; -export const normalizeForLookup = str => { - str = str.toLowerCase(); - const trailingIndex = str.indexOf(`@${domain.toLowerCase()}`); - return (trailingIndex > 0) ? str.slice(0, trailingIndex) : str; -}; +const pattern = new RegExp(`@${domain}$`, 'gi'); + +export const normalizeForLookup = str => + str.toLowerCase().replace(pattern, ''); const initialState = ImmutableMap(); From 3e91c101b3c4b5166dab778837e38bed424b4333 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 17 Sep 2024 17:42:45 +0200 Subject: [PATCH 030/467] Bump version to 4.3.0-beta.2 (#31948) --- CHANGELOG.md | 60 ++++++++++++++++++++++++++++++----------- docker-compose.yml | 6 ++--- lib/mastodon/version.rb | 2 +- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02ac2898ddbb9f..8d1e0bfcf78061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,21 +10,24 @@ The following changelog entries focus on changes visible to users, administrator - **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\ This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared. +- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire) +- Update dependencies ### Added -- **Add experimental server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, and #31513 by @ClearlyClaire, @mgmn, and @renchap)\ +- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610 and #31929 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\ This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\ As part of this, the visual design of the entire notifications feature has been revamped.\ This feature is intended to eventually replace the existing notifications column, but for this first beta, users will have to enable it in the “Experimental features” section of the notifications column settings.\ The API is not final yet, but it consists of: - a new `group_key` attribute to `Notification` entities - - `GET /api/v2_alpha/notifications`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-grouped - - `GET /api/v2_alpha/notifications/:group_key`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-notification-group - - `POST /api/v2_alpha/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/notifications_alpha/#dismiss-group - - `GET /api/v2_alpha/notifications/:unread_count`: https://docs.joinmastodon.org/methods/notifications_alpha/#unread-group-count -- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, and #31541 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ + - `GET /api/v2/notifications`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-grouped + - `GET /api/v2/notifications/:group_key`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-notification-group + - `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts + - `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group + - `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count +- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, and #31723 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\ You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\ Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\ @@ -57,19 +60,22 @@ The following changelog entries focus on changes visible to users, administrator - **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\ You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\ This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link -- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, and #30846 by @Gargron)\ +- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, and #31900 by @Gargron and @oneiros)\ This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\ Articles hosted outside the fediverse can indicate a fediverse author with a meta tag: ```html ``` On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\ - Note that this feature is still work in progress and the tagging format and verification mechanisms may change in future releases. + Users can allow arbitrary domains to use `fediverse:creator` to credit them by visiting `/settings/verification`.\ + This is federated as a new `attributionDomains` property in the `http://joinmastodon.org/ns` namespace, containing an array of domain names: https://docs.joinmastodon.org/spec/activitypub/#properties-used-1 - **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\ In addition to email notifications, also notify users of moderation actions or warnings against them directly within the app, so they are less likely to miss important communication from their moderators.\ This adds the `moderation_warning` notification type to the REST API and streaming, with a new [`moderation_warning` attribute](https://docs.joinmastodon.org/entities/Notification/#moderation_warning). - **Add domain information to profiles in web UI** (#29602 by @Gargron)\ Clicking the domain of a user in their profile will now open a tooltip with a short explanation about servers and federation. +- **Add support for Redis sentinel** (#31694, #31623, #31744, #31767, and #31768 by @ThisIsMissEm and @oneiros)\ + See https://docs.joinmastodon.org/admin/scaling/#redis-sentinel - Add ability to reorder uploaded media before posting in web UI (#28456 by @Gargron) - Add moderation interface for searching hashtags (#30880 by @ThisIsMissEm) - Add ability for admins to configure instance favicon and logo (#30040, #30208, #30259, #30375, #30734, #31016, and #30205 by @ClearlyClaire, @FawazFarid, @JasonPunyon, @mgmn, and @renchap)\ @@ -77,6 +83,8 @@ The following changelog entries focus on changes visible to users, administrator - Add `api_versions` to `/api/v2/instance` (#31354 by @ClearlyClaire)\ Add API version number to make it easier for clients to detect compatible features going forward.\ See API documentation at https://docs.joinmastodon.org/entities/Instance/#api-versions +- Add quick links to Administration and Moderation Reports from Web UI (#24838 by @ThisIsMissEm) +- Add link to `/admin/roles` in moderation interface when changing someone's role (#31791 by @ClearlyClaire) - Add recent audit log entries in federation moderation interface (#27386 by @ThisIsMissEm) - Add profile setup to onboarding in web UI (#27829, #27876, and #28453 by @Gargron) - Add prominent share/copy button on profiles in web UI (#27865 and #27889 by @ClearlyClaire and @Gargron) @@ -113,21 +121,24 @@ The following changelog entries focus on changes visible to users, administrator - Add support for multiple `redirect_uris` when creating OAuth 2.0 Applications (#29192 by @ThisIsMissEm) - Add Interlingue and Interlingua to interface languages (#28630 and #30828 by @Dhghomon and @renchap) - Add Kashubian, Pennsylvania Dutch, Vai, Jawi Malay, Mohawk and Low German to posting languages (#26024, #26634, #27136, #29098, #27115, and #27434 by @EngineerDali, @HelgeKrueger, and @gunchleoc) -- Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm) - Add option to use native Ruby driver for Redis through `REDIS_DRIVER=ruby` (#30717 by @vmstan) - Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, and #30858 by @ClearlyClaire, @Gargron, and @mjankowski)\ Server admins can now use libvips as a faster and lighter alternative to ImageMagick for processing user-uploaded images.\ This requires libvips 8.13 or newer, and needs to be enabled with `MASTODON_USE_LIBVIPS=true`.\ This is enabled by default in the official Docker images, and is intended to completely replace ImageMagick in the future. +- Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm) +- Add anchors to each authorized application in `/oauth/authorized_applications` (#31677 by @fowl2) - Add active animation to header settings button (#30221, #30307, and #30388 by @daudix) - Add OpenTelemetry instrumentation (#30130, #30322, #30353, and #30350 by @julianocosta89, @renchap, and @robbkidd)\ See https://docs.joinmastodon.org/admin/config/#otel for documentation - Add API to get multiple accounts and statuses (#27871 and #30465 by @ClearlyClaire)\ This adds `GET /api/v1/accounts` and `GET /api/v1/statuses` to the REST API, see https://docs.joinmastodon.org/methods/accounts/#index and https://docs.joinmastodon.org/methods/statuses/#index +- Add support for CORS to `POST /oauth/revoke` (#31743 by @ClearlyClaire) - Add redirection back to previous page after site upload deletion (#30141 by @FawazFarid) - Add RFC8414 OAuth 2.0 server metadata (#29191 by @ThisIsMissEm) - Add loading indicator and empty result message to advanced interface search (#30085 by @ClearlyClaire) - Add `profile` OAuth 2.0 scope, allowing more limited access to user data (#29087 and #30357 by @ThisIsMissEm) +- Add global Regexp timeout (#31928 by @ClearlyClaire) - Add the role ID to the badge component (#29707 by @renchap) - Add diagnostic message for failure during CLI search deploy (#29462 by @mjankowski) - Add pagination `Link` headers on API accounts/statuses when pinned true (#29442 by @mjankowski) @@ -156,14 +167,14 @@ The following changelog entries focus on changes visible to users, administrator - **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\ In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state. -- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, and #29659 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ +- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, and #31889 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ The compose form has been completely redesigned for a more modern and consistent look, as well as spelling out the chosen privacy setting and language name at all times.\ As part of this, the “Unlisted” privacy setting has been renamed to “Quiet public”. -- **Change design of confirmation modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, and #31399 by @ClearlyClaire, @Gargron, and @tribela)\ +- **Change design of modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, #31399, #31555, #31752, #31801, #31883, #31844, #31864, and #31943 by @ClearlyClaire, @Gargron, @tribela and @vmstan)\ The mute, block, and domain block confirmation modals have been completely redesigned to be clearer and include more detailed information on the action to be performed.\ They also have a more modern and consistent design, along with other confirmation modals in the application. - **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan) -- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878 and #29272 by @Gargron) +- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878, #29272, and #31912 by @Gargron) - **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\ All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to read and keeping maximum compatibility across mail clients. - **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\ @@ -171,19 +182,28 @@ The following changelog entries focus on changes visible to users, administrator In addition, the implementation has been significantly reworked, and all follow recommendations are now dismissable.\ This change deprecates the `source` attribute in `Suggestion` entities in the REST API, and replaces it with the new [`sources` attribute](https://docs.joinmastodon.org/entities/Suggestion/#sources). - Change account search algorithm (#30803 by @Gargron) -- **Change streaming server to use its own dependencies and its own docker image** (#24702, #27967, #26850, #28112, #28115, #28137, #28138, #28497, #28548, and #30795 by @TheEssem, @ThisIsMissEm, @jippi, @timetinytim, and @vmstan)\ +- **Change streaming server to use its own dependencies and its own docker image** (#24702, #27967, #26850, #28112, #28115, #28137, #28138, #28497, #28548, #30795, #31612, and #31615 by @TheEssem, @ThisIsMissEm, @jippi, @renchap, @timetinytim, and @vmstan)\ In order to reduce the amount of runtime dependencies, the streaming server has been moved into a separate package and Docker image.\ The `mastodon` image does not contain the streaming server anymore, as it has been moved to its own `mastodon-streaming` image.\ Administrators may need to update their setup accordingly. -- Change how content warnings and filters are displayed in web UI (#31365 by @Gargron) +- Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron) +- Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros) +- Change embedded posts to use web UI (#31766 by @Gargron) +- Change inner borders in media galleries in web UI (#31852 by @Gargron) +- Change design of hide media button in web UI (#31807 by @Gargron) +- Change labels on thread indicators in web UI (#31806 by @Gargron) +- Change report action buttons to be disabled when action has already been taken (#31773, #31822, and #31899 by @ClearlyClaire and @ThisIsMissEm) +- Change width of columns in advanced web UI (#31762 by @Gargron) +- Change design of unread conversations in web UI (#31763 by @Gargron) - Change Web UI to allow viewing and severing relationships with suspended accounts (#27667 by @ClearlyClaire)\ This also adds a `with_suspended` parameter to `GET /api/v1/accounts/relationships` in the REST API. +- Change preview card image size limit from 2MB to 8MB when using libvips (#31904 by @ClearlyClaire) - Change avatars border radius (#31390 by @renchap) - Change counters to be displayed on profile timelines in web UI (#30525 by @Gargron) - Change disabled buttons color in light mode to make the difference more visible (#30998 by @renchap) - Change design of people tab on explore in web UI (#30059 by @Gargron) - Change sidebar text in web UI (#30696 by @Gargron) -- Change "Follow" to "Follow back" and "Mutual" when appropriate in web UI (#28452 and #28465 by @Gargron and @renchap) +- Change "Follow" to "Follow back" and "Mutual" when appropriate in web UI (#28452, #28465, and #31934 by @ClearlyClaire, @Gargron and @renchap) - Change media to be hidden/blurred by default in report modal (#28522 by @ClearlyClaire) - Change order of the "muting" and "blocking" list options in “Data Exports” (#26088 by @fixermark) - Change admin and moderation notes character limit from 500 to 2000 characters (#30288 by @ThisIsMissEm) @@ -197,6 +217,7 @@ The following changelog entries focus on changes visible to users, administrator - Change dropdown menu icon to not be replaced by close icon when open in web UI (#29532 by @Gargron) - Change back button to always appear in advanced web UI (#29551 and #29669 by @Gargron) - Change border of active compose field search inputs (#29832 and #29839 by @vmstan) +- Change instances of Nokogiri HTML4 parsing to HTML5 (#31812, #31815, #31813, and #31814 by @flavorjones) - Change link detection to allow `@` at the end of an URL (#31124 by @adamniedzielski) - Change User-Agent to use Mastodon as the product, and http.rb as platform details (#31192 by @ClearlyClaire) - Change layout and wording of the Content Retention server settings page (#27733 by @vmstan) @@ -249,8 +270,17 @@ The following changelog entries focus on changes visible to users, administrator - Fix various issues when in link preview card generation (#28748, #30017, #30362, #30173, #30853, #30929, #30933, #30957, #30987, and #31144 by @adamniedzielski, @oneiros, @phocks, @timothyjrogers, and @tribela) - Fix handling of missing links in Webfinger responses (#31030 by @adamniedzielski) - Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil) +- Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire) - Fix cross-origin loading of `inert.css` polyfill (#30687 by @louis77) - Fix cutoff of instance name in sign-up form (#30598 by @oneiros) +- Fix invalid date searches returning 503 errors (#31526 by @notchairmk) +- Fix invalid `visibility` values in `POST /api/v1/statuses` returning 500 errors (#31571 by @c960657) +- Fix some components re-rendering spuriously in web UI (#31879 and #31881 by @ClearlyClaire and @Gargron) +- Fix sort order of moderation notes on Reports and Accounts (#31528 by @ThisIsMissEm) +- Fix email language when recipient has no selected locale (#31747 by @ClearlyClaire) +- Fix frequently-used languages not correctly updating in the web UI (#31386 by @c960657) +- Fix `POST /api/v1/statuses` silently ignoring invalid `media_ids` parameter (#31681 by @c960657) +- Fix handling of the `BIND` environment variable in the streaming server (#31624 by @ThisIsMissEm) - Fix empty `aria-hidden` attribute value in logo resources area (#30570 by @mjankowski) - Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm) - Fix right-to-left text in preview cards (#30930 by @ClearlyClaire) diff --git a/docker-compose.yml b/docker-compose.yml index 8053b436ce02f8..c4e8cb73748122 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-beta.1 + image: ghcr.io/mastodon/mastodon:v4.3.0-beta.2 restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -83,7 +83,7 @@ services: # build: # dockerfile: ./streaming/Dockerfile # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-beta.1 + image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-beta.2 restart: always env_file: .env.production command: node ./streaming/index.js @@ -101,7 +101,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-beta.1 + image: ghcr.io/mastodon/mastodon:v4.3.0-beta.2 restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 00e6160890beb2..9b6ea2e4e56c27 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ def patch end def default_prerelease - 'beta.1' + 'beta.2' end def prerelease From f3f06dafe34de5cb8562bc203f3c4557821217e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:05:06 +0200 Subject: [PATCH 031/467] Update dependency babel-loader to v8.4.1 (#31931) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index a0c1bb7bae233e..49b6e241f87c40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5169,17 +5169,17 @@ __metadata: linkType: hard "babel-loader@npm:^8.3.0": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" + version: 8.4.1 + resolution: "babel-loader@npm:8.4.1" dependencies: find-cache-dir: "npm:^3.3.1" - loader-utils: "npm:^2.0.0" + loader-utils: "npm:^2.0.4" make-dir: "npm:^3.1.0" schema-utils: "npm:^2.6.5" peerDependencies: "@babel/core": ^7.0.0 webpack: ">=2" - checksum: 10c0/7b83bae35a12fbc5cdf250e2d36a288305fe5b6d20ab044ab7c09bbf456c8895b80af7a4f1e8b64b5c07a4fd48d4b5144dab40b4bc72a4fed532dc000362f38f + checksum: 10c0/efdca9c3ef502af58b923a32123d660c54fd0be125b7b64562c8a43bda0a3a55dac0db32331674104e7e5184061b75c3a0e395b2c5ccdc7cb2125dd9ec7108d2 languageName: node linkType: hard @@ -11421,7 +11421,7 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:^2.0.0": +"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": version: 2.0.4 resolution: "loader-utils@npm:2.0.4" dependencies: From a397141d78b073246059b36489eb28f27485f9f8 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 04:05:25 -0400 Subject: [PATCH 032/467] Move non-action public method controller callback to private methods (#31933) --- app/controllers/auth/sessions_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index a2fed644fe7f10..ecac4c5ba8e517 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -20,11 +20,6 @@ class Auth::SessionsController < Devise::SessionsController p.form_action(false) end - def check_suspicious! - user = find_user - @login_is_suspicious = suspicious_sign_in?(user) unless user.nil? - end - def create super do |resource| # We only need to call this if this hasn't already been @@ -101,6 +96,11 @@ def require_no_authentication private + def check_suspicious! + user = find_user + @login_is_suspicious = suspicious_sign_in?(user) unless user.nil? + end + def home_paths(resource) paths = [about_path, '/explore'] From b7548dbf290b3eb9adebeac0ff1b0735ffec2872 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:05:59 +0000 Subject: [PATCH 033/467] Update dependency memory_profiler to v1.1.0 (#31947) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4a139155f5bb14..12f1b5db2c81ed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -429,7 +429,7 @@ GEM addressable (~> 2.5) azure-storage-blob (~> 2.0.1) hashie (~> 5.0) - memory_profiler (1.0.2) + memory_profiler (1.1.0) mime-types (3.5.2) mime-types-data (~> 3.2015) mime-types-data (3.2024.0820) From bd86c692cf08bb4c5b853f5b843adf0a0853d16d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:06:44 +0000 Subject: [PATCH 034/467] New Crowdin Translations (automated) (#31959) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 7 +- app/javascript/mastodon/locales/eo.json | 30 +++++ app/javascript/mastodon/locales/es-MX.json | 144 ++++++++++----------- app/javascript/mastodon/locales/fr-CA.json | 2 +- app/javascript/mastodon/locales/fr.json | 2 +- app/javascript/mastodon/locales/gd.json | 2 +- app/javascript/mastodon/locales/he.json | 1 + app/javascript/mastodon/locales/kab.json | 7 + config/locales/es-MX.yml | 12 +- config/locales/kab.yml | 2 + config/locales/lv.yml | 26 +++- config/locales/simple_form.es-MX.yml | 26 ++-- config/locales/simple_form.kab.yml | 6 +- config/locales/simple_form.lv.yml | 2 +- 14 files changed, 168 insertions(+), 101 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 43256506cdc38f..d50ca8dbb59bc9 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -36,6 +36,7 @@ "account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.", "account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}", "account.following": "الاشتراكات", + "account.following_counter": "{count, plural, zero{لا يُتابِع أحدًا} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}", "account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.", "account.go_to_profile": "اذهب إلى الملف الشخصي", "account.hide_reblogs": "إخفاء المعاد نشرها مِن @{name}", @@ -309,7 +310,7 @@ "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", "follow_requests.unlocked_explanation": "حتى وإن كان حسابك غير مقفل، يعتقد فريق {domain} أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.", - "follow_suggestions.curated_suggestion": "اختيار الموظفين", + "follow_suggestions.curated_suggestion": "انتقاه الفريق", "follow_suggestions.dismiss": "لا تُظهرها مجدّدًا", "follow_suggestions.featured_longer": "مختار يدوياً من قِبل فريق {domain}", "follow_suggestions.friends_of_friends_longer": "مشهور بين الأشخاص الذين تتابعهم", @@ -752,7 +753,7 @@ "status.edit": "تعديل", "status.edited": "آخر تعديل يوم {date}", "status.edited_x_times": "عُدّل {count, plural, zero {} one {مرةً واحدة} two {مرّتان} few {{count} مرات} many {{count} مرة} other {{count} مرة}}", - "status.embed": "الحصول على شفرة الإدماج", + "status.embed": "الحصول على شيفرة الدمج", "status.favourite": "فضّل", "status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}", "status.filter": "تصفية هذا المنشور", @@ -773,7 +774,7 @@ "status.reblog": "إعادة النشر", "status.reblog_private": "إعادة النشر إلى الجمهور الأصلي", "status.reblogged_by": "شارَكَه {name}", - "status.reblogs": "{count, plural, one {تعزيز واحد} two {تعزيزتان} few {# تعزيزات} many {# تعزيزات} other {# تعزيزات}}", + "status.reblogs": "{count, plural, one {إعادة نشر واحدة} two {معاد نشرها مرتان} few {# إعادات نشر} many {# إعادات نشر} other {# إعادة نشر}}", "status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.", "status.redraft": "إزالة وإعادة الصياغة", "status.remove_bookmark": "احذفه مِن الفواصل المرجعية", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index ce7201dacfbe98..e162e732d07dab 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -97,6 +97,8 @@ "block_modal.title": "Ĉu bloki uzanton?", "block_modal.you_wont_see_mentions": "Vi ne vidos afiŝojn, ke mencii ilin.", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", + "boost_modal.reblog": "Ĉu diskonigi afiŝon?", + "boost_modal.undo_reblog": "Ĉu ĉesi diskonigi afiŝon?", "bundle_column_error.copy_stacktrace": "Kopii la eraran raporton", "bundle_column_error.error.body": "La petita paĝo ne povas redonitis. Eble estas eraro.", "bundle_column_error.error.title": "Ho, ve!", @@ -188,8 +190,12 @@ "confirmations.redraft.title": "Ĉu forigi kaj redakcii afiŝon?", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?", + "confirmations.reply.title": "Ĉu superskribi afiŝon?", "confirmations.unfollow.confirm": "Ne plu sekvi", "confirmations.unfollow.message": "Ĉu vi certas, ke vi volas ĉesi sekvi {name}?", + "confirmations.unfollow.title": "Ĉu ĉesi sekvi uzanton?", + "content_warning.hide": "Kaŝi afiŝon", + "content_warning.show": "Montri ĉiukaze", "conversation.delete": "Forigi konversacion", "conversation.mark_as_read": "Marki legita", "conversation.open": "Vidi konversacion", @@ -209,6 +215,8 @@ "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", + "domain_block_modal.they_cant_follow": "Neniu el ĉi tiu servilo povas sekvi vin.", + "domain_pill.username": "Uzantnomo", "embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -281,6 +289,12 @@ "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.", + "follow_suggestions.dismiss": "Ne montri denove", + "follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.", + "follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.", + "follow_suggestions.popular_suggestion_longer": "Populara en {domain}", + "follow_suggestions.view_all": "Vidi ĉiujn", + "follow_suggestions.who_to_follow": "Kiun sekvi", "followed_tags": "Sekvataj kradvortoj", "footer.about": "Pri", "footer.directory": "Profilujo", @@ -374,6 +388,7 @@ "limited_account_hint.action": "Montru profilon ĉiukaze", "limited_account_hint.title": "La profilo estas kaŝita de la moderigantoj de {domain}.", "link_preview.author": "De {name}", + "link_preview.shares": "{count, plural, one {{counter} afiŝo} other {{counter} afiŝoj}}", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", "lists.delete": "Forigi la liston", @@ -390,8 +405,12 @@ "lists.subheading": "Viaj listoj", "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", "loading_indicator.label": "Ŝargado…", + "media_gallery.hide": "Kaŝi", "moved_to_account_banner.text": "Via konto {disabledAccount} estas malvalidigita ĉar vi movis ĝin al {movedToAccount}.", + "mute_modal.show_options": "Montri agordojn", + "mute_modal.they_can_mention_and_follow": "Ili povas mencii kaj sekvi vin, sed vi ne vidos ilin.", "navigation_bar.about": "Pri", + "navigation_bar.administration": "Administrado", "navigation_bar.advanced_interface": "Malfermi altnivelan retpaĝan interfacon", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", @@ -422,10 +441,18 @@ "notification.favourite": "{name} stelumis vian afiŝon", "notification.follow": "{name} eksekvis vin", "notification.follow_request": "{name} petis sekvi vin", + "notification.label.mention": "Mencii", + "notification.label.private_mention": "Privata mencio", + "notification.label.private_reply": "Privata respondo", + "notification.label.reply": "Respondi", + "notification.mention": "Mencii", + "notification.moderation-warning.learn_more": "Lerni pli", "notification.own_poll": "Via enketo finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", + "notification.relationships_severance_event.learn_more": "Lerni pli", "notification.status": "{name} ĵus afiŝis", "notification.update": "{name} redaktis afiŝon", + "notification_requests.accept": "Akcepti", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", "notifications.column_settings.admin.report": "Novaj raportoj:", @@ -457,6 +484,8 @@ "notifications.permission_denied": "Labortablaj sciigoj ne disponeblas pro peto antaŭe rifuzita de retumiloj", "notifications.permission_denied_alert": "Labortablaj sciigoj ne povas esti ebligitaj, ĉar retumilpermeso antaŭe estis rifuzita", "notifications.permission_required": "Labortablaj sciigoj ne disponeblas ĉar la bezonata permeso ne estis donita.", + "notifications.policy.accept": "Akcepti", + "notifications.policy.filter_new_accounts_title": "Novaj kontoj", "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", @@ -581,6 +610,7 @@ "report_notification.attached_statuses": "{count, plural, one {{count} afiŝo almetita} other {{count} afiŝoj almetitaj}}", "report_notification.categories.legal": "Laŭleĝa", "report_notification.categories.other": "Alia", + "report_notification.categories.other_sentence": "alia", "report_notification.categories.spam": "Trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", "report_notification.open": "Malfermi la raporton", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index d1abc392bf0950..7b09ada9f828e7 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -39,11 +39,11 @@ "account.following_counter": "{count, plural, one {{counter} siguiendo} other {{counter} siguiendo}}", "account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.go_to_profile": "Ir al perfil", - "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.hide_reblogs": "Ocultar impulsos de @{name}", "account.in_memoriam": "En memoria.", "account.joined_short": "Se unió", "account.languages": "Cambiar idiomas suscritos", - "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", + "account.link_verified_on": "El proprietario de este enlace fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.media": "Multimedia", "account.mention": "Mencionar a @{name}", @@ -61,7 +61,7 @@ "account.requested": "Esperando aprobación. Haga clic para cancelar la solicitud de seguimiento", "account.requested_follow": "{name} ha solicitado seguirte", "account.share": "Compartir el perfil de @{name}", - "account.show_reblogs": "Mostrar retoots de @{name}", + "account.show_reblogs": "Mostrar impulsos de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Mostrar a {domain}", @@ -70,8 +70,8 @@ "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications_short": "Dejar de silenciar notificaciones", - "account.unmute_short": "Desmutear", - "account_note.placeholder": "Clic para añadir nota", + "account.unmute_short": "Dejar de silenciar", + "account_note.placeholder": "Haz clic para agregar una nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después de unirse", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después de unirse", "admin.dashboard.retention.average": "Promedio", @@ -97,7 +97,7 @@ "block_modal.title": "¿Bloquear usuario?", "block_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", - "boost_modal.reblog": "¿Impulsar la publicación?", + "boost_modal.reblog": "¿Deseas impulsar la publicación?", "boost_modal.undo_reblog": "¿Dejar de impulsar la publicación?", "bundle_column_error.copy_stacktrace": "Copiar informe de error", "bundle_column_error.error.body": "La página solicitada no pudo ser renderizada. Podría deberse a un error en nuestro código o a un problema de compatibilidad con el navegador.", @@ -130,7 +130,7 @@ "column.lists": "Listas", "column.mutes": "Usuarios silenciados", "column.notifications": "Notificaciones", - "column.pins": "Toots fijados", + "column.pins": "Publicaciones fijadas", "column.public": "Línea de tiempo federada", "column_back_button.label": "Atrás", "column_header.hide_settings": "Ocultar configuración", @@ -148,10 +148,10 @@ "compose.published.body": "Publicado.", "compose.published.open": "Abrir", "compose.saved.body": "Publicación guardada.", - "compose_form.direct_message_warning_learn_more": "Aprender mas", + "compose_form.direct_message_warning_learn_more": "Saber más", "compose_form.encryption_warning": "Las publicaciones en Mastodon no están cifradas de extremo a extremo. No comparta ninguna información sensible en Mastodon.", - "compose_form.hashtag_warning": "Este toot no será listado bajo ningún hashtag dado que no es público. Solo toots públicos pueden ser buscados por hashtag.", - "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", + "compose_form.hashtag_warning": "Esta publicación no será listada bajo ninguna etiqueta dado que no es pública. Solo publicaciones públicas pueden ser buscadas por etiqueta.", + "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus publicaciones solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.placeholder": "¿En qué estás pensando?", "compose_form.poll.duration": "Duración de la encuesta", @@ -165,32 +165,32 @@ "compose_form.publish_form": "Publicar", "compose_form.reply": "Respuesta", "compose_form.save_changes": "Actualización", - "compose_form.spoiler.marked": "Texto oculto tras la advertencia", - "compose_form.spoiler.unmarked": "Texto no oculto", + "compose_form.spoiler.marked": "Quitar advertencia de contenido", + "compose_form.spoiler.unmarked": "Añadir advertencia de contenido", "compose_form.spoiler_placeholder": "Advertencia de contenido (opcional)", "confirmation_modal.cancel": "Cancelar", "confirmations.block.confirm": "Bloquear", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", + "confirmations.delete.message": "¿Estás seguro de que quieres borrar esta publicación?", "confirmations.delete.title": "¿Eliminar publicación?", "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", - "confirmations.delete_list.title": "¿Eliminar lista?", + "confirmations.delete_list.title": "¿Deseas eliminar la lista?", "confirmations.discard_edit_media.confirm": "Descartar", "confirmations.discard_edit_media.message": "Tienes cambios sin guardar en la descripción o vista previa del archivo, ¿deseas descartarlos de cualquier manera?", "confirmations.edit.confirm": "Editar", "confirmations.edit.message": "Editar sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", - "confirmations.edit.title": "¿Sobrescribir publicación?", + "confirmations.edit.title": "¿Sobreescribir publicación?", "confirmations.logout.confirm": "Cerrar sesión", - "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?", - "confirmations.logout.title": "¿Cerrar sesión?", + "confirmations.logout.message": "¿Estás seguro de que quieres cerrar la sesión?", + "confirmations.logout.title": "¿Deseas cerrar sesión?", "confirmations.mute.confirm": "Silenciar", "confirmations.redraft.confirm": "Borrar y volver a borrador", "confirmations.redraft.message": "¿Estás seguro que quieres borrar esta publicación y editarla? Los favoritos e impulsos se perderán, y las respuestas a la publicación original quedarán separadas.", "confirmations.redraft.title": "¿Borrar y volver a redactar la publicación?", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", - "confirmations.reply.title": "¿Sobrescribir publicación?", + "confirmations.reply.title": "¿Sobreescribir publicación?", "confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", @@ -213,8 +213,8 @@ "dismissable_banner.dismiss": "Descartar", "dismissable_banner.explore_links": "Estas noticias están siendo discutidas por personas en este y otros servidores de la red descentralizada en este momento.", "dismissable_banner.explore_statuses": "Estas son las publicaciones que están en tendencia en la red ahora. Las publicaciones recientes con más impulsos y favoritos se muestran más arriba.", - "dismissable_banner.explore_tags": "Se trata de hashtags que están ganando adeptos en las redes sociales hoy en día. Los hashtags que son utilizados por más personas diferentes se clasifican mejor.", - "dismissable_banner.public_timeline": "Estos son los toots públicos más recientes de personas en la web social a las que sigue la gente en {domain}.", + "dismissable_banner.explore_tags": "Se trata de etiquetas que están ganando adeptos en las redes sociales hoy en día. Las etiquetas que son utilizadas por más personas diferentes se clasifican mejor.", + "dismissable_banner.public_timeline": "Estas son las publicaciones públicas más recientes de personas en la web social a las que sigue la gente en {domain}.", "domain_block_modal.block": "Bloquear servidor", "domain_block_modal.block_account_instead": "Bloquear @{name} en su lugar", "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este servidor pueden interactuar con tus publicaciones antiguas.", @@ -236,7 +236,7 @@ "domain_pill.your_handle": "Tu alias:", "domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.", "domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.", - "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", + "embed.instructions": "Añade esta publicación a tu sitio web con el siguiente código.", "embed.preview": "Así es como se verá:", "emoji_button.activity": "Actividad", "emoji_button.clear": "Borrar", @@ -249,16 +249,16 @@ "emoji_button.objects": "Objetos", "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", - "emoji_button.search": "Buscar…", + "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", "empty_column.account_hides_collections": "Este usuario ha elegido no hacer disponible esta información", "empty_column.account_suspended": "Cuenta suspendida", - "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_timeline": "¡No hay publicaciones aquí!", "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", - "empty_column.bookmarked_statuses": "Aún no tienes ningún toot guardado como marcador. Cuando guardes uno, se mostrará aquí.", + "empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.", "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", @@ -266,8 +266,8 @@ "empty_column.favourited_statuses": "Todavía no tienes publicaciones favoritas. Cuando le des favorito a una publicación se mostrarán acá.", "empty_column.favourites": "Todavía nadie marcó como favorito esta publicación. Cuando alguien lo haga, se mostrará aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", - "empty_column.followed_tags": "No estás siguiendo ningún hashtag todavía. Cuando lo hagas, aparecerá aquí.", - "empty_column.hashtag": "No hay nada en este hashtag aún.", + "empty_column.followed_tags": "No estás siguiendo ninguna etiqueta todavía. Cuando lo hagas, aparecerá aquí.", + "empty_column.hashtag": "No hay nada en esta etiqueta aún.", "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", @@ -304,7 +304,7 @@ "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", "filter_warning.matches_filter": "Coincide con el filtro “{title}”", - "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas", + "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# people}} que puede que tú conozcas", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", "firehose.local": "Este servidor", @@ -315,7 +315,7 @@ "follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.dismiss": "No mostrar de nuevo", "follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}", - "follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues", + "follow_suggestions.friends_of_friends_longer": "Popular entre las personas a las que sigues", "follow_suggestions.hints.featured": "Este perfil ha sido seleccionado a mano por el equipo de {domain}.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", "follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.", @@ -323,11 +323,11 @@ "follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.", "follow_suggestions.personalized_suggestion": "Sugerencia personalizada", "follow_suggestions.popular_suggestion": "Sugerencia popular", - "follow_suggestions.popular_suggestion_longer": "Populares en {domain}", + "follow_suggestions.popular_suggestion_longer": "Popular en {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Similares a los perfiles que has seguido recientemente", "follow_suggestions.view_all": "Ver todo", "follow_suggestions.who_to_follow": "Recomendamos seguir", - "followed_tags": "Hashtags seguidos", + "followed_tags": "Etiquetas seguidas", "footer.about": "Acerca de", "footer.directory": "Directorio de perfiles", "footer.get_app": "Obtener la aplicación", @@ -344,8 +344,8 @@ "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", "hashtag.column_settings.select.placeholder": "Introducir etiquetas…", "hashtag.column_settings.tag_mode.all": "Todos estos", - "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", - "hashtag.column_settings.tag_mode.none": "Ninguno de estos", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", + "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluye etiquetas adicionales para esta columna", "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", @@ -361,7 +361,7 @@ "hints.profiles.see_more_posts": "Ver más publicaciones en {domain}", "hints.threads.replies_may_be_missing": "Puede que no se muestren algunas respuestas de otros servidores.", "hints.threads.see_more": "Ver más respuestas en {domain}", - "home.column_settings.show_reblogs": "Mostrar retoots", + "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", "home.pending_critical_update.body": "¡Por favor actualiza tu servidor Mastodon lo antes posible!", @@ -369,7 +369,7 @@ "home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!", "home.show_announcements": "Mostrar anuncios", "ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.", - "ignore_notifications_modal.filter_instead": "Filtrar en vez de ignorar", + "ignore_notifications_modal.filter_instead": "Filtrar en su lugar", "ignore_notifications_modal.filter_to_act_users": "Aún podrás aceptar, rechazar o reportar usuarios", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ayuda a evitar confusiones potenciales", "ignore_notifications_modal.filter_to_review_separately": "Puedes revisar las notificaciones filtradas por separado", @@ -399,13 +399,13 @@ "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", - "keyboard_shortcuts.boost": "retootear", + "keyboard_shortcuts.boost": "Impulsar publicación", "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", "keyboard_shortcuts.down": "mover hacia abajo en la lista", - "keyboard_shortcuts.enter": "abrir estado", + "keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourites": "Abrir lista de favoritos", "keyboard_shortcuts.federated": "abrir el timeline federado", @@ -419,16 +419,16 @@ "keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.open_media": "para abrir archivos multimedia", - "keyboard_shortcuts.pinned": "abrir la lista de toots destacados", + "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones fijadas", "keyboard_shortcuts.profile": "abrir el perfil del autor", - "keyboard_shortcuts.reply": "para responder", + "keyboard_shortcuts.reply": "Responder a la publicación", "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", "keyboard_shortcuts.search": "para poner el foco en la búsqueda", "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", - "keyboard_shortcuts.toot": "para comenzar un nuevo toot", + "keyboard_shortcuts.toot": "Comenzar una nueva publicación", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", @@ -474,7 +474,7 @@ "navigation_bar.blocks": "Usuarios bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Historia local", - "navigation_bar.compose": "Escribir un nuevo toot", + "navigation_bar.compose": "Redactar una nueva publicación", "navigation_bar.direct": "Menciones privadas", "navigation_bar.discover": "Descubrir", "navigation_bar.domain_blocks": "Dominios ocultos", @@ -482,7 +482,7 @@ "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes para seguirte", - "navigation_bar.followed_tags": "Hashtags seguidos", + "navigation_bar.followed_tags": "Etiquetas seguidas", "navigation_bar.follows_and_followers": "Siguiendo y seguidores", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Cerrar sesión", @@ -490,25 +490,25 @@ "navigation_bar.mutes": "Usuarios silenciados", "navigation_bar.opened_in_classic_interface": "Publicaciones, cuentas y otras páginas específicas se abren por defecto en la interfaz web clásica.", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Toots fijados", + "navigation_bar.pins": "Publicaciones fijadas", "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Historia federada", "navigation_bar.search": "Buscar", "navigation_bar.security": "Seguridad", "not_signed_in_indicator.not_signed_in": "Necesitas iniciar sesión para acceder a este recurso.", "notification.admin.report": "{name} denunció a {target}", - "notification.admin.report_account": "{name} informó de {count, plural, one {una publicación} other {# publicaciones}} de {target} por {category}", - "notification.admin.report_account_other": "{name} informó de {count, plural, one {una publicación} other {# publicaciones}} de {target}", - "notification.admin.report_statuses": "{name} informó de {target} por {category}", - "notification.admin.report_statuses_other": "{name} informó de {target}", + "notification.admin.report_account": "{name} reportó {count, plural, one {una publicación} other {# publicaciones}} de {target} por {category}", + "notification.admin.report_account_other": "{name} reportó {count, plural, one {una publicación} other {# publicaciones}} de {target}", + "notification.admin.report_statuses": "{name} reportó {target} por {category}", + "notification.admin.report_statuses_other": "{name} reportó {target}", "notification.admin.sign_up": "{name} se unio", - "notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# más} other {# más}} se registraron", + "notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} se registraron", "notification.favourite": "{name} marcó como favorita tu publicación", - "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita", + "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# más} other {# más}} te siguieron", + "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", "notification.follow_request": "{name} ha solicitado seguirte", - "notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte", + "notification.follow_request.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} han solicitado seguirte", "notification.label.mention": "Mención", "notification.label.private_mention": "Mención privada", "notification.label.private_reply": "Respuesta privada", @@ -519,14 +519,14 @@ "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", "notification.moderation_warning.action_disable": "Tu cuenta ha sido desactivada.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Se han marcado como sensibles algunas de tus publicaciones.", - "notification.moderation_warning.action_none": "Tu cuenta ha recibido un aviso de moderación.", + "notification.moderation_warning.action_none": "Tu cuenta ha recibido una advertencia de moderación.", "notification.moderation_warning.action_sensitive": "De ahora en adelante, todas tus publicaciones se marcarán como sensibles.", "notification.moderation_warning.action_silence": "Tu cuenta ha sido limitada.", "notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.", "notification.own_poll": "Tu encuesta ha terminado", - "notification.poll": "Una encuesta ha terminado", - "notification.reblog": "{name} ha retooteado tu estado", - "notification.reblog.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} impulsaron tu publicación", + "notification.poll": "Una encuesta en la que has votado ha terminado", + "notification.reblog": "{name} ha impulsado tu publicación", + "notification.reblog.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} impulsaron tu publicación", "notification.relationships_severance_event": "Conexiones perdidas con {name}", "notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspendido {target}, lo que significa que ya no puedes recibir actualizaciones de sus cuentas o interactuar con ellas.", "notification.relationships_severance_event.domain_block": "Un administrador de {from} ha bloqueado {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que sigues.", @@ -536,7 +536,7 @@ "notification.update": "{name} editó una publicación", "notification_requests.accept": "Aceptar", "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}", - "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar solicitud} other {Aceptar solicitudes}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Solicitud aceptada} other {Solicitudes aceptadas}}", "notification_requests.confirm_accept_multiple.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Quieres continuar?", "notification_requests.confirm_accept_multiple.title": "¿Aceptar las solicitudes?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}", @@ -546,8 +546,8 @@ "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}", "notification_requests.edit_selection": "Editar", "notification_requests.exit_selection": "Hecho", - "notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta ha sido limitada por un moderador.", - "notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta o su servidor ha sido limitada por un moderador.", + "notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas, ya que la cuenta ha sido limitada por un moderador.", + "notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas, ya que la cuenta o su servidor ha sido limitada por un moderador.", "notification_requests.maximize": "Maximizar", "notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas", "notification_requests.notifications_from": "Notificaciones de {name}", @@ -555,7 +555,7 @@ "notification_requests.view": "Ver notificaciones", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro de querer borrar permanentemente todas tus notificaciones?", - "notifications.clear_title": "¿Borrar notificaciones?", + "notifications.clear_title": "¿Limpiar notificaciones?", "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Registros nuevos:", "notifications.column_settings.alert": "Notificaciones de escritorio", @@ -567,7 +567,7 @@ "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", - "notifications.column_settings.reblog": "Retoots:", + "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", "notifications.column_settings.status": "Nuevas publicaciones:", @@ -575,7 +575,7 @@ "notifications.column_settings.unread_notifications.highlight": "Destacar notificaciones no leídas", "notifications.column_settings.update": "Ediciones:", "notifications.filter.all": "Todos", - "notifications.filter.boosts": "Retoots", + "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menciones", @@ -621,7 +621,7 @@ "onboarding.profile.display_name_hint": "Tu nombre completo o tu apodo…", "onboarding.profile.lead": "Siempre puedes completar esto más tarde en los ajustes, donde hay aún más opciones de personalización disponibles.", "onboarding.profile.note": "Biografía", - "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #hashtags…", + "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #etiquetas…", "onboarding.profile.save_and_continue": "Guardar y continuar", "onboarding.profile.title": "Configuración del perfil", "onboarding.profile.upload_avatar": "Subir foto de perfil", @@ -639,7 +639,7 @@ "onboarding.steps.publish_status.title": "Escribe tu primera publicación", "onboarding.steps.setup_profile.body": "Si rellenas tu perfil tendrás más posibilidades de que otros interactúen contigo.", "onboarding.steps.setup_profile.title": "Personaliza tu perfil", - "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!", + "onboarding.steps.share_profile.body": "Dile a tus amigos cómo encontrarte en Mastodon", "onboarding.steps.share_profile.title": "Comparte tu perfil", "onboarding.tips.2fa": "¿Sabías que? Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de su cuenta. Funciona con cualquier aplicación TOTP de su elección, ¡no necesitas número de teléfono!", "onboarding.tips.accounts_from_other_servers": "¿Sabías que? Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!", @@ -665,7 +665,7 @@ "privacy.private.short": "Seguidores", "privacy.public.long": "Cualquiera dentro y fuera de Mastodon", "privacy.public.short": "Público", - "privacy.unlisted.additional": "Esto se comporta exactamente igual que el público, excepto que el post no aparecerá en las cronologías en directo o en los hashtags, la exploración o busquedas en Mastodon, incluso si está optado por activar la cuenta de usuario.", + "privacy.unlisted.additional": "Esto se comporta exactamente igual que el público, excepto que el post no aparecerá en las cronologías en directo o en las etiquetas, la exploración o busquedas en Mastodon, incluso si está optado por activar la cuenta de usuario.", "privacy.unlisted.long": "Menos fanfares algorítmicos", "privacy.unlisted.short": "Público silencioso", "privacy_policy.last_updated": "Actualizado por última vez {date}", @@ -699,7 +699,7 @@ "report.category.title_account": "perfil", "report.category.title_status": "publicación", "report.close": "Realizado", - "report.comment.title": "¿Hay algo más que usted cree que debamos saber?", + "report.comment.title": "¿Hay algo más que creas que deberíamos saber?", "report.forward": "Reenviar a {target}", "report.forward_hint": "Esta cuenta es de otro servidor. ¿Enviar una copia anonimizada del informe allí también?", "report.mute": "Silenciar", @@ -776,9 +776,9 @@ "status.admin_status": "Abrir este estado en la interfaz de moderación", "status.block": "Bloquear a @{name}", "status.bookmark": "Añadir marcador", - "status.cancel_reblog_private": "Eliminar retoot", - "status.cannot_reblog": "Este toot no puede retootearse", - "status.continued_thread": "Continuó el hilo", + "status.cancel_reblog_private": "Deshacer impulso", + "status.cannot_reblog": "Esta publicación no puede ser impulsada", + "status.continued_thread": "Hilo continuado", "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", "status.detailed_status": "Vista de conversación detallada", @@ -803,16 +803,16 @@ "status.mute_conversation": "Silenciar conversación", "status.open": "Expandir estado", "status.pin": "Fijar", - "status.pinned": "Toot fijado", + "status.pinned": "Publicación fijada", "status.read_more": "Leer más", - "status.reblog": "Retootear", + "status.reblog": "Impulsar", "status.reblog_private": "Implusar a la audiencia original", - "status.reblogged_by": "Retooteado por {name}", + "status.reblogged_by": "Impulsado por {name}", "status.reblogs": "{count, plural, one {impulso} other {impulsos}}", - "status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.", + "status.reblogs.empty": "Nadie impulsó esta publicación todavía. Cuando alguien lo haga, aparecerá aquí.", "status.redraft": "Borrar y volver a borrador", "status.remove_bookmark": "Eliminar marcador", - "status.replied_in_thread": "Respondió en el hilo", + "status.replied_in_thread": "Respondido en el hilo", "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index e89256bc2f80bb..8e33c6844290cc 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -312,7 +312,7 @@ "follow_request.authorize": "Autoriser", "follow_request.reject": "Rejeter", "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir peut-être consulter manuellement les demandes d'abonnement de ces comptes.", - "follow_suggestions.curated_suggestion": "Choix du staff", + "follow_suggestions.curated_suggestion": "Sélectionné par l'équipe", "follow_suggestions.dismiss": "Ne plus afficher", "follow_suggestions.featured_longer": "Sélectionné par l'équipe de {domain}", "follow_suggestions.friends_of_friends_longer": "Populaire dans le cercle des personnes que vous suivez", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 03cb6471d6d068..e73ddf734f1b5e 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -312,7 +312,7 @@ "follow_request.authorize": "Accepter", "follow_request.reject": "Rejeter", "follow_requests.unlocked_explanation": "Même si votre compte n’est pas privé, l’équipe de {domain} a pensé que vous pourriez vouloir consulter manuellement les demandes de suivi de ces comptes.", - "follow_suggestions.curated_suggestion": "Choix du staff", + "follow_suggestions.curated_suggestion": "Sélectionné par l'équipe", "follow_suggestions.dismiss": "Ne plus afficher", "follow_suggestions.featured_longer": "Sélectionné par l'équipe de {domain}", "follow_suggestions.friends_of_friends_longer": "Populaire dans le cercle des personnes que vous suivez", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 97748e0ee97b1e..2b93662694aed6 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -36,7 +36,7 @@ "account.followers.empty": "Chan eil neach sam bith a’ leantainn air a’ chleachdaiche seo fhathast.", "account.followers_counter": "{count, plural, one {{counter} neach-leantainn} other {{counter} luchd-leantainn}}", "account.following": "A’ leantainn", - "account.following_counter": "{count, plural, one {Tha {counter} a’ leantainn} other {Tha {counter} a’ leantainn}}", + "account.following_counter": "{count, plural, one {A’ leantainn {counter}} other {A’ leantainn {counter}}}", "account.follows.empty": "Chan eil an cleachdaiche seo a’ leantainn neach sam bith fhathast.", "account.go_to_profile": "Tadhail air a’ phròifil", "account.hide_reblogs": "Falaich na brosnachaidhean o @{name}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index de20d505c04c06..5e6ab56c238909 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -787,6 +787,7 @@ "status.edit": "עריכה", "status.edited": "נערך לאחרונה {date}", "status.edited_x_times": "נערך {count, plural, one {פעם {count}} other {{count} פעמים}}", + "status.embed": "העתקת קוד להטמעה", "status.favourite": "חיבוב", "status.favourites": "{count, plural, one {חיבוב אחד} two {זוג חיבובים} other {# חיבובים}}", "status.filter": "סנן הודעה זו", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 24286a119feb98..822fb59e6f85f8 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -2,12 +2,14 @@ "about.blocks": "Ulac agbur", "about.contact": "Anermis:", "about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.", + "about.domain_blocks.no_reason_available": "Ulac taɣẓint", "about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.", "about.domain_blocks.silenced.title": "Ɣur-s talast", "about.domain_blocks.suspended.title": "Yeḥbes", "about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.", "about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}", "about.rules": "Ilugan n uqeddac", + "account.account_note_header": "Tamawt tudmawant", "account.add_or_remove_from_list": "Rnu neɣ kkes seg tebdarin", "account.badges.bot": "Aṛubut", "account.badges.group": "Agraw", @@ -46,6 +48,7 @@ "account.mute_notifications_short": "Susem alɣuten", "account.mute_short": "Sgugem", "account.muted": "Yettwasgugem", + "account.mutual": "Temṭafarem", "account.no_bio": "Ulac aglam i d-yettunefken.", "account.open_original_page": "Ldi asebter anasli", "account.posts": "Tisuffaɣ", @@ -62,6 +65,7 @@ "account.unendorse": "Ur ttwellih ara fell-as deg umaɣnu-inek", "account.unfollow": "Ur ṭṭafaṛ ara", "account.unmute": "Kkes asgugem ɣef @{name}", + "account.unmute_notifications_short": "Serreḥ i yilɣa", "account.unmute_short": "Kkes asgugem", "account_note.placeholder": "Ulac iwenniten", "admin.dashboard.retention.cohort_size": "Iseqdacen imaynuten", @@ -152,6 +156,7 @@ "confirmations.edit.message": "Abeddel tura ad d-yaru izen-nni i d-tegreḍ akka tura. Tetḥeqqeḍ tebɣiḍ ad tkemmleḍ?", "confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", + "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", "confirmations.mute.confirm": "Sgugem", "confirmations.redraft.confirm": "Kkes sakin ɛiwed tira", "confirmations.reply.confirm": "Err", @@ -351,6 +356,7 @@ "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", "loading_indicator.label": "Yessalay-d …", + "media_gallery.hide": "Ffer-it", "mute_modal.hide_from_notifications": "Ffer-it deg ulɣuten", "mute_modal.hide_options": "Ffer tinefrunin", "mute_modal.indefinite": "Alamma ssnesreɣ asgugem fell-as", @@ -405,6 +411,7 @@ "notification.status": "{name} akken i d-yessufeɣ", "notification_requests.accept": "Qbel", "notification_requests.dismiss": "Agi", + "notification_requests.edit_selection": "Ẓreg", "notification_requests.exit_selection": "Immed", "notification_requests.notifications_from": "Alɣuten sɣur {name}", "notifications.clear": "Sfeḍ alɣuten", diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index ebe26c3f14f398..1ea346a00c7119 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -175,7 +175,7 @@ es-MX: approve_appeal: Aprobar apelación approve_user: Aprobar Usuario assigned_to_self_report: Asignar Reporte - change_email_user: Cambiar Correo Electrónico del Usuario + change_email_user: Cambiar correo electrónico por usuario change_role_user: Cambiar rol del usuario confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia @@ -761,7 +761,7 @@ es-MX: desc_html: Esto se basa en scripts externos de hCaptcha, que pueden suponer una preocupación de seguridad y privacidad. Además, esto puede volver el proceso de registro significativamente menos accesible para algunas personas (especialmente con discapacidades). Por estas razones, por favor, considera medidas alternativas como el registro por aprobación manual o con invitación. title: Solicita a los nuevos usuarios que resuelvan un CAPTCHA para confirmar su cuenta content_retention: - danger_zone: Zona peligrosa + danger_zone: Zona de peligro preamble: Controlar cómo el contenido generado por el usuario se almacena en Mastodon. title: Retención de contenido default_noindex: @@ -944,9 +944,9 @@ es-MX: statuses: allow: Permitir publicación allow_account: Permitir autor - confirm_allow: "¿Estás seguro de que deseas permitir los estados seleccionados?" + confirm_allow: "¿Estás seguro de que deseas permitir las publicaciones seleccionadas?" confirm_allow_account: "¿Estás seguro de que deseas permitir las cuentas seleccionadas?" - confirm_disallow: "¿Estás seguro de que deseas restringir los estados seleccionados?" + confirm_disallow: "¿Estás seguro de que deseas restringir las publicaciones seleccionadas?" confirm_disallow_account: "¿Estás seguro de que deseas restringir las cuentas seleccionadas?" description_html: Estos son publicaciones que su servidor conoce que están siendo compartidas y marcadas como favoritas mucho en este momento. Pueden ayudar a tus usuarios nuevos y retornantes a encontrar más gente a la que seguir. No hay mensajes que se muestren públicamente hasta que apruebes el autor y el autor permita que su cuenta sea sugerida a otros. También puedes permitir o rechazar mensajes individuales. disallow: Rechazar publicación @@ -1152,7 +1152,7 @@ es-MX: title: Crear cuenta de Mastodon en %{domain}. status: account_status: Estado de la cuenta - confirming: Esperando confirmación de correo electrónico. + confirming: Esperando a que se complete la confirmación por correo electrónico. functional: Tu cuenta está completamente operativa. pending: Tu solicitud está pendiente de revisión por nuestro personal. Eso puede tardar un tiempo. Recibirás un correo electrónico cuando tu solicitud sea aprobada. redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. @@ -1538,7 +1538,7 @@ es-MX: update: subject: "%{name} editó una publicación" notifications: - administration_emails: Notificaciones administrativas por correo + administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:' number: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 7c3d526702665e..7044983ac9fe90 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -703,6 +703,7 @@ kab: prev: Win iɛeddan preferences: other: Wiyaḍ + posting_defaults: Iɣewwaṛen n usuffeɣ imezwura privacy: privacy: Tabaḍnit search: Anadi @@ -779,6 +780,7 @@ kab: import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan + notifications: Alɣuten s imayl preferences: Imenyafen profile: Ameɣnu relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 55a0751811efad..88faeae82bd3dc 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1,7 +1,7 @@ --- lv: about: - about_mastodon_html: 'Nākotnes sociālais tīkls: bez reklāmām, bez korporatīvās uzraudzības, ētisks dizains un decentralizācija! Pārvaldi savus datus ar Mastodon!' + about_mastodon_html: 'Nākotnes sabiedriskais tīkls: bez reklāmām, bez korporatīvās novērošanas, ētiska projektēšana un decentralizēšana. Pārvaldi savus datus ar Mastodon!' contact_missing: Nav uzstādīts contact_unavailable: N/A hosted_on: Mastodon mitināts %{domain} @@ -613,6 +613,7 @@ lv: created_at: Ziņoti delete_and_resolve: Izdzēst rakstus forwarded: Pārsūtīti + forwarded_replies_explanation: Šis ziņojums ir no attāla lietotāja un par attālu saturu. Tas tika pārvirzīts šeit, jo saturs, par kuru tika ziņots, ir atbilde vienam no šī servera lietotājiem. forwarded_to: Pārsūtīti %{domain} mark_as_resolved: Atzīmēt kā atrisinātu mark_as_sensitive: Atzīmēt kā sensitīvu @@ -633,6 +634,7 @@ lv: report: 'Ziņojums #%{id}' reported_account: Ziņotais konts reported_by: Ziņoja + reported_with_application: Ziņots no lietotnes resolved: Atrisināts resolved_msg: Ziņojums veiksmīgi atrisināts! skip_to_actions: Pāriet uz darbībām @@ -876,7 +878,13 @@ lv: pending_review: Gaida pārskatīšanu review_requested: Pieprasīta pārskatīšana reviewed: Pārskatīts + title: Stāvoklis + name: Nosaukums + newest: Jaunākie + oldest: Vecākie + reset: Atiestatīt review: Pārskatīt stāvokli + search: Meklēt title: Tēmturi updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti title: Administrēšana @@ -1121,6 +1129,9 @@ lv: view_strikes: Skati iepriekšējos brīdinājumus par savu kontu too_fast: Veidlapa ir iesniegta pārāk ātri, mēģini vēlreiz. use_security_key: Lietot drošības atslēgu + author_attribution: + s_blog: "%{name} emuāri" + title: Autora attiecinājums challenge: confirm: Turpināt hint_html: "Padoms: Nākamās stundas laikā mēs tev vairs neprasīsim paroli." @@ -1158,6 +1169,9 @@ lv: before: 'Pirms turpināšanas lūgums uzmanīgi izlasīt šīs piezīmes:' caches: Citu serveru kešatmiņā saglabātais saturs var saglabāties data_removal: Tavas ziņas un citi dati tiks neatgriezeniski noņemti + email_change_html: Savu e-pasta adresi var mainīt bez sava konta izdzēšanas + email_contact_html: Ja tas joprojām nav saņemts, var nosūtīt e-pastu uz %{email}, lai saņemtu palīdzību + email_reconfirmation_html: Ja netiek saņemts apstiprinājuma e-pasta ziņojums, to var pieprasīt vēlreiz irreversible: Tu nevarēsi atjaunot vai atkārtoti aktivizēt savu kontu more_details_html: Plašāku informāciju skatīt privātuma politika. username_available: Tavs lietotājvārds atkal būs pieejams @@ -1377,6 +1391,7 @@ lv: '86400': 1 diena expires_in_prompt: Nekad generate: Ģenerēt uzaicinājuma saiti + invalid: Šis uzaicinājums nav derīgs invited_by: 'Tevi uzaicināja:' max_uses: one: 1 lietojums @@ -1395,6 +1410,7 @@ lv: authentication_methods: otp: divpakāpju autentifikācijas lietotne password: parole + sign_in_token: e-pasta drošības kods webauthn: drošības atslēgas description_html: Ja pamani darbības, kuras neatpazīsti, jāapsver iespēja nomainīt savu paroli un iespējot divpakāpju autentifikāciju. empty: Nav pieejama autentifikācijas vēsture @@ -1820,14 +1836,20 @@ lv: explanation: Šeit ir daži padomi, kā sākt darbu feature_action: Uzzināt vairāk feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi. + feature_moderation_title: Moderēšana, kādai tai būtu jābūt follow_action: Sekot + follow_step: Sekošana aizraujošiem cilvēkiem ir viss, par ko ir Mastodon. follow_title: Pielāgo savu mājas barotni + follows_subtitle: Seko labi zināmiem kontiem follows_title: Kam sekot follows_view_more: Rādīt vairāk cilvēku, kuriem sekot hashtags_recent_count: one: "%{people} cilvēks pēdējās 2 dienās" other: "%{people} cilvēki pēdējās 2 dienās" zero: "%{people} cilvēku pēdējās divās dienās" + hashtags_subtitle: Izpēti, kas pēdējās divās dienāš ir piesasitījis cilvēku uzmanību + hashtags_title: Izplatīti tēmturi + hashtags_view_more: Skatīt vairāk izplatītu tēmturu post_action: Rakstīt post_step: Pasveicini pasauli ar tekstu, fotoattēliem, video vai aptaujām! post_title: Izveido savu pirmo ierakstu @@ -1843,6 +1865,7 @@ lv: invalid_otp_token: Nederīgs divfaktora kods otp_lost_help_html: Ja esi zaudējis piekļuvi abiem, tu vari sazināties ar %{email} rate_limited: Pārāk daudz autentifikācijas mēģinājumu, vēlāk jāmēģina vēlreiz. + seamless_external_login: Tu esi pieteicies caur ārēju pakalpojumu, tāpēc paroles un e-pasta iestatījumi nav pieejami. signed_in_as: 'Pieteicies kā:' verification: extra_instructions_html: Padoms: saite Tavā vietnē var būt neredzama. Svarīga daļa ir rel="me", kas novērš uzdošanos vietnēs ar lietotāju izveidotu saturu. Tu pat vari lapas galvenē izmantot tagu link, nevis a, taču HTML ir jābūt pieejamam bez JavaScript izpildīšanas. @@ -1851,6 +1874,7 @@ lv: instructions_html: Ievieto starpliktuvē un ielīmē tālāk norādīto kodu savas tīmekļvietnes HTML! Tad pievieno savas tīmekļvietnes adresi vienā no papildu laukiem savā profila cilnē "Labot profilu" un saglabā izmaiņas! verification: Pārbaude verified_links: Tavas verifikācijas saites + website_verification: Tīmekļvietnes apliecināšana webauthn_credentials: add: Pievienot jaunu drošības atslēgu create: diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 2a2d06ce9b2974..3271b75668f75f 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -16,12 +16,12 @@ es-MX: account_migration: acct: Especifique el nombre de usuario@dominio de la cuenta a la cual desea migrar account_warning_preset: - text: Puede usar sintaxis de toots, como URLs, hashtags y menciones + text: Puede usar sintaxis de publicaciones, como URLs, etiquetas y menciones title: Opcional. No visible para el destinatario admin_account_action: - include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia + include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta - text_html: Opcional. Puede usar sintaxis de toots. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo + text_html: Opcional. Puede usar sintaxis de publicaciones. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo type_html: Elige qué hacer con %{acct} types: disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos. @@ -35,7 +35,7 @@ es-MX: ends_at: Opcional. El anuncio desaparecerá automáticamente en este momento scheduled_at: Dejar en blanco para publicar el anuncio inmediatamente starts_at: Opcional. En caso de que su anuncio esté vinculado a un intervalo de tiempo específico - text: Puedes usar la sintaxis toot. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario + text: Puedes usar la sintaxis de publicaciones. Por favor ten en cuenta el espacio que ocupará el anuncio en la pantalla del usuario appeal: text: Sólo puede apelar una amonestación a la vez defaults: @@ -49,12 +49,12 @@ es-MX: email: Se le enviará un correo de confirmación header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar - irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante + irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push password: Utilice al menos 8 caracteres - phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot + phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. - setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente) + setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a las publicaciones recibidas recientemente) setting_always_send_emails: Normalmente las notificaciones por correo electrónico no se enviarán cuando estés usando Mastodon activamente setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click setting_display_media_default: Ocultar contenido multimedia marcado como sensible @@ -130,7 +130,7 @@ es-MX: tag: name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: - chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos + chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas role: El rol controla qué permisos tiene el usuario. user_role: color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal @@ -160,7 +160,7 @@ es-MX: text: Texto predefinido title: Título admin_account_action: - include_statuses: Incluir en el correo electrónico a los toots denunciados + include_statuses: Incluir en el correo electrónico a las publicaciones denunciadas send_email_notification: Notificar al usuario por correo electrónico text: Aviso personalizado type: Acción @@ -205,21 +205,21 @@ es-MX: password: Contraseña phrase: Palabra clave o frase setting_advanced_layout: Habilitar interfaz web avanzada - setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo + setting_aggregate_reblogs: Agrupar impulsos en las líneas de tiempo setting_always_send_emails: Enviar siempre notificaciones por correo setting_auto_play_gif: Reproducir automáticamente los GIFs animados - setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot + setting_boost_modal: Mostrar ventana de confirmación antes de impulsar setting_default_language: Idioma de publicación setting_default_privacy: Privacidad de publicaciones setting_default_sensitive: Marcar siempre imágenes como sensibles - setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot + setting_delete_modal: Mostrar diálogo de confirmación antes de borrar una publicación setting_disable_hover_cards: Desactivar vista previa del perfil al pasar el cursor setting_disable_swiping: Deshabilitar movimientos de deslizamiento setting_display_media: Visualización multimedia setting_display_media_default: Por defecto setting_display_media_hide_all: Ocultar todo setting_display_media_show_all: Mostrar todo - setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido + setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido setting_hide_network: Ocultar tu red setting_reduce_motion: Reducir el movimiento de las animaciones setting_system_font_ui: Utilizar la tipografía por defecto del sistema diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 68fc629d9ecebf..203b02371539a8 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -20,6 +20,7 @@ kab: irreversible: Tisuffaɣ i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat locale: Tutlayt n ugrudem, imaylen d walɣuten yettudemren password: Seqdec ma drus 8 n yisekkilen + setting_always_send_emails: S umata, ilɣa s yimayl ur d-ttwaceyyεen ara mi ara tesseqdaceḍ Mastodon s wudem urmid setting_display_media_default: Ffer imidyaten yettwacreḍ d infariyen setting_display_media_hide_all: Ffer yal tikkelt akk taywalt setting_display_media_show_all: Ffer yal tikkelt teywalt yettwacreḍ d tanafrit @@ -84,8 +85,9 @@ kab: password: Awal uffir phrase: Awal n tsarut neɣ tafyirt setting_advanced_layout: Rmed agrudem n web leqqayen - setting_default_language: Tutlayt n tira - setting_default_privacy: Tabaḍnit n tira + setting_always_send_emails: Dima ttazen-d ilɣa s yimayl + setting_default_language: Tutlayt n usuffeɣ + setting_default_privacy: Tabaḍnit n usuffeɣ setting_display_media: Askanay n imidyaten setting_display_media_default: Akk-a kan setting_display_media_hide_all: Ffer-iten akk diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 4369c3c42bb52e..ed27e08bc33466 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -3,7 +3,7 @@ lv: simple_form: hints: account: - attribution_domains_as_text: Aizsargā no nepatiesas piedēvēšanas. + attribution_domains_as_text: Aizsargā no nepatiesa attiecinājuma. discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. From 6f3d7516dc535ab04b040d69b2682d8bc69d5d7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:10:22 +0000 Subject: [PATCH 035/467] Update dependency dotenv to v3.1.4 (#31953) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 12f1b5db2c81ed..3f321c7b7e9ac8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -212,7 +212,7 @@ GEM domain_name (0.6.20240107) doorkeeper (5.7.1) railties (>= 5) - dotenv (3.1.2) + dotenv (3.1.4) drb (2.2.1) ed25519 (1.3.0) elasticsearch (7.17.11) From 943738671c02424b4956de0994c4bd298191fe54 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 04:21:31 -0400 Subject: [PATCH 036/467] Remove unneeded `to_s` on `Link` header comparison in statuses controller spec (#31941) --- spec/controllers/statuses_controller_spec.rb | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index 5042523df82864..d9702251f41d0a 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -63,7 +63,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('public'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -79,7 +79,7 @@ expect(response.headers).to include( 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -168,7 +168,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -184,7 +184,7 @@ 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -212,7 +212,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -228,7 +228,7 @@ 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -278,7 +278,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -294,7 +294,7 @@ 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -370,7 +370,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -385,7 +385,7 @@ .and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie') expect(response.headers).to include( 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -412,7 +412,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -428,7 +428,7 @@ 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) @@ -479,7 +479,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.body).to include status.text end @@ -495,7 +495,7 @@ 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('private'), 'Content-Type' => include('application/activity+json'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) expect(response.parsed_body) .to include(content: include(status.text)) @@ -779,7 +779,7 @@ expect(response.headers).to include( 'Vary' => 'Accept, Accept-Language, Cookie', 'Cache-Control' => include('public'), - 'Link' => satisfy { |header| header.to_s.include?('activity+json') } + 'Link' => include('activity+json') ) end end From eb16763bff5cc2d38dec19c82d47615cd2b54e27 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 04:22:07 -0400 Subject: [PATCH 037/467] Use `have_http_link_header` matcher in `api/v1/trends/*` specs (#31940) --- spec/requests/api/v1/trends/links_spec.rb | 9 ++++++--- spec/requests/api/v1/trends/statuses_spec.rb | 9 ++++++--- spec/requests/api/v1/trends/tags_spec.rb | 10 ++++++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/spec/requests/api/v1/trends/links_spec.rb b/spec/requests/api/v1/trends/links_spec.rb index 012d0359072c74..04d36da0a26789 100644 --- a/spec/requests/api/v1/trends/links_spec.rb +++ b/spec/requests/api/v1/trends/links_spec.rb @@ -10,7 +10,9 @@ it 'returns http success' do get '/api/v1/trends/links' - expect(response).to have_http_status(200) + expect(response) + .to have_http_status(200) + .and not_have_http_link_header end end @@ -22,8 +24,9 @@ stub_const('Api::V1::Trends::LinksController::DEFAULT_LINKS_LIMIT', 2) get '/api/v1/trends/links' - expect(response).to have_http_status(200) - expect(response.headers).to include('Link') + expect(response) + .to have_http_status(200) + .and have_http_link_header(api_v1_trends_links_url(offset: 2)).for(rel: 'next') end def prepare_trends diff --git a/spec/requests/api/v1/trends/statuses_spec.rb b/spec/requests/api/v1/trends/statuses_spec.rb index 3b906e8f822b44..f04addfe0ac988 100644 --- a/spec/requests/api/v1/trends/statuses_spec.rb +++ b/spec/requests/api/v1/trends/statuses_spec.rb @@ -10,7 +10,9 @@ it 'returns http success' do get '/api/v1/trends/statuses' - expect(response).to have_http_status(200) + expect(response) + .to have_http_status(200) + .and not_have_http_link_header end end @@ -22,8 +24,9 @@ stub_const('Api::BaseController::DEFAULT_STATUSES_LIMIT', 2) get '/api/v1/trends/statuses' - expect(response).to have_http_status(200) - expect(response.headers).to include('Link') + expect(response) + .to have_http_status(200) + .and have_http_link_header(api_v1_trends_statuses_url(offset: 2)).for(rel: 'next') end def prepare_trends diff --git a/spec/requests/api/v1/trends/tags_spec.rb b/spec/requests/api/v1/trends/tags_spec.rb index 598f4e7752714d..2ff51eed6327a6 100644 --- a/spec/requests/api/v1/trends/tags_spec.rb +++ b/spec/requests/api/v1/trends/tags_spec.rb @@ -10,8 +10,9 @@ it 'returns http success' do get '/api/v1/trends/tags' - expect(response).to have_http_status(200) - expect(response.headers).to_not include('Link') + expect(response) + .to have_http_status(200) + .and not_have_http_link_header end end @@ -23,8 +24,9 @@ stub_const('Api::V1::Trends::TagsController::DEFAULT_TAGS_LIMIT', 2) get '/api/v1/trends/tags' - expect(response).to have_http_status(200) - expect(response.headers).to include('Link') + expect(response) + .to have_http_status(200) + .and have_http_link_header(api_v1_trends_tags_url(offset: 2)).for(rel: 'next') end def prepare_trends From a791274824d1136278a0139f4b15f54433e56561 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:28:42 +0000 Subject: [PATCH 038/467] Update dependency sass to v1.79.1 (#31958) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 62 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/yarn.lock b/yarn.lock index 49b6e241f87c40..73ea69ee71b7cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5899,25 +5899,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.1": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 - languageName: node - linkType: hard - "chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" @@ -5941,6 +5922,34 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.4.1": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.0 + resolution: "chokidar@npm:4.0.0" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/42d03c53b0ad200689e4fae7763133561480561cab8ba5304e8f2298ff45ff84bf0f6065c3f02b9e557b74b156813734439a1a2ff19a1ea6b35692395cd92738 + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -14884,6 +14893,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.1 + resolution: "readdirp@npm:4.0.1" + checksum: 10c0/e5a0b547015f68ecc918f115b62b75b2b840611480a9240cb3317090a0ddac01bb9b40315a8fa08acdf52a43eea17b808c89b645263cba3ab64dc557d7f801f1 + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -15459,15 +15475,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.78.0 - resolution: "sass@npm:1.78.0" + version: 1.79.1 + resolution: "sass@npm:1.79.1" dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" + chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/6577a87c00b03a5a50f3a11b4b6592f28abce34e61812e381535a3b712151bd94db3ca06467d20395431e0f38a23f99e616d6859d771fb6d4617c359f590c48c + checksum: 10c0/187bc885bad2e81e5414a146c9e14a28f622b5aba5c1425f4dd6d8ef2045b66c69de93689503886a8d2cc55d6bcce97b05ee87b074628fefd03e762789f931d0 languageName: node linkType: hard From 7740f1a6bb6c34a1d4fdfeaa29c31ac24fd4b236 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Wed, 18 Sep 2024 10:43:24 +0200 Subject: [PATCH 039/467] Mute XHR abort errors (#31952) --- app/javascript/mastodon/actions/alerts.js | 7 +++++++ app/javascript/mastodon/api.ts | 3 +++ 2 files changed, 10 insertions(+) diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js index 42834146bf5ba6..48dee2587fe523 100644 --- a/app/javascript/mastodon/actions/alerts.js +++ b/app/javascript/mastodon/actions/alerts.js @@ -1,5 +1,7 @@ import { defineMessages } from 'react-intl'; +import { AxiosError } from 'axios'; + const messages = defineMessages({ unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' }, unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' }, @@ -50,6 +52,11 @@ export const showAlertForError = (error, skipNotFound = false) => { }); } + // An aborted request, e.g. due to reloading the browser window, it not really error + if (error.code === AxiosError.ECONNABORTED) { + return { type: ALERT_NOOP }; + } + console.error(error); return showAlert({ diff --git a/app/javascript/mastodon/api.ts b/app/javascript/mastodon/api.ts index 24672290c74f94..25bb25547cf94d 100644 --- a/app/javascript/mastodon/api.ts +++ b/app/javascript/mastodon/api.ts @@ -42,6 +42,9 @@ const authorizationTokenFromInitialState = (): RawAxiosRequestHeaders => { // eslint-disable-next-line import/no-default-export export default function api(withAuthorization = true) { return axios.create({ + transitional: { + clarifyTimeoutError: true, + }, headers: { ...csrfHeader, ...(withAuthorization ? authorizationTokenFromInitialState() : {}), From 2d399f5d4a26e2f9c398ec7ab01f1aaee1d0e1ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:17:57 +0200 Subject: [PATCH 040/467] Update dependency pg-connection-string to v2.7.0 (#31950) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 73ea69ee71b7cc..45ede6ca997bc3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13002,9 +13002,9 @@ __metadata: linkType: hard "pg-connection-string@npm:^2.6.0, pg-connection-string@npm:^2.6.4": - version: 2.6.4 - resolution: "pg-connection-string@npm:2.6.4" - checksum: 10c0/0d0b617df0fc6507bf6a94bdcd56c7a305788a1402d69bff9773350947c8f525d6d8136128065370749a3325e99658ae40fbdcce620fb8e60126181f0591a6a6 + version: 2.7.0 + resolution: "pg-connection-string@npm:2.7.0" + checksum: 10c0/50a1496a1c858f9495d78a2c7a66d93ef3602e718aff2953bb5738f3ea616d7f727f32fc20513c9bed127650cd14c1ddc7b458396f4000e689d4b64c65c5c51e languageName: node linkType: hard From 5405bdd344ff140e4e9cf9782770e7180794edec Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 05:27:43 -0400 Subject: [PATCH 041/467] Remove unused E2EE messaging code (#31193) --- Gemfile | 1 - Gemfile.lock | 2 - .../activitypub/claims_controller.rb | 18 ----- .../activitypub/collections_controller.rb | 6 +- .../api/v1/crypto/deliveries_controller.rb | 30 ------- .../crypto/encrypted_messages_controller.rb | 47 ----------- .../api/v1/crypto/keys/claims_controller.rb | 25 ------ .../api/v1/crypto/keys/counts_controller.rb | 17 ---- .../api/v1/crypto/keys/queries_controller.rb | 26 ------ .../api/v1/crypto/keys/uploads_controller.rb | 29 ------- app/helpers/context_helper.rb | 17 ---- app/lib/activitypub/activity/create.rb | 35 +------- app/lib/inline_renderer.rb | 2 - app/lib/vacuum/system_keys_vacuum.rb | 13 --- app/models/account.rb | 8 +- app/models/concerns/account/associations.rb | 3 - app/models/device.rb | 36 --------- app/models/encrypted_message.rb | 49 ------------ app/models/message_franking.rb | 19 ----- app/models/one_time_key.rb | 22 ------ app/models/system_key.rb | 41 ---------- .../activitypub/activity_serializer.rb | 2 - .../activitypub/actor_serializer.rb | 7 +- .../activitypub/collection_serializer.rb | 2 - .../activitypub/device_serializer.rb | 52 ------------ .../encrypted_message_serializer.rb | 61 -------------- .../activitypub/one_time_key_serializer.rb | 35 -------- .../rest/encrypted_message_serializer.rb | 19 ----- .../rest/keys/claim_result_serializer.rb | 9 --- .../rest/keys/device_serializer.rb | 6 -- .../rest/keys/query_result_serializer.rb | 11 --- .../activitypub/process_account_service.rb | 1 - app/services/delete_account_service.rb | 2 - app/services/deliver_to_device_service.rb | 78 ------------------ app/services/keys/claim_service.rb | 79 ------------------- app/services/keys/query_service.rb | 79 ------------------- app/validators/ed25519_key_validator.rb | 19 ----- app/validators/ed25519_signature_validator.rb | 29 ------- app/workers/push_encrypted_message_worker.rb | 16 ---- config/initializers/doorkeeper.rb | 3 +- config/initializers/inflections.rb | 1 - config/locales/an.yml | 1 - config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 1 - config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 1 - config/locales/de.yml | 1 - config/locales/el.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/en.yml | 1 - config/locales/eo.yml | 1 - config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/ga.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 1 - config/locales/he.yml | 1 - config/locales/hu.yml | 1 - config/locales/hy.yml | 1 - config/locales/ia.yml | 1 - config/locales/id.yml | 1 - config/locales/ie.yml | 1 - config/locales/io.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/ko.yml | 1 - config/locales/ku.yml | 1 - config/locales/lad.yml | 1 - config/locales/lv.yml | 1 - config/locales/ms.yml | 1 - config/locales/my.yml | 1 - config/locales/nl.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/sc.yml | 1 - config/locales/sco.yml | 1 - config/locales/si.yml | 1 - config/locales/sl.yml | 1 - config/locales/sq.yml | 1 - config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 1 - config/locales/ta.yml | 1 - config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 1 - config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - config/locales/zh-TW.yml | 1 - config/routes.rb | 1 - config/routes/api.rb | 17 ---- ...20140205_drop_end_to_end_message_tables.rb | 15 ++++ db/schema.rb | 50 ------------ .../activitypub/claims_controller_spec.rb | 19 ----- spec/fabricators/device_fabricator.rb | 10 --- .../encrypted_message_fabricator.rb | 7 -- spec/fabricators/one_time_key_fabricator.rb | 13 --- spec/fabricators/system_key_fabricator.rb | 3 - spec/lib/activitypub/activity/create_spec.rb | 58 -------------- spec/lib/vacuum/system_keys_vacuum_spec.rb | 24 ------ spec/models/one_time_key_spec.rb | 23 ------ .../activitypub/device_serializer_spec.rb | 14 ---- .../one_time_key_serializer_spec.rb | 14 ---- .../rest/encrypted_message_serializer_spec.rb | 14 ---- .../rest/keys/claim_result_serializer_spec.rb | 14 ---- .../rest/keys/device_serializer_spec.rb | 14 ---- .../rest/keys/query_result_serializer_spec.rb | 14 ---- .../push_encrypted_message_worker_spec.rb | 13 --- streaming/index.js | 9 +-- 130 files changed, 25 insertions(+), 1347 deletions(-) delete mode 100644 app/controllers/activitypub/claims_controller.rb delete mode 100644 app/controllers/api/v1/crypto/deliveries_controller.rb delete mode 100644 app/controllers/api/v1/crypto/encrypted_messages_controller.rb delete mode 100644 app/controllers/api/v1/crypto/keys/claims_controller.rb delete mode 100644 app/controllers/api/v1/crypto/keys/counts_controller.rb delete mode 100644 app/controllers/api/v1/crypto/keys/queries_controller.rb delete mode 100644 app/controllers/api/v1/crypto/keys/uploads_controller.rb delete mode 100644 app/lib/vacuum/system_keys_vacuum.rb delete mode 100644 app/models/device.rb delete mode 100644 app/models/encrypted_message.rb delete mode 100644 app/models/message_franking.rb delete mode 100644 app/models/one_time_key.rb delete mode 100644 app/models/system_key.rb delete mode 100644 app/serializers/activitypub/device_serializer.rb delete mode 100644 app/serializers/activitypub/encrypted_message_serializer.rb delete mode 100644 app/serializers/activitypub/one_time_key_serializer.rb delete mode 100644 app/serializers/rest/encrypted_message_serializer.rb delete mode 100644 app/serializers/rest/keys/claim_result_serializer.rb delete mode 100644 app/serializers/rest/keys/device_serializer.rb delete mode 100644 app/serializers/rest/keys/query_result_serializer.rb delete mode 100644 app/services/deliver_to_device_service.rb delete mode 100644 app/services/keys/claim_service.rb delete mode 100644 app/services/keys/query_service.rb delete mode 100644 app/validators/ed25519_key_validator.rb delete mode 100644 app/validators/ed25519_signature_validator.rb delete mode 100644 app/workers/push_encrypted_message_worker.rb create mode 100644 db/migrate/20240720140205_drop_end_to_end_message_tables.rb delete mode 100644 spec/controllers/activitypub/claims_controller_spec.rb delete mode 100644 spec/fabricators/device_fabricator.rb delete mode 100644 spec/fabricators/encrypted_message_fabricator.rb delete mode 100644 spec/fabricators/one_time_key_fabricator.rb delete mode 100644 spec/fabricators/system_key_fabricator.rb delete mode 100644 spec/lib/vacuum/system_keys_vacuum_spec.rb delete mode 100644 spec/models/one_time_key_spec.rb delete mode 100644 spec/serializers/activitypub/device_serializer_spec.rb delete mode 100644 spec/serializers/activitypub/one_time_key_serializer_spec.rb delete mode 100644 spec/serializers/rest/encrypted_message_serializer_spec.rb delete mode 100644 spec/serializers/rest/keys/claim_result_serializer_spec.rb delete mode 100644 spec/serializers/rest/keys/device_serializer_spec.rb delete mode 100644 spec/serializers/rest/keys/query_result_serializer_spec.rb delete mode 100644 spec/workers/push_encrypted_message_worker_spec.rb diff --git a/Gemfile b/Gemfile index 4cce095ec595bc..bcb19421ab9afe 100644 --- a/Gemfile +++ b/Gemfile @@ -47,7 +47,6 @@ gem 'color_diff', '~> 0.1' gem 'csv', '~> 3.2' gem 'discard', '~> 1.2' gem 'doorkeeper', '~> 5.6' -gem 'ed25519', '~> 1.3' gem 'fast_blank', '~> 1.0' gem 'fastimage' gem 'hiredis', '~> 0.6' diff --git a/Gemfile.lock b/Gemfile.lock index 3f321c7b7e9ac8..5ed8fe78ebcfb2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -214,7 +214,6 @@ GEM railties (>= 5) dotenv (3.1.4) drb (2.2.1) - ed25519 (1.3.0) elasticsearch (7.17.11) elasticsearch-api (= 7.17.11) elasticsearch-transport (= 7.17.11) @@ -937,7 +936,6 @@ DEPENDENCIES discard (~> 1.2) doorkeeper (~> 5.6) dotenv - ed25519 (~> 1.3) email_spec fabrication (~> 2.30) faker (~> 3.2) diff --git a/app/controllers/activitypub/claims_controller.rb b/app/controllers/activitypub/claims_controller.rb deleted file mode 100644 index 480baaf2bcce0f..00000000000000 --- a/app/controllers/activitypub/claims_controller.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -class ActivityPub::ClaimsController < ActivityPub::BaseController - skip_before_action :authenticate_user! - - before_action :require_account_signature! - before_action :set_claim_result - - def create - render json: @claim_result, serializer: ActivityPub::OneTimeKeySerializer - end - - private - - def set_claim_result - @claim_result = ::Keys::ClaimService.new.call(@account.id, params[:id]) - end -end diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb index c25362c9bc056f..ab1b98e646a1f6 100644 --- a/app/controllers/activitypub/collections_controller.rb +++ b/app/controllers/activitypub/collections_controller.rb @@ -22,8 +22,6 @@ def set_items @items = @items.map { |item| item.distributable? ? item : ActivityPub::TagManager.instance.uri_for(item) } when 'tags' @items = for_signed_account { @account.featured_tags } - when 'devices' - @items = @account.devices else not_found end @@ -31,7 +29,7 @@ def set_items def set_size case params[:id] - when 'featured', 'devices', 'tags' + when 'featured', 'tags' @size = @items.size else not_found @@ -42,7 +40,7 @@ def set_type case params[:id] when 'featured' @type = :ordered - when 'devices', 'tags' + when 'tags' @type = :unordered else not_found diff --git a/app/controllers/api/v1/crypto/deliveries_controller.rb b/app/controllers/api/v1/crypto/deliveries_controller.rb deleted file mode 100644 index aa9df6e03b20f2..00000000000000 --- a/app/controllers/api/v1/crypto/deliveries_controller.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::DeliveriesController < Api::BaseController - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - before_action :set_current_device - - def create - devices.each do |device_params| - DeliverToDeviceService.new.call(current_account, @current_device, device_params) - end - - render_empty - end - - private - - def set_current_device - @current_device = Device.find_by!(access_token: doorkeeper_token) - end - - def resource_params - params.require(:device) - params.permit(device: [:account_id, :device_id, :type, :body, :hmac]) - end - - def devices - Array(resource_params[:device]) - end -end diff --git a/app/controllers/api/v1/crypto/encrypted_messages_controller.rb b/app/controllers/api/v1/crypto/encrypted_messages_controller.rb deleted file mode 100644 index 93ae0e777139c3..00000000000000 --- a/app/controllers/api/v1/crypto/encrypted_messages_controller.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::EncryptedMessagesController < Api::BaseController - LIMIT = 80 - - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - before_action :set_current_device - - before_action :set_encrypted_messages, only: :index - after_action :insert_pagination_headers, only: :index - - def index - render json: @encrypted_messages, each_serializer: REST::EncryptedMessageSerializer - end - - def clear - @current_device.encrypted_messages.up_to(params[:up_to_id]).delete_all - render_empty - end - - private - - def set_current_device - @current_device = Device.find_by!(access_token: doorkeeper_token) - end - - def set_encrypted_messages - @encrypted_messages = @current_device.encrypted_messages.to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) - end - - def next_path - api_v1_crypto_encrypted_messages_url pagination_params(max_id: pagination_max_id) if records_continue? - end - - def prev_path - api_v1_crypto_encrypted_messages_url pagination_params(min_id: pagination_since_id) unless @encrypted_messages.empty? - end - - def pagination_collection - @encrypted_messages - end - - def records_continue? - @encrypted_messages.size == limit_param(LIMIT) - end -end diff --git a/app/controllers/api/v1/crypto/keys/claims_controller.rb b/app/controllers/api/v1/crypto/keys/claims_controller.rb deleted file mode 100644 index f9d202d67b8ed8..00000000000000 --- a/app/controllers/api/v1/crypto/keys/claims_controller.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::Keys::ClaimsController < Api::BaseController - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - before_action :set_claim_results - - def create - render json: @claim_results, each_serializer: REST::Keys::ClaimResultSerializer - end - - private - - def set_claim_results - @claim_results = devices.filter_map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) } - end - - def resource_params - params.permit(device: [:account_id, :device_id]) - end - - def devices - Array(resource_params[:device]) - end -end diff --git a/app/controllers/api/v1/crypto/keys/counts_controller.rb b/app/controllers/api/v1/crypto/keys/counts_controller.rb deleted file mode 100644 index ffd7151b78291e..00000000000000 --- a/app/controllers/api/v1/crypto/keys/counts_controller.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::Keys::CountsController < Api::BaseController - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - before_action :set_current_device - - def show - render json: { one_time_keys: @current_device.one_time_keys.count } - end - - private - - def set_current_device - @current_device = Device.find_by!(access_token: doorkeeper_token) - end -end diff --git a/app/controllers/api/v1/crypto/keys/queries_controller.rb b/app/controllers/api/v1/crypto/keys/queries_controller.rb deleted file mode 100644 index e6ce9f9192ac86..00000000000000 --- a/app/controllers/api/v1/crypto/keys/queries_controller.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::Keys::QueriesController < Api::BaseController - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - before_action :set_accounts - before_action :set_query_results - - def create - render json: @query_results, each_serializer: REST::Keys::QueryResultSerializer - end - - private - - def set_accounts - @accounts = Account.where(id: account_ids).includes(:devices) - end - - def set_query_results - @query_results = @accounts.filter_map { |account| ::Keys::QueryService.new.call(account) } - end - - def account_ids - Array(params[:id]).map(&:to_i) - end -end diff --git a/app/controllers/api/v1/crypto/keys/uploads_controller.rb b/app/controllers/api/v1/crypto/keys/uploads_controller.rb deleted file mode 100644 index fc4abf63b3a421..00000000000000 --- a/app/controllers/api/v1/crypto/keys/uploads_controller.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Crypto::Keys::UploadsController < Api::BaseController - before_action -> { doorkeeper_authorize! :crypto } - before_action :require_user! - - def create - device = Device.find_or_initialize_by(access_token: doorkeeper_token) - - device.transaction do - device.account = current_account - device.update!(resource_params[:device]) - - if resource_params[:one_time_keys].present? && resource_params[:one_time_keys].is_a?(Enumerable) - resource_params[:one_time_keys].each do |one_time_key_params| - device.one_time_keys.create!(one_time_key_params) - end - end - end - - render json: device, serializer: REST::Keys::DeviceSerializer - end - - private - - def resource_params - params.permit(device: [:device_id, :name, :fingerprint_key, :identity_key], one_time_keys: [:key_id, :key, :signature]) - end -end diff --git a/app/helpers/context_helper.rb b/app/helpers/context_helper.rb index a0c1781d240d77..18bb088b48aee9 100644 --- a/app/helpers/context_helper.rb +++ b/app/helpers/context_helper.rb @@ -23,23 +23,6 @@ module ContextHelper indexable: { 'toot' => 'http://joinmastodon.org/ns#', 'indexable' => 'toot:indexable' }, memorial: { 'toot' => 'http://joinmastodon.org/ns#', 'memorial' => 'toot:memorial' }, voters_count: { 'toot' => 'http://joinmastodon.org/ns#', 'votersCount' => 'toot:votersCount' }, - olm: { - 'toot' => 'http://joinmastodon.org/ns#', - 'Device' => 'toot:Device', - 'Ed25519Signature' => 'toot:Ed25519Signature', - 'Ed25519Key' => 'toot:Ed25519Key', - 'Curve25519Key' => 'toot:Curve25519Key', - 'EncryptedMessage' => 'toot:EncryptedMessage', - 'publicKeyBase64' => 'toot:publicKeyBase64', - 'deviceId' => 'toot:deviceId', - 'claim' => { '@type' => '@id', '@id' => 'toot:claim' }, - 'fingerprintKey' => { '@type' => '@id', '@id' => 'toot:fingerprintKey' }, - 'identityKey' => { '@type' => '@id', '@id' => 'toot:identityKey' }, - 'devices' => { '@type' => '@id', '@id' => 'toot:devices' }, - 'messageFranking' => 'toot:messageFranking', - 'messageType' => 'toot:messageType', - 'cipherText' => 'toot:cipherText', - }, suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' }, attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } }, }.freeze diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index d539ce41a07175..aae73e01e0f03d 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -8,44 +8,11 @@ def perform dereference_object! - case @object['type'] - when 'EncryptedMessage' - create_encrypted_message - else - create_status - end + create_status end private - def create_encrypted_message - return reject_payload! if non_matching_uri_hosts?(@account.uri, object_uri) || @options[:delivered_to_account_id].blank? - - target_account = Account.find(@options[:delivered_to_account_id]) - target_device = target_account.devices.find_by(device_id: @object.dig('to', 'deviceId')) - - return if target_device.nil? - - target_device.encrypted_messages.create!( - from_account: @account, - from_device_id: @object.dig('attributedTo', 'deviceId'), - type: @object['messageType'], - body: @object['cipherText'], - digest: @object.dig('digest', 'digestValue'), - message_franking: message_franking.to_token - ) - end - - def message_franking - MessageFranking.new( - hmac: @object.dig('digest', 'digestValue'), - original_franking: @object['messageFranking'], - source_account_id: @account.id, - target_account_id: @options[:delivered_to_account_id], - timestamp: Time.now.utc - ) - end - def create_status return reject_payload! if unsupported_object_type? || non_matching_uri_hosts?(@account.uri, object_uri) || tombstone_exists? || !related_to_local_activity? diff --git a/app/lib/inline_renderer.rb b/app/lib/inline_renderer.rb index 0aebb13fce4476..af967ac215d6bf 100644 --- a/app/lib/inline_renderer.rb +++ b/app/lib/inline_renderer.rb @@ -20,8 +20,6 @@ def render serializer = REST::AnnouncementSerializer when :reaction serializer = REST::ReactionSerializer - when :encrypted_message - serializer = REST::EncryptedMessageSerializer else return end diff --git a/app/lib/vacuum/system_keys_vacuum.rb b/app/lib/vacuum/system_keys_vacuum.rb deleted file mode 100644 index ceee2fd164b2fb..00000000000000 --- a/app/lib/vacuum/system_keys_vacuum.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -class Vacuum::SystemKeysVacuum - def perform - vacuum_expired_system_keys! - end - - private - - def vacuum_expired_system_keys! - SystemKey.expired.delete_all - end -end diff --git a/app/models/account.rb b/app/models/account.rb index a4cab99f7b4152..078d7aaa056220 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -44,7 +44,6 @@ # hide_collections :boolean # avatar_storage_schema_version :integer # header_storage_schema_version :integer -# devices_url :string # suspension_origin :integer # sensitized_at :datetime # trendable :boolean @@ -56,11 +55,12 @@ class Account < ApplicationRecord self.ignored_columns += %w( - subscription_expires_at - secret + devices_url + hub_url remote_url salmon_url - hub_url + secret + subscription_expires_at trust_level ) diff --git a/app/models/concerns/account/associations.rb b/app/models/concerns/account/associations.rb index 1c67b07e511618..637e785953d06e 100644 --- a/app/models/concerns/account/associations.rb +++ b/app/models/concerns/account/associations.rb @@ -7,9 +7,6 @@ module Account::Associations # Local users has_one :user, inverse_of: :account, dependent: :destroy - # E2EE - has_many :devices, dependent: :destroy, inverse_of: :account - # Timelines has_many :statuses, inverse_of: :account, dependent: :destroy has_many :favourites, inverse_of: :account, dependent: :destroy diff --git a/app/models/device.rb b/app/models/device.rb deleted file mode 100644 index 5dc6cf1e66f6fb..00000000000000 --- a/app/models/device.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -# == Schema Information -# -# Table name: devices -# -# id :bigint(8) not null, primary key -# access_token_id :bigint(8) -# account_id :bigint(8) -# device_id :string default(""), not null -# name :string default(""), not null -# fingerprint_key :text default(""), not null -# identity_key :text default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# - -class Device < ApplicationRecord - belongs_to :access_token, class_name: 'Doorkeeper::AccessToken' - belongs_to :account - - has_many :one_time_keys, dependent: :destroy, inverse_of: :device - has_many :encrypted_messages, dependent: :destroy, inverse_of: :device - - validates :name, :fingerprint_key, :identity_key, presence: true - validates :fingerprint_key, :identity_key, ed25519_key: true - - before_save :invalidate_associations, if: -> { device_id_changed? || fingerprint_key_changed? || identity_key_changed? } - - private - - def invalidate_associations - one_time_keys.destroy_all - encrypted_messages.destroy_all - end -end diff --git a/app/models/encrypted_message.rb b/app/models/encrypted_message.rb deleted file mode 100644 index 3e7e95594cea26..00000000000000 --- a/app/models/encrypted_message.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -# == Schema Information -# -# Table name: encrypted_messages -# -# id :bigint(8) not null, primary key -# device_id :bigint(8) -# from_account_id :bigint(8) -# from_device_id :string default(""), not null -# type :integer default(0), not null -# body :text default(""), not null -# digest :text default(""), not null -# message_franking :text default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# - -class EncryptedMessage < ApplicationRecord - self.inheritance_column = nil - - include Paginable - include Redisable - - scope :up_to, ->(id) { where(arel_table[:id].lteq(id)) } - - belongs_to :device - belongs_to :from_account, class_name: 'Account' - - around_create Mastodon::Snowflake::Callbacks - - after_commit :push_to_streaming_api - - private - - def push_to_streaming_api - return if destroyed? || !subscribed_to_timeline? - - PushEncryptedMessageWorker.perform_async(id) - end - - def subscribed_to_timeline? - redis.exists?("subscribed:#{streaming_channel}") - end - - def streaming_channel - "timeline:#{device.account_id}:#{device.device_id}" - end -end diff --git a/app/models/message_franking.rb b/app/models/message_franking.rb deleted file mode 100644 index c72bd1ccaca99d..00000000000000 --- a/app/models/message_franking.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class MessageFranking - attr_reader :hmac, :source_account_id, :target_account_id, - :timestamp, :original_franking - - def initialize(attributes = {}) - @hmac = attributes[:hmac] - @source_account_id = attributes[:source_account_id] - @target_account_id = attributes[:target_account_id] - @timestamp = attributes[:timestamp] - @original_franking = attributes[:original_franking] - end - - def to_token - crypt = ActiveSupport::MessageEncryptor.new(SystemKey.current_key, serializer: Oj) - crypt.encrypt_and_sign(self) - end -end diff --git a/app/models/one_time_key.rb b/app/models/one_time_key.rb deleted file mode 100644 index 23604e2f7d3c2b..00000000000000 --- a/app/models/one_time_key.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -# == Schema Information -# -# Table name: one_time_keys -# -# id :bigint(8) not null, primary key -# device_id :bigint(8) -# key_id :string default(""), not null -# key :text default(""), not null -# signature :text default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# - -class OneTimeKey < ApplicationRecord - belongs_to :device - - validates :key_id, :key, :signature, presence: true - validates :key, ed25519_key: true - validates :signature, ed25519_signature: { message: :key, verify_key: ->(one_time_key) { one_time_key.device.fingerprint_key } } -end diff --git a/app/models/system_key.rb b/app/models/system_key.rb deleted file mode 100644 index 1be399dd689c19..00000000000000 --- a/app/models/system_key.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -# == Schema Information -# -# Table name: system_keys -# -# id :bigint(8) not null, primary key -# key :binary -# created_at :datetime not null -# updated_at :datetime not null -# -class SystemKey < ApplicationRecord - ROTATION_PERIOD = 1.week.freeze - - before_validation :set_key - - scope :expired, ->(now = Time.now.utc) { where(arel_table[:created_at].lt(now - (ROTATION_PERIOD * 3))) } - - class << self - def current_key - previous_key = order(id: :asc).last - - if previous_key && previous_key.created_at >= ROTATION_PERIOD.ago - previous_key.key - else - create.key - end - end - end - - private - - def set_key - return if key.present? - - cipher = OpenSSL::Cipher.new('AES-256-GCM') - cipher.encrypt - - self.key = cipher.random_key - end -end diff --git a/app/serializers/activitypub/activity_serializer.rb b/app/serializers/activitypub/activity_serializer.rb index 5bdf53f032dddb..23a5b42bc790fa 100644 --- a/app/serializers/activitypub/activity_serializer.rb +++ b/app/serializers/activitypub/activity_serializer.rb @@ -5,8 +5,6 @@ def self.serializer_for(model, options) case model.class.name when 'Status' ActivityPub::NoteSerializer - when 'DeliverToDeviceService::EncryptedMessage' - ActivityPub::EncryptedMessageSerializer else super end diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index a6281e23b91e59..f698e758e8d6bb 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -7,7 +7,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer context :security context_extensions :manually_approves_followers, :featured, :also_known_as, - :moved_to, :property_value, :discoverable, :olm, :suspended, + :moved_to, :property_value, :discoverable, :suspended, :memorial, :indexable, :attribution_domains attributes :id, :type, :following, :followers, @@ -21,7 +21,6 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer has_many :virtual_tags, key: :tag has_many :virtual_attachments, key: :attachment - attribute :devices, unless: :instance_actor? attribute :moved_to, if: :moved? attribute :also_known_as, if: :also_known_as? attribute :suspended, if: :suspended? @@ -72,10 +71,6 @@ def inbox object.instance_actor? ? instance_actor_inbox_url : account_inbox_url(object) end - def devices - account_collection_url(object, :devices) - end - def outbox object.instance_actor? ? instance_actor_outbox_url : account_outbox_url(object) end diff --git a/app/serializers/activitypub/collection_serializer.rb b/app/serializers/activitypub/collection_serializer.rb index 34026a6b5be01d..1b410cecaef724 100644 --- a/app/serializers/activitypub/collection_serializer.rb +++ b/app/serializers/activitypub/collection_serializer.rb @@ -14,8 +14,6 @@ def self.serializer_for(model, options) case model.class.name when 'Status' ActivityPub::NoteSerializer - when 'Device' - ActivityPub::DeviceSerializer when 'FeaturedTag' ActivityPub::HashtagSerializer when 'ActivityPub::CollectionPresenter' diff --git a/app/serializers/activitypub/device_serializer.rb b/app/serializers/activitypub/device_serializer.rb deleted file mode 100644 index 5f0fdc8af935e4..00000000000000 --- a/app/serializers/activitypub/device_serializer.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -class ActivityPub::DeviceSerializer < ActivityPub::Serializer - context_extensions :olm - - include RoutingHelper - - class FingerprintKeySerializer < ActivityPub::Serializer - attributes :type, :public_key_base64 - - def type - 'Ed25519Key' - end - - def public_key_base64 - object.fingerprint_key - end - end - - class IdentityKeySerializer < ActivityPub::Serializer - attributes :type, :public_key_base64 - - def type - 'Curve25519Key' - end - - def public_key_base64 - object.identity_key - end - end - - attributes :device_id, :type, :name, :claim - - has_one :fingerprint_key, serializer: FingerprintKeySerializer - has_one :identity_key, serializer: IdentityKeySerializer - - def type - 'Device' - end - - def claim - account_claim_url(object.account, id: object.device_id) - end - - def fingerprint_key - object - end - - def identity_key - object - end -end diff --git a/app/serializers/activitypub/encrypted_message_serializer.rb b/app/serializers/activitypub/encrypted_message_serializer.rb deleted file mode 100644 index 3c525d23e5cee5..00000000000000 --- a/app/serializers/activitypub/encrypted_message_serializer.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -class ActivityPub::EncryptedMessageSerializer < ActivityPub::Serializer - context :security - - context_extensions :olm - - class DeviceSerializer < ActivityPub::Serializer - attributes :type, :device_id - - def type - 'Device' - end - - def device_id - object - end - end - - class DigestSerializer < ActivityPub::Serializer - attributes :type, :digest_algorithm, :digest_value - - def type - 'Digest' - end - - def digest_algorithm - 'http://www.w3.org/2000/09/xmldsig#hmac-sha256' - end - - def digest_value - object - end - end - - attributes :type, :message_type, :cipher_text, :message_franking - - has_one :attributed_to, serializer: DeviceSerializer - has_one :to, serializer: DeviceSerializer - has_one :digest, serializer: DigestSerializer - - def type - 'EncryptedMessage' - end - - def attributed_to - object.source_device.device_id - end - - def to - object.target_device_id - end - - def message_type - object.type - end - - def cipher_text - object.body - end -end diff --git a/app/serializers/activitypub/one_time_key_serializer.rb b/app/serializers/activitypub/one_time_key_serializer.rb deleted file mode 100644 index 5932eb5b55afee..00000000000000 --- a/app/serializers/activitypub/one_time_key_serializer.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -class ActivityPub::OneTimeKeySerializer < ActivityPub::Serializer - context :security - - context_extensions :olm - - class SignatureSerializer < ActivityPub::Serializer - attributes :type, :signature_value - - def type - 'Ed25519Signature' - end - - def signature_value - object.signature - end - end - - attributes :key_id, :type, :public_key_base64 - - has_one :signature, serializer: SignatureSerializer - - def type - 'Curve25519Key' - end - - def public_key_base64 - object.key - end - - def signature - object - end -end diff --git a/app/serializers/rest/encrypted_message_serializer.rb b/app/serializers/rest/encrypted_message_serializer.rb deleted file mode 100644 index 80c26d060ea32f..00000000000000 --- a/app/serializers/rest/encrypted_message_serializer.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class REST::EncryptedMessageSerializer < ActiveModel::Serializer - attributes :id, :account_id, :device_id, - :type, :body, :digest, :message_franking, - :created_at - - def id - object.id.to_s - end - - def account_id - object.from_account_id.to_s - end - - def device_id - object.from_device_id - end -end diff --git a/app/serializers/rest/keys/claim_result_serializer.rb b/app/serializers/rest/keys/claim_result_serializer.rb deleted file mode 100644 index 145044f557231d..00000000000000 --- a/app/serializers/rest/keys/claim_result_serializer.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -class REST::Keys::ClaimResultSerializer < ActiveModel::Serializer - attributes :account_id, :device_id, :key_id, :key, :signature - - def account_id - object.account.id.to_s - end -end diff --git a/app/serializers/rest/keys/device_serializer.rb b/app/serializers/rest/keys/device_serializer.rb deleted file mode 100644 index f9b821b79ca1d8..00000000000000 --- a/app/serializers/rest/keys/device_serializer.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -class REST::Keys::DeviceSerializer < ActiveModel::Serializer - attributes :device_id, :name, :identity_key, - :fingerprint_key -end diff --git a/app/serializers/rest/keys/query_result_serializer.rb b/app/serializers/rest/keys/query_result_serializer.rb deleted file mode 100644 index 8f8bdde289fdb2..00000000000000 --- a/app/serializers/rest/keys/query_result_serializer.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -class REST::Keys::QueryResultSerializer < ActiveModel::Serializer - attributes :account_id - - has_many :devices, serializer: REST::Keys::DeviceSerializer - - def account_id - object.account.id.to_s - end -end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 1e2d614d72452e..a7422b5d02af7b 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -108,7 +108,6 @@ def set_immediate_protocol_attributes! def set_immediate_attributes! @account.featured_collection_url = @json['featured'] || '' - @account.devices_url = @json['devices'] || '' @account.display_name = @json['name'] || '' @account.note = @json['summary'] || '' @account.locked = @json['manuallyApprovesFollowers'] || false diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 328d8ae8f83965..0c03267d43d0b3 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -13,7 +13,6 @@ class DeleteAccountService < BaseService conversation_mutes conversations custom_filters - devices domain_blocks featured_tags follow_requests @@ -40,7 +39,6 @@ class DeleteAccountService < BaseService conversation_mutes conversations custom_filters - devices domain_blocks featured_tags follow_requests diff --git a/app/services/deliver_to_device_service.rb b/app/services/deliver_to_device_service.rb deleted file mode 100644 index 71711945c06564..00000000000000 --- a/app/services/deliver_to_device_service.rb +++ /dev/null @@ -1,78 +0,0 @@ -# frozen_string_literal: true - -class DeliverToDeviceService < BaseService - include Payloadable - - class EncryptedMessage < ActiveModelSerializers::Model - attributes :source_account, :target_account, :source_device, - :target_device_id, :type, :body, :digest, - :message_franking - end - - def call(source_account, source_device, options = {}) - @source_account = source_account - @source_device = source_device - @target_account = Account.find(options[:account_id]) - @target_device_id = options[:device_id] - @body = options[:body] - @type = options[:type] - @hmac = options[:hmac] - - set_message_franking! - - if @target_account.local? - deliver_to_local! - else - deliver_to_remote! - end - end - - private - - def set_message_franking! - @message_franking = message_franking.to_token - end - - def deliver_to_local! - target_device = @target_account.devices.find_by!(device_id: @target_device_id) - - target_device.encrypted_messages.create!( - from_account: @source_account, - from_device_id: @source_device.device_id, - type: @type, - body: @body, - digest: @hmac, - message_franking: @message_franking - ) - end - - def deliver_to_remote! - ActivityPub::DeliveryWorker.perform_async( - Oj.dump(serialize_payload(ActivityPub::ActivityPresenter.from_encrypted_message(encrypted_message), ActivityPub::ActivitySerializer)), - @source_account.id, - @target_account.inbox_url - ) - end - - def message_franking - MessageFranking.new( - source_account_id: @source_account.id, - target_account_id: @target_account.id, - hmac: @hmac, - timestamp: Time.now.utc - ) - end - - def encrypted_message - EncryptedMessage.new( - source_account: @source_account, - target_account: @target_account, - source_device: @source_device, - target_device_id: @target_device_id, - type: @type, - body: @body, - digest: @hmac, - message_franking: @message_franking - ) - end -end diff --git a/app/services/keys/claim_service.rb b/app/services/keys/claim_service.rb deleted file mode 100644 index ebce9cce7d8c16..00000000000000 --- a/app/services/keys/claim_service.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -class Keys::ClaimService < BaseService - HEADERS = { 'Content-Type' => 'application/activity+json' }.freeze - - class Result < ActiveModelSerializers::Model - attributes :account, :device_id, :key_id, - :key, :signature - - def initialize(account, device_id, key_attributes = {}) - super( - account: account, - device_id: device_id, - key_id: key_attributes[:key_id], - key: key_attributes[:key], - signature: key_attributes[:signature], - ) - end - end - - def call(source_account, target_account_id, device_id) - @source_account = source_account - @target_account = Account.find(target_account_id) - @device_id = device_id - - if @target_account.local? - claim_local_key! - else - claim_remote_key! - end - rescue ActiveRecord::RecordNotFound - nil - end - - private - - def claim_local_key! - device = @target_account.devices.find_by(device_id: @device_id) - key = nil - - ApplicationRecord.transaction do - key = device.one_time_keys.order(Arel.sql('random()')).first! - key.destroy! - end - - @result = Result.new(@target_account, @device_id, key) - end - - def claim_remote_key! - query_result = QueryService.new.call(@target_account) - device = query_result.find(@device_id) - - return unless device.present? && device.valid_claim_url? - - json = fetch_resource_with_post(device.claim_url) - - return unless json.present? && json['publicKeyBase64'].present? - - @result = Result.new(@target_account, @device_id, key_id: json['id'], key: json['publicKeyBase64'], signature: json.dig('signature', 'signatureValue')) - rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error => e - Rails.logger.debug { "Claiming one-time key for #{@target_account.acct}:#{@device_id} failed: #{e}" } - nil - end - - def fetch_resource_with_post(uri) - build_post_request(uri).perform do |response| - raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) - - body_to_json(response.body_with_limit) if response.code == 200 - end - end - - def build_post_request(uri) - Request.new(:post, uri).tap do |request| - request.on_behalf_of(@source_account) - request.add_headers(HEADERS) - end - end -end diff --git a/app/services/keys/query_service.rb b/app/services/keys/query_service.rb deleted file mode 100644 index 33e13293f3155f..00000000000000 --- a/app/services/keys/query_service.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -class Keys::QueryService < BaseService - include JsonLdHelper - - class Result < ActiveModelSerializers::Model - attributes :account, :devices - - def initialize(account, devices) - super( - account: account, - devices: devices || [], - ) - end - - def find(device_id) - @devices.find { |device| device.device_id == device_id } - end - end - - class Device < ActiveModelSerializers::Model - attributes :device_id, :name, :identity_key, :fingerprint_key - - def initialize(attributes = {}) - super( - device_id: attributes[:device_id], - name: attributes[:name], - identity_key: attributes[:identity_key], - fingerprint_key: attributes[:fingerprint_key], - ) - @claim_url = attributes[:claim_url] - end - - def valid_claim_url? - return false if @claim_url.blank? - - begin - parsed_url = Addressable::URI.parse(@claim_url).normalize - rescue Addressable::URI::InvalidURIError - return false - end - - %w(http https).include?(parsed_url.scheme) && parsed_url.host.present? - end - end - - def call(account) - @account = account - - if @account.local? - query_local_devices! - else - query_remote_devices! - end - - Result.new(@account, @devices) - end - - private - - def query_local_devices! - @devices = @account.devices.map { |device| Device.new(device) } - end - - def query_remote_devices! - return if @account.devices_url.blank? - - json = fetch_resource(@account.devices_url) - - return if json['items'].blank? - - @devices = as_array(json['items']).map do |device| - Device.new(device_id: device['id'], name: device['name'], identity_key: device.dig('identityKey', 'publicKeyBase64'), fingerprint_key: device.dig('fingerprintKey', 'publicKeyBase64'), claim_url: device['claim']) - end - rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error => e - Rails.logger.debug { "Querying devices for #{@account.acct} failed: #{e}" } - nil - end -end diff --git a/app/validators/ed25519_key_validator.rb b/app/validators/ed25519_key_validator.rb deleted file mode 100644 index adf49296b2fb51..00000000000000 --- a/app/validators/ed25519_key_validator.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class Ed25519KeyValidator < ActiveModel::EachValidator - def validate_each(record, attribute, value) - return if value.blank? - - key = Base64.decode64(value) - - record.errors.add(attribute, I18n.t('crypto.errors.invalid_key')) unless verified?(key) - end - - private - - def verified?(key) - Ed25519.validate_key_bytes(key) - rescue ArgumentError - false - end -end diff --git a/app/validators/ed25519_signature_validator.rb b/app/validators/ed25519_signature_validator.rb deleted file mode 100644 index 0e74c231ece4a3..00000000000000 --- a/app/validators/ed25519_signature_validator.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Ed25519SignatureValidator < ActiveModel::EachValidator - def validate_each(record, attribute, value) - return if value.blank? - - verify_key = Ed25519::VerifyKey.new(Base64.decode64(option_to_value(record, :verify_key))) - signature = Base64.decode64(value) - message = option_to_value(record, :message) - - record.errors.add(attribute, I18n.t('crypto.errors.invalid_signature')) unless verified?(verify_key, signature, message) - end - - private - - def verified?(verify_key, signature, message) - verify_key.verify(signature, message) - rescue Ed25519::VerifyError, ArgumentError - false - end - - def option_to_value(record, key) - if options[key].is_a?(Proc) - options[key].call(record) - else - record.public_send(options[key]) - end - end -end diff --git a/app/workers/push_encrypted_message_worker.rb b/app/workers/push_encrypted_message_worker.rb deleted file mode 100644 index 6bee12675b0db4..00000000000000 --- a/app/workers/push_encrypted_message_worker.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -class PushEncryptedMessageWorker - include Sidekiq::Worker - include Redisable - - def perform(encrypted_message_id) - encrypted_message = EncryptedMessage.find(encrypted_message_id) - message = InlineRenderer.render(encrypted_message, nil, :encrypted_message) - timeline_id = "timeline:#{encrypted_message.device.account_id}:#{encrypted_message.device.device_id}" - - redis.publish(timeline_id, Oj.dump(event: :encrypted_message, payload: message)) - rescue ActiveRecord::RecordNotFound - true - end -end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index 86fde3cacf74dc..b47e76c08bc60a 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -118,8 +118,7 @@ :'admin:write:domain_blocks', :'admin:write:ip_blocks', :'admin:write:email_domain_blocks', - :'admin:write:canonical_email_blocks', - :crypto + :'admin:write:canonical_email_blocks' # Change the way client credentials are retrieved from the request object. # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index ba459e19f22c0d..2b0563f4d32a3a 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -19,7 +19,6 @@ inflect.acronym 'CLI' inflect.acronym 'DeepL' inflect.acronym 'DSL' - inflect.acronym 'Ed25519' inflect.acronym 'JsonLd' inflect.acronym 'OEmbed' inflect.acronym 'OStatus' diff --git a/config/locales/an.yml b/config/locales/an.yml index 589bb39836c567..2f181e0757da43 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -953,7 +953,6 @@ an: crypto: errors: invalid_key: no ye una clau Ed25519 u Curve25519 valida - invalid_signature: no ye una sinyatura Ed25519 valida date: formats: default: "%d %b %Y" diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 7512e03fd50f18..81705acba045d6 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1178,7 +1178,6 @@ ar: crypto: errors: invalid_key: ليس بمفتاح Ed25519 أو Curve25519 صالح - invalid_signature: ليس بتوقيع Ed25519 صالح date: formats: default: "%d %b %Y" diff --git a/config/locales/ast.yml b/config/locales/ast.yml index be3441507eacfb..a7d4a9917eebdb 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -486,7 +486,6 @@ ast: crypto: errors: invalid_key: nun ye una clave ed25519 o curve25519 válida - invalid_signature: nun ye una clave ed25519 válida datetime: distance_in_words: about_x_hours: "%{count} h" diff --git a/config/locales/be.yml b/config/locales/be.yml index 48ca5751cc806d..d45f443b75f06c 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1189,7 +1189,6 @@ be: crypto: errors: invalid_key: гэта не сапраўдны Ed25519 або Curve25519 ключ - invalid_signature: гэта не сапраўдная Ed25519 сігнатура date: formats: default: "%d.%m.%Y" diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 604eeca4808ba9..e2c246827afb4b 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1115,7 +1115,6 @@ bg: crypto: errors: invalid_key: не е валиден ключ Ed25519 или Curve25519 - invalid_signature: не е валиден подпис Ed25519 date: formats: default: "%b %d, %Y" diff --git a/config/locales/ca.yml b/config/locales/ca.yml index d985a2ac42f858..33a1d4e88f7bfe 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1171,7 +1171,6 @@ ca: crypto: errors: invalid_key: no és una clau Ed25519 o Curve25519 vàlida - invalid_signature: no és una signatura Ed25519 vàlida date: formats: default: "%b %d, %Y" diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 8af3d8638831aa..bc668d2ce4c7e4 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -608,7 +608,6 @@ ckb: crypto: errors: invalid_key: کلیلی باوڕپێکراو Ed25519 یان Curve25519 دروست نییە - invalid_signature: واژووی Ed25519 بڕوادار نییە date: formats: default: "%b %d, %Y" diff --git a/config/locales/co.yml b/config/locales/co.yml index b072e5e4eff0f7..58ddd7d01b593f 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -569,7 +569,6 @@ co: crypto: errors: invalid_key: ùn hè micca una chjave Ed25519 o Curve25519 valida - invalid_signature: ùn hè micca una firma Ed25519 valida date: formats: default: "%d %b %Y" diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 1000442870cc35..b7fc8ab1b0bc26 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1149,7 +1149,6 @@ cs: crypto: errors: invalid_key: není platný klíč Ed25519 nebo Curve25519 - invalid_signature: není platný podpis typu Ed25519 date: formats: default: "%d. %b %Y" diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 9d3c0c82f352d3..c2c193d9434292 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1246,7 +1246,6 @@ cy: crypto: errors: invalid_key: ddim yn allwedd Ed25519 na Curve25519 dilys - invalid_signature: ddim yn llofnod Ed25519 dilys date: formats: default: "%b %d %Y" diff --git a/config/locales/da.yml b/config/locales/da.yml index 6f781742a85ecb..a177b97de76fd2 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1174,7 +1174,6 @@ da: crypto: errors: invalid_key: er ikke en gyldig Ed25519- eller Curve25519-nøgle - invalid_signature: er ikke en gylidig Ed25519-signatur date: formats: default: "%d. %b %Y" diff --git a/config/locales/de.yml b/config/locales/de.yml index 040ddaaf6903bf..85e24c230ec339 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1174,7 +1174,6 @@ de: crypto: errors: invalid_key: ist kein gültiger Ed25519- oder Curve25519-Schlüssel - invalid_signature: ist keine gültige Ed25519-Signatur date: formats: default: "%d. %b %Y" diff --git a/config/locales/el.yml b/config/locales/el.yml index 1f408e26ea96b7..0da957cdb28de7 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1128,7 +1128,6 @@ el: crypto: errors: invalid_key: δεν είναι έγκυρο κλειδί Ed25519 ή Curve25519 - invalid_signature: δεν είναι έγκυρη υπογραφή Ed25519 date: formats: default: "%b %d, %Y" diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 56255f5d7ae9e1..577978ce88d54f 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1174,7 +1174,6 @@ en-GB: crypto: errors: invalid_key: is not a valid Ed25519 or Curve25519 key - invalid_signature: is not a valid Ed25519 signature date: formats: default: "%b %d, %Y" diff --git a/config/locales/en.yml b/config/locales/en.yml index b1c100da0c6fda..625f53f2e57108 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1174,7 +1174,6 @@ en: crypto: errors: invalid_key: is not a valid Ed25519 or Curve25519 key - invalid_signature: is not a valid Ed25519 signature date: formats: default: "%b %d, %Y" diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 46c6cbcf866908..7ebf0748194067 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1041,7 +1041,6 @@ eo: crypto: errors: invalid_key: 올바른 Ed25519 혹은 Curve25519 키가 아닙니다 - invalid_signature: 올바른 Ed25519 시그니처가 아닙니다 date: formats: default: "%Y-%b-%d" diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 4d60d080a2f3ab..9f1dc46c9df8ce 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1174,7 +1174,6 @@ es-AR: crypto: errors: invalid_key: no es una clave Ed25519 o Curve25519 válida - invalid_signature: no es una firma Ed25519 válida date: formats: default: "%d de %b de %Y" diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 1ea346a00c7119..b39b23c6170801 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1174,7 +1174,6 @@ es-MX: crypto: errors: invalid_key: no es una clave Ed25519 o Curve25519 válida - invalid_signature: no es una firma Ed25519 válida date: formats: default: "%d %b %Y" diff --git a/config/locales/es.yml b/config/locales/es.yml index c652876f3a9ef3..2815ada77957ce 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1174,7 +1174,6 @@ es: crypto: errors: invalid_key: no es una clave Ed25519 o Curve25519 válida - invalid_signature: no es una firma Ed25519 válida date: formats: default: "%d %b %Y" diff --git a/config/locales/et.yml b/config/locales/et.yml index aca4f93c4db164..60f98a471e37a2 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1174,7 +1174,6 @@ et: crypto: errors: invalid_key: ei ole õige Ed25519 ega Curve25519 võti - invalid_signature: ei ole õige Ed25519 allkiri date: formats: default: "%d. %b %Y" diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 6260033990d309..7c7f995a7143b1 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1091,7 +1091,6 @@ eu: crypto: errors: invalid_key: ez da baliozko Ed25519 edo Curve25519 gakoa - invalid_signature: ez da baliozko Ed25519 sinadura date: formats: default: "%Y(e)ko %b %d" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 996c8d6cd2abdf..c2c22af4c46a51 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -971,7 +971,6 @@ fa: crypto: errors: invalid_key: یک کلید معتبر Ed25519 یا Curve25519 نیست - invalid_signature: یک امضای معتبر Ed25519 نیست date: formats: default: "%d %b %Y" diff --git a/config/locales/fi.yml b/config/locales/fi.yml index b48b499bbe463a..5df82bff9fa440 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1174,7 +1174,6 @@ fi: crypto: errors: invalid_key: ei ole kelvollinen Ed25519- tai Curve25519-avain - invalid_signature: ei ole kelvollinen Ed25519-allekirjoitus date: formats: default: "%b %d, %Y" diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 266b73bb10aa1d..ce21aa3be7c44f 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1174,7 +1174,6 @@ fo: crypto: errors: invalid_key: er ikki ein gildur Ed25519 ella Curve25519 lykil - invalid_signature: er ikki ein gildug Ed25519 undirskrift date: formats: default: "%b %d, %Y" diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index b70a515fd16eec..3f9252ffabff7b 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1175,7 +1175,6 @@ fr-CA: crypto: errors: invalid_key: n’est pas une clé Ed25519 ou Curve25519 valide - invalid_signature: n’est pas une signature Ed25519 valide date: formats: default: "%d %b %Y" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index bc616d28963b55..cb76ae2243c33d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1175,7 +1175,6 @@ fr: crypto: errors: invalid_key: n’est pas une clé Ed25519 ou Curve25519 valide - invalid_signature: n’est pas une signature Ed25519 valide date: formats: default: "%d %b %Y" diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 6afdecd556d40d..8b854494d4b555 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1164,7 +1164,6 @@ fy: crypto: errors: invalid_key: is gjin jildige Ed25519- of Curve25519-kaai - invalid_signature: is gjin jildige Ed25519-hantekening date: formats: default: "%d %b %Y" diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 1071871c952327..a6369354cd8a56 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1228,7 +1228,6 @@ ga: crypto: errors: invalid_key: nach eochair bhailí Ed25519 nó Curve25519 í - invalid_signature: nach síniú bailí Ed25519 é date: formats: default: "%b %d, %Y" diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 5e63b5bd2300d0..b5cbc4a73ed372 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1210,7 +1210,6 @@ gd: crypto: errors: invalid_key: "– chan e iuchair Ed25519 no Curve25519 dhligheach a th’ ann" - invalid_signature: "– chan e soidhneadh Ed25519 dligheach a th’ ann" date: formats: default: "%d %b %Y" diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 58fd2d9bab50c4..9813514a7bf6cf 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1174,7 +1174,6 @@ gl: crypto: errors: invalid_key: non é unha chave Ed25519 ou Curve25519 válida - invalid_signature: non é unha sinatura Ed25519 válida date: formats: default: "%d %b, %Y" diff --git a/config/locales/he.yml b/config/locales/he.yml index 7a2d0a1d987459..13a1f6f05d30d3 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1210,7 +1210,6 @@ he: crypto: errors: invalid_key: זהו לא מפתח Ed25519 או Curve25519 קביל - invalid_signature: היא לא חתימת Ed25519 קבילה date: formats: default: "%b %d, %Y" diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 10c7506b01159a..9767c488345493 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1174,7 +1174,6 @@ hu: crypto: errors: invalid_key: érvénytelen Ed25519 vagy Curve25519 kulcs - invalid_signature: érvénytelen Ed25519 aláírás date: formats: default: "%Y. %b %d." diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 80dbc77991c24c..1fda020c0790a4 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -495,7 +495,6 @@ hy: crypto: errors: invalid_key: անվաւեր Ed25519 կամ Curve25519 բանալի - invalid_signature: անվաւեր Ed25519 բանալի date: formats: default: "%b %d, %Y" diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 957bae39915b7d..6632af061ec364 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1158,7 +1158,6 @@ ia: crypto: errors: invalid_key: non es un clave Ed25519 o Curve25519 valide - invalid_signature: non es un signatura Ed25519 valide date: formats: default: "%d %b %Y" diff --git a/config/locales/id.yml b/config/locales/id.yml index 222d2b56803f4f..96a5022a7c81da 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -936,7 +936,6 @@ id: crypto: errors: invalid_key: bukan kunci Ed25519 atau Curve25519 yang valid - invalid_signature: bukan tanda tangan Ed25519 yang valid date: formats: default: "%d %b %Y" diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 6a79686f484984..513a8eda7eb930 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1089,7 +1089,6 @@ ie: crypto: errors: invalid_key: ne es un valid clave Ed25519 o Curve25519 - invalid_signature: ne es un valid signatura Ed25519 date: formats: default: "%d.%m.%Y" diff --git a/config/locales/io.yml b/config/locales/io.yml index dbbe228e72c236..97cc417df0f82e 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1064,7 +1064,6 @@ io: crypto: errors: invalid_key: ne esas valida klefo Ed25519 o Curve25519 - invalid_signature: ne esas valida parafo Ed25519 date: formats: default: "%d %b, %Y" diff --git a/config/locales/is.yml b/config/locales/is.yml index 78dfd6048fe965..590805ad3027b0 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1178,7 +1178,6 @@ is: crypto: errors: invalid_key: er ekki gildur Ed25519 eða Curve25519-lykill - invalid_signature: er ekki gild Ed25519 undirritun date: formats: default: "%d. %b, %Y" diff --git a/config/locales/it.yml b/config/locales/it.yml index 792add14e35e22..fe6fec17d778aa 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1176,7 +1176,6 @@ it: crypto: errors: invalid_key: non è una chiave Ed25519 o Curve25519 valida - invalid_signature: non è una firma Ed25519 valida date: formats: default: "%d %b %Y" diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 13f59e981b00e7..ed6293e1cabaa9 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1146,7 +1146,6 @@ ja: crypto: errors: invalid_key: 有効なEd25519またはCurve25519キーではありません - invalid_signature: 有効なEd25519署名ではありません date: formats: default: "%Y年%m月%d日" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cbcc09a4dab1e3..3217a8e49a3842 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1151,7 +1151,6 @@ ko: crypto: errors: invalid_key: 유효하지 않은 Ed25519 또는 Curve25519 키 - invalid_signature: 유효하지 않은 Ed25519 서명 date: formats: default: "%Y-%m-%d" diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 6b80e32ba809c3..08843f645e2078 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -950,7 +950,6 @@ ku: crypto: errors: invalid_key: ed25519 ne derbasdare ne jî Curve25519 kilîta - invalid_signature: Ed25519 ne îmzeyek derbasdar e date: formats: default: "%b%d%Y" diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 2f5eb1553e417e..3d1f1a61e2447d 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1122,7 +1122,6 @@ lad: crypto: errors: invalid_key: no es una yave Ed25519 o Curve25519 valida - invalid_signature: no es una firma Ed25519 valida date: formats: default: "%d %b %Y" diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 88faeae82bd3dc..be6555a3862657 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1140,7 +1140,6 @@ lv: crypto: errors: invalid_key: nav derīga Ed25519 vai Curve25519 atslēga - invalid_signature: nav derīgs Ed25519 paraksts date: formats: default: "%b %d, %Y" diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 39c695a5398adf..0c0ffb69bfc849 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1051,7 +1051,6 @@ ms: crypto: errors: invalid_key: bukan kunci Ed25519 atau Curve25519 yang sah - invalid_signature: bukan tandatangan Ed25519 yang sah date: formats: default: "%b %d, %Y" diff --git a/config/locales/my.yml b/config/locales/my.yml index 92464523a06049..6acaa34cdc5c74 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1044,7 +1044,6 @@ my: crypto: errors: invalid_key: မှန်ကန်သော Ed25519 သို့မဟုတ် Curve25519 ကီး မဟုတ်ပါ။ - invalid_signature: မှန်ကန်သော Ed25519 လက်မှတ်မဟုတ်ပါ date: formats: default: "%b %d, %Y" diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 63656991a843a6..afc4652bf600cc 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1174,7 +1174,6 @@ nl: crypto: errors: invalid_key: is geen geldige Ed25519- of Curve25519-sleutel - invalid_signature: is geen geldige Ed25519-handtekening date: formats: default: "%d %b %Y" diff --git a/config/locales/nn.yml b/config/locales/nn.yml index b7beeb4263ed53..dcf571a7923c46 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1174,7 +1174,6 @@ nn: crypto: errors: invalid_key: er ikkje ein gild Ed25519 eller Curve25519 nykel - invalid_signature: er ikkje ein gild Ed25519-signatur date: formats: default: "%d. %b, %Y" diff --git a/config/locales/no.yml b/config/locales/no.yml index 635ceedde4c4d3..1f0b6baccecfd8 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1083,7 +1083,6 @@ crypto: errors: invalid_key: er ikke en gyldig Ed25519- eller Curve25519-nøkkel - invalid_signature: er ikke en gyldig Ed25519-signatur date: formats: default: "%d. %b, %Y" diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f0d09cb2d30178..314adf885f8dc6 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1210,7 +1210,6 @@ pl: crypto: errors: invalid_key: nie jest prawidłowym kluczem Ed25519 lub Curve25519 - invalid_signature: nie jest prawidłowym podpisem Ed25519 date: formats: default: "%d. %b %Y" diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index d1140f36454458..7742a80569c1c8 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1174,7 +1174,6 @@ pt-BR: crypto: errors: invalid_key: não é uma chave Ed25519 ou Curve25519 válida - invalid_signature: não é uma assinatura Ed25519 válida date: formats: default: "%d %b, %Y" diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index f155490eb5f2c2..d6c5c4a6ff01f7 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1174,7 +1174,6 @@ pt-PT: crypto: errors: invalid_key: não é uma chave Ed25519 ou Curve25519 válida - invalid_signature: não é uma assinatura Ed25519 válida date: formats: default: "%d %b %Y" diff --git a/config/locales/ru.yml b/config/locales/ru.yml index d66dded89be07d..f1198c3f16b6c2 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1129,7 +1129,6 @@ ru: crypto: errors: invalid_key: не является допустимым Ed25519 или Curve25519 ключом - invalid_signature: не является допустимой Ed25519 подписью date: formats: default: "%d %b %Y" diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 435749f4706385..780270ddf17b2e 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -693,7 +693,6 @@ sc: crypto: errors: invalid_key: no est una crae Ed25519 o Curve25519 vàlida - invalid_signature: no est una firma Ed25519 vàlida date: formats: default: "%d %b, %Y" diff --git a/config/locales/sco.yml b/config/locales/sco.yml index 70143a968e84cb..97eaa21ed6d0d6 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -940,7 +940,6 @@ sco: crypto: errors: invalid_key: isnae a valid Ed25519 or Curve25519 key - invalid_signature: isnae a valid Ed25519 signature date: formats: default: "%b %d, %Y" diff --git a/config/locales/si.yml b/config/locales/si.yml index 135a99ceb21703..8460de01da9f6a 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -829,7 +829,6 @@ si: crypto: errors: invalid_key: වලංගු Ed25519 හෝ Curve25519 යතුරක් නොවේ - invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: default: "%Y %b %d" diff --git a/config/locales/sl.yml b/config/locales/sl.yml index ef6d00b8d31a68..c8e806bf35efa9 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1196,7 +1196,6 @@ sl: crypto: errors: invalid_key: ni veljaven ključ Ed25519 ali Curve25519 - invalid_signature: ni veljaven podpis Ed25519 date: formats: default: "%d %b %Y" diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 70d20592a5283d..294c8a888f043f 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1166,7 +1166,6 @@ sq: crypto: errors: invalid_key: s’është kyç Ed25519 ose Curve25519 i vlefshëm - invalid_signature: s’është nënshkrim Ed25519 i vlefshëm date: formats: default: "%d %b, %Y" diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 91f0933398d5b8..bfb52c275b66b1 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1110,7 +1110,6 @@ sr-Latn: crypto: errors: invalid_key: nije validan Ed25519 ili Curve25519 ključ - invalid_signature: nije validan Ed25519 potpis date: formats: default: "%d. %b. %Y." diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 67aee931be8922..af7e7ab8d6945e 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1140,7 +1140,6 @@ sr: crypto: errors: invalid_key: није валидан Ed25519 или Curve25519 кључ - invalid_signature: није валидан Ed25519 потпис date: formats: default: "%d. %b. %Y." diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 99b7ec9b3a1c52..6146cfc8d7feeb 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1128,7 +1128,6 @@ sv: crypto: errors: invalid_key: är inte en giltig Ed25519 eller Curve25519 nyckel - invalid_signature: är inte en giltig Ed25519 signatur date: formats: default: "%b %d, %Y" diff --git a/config/locales/ta.yml b/config/locales/ta.yml index 3a98b6a25d44e3..56b2895c74fa3f 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -188,7 +188,6 @@ ta: crypto: errors: invalid_key: ஒரு முறையான Ed25519 அல்லது Curve25519 key அல்ல - invalid_signature: ஒரு முறையான Ed25519 அடையாளம் அல்ல filters: index: empty: தடுப்புகள் ஏதும் இல்லை. diff --git a/config/locales/th.yml b/config/locales/th.yml index 65424f4eb6c66c..d56385f2611add 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1156,7 +1156,6 @@ th: crypto: errors: invalid_key: ไม่ใช่กุญแจ Ed25519 หรือ Curve25519 ที่ถูกต้อง - invalid_signature: ไม่ใช่ลายเซ็น Ed25519 ที่ถูกต้อง date: formats: default: "%d %b %Y" diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d6ca6b4276c9b7..16dd4c899ded7c 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1174,7 +1174,6 @@ tr: crypto: errors: invalid_key: geçerli bir Ed25519 veya Curve25519 anahtarı değil - invalid_signature: geçerli bir Ed25519 imzası değil date: formats: default: "%d %b %Y" diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e8c4e689981712..0ef08a15555659 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1210,7 +1210,6 @@ uk: crypto: errors: invalid_key: не є припустимим ключем Ed25519 або Curve25519 - invalid_signature: не є дійсним підписом Ed25519 date: formats: default: "%b %d, %Y" diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 8f047a2cb7b2c4..98696aef7c8b63 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1156,7 +1156,6 @@ vi: crypto: errors: invalid_key: không phải là mã khóa Ed25519 hoặc Curve25519 đúng - invalid_signature: không phải là chữ ký số Ed25519 đúng date: formats: default: "%-d %B, %Y" diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 277785f683aa97..8b34da076a0162 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1156,7 +1156,6 @@ zh-CN: crypto: errors: invalid_key: 不是有效的 Ed25519 或者 Curve25519 密钥 - invalid_signature: 不是有效的 Ed25519 签名 date: formats: default: "%Y年%m月%d日" diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 7682712759c240..598c65d0494ec7 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1071,7 +1071,6 @@ zh-HK: crypto: errors: invalid_key: 不是一個有效的 Ed25519 或 Curve25519 密鑰 - invalid_signature: 不是一個有效的 Ed25519 簽名 date: formats: default: "%Y年%b月%d日" diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 35f000b6016edb..41c4c8a534e482 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1158,7 +1158,6 @@ zh-TW: crypto: errors: invalid_key: 這不是一把有效的 Ed25519 或 Curve25519 金鑰 - invalid_signature: 這不是有效的 Ed25519 簽章 date: formats: default: "%Y年%b月%d日" diff --git a/config/routes.rb b/config/routes.rb index 3ac619519d40f7..ad607e537be9f1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -134,7 +134,6 @@ def redirect_with_vary(path) scope module: :activitypub do resource :outbox, only: [:show] resource :inbox, only: [:create] - resource :claim, only: [:create] resources :collections, only: [:show] resource :followers_synchronization, only: [:show] end diff --git a/config/routes/api.rb b/config/routes/api.rb index b237791736f872..39c699b9a3042b 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -68,23 +68,6 @@ end end - # namespace :crypto do - # resources :deliveries, only: :create - - # namespace :keys do - # resource :upload, only: [:create] - # resource :query, only: [:create] - # resource :claim, only: [:create] - # resource :count, only: [:show] - # end - - # resources :encrypted_messages, only: [:index] do - # collection do - # post :clear - # end - # end - # end - resources :conversations, only: [:index, :destroy] do member do post :read diff --git a/db/migrate/20240720140205_drop_end_to_end_message_tables.rb b/db/migrate/20240720140205_drop_end_to_end_message_tables.rb new file mode 100644 index 00000000000000..dd5662885c59b3 --- /dev/null +++ b/db/migrate/20240720140205_drop_end_to_end_message_tables.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class DropEndToEndMessageTables < ActiveRecord::Migration[7.1] + def up + drop_table :system_keys + drop_table :one_time_keys + drop_table :encrypted_messages + drop_table :devices + safety_assured { remove_column :accounts, :devices_url } + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/schema.rb b/db/schema.rb index 540a971333a52a..e9aa78c2054557 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -193,7 +193,6 @@ t.boolean "hide_collections" t.integer "avatar_storage_schema_version" t.integer "header_storage_schema_version" - t.string "devices_url" t.datetime "sensitized_at", precision: nil t.integer "suspension_origin" t.boolean "trendable" @@ -412,19 +411,6 @@ t.index ["account_id"], name: "index_custom_filters_on_account_id" end - create_table "devices", force: :cascade do |t| - t.bigint "access_token_id" - t.bigint "account_id" - t.string "device_id", default: "", null: false - t.string "name", default: "", null: false - t.text "fingerprint_key", default: "", null: false - t.text "identity_key", default: "", null: false - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.index ["access_token_id"], name: "index_devices_on_access_token_id" - t.index ["account_id"], name: "index_devices_on_account_id" - end - create_table "domain_allows", force: :cascade do |t| t.string "domain", default: "", null: false t.datetime "created_at", precision: nil, null: false @@ -454,20 +440,6 @@ t.index ["domain"], name: "index_email_domain_blocks_on_domain", unique: true end - create_table "encrypted_messages", id: :bigint, default: -> { "timestamp_id('encrypted_messages'::text)" }, force: :cascade do |t| - t.bigint "device_id" - t.bigint "from_account_id" - t.string "from_device_id", default: "", null: false - t.integer "type", default: 0, null: false - t.text "body", default: "", null: false - t.text "digest", default: "", null: false - t.text "message_franking", default: "", null: false - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.index ["device_id"], name: "index_encrypted_messages_on_device_id" - t.index ["from_account_id"], name: "index_encrypted_messages_on_from_account_id" - end - create_table "favourites", force: :cascade do |t| t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false @@ -781,17 +753,6 @@ t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true end - create_table "one_time_keys", force: :cascade do |t| - t.bigint "device_id" - t.string "key_id", default: "", null: false - t.text "key", default: "", null: false - t.text "signature", default: "", null: false - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.index ["device_id"], name: "index_one_time_keys_on_device_id" - t.index ["key_id"], name: "index_one_time_keys_on_key_id" - end - create_table "pghero_space_stats", force: :cascade do |t| t.text "database" t.text "schema" @@ -1104,12 +1065,6 @@ t.index ["status_id"], name: "index_statuses_tags_on_status_id" end - create_table "system_keys", force: :cascade do |t| - t.binary "key" - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - end - create_table "tag_follows", force: :cascade do |t| t.bigint "tag_id", null: false t.bigint "account_id", null: false @@ -1306,11 +1261,7 @@ add_foreign_key "custom_filter_statuses", "custom_filters", on_delete: :cascade add_foreign_key "custom_filter_statuses", "statuses", on_delete: :cascade add_foreign_key "custom_filters", "accounts", on_delete: :cascade - add_foreign_key "devices", "accounts", on_delete: :cascade - add_foreign_key "devices", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade add_foreign_key "email_domain_blocks", "email_domain_blocks", column: "parent_id", on_delete: :cascade - add_foreign_key "encrypted_messages", "accounts", column: "from_account_id", on_delete: :cascade - add_foreign_key "encrypted_messages", "devices", on_delete: :cascade add_foreign_key "favourites", "accounts", name: "fk_5eb6c2b873", on_delete: :cascade add_foreign_key "favourites", "statuses", name: "fk_b0e856845e", on_delete: :cascade add_foreign_key "featured_tags", "accounts", on_delete: :cascade @@ -1353,7 +1304,6 @@ add_foreign_key "oauth_access_tokens", "oauth_applications", column: "application_id", name: "fk_f5fc4c1ee3", on_delete: :cascade add_foreign_key "oauth_access_tokens", "users", column: "resource_owner_id", name: "fk_e84df68546", on_delete: :cascade add_foreign_key "oauth_applications", "users", column: "owner_id", name: "fk_b0988c7c0a", on_delete: :cascade - add_foreign_key "one_time_keys", "devices", on_delete: :cascade add_foreign_key "poll_votes", "accounts", on_delete: :cascade add_foreign_key "poll_votes", "polls", on_delete: :cascade add_foreign_key "polls", "accounts", on_delete: :cascade diff --git a/spec/controllers/activitypub/claims_controller_spec.rb b/spec/controllers/activitypub/claims_controller_spec.rb deleted file mode 100644 index e887be2cbe1ae2..00000000000000 --- a/spec/controllers/activitypub/claims_controller_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ActivityPub::ClaimsController do - let(:account) { Fabricate(:account) } - - describe 'POST #create' do - context 'without signature' do - before do - post :create, params: { account_username: account.username }, body: '{}' - end - - it 'returns http not authorized' do - expect(response).to have_http_status(401) - end - end - end -end diff --git a/spec/fabricators/device_fabricator.rb b/spec/fabricators/device_fabricator.rb deleted file mode 100644 index 37a2e8977d133b..00000000000000 --- a/spec/fabricators/device_fabricator.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:device) do - access_token { Fabricate.build(:access_token) } - account { Fabricate.build(:account) } - device_id { Faker::Number.number(digits: 5) } - name { Faker::App.name } - fingerprint_key { Base64.strict_encode64(Ed25519::SigningKey.generate.verify_key.to_bytes) } - identity_key { Base64.strict_encode64(Ed25519::SigningKey.generate.verify_key.to_bytes) } -end diff --git a/spec/fabricators/encrypted_message_fabricator.rb b/spec/fabricators/encrypted_message_fabricator.rb deleted file mode 100644 index 349b659c2f515c..00000000000000 --- a/spec/fabricators/encrypted_message_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:encrypted_message) do - device { Fabricate.build(:device) } - from_account { Fabricate.build(:account) } - from_device_id { Faker::Number.number(digits: 5) } -end diff --git a/spec/fabricators/one_time_key_fabricator.rb b/spec/fabricators/one_time_key_fabricator.rb deleted file mode 100644 index 505282e05ddfbc..00000000000000 --- a/spec/fabricators/one_time_key_fabricator.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:one_time_key) do - device { Fabricate.build(:device) } - key_id { Faker::Alphanumeric.alphanumeric(number: 10) } - key { Base64.strict_encode64(Ed25519::SigningKey.generate.verify_key.to_bytes) } - - signature do |attrs| - signing_key = Ed25519::SigningKey.generate - attrs[:device].update(fingerprint_key: Base64.strict_encode64(signing_key.verify_key.to_bytes)) - Base64.strict_encode64(signing_key.sign(attrs[:key])) - end -end diff --git a/spec/fabricators/system_key_fabricator.rb b/spec/fabricators/system_key_fabricator.rb deleted file mode 100644 index bcb3bd5577b14f..00000000000000 --- a/spec/fabricators/system_key_fabricator.rb +++ /dev/null @@ -1,3 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:system_key) diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index dec17b916b803b..0986ae17151e0f 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -936,64 +936,6 @@ def activity_for_object(json) end end - context 'with an encrypted message' do - subject { described_class.new(json, sender, delivery: true, delivered_to_account_id: recipient.id) } - - let(:recipient) { Fabricate(:account) } - let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'EncryptedMessage', - attributedTo: { - type: 'Device', - deviceId: '1234', - }, - to: { - type: 'Device', - deviceId: target_device.device_id, - }, - messageType: 1, - cipherText: 'Foo', - messageFranking: 'Baz678', - digest: { - digestAlgorithm: 'Bar456', - digestValue: 'Foo123', - }, - } - end - let(:target_device) { Fabricate(:device, account: recipient) } - - before do - subject.perform - end - - it 'creates an encrypted message' do - encrypted_message = target_device.encrypted_messages.reload.first - - expect(encrypted_message) - .to be_present - .and have_attributes( - from_device_id: eq('1234'), - from_account: eq(sender), - type: eq(1), - body: eq('Foo'), - digest: eq('Foo123') - ) - end - - it 'creates a message franking' do - encrypted_message = target_device.encrypted_messages.reload.first - message_franking = encrypted_message.message_franking - - crypt = ActiveSupport::MessageEncryptor.new(SystemKey.current_key, serializer: Oj) - json = crypt.decrypt_and_verify(message_franking) - - expect(json['source_account_id']).to eq sender.id - expect(json['target_account_id']).to eq recipient.id - expect(json['original_franking']).to eq 'Baz678' - end - end - context 'when sender is followed by local users' do subject { described_class.new(json, sender, delivery: true) } diff --git a/spec/lib/vacuum/system_keys_vacuum_spec.rb b/spec/lib/vacuum/system_keys_vacuum_spec.rb deleted file mode 100644 index 84cae30411e760..00000000000000 --- a/spec/lib/vacuum/system_keys_vacuum_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Vacuum::SystemKeysVacuum do - subject { described_class.new } - - describe '#perform' do - let!(:expired_system_key) { Fabricate(:system_key, created_at: (SystemKey::ROTATION_PERIOD * 4).ago) } - let!(:current_system_key) { Fabricate(:system_key) } - - before do - subject.perform - end - - it 'deletes the expired key' do - expect { expired_system_key.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'does not delete the current key' do - expect { current_system_key.reload }.to_not raise_error - end - end -end diff --git a/spec/models/one_time_key_spec.rb b/spec/models/one_time_key_spec.rb deleted file mode 100644 index 17fcdf37883987..00000000000000 --- a/spec/models/one_time_key_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe OneTimeKey do - describe 'validations' do - context 'with an invalid signature' do - let(:one_time_key) { Fabricate.build(:one_time_key, signature: 'wrong!') } - - it 'is invalid' do - expect(one_time_key).to_not be_valid - end - end - - context 'with an invalid key' do - let(:one_time_key) { Fabricate.build(:one_time_key, key: 'wrong!') } - - it 'is invalid' do - expect(one_time_key).to_not be_valid - end - end - end -end diff --git a/spec/serializers/activitypub/device_serializer_spec.rb b/spec/serializers/activitypub/device_serializer_spec.rb deleted file mode 100644 index 226e1364465407..00000000000000 --- a/spec/serializers/activitypub/device_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ActivityPub::DeviceSerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Fabricate(:device) } - - describe 'type' do - it 'returns correct serialized type' do - expect(serialization['type']).to eq('Device') - end - end -end diff --git a/spec/serializers/activitypub/one_time_key_serializer_spec.rb b/spec/serializers/activitypub/one_time_key_serializer_spec.rb deleted file mode 100644 index b9792ebae35445..00000000000000 --- a/spec/serializers/activitypub/one_time_key_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ActivityPub::OneTimeKeySerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Fabricate(:one_time_key) } - - describe 'type' do - it 'returns correct serialized type' do - expect(serialization['type']).to eq('Curve25519Key') - end - end -end diff --git a/spec/serializers/rest/encrypted_message_serializer_spec.rb b/spec/serializers/rest/encrypted_message_serializer_spec.rb deleted file mode 100644 index a4b8ee83b2a1e9..00000000000000 --- a/spec/serializers/rest/encrypted_message_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe REST::EncryptedMessageSerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Fabricate(:encrypted_message) } - - describe 'account' do - it 'returns the associated account' do - expect(serialization['account_id']).to eq(record.from_account.id.to_s) - end - end -end diff --git a/spec/serializers/rest/keys/claim_result_serializer_spec.rb b/spec/serializers/rest/keys/claim_result_serializer_spec.rb deleted file mode 100644 index e45112705b70cd..00000000000000 --- a/spec/serializers/rest/keys/claim_result_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe REST::Keys::ClaimResultSerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Keys::ClaimService::Result.new(Account.new(id: 123), 456) } - - describe 'account' do - it 'returns the associated account' do - expect(serialization['account_id']).to eq('123') - end - end -end diff --git a/spec/serializers/rest/keys/device_serializer_spec.rb b/spec/serializers/rest/keys/device_serializer_spec.rb deleted file mode 100644 index b8370beac706f6..00000000000000 --- a/spec/serializers/rest/keys/device_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe REST::Keys::DeviceSerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Device.new(name: 'Device name') } - - describe 'name' do - it 'returns the name' do - expect(serialization['name']).to eq('Device name') - end - end -end diff --git a/spec/serializers/rest/keys/query_result_serializer_spec.rb b/spec/serializers/rest/keys/query_result_serializer_spec.rb deleted file mode 100644 index 41492f5e78f265..00000000000000 --- a/spec/serializers/rest/keys/query_result_serializer_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe REST::Keys::QueryResultSerializer do - let(:serialization) { serialized_record_json(record, described_class) } - let(:record) { Keys::QueryService::Result.new(Account.new(id: 123), []) } - - describe 'account' do - it 'returns the associated account id' do - expect(serialization['account_id']).to eq('123') - end - end -end diff --git a/spec/workers/push_encrypted_message_worker_spec.rb b/spec/workers/push_encrypted_message_worker_spec.rb deleted file mode 100644 index 311545cf562297..00000000000000 --- a/spec/workers/push_encrypted_message_worker_spec.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe PushEncryptedMessageWorker do - let(:worker) { described_class.new } - - describe 'perform' do - it 'runs without error for missing record' do - expect { worker.perform(nil) }.to_not raise_error - end - end -end diff --git a/streaming/index.js b/streaming/index.js index b302565a4e0521..48ed56b29b5d08 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -44,7 +44,6 @@ initializeLogLevel(process.env, environment); * @property {string[]} scopes * @property {string} accountId * @property {string[]} chosenLanguages - * @property {string} deviceId */ @@ -355,7 +354,7 @@ const startServer = async () => { * @returns {Promise} */ const accountFromToken = async (token, req) => { - const result = await pgPool.query('SELECT oauth_access_tokens.id, oauth_access_tokens.resource_owner_id, users.account_id, users.chosen_languages, oauth_access_tokens.scopes, devices.device_id FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id LEFT OUTER JOIN devices ON oauth_access_tokens.id = devices.access_token_id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token]); + const result = await pgPool.query('SELECT oauth_access_tokens.id, oauth_access_tokens.resource_owner_id, users.account_id, users.chosen_languages, oauth_access_tokens.scopes FROM oauth_access_tokens INNER JOIN users ON oauth_access_tokens.resource_owner_id = users.id WHERE oauth_access_tokens.token = $1 AND oauth_access_tokens.revoked_at IS NULL LIMIT 1', [token]); if (result.rows.length === 0) { throw new AuthenticationError('Invalid access token'); @@ -365,14 +364,12 @@ const startServer = async () => { req.scopes = result.rows[0].scopes.split(' '); req.accountId = result.rows[0].account_id; req.chosenLanguages = result.rows[0].chosen_languages; - req.deviceId = result.rows[0].device_id; return { accessTokenId: result.rows[0].id, scopes: result.rows[0].scopes.split(' '), accountId: result.rows[0].account_id, chosenLanguages: result.rows[0].chosen_languages, - deviceId: result.rows[0].device_id }; }; @@ -983,10 +980,6 @@ const startServer = async () => { const channelsForUserStream = req => { const arr = [`timeline:${req.accountId}`]; - if (isInScope(req, ['crypto']) && req.deviceId) { - arr.push(`timeline:${req.accountId}:${req.deviceId}`); - } - if (isInScope(req, ['read', 'read:notifications'])) { arr.push(`timeline:${req.accountId}:notifications`); } From 6f836c45aa5862cdfd65877c99252fcb28ab4da1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 05:27:50 -0400 Subject: [PATCH 042/467] Remove `crypto` values from doorkeeper application/token `scopes` (#31945) --- ...240916190140_remove_crypto_scope_values.rb | 33 +++++++++++++++++++ db/schema.rb | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240916190140_remove_crypto_scope_values.rb diff --git a/db/migrate/20240916190140_remove_crypto_scope_values.rb b/db/migrate/20240916190140_remove_crypto_scope_values.rb new file mode 100644 index 00000000000000..8caf5b801dac88 --- /dev/null +++ b/db/migrate/20240916190140_remove_crypto_scope_values.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class RemoveCryptoScopeValues < ActiveRecord::Migration[7.1] + def up + applications.in_batches do |records| + records.update_all(<<~SQL.squish) + scopes = TRIM(REPLACE(scopes, 'crypto', '')) + SQL + end + + tokens.in_batches do |records| + records.update_all(<<~SQL.squish) + scopes = TRIM(REPLACE(scopes, 'crypto', '')) + SQL + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end + + private + + def applications + Doorkeeper::Application + .where("scopes LIKE '%crypto%'") + end + + def tokens + Doorkeeper::AccessToken + .where("scopes LIKE '%crypto%'") + end +end diff --git a/db/schema.rb b/db/schema.rb index e9aa78c2054557..f9f2d9739593b4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_09_09_014637) do +ActiveRecord::Schema[7.1].define(version: 2024_09_16_190140) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" From bf8eaaa9a505f86bf7c965f981f585af34337635 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 05:42:36 -0400 Subject: [PATCH 043/467] Convert controller spec for security_key_options endpoint to request spec (#31938) --- .../auth/sessions_controller_spec.rb | 40 --------------- .../sessions/security_key_options_spec.rb | 50 +++++++++++++++++++ 2 files changed, 50 insertions(+), 40 deletions(-) create mode 100644 spec/requests/auth/sessions/security_key_options_spec.rb diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 3cc3460718caed..713ea3ff16c5bf 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -412,44 +412,4 @@ end end end - - describe 'GET #webauthn_options' do - subject { get :webauthn_options, session: { attempt_user_id: user.id } } - - let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) - end - - context 'with WebAuthn and OTP enabled as second factor' do - let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" } - - let(:fake_client) { WebAuthn::FakeClient.new(domain) } - - before do - user.update(webauthn_id: WebAuthn.generate_user_id) - public_key_credential = WebAuthn::Credential.from_create(fake_client.create) - user.webauthn_credentials.create( - nickname: 'SecurityKeyNickname', - external_id: public_key_credential.id, - public_key: public_key_credential.public_key, - sign_count: '1000' - ) - post :create, params: { user: { email: user.email, password: user.password } } - end - - it 'returns http success' do - subject - - expect(response).to have_http_status 200 - end - end - - context 'when WebAuthn not enabled' do - it 'returns http unauthorized' do - subject - - expect(response).to have_http_status 401 - end - end - end end diff --git a/spec/requests/auth/sessions/security_key_options_spec.rb b/spec/requests/auth/sessions/security_key_options_spec.rb new file mode 100644 index 00000000000000..6246e4beb315f7 --- /dev/null +++ b/spec/requests/auth/sessions/security_key_options_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'webauthn/fake_client' + +RSpec.describe 'Security Key Options' do + describe 'GET /auth/sessions/security_key_options' do + let!(:user) do + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + end + + context 'with WebAuthn and OTP enabled as second factor' do + let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" } + + let(:fake_client) { WebAuthn::FakeClient.new(domain) } + let(:public_key_credential) { WebAuthn::Credential.from_create(fake_client.create) } + + before do + user.update(webauthn_id: WebAuthn.generate_user_id) + Fabricate( + :webauthn_credential, + user_id: user.id, + external_id: public_key_credential.id, + public_key: public_key_credential.public_key + ) + post '/auth/sign_in', params: { user: { email: user.email, password: user.password } } + end + + it 'returns http success' do + get '/auth/sessions/security_key_options' + + expect(response) + .to have_http_status 200 + expect(response.content_type) + .to start_with('application/json') + end + end + + context 'when WebAuthn not enabled' do + it 'returns http unauthorized' do + get '/auth/sessions/security_key_options' + + expect(response) + .to have_http_status 401 + expect(response.content_type) + .to start_with('application/json') + end + end + end +end From 42f9f507b632c1b90fecfed5f38ce2dbb2d0c949 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:29:21 +0200 Subject: [PATCH 044/467] Update dependency pg to v8.13.0 (#31949) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 45ede6ca997bc3..5372c39f47306f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13001,7 +13001,7 @@ __metadata: languageName: node linkType: hard -"pg-connection-string@npm:^2.6.0, pg-connection-string@npm:^2.6.4": +"pg-connection-string@npm:^2.6.0, pg-connection-string@npm:^2.7.0": version: 2.7.0 resolution: "pg-connection-string@npm:2.7.0" checksum: 10c0/50a1496a1c858f9495d78a2c7a66d93ef3602e718aff2953bb5738f3ea616d7f727f32fc20513c9bed127650cd14c1ddc7b458396f4000e689d4b64c65c5c51e @@ -13022,19 +13022,19 @@ __metadata: languageName: node linkType: hard -"pg-pool@npm:^3.6.2": - version: 3.6.2 - resolution: "pg-pool@npm:3.6.2" +"pg-pool@npm:^3.7.0": + version: 3.7.0 + resolution: "pg-pool@npm:3.7.0" peerDependencies: pg: ">=8.0" - checksum: 10c0/14c524549490954b5e48457a4b808df8f619f6deeb3b395b0cd184a8f4ed65a9273fe0697ba0341a41d6745af197f1437eb1cf51fff0cbbf5b0fb3852ebe5392 + checksum: 10c0/9128673cf941f288c0cb1a74ca959a9b4f6075ef73b2cc7dece5d4db3dd7043784869e7c12bce2e69ca0df22132a419cc45c2050b4373632856fe8bae9eb94b5 languageName: node linkType: hard -"pg-protocol@npm:*, pg-protocol@npm:^1.6.1": - version: 1.6.1 - resolution: "pg-protocol@npm:1.6.1" - checksum: 10c0/7eadef4010ac0a3925c460be7332ca4098a5c6d5181725a62193fcfa800000ae6632d98d814f3989b42cf5fdc3b45e34c714a1959d29174e81e30730e140ae5f +"pg-protocol@npm:*, pg-protocol@npm:^1.7.0": + version: 1.7.0 + resolution: "pg-protocol@npm:1.7.0" + checksum: 10c0/c4af854d9b843c808231c0040fed89f2b9101006157df8da2bb2f62a7dde702de748d852228dc22df41cc7ffddfb526af3bcb34b278b581e9f76a060789186c1 languageName: node linkType: hard @@ -13067,13 +13067,13 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.12.0 - resolution: "pg@npm:8.12.0" + version: 8.13.0 + resolution: "pg@npm:8.13.0" dependencies: pg-cloudflare: "npm:^1.1.1" - pg-connection-string: "npm:^2.6.4" - pg-pool: "npm:^3.6.2" - pg-protocol: "npm:^1.6.1" + pg-connection-string: "npm:^2.7.0" + pg-pool: "npm:^3.7.0" + pg-protocol: "npm:^1.7.0" pg-types: "npm:^2.1.0" pgpass: "npm:1.x" peerDependencies: @@ -13084,7 +13084,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/973e49b5e7327c42fc62806efa8c824159ab7a0b676cefe6eeb51a59b6e226587911ec27697f36c18d69e58a7f4f0b76d0829364087194d13ed431ab7c9c417a + checksum: 10c0/1521189063d2293d62f3fac61e797a3096a62a69668c223827d00b83c17a320805f31f0b5316feb80f8d9eed0c6c32f95146d8aca866af05816a66fd2ba8e32a languageName: node linkType: hard From e3baa1cdda2af3d0ff7920e6249a3a9c0ccbe562 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 18 Sep 2024 09:29:57 -0400 Subject: [PATCH 045/467] Add coverage for `AccountDeletionRequest` class (#31937) --- spec/models/account_deletion_request_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 spec/models/account_deletion_request_spec.rb diff --git a/spec/models/account_deletion_request_spec.rb b/spec/models/account_deletion_request_spec.rb new file mode 100644 index 00000000000000..7dbfbed12a1b5a --- /dev/null +++ b/spec/models/account_deletion_request_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountDeletionRequest do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + end + + describe '#due_at' do + before { stub_const 'AccountDeletionRequest::DELAY_TO_DELETION', 1.day } + + it 'returns time from created at with delay added' do + account_deletion_request = Fabricate :account_deletion_request, created_at: Date.current.at_midnight + expect(account_deletion_request.due_at) + .to be_within(0.1).of(Date.tomorrow.at_midnight) + end + end +end From 8b708340356e18696e5ab9e83067ce9297e481f7 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 18 Sep 2024 19:39:15 +0200 Subject: [PATCH 046/467] Fix the appearance of avatars when they do not load (#31966) --- app/javascript/styles/mastodon/components.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 5016480f324ee8..495481622a73a5 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2032,13 +2032,14 @@ body > [data-popper-placement] { display: block; position: relative; border-radius: var(--avatar-border-radius); + background-color: var(--surface-background-color); img { - display: block; width: 100%; height: 100%; object-fit: cover; border-radius: var(--avatar-border-radius); + display: inline-block; // to not show broken images } &-inline { From 29656cb9e0e5fbecdec5bc5f4e8fc2249e1b8c4e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 18 Sep 2024 19:39:32 +0200 Subject: [PATCH 047/467] Fix sass deprecation warning (#31961) --- .../styles/mastodon-light/variables.scss | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 76ede2623319f8..76bdc4022e3ef0 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -1,3 +1,5 @@ +@use 'sass:color'; + // Dependent colors $black: #000000; $white: #ffffff; @@ -47,11 +49,19 @@ $account-background-color: $white !default; // Invert darkened and lightened colors @function darken($color, $amount) { - @return hsl(hue($color), saturation($color), lightness($color) + $amount); + @return hsl( + hue($color), + color.channel($color, 'saturation', $space: hsl), + color.channel($color, 'lightness', $space: hsl) + $amount + ); } @function lighten($color, $amount) { - @return hsl(hue($color), saturation($color), lightness($color) - $amount); + @return hsl( + hue($color), + color.channel($color, 'saturation', $space: hsl), + color.channel($color, 'lightness', $space: hsl) - $amount + ); } $emojis-requiring-inversion: 'chains'; From 62a39d60cedc073b3190b9ba2f2f6f3173057eb2 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 19 Sep 2024 11:50:06 +0200 Subject: [PATCH 048/467] Fix rolling updates by moving DropEndToEndMessageTables to post-deployment migrations (#31963) --- .../20240720140205_drop_end_to_end_message_tables.rb | 0 .../20240916190140_remove_crypto_scope_values.rb | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename db/{migrate => post_migrate}/20240720140205_drop_end_to_end_message_tables.rb (100%) rename db/{migrate => post_migrate}/20240916190140_remove_crypto_scope_values.rb (100%) diff --git a/db/migrate/20240720140205_drop_end_to_end_message_tables.rb b/db/post_migrate/20240720140205_drop_end_to_end_message_tables.rb similarity index 100% rename from db/migrate/20240720140205_drop_end_to_end_message_tables.rb rename to db/post_migrate/20240720140205_drop_end_to_end_message_tables.rb diff --git a/db/migrate/20240916190140_remove_crypto_scope_values.rb b/db/post_migrate/20240916190140_remove_crypto_scope_values.rb similarity index 100% rename from db/migrate/20240916190140_remove_crypto_scope_values.rb rename to db/post_migrate/20240916190140_remove_crypto_scope_values.rb From 90db524a90ea5fee8b791b15501c7348f8a87c39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:50:58 +0000 Subject: [PATCH 049/467] Update dependency puma to v6.4.3 (#31975) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5ed8fe78ebcfb2..b19c5bb57867a6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -609,7 +609,7 @@ GEM psych (5.1.2) stringio public_suffix (6.0.1) - puma (6.4.2) + puma (6.4.3) nio4r (~> 2.0) pundit (2.4.0) activesupport (>= 3.0.0) From 1fce55cf5dc63d944f45b938eb3df28742ca7d77 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:51:14 +0000 Subject: [PATCH 050/467] Update dependency aws-sdk-s3 to v1.163.0 (#31972) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b19c5bb57867a6..41a8b68fae8ff8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,8 +100,8 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.974.0) - aws-sdk-core (3.205.0) + aws-partitions (1.977.0) + aws-sdk-core (3.206.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) @@ -109,11 +109,11 @@ GEM aws-sdk-kms (1.91.0) aws-sdk-core (~> 3, >= 3.205.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.162.0) + aws-sdk-s3 (1.163.0) aws-sdk-core (~> 3, >= 3.205.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.9.1) + aws-sigv4 (1.10.0) aws-eventstream (~> 1, >= 1.0.2) azure-storage-blob (2.0.3) azure-storage-common (~> 2.0) From b071e618e7c53a89ee332ae4c7afe9c5b4e9d176 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 19 Sep 2024 06:15:21 -0400 Subject: [PATCH 051/467] Combine API request spec assertions (#31970) --- spec/requests/api/v1/admin/accounts_spec.rb | 6 +-- spec/requests/api/v1/admin/tags_spec.rb | 12 +----- spec/requests/api/v1/apps/credentials_spec.rb | 12 +----- spec/requests/api/v1/blocks_spec.rb | 7 +--- spec/requests/api/v1/bookmarks_spec.rb | 7 +--- spec/requests/api/v1/favourites_spec.rb | 14 +------ spec/requests/api/v1/featured_tags_spec.rb | 19 +--------- spec/requests/api/v1/followed_tags_spec.rb | 7 +--- .../api/v1/instances/languages_spec.rb | 5 +-- spec/requests/api/v1/lists/accounts_spec.rb | 7 +--- spec/requests/api/v1/media_spec.rb | 7 +--- spec/requests/api/v1/mutes_spec.rb | 14 +------ .../api/v1/notifications/requests_spec.rb | 7 +--- spec/requests/api/v1/profiles_spec.rb | 38 +------------------ .../api/v1/statuses/bookmarks_spec.rb | 18 ++------- .../api/v1/statuses/favourites_spec.rb | 18 ++------- spec/requests/api/v1/statuses/pins_spec.rb | 12 +----- spec/requests/api/v1/suggestions_spec.rb | 14 +------ spec/requests/api/v1/timelines/home_spec.rb | 12 +----- spec/requests/api/v1/timelines/link_spec.rb | 6 +-- spec/requests/api/v2/filters_spec.rb | 26 ++----------- 21 files changed, 36 insertions(+), 232 deletions(-) diff --git a/spec/requests/api/v1/admin/accounts_spec.rb b/spec/requests/api/v1/admin/accounts_spec.rb index 2dc45d5eb25505..f557b61403af4c 100644 --- a/spec/requests/api/v1/admin/accounts_spec.rb +++ b/spec/requests/api/v1/admin/accounts_spec.rb @@ -193,15 +193,11 @@ it_behaves_like 'forbidden for wrong scope', 'write write:accounts read admin:read' it_behaves_like 'forbidden for wrong role', '' - it 'removes the user successfully', :aggregate_failures do + it 'removes the user successfully and logs action', :aggregate_failures do subject expect(response).to have_http_status(200) expect(User.where(id: account.user.id)).to_not exist - end - - it 'logs action', :aggregate_failures do - subject expect(latest_admin_action_log) .to be_present diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index 2f730cdeb8dfaf..fda9227acf5402 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -73,14 +73,10 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do + it 'returns http success and expected tag content' do subject expect(response).to have_http_status(200) - end - - it 'returns expected tag content' do - subject expect(response.parsed_body[:id].to_i).to eq(tag.id) expect(response.parsed_body[:name]).to eq(tag.name) @@ -107,14 +103,10 @@ it_behaves_like 'forbidden for wrong scope', 'admin:read' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do + it 'returns http success and updates tag' do subject expect(response).to have_http_status(200) - end - - it 'returns updated tag' do - subject expect(response.parsed_body[:id].to_i).to eq(tag.id) expect(response.parsed_body[:name]).to eq(tag.name.upcase) diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 1cd6a4178fcd8e..6fd885eb8685f6 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -47,14 +47,10 @@ let(:token) { Fabricate(:accessible_access_token, application: application) } let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - it 'returns http success' do + it 'returns http success and returns app information' do subject expect(response).to have_http_status(200) - end - - it 'returns the app information correctly' do - subject expect(response.parsed_body).to match( a_hash_including( @@ -108,14 +104,10 @@ let(:token) { Fabricate(:accessible_access_token, application: application) } let(:headers) { { 'Authorization' => "Bearer #{token.token}-invalid" } } - it 'returns http authorization error' do + it 'returns http authorization error with json error' do subject expect(response).to have_http_status(401) - end - - it 'returns the error in the json response' do - subject expect(response.parsed_body).to match( a_hash_including( diff --git a/spec/requests/api/v1/blocks_spec.rb b/spec/requests/api/v1/blocks_spec.rb index d2f1c46a5b9839..fc028f9bac8dd4 100644 --- a/spec/requests/api/v1/blocks_spec.rb +++ b/spec/requests/api/v1/blocks_spec.rb @@ -32,15 +32,10 @@ context 'with limit param' do let(:params) { { limit: 2 } } - it 'returns only the requested number of blocked accounts' do + it 'returns only the requested number of blocked accounts and sets link header pagination' do subject expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets correct link header pagination' do - subject - expect(response) .to include_pagination_headers( prev: api_v1_blocks_url(limit: params[:limit], since_id: blocks.last.id), diff --git a/spec/requests/api/v1/bookmarks_spec.rb b/spec/requests/api/v1/bookmarks_spec.rb index 95a71abcac706b..5955de66524287 100644 --- a/spec/requests/api/v1/bookmarks_spec.rb +++ b/spec/requests/api/v1/bookmarks_spec.rb @@ -24,15 +24,10 @@ it_behaves_like 'forbidden for wrong scope', 'write' - it 'returns http success' do + it 'returns http success and the bookmarked statuses' do subject expect(response).to have_http_status(200) - end - - it 'returns the bookmarked statuses' do - subject - expect(response.parsed_body).to match_array(expected_response) end diff --git a/spec/requests/api/v1/favourites_spec.rb b/spec/requests/api/v1/favourites_spec.rb index 78e9d61551fab7..2f8bef1190d75b 100644 --- a/spec/requests/api/v1/favourites_spec.rb +++ b/spec/requests/api/v1/favourites_spec.rb @@ -24,30 +24,20 @@ it_behaves_like 'forbidden for wrong scope', 'write' - it 'returns http success' do + it 'returns http success and includes the favourites' do subject expect(response).to have_http_status(200) - end - - it 'returns the favourites' do - subject - expect(response.parsed_body).to match_array(expected_response) end context 'with limit param' do let(:params) { { limit: 1 } } - it 'returns only the requested number of favourites' do + it 'returns only the requested number of favourites and sets pagination headers' do subject expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers' do - subject - expect(response) .to include_pagination_headers( prev: api_v1_favourites_url(limit: params[:limit], min_id: favourites.last.id), diff --git a/spec/requests/api/v1/featured_tags_spec.rb b/spec/requests/api/v1/featured_tags_spec.rb index 423cc0c560ff60..f0e939d42a19ac 100644 --- a/spec/requests/api/v1/featured_tags_spec.rb +++ b/spec/requests/api/v1/featured_tags_spec.rb @@ -58,15 +58,10 @@ describe 'POST /api/v1/featured_tags' do let(:params) { { name: 'tag' } } - it 'returns http success' do + it 'returns http success and includes correct tag name' do post '/api/v1/featured_tags', headers: headers, params: params expect(response).to have_http_status(200) - end - - it 'returns the correct tag name' do - post '/api/v1/featured_tags', headers: headers, params: params - expect(response.parsed_body) .to include( name: params[:name] @@ -132,23 +127,13 @@ let!(:featured_tag) { FeaturedTag.create(name: 'tag', account: user.account) } let(:id) { featured_tag.id } - it 'returns http success' do + it 'returns http success with an empty body and deletes the featured tag', :inline_jobs do delete "/api/v1/featured_tags/#{id}", headers: headers expect(response).to have_http_status(200) - end - - it 'returns an empty body' do - delete "/api/v1/featured_tags/#{id}", headers: headers - expect(response.parsed_body).to be_empty - end - - it 'deletes the featured tag', :inline_jobs do - delete "/api/v1/featured_tags/#{id}", headers: headers featured_tag = FeaturedTag.find_by(id: id) - expect(featured_tag).to be_nil end diff --git a/spec/requests/api/v1/followed_tags_spec.rb b/spec/requests/api/v1/followed_tags_spec.rb index f7787cb76360b3..f15c0d7f44db50 100644 --- a/spec/requests/api/v1/followed_tags_spec.rb +++ b/spec/requests/api/v1/followed_tags_spec.rb @@ -28,15 +28,10 @@ it_behaves_like 'forbidden for wrong scope', 'write write:follows' - it 'returns http success' do + it 'returns http success and includes followed tags' do subject expect(response).to have_http_status(:success) - end - - it 'returns the followed tags correctly' do - subject - expect(response.parsed_body).to match_array(expected_response) end diff --git a/spec/requests/api/v1/instances/languages_spec.rb b/spec/requests/api/v1/instances/languages_spec.rb index 79ea62c5996433..3ab1ba57b85c37 100644 --- a/spec/requests/api/v1/instances/languages_spec.rb +++ b/spec/requests/api/v1/instances/languages_spec.rb @@ -8,11 +8,8 @@ get '/api/v1/instance/languages' end - it 'returns http success' do + it 'returns http success and includes supported languages' do expect(response).to have_http_status(200) - end - - it 'returns the supported languages' do expect(response.parsed_body.pluck(:code)).to match_array LanguagesHelper::SUPPORTED_LOCALES.keys.map(&:to_s) end end diff --git a/spec/requests/api/v1/lists/accounts_spec.rb b/spec/requests/api/v1/lists/accounts_spec.rb index d147b21ee7f5eb..6e5f9e4e9dd424 100644 --- a/spec/requests/api/v1/lists/accounts_spec.rb +++ b/spec/requests/api/v1/lists/accounts_spec.rb @@ -139,16 +139,11 @@ list.accounts << [bob, peter] end - it 'removes the specified account from the list', :aggregate_failures do + it 'removes the specified account from the list but keeps other accounts in the list', :aggregate_failures do subject expect(response).to have_http_status(200) expect(list.accounts).to_not include(bob) - end - - it 'does not remove any other account from the list' do - subject - expect(list.accounts).to include(peter) end diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb index d0af334825e35c..a10bbb31efb01a 100644 --- a/spec/requests/api/v1/media_spec.rb +++ b/spec/requests/api/v1/media_spec.rb @@ -17,15 +17,10 @@ it_behaves_like 'forbidden for wrong scope', 'read' - it 'returns http success' do + it 'returns http success with media information' do subject expect(response).to have_http_status(200) - end - - it 'returns the media information' do - subject - expect(response.parsed_body).to match( a_hash_including( id: media.id.to_s, diff --git a/spec/requests/api/v1/mutes_spec.rb b/spec/requests/api/v1/mutes_spec.rb index 6402c908ffe4ce..316d455d288fe5 100644 --- a/spec/requests/api/v1/mutes_spec.rb +++ b/spec/requests/api/v1/mutes_spec.rb @@ -18,32 +18,22 @@ it_behaves_like 'forbidden for wrong scope', 'write write:mutes' - it 'returns http success' do + it 'returns http success with muted accounts' do subject expect(response).to have_http_status(200) - end - - it 'returns the muted accounts' do - subject muted_accounts = mutes.map(&:target_account) - expect(response.parsed_body.pluck(:id)).to match_array(muted_accounts.map { |account| account.id.to_s }) end context 'with limit param' do let(:params) { { limit: 1 } } - it 'returns only the requested number of muted accounts' do + it 'returns only the requested number of muted accounts with pagination headers' do subject expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers', :aggregate_failures do - subject - expect(response) .to include_pagination_headers( prev: api_v1_mutes_url(limit: params[:limit], since_id: mutes.last.id), diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb index dc125bc7aa8ef4..030b7cfa212e50 100644 --- a/spec/requests/api/v1/notifications/requests_spec.rb +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -39,15 +39,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:notifications' - it 'returns http success' do + it 'returns http success and creates notification permission' do subject expect(response).to have_http_status(200) - end - - it 'creates notification permission' do - subject - expect(NotificationPermission.find_by(account: notification_request.account, from_account: notification_request.from_account)).to_not be_nil end diff --git a/spec/requests/api/v1/profiles_spec.rb b/spec/requests/api/v1/profiles_spec.rb index 26a9b848e56e50..9616f4155974f3 100644 --- a/spec/requests/api/v1/profiles_spec.rb +++ b/spec/requests/api/v1/profiles_spec.rb @@ -28,31 +28,14 @@ it_behaves_like 'forbidden for wrong scope', 'read' end - it 'returns http success' do + it 'returns http success and deletes the avatar, preserves the header, queues up distribution' do delete '/api/v1/profile/avatar', headers: headers expect(response).to have_http_status(200) - end - - it 'deletes the avatar' do - delete '/api/v1/profile/avatar', headers: headers account.reload - expect(account.avatar).to_not exist - end - - it 'does not delete the header' do - delete '/api/v1/profile/avatar', headers: headers - - account.reload - expect(account.header).to exist - end - - it 'queues up an account update distribution' do - delete '/api/v1/profile/avatar', headers: headers - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) end end @@ -66,31 +49,14 @@ it_behaves_like 'forbidden for wrong scope', 'read' end - it 'returns http success' do + it 'returns http success, preserves the avatar, deletes the header, queues up distribution' do delete '/api/v1/profile/header', headers: headers expect(response).to have_http_status(200) - end - - it 'does not delete the avatar' do - delete '/api/v1/profile/header', headers: headers account.reload - expect(account.avatar).to exist - end - - it 'deletes the header' do - delete '/api/v1/profile/header', headers: headers - - account.reload - expect(account.header).to_not exist - end - - it 'queues up an account update distribution' do - delete '/api/v1/profile/header', headers: headers - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) end end diff --git a/spec/requests/api/v1/statuses/bookmarks_spec.rb b/spec/requests/api/v1/statuses/bookmarks_spec.rb index f1bcfda0ff638b..6401a4370db7c4 100644 --- a/spec/requests/api/v1/statuses/bookmarks_spec.rb +++ b/spec/requests/api/v1/statuses/bookmarks_spec.rb @@ -18,15 +18,11 @@ it_behaves_like 'forbidden for wrong scope', 'read' context 'with public status' do - it 'bookmarks the status successfully', :aggregate_failures do + it 'bookmarks the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.bookmarked?(status)).to be true - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, bookmarked: true) @@ -93,15 +89,11 @@ Bookmark.find_or_create_by!(account: user.account, status: status) end - it 'unbookmarks the status successfully', :aggregate_failures do + it 'unbookmarks the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.bookmarked?(status)).to be false - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, bookmarked: false) @@ -117,15 +109,11 @@ status.account.block!(user.account) end - it 'unbookmarks the status successfully', :aggregate_failures do + it 'unbookmarks the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.bookmarked?(status)).to be false - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, bookmarked: false) diff --git a/spec/requests/api/v1/statuses/favourites_spec.rb b/spec/requests/api/v1/statuses/favourites_spec.rb index f9f0ff62990cfa..c3acf0413e7f58 100644 --- a/spec/requests/api/v1/statuses/favourites_spec.rb +++ b/spec/requests/api/v1/statuses/favourites_spec.rb @@ -18,15 +18,11 @@ it_behaves_like 'forbidden for wrong scope', 'read read:favourites' context 'with public status' do - it 'favourites the status successfully', :aggregate_failures do + it 'favourites the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.favourited?(status)).to be true - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, favourites_count: 1, favourited: true) @@ -84,16 +80,12 @@ FavouriteService.new.call(user.account, status) end - it 'unfavourites the status successfully', :aggregate_failures do + it 'unfavourites the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.favourited?(status)).to be false - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, favourites_count: 0, favourited: false) @@ -107,16 +99,12 @@ status.account.block!(user.account) end - it 'unfavourites the status successfully', :aggregate_failures do + it 'unfavourites the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.favourited?(status)).to be false - end - - it 'returns json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, favourites_count: 0, favourited: false) diff --git a/spec/requests/api/v1/statuses/pins_spec.rb b/spec/requests/api/v1/statuses/pins_spec.rb index 56e60c6d368c2c..409c50e7c211e6 100644 --- a/spec/requests/api/v1/statuses/pins_spec.rb +++ b/spec/requests/api/v1/statuses/pins_spec.rb @@ -18,15 +18,11 @@ it_behaves_like 'forbidden for wrong scope', 'read read:accounts' context 'when the status is public' do - it 'pins the status successfully', :aggregate_failures do + it 'pins the status successfully and returns updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.pinned?(status)).to be true - end - - it 'return json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, pinned: true) @@ -86,15 +82,11 @@ Fabricate(:status_pin, status: status, account: user.account) end - it 'unpins the status successfully', :aggregate_failures do + it 'unpins the status successfully and includes updated json', :aggregate_failures do subject expect(response).to have_http_status(200) expect(user.account.pinned?(status)).to be false - end - - it 'return json with updated attributes' do - subject expect(response.parsed_body).to match( a_hash_including(id: status.id.to_s, pinned: false) diff --git a/spec/requests/api/v1/suggestions_spec.rb b/spec/requests/api/v1/suggestions_spec.rb index 8267bb92a047db..b971f8812961f4 100644 --- a/spec/requests/api/v1/suggestions_spec.rb +++ b/spec/requests/api/v1/suggestions_spec.rb @@ -23,15 +23,10 @@ it_behaves_like 'forbidden for wrong scope', 'write' - it 'returns http success' do + it 'returns http success with accounts' do subject expect(response).to have_http_status(200) - end - - it 'returns accounts' do - subject - expect(response.parsed_body) .to contain_exactly(include(id: bob.id.to_s), include(id: jeff.id.to_s)) end @@ -72,15 +67,10 @@ it_behaves_like 'forbidden for wrong scope', 'read' - it 'returns http success' do + it 'returns http success and removes suggestion' do subject expect(response).to have_http_status(200) - end - - it 'removes the specified suggestion' do - subject - expect(FollowRecommendationMute.exists?(account: user.account, target_account: jeff)).to be true end diff --git a/spec/requests/api/v1/timelines/home_spec.rb b/spec/requests/api/v1/timelines/home_spec.rb index afad2988ca2a10..19a6f3adbc1521 100644 --- a/spec/requests/api/v1/timelines/home_spec.rb +++ b/spec/requests/api/v1/timelines/home_spec.rb @@ -31,14 +31,10 @@ PostStatusService.new.call(ana, text: 'New toot from ana.') end - it 'returns http success' do + it 'returns http success and statuses of followed users' do subject expect(response).to have_http_status(200) - end - - it 'returns the statuses of followed users' do - subject expect(response.parsed_body.pluck(:id)).to match_array(home_statuses.map { |status| status.id.to_s }) end @@ -46,14 +42,10 @@ context 'with limit param' do let(:params) { { limit: 1 } } - it 'returns only the requested number of statuses' do + it 'returns only the requested number of statuses with pagination headers', :aggregate_failures do subject expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers', :aggregate_failures do - subject expect(response) .to include_pagination_headers( diff --git a/spec/requests/api/v1/timelines/link_spec.rb b/spec/requests/api/v1/timelines/link_spec.rb index 8999364703f735..e1d421fb7af04b 100644 --- a/spec/requests/api/v1/timelines/link_spec.rb +++ b/spec/requests/api/v1/timelines/link_spec.rb @@ -123,15 +123,11 @@ context 'with limit param' do let(:params) { { limit: 1, url: url } } - it 'returns only the requested number of statuses', :aggregate_failures do + it 'returns only the requested number of statuses with pagination headers', :aggregate_failures do subject expect(response).to have_http_status(200) expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers', :aggregate_failures do - subject expect(response) .to include_pagination_headers( diff --git a/spec/requests/api/v2/filters_spec.rb b/spec/requests/api/v2/filters_spec.rb index 850c773df3d7a3..ad8b55973e2bc2 100644 --- a/spec/requests/api/v2/filters_spec.rb +++ b/spec/requests/api/v2/filters_spec.rb @@ -49,14 +49,10 @@ context 'with valid params' do let(:params) { { title: 'magic', context: %w(home), filter_action: 'hide', keywords_attributes: [keyword: 'magic'] } } - it 'returns http success' do + it 'returns http success with a filter with keywords in json and creates a filter', :aggregate_failures do subject expect(response).to have_http_status(200) - end - - it 'returns a filter with keywords', :aggregate_failures do - subject expect(response.parsed_body) .to include( @@ -67,10 +63,6 @@ include(keyword: 'magic', whole_word: true) ) ) - end - - it 'creates a filter', :aggregate_failures do - subject filter = user.account.custom_filters.first @@ -189,20 +181,12 @@ allow(redis).to receive_messages(publish: nil) end - it 'returns http success' do + it 'returns http success and updates keyword and sends a filters_changed event' do subject expect(response).to have_http_status(200) - end - - it 'updates the keyword' do - subject expect(keyword.reload.keyword).to eq 'updated' - end - - it 'sends exactly one filters_changed event' do - subject expect(redis).to have_received(:publish).with("timeline:#{user.account.id}", Oj.dump(event: :filters_changed)).once end @@ -229,14 +213,10 @@ it_behaves_like 'forbidden for wrong scope', 'read read:filters' it_behaves_like 'unauthorized for invalid token' - it 'returns http success' do + it 'returns http success and removes the filter' do subject expect(response).to have_http_status(200) - end - - it 'removes the filter' do - subject expect { filter.reload }.to raise_error ActiveRecord::RecordNotFound end From 5d573c976e8f02e67014154232d2c7f936d8f717 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 19 Sep 2024 06:23:58 -0400 Subject: [PATCH 052/467] Remove unused E2EE-related methods (#31964) --- app/javascript/mastodon/stream.js | 1 - app/presenters/activitypub/activity_presenter.rb | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js index 40d69136a84808..59b2fd75828f4a 100644 --- a/app/javascript/mastodon/stream.js +++ b/app/javascript/mastodon/stream.js @@ -209,7 +209,6 @@ const KNOWN_EVENT_TYPES = [ 'notification', 'conversation', 'filters_changed', - 'encrypted_message', 'announcement', 'announcement.delete', 'announcement.reaction', diff --git a/app/presenters/activitypub/activity_presenter.rb b/app/presenters/activitypub/activity_presenter.rb index 38e8527e8e5adc..994cbeaf48fd0c 100644 --- a/app/presenters/activitypub/activity_presenter.rb +++ b/app/presenters/activitypub/activity_presenter.rb @@ -26,16 +26,5 @@ def from_status(status, allow_inlining: true) end end end - - def from_encrypted_message(encrypted_message) - new.tap do |presenter| - presenter.id = ActivityPub::TagManager.instance.generate_uri_for(nil) - presenter.type = 'Create' - presenter.actor = ActivityPub::TagManager.instance.uri_for(encrypted_message.source_account) - presenter.published = Time.now.utc - presenter.to = ActivityPub::TagManager.instance.uri_for(encrypted_message.target_account) - presenter.virtual_object = encrypted_message - end - end end end From efdc17513d4f929259f5d92b9ba2718e280295e3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:34:19 +0000 Subject: [PATCH 053/467] New Crowdin Translations (automated) (#31974) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ko.json | 3 +++ app/javascript/mastodon/locales/lv.json | 1 + config/locales/activerecord.ko.yml | 6 ++++++ config/locales/ko.yml | 8 ++++++++ config/locales/lv.yml | 2 +- config/locales/simple_form.ko.yml | 2 ++ 6 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 6795bc647c58cb..cf2082e105d42f 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -778,6 +778,7 @@ "status.bookmark": "북마크", "status.cancel_reblog_private": "부스트 취소", "status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다", + "status.continued_thread": "이어지는 글타래", "status.copy": "게시물 링크 복사", "status.delete": "삭제", "status.detailed_status": "대화 자세히 보기", @@ -786,6 +787,7 @@ "status.edit": "수정", "status.edited": "{date}에 마지막으로 편집됨", "status.edited_x_times": "{count, plural, other {{count}}} 번 수정됨", + "status.embed": "임베드 코드 받기", "status.favourite": "좋아요", "status.favourites": "{count, plural, other {좋아요}}", "status.filter": "이 게시물을 필터", @@ -810,6 +812,7 @@ "status.reblogs.empty": "아직 아무도 이 게시물을 부스트하지 않았습니다. 부스트 한 사람들이 여기에 표시 됩니다.", "status.redraft": "지우고 다시 쓰기", "status.remove_bookmark": "북마크 삭제", + "status.replied_in_thread": "글타래에 답장", "status.replied_to": "{name} 님에게", "status.reply": "답장", "status.replyAll": "글타래에 답장", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index b53f65ab431236..53b3c0fcaa22a9 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -409,6 +409,7 @@ "lists.subheading": "Tavi saraksti", "load_pending": "{count, plural, one {# jauna lieta} other {# jaunas lietas}}", "loading_indicator.label": "Ielādē…", + "media_gallery.hide": "Paslēpt", "moved_to_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots, jo Tu pārcēlies uz kontu {movedToAccount}.", "mute_modal.hide_from_notifications": "Paslēpt paziņojumos", "mute_modal.hide_options": "Paslēpt iespējas", diff --git a/config/locales/activerecord.ko.yml b/config/locales/activerecord.ko.yml index 294d614bca63c6..6d437b72b0dfde 100644 --- a/config/locales/activerecord.ko.yml +++ b/config/locales/activerecord.ko.yml @@ -15,6 +15,12 @@ ko: user/invite_request: text: 이유 errors: + attributes: + domain: + invalid: 올바른 도메인 네임이 아닙니다 + messages: + invalid_domain_on_line: "%{value}는 올바른 도메인 네임이 아닙니다" + too_many_lines: "%{limit}줄 제한을 초과합니다" models: account: attributes: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 3217a8e49a3842..216e4687620368 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -22,6 +22,7 @@ ko: admin: account_actions: action: 조치 취하기 + already_silenced: 이 계정은 이미 제한되었습니다. already_suspended: 이 계정은 이미 정지되었습니다. title: "%{acct} 계정에 중재 취하기" account_moderation_notes: @@ -1143,6 +1144,12 @@ ko: view_strikes: 내 계정에 대한 과거 중재 기록 보기 too_fast: 너무 빠르게 양식이 제출되었습니다, 다시 시도하세요. use_security_key: 보안 키 사용 + author_attribution: + example_title: 예시 텍스트 + hint_html: 링크가 마스토돈에 공유될 때 내가 어떻게 표시될 지를 제어합니다. + more_from_html: "%{name}의 게시물 더 보기" + s_blog: "%{name}의 블로그" + title: 작성자 기여 challenge: confirm: 계속 hint_html: "팁: 한 시간 동안 다시 암호를 묻지 않을 것입니다." @@ -1906,6 +1913,7 @@ ko: instructions_html: 웹사이트에 아래 코드를 복사해 붙여 넣으세요. 그리고 "프로필 수정" 탭에서 그 웹사이트 주소를 프로필의 추가 필드 중 하나에 넣고 변경사항을 저장하세요. verification: 검증 verified_links: 인증된 링크들 + website_verification: 웹사이트 인증 webauthn_credentials: add: 보안 키 추가 create: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index be6555a3862657..4aeec5ceca73dc 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1114,7 +1114,7 @@ lv: new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pasta ziņojumu ar apstiprinājuma saiti. title: Pārbaudi savu iesūtni sign_in: - preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja Tavs konts tiek mitināts citā serverī, Tu nevarēsi šeit pieteikties. + preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja konts tiek mitināts citā serverī, šeit nevarēs pieteikties. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index fee07fa5e0ff66..a649b4ec5a90df 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -3,6 +3,7 @@ ko: simple_form: hints: account: + attribution_domains_as_text: 가짜 기여로부터 보호합니다. discoverable: 내 공개 게시물과 프로필이 마스토돈의 다양한 추천 기능에 나타날 수 있고 프로필이 다른 사용자에게 제안될 수 있습니다 display_name: 진짜 이름 또는 재미난 이름. fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들. @@ -143,6 +144,7 @@ ko: url: 이벤트가 어디로 전송될 지 labels: account: + attribution_domains_as_text: 특정 웹사이트만 허용하기 discoverable: 발견하기 알고리즘에 프로필과 게시물을 추천하기 fields: name: 라벨 From ef4d6ab98875891716fa2b9ce22ed34afc58a53f Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 19 Sep 2024 12:52:46 +0200 Subject: [PATCH 054/467] Fix browser glitch caused by two overlapping scroll animations in web UI (#31960) --- .../features/ui/components/columns_area.jsx | 32 +------------------ app/javascript/mastodon/scroll.ts | 27 ++++++++++------ app/javascript/mastodon/test_helpers.tsx | 8 +++++ 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index 5a2ea8c2c88216..ff76d5bcb296d3 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -4,8 +4,6 @@ import { Children, cloneElement, useCallback } from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { supportsPassiveEvents } from 'detect-passive-events'; - import { scrollRight } from '../../../scroll'; import BundleContainer from '../containers/bundle_container'; import { @@ -71,10 +69,6 @@ export default class ColumnsArea extends ImmutablePureComponent { }; componentDidMount() { - if (!this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); - } - if (this.mediaQuery) { if (this.mediaQuery.addEventListener) { this.mediaQuery.addEventListener('change', this.handleLayoutChange); @@ -87,23 +81,7 @@ export default class ColumnsArea extends ImmutablePureComponent { this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl'); } - UNSAFE_componentWillUpdate(nextProps) { - if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) { - this.node.removeEventListener('wheel', this.handleWheel); - } - } - - componentDidUpdate(prevProps) { - if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) { - this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false); - } - } - componentWillUnmount () { - if (!this.props.singleColumn) { - this.node.removeEventListener('wheel', this.handleWheel); - } - if (this.mediaQuery) { if (this.mediaQuery.removeEventListener) { this.mediaQuery.removeEventListener('change', this.handleLayoutChange); @@ -116,7 +94,7 @@ export default class ColumnsArea extends ImmutablePureComponent { handleChildrenContentChange() { if (!this.props.singleColumn) { const modifier = this.isRtlLayout ? -1 : 1; - this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier); + scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier); } } @@ -124,14 +102,6 @@ export default class ColumnsArea extends ImmutablePureComponent { this.setState({ renderComposePanel: !e.matches }); }; - handleWheel = () => { - if (typeof this._interruptScrollAnimation !== 'function') { - return; - } - - this._interruptScrollAnimation(); - }; - setRef = (node) => { this.node = node; }; diff --git a/app/javascript/mastodon/scroll.ts b/app/javascript/mastodon/scroll.ts index 35e13a4527d1d3..0756edb4cefe2b 100644 --- a/app/javascript/mastodon/scroll.ts +++ b/app/javascript/mastodon/scroll.ts @@ -38,13 +38,20 @@ const scroll = ( const isScrollBehaviorSupported = 'scrollBehavior' in document.documentElement.style; -export const scrollRight = (node: Element, position: number) => { - if (isScrollBehaviorSupported) - node.scrollTo({ left: position, behavior: 'smooth' }); - else scroll(node, 'scrollLeft', position); -}; - -export const scrollTop = (node: Element) => { - if (isScrollBehaviorSupported) node.scrollTo({ top: 0, behavior: 'smooth' }); - else scroll(node, 'scrollTop', 0); -}; +export const scrollRight = (node: Element, position: number) => + requestIdleCallback(() => { + if (isScrollBehaviorSupported) { + node.scrollTo({ left: position, behavior: 'smooth' }); + } else { + scroll(node, 'scrollLeft', position); + } + }); + +export const scrollTop = (node: Element) => + requestIdleCallback(() => { + if (isScrollBehaviorSupported) { + node.scrollTo({ top: 0, behavior: 'smooth' }); + } else { + scroll(node, 'scrollTop', 0); + } + }); diff --git a/app/javascript/mastodon/test_helpers.tsx b/app/javascript/mastodon/test_helpers.tsx index f4050907306e85..8a6f5a33776e79 100644 --- a/app/javascript/mastodon/test_helpers.tsx +++ b/app/javascript/mastodon/test_helpers.tsx @@ -8,6 +8,14 @@ import { render as rtlRender } from '@testing-library/react'; import { IdentityContext } from './identity_context'; +beforeEach(() => { + global.requestIdleCallback = jest + .fn() + .mockImplementation((fn: () => void) => { + fn(); + }); +}); + function render( ui: React.ReactElement, { From 6801afa12f3611c86aeec78a2d43ffa8323ecec6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:56:09 +0000 Subject: [PATCH 055/467] Update dependency devise-two-factor to v6 [SECURITY] (#31957) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: David Roetzel --- Gemfile.lock | 2 +- spec/models/user_spec.rb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 41a8b68fae8ff8..79e542014c1ef2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -197,7 +197,7 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (5.1.0) + devise-two-factor (6.0.0) activesupport (~> 7.0) devise (~> 4.0) railties (~> 7.0) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fcff4c0d3bd435..972453cd690835 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -4,6 +4,8 @@ require 'devise_two_factor/spec_helpers' RSpec.describe User do + subject { described_class.new(account: account) } + let(:password) { 'abcd1234' } let(:account) { Fabricate(:account, username: 'alice') } From 2946a9286b1b4a5323f9f7ea6e7b29b6ca5d309d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 19 Sep 2024 09:38:32 -0400 Subject: [PATCH 056/467] Use `headers` shorthand in mailers (#31956) --- app/mailers/admin_mailer.rb | 8 +++++--- app/mailers/application_mailer.rb | 8 +++++--- app/mailers/notification_mailer.rb | 28 ++++++++++++++++------------ 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 8dd7b6e59fb055..72a2c2e64e144a 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -56,9 +56,11 @@ def new_software_updates def new_critical_software_updates @software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version) - headers['Priority'] = 'urgent' - headers['X-Priority'] = '1' - headers['Importance'] = 'high' + headers( + 'Importance' => 'high', + 'Priority' => 'urgent', + 'X-Priority' => '1' + ) locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 35f0b5fee18a9a..9a209aa77b8f55 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -16,8 +16,10 @@ def locale_for_account(account, &block) end def set_autoreply_headers! - headers['Precedence'] = 'list' - headers['X-Auto-Response-Suppress'] = 'All' - headers['Auto-Submitted'] = 'auto-generated' + headers( + 'Auto-Submitted' => 'auto-generated', + 'Precedence' => 'list', + 'X-Auto-Response-Suppress' => 'All' + ) end end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 4eb38ec340620f..6b21b4bedde1a4 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -6,7 +6,10 @@ class NotificationMailer < ApplicationMailer :routing before_action :process_params - before_action :set_status, only: [:mention, :favourite, :reblog] + with_options only: %i(mention favourite reblog) do + before_action :set_status + after_action :thread_by_conversation! + end before_action :set_account, only: [:follow, :favourite, :reblog, :follow_request] after_action :set_list_headers! @@ -18,7 +21,6 @@ def mention return unless @user.functional? && @status.present? locale_for_account(@me) do - thread_by_conversation(@status.conversation) mail subject: default_i18n_subject(name: @status.account.acct) end end @@ -35,7 +37,6 @@ def favourite return unless @user.functional? && @status.present? locale_for_account(@me) do - thread_by_conversation(@status.conversation) mail subject: default_i18n_subject(name: @account.acct) end end @@ -44,7 +45,6 @@ def reblog return unless @user.functional? && @status.present? locale_for_account(@me) do - thread_by_conversation(@status.conversation) mail subject: default_i18n_subject(name: @account.acct) end end @@ -76,17 +76,21 @@ def set_account end def set_list_headers! - headers['List-ID'] = "<#{@type}.#{@me.username}.#{Rails.configuration.x.local_domain}>" - headers['List-Unsubscribe'] = "<#{@unsubscribe_url}>" - headers['List-Unsubscribe-Post'] = 'List-Unsubscribe=One-Click' + headers( + 'List-ID' => "<#{@type}.#{@me.username}.#{Rails.configuration.x.local_domain}>", + 'List-Unsubscribe-Post' => 'List-Unsubscribe=One-Click', + 'List-Unsubscribe' => "<#{@unsubscribe_url}>" + ) end - def thread_by_conversation(conversation) - return if conversation.nil? + def thread_by_conversation! + return if @status.conversation.nil? - msg_id = "" + conversation_message_id = "" - headers['In-Reply-To'] = msg_id - headers['References'] = msg_id + headers( + 'In-Reply-To' => conversation_message_id, + 'References' => conversation_message_id + ) end end From 5a8f2fe31d15a2a07384d118b5cbcd10ad714be4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 19 Sep 2024 09:43:40 -0400 Subject: [PATCH 057/467] Convert `settings/exports` controller spec to system/request specs (#31965) --- .../settings/exports_controller_spec.rb | 47 ------------------- spec/requests/settings/exports_spec.rb | 25 ++++++++++ spec/system/settings/exports_spec.rb | 40 ++++++++++++++++ 3 files changed, 65 insertions(+), 47 deletions(-) delete mode 100644 spec/controllers/settings/exports_controller_spec.rb create mode 100644 spec/requests/settings/exports_spec.rb create mode 100644 spec/system/settings/exports_spec.rb diff --git a/spec/controllers/settings/exports_controller_spec.rb b/spec/controllers/settings/exports_controller_spec.rb deleted file mode 100644 index 1eafabc7e50129..00000000000000 --- a/spec/controllers/settings/exports_controller_spec.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::ExportsController do - render_views - - describe 'GET #show' do - context 'when signed in' do - let(:user) { Fabricate(:user) } - - before do - sign_in user, scope: :user - get :show - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response.headers['Cache-Control']).to include('private, no-store') - end - end - - context 'when not signed in' do - it 'redirects' do - get :show - expect(response).to redirect_to '/auth/sign_in' - end - end - end - - describe 'POST #create' do - before do - sign_in Fabricate(:user), scope: :user - end - - it 'redirects to settings_export_path' do - post :create - expect(response).to redirect_to(settings_export_path) - end - - it 'queues BackupWorker job by 1' do - expect do - post :create - end.to change(BackupWorker.jobs, :size).by(1) - end - end -end diff --git a/spec/requests/settings/exports_spec.rb b/spec/requests/settings/exports_spec.rb new file mode 100644 index 00000000000000..db823ac770fe2f --- /dev/null +++ b/spec/requests/settings/exports_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings / Exports' do + context 'when not signed in' do + describe 'GET /settings/export' do + it 'redirects to sign in page' do + get settings_export_path + + expect(response) + .to redirect_to new_user_session_path + end + end + + describe 'POST /settings/export' do + it 'redirects to sign in page' do + post settings_export_path + + expect(response) + .to redirect_to new_user_session_path + end + end + end +end diff --git a/spec/system/settings/exports_spec.rb b/spec/system/settings/exports_spec.rb new file mode 100644 index 00000000000000..2cc2961a0bcee1 --- /dev/null +++ b/spec/system/settings/exports_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Export page' do + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'Viewing the export page' do + context 'when signed in' do + it 'shows the export page', :aggregate_failures do + visit settings_export_path + + expect(page) + .to have_content(takeout_summary) + .and have_private_cache_control + end + end + end + + describe 'Creating a new archive' do + it 'queues a worker and redirects' do + visit settings_export_path + + expect { request_archive } + .to change(BackupWorker.jobs, :size).by(1) + expect(page) + .to have_content(takeout_summary) + end + + def request_archive + click_on I18n.t('exports.archive_takeout.request') + end + end + + def takeout_summary + I18n.t('settings.export') + end +end From 57a38f071b0ffd74b813516e24c9e86a23c4d467 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 19 Sep 2024 16:58:33 +0200 Subject: [PATCH 058/467] Fix custom `history.push` and `history.replace` building bogus location if path is omitted (#31980) --- app/javascript/mastodon/components/router.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/router.tsx b/app/javascript/mastodon/components/router.tsx index 33fb60abb74bfd..558d0307e75002 100644 --- a/app/javascript/mastodon/components/router.tsx +++ b/app/javascript/mastodon/components/router.tsx @@ -51,7 +51,8 @@ function normalizePath( if ( layoutFromWindow() === 'multi-column' && - !location.pathname?.startsWith('/deck') + location.pathname && + !location.pathname.startsWith('/deck') ) { location.pathname = `/deck${location.pathname}`; } From ae03e4ffc6a25c8a3e3c61701180fdc1ea194141 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Thu, 19 Sep 2024 17:34:08 +0200 Subject: [PATCH 059/467] Update directory page options to use URL params (#31977) --- app/javascript/hooks/useSearchParam.ts | 31 ++++++++++++++++ .../mastodon/features/directory/index.tsx | 35 +++++++++++-------- 2 files changed, 51 insertions(+), 15 deletions(-) create mode 100644 app/javascript/hooks/useSearchParam.ts diff --git a/app/javascript/hooks/useSearchParam.ts b/app/javascript/hooks/useSearchParam.ts new file mode 100644 index 00000000000000..2df8c0b3a9e79f --- /dev/null +++ b/app/javascript/hooks/useSearchParam.ts @@ -0,0 +1,31 @@ +import { useMemo, useCallback } from 'react'; + +import { useLocation, useHistory } from 'react-router'; + +export function useSearchParams() { + const { search } = useLocation(); + + return useMemo(() => new URLSearchParams(search), [search]); +} + +export function useSearchParam(name: string, defaultValue?: string) { + const searchParams = useSearchParams(); + const history = useHistory(); + + const value = searchParams.get(name) ?? defaultValue; + + const setValue = useCallback( + (value: string | null) => { + if (value === null) { + searchParams.delete(name); + } else { + searchParams.set(name, value); + } + + history.push({ search: searchParams.toString() }); + }, + [history, name, searchParams], + ); + + return [value, setValue] as const; +} diff --git a/app/javascript/mastodon/features/directory/index.tsx b/app/javascript/mastodon/features/directory/index.tsx index 51d283a482d9c8..d0e57600bb8933 100644 --- a/app/javascript/mastodon/features/directory/index.tsx +++ b/app/javascript/mastodon/features/directory/index.tsx @@ -1,5 +1,5 @@ import type { ChangeEventHandler } from 'react'; -import { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import { defineMessages, useIntl } from 'react-intl'; @@ -23,6 +23,8 @@ import { RadioButton } from 'mastodon/components/radio_button'; import ScrollContainer from 'mastodon/containers/scroll_container'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; +import { useSearchParam } from '../../../hooks/useSearchParam'; + import { AccountCard } from './components/account_card'; const messages = defineMessages({ @@ -47,18 +49,19 @@ export const Directory: React.FC<{ const intl = useIntl(); const dispatch = useAppDispatch(); - const [state, setState] = useState<{ - order: string | null; - local: boolean | null; - }>({ - order: null, - local: null, - }); - const column = useRef(null); - const order = state.order ?? params?.order ?? 'active'; - const local = state.local ?? params?.local ?? false; + const [orderParam, setOrderParam] = useSearchParam('order'); + const [localParam, setLocalParam] = useSearchParam('local'); + + let localParamBool: boolean | undefined; + + if (localParam === 'false') { + localParamBool = false; + } + + const order = orderParam ?? params?.order ?? 'active'; + const local = localParamBool ?? params?.local ?? true; const handlePin = useCallback(() => { if (columnId) { @@ -101,10 +104,10 @@ export const Directory: React.FC<{ if (columnId) { dispatch(changeColumnParams(columnId, ['order'], e.target.value)); } else { - setState((s) => ({ order: e.target.value, local: s.local })); + setOrderParam(e.target.value); } }, - [dispatch, columnId], + [dispatch, columnId, setOrderParam], ); const handleChangeLocal = useCallback>( @@ -113,11 +116,13 @@ export const Directory: React.FC<{ dispatch( changeColumnParams(columnId, ['local'], e.target.value === '1'), ); + } else if (e.target.value === '1') { + setLocalParam('true'); } else { - setState((s) => ({ local: e.target.value === '1', order: s.order })); + setLocalParam('false'); } }, - [dispatch, columnId], + [dispatch, columnId, setLocalParam], ); const handleLoadMore = useCallback(() => { From 09459ed0008b42098549c0213916e85f567b0579 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:15:14 +0200 Subject: [PATCH 060/467] Update dependency react-select to v5.8.1 (#31982) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5372c39f47306f..99977274a14329 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14689,8 +14689,8 @@ __metadata: linkType: hard "react-select@npm:^5.7.3": - version: 5.8.0 - resolution: "react-select@npm:5.8.0" + version: 5.8.1 + resolution: "react-select@npm:5.8.1" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -14704,7 +14704,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/b4b98aaf117ee5cc4642871b7bd51fd0e2697988d0b880f30b21e933ca90258959147117d8aada36713b622e0e4cb06bd18ec02069f3f108896e0d31e69e3c16 + checksum: 10c0/0fd73e1e472105f980e09c86f0e6adbdc9f2f5c1befa275b08c71653becdd1829f596155a81b5085cb86f18b20bf4f4cc439ab5fe23e68f326e169dcfe00ccf6 languageName: node linkType: hard From 9a03902ab602fe49ea8bfbc56cdbed0831e5963f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 04:16:19 -0400 Subject: [PATCH 061/467] Capture actual behavior in v2/notifications "someone else" dismiss scenario (#31985) --- spec/requests/api/v2/notifications_spec.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/spec/requests/api/v2/notifications_spec.rb b/spec/requests/api/v2/notifications_spec.rb index edf333ecd85586..9522a39e0f55a4 100644 --- a/spec/requests/api/v2/notifications_spec.rb +++ b/spec/requests/api/v2/notifications_spec.rb @@ -312,12 +312,15 @@ def body_json_types end context 'when notification belongs to someone else' do - let(:notification) { Fabricate(:notification) } + let(:notification) { Fabricate(:notification, group_key: 'foobar') } - it 'returns http not found' do - subject + it 'leaves the notification alone' do + expect { subject } + .to_not change(Notification, :count) - expect(response).to have_http_status(404) + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end From 840fd697306ddb8d54768bdc083b1c93cb16fc3a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:20:27 +0200 Subject: [PATCH 062/467] Update dependency sass to v1.79.2 (#31992) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 99977274a14329..c90ada78f5baf4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15475,15 +15475,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.79.1 - resolution: "sass@npm:1.79.1" + version: 1.79.2 + resolution: "sass@npm:1.79.2" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/187bc885bad2e81e5414a146c9e14a28f622b5aba5c1425f4dd6d8ef2045b66c69de93689503886a8d2cc55d6bcce97b05ee87b074628fefd03e762789f931d0 + checksum: 10c0/b637daf133da4fbafbb7e6ae07b01ff7c73e406f3134e66749bf6f712dcc0056c6971d8629d8cc2b186df5ffb2282baa8f1818f35e326b3558ab284e31fdd87d languageName: node linkType: hard From 162f9a3c90dd688cd042f241add098c1ef6c6625 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 08:31:28 +0000 Subject: [PATCH 063/467] New Crowdin Translations (automated) (#31993) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/es-MX.json | 10 +- app/javascript/mastodon/locales/ru.json | 67 +++++++++- config/locales/activerecord.ru.yml | 6 + config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/es-MX.yml | 6 +- config/locales/ru.yml | 145 +++++++++++++++++++++ config/locales/simple_form.es-MX.yml | 2 +- config/locales/simple_form.ru.yml | 9 ++ 8 files changed, 236 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 7b09ada9f828e7..5c8f44d4a7f5d7 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -537,11 +537,11 @@ "notification_requests.accept": "Aceptar", "notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Solicitud aceptada} other {Solicitudes aceptadas}}", - "notification_requests.confirm_accept_multiple.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Quieres continuar?", - "notification_requests.confirm_accept_multiple.title": "¿Aceptar las solicitudes?", - "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}", - "notification_requests.confirm_dismiss_multiple.message": "Vas a descartar {count, plural, one {una solicitud} other {# solicitudes}}. No podrás volver a acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Seguro que quieres continuar?", - "notification_requests.confirm_dismiss_multiple.title": "¿Descartar las solicitudes?", + "notification_requests.confirm_accept_multiple.message": "Estás por aceptar {count, plural, one {una solicitud de notificación} other {# solicitudes de notificación}}. ¿Estás seguro de que quieres continuar?", + "notification_requests.confirm_accept_multiple.title": "¿Deseas aceptar las solicitudes de notificación?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Solicitud descartada} other {Solicitudes descartadas}}", + "notification_requests.confirm_dismiss_multiple.message": "Estás por descartar {count, plural, one {una solicitud de notificación} other {# solicitudes de notificación}}. No serás capaz de acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que quieres continuar?", + "notification_requests.confirm_dismiss_multiple.title": "¿Deseas descartar las solicitudes de notificación?", "notification_requests.dismiss": "Descartar", "notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}", "notification_requests.edit_selection": "Editar", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 4a03f2b6e80db9..d97b1658c552ae 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -34,7 +34,9 @@ "account.follow_back": "Подписаться в ответ", "account.followers": "Подписчики", "account.followers.empty": "На этого пользователя пока никто не подписан.", + "account.followers_counter": "{count, plural, one {{counter} последователя} other {{counter} последователей}}", "account.following": "Подписки", + "account.following_counter": "{count, plural, one {{counter} последующий} other {{counter} последующие}}", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.go_to_profile": "Перейти к профилю", "account.hide_reblogs": "Скрыть продвижения от @{name}", @@ -48,7 +50,7 @@ "account.moved_to": "У {name} теперь новый аккаунт:", "account.mute": "Игнорировать @{name}", "account.mute_notifications_short": "Отключить уведомления", - "account.mute_short": "Глохни!", + "account.mute_short": "Приглушить", "account.muted": "Игнорируется", "account.mutual": "Взаимно", "account.no_bio": "Описание не предоставлено.", @@ -94,6 +96,8 @@ "block_modal.title": "Заблокировать пользователя?", "block_modal.you_wont_see_mentions": "Вы не увидите записи, которые упоминают его.", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", + "boost_modal.reblog": "Повысить пост?", + "boost_modal.undo_reblog": "Разгрузить пост?", "bundle_column_error.copy_stacktrace": "Скопировать отчет об ошибке", "bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.", "bundle_column_error.error.title": "О нет!", @@ -298,6 +302,8 @@ "filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую", "filter_modal.select_filter.title": "Фильтровать этот пост", "filter_modal.title.status": "Фильтровать пост", + "filter_warning.matches_filter": "Соответствует фильтру \"{title}\"", + "filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни один} one {один человек} other {# люди}}", "filtered_notifications_banner.title": "Отфильтрованные уведомления", "firehose.all": "Все", "firehose.local": "Текущий сервер", @@ -346,6 +352,14 @@ "hashtag.follow": "Подписаться на новые посты", "hashtag.unfollow": "Отписаться", "hashtags.and_other": "...и {count, plural, other {# ещё}}", + "hints.profiles.followers_may_be_missing": "Последователи для этого профиля могут отсутствовать.", + "hints.profiles.follows_may_be_missing": "Фолловеры для этого профиля могут отсутствовать.", + "hints.profiles.posts_may_be_missing": "Некоторые сообщения из этого профиля могут отсутствовать.", + "hints.profiles.see_more_followers": "Посмотреть больше подписчиков на {domain}", + "hints.profiles.see_more_follows": "Смотрите другие материалы по теме {domain}", + "hints.profiles.see_more_posts": "Посмотреть другие сообщения на {domain}", + "hints.threads.replies_may_be_missing": "Ответы с других серверов могут отсутствовать.", + "hints.threads.see_more": "Посмотреть другие ответы на {domain}", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", "home.hide_announcements": "Скрыть объявления", @@ -353,7 +367,17 @@ "home.pending_critical_update.link": "Посмотреть обновления", "home.pending_critical_update.title": "Доступно критическое обновление безопасности!", "home.show_announcements": "Показать объявления", + "ignore_notifications_modal.disclaimer": "Mastodon не может сообщить пользователям, что вы проигнорировали их уведомления. Игнорирование уведомлений не остановит отправку самих сообщений.", + "ignore_notifications_modal.filter_instead": "Фильтр вместо", "ignore_notifications_modal.filter_to_act_users": "Вы и далее сможете принять, отвергнуть и жаловаться на пользователей", + "ignore_notifications_modal.filter_to_avoid_confusion": "Фильтрация помогает избежать потенциальной путаницы", + "ignore_notifications_modal.filter_to_review_separately": "Вы можете просматривать отфильтрованные уведомления отдельно", + "ignore_notifications_modal.ignore": "Игнорировать уведомления", + "ignore_notifications_modal.limited_accounts_title": "Игнорировать уведомления от модерируемых аккаунтов?", + "ignore_notifications_modal.new_accounts_title": "Игнорировать уведомления от новых аккаунтов?", + "ignore_notifications_modal.not_followers_title": "Игнорировать уведомления от людей, которые не следят за вами?", + "ignore_notifications_modal.not_following_title": "Игнорировать уведомления от людей, за которыми вы не следите?", + "ignore_notifications_modal.private_mentions_title": "Игнорировать уведомления о нежелательных личных сообщениях?", "interaction_modal.description.favourite": "С учётной записью Mastodon, вы можете добавить этот пост в избранное, чтобы сохранить его на будущее и дать автору знать, что пост вам понравился.", "interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.", "interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.", @@ -432,6 +456,7 @@ "lists.subheading": "Ваши списки", "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", "loading_indicator.label": "Загрузка…", + "media_gallery.hide": "Скрыть", "moved_to_account_banner.text": "Ваша учетная запись {disabledAccount} в настоящее время заморожена, потому что вы переехали на {movedToAccount}.", "mute_modal.hide_from_notifications": "Скрыть из уведомлений", "mute_modal.hide_options": "Скрыть параметры", @@ -443,6 +468,7 @@ "mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.", "mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.", "navigation_bar.about": "О проекте", + "navigation_bar.administration": "Администрация", "navigation_bar.advanced_interface": "Включить многоколоночный интерфейс", "navigation_bar.blocks": "Заблокированные пользователи", "navigation_bar.bookmarks": "Закладки", @@ -459,6 +485,7 @@ "navigation_bar.follows_and_followers": "Подписки и подписчики", "navigation_bar.lists": "Списки", "navigation_bar.logout": "Выйти", + "navigation_bar.moderation": "Модерация", "navigation_bar.mutes": "Игнорируемые пользователи", "navigation_bar.opened_in_classic_interface": "Сообщения, учётные записи и другие специфические страницы по умолчанию открываются в классическом веб-интерфейсе.", "navigation_bar.personal": "Личное", @@ -469,10 +496,22 @@ "navigation_bar.security": "Безопасность", "not_signed_in_indicator.not_signed_in": "Вам нужно войти, чтобы иметь доступ к этому ресурсу.", "notification.admin.report": "{name} сообщил о {target}", + "notification.admin.report_account": "{name} сообщил {count, plural, one {один пост} other {# постов}} от {target} для {category}", + "notification.admin.report_account_other": "{name} сообщил {count, plural, one {одно сообщение} other {# сообщений}} от {target}", + "notification.admin.report_statuses": "{name} сообщил {target} для {category}", + "notification.admin.report_statuses_other": "{name} сообщает {target}", "notification.admin.sign_up": "{name} зарегистрирован", + "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались", "notification.favourite": "{name} добавил(а) ваш пост в избранное", + "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", "notification.follow": "{name} подписался (-лась) на вас", "notification.follow_request": "{name} отправил запрос на подписку", + "notification.follow_request.name_and_others": "{name} и {count, plural, one {# другие} other {# другие}} последовали за тобой", + "notification.label.mention": "Упоминание", + "notification.label.private_mention": "Частное упоминание", + "notification.label.private_reply": "Частный ответ", + "notification.label.reply": "Ответить", + "notification.mention": "Упоминание", "notification.moderation-warning.learn_more": "Узнать больше", "notification.moderation_warning": "Вы получили предупреждение от модерации", "notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.", @@ -483,7 +522,9 @@ "notification.moderation_warning.action_silence": "Ваша учётная запись была ограничена.", "notification.moderation_warning.action_suspend": "Действие вашей учётной записи приостановлено.", "notification.own_poll": "Ваш опрос закончился", + "notification.poll": "Голосование, в котором вы приняли участие, завершилось", "notification.reblog": "{name} продвинул(а) ваш пост", + "notification.reblog.name_and_others_with_link": "{name} и {count, plural, one {# other} other {# others}} увеличили ваш пост", "notification.relationships_severance_event": "Потеряно соединение с {name}", "notification.relationships_severance_event.account_suspension": "Администратор {from} заблокировал {target}, что означает, что вы больше не сможете получать обновления от них или взаймодествовать с ними.", "notification.relationships_severance_event.domain_block": "Администратор {from} заблокировал {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.", @@ -492,10 +533,19 @@ "notification.status": "{name} только что запостил", "notification.update": "{name} изменил(а) пост", "notification_requests.accept": "Принять", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Принять запрос} other {Принять запросы}}", + "notification_requests.confirm_accept_multiple.title": "Принимать запросы на уведомления?", + "notification_requests.confirm_dismiss_multiple.title": "Отклонять запросы на уведомления?", "notification_requests.dismiss": "Отклонить", + "notification_requests.edit_selection": "Редактировать", + "notification_requests.exit_selection": "Готово", + "notification_requests.explainer_for_limited_account": "Уведомления от этой учетной записи были отфильтрованы, поскольку учетная запись была ограничена модератором.", + "notification_requests.explainer_for_limited_remote_account": "Уведомления от этой учетной записи были отфильтрованы, поскольку учетная запись или ее сервер были ограничены модератором.", "notification_requests.maximize": "Развернуть", + "notification_requests.minimize_banner": "Минимизация баннера отфильтрованных уведомлений", "notification_requests.notifications_from": "Уведомления от {name}", "notification_requests.title": "Отфильтрованные уведомления", + "notification_requests.view": "Просмотр уведомлений", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.clear_title": "Сбросить уведомления?", @@ -530,7 +580,14 @@ "notifications.permission_denied": "Уведомления на рабочем столе недоступны, так как вы запретили их отправку в браузере. Проверьте настройки для сайта, чтобы включить их обратно.", "notifications.permission_denied_alert": "Уведомления на рабочем столе недоступны, так как вы ранее отклонили запрос на их отправку.", "notifications.permission_required": "Чтобы включить уведомления на рабочем столе, необходимо разрешить их в браузере.", + "notifications.policy.accept": "Принять", + "notifications.policy.accept_hint": "Показать в уведомлениях", "notifications.policy.drop": "Игнорируем", + "notifications.policy.drop_hint": "Отправить в пустоту, чтобы никогда больше не увидеть", + "notifications.policy.filter": "Фильтр", + "notifications.policy.filter_hint": "Отправка в папку фильтрованных уведомлений", + "notifications.policy.filter_limited_accounts_hint": "Ограничено модераторами сервера", + "notifications.policy.filter_limited_accounts_title": "Модерируемые аккаунты", "notifications.policy.filter_new_accounts.hint": "Создано в течение последних {days, plural, one {один день} few {# дней} many {# дней} other {# дня}}", "notifications.policy.filter_new_accounts_title": "Новые учётные записи", "notifications.policy.filter_not_followers_title": "Люди, не подписанные на вас", @@ -538,6 +595,7 @@ "notifications.policy.filter_not_following_title": "Люди, на которых вы не подписаны", "notifications.policy.filter_private_mentions_hint": "Фильтруется, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя", "notifications.policy.filter_private_mentions_title": "Нежелательные личные упоминания", + "notifications.policy.title": "………Управлять уведомлениями от…", "notifications_permission_banner.enable": "Включить уведомления", "notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.", "notifications_permission_banner.title": "Будьте в курсе происходящего", @@ -666,6 +724,7 @@ "report_notification.categories.legal": "Правовая информация", "report_notification.categories.legal_sentence": "срамной контент", "report_notification.categories.other": "Прочее", + "report_notification.categories.other_sentence": "другое", "report_notification.categories.spam": "Спам", "report_notification.categories.spam_sentence": "спам", "report_notification.categories.violation": "Нарушение правил", @@ -696,8 +755,11 @@ "server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)", "server_banner.active_users": "активные пользователи", "server_banner.administered_by": "Управляется:", + "server_banner.is_one_of_many": "{domain} - это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в fediverse.", "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Создать учётную запись", + "sign_in_banner.follow_anyone": "Следите за любым человеком в федеральной вселенной и смотрите все в хронологическом порядке. Никаких алгоритмов, рекламы или клик бейта.", + "sign_in_banner.mastodon_is": "Mastodon - лучший способ быть в курсе всего происходящего.", "sign_in_banner.sign_in": "Войти", "sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь", "status.admin_account": "Открыть интерфейс модератора для @{name}", @@ -707,6 +769,7 @@ "status.bookmark": "Сохранить в закладки", "status.cancel_reblog_private": "Не продвигать", "status.cannot_reblog": "Этот пост не может быть продвинут", + "status.continued_thread": "Продолжение темы", "status.copy": "Скопировать ссылку на пост", "status.delete": "Удалить", "status.detailed_status": "Подробный просмотр обсуждения", @@ -715,6 +778,7 @@ "status.edit": "Изменить", "status.edited": "Дата последнего изменения: {date}", "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", + "status.embed": "Получить код для встраивания", "status.favourite": "Избранное", "status.filter": "Фильтровать этот пост", "status.history.created": "{name} создал {date}", @@ -737,6 +801,7 @@ "status.reblogs.empty": "Никто ещё не продвинул этот пост. Как только кто-то это сделает, они появятся здесь.", "status.redraft": "Создать заново", "status.remove_bookmark": "Убрать из закладок", + "status.replied_in_thread": "Ответил в теме", "status.replied_to": "Ответил(а) {name}", "status.reply": "Ответить", "status.replyAll": "Ответить всем", diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 92d85af4d9d28d..203d8e2c34d0d7 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -15,6 +15,12 @@ ru: user/invite_request: text: Причина errors: + attributes: + domain: + invalid: не является действующим доменным именем + messages: + invalid_domain_on_line: "%{value} Не является действительным доменным именем" + too_many_lines: Превышает предел %{limit} строк models: account: attributes: diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index b5987676d2824c..49ff9a1e43d15d 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -167,7 +167,7 @@ es-MX: admin:write:reports: realizar acciones de moderación en informes crypto: usar cifrado de extremo a extremo follow: seguir, bloquear, desbloquear y dejar de seguir cuentas - profile: leer sólo la información del perfil de tu cuenta + profile: leer solamente la información del perfil de tu cuenta push: recibir tus notificaciones push read: leer los datos de tu cuenta read:accounts: ver información de cuentas diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index b39b23c6170801..8aac7cbb47b2c2 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -202,10 +202,10 @@ es-MX: destroy_user_role: Destruir Rol disable_2fa_user: Deshabilitar 2FA disable_custom_emoji: Deshabilitar Emoji Personalizado - disable_sign_in_token_auth_user: Deshabilitar la Autenticación por Token de Correo Electrónico para el Usuario + disable_sign_in_token_auth_user: Deshabilitar la autenticación por token de correo electrónico para el usuario disable_user: Deshabilitar Usuario enable_custom_emoji: Habilitar Emoji Personalizado - enable_sign_in_token_auth_user: Habilitar la Autenticación por Token de Correo Electrónico para el Usuario + enable_sign_in_token_auth_user: Habilitar la autenticación por token de correo electrónico para el usuario enable_user: Habilitar Usuario memorialize_account: Transformar en Cuenta Conmemorativa promote_user: Promover Usuario @@ -896,7 +896,7 @@ es-MX: reviewed: Revisada title: Estado trendable: Puede ser tendencia - unreviewed: Sin revisar + unreviewed: No revisado usable: Disponible name: Nombre newest: Más reciente diff --git a/config/locales/ru.yml b/config/locales/ru.yml index f1198c3f16b6c2..387772749006e1 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -28,6 +28,8 @@ ru: admin: account_actions: action: Выполнить действие + already_silenced: Эта учетная запись уже ограничена. + already_suspended: Действие этой учетной записи уже приостановлено. title: Произвести модерацию учётной записи %{acct} account_moderation_notes: create: Создать @@ -49,6 +51,7 @@ ru: title: Сменить e-mail для %{username} change_role: changed_msg: Роль успешно изменена! + edit_roles: Управление ролями пользователей label: Изменить роль no_role: Нет роли title: Изменить роль %{username} @@ -61,6 +64,7 @@ ru: demote: Разжаловать destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка + disable_sign_in_token_auth: Отключите аутентификацию с помощью маркера электронной почты disable_two_factor_authentication: Отключить 2FA disabled: Отключено display_name: Отображаемое имя @@ -69,6 +73,7 @@ ru: email: E-mail email_status: Статус e-mail enable: Включить + enable_sign_in_token_auth: Включите аутентификацию с помощью маркера электронной почты enabled: Включен enabled_msg: Учётная запись %{username} успешно разморожена followers: Подписчики @@ -135,6 +140,7 @@ ru: resubscribe: Переподписаться role: Роль search: Поиск + search_same_email_domain: Другие пользователи с тем же почтовым доменом search_same_ip: Другие пользователи с таким же IP security: Безопасность security_measures: @@ -180,17 +186,21 @@ ru: confirm_user: Подтверждение пользователей create_account_warning: Выдача предупреждения create_announcement: Создание объявлений + create_canonical_email_block: Создать блок электронной почты create_custom_emoji: Добавление эмодзи create_domain_allow: Разрешение доменов create_domain_block: Блокировка доменов + create_email_domain_block: Создать блок домена электронной почты create_ip_block: Создание правил для IP-адресов create_unavailable_domain: Добавление домена в список недоступных create_user_role: Создать роль demote_user: Разжалование пользователей destroy_announcement: Удаление объявлений + destroy_canonical_email_block: Удалить блок электронной почты destroy_custom_emoji: Удаление эмодзи destroy_domain_allow: Отзыв разрешений для доменов destroy_domain_block: Разблокировка доменов + destroy_email_domain_block: Удалить блок домена электронной почты destroy_instance: Очистить домен destroy_ip_block: Удаление правил для IP-адресов destroy_status: Удаление постов @@ -198,8 +208,10 @@ ru: destroy_user_role: Удалить роль disable_2fa_user: Отключение 2FA disable_custom_emoji: Отключение эмодзи + disable_sign_in_token_auth_user: Отключить аутентификацию пользователя с помощью токена электронной почты disable_user: Заморозка пользователей enable_custom_emoji: Включение эмодзи + enable_sign_in_token_auth_user: Включить аутентификацию пользователя с помощью токена электронной почты enable_user: Разморозка пользователей memorialize_account: Присвоение пользователям статуса «мемориала» promote_user: Повышение пользователей @@ -229,20 +241,26 @@ ru: approve_appeal_html: "%{name} одобрил апелляцию на умеренное решение от %{target}" approve_user_html: "%{name} утвердил(а) регистрацию %{target}" assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}" + change_email_user_html: "%{name} изменил адрес электронной почты пользователя %{target}" change_role_user_html: "%{name} изменил(а) роль %{target}" + confirm_user_html: "%{name} подтвержденный адрес электронной почты пользователя %{target}" create_account_warning_html: "%{name} выдал(а) предупреждение %{target}" create_announcement_html: "%{name} создал(а) новое объявление %{target}" + create_canonical_email_block_html: "%{name} заблокировал письмо с хэшем %{target}" create_custom_emoji_html: "%{name} загрузил(а) новый эмодзи %{target}" create_domain_allow_html: "%{name} разрешил(а) федерацию с доменом %{target}" create_domain_block_html: "%{name} заблокировал(а) домен %{target}" + create_email_domain_block_html: "%{name} заблокированный почтовый домен %{target}" create_ip_block_html: "%{name} создал(а) правило для IP %{target}" create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}" create_user_role_html: "%{name} создал(а) роль %{target}" demote_user_html: "%{name} разжаловал(а) пользователя %{target}" destroy_announcement_html: "%{name} удалил(а) объявление %{target}" + destroy_canonical_email_block_html: "%{name} разблокированное письмо с хэшем %{target}" destroy_custom_emoji_html: "%{name} удалил(а) эмодзи %{target}" destroy_domain_allow_html: "%{name} запретил(а) федерацию с доменом %{target}" destroy_domain_block_html: "%{name} снял(а) блокировку с домена %{target}" + destroy_email_domain_block_html: "%{name} разблокированный почтовый домен %{target}" destroy_instance_html: "%{name} очистил(а) данные для домена %{target}" destroy_ip_block_html: "%{name} удалил(а) правило для IP %{target}" destroy_status_html: "%{name} удалил(а) пост пользователя %{target}" @@ -250,8 +268,10 @@ ru: destroy_user_role_html: "%{name} удалил(а) роль %{target}" disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}" disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}" + disable_sign_in_token_auth_user_html: "%{name} отключил аутентификацию по маркеру электронной почты для %{target}" disable_user_html: "%{name} заморозил(а) пользователя %{target}" enable_custom_emoji_html: "%{name} включил(а) эмодзи %{target}" + enable_sign_in_token_auth_user_html: "%{name} включил аутентификацию с помощью маркера электронной почты для %{target}" enable_user_html: "%{name} разморозил(а) пользователя %{target}" memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника" promote_user_html: "%{name} повысил(а) пользователя %{target}" @@ -259,6 +279,7 @@ ru: reject_user_html: "%{name} отклонил(а) регистрацию %{target}" remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}" reopen_report_html: "%{name} повторно открыл(а) жалобу %{target}" + resend_user_html: "%{name} повторно отправил письмо с подтверждением для %{target}" reset_password_user_html: "%{name} сбросил(а) пароль пользователя %{target}" resolve_report_html: "%{name} решил(а) жалобу %{target}" sensitive_account_html: "%{name} установил(а) отметку файлов %{target} как «деликатного характера»" @@ -273,6 +294,7 @@ ru: update_custom_emoji_html: "%{name} обновил(а) эмодзи %{target}" update_domain_block_html: "%{name} обновил(а) блокировку домена для %{target}" update_ip_block_html: "%{name} изменил(а) правило для IP %{target}" + update_report_html: "%{name} обновленный отчет %{target}" update_status_html: "%{name} изменил(а) пост пользователя %{target}" update_user_role_html: "%{name} изменил(а) роль %{target}" deleted_account: удалённая учётная запись @@ -437,6 +459,8 @@ ru: new: create: Создать блокировку resolve: Проверить домен + title: Блокировка нового почтового домена + no_email_domain_block_selected: Блоки почтовых доменов не были изменены, так как ни один из них не был выбран not_permitted: Не разрешено resolved_through_html: Разрешено через %{domain} title: Заблокированные e-mail домены @@ -464,6 +488,9 @@ ru: title: Рекомендации подписок unsuppress: Восстановить рекомендацию instances: + audit_log: + title: Последние журналы аудита + view_all: Просмотр полных журналов аудита availability: description_html: few: Если доставка в домен завершается сбоем %{count} дня, дальнейшие попытки доставки предприниматься не будут, пока не будет получена доставка из домена. @@ -599,6 +626,7 @@ ru: silence_description_html: Учетная запись будет видна только тем пользователям, которые уже подписаны на неё, либо открыли его вручную. Это действие можно отменить в любой момент, и отменяет все жалобы против аккаунта. suspend_description_html: Аккаунт и все его содержимое будут недоступны и в конечном итоге удалены, и взаимодействие с ним будет невозможно. Это действие можно отменить в течение 30 дней. Отменяет все жалобы против этого аккаунта. actions_description_remote_html: Решите вопрос о том, какие меры необходимо принять для урегулирования этой жалобы. Это повлияет только на то, как ваш сервер взаимодействует с этим удаленным аккаунтом и обрабатывает его содержимое. + actions_no_posts: У этого отчета нет связанных с ним сообщений для удаления add_to_report: Прикрепить ещё already_suspended_badges: local: На этом сервере уже забанен @@ -639,6 +667,7 @@ ru: report: Жалоба №%{id} reported_account: Учётная запись нарушителя reported_by: Отправитель жалобы + reported_with_application: Сообщается с приложением resolved: Решённые resolved_msg: Жалоба обработана, спасибо! skip_to_actions: Перейти к действиям @@ -661,6 +690,7 @@ ru: delete_data_html: Удалить профиль и контент @%{acct} через 30 дней, если за это время они не будут разблокированы preview_preamble_html: "@%{acct} получит предупреждение со следующим содержанием:" record_strike_html: Запишите замечание против @%{acct}, чтобы помочь вам в решении будущих нарушений с этого аккаунта + send_email_html: Отправить @%{acct} предупреждающее письмо warning_placeholder: Необязательное дополнительное обоснование действия модерации. target_origin: Происхождение объекта жалобы title: Жалобы @@ -704,6 +734,7 @@ ru: manage_appeals: Управление апелляциями manage_appeals_description: Позволяет пользователям просматривать апелляции на действия модерации manage_blocks: Управление блоками + manage_blocks_description: Позволить пользователям блокировать провайдеров электронной почты и IP-адреса manage_custom_emojis: Управление смайлами manage_custom_emojis_description: Позволяет пользователям управлять пользовательскими эмодзи на сервере manage_federation: Управление Федерацией @@ -776,6 +807,7 @@ ru: disabled: Никому users: Залогиненным локальным пользователям registrations: + moderation_recommandation: Убедитесь, что у вас есть адекватная и оперативная команда модераторов, прежде чем открывать регистрацию для всех желающих! preamble: Контролируйте, кто может создать учетную запись на вашем сервере. title: Регистрации registrations_mode: @@ -783,6 +815,7 @@ ru: approved: Для регистрации требуется подтверждение none: Никто не может регистрироваться open: Все могут регистрироваться + warning_hint: Мы рекомендуем использовать "Требуется одобрение для регистрации", если вы не уверены, что ваша команда модераторов сможет своевременно справиться со спамом и вредоносными регистрациями. security: authorized_fetch: Требовать аутентификацию от федеративных серверов authorized_fetch_hint: Требование аутентификации от федеративных серверов позволяет более строго соблюдать блокировки как на уровне пользователя, так и на уровне сервера. Однако при этом снижается производительность, уменьшается охват ваших ответов и могут возникнуть проблемы совместимости с некоторыми федеративными сервисами. Кроме того, это не помешает специальным исполнителям получать ваши публичные сообщения и учётные записи. @@ -794,6 +827,7 @@ ru: destroyed_msg: Файл успешно удалён. software_updates: critical_update: Критично — пожалуйста, обновите как можно скорее + description: Рекомендуется поддерживать установку Mastodon в актуальном состоянии, чтобы воспользоваться последними исправлениями и функциями. Кроме того, иногда очень важно своевременно обновлять Mastodon, чтобы избежать проблем с безопасностью. По этим причинам Mastodon проверяет наличие обновлений каждые 30 минут и уведомляет вас об этом в соответствии с вашими предпочтениями в отношении уведомлений по электронной почте. documentation_link: Узнать больше release_notes: Примечания к выпуску title: Доступные обновления @@ -881,17 +915,38 @@ ru: message_html: "Ваше хранилище объектов неправильно настроено. Безопасность ваших пользователей находится под угрозой" tags: moderation: + not_trendable: Не в тренде + not_usable: Невозможно использовать + pending_review: В ожидании обзора + review_requested: Обзор запрошен + reviewed: Рассмотрено title: Статус + trendable: Трендовый + unreviewed: Без рецензии + usable: Полезное + name: Название + newest: Новейший + oldest: Старейший + open: Посмотреть публично + reset: Сброс review: Состояние проверки + search: Поиск + title: Хэштеги updated_msg: Настройки хэштега обновлены title: Администрирование trends: allow: Разрешить approved: Принятые + confirm_allow: Вы уверены, что хотите разрешить выбранные теги? + confirm_disallow: Вы уверены, что хотите запретить выбранные теги? disallow: Отклонить links: allow: Разрешить ссылку allow_provider: Разрешить издание + confirm_allow: Вы уверены, что хотите разрешить выбранные ссылки? + confirm_allow_provider: Вы уверены, что хотите разрешить выбранных провайдеров? + confirm_disallow: Вы уверены, что хотите запретить выбранные ссылки? + confirm_disallow_provider: Вы уверены, что хотите запретить выбранных поставщиков? description_html: Это ссылки, которыми в настоящее время много пользуются аккаунты, с которых ваш сервер видит сообщения. Это может помочь вашим пользователям узнать, что происходит в мире. Никакие ссылки не отображаются публично, пока вы не одобрите издателя. Вы также можете разрешить или отклонить индивидуальные ссылки. disallow: Запретить ссылку disallow_provider: Отклонить издание @@ -917,6 +972,10 @@ ru: statuses: allow: Разрешить пост allow_account: Разрешить автора + confirm_allow: Вы уверены, что хотите разрешить выбранные статусы? + confirm_allow_account: Вы уверены, что хотите разрешить выбранные учетные записи? + confirm_disallow: Вы уверены, что хотите запретить выбранные статусы? + confirm_disallow_account: Вы уверены, что хотите запретить выбранные учетные записи? description_html: Это посты, которыми на вашем сервере в данный момент часто делятся и предпочитают, что может помочь вашим новым и постоянным пользователям найти больше людей, чтобы на них подписаться. Посты не будут отображаться публично, пока вы не одобрите автора, а автор не разрешит предлагать его аккаунт другим. Вы также можете разрешить или отклонить отдельные сообщения. disallow: Запретить пост disallow_account: Запретить автора @@ -953,12 +1012,14 @@ ru: many: За последнюю неделю использовало %{count} человек one: За последнюю неделю использовал один человек other: За последнюю неделю использовал %{count} человек + title: Рекомендации и тенденции trending: Популярное warning_presets: add_new: Добавить delete: Удалить edit_preset: Удалить шаблон предупреждения empty: Вы еще не определили пресеты предупреждений. + title: Предупреждающие пред установки webhooks: add_new: Добавить конечную точку delete: Удалить @@ -982,6 +1043,9 @@ ru: title: Вебхуки webhook: Вебхук admin_mailer: + auto_close_registrations: + body: В связи с отсутствием активности модераторов в последнее время, регистрация на %{instance} была автоматически переведена в режим, требующий ручной проверки, чтобы предотвратить использование %{instance} в качестве платформы для потенциальных плохих игроков. Вы можете в любой момент переключить его обратно на открытые регистрации. + subject: Регистрации для %{instance} были автоматически переведены в разряд требующих одобрения new_appeal: actions: delete_statuses: удалить их посты @@ -1035,7 +1099,9 @@ ru: guide_link_text: Каждый может внести свой вклад. sensitive_content: Содержимое деликатного характера application_mailer: + notification_preferences: Изменение предпочтений электронной почты salutation: "%{name}," + settings: 'Измените настройки электронной почты: %{link}' unsubscribe: Отписаться view: 'Просмотр:' view_profile: Просмотреть профиль @@ -1055,6 +1121,7 @@ ru: hint_html: Еще одна вещь! Нам нужно подтвердить, что вы человек (так что мы можем держать спам!). Решите капчу ниже и нажмите кнопку «Продолжить». title: Проверка безопасности confirmations: + awaiting_review: Ваш адрес электронной почты подтвержден! Сотрудники %{domain} сейчас рассматривают вашу регистрацию. Вы получите письмо, если они одобрят вашу учетную запись! awaiting_review_title: Ваша регистрация проверяется clicking_this_link: нажатие на эту ссылку login_link: войти @@ -1062,6 +1129,7 @@ ru: redirect_to_app_html: Вы должны были перенаправлены на приложение %{app_name}. Если этого не произошло, попробуйте %{clicking_this_link} или вернитесь к приложению вручную. registration_complete: Ваша регистрация на %{domain} завершена! welcome_title: Добро пожаловать, %{name}! + wrong_email_hint: Если этот адрес электронной почты неверен, вы можете изменить его в настройках аккаунта. delete_account: Удалить учётную запись delete_account_html: Удалить свою учётную запись можно в два счёта здесь, но прежде у вас будет спрошено подтверждение. description: @@ -1082,6 +1150,7 @@ ru: or_log_in_with: Или войти с помощью privacy_policy_agreement_html: Мной прочитана и принята политика конфиденциальности progress: + confirm: Подтвердите электронную почту details: Ваши данные review: Наш обзор rules: Принять правила @@ -1103,8 +1172,10 @@ ru: security: Безопасность set_new_password: Задать новый пароль setup: + email_below_hint_html: Проверьте папку "Спам" или запросите другую. Вы можете исправить свой адрес электронной почты, если он неправильный. email_settings_hint_html: Нажмите на ссылку, которую мы отправили вам для проверки %{email}. Мы будем ждать прямо здесь. link_not_received: Не получили ссылку? + new_confirmation_instructions_sent: Через несколько минут вы получите новое письмо со ссылкой для подтверждения! title: Проверьте свой почтовый ящик sign_in: preamble_html: Войдите, используя ваши учётные данные %{domain}. Если ваша учётная запись размещена на другом сервере, вы не сможете здесь войти. @@ -1115,12 +1186,20 @@ ru: title: Зарегистрируйтесь в %{domain}. status: account_status: Статус учётной записи + confirming: Жду подтверждения по электронной почте. functional: Ваша учётная запись в полном порядке. + pending: Ваша заявка находится на рассмотрении у наших сотрудников. Это может занять некоторое время. Вы получите электронное письмо, если ваша заявка будет одобрена. redirecting_to: Ваша учётная запись деактивированна, потому что вы настроили перенаправление на %{acct}. self_destruct: Поскольку %{domain} закрывается, вы получите ограниченный доступ к вашей учетной записи. view_strikes: Просмотр предыдущих замечаний в адрес вашей учетной записи too_fast: Форма отправлена слишком быстро, попробуйте еще раз. use_security_key: Использовать ключ безопасности + author_attribution: + example_title: Образец текста + hint_html: Контролируйте, как вы будете отмечены при обмене ссылками на Mastodon. + more_from_html: Больше от %{name} + s_blog: "%{name}'S Блог" + title: Авторская атрибуция challenge: confirm: Продолжить hint_html: "Подсказка: мы не будем спрашивать пароль повторно в течение часа." @@ -1157,6 +1236,9 @@ ru: before: 'Внимательно прочитайте следующую информацию перед началом:' caches: Некоторые данные, обработанные другими узлами, однако, могут храниться ещё какое-то время data_removal: Все ваши золотые посты, шикарный профиль и прочие данные будут безвозвратно уничтожены + email_change_html: Вы можете изменить свой адрес электронной почты, не удаляя свою учетную запись + email_contact_html: Если оно все еще не пришло, вы можете обратиться за помощью по электронной почте %{email} + email_reconfirmation_html: Если вы не получили подтверждение по электронной почте, вы можете запросить его снова irreversible: После удаления восстановить или повторно активировать учётную запись не получится more_details_html: За всеми подробностями, изучите политику конфиденциальности. username_available: Ваше имя пользователя снова станет доступным @@ -1403,6 +1485,7 @@ ru: authentication_methods: otp: приложение двухфакторной аутентификации password: пароль + sign_in_token: код безопасности электронной почты webauthn: ключи безопасности description_html: Если вы видите неопознанное действие, смените пароль и/или включите двухфакторную авторизацию. empty: Нет доступной истории входов @@ -1413,10 +1496,20 @@ ru: unsubscribe: action: Да, отписаться complete: Подписка отменена + emails: + notification_emails: + favourite: любимые электронные письма с уведомлениями + follow: Следить за электронными сообщениями + follow_request: Письма с просьбой о помощи + mention: Упоминание электронных писем с уведомлениями + reblog: Уведомления по электронной почте + resubscribe_html: Если вы отписались от рассылки по ошибке, вы можете повторно подписаться на рассылку в настройках настроек почтовых уведомлений. + success_html: Вы больше не будете получать %{type} для Mastodon на %{domain} на вашу электронную почту %{email}. title: Отписаться media_attachments: validations: images_and_video: Нельзя добавить видео к посту с изображениями + not_found: Медиа %{ids} не найдено или уже прикреплено к другому сообщению not_ready: Не удаётся прикрепить файлы, обработка которых не завершена. Повторите попытку чуть позже! too_many: Нельзя добавить более 4 файлов migrations: @@ -1493,6 +1586,8 @@ ru: update: subject: "%{name} изменил(а) пост" notifications: + administration_emails: Уведомления администратора по электронной почте + email_events: События для уведомлений по электронной почте email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:' number: human: @@ -1651,16 +1746,26 @@ ru: import: Импорт import_and_export: Импорт и экспорт migrate: Миграция учётной записи + notifications: E-mail уведомление preferences: Настройки profile: Профиль relationships: Подписки и подписчики + severed_relationships: Разорванные отношения statuses_cleanup: Авто-удаление постов strikes: Замечания модерации two_factor_authentication: Подтверждение входа webauthn_authentication: Ключи безопасности severed_relationships: + download: Скачать (%{count}) event_type: + account_suspension: Приостановка аккаунта (%{target_name}) + domain_block: Приостановка сервера (%{target_name}) user_domain_block: Вы заблокировали %{target_name} + lost_followers: Потерянные подписчики + lost_follows: Потерянный следует + preamble: Вы можете потерять подписчиков и последователей, если заблокируете домен или, если ваши модераторы решат приостановить работу удаленного сервера. Когда это произойдет, вы сможете загрузить списки разорванных отношений, чтобы проверить их и, возможно, импортировать на другой сервер. + purged: Информация об этом сервере была удалена администраторами вашего сервера. + type: Событие statuses: attached: audio: @@ -1751,6 +1856,7 @@ ru: contrast: Mastodon (высококонтрастная) default: Mastodon (тёмная) mastodon-light: Mastodon (светлая) + system: Автоматически (используйте системную тему) time: formats: default: "%d %b %Y, %H:%M" @@ -1839,8 +1945,45 @@ ru: suspend: Учётная запись заблокирована welcome: apps_android_action: Скачать на Google Play + apps_ios_action: Скачать в App Store + apps_step: Загрузите наши официальные приложения. + apps_title: Приложения Mastodon + checklist_subtitle: 'Давайте начнем знакомство с этим новым социальным рубежом:' + checklist_title: Приветственный контрольный список + edit_profile_action: Персонализация + edit_profile_step: Усильте взаимодействие, заполнив полный профиль. + edit_profile_title: Персонализируйте свой профиль explanation: Вот несколько советов для новичков feature_action: Подробнее + feature_audience: Mastodon предоставляет вам уникальную возможность управлять своей аудиторией без посредников. Mastodon, развернутый на вашей собственной инфраструктуре, позволяет вам следить и быть преследуемым с любого другого сервера Mastodon в Интернете и не контролируется никем, кроме вас. + feature_audience_title: Создайте уверенную аудиторию + feature_control: Вы сами знаете, что хотите видеть в своей ленте. Никаких алгоритмов или рекламы, чтобы тратить ваше время. Следите за любым человеком на любом сервере Mastodon с одного аккаунта и получайте его сообщения в хронологическом порядке, а также сделайте свой уголок интернета немного больше похожим на себя. + feature_control_title: Контролируйте свой график + feature_creativity: Mastodon поддерживает аудио-, видео- и фотопосты, описания доступности, опросы, предупреждения о содержании, анимированные аватары, пользовательские emojis, управление обрезкой миниатюр и многое другое, чтобы помочь вам выразить себя в Интернете. Публикуете ли вы свои работы, музыку или подкаст, Mastodon всегда готов помочь вам. + feature_creativity_title: Непревзойденная креативность + feature_moderation: Mastodon возвращает принятие решений в ваши руки. Каждый сервер создает свои собственные правила и нормы, которые соблюдаются локально, а не сверху вниз, как в корпоративных социальных сетях, что позволяет наиболее гибко реагировать на потребности различных групп людей. Присоединяйтесь к серверу с правилами, с которыми вы согласны, или создайте свой собственный. + feature_moderation_title: Модерирование, каким оно должно быть + follow_action: Следуйте за + follow_step: Следить за интересными людьми - вот что такое Mastodon. + follow_title: Персонализируйте свою домашнюю ленту + follows_subtitle: Следите за известными аккаунтами + follows_title: За кем следить + follows_view_more: Посмотреть больше людей, за которыми стоит следить + hashtags_recent_count: + few: "%{people} человека за последние 2 дня" + many: "%{people} человек за последние 2 дня" + one: "%{people} человек за последние 2 дня" + other: "%{people} человек за последние 2 дня" + hashtags_subtitle: Изучите, что было в тренде за последние 2 дня + hashtags_title: Модные хэштеги + hashtags_view_more: Посмотреть другие трендовые хэштеги + post_action: Составить + post_step: Поприветствуйте мир с помощью текста, фотографий, видео или опросов. + post_title: Сделайте свой первый пост + share_action: Поделиться + share_step: Пусть ваши друзья знают, как найти вас на Mastodon. + share_title: Поделитесь информацией о компании Mastodon + sign_in_action: Зарегистрироваться subject: Добро пожаловать в Mastodon title: Добро пожаловать на борт, %{name}! users: @@ -1849,6 +1992,7 @@ ru: invalid_otp_token: Введен неверный код двухфакторной аутентификации otp_lost_help_html: Если Вы потеряли доступ к обоим, свяжитесь с %{email} rate_limited: Слишком много попыток аутентификации, повторите попытку позже. + seamless_external_login: Вы вошли в систему через внешнюю службу, поэтому настройки пароля и электронной почты недоступны. signed_in_as: 'Выполнен вход под именем:' verification: extra_instructions_html: Подсказка: Ссылка на вашем сайте может быть невидимой. Важной частью является rel="me", который предотвращает выдачу себя за другое лицо на сайтах с пользовательским контентом. Вы даже можете использовать тег link в заголовке страницы вместо a, но HTML должен быть доступен без выполнения JavaScript. @@ -1857,6 +2001,7 @@ ru: instructions_html: Скопируйте и вставьте код ниже в HTML вашего сайта. Затем, добавьте адрес вашего веб сайта в одно из дополнительных полей на вкладке "Редактировать профиль" и сохраните изменения. verification: Верификация ссылок verified_links: Ваши ссылки подтверждения + website_verification: Проверка веб-сайта webauthn_credentials: add: Добавить новый ключ безопасности create: diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 3271b75668f75f..f2108828d5643b 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -84,7 +84,7 @@ es-MX: closed_registrations_message: Mostrado cuando los registros están cerrados content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. - favicon: WEBP, PNG, GIF o JPG. Reemplaza el favicon predeterminado de Mastodon con un icono personalizado. + favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. mascot: Reemplaza la ilustración en la interfaz web avanzada. media_cache_retention_period: Los archivos multimedia de las publicaciones creadas por usuarios remotos se almacenan en caché en tu servidor. Cuando se establece un valor positivo, estos archivos se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlaces realizan peticiones a sitios de terceros, se recomienda establecer este valor a al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese momento. peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, sólo que su servidor lo sabe. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general. diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index b41457e86ac6ce..3ff746451b3279 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -3,6 +3,7 @@ ru: simple_form: hints: account: + attribution_domains_as_text: Защищает от ложных атрибуций. discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям. display_name: Ваше полное имя или псевдоним. fields: Ваша домашняя страница, местоимения, возраст - все, что угодно. @@ -77,11 +78,15 @@ ru: warn: Скрыть отфильтрованный контент за предупреждением с указанием названия фильтра form_admin_settings: activity_api_enabled: Подсчёт количества локальных постов, активных пользователей и новых регистраций на еженедельной основе + app_icon: WEBP, PNG, GIF или JPG. Замените значок приложения по умолчанию на мобильных устройствах пользовательским значком. backups_retention_period: Пользователи могут создавать архивы своих постов, чтобы потом их забрать. Если задать положительное значение, эти архивы автоматически удалятся с вашего хранилища через указанное число дней. bootstrap_timeline_accounts: Эти аккаунты будут рекомендованы для подписки новым пользователям. closed_registrations_message: Отображается, когда регистрация закрыта + content_cache_retention_period: Все сообщения с других серверов (включая бусты и ответы) будут удалены через указанное количество дней, независимо от того, как локальный пользователь взаимодействовал с этими сообщениями. Это касается и тех сообщений, которые локальный пользователь пометил в закладки или избранное. Приватные упоминания между пользователями из разных инстансов также будут потеряны и не смогут быть восстановлены. Использование этой настройки предназначено для экземпляров специального назначения и нарушает многие ожидания пользователей при использовании в общих целях. custom_css: Вы можете применять пользовательские стили в веб-версии Mastodon. + favicon: WEBP, PNG, GIF или JPG. Заменяет стандартный фавикон Mastodon на собственный значок. mascot: Заменяет иллюстрацию в расширенном веб-интерфейсе. + media_cache_retention_period: Медиафайлы из сообщений, сделанных удаленными пользователями, кэшируются на вашем сервере. При положительном значении медиафайлы будут удалены через указанное количество дней. Если медиаданные будут запрошены после удаления, они будут загружены повторно, если исходный контент все еще доступен. В связи с ограничениями на частоту опроса карточек предварительного просмотра ссылок на сторонних сайтах рекомендуется устанавливать значение не менее 14 дней, иначе карточки предварительного просмотра ссылок не будут обновляться по запросу до этого времени. peers_api_enabled: Список доменных имен, с которыми сервер столкнулся в fediverse. Здесь нет данных о том, федерировались ли вы с данным сервером, только что ваш сервер знает об этом. Это используется службами, которые собирают статистику по федерации в общем смысле. profile_directory: В каталоге профилей перечислены все пользователи, которые согласились быть доступными для обнаружения. require_invite_text: Когда регистрация требует ручного одобрения, сделайте текстовый ввод "Почему вы хотите присоединиться?" обязательным, а не опциональным @@ -114,6 +119,7 @@ ru: sign_up_requires_approval: Новые регистрации потребуют вашего одобрения severity: Выберите, что будет происходить с запросами с этого IP rule: + hint: Необязательно. Предоставьте дополнительные сведения о правиле text: Опишите правило или требование для пользователей на этом сервере. Постарайтесь сделать его коротким и простым sessions: otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:' @@ -125,6 +131,7 @@ ru: name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым user: chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках. + role: Роль определяет, какими правами обладает пользователь. user_role: color: Цвет, который будет использоваться для роли в интерфейсе (UI), как RGB в формате HEX highlighted: Это действие сделает роль публичной @@ -137,6 +144,7 @@ ru: url: Куда события будут отправляться labels: account: + attribution_domains_as_text: Разрешить только определенные сайты discoverable: Профиль и сообщения в алгоритмах обнаружения fields: name: Пункт @@ -241,6 +249,7 @@ ru: backups_retention_period: Период хранения архива пользователя bootstrap_timeline_accounts: Всегда рекомендовать эти учетные записи новым пользователям closed_registrations_message: Сообщение, когда регистрация недоступна + content_cache_retention_period: Период хранения удаленного содержимого custom_css: Пользовательский CSS favicon: Favicon mascot: Пользовательский маскот (устаревшее) From c922af27375ec9e902981c6b66c96a7ae57c7513 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 04:31:58 -0400 Subject: [PATCH 064/467] Add `LIMIT` constant for `api/v1/peers/search` endpoint (#31989) --- app/controllers/api/v1/peers/search_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/peers/search_controller.rb b/app/controllers/api/v1/peers/search_controller.rb index 1780554c5d8bc0..d9c82327022194 100644 --- a/app/controllers/api/v1/peers/search_controller.rb +++ b/app/controllers/api/v1/peers/search_controller.rb @@ -7,6 +7,8 @@ class Api::V1::Peers::SearchController < Api::BaseController skip_before_action :require_authenticated_user!, unless: :limited_federation_mode? skip_around_action :set_locale + LIMIT = 10 + vary_by '' def index @@ -35,10 +37,10 @@ def set_domains field: 'accounts_count', modifier: 'log2p', }, - }).limit(10).pluck(:domain) + }).limit(LIMIT).pluck(:domain) else domain = normalized_domain - @domains = Instance.searchable.domain_starts_with(domain).limit(10).pluck(:domain) + @domains = Instance.searchable.domain_starts_with(domain).limit(LIMIT).pluck(:domain) end rescue Addressable::URI::InvalidURIError @domains = [] From 04a939d6407d4ae5873757b8ab8d7187110fe6e7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 04:51:37 -0400 Subject: [PATCH 065/467] Add `reviewed` and `unreviewed` scopes to `Reviewable` model concern (#31988) --- app/models/concerns/reviewable.rb | 5 ++++ app/models/preview_card_provider.rb | 2 -- app/models/tag.rb | 4 +-- .../trends/preview_card_provider_filter.rb | 2 +- .../preview_card_providers/index.html.haml | 2 +- spec/models/preview_card_provider_spec.rb | 16 ------------ .../examples/models/concerns/reviewable.rb | 25 +++++++++++++++++++ 7 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app/models/concerns/reviewable.rb b/app/models/concerns/reviewable.rb index 1f70474b35b1fd..d08b473342792d 100644 --- a/app/models/concerns/reviewable.rb +++ b/app/models/concerns/reviewable.rb @@ -3,6 +3,11 @@ module Reviewable extend ActiveSupport::Concern + included do + scope :reviewed, -> { where.not(reviewed_at: nil) } + scope :unreviewed, -> { where(reviewed_at: nil) } + end + def requires_review? reviewed_at.nil? end diff --git a/app/models/preview_card_provider.rb b/app/models/preview_card_provider.rb index 48944fe638467d..889176036c7558 100644 --- a/app/models/preview_card_provider.rb +++ b/app/models/preview_card_provider.rb @@ -34,8 +34,6 @@ class PreviewCardProvider < ApplicationRecord scope :trendable, -> { where(trendable: true) } scope :not_trendable, -> { where(trendable: false) } - scope :reviewed, -> { where.not(reviewed_at: nil) } - scope :pending_review, -> { where(reviewed_at: nil) } def self.matching_domain(domain) segments = domain.split('.') diff --git a/app/models/tag.rb b/app/models/tag.rb index acf514919be9b7..93210eb307e936 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -50,8 +50,6 @@ class Tag < ApplicationRecord validate :validate_name_change, if: -> { !new_record? && name_changed? } validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? } - scope :reviewed, -> { where.not(reviewed_at: nil) } - scope :unreviewed, -> { where(reviewed_at: nil) } scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) } scope :usable, -> { where(usable: [true, nil]) } scope :not_usable, -> { where(usable: false) } @@ -127,7 +125,7 @@ def search_for(term, limit = 5, offset = 0, options = {}) query = Tag.matches_name(stripped_term) query = query.merge(Tag.listable) if options[:exclude_unlistable] - query = query.merge(matching_name(stripped_term).or(where.not(reviewed_at: nil))) if options[:exclude_unreviewed] + query = query.merge(matching_name(stripped_term).or(reviewed)) if options[:exclude_unreviewed] query.order(Arel.sql('length(name) ASC, name ASC')) .limit(limit) diff --git a/app/models/trends/preview_card_provider_filter.rb b/app/models/trends/preview_card_provider_filter.rb index 219793f01e950f..33f4e97912a89d 100644 --- a/app/models/trends/preview_card_provider_filter.rb +++ b/app/models/trends/preview_card_provider_filter.rb @@ -41,7 +41,7 @@ def status_scope(value) when 'rejected' PreviewCardProvider.not_trendable when 'pending_review' - PreviewCardProvider.pending_review + PreviewCardProvider.unreviewed else raise Mastodon::InvalidParameterError, "Unknown status: #{value}" end diff --git a/app/views/admin/trends/links/preview_card_providers/index.html.haml b/app/views/admin/trends/links/preview_card_providers/index.html.haml index b43b8dfff9f4e4..93daf25f31a74d 100644 --- a/app/views/admin/trends/links/preview_card_providers/index.html.haml +++ b/app/views/admin/trends/links/preview_card_providers/index.html.haml @@ -12,7 +12,7 @@ %li= filter_link_to t('generic.all'), status: nil %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.pending_review.count})"], ' '), status: 'pending_review' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.unreviewed.count})"], ' '), status: 'pending_review' .back-link = link_to admin_trends_links_path do = material_symbol 'chevron_left' diff --git a/spec/models/preview_card_provider_spec.rb b/spec/models/preview_card_provider_spec.rb index 12bca83440f126..a3bd4f49ad1b8b 100644 --- a/spec/models/preview_card_provider_spec.rb +++ b/spec/models/preview_card_provider_spec.rb @@ -24,21 +24,5 @@ expect(results).to eq([not_trendable_and_not_reviewed]) end end - - describe 'reviewed' do - it 'returns the relevant records' do - results = described_class.reviewed - - expect(results).to eq([trendable_and_reviewed]) - end - end - - describe 'pending_review' do - it 'returns the relevant records' do - results = described_class.pending_review - - expect(results).to eq([not_trendable_and_not_reviewed]) - end - end end end diff --git a/spec/support/examples/models/concerns/reviewable.rb b/spec/support/examples/models/concerns/reviewable.rb index b63e44b43f9853..144019d969af3e 100644 --- a/spec/support/examples/models/concerns/reviewable.rb +++ b/spec/support/examples/models/concerns/reviewable.rb @@ -6,6 +6,31 @@ let(:reviewed_at) { nil } let(:requested_review_at) { nil } + describe 'Scopes' do + let!(:reviewed_record) { Fabricate factory_name, reviewed_at: 10.days.ago } + let!(:un_reviewed_record) { Fabricate factory_name, reviewed_at: nil } + + describe '.reviewed' do + it 'returns reviewed records' do + expect(described_class.reviewed) + .to include(reviewed_record) + .and not_include(un_reviewed_record) + end + end + + describe '.unreviewed' do + it 'returns non reviewed records' do + expect(described_class.unreviewed) + .to include(un_reviewed_record) + .and not_include(reviewed_record) + end + end + + def factory_name + described_class.name.underscore.to_sym + end + end + describe '#requires_review?' do it { is_expected.to be_requires_review } From e7fd0985c9cd14437443345adfe725ecd3b038a6 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 20 Sep 2024 11:42:02 +0200 Subject: [PATCH 066/467] Change zoom icon in web UI (#29683) --- .../mastodon/components/modal_root.jsx | 2 +- .../features/ui/components/image_loader.jsx | 7 +- .../features/ui/components/media_modal.jsx | 52 +++++-- .../features/ui/components/zoomable_image.jsx | 129 +++++------------- app/javascript/mastodon/locales/en.json | 4 +- .../400-24px/fit_screen-fill.svg | 1 + .../material-icons/400-24px/fit_screen.svg | 1 + .../styles/mastodon/components.scss | 59 ++++---- app/javascript/svg-icons/actual_size.svg | 4 + 9 files changed, 114 insertions(+), 145 deletions(-) create mode 100644 app/javascript/material-icons/400-24px/fit_screen-fill.svg create mode 100644 app/javascript/material-icons/400-24px/fit_screen.svg create mode 100644 app/javascript/svg-icons/actual_size.svg diff --git a/app/javascript/mastodon/components/modal_root.jsx b/app/javascript/mastodon/components/modal_root.jsx index fd13564af2cb44..e7fa5e6f9a797e 100644 --- a/app/javascript/mastodon/components/modal_root.jsx +++ b/app/javascript/mastodon/components/modal_root.jsx @@ -148,7 +148,7 @@ class ModalRoot extends PureComponent { return (
-
+
{children}
diff --git a/app/javascript/mastodon/features/ui/components/image_loader.jsx b/app/javascript/mastodon/features/ui/components/image_loader.jsx index 9dabc621b427e4..b1417deda77b34 100644 --- a/app/javascript/mastodon/features/ui/components/image_loader.jsx +++ b/app/javascript/mastodon/features/ui/components/image_loader.jsx @@ -17,7 +17,7 @@ export default class ImageLoader extends PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, - zoomButtonHidden: PropTypes.bool, + zoomedIn: PropTypes.bool, }; static defaultProps = { @@ -134,7 +134,7 @@ export default class ImageLoader extends PureComponent { }; render () { - const { alt, lang, src, width, height, onClick } = this.props; + const { alt, lang, src, width, height, onClick, zoomedIn } = this.props; const { loading } = this.state; const className = classNames('image-loader', { @@ -149,6 +149,7 @@ export default class ImageLoader extends PureComponent {
+ )}
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.jsx b/app/javascript/mastodon/features/ui/components/media_modal.jsx index 0f6e8a727bea3f..d69ceba5396740 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/media_modal.jsx @@ -12,6 +12,8 @@ import ReactSwipeableViews from 'react-swipeable-views'; import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import FitScreenIcon from '@/material-icons/400-24px/fit_screen.svg?react'; +import ActualSizeIcon from '@/svg-icons/actual_size.svg?react'; import { getAverageFromBlurhash } from 'mastodon/blurhash'; import { GIFV } from 'mastodon/components/gifv'; import { Icon } from 'mastodon/components/icon'; @@ -26,6 +28,8 @@ const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, previous: { id: 'lightbox.previous', defaultMessage: 'Previous' }, next: { id: 'lightbox.next', defaultMessage: 'Next' }, + zoomIn: { id: 'lightbox.zoom_in', defaultMessage: 'Zoom to actual size' }, + zoomOut: { id: 'lightbox.zoom_out', defaultMessage: 'Zoom to fit' }, }); class MediaModal extends ImmutablePureComponent { @@ -46,30 +50,39 @@ class MediaModal extends ImmutablePureComponent { state = { index: null, navigationHidden: false, - zoomButtonHidden: false, + zoomedIn: false, + }; + + handleZoomClick = () => { + this.setState(prevState => ({ + zoomedIn: !prevState.zoomedIn, + })); }; handleSwipe = (index) => { - this.setState({ index: index % this.props.media.size }); + this.setState({ + index: index % this.props.media.size, + zoomedIn: false, + }); }; handleTransitionEnd = () => { this.setState({ - zoomButtonHidden: false, + zoomedIn: false, }); }; handleNextClick = () => { this.setState({ index: (this.getIndex() + 1) % this.props.media.size, - zoomButtonHidden: true, + zoomedIn: false, }); }; handlePrevClick = () => { this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size, - zoomButtonHidden: true, + zoomedIn: false, }); }; @@ -78,7 +91,7 @@ class MediaModal extends ImmutablePureComponent { this.setState({ index: index % this.props.media.size, - zoomButtonHidden: true, + zoomedIn: false, }); }; @@ -130,15 +143,22 @@ class MediaModal extends ImmutablePureComponent { return this.state.index !== null ? this.state.index : this.props.index; } - toggleNavigation = () => { + handleToggleNavigation = () => { this.setState(prevState => ({ navigationHidden: !prevState.navigationHidden, })); }; + setRef = c => { + this.setState({ + viewportWidth: c?.clientWidth, + viewportHeight: c?.clientHeight, + }); + }; + render () { const { media, statusId, lang, intl, onClose } = this.props; - const { navigationHidden } = this.state; + const { navigationHidden, zoomedIn, viewportWidth, viewportHeight } = this.state; const index = this.getIndex(); @@ -160,8 +180,8 @@ class MediaModal extends ImmutablePureComponent { alt={description} lang={lang} key={image.get('url')} - onClick={this.toggleNavigation} - zoomButtonHidden={this.state.zoomButtonHidden} + onClick={this.handleToggleNavigation} + zoomedIn={zoomedIn} /> ); } else if (image.get('type') === 'video') { @@ -230,9 +250,12 @@ class MediaModal extends ImmutablePureComponent { )); } + const currentMedia = media.get(index); + const zoomable = currentMedia.get('type') === 'image' && (currentMedia.getIn(['meta', 'original', 'width']) > viewportWidth || currentMedia.getIn(['meta', 'original', 'height']) > viewportHeight); + return ( -
-
+
+
- +
+ {zoomable && } + +
{leftNav} {rightNav} diff --git a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx index 272a3cff009186..c4129bf2609936 100644 --- a/app/javascript/mastodon/features/ui/components/zoomable_image.jsx +++ b/app/javascript/mastodon/features/ui/components/zoomable_image.jsx @@ -1,17 +1,6 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { defineMessages, injectIntl } from 'react-intl'; - -import FullscreenExitIcon from '@/material-icons/400-24px/fullscreen_exit.svg?react'; -import RectangleIcon from '@/material-icons/400-24px/rectangle.svg?react'; -import { IconButton } from 'mastodon/components/icon_button'; - -const messages = defineMessages({ - compress: { id: 'lightbox.compress', defaultMessage: 'Compress image view box' }, - expand: { id: 'lightbox.expand', defaultMessage: 'Expand image view box' }, -}); - const MIN_SCALE = 1; const MAX_SCALE = 4; const NAV_BAR_HEIGHT = 66; @@ -104,8 +93,7 @@ class ZoomableImage extends PureComponent { width: PropTypes.number, height: PropTypes.number, onClick: PropTypes.func, - zoomButtonHidden: PropTypes.bool, - intl: PropTypes.object.isRequired, + zoomedIn: PropTypes.bool, }; static defaultProps = { @@ -131,8 +119,6 @@ class ZoomableImage extends PureComponent { translateX: null, translateY: null, }, - zoomState: 'expand', // 'expand' 'compress' - navigationHidden: false, dragPosition: { top: 0, left: 0, x: 0, y: 0 }, dragged: false, lockScroll: { x: 0, y: 0 }, @@ -169,35 +155,20 @@ class ZoomableImage extends PureComponent { this.container.addEventListener('DOMMouseScroll', handler); this.removers.push(() => this.container.removeEventListener('DOMMouseScroll', handler)); - this.initZoomMatrix(); + this._initZoomMatrix(); } componentWillUnmount () { - this.removeEventListeners(); + this._removeEventListeners(); } - componentDidUpdate () { - this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' }); - - if (this.state.scale === MIN_SCALE) { - this.container.style.removeProperty('cursor'); + componentDidUpdate (prevProps) { + if (prevProps.zoomedIn !== this.props.zoomedIn) { + this._toggleZoom(); } } - UNSAFE_componentWillReceiveProps () { - // reset when slide to next image - if (this.props.zoomButtonHidden) { - this.setState({ - scale: MIN_SCALE, - lockTranslate: { x: 0, y: 0 }, - }, () => { - this.container.scrollLeft = 0; - this.container.scrollTop = 0; - }); - } - } - - removeEventListeners () { + _removeEventListeners () { this.removers.forEach(listeners => listeners()); this.removers = []; } @@ -220,9 +191,6 @@ class ZoomableImage extends PureComponent { }; mouseDownHandler = e => { - this.container.style.cursor = 'grabbing'; - this.container.style.userSelect = 'none'; - this.setState({ dragPosition: { left: this.container.scrollLeft, top: this.container.scrollTop, @@ -246,9 +214,6 @@ class ZoomableImage extends PureComponent { }; mouseUpHandler = () => { - this.container.style.cursor = 'grab'; - this.container.style.removeProperty('user-select'); - this.image.removeEventListener('mousemove', this.mouseMoveHandler); this.image.removeEventListener('mouseup', this.mouseUpHandler); }; @@ -276,13 +241,13 @@ class ZoomableImage extends PureComponent { const _MAX_SCALE = Math.max(MAX_SCALE, this.state.zoomMatrix.rate); const scale = clamp(MIN_SCALE, _MAX_SCALE, this.state.scale * distance / this.lastDistance); - this.zoom(scale, midpoint); + this._zoom(scale, midpoint); this.lastMidpoint = midpoint; this.lastDistance = distance; }; - zoom(nextScale, midpoint) { + _zoom(nextScale, midpoint) { const { scale, zoomMatrix } = this.state; const { scrollLeft, scrollTop } = this.container; @@ -318,14 +283,13 @@ class ZoomableImage extends PureComponent { if (dragged) return; const handler = this.props.onClick; if (handler) handler(); - this.setState({ navigationHidden: !this.state.navigationHidden }); }; handleMouseDown = e => { e.preventDefault(); }; - initZoomMatrix = () => { + _initZoomMatrix = () => { const { width, height } = this.props; const { clientWidth, clientHeight } = this.container; const { offsetWidth, offsetHeight } = this.image; @@ -357,10 +321,7 @@ class ZoomableImage extends PureComponent { }); }; - handleZoomClick = e => { - e.preventDefault(); - e.stopPropagation(); - + _toggleZoom () { const { scale, zoomMatrix } = this.state; if ( scale >= zoomMatrix.rate ) { @@ -394,10 +355,7 @@ class ZoomableImage extends PureComponent { this.container.scrollTop = zoomMatrix.scrollTop; }); } - - this.container.style.cursor = 'grab'; - this.container.style.removeProperty('user-select'); - }; + } setContainerRef = c => { this.container = c; @@ -408,52 +366,37 @@ class ZoomableImage extends PureComponent { }; render () { - const { alt, lang, src, width, height, intl } = this.props; - const { scale, lockTranslate } = this.state; + const { alt, lang, src, width, height } = this.props; + const { scale, lockTranslate, dragged } = this.state; const overflow = scale === MIN_SCALE ? 'hidden' : 'scroll'; - const zoomButtonShouldHide = this.state.navigationHidden || this.props.zoomButtonHidden || this.state.zoomMatrix.rate <= MIN_SCALE ? 'media-modal__zoom-button--hidden' : ''; - const zoomButtonTitle = this.state.zoomState === 'compress' ? intl.formatMessage(messages.compress) : intl.formatMessage(messages.expand); + const cursor = scale === MIN_SCALE ? null : (dragged ? 'grabbing' : 'grab'); return ( - <> - + {alt} -
- {alt} -
- +
); } - } -export default injectIntl(ZoomableImage); +export default ZoomableImage; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 7f2e88d44019e4..d0563bb1b2c5cd 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Unfocus compose textarea/search", "keyboard_shortcuts.up": "Move up in the list", "lightbox.close": "Close", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", + "lightbox.zoom_in": "Zoom to actual size", + "lightbox.zoom_out": "Zoom to fit", "limited_account_hint.action": "Show profile anyway", "limited_account_hint.title": "This profile has been hidden by the moderators of {domain}.", "link_preview.author": "By {name}", diff --git a/app/javascript/material-icons/400-24px/fit_screen-fill.svg b/app/javascript/material-icons/400-24px/fit_screen-fill.svg new file mode 100644 index 00000000000000..a2ed8ca581afdf --- /dev/null +++ b/app/javascript/material-icons/400-24px/fit_screen-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/fit_screen.svg b/app/javascript/material-icons/400-24px/fit_screen.svg new file mode 100644 index 00000000000000..d8d06f6e8b3337 --- /dev/null +++ b/app/javascript/material-icons/400-24px/fit_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 495481622a73a5..53becb3b925bc8 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5764,19 +5764,34 @@ a.status-card { height: 100%; position: relative; - &__close, - &__zoom-button { - color: rgba($white, 0.7); + &__buttons { + position: absolute; + inset-inline-end: 8px; + top: 8px; + z-index: 100; + display: flex; + gap: 8px; + align-items: center; - &:hover, - &:focus, - &:active { - color: $white; - background-color: rgba($white, 0.15); - } + .icon-button { + color: rgba($white, 0.7); + padding: 8px; - &:focus { - background-color: rgba($white, 0.3); + .icon { + width: 24px; + height: 24px; + } + + &:hover, + &:focus, + &:active { + color: $white; + background-color: rgba($white, 0.15); + } + + &:focus { + background-color: rgba($white, 0.3); + } } } } @@ -5937,28 +5952,6 @@ a.status-card { } } -.media-modal__close { - position: absolute; - inset-inline-end: 8px; - top: 8px; - z-index: 100; -} - -.media-modal__zoom-button { - position: absolute; - inset-inline-end: 64px; - top: 8px; - z-index: 100; - pointer-events: auto; - transition: opacity 0.3s linear; - will-change: opacity; -} - -.media-modal__zoom-button--hidden { - pointer-events: none; - opacity: 0; -} - .onboarding-modal, .error-modal, .embed-modal { diff --git a/app/javascript/svg-icons/actual_size.svg b/app/javascript/svg-icons/actual_size.svg new file mode 100644 index 00000000000000..75939cac875144 --- /dev/null +++ b/app/javascript/svg-icons/actual_size.svg @@ -0,0 +1,4 @@ + + + + From 8afa3bb2fa872c2413cd264ca3321a7509a5ffdf Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 20 Sep 2024 12:10:09 +0200 Subject: [PATCH 067/467] Change Mastodon to issue correctly-signed queries by default (#31994) --- app/lib/request.rb | 2 +- app/services/activitypub/fetch_replies_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/request.rb b/app/lib/request.rb index ab42e823009047..d7da9fe63c1303 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -77,7 +77,7 @@ def initialize(verb, url, **options) @url = Addressable::URI.parse(url).normalize @http_client = options.delete(:http_client) @allow_local = options.delete(:allow_local) - @full_path = options.delete(:with_query_string) + @full_path = !options.delete(:omit_query_string) @options = options.merge(socket_class: use_proxy? || @allow_local ? ProxySocket : Socket) @options = @options.merge(timeout_class: PerOperationWithDeadline, timeout_options: TIMEOUT) @options = @options.merge(proxy_url) if use_proxy? diff --git a/app/services/activitypub/fetch_replies_service.rb b/app/services/activitypub/fetch_replies_service.rb index e2ecdef1659990..46cab6caf93dc3 100644 --- a/app/services/activitypub/fetch_replies_service.rb +++ b/app/services/activitypub/fetch_replies_service.rb @@ -49,7 +49,7 @@ def fetch_collection(collection_or_uri) rescue Mastodon::UnexpectedResponseError => e raise unless e.response && e.response.code == 401 && Addressable::URI.parse(collection_or_uri).query.present? - fetch_resource_without_id_validation(collection_or_uri, nil, true, request_options: { with_query_string: true }) + fetch_resource_without_id_validation(collection_or_uri, nil, true, request_options: { omit_query_string: false }) end end From bdf83c353f8ff8c9794a11a4133f74129fac8670 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 08:39:48 -0400 Subject: [PATCH 068/467] Move default embed size knowledge into `OEmbedSerializer` (#31990) Co-authored-by: Claire --- app/controllers/api/oembed_controller.rb | 10 +--------- app/controllers/api/web/embeds_controller.rb | 2 +- app/serializers/oembed_serializer.rb | 6 ++++-- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/oembed_controller.rb b/app/controllers/api/oembed_controller.rb index 66da65bedaf741..b7f22824a7afbf 100644 --- a/app/controllers/api/oembed_controller.rb +++ b/app/controllers/api/oembed_controller.rb @@ -7,7 +7,7 @@ class Api::OEmbedController < Api::BaseController before_action :require_public_status! def show - render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default + render json: @status, serializer: OEmbedSerializer, width: params[:maxwidth], height: params[:maxheight] end private @@ -23,12 +23,4 @@ def require_public_status! def status_finder StatusFinder.new(params[:url]) end - - def maxwidth_or_default - (params[:maxwidth].presence || 400).to_i - end - - def maxheight_or_default - params[:maxheight].present? ? params[:maxheight].to_i : nil - end end diff --git a/app/controllers/api/web/embeds_controller.rb b/app/controllers/api/web/embeds_controller.rb index 63c3f2d90a79c6..f82c1c50d79502 100644 --- a/app/controllers/api/web/embeds_controller.rb +++ b/app/controllers/api/web/embeds_controller.rb @@ -9,7 +9,7 @@ def show return not_found if @status.hidden? if @status.local? - render json: @status, serializer: OEmbedSerializer, width: 400 + render json: @status, serializer: OEmbedSerializer else return not_found unless user_signed_in? diff --git a/app/serializers/oembed_serializer.rb b/app/serializers/oembed_serializer.rb index 19fa5ddec7856b..a693a961f49eb4 100644 --- a/app/serializers/oembed_serializer.rb +++ b/app/serializers/oembed_serializer.rb @@ -8,6 +8,8 @@ class OEmbedSerializer < ActiveModel::Serializer div1: 'font-weight: 500;', }.freeze + DEFAULT_WIDTH = 400 + include RoutingHelper include ActionView::Helpers::TagHelper @@ -57,10 +59,10 @@ def html end def width - instance_options[:width] + (instance_options[:width] || DEFAULT_WIDTH).to_i end def height - instance_options[:height] + instance_options[:height].presence&.to_i end end From a7dbf6f5a5f3bddbc40d8b4d9067bec0a7025169 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 08:50:51 -0400 Subject: [PATCH 069/467] Use heredoc/squish for inline css styles in oembed serializer (#31991) --- app/serializers/oembed_serializer.rb | 40 +++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/app/serializers/oembed_serializer.rb b/app/serializers/oembed_serializer.rb index a693a961f49eb4..c87f14f26b72df 100644 --- a/app/serializers/oembed_serializer.rb +++ b/app/serializers/oembed_serializer.rb @@ -2,10 +2,36 @@ class OEmbedSerializer < ActiveModel::Serializer INLINE_STYLES = { - blockquote: 'max-width: 540px; min-width: 270px; background:#FCF8FF; border: 1px solid #C9C4DA; border-radius: 8px; overflow: hidden; margin: 0; padding: 0;', - a: "color: #1C1A25; text-decoration: none; display: flex; align-items: center; justify-content: center; flex-direction: column; padding: 24px; font-size: 14px; line-height: 20px; letter-spacing: 0.25px; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif;", # rubocop:disable Layout/LineLength - div0: 'margin-top: 16px; color: #787588;', - div1: 'font-weight: 500;', + blockquote: <<~CSS.squish, + background: #FCF8FF; + border-radius: 8px; + border: 1px solid #C9C4DA; + margin: 0; + max-width: 540px; + min-width: 270px; + overflow: hidden; + padding: 0; + CSS + status_link: <<~CSS.squish, + align-items: center; + color: #1C1A25; + display: flex; + flex-direction: column; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif; + font-size: 14px; + justify-content: center; + letter-spacing: 0.25px; + line-height: 20px; + padding: 24px; + text-decoration: none; + CSS + div_account: <<~CSS.squish, + color: #787588; + margin-top: 16px; + CSS + div_view: <<~CSS.squish, + font-weight: 500; + CSS }.freeze DEFAULT_WIDTH = 400 @@ -48,10 +74,10 @@ def cache_age def html <<~HTML.squish
- + -
Post by @#{object.account.pretty_acct}@#{provider_name}
-
View on Mastodon
+
Post by @#{object.account.pretty_acct}@#{provider_name}
+
View on Mastodon
From 66326065b096fdfa4f8589747dc1717be03b5626 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 09:13:04 -0400 Subject: [PATCH 070/467] Add `response.content_type` checks for JSON to `api/v1` request specs (#31981) --- spec/requests/api/oembed_spec.rb | 4 ++ .../api/v1/accounts/credentials_spec.rb | 10 +++++ .../v1/accounts/familiar_followers_spec.rb | 2 + .../api/v1/accounts/featured_tags_spec.rb | 4 ++ .../api/v1/accounts/follower_accounts_spec.rb | 4 ++ .../v1/accounts/following_accounts_spec.rb | 4 ++ .../api/v1/accounts/identity_proofs_spec.rb | 2 + spec/requests/api/v1/accounts/lists_spec.rb | 2 + spec/requests/api/v1/accounts/lookup_spec.rb | 2 + spec/requests/api/v1/accounts/notes_spec.rb | 4 ++ spec/requests/api/v1/accounts/pins_spec.rb | 4 ++ .../api/v1/accounts/relationships_spec.rb | 10 +++++ spec/requests/api/v1/accounts/search_spec.rb | 2 + .../requests/api/v1/accounts/statuses_spec.rb | 14 +++++++ spec/requests/api/v1/accounts_spec.rb | 32 ++++++++++++++ .../api/v1/admin/account_actions_spec.rb | 14 +++++++ spec/requests/api/v1/admin/accounts_spec.rb | 42 +++++++++++++++++++ .../v1/admin/canonical_email_blocks_spec.rb | 26 ++++++++++++ spec/requests/api/v1/admin/dimensions_spec.rb | 5 +++ .../api/v1/admin/domain_allows_spec.rb | 16 +++++++ .../api/v1/admin/domain_blocks_spec.rb | 24 +++++++++++ .../api/v1/admin/email_domain_blocks_spec.rb | 18 ++++++++ spec/requests/api/v1/admin/ip_blocks_spec.rb | 24 +++++++++++ spec/requests/api/v1/admin/measures_spec.rb | 4 ++ spec/requests/api/v1/admin/reports_spec.rb | 14 +++++++ spec/requests/api/v1/admin/retention_spec.rb | 4 ++ spec/requests/api/v1/admin/tags_spec.rb | 12 ++++++ .../api/v1/admin/trends/links/links_spec.rb | 14 +++++++ .../links/preview_card_providers_spec.rb | 6 +++ .../api/v1/admin/trends/statuses_spec.rb | 6 +++ .../requests/api/v1/admin/trends/tags_spec.rb | 6 +++ .../api/v1/announcements/reactions_spec.rb | 12 +++++- spec/requests/api/v1/announcements_spec.rb | 12 +++++- spec/requests/api/v1/annual_reports_spec.rb | 6 +++ spec/requests/api/v1/apps/credentials_spec.rb | 12 ++++++ spec/requests/api/v1/apps_spec.rb | 32 ++++++++++++++ spec/requests/api/v1/blocks_spec.rb | 4 ++ spec/requests/api/v1/bookmarks_spec.rb | 6 +++ spec/requests/api/v1/conversations_spec.rb | 2 + spec/requests/api/v1/custom_emojis_spec.rb | 4 ++ spec/requests/api/v1/directories_spec.rb | 8 ++++ spec/requests/api/v1/domain_blocks_spec.rb | 12 ++++++ .../api/v1/emails/confirmations_spec.rb | 24 +++++++++++ spec/requests/api/v1/endorsements_spec.rb | 6 +++ spec/requests/api/v1/favourites_spec.rb | 6 +++ .../api/v1/featured_tags/suggestions_spec.rb | 2 + spec/requests/api/v1/featured_tags_spec.rb | 22 ++++++++++ spec/requests/api/v1/filters_spec.rb | 12 ++++++ spec/requests/api/v1/follow_requests_spec.rb | 6 +++ spec/requests/api/v1/followed_tags_spec.rb | 10 ++--- spec/requests/api/v1/instance_spec.rb | 4 ++ .../api/v1/instances/activity_spec.rb | 3 ++ .../api/v1/instances/domain_blocks_spec.rb | 3 ++ .../instances/extended_descriptions_spec.rb | 2 + .../api/v1/instances/languages_spec.rb | 2 + spec/requests/api/v1/instances/peers_spec.rb | 2 + .../api/v1/instances/privacy_policies_spec.rb | 2 + spec/requests/api/v1/instances/rules_spec.rb | 2 + .../instances/translation_languages_spec.rb | 4 ++ spec/requests/api/v1/lists/accounts_spec.rb | 18 ++++++++ spec/requests/api/v1/lists_spec.rb | 24 +++++++++++ spec/requests/api/v1/markers_spec.rb | 8 ++++ spec/requests/api/v1/media_spec.rb | 18 ++++++++ spec/requests/api/v1/mutes_spec.rb | 6 +++ .../api/v1/notifications/policies_spec.rb | 4 ++ .../api/v1/notifications/requests_spec.rb | 18 ++++++++ spec/requests/api/v1/notifications_spec.rb | 32 ++++++++++++++ spec/requests/api/v1/peers/search_spec.rb | 6 +++ spec/requests/api/v1/polls/votes_spec.rb | 4 ++ spec/requests/api/v1/polls_spec.rb | 4 ++ spec/requests/api/v1/preferences_spec.rb | 5 +++ spec/requests/api/v1/profiles_spec.rb | 4 ++ .../api/v1/push/subscriptions_spec.rb | 2 + spec/requests/api/v1/reports_spec.rb | 4 ++ spec/requests/api/v1/scheduled_status_spec.rb | 8 ++++ .../api/v1/statuses/bookmarks_spec.rb | 18 ++++++++ .../statuses/favourited_by_accounts_spec.rb | 6 +++ .../api/v1/statuses/favourites_spec.rb | 16 +++++++ .../api/v1/statuses/histories_spec.rb | 2 + spec/requests/api/v1/statuses/mutes_spec.rb | 4 ++ spec/requests/api/v1/statuses/pins_spec.rb | 18 ++++++++ .../v1/statuses/reblogged_by_accounts_spec.rb | 6 +++ spec/requests/api/v1/statuses/reblogs_spec.rb | 10 +++++ spec/requests/api/v1/statuses/sources_spec.rb | 8 ++++ .../api/v1/statuses/translations_spec.rb | 4 ++ spec/requests/api/v1/statuses_spec.rb | 38 +++++++++++++++++ spec/requests/api/v1/streaming_spec.rb | 2 + spec/requests/api/v1/suggestions_spec.rb | 6 +++ spec/requests/api/v1/tags_spec.rb | 20 +++++++++ spec/requests/api/v1/timelines/home_spec.rb | 10 +++++ spec/requests/api/v1/timelines/link_spec.rb | 14 +++++++ spec/requests/api/v1/timelines/list_spec.rb | 4 ++ spec/requests/api/v1/timelines/public_spec.rb | 14 ++++--- spec/requests/api/v1/timelines/tag_spec.rb | 6 +++ spec/requests/api/v1/trends/links_spec.rb | 4 ++ spec/requests/api/v1/trends/statuses_spec.rb | 4 ++ spec/requests/api/v1/trends/tags_spec.rb | 4 ++ spec/requests/api/web/settings_spec.rb | 4 ++ 98 files changed, 930 insertions(+), 14 deletions(-) diff --git a/spec/requests/api/oembed_spec.rb b/spec/requests/api/oembed_spec.rb index b9578b37c817df..767f20dddf4837 100644 --- a/spec/requests/api/oembed_spec.rb +++ b/spec/requests/api/oembed_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.headers['Cache-Control']) .to include('private, no-store') end @@ -27,6 +29,8 @@ expect(response) .to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/credentials_spec.rb b/spec/requests/api/v1/accounts/credentials_spec.rb index cc82e1892e2e69..0bd3ace1325eab 100644 --- a/spec/requests/api/v1/accounts/credentials_spec.rb +++ b/spec/requests/api/v1/accounts/credentials_spec.rb @@ -20,6 +20,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include({ source: hash_including({ discoverable: false, @@ -36,6 +38,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include({ locked: true, @@ -75,6 +79,8 @@ it 'returns http success' do subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -84,6 +90,8 @@ it 'returns http unprocessable entity' do subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -92,6 +100,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include({ source: hash_including({ diff --git a/spec/requests/api/v1/accounts/familiar_followers_spec.rb b/spec/requests/api/v1/accounts/familiar_followers_spec.rb index 8edfa4c8831f60..c698c2d6892a72 100644 --- a/spec/requests/api/v1/accounts/familiar_followers_spec.rb +++ b/spec/requests/api/v1/accounts/familiar_followers_spec.rb @@ -14,6 +14,8 @@ get '/api/v1/accounts/familiar_followers', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there are duplicate account IDs in the params' do diff --git a/spec/requests/api/v1/accounts/featured_tags_spec.rb b/spec/requests/api/v1/accounts/featured_tags_spec.rb index f48ed01def00be..632db65c443fd8 100644 --- a/spec/requests/api/v1/accounts/featured_tags_spec.rb +++ b/spec/requests/api/v1/accounts/featured_tags_spec.rb @@ -23,6 +23,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to contain_exactly(a_hash_including({ name: 'bar', url: "https://cb6e6126.ngrok.io/@#{account.username}/tagged/bar", @@ -37,6 +39,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to contain_exactly(a_hash_including({ name: 'bar', url: "https://cb6e6126.ngrok.io/@#{account.pretty_acct}/tagged/bar", diff --git a/spec/requests/api/v1/accounts/follower_accounts_spec.rb b/spec/requests/api/v1/accounts/follower_accounts_spec.rb index 2672615390a36e..7db9884a57a8f7 100644 --- a/spec/requests/api/v1/accounts/follower_accounts_spec.rb +++ b/spec/requests/api/v1/accounts/follower_accounts_spec.rb @@ -21,6 +21,8 @@ get "/api/v1/accounts/#{account.id}/followers", params: { limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 2 expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) end @@ -30,6 +32,8 @@ get "/api/v1/accounts/#{account.id}/followers", params: { limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 1 expect(response.parsed_body[0][:id]).to eq alice.id.to_s end diff --git a/spec/requests/api/v1/accounts/following_accounts_spec.rb b/spec/requests/api/v1/accounts/following_accounts_spec.rb index 19105ebf2f3e0b..ffb7332c4eb7b9 100644 --- a/spec/requests/api/v1/accounts/following_accounts_spec.rb +++ b/spec/requests/api/v1/accounts/following_accounts_spec.rb @@ -21,6 +21,8 @@ get "/api/v1/accounts/#{account.id}/following", params: { limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 2 expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) end @@ -30,6 +32,8 @@ get "/api/v1/accounts/#{account.id}/following", params: { limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 1 expect(response.parsed_body[0][:id]).to eq alice.id.to_s end diff --git a/spec/requests/api/v1/accounts/identity_proofs_spec.rb b/spec/requests/api/v1/accounts/identity_proofs_spec.rb index d1d9db8e737973..ba04ed45b9f8b5 100644 --- a/spec/requests/api/v1/accounts/identity_proofs_spec.rb +++ b/spec/requests/api/v1/accounts/identity_proofs_spec.rb @@ -14,6 +14,8 @@ get "/api/v1/accounts/#{account.id}/identity_proofs", params: { limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/lists_spec.rb b/spec/requests/api/v1/accounts/lists_spec.rb index 8b04f07f652519..cb1ff6b9f28a7c 100644 --- a/spec/requests/api/v1/accounts/lists_spec.rb +++ b/spec/requests/api/v1/accounts/lists_spec.rb @@ -20,6 +20,8 @@ get "/api/v1/accounts/#{account.id}/lists", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/lookup_spec.rb b/spec/requests/api/v1/accounts/lookup_spec.rb index dfd9fad49d8a96..77c09c0902b502 100644 --- a/spec/requests/api/v1/accounts/lookup_spec.rb +++ b/spec/requests/api/v1/accounts/lookup_spec.rb @@ -14,6 +14,8 @@ get '/api/v1/accounts/lookup', params: { account_id: account.id, acct: account.acct }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/notes_spec.rb b/spec/requests/api/v1/accounts/notes_spec.rb index b8c493abcc96d0..1677ec07e3d6d6 100644 --- a/spec/requests/api/v1/accounts/notes_spec.rb +++ b/spec/requests/api/v1/accounts/notes_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(AccountNote.find_by(account_id: user.account.id, target_account_id: account.id).comment).to eq comment end end @@ -33,6 +35,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(AccountNote.where(account_id: user.account.id, target_account_id: account.id)).to_not exist end end diff --git a/spec/requests/api/v1/accounts/pins_spec.rb b/spec/requests/api/v1/accounts/pins_spec.rb index c66b80c7fd98d5..8ebcb27d282e01 100644 --- a/spec/requests/api/v1/accounts/pins_spec.rb +++ b/spec/requests/api/v1/accounts/pins_spec.rb @@ -21,6 +21,8 @@ subject end.to change { AccountPin.where(account: user.account, target_account: kevin.account).count }.by(1) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -36,6 +38,8 @@ subject end.to change { AccountPin.where(account: user.account, target_account: kevin.account).count }.by(-1) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/relationships_spec.rb b/spec/requests/api/v1/accounts/relationships_spec.rb index 9570d1214c6d04..52aeb0132807ad 100644 --- a/spec/requests/api/v1/accounts/relationships_spec.rb +++ b/spec/requests/api/v1/accounts/relationships_spec.rb @@ -29,6 +29,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Enumerable) .and contain_exactly( @@ -50,6 +52,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Enumerable) .and have_attributes( @@ -70,6 +74,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Enumerable) .and have_attributes( @@ -149,6 +155,8 @@ def bob_item expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Enumerable) @@ -171,6 +179,8 @@ def bob_item expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Enumerable) diff --git a/spec/requests/api/v1/accounts/search_spec.rb b/spec/requests/api/v1/accounts/search_spec.rb index f6ab7a85319da1..dc24813e7392ad 100644 --- a/spec/requests/api/v1/accounts/search_spec.rb +++ b/spec/requests/api/v1/accounts/search_spec.rb @@ -13,6 +13,8 @@ get '/api/v1/accounts/search', params: { q: 'query' }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts/statuses_spec.rb b/spec/requests/api/v1/accounts/statuses_spec.rb index e056a7890158fe..1e219502874352 100644 --- a/spec/requests/api/v1/accounts/statuses_spec.rb +++ b/spec/requests/api/v1/accounts/statuses_spec.rb @@ -19,6 +19,8 @@ prev: api_v1_account_statuses_url(limit: 1, min_id: status.id), next: api_v1_account_statuses_url(limit: 1, max_id: status.id) ) + expect(response.content_type) + .to start_with('application/json') end context 'with only media' do @@ -26,6 +28,8 @@ get "/api/v1/accounts/#{user.account.id}/statuses", params: { only_media: true }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -41,6 +45,8 @@ it 'returns posts along with self replies', :aggregate_failures do expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to have_attributes(size: 2) .and contain_exactly( @@ -61,6 +67,8 @@ expect(response) .to have_http_status(200) .and include_pagination_headers(prev: api_v1_account_statuses_url(pinned: true, min_id: Status.first.id)) + expect(response.content_type) + .to start_with('application/json') end end @@ -79,6 +87,8 @@ prev: api_v1_account_statuses_url(pinned: true, min_id: Status.first.id), next: api_v1_account_statuses_url(pinned: true, max_id: Status.first.id) ) + expect(response.content_type) + .to start_with('application/json') end end @@ -96,6 +106,8 @@ get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when user does not follow account' do @@ -122,6 +134,8 @@ a_hash_including(id: status.id.to_s), a_hash_including(id: private_status.id.to_s) ) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb index 2ebe56fa7d0281..45e66f07445d8d 100644 --- a/spec/requests/api/v1/accounts_spec.rb +++ b/spec/requests/api/v1/accounts_spec.rb @@ -17,6 +17,8 @@ get '/api/v1/accounts', headers: headers, params: { id: [account.id, other_account.id, 123_123] } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to contain_exactly( hash_including(id: account.id.to_s), hash_including(id: other_account.id.to_s) @@ -32,6 +34,8 @@ get "/api/v1/accounts/#{account.id}" expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:id]).to eq(account.id.to_s) end end @@ -41,6 +45,8 @@ get '/api/v1/accounts/1' expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:error]).to eq('Record not found') end end @@ -57,6 +63,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:id]).to eq(account.id.to_s) end @@ -80,6 +88,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:access_token]).to_not be_blank user = User.find_by(email: 'hello@world.tld') @@ -93,6 +103,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -113,6 +125,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -133,6 +147,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -203,6 +219,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.following?(other_account)).to be false end @@ -225,6 +243,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.followed_by?(other_account)).to be false end @@ -247,6 +267,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.following?(other_account)).to be false expect(user.account.blocking?(other_account)).to be true end @@ -270,6 +292,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.blocking?(other_account)).to be false end @@ -292,6 +316,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.following?(other_account)).to be true expect(user.account.muting?(other_account)).to be true expect(user.account.muting_notifications?(other_account)).to be true @@ -316,6 +342,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.following?(other_account)).to be true expect(user.account.muting?(other_account)).to be true expect(user.account.muting_notifications?(other_account)).to be false @@ -340,6 +368,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.following?(other_account)).to be true expect(user.account.muting?(other_account)).to be true expect(user.account.muting_notifications?(other_account)).to be true @@ -364,6 +394,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.muting?(other_account)).to be false end diff --git a/spec/requests/api/v1/admin/account_actions_spec.rb b/spec/requests/api/v1/admin/account_actions_spec.rb index 5bcf809401da4c..4884dba9c79dfc 100644 --- a/spec/requests/api/v1/admin/account_actions_spec.rb +++ b/spec/requests/api/v1/admin/account_actions_spec.rb @@ -61,6 +61,8 @@ def latest_admin_action_log it 'disables the target account' do expect { subject }.to change { target_account.reload.user_disabled? }.from(false).to(true) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -75,6 +77,8 @@ def latest_admin_action_log it 'marks the target account as sensitive' do expect { subject }.to change { target_account.reload.sensitized? }.from(false).to(true) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -89,6 +93,8 @@ def latest_admin_action_log it 'marks the target account as silenced' do expect { subject }.to change { target_account.reload.silenced? }.from(false).to(true) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -103,6 +109,8 @@ def latest_admin_action_log it 'marks the target account as suspended' do expect { subject }.to change { target_account.reload.suspended? }.from(false).to(true) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -115,6 +123,8 @@ def latest_admin_action_log subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -125,6 +135,8 @@ def latest_admin_action_log subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -135,6 +147,8 @@ def latest_admin_action_log subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/accounts_spec.rb b/spec/requests/api/v1/admin/accounts_spec.rb index f557b61403af4c..6a681f9c5e5b2a 100644 --- a/spec/requests/api/v1/admin/accounts_spec.rb +++ b/spec/requests/api/v1/admin/accounts_spec.rb @@ -19,6 +19,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)).to match_array(expected_results.map { |a| a.id.to_s }) end end @@ -93,6 +95,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(params[:limit]) end end @@ -112,6 +116,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including(id: account.id.to_s, username: account.username, email: account.user.email) ) @@ -122,6 +128,8 @@ get '/api/v1/admin/accounts/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -145,6 +153,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(account.reload.user_approved?).to be(true) end @@ -166,6 +176,8 @@ subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -174,6 +186,8 @@ post '/api/v1/admin/accounts/-1/approve', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -197,6 +211,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(User.where(id: account.user.id)).to_not exist expect(latest_admin_action_log) @@ -214,6 +230,8 @@ subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -222,6 +240,8 @@ post '/api/v1/admin/accounts/-1/reject', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -244,6 +264,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(account.reload.user_disabled?).to be false end @@ -252,6 +274,8 @@ post '/api/v1/admin/accounts/-1/enable', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -275,6 +299,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(account.reload.suspended?).to be false end end @@ -284,6 +310,8 @@ subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -292,6 +320,8 @@ post '/api/v1/admin/accounts/-1/unsuspend', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -314,6 +344,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(account.reload.sensitized?).to be false end @@ -322,6 +354,8 @@ post '/api/v1/admin/accounts/-1/unsensitive', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -344,6 +378,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(account.reload.silenced?).to be false end @@ -352,6 +388,8 @@ post '/api/v1/admin/accounts/-1/unsilence', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -376,6 +414,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(Admin::AccountDeletionWorker).to have_received(:perform_async).with(account.id).once end end @@ -393,6 +433,8 @@ delete '/api/v1/admin/accounts/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb index dd7e119911cbe9..eaa011d5167716 100644 --- a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb +++ b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb @@ -24,6 +24,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there is no canonical email block' do @@ -96,6 +98,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( id: eq(canonical_email_block.id.to_s), @@ -109,6 +113,8 @@ get '/api/v1/admin/canonical_email_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -131,6 +137,8 @@ subject expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -142,6 +150,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.first[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end end @@ -151,6 +161,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty end end @@ -173,6 +185,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end @@ -183,6 +197,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -193,6 +209,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:canonical_email_hash]).to eq(params[:canonical_email_hash]) end end @@ -204,6 +222,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:canonical_email_hash]).to eq(canonical_email_block.canonical_email_hash) end end @@ -217,6 +237,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -237,6 +259,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(CanonicalEmailBlock.find_by(id: canonical_email_block.id)).to be_nil end @@ -245,6 +269,8 @@ delete '/api/v1/admin/canonical_email_blocks/0', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/dimensions_spec.rb b/spec/requests/api/v1/admin/dimensions_spec.rb index a28c2a9e3e521a..81fb580ba72f37 100644 --- a/spec/requests/api/v1/admin/dimensions_spec.rb +++ b/spec/requests/api/v1/admin/dimensions_spec.rb @@ -15,6 +15,8 @@ expect(response) .to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -27,6 +29,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_an(Array) end diff --git a/spec/requests/api/v1/admin/domain_allows_spec.rb b/spec/requests/api/v1/admin/domain_allows_spec.rb index 26c962b347a61f..eb5128e420834d 100644 --- a/spec/requests/api/v1/admin/domain_allows_spec.rb +++ b/spec/requests/api/v1/admin/domain_allows_spec.rb @@ -24,6 +24,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there is no allowed domains' do @@ -79,6 +81,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:domain]).to eq domain_allow.domain end @@ -87,6 +91,8 @@ get '/api/v1/admin/domain_allows/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -107,6 +113,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:domain]).to eq 'foo.bar.com' expect(DomainAllow.find_by(domain: 'foo.bar.com')).to be_present end @@ -119,6 +127,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -129,6 +139,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -160,6 +172,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(DomainAllow.find_by(id: domain_allow.id)).to be_nil end @@ -168,6 +182,8 @@ delete '/api/v1/admin/domain_allows/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 3f2cbbf1135788..1a506bd9bebca7 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -24,6 +24,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there are no domain blocks' do @@ -94,6 +96,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( id: domain_block.id.to_s, domain: domain_block.domain, @@ -113,6 +117,8 @@ get '/api/v1/admin/domain_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -132,6 +138,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match a_hash_including( { domain: 'foo.bar.com', @@ -153,6 +161,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match a_hash_including( { domain: 'foo.bar.com', @@ -173,6 +183,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:existing_domain_block][:domain]).to eq('foo.bar.com') end end @@ -186,6 +198,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:existing_domain_block][:domain]).to eq('bar.com') end end @@ -197,6 +211,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -217,6 +233,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match a_hash_including( { id: domain_block.id.to_s, @@ -236,6 +254,8 @@ put '/api/v1/admin/domain_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -255,6 +275,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(DomainBlock.find_by(id: domain_block.id)).to be_nil end @@ -263,6 +285,8 @@ delete '/api/v1/admin/domain_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb index aa3073341a9a24..3f51a3ea2d4fb6 100644 --- a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb @@ -25,6 +25,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there is no email domain block' do @@ -97,6 +99,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:domain]).to eq(email_domain_block.domain) end end @@ -106,6 +110,8 @@ get '/api/v1/admin/email_domain_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -125,6 +131,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:domain]).to eq(params[:domain]) end @@ -135,6 +143,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -145,6 +155,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -157,6 +169,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -176,6 +190,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty expect(EmailDomainBlock.find_by(id: email_domain_block.id)).to be_nil end @@ -185,6 +201,8 @@ delete '/api/v1/admin/email_domain_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/ip_blocks_spec.rb b/spec/requests/api/v1/admin/ip_blocks_spec.rb index b18f8f885cfe9d..c096aa33283cae 100644 --- a/spec/requests/api/v1/admin/ip_blocks_spec.rb +++ b/spec/requests/api/v1/admin/ip_blocks_spec.rb @@ -24,6 +24,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there is no ip block' do @@ -88,6 +90,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -101,6 +105,8 @@ get '/api/v1/admin/ip_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -120,6 +126,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( ip: eq("#{params[:ip]}/32"), @@ -135,6 +143,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -145,6 +155,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -157,6 +169,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -167,6 +181,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -185,6 +201,8 @@ .and change_comment_value expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match(hash_including({ ip: "#{ip_block.ip}/#{ip_block.ip.prefix}", severity: 'sign_up_requires_approval', @@ -205,6 +223,8 @@ def change_comment_value put '/api/v1/admin/ip_blocks/-1', headers: headers, params: params expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -220,6 +240,8 @@ def change_comment_value subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty expect(IpBlock.find_by(id: ip_block.id)).to be_nil end @@ -229,6 +251,8 @@ def change_comment_value delete '/api/v1/admin/ip_blocks/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/measures_spec.rb b/spec/requests/api/v1/admin/measures_spec.rb index de359a5ccdfea1..519b5cc7b3ca6c 100644 --- a/spec/requests/api/v1/admin/measures_spec.rb +++ b/spec/requests/api/v1/admin/measures_spec.rb @@ -32,6 +32,8 @@ expect(response) .to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -43,6 +45,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Array) diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index 2c40f56dc8adea..a0e7b0a369a3e1 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -23,6 +23,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there are no reports' do @@ -126,6 +128,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include( { id: report.id.to_s, @@ -156,6 +160,8 @@ .and create_an_action_log expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') report.reload @@ -190,6 +196,8 @@ .to change { report.reload.unresolved? }.from(true).to(false) .and create_an_action_log expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -208,6 +216,8 @@ .to change { report.reload.unresolved? }.from(false).to(true) .and create_an_action_log expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -226,6 +236,8 @@ .to change { report.reload.assigned_account_id }.from(nil).to(user.account.id) .and create_an_action_log expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -244,6 +256,8 @@ .to change { report.reload.assigned_account_id }.from(user.account.id).to(nil) .and create_an_action_log expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end diff --git a/spec/requests/api/v1/admin/retention_spec.rb b/spec/requests/api/v1/admin/retention_spec.rb index c28fa6de815bfa..e28bc2a94f815c 100644 --- a/spec/requests/api/v1/admin/retention_spec.rb +++ b/spec/requests/api/v1/admin/retention_spec.rb @@ -15,6 +15,8 @@ expect(response) .to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -26,6 +28,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Array) diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index fda9227acf5402..3623c09ac7ad58 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -24,6 +24,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when there are no tags' do @@ -77,6 +79,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:id].to_i).to eq(tag.id) expect(response.parsed_body[:name]).to eq(tag.name) @@ -87,6 +91,8 @@ get '/api/v1/admin/tags/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -107,6 +113,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:id].to_i).to eq(tag.id) expect(response.parsed_body[:name]).to eq(tag.name.upcase) @@ -119,6 +127,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -127,6 +137,8 @@ get '/api/v1/admin/tags/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/trends/links/links_spec.rb b/spec/requests/api/v1/admin/trends/links/links_spec.rb index c436b7081e615f..51e800734aaaec 100644 --- a/spec/requests/api/v1/admin/trends/links/links_spec.rb +++ b/spec/requests/api/v1/admin/trends/links/links_spec.rb @@ -18,6 +18,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -36,6 +38,8 @@ .to change_link_trendable_to_true expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expects_correct_link_data end @@ -60,6 +64,8 @@ def expects_correct_link_data post '/api/v1/admin/trends/links/-1/approve', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -70,6 +76,8 @@ def expects_correct_link_data subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end end @@ -89,6 +97,8 @@ def expects_correct_link_data .to_not change_link_trendable expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end def change_link_trendable @@ -114,6 +124,8 @@ def change_link_trendable post '/api/v1/admin/trends/links/-1/reject', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -124,6 +136,8 @@ def change_link_trendable subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/trends/links/preview_card_providers_spec.rb b/spec/requests/api/v1/admin/trends/links/preview_card_providers_spec.rb index 193906ab057b6d..d46d0ff5555404 100644 --- a/spec/requests/api/v1/admin/trends/links/preview_card_providers_spec.rb +++ b/spec/requests/api/v1/admin/trends/links/preview_card_providers_spec.rb @@ -16,6 +16,8 @@ get '/api/v1/admin/trends/links/publishers', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -29,6 +31,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -42,6 +46,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/trends/statuses_spec.rb b/spec/requests/api/v1/admin/trends/statuses_spec.rb index e33a9658a9ff1e..c63d8d925c7c98 100644 --- a/spec/requests/api/v1/admin/trends/statuses_spec.rb +++ b/spec/requests/api/v1/admin/trends/statuses_spec.rb @@ -16,6 +16,8 @@ get '/api/v1/admin/trends/statuses', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -29,6 +31,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -42,6 +46,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/admin/trends/tags_spec.rb b/spec/requests/api/v1/admin/trends/tags_spec.rb index 748a27283c14b7..433cc6c5a6e5f3 100644 --- a/spec/requests/api/v1/admin/trends/tags_spec.rb +++ b/spec/requests/api/v1/admin/trends/tags_spec.rb @@ -16,6 +16,8 @@ get '/api/v1/admin/trends/tags', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -29,6 +31,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -42,6 +46,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/announcements/reactions_spec.rb b/spec/requests/api/v1/announcements/reactions_spec.rb index ffacb2b0afa270..82154b4a265210 100644 --- a/spec/requests/api/v1/announcements/reactions_spec.rb +++ b/spec/requests/api/v1/announcements/reactions_spec.rb @@ -15,7 +15,9 @@ it 'returns http unauthorized' do put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" - expect(response).to have_http_status 401 + expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -26,6 +28,8 @@ it 'creates reaction', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to_not be_nil end end @@ -39,7 +43,9 @@ context 'without token' do it 'returns http unauthorized' do delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" - expect(response).to have_http_status 401 + expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -50,6 +56,8 @@ it 'creates reaction', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to be_nil end end diff --git a/spec/requests/api/v1/announcements_spec.rb b/spec/requests/api/v1/announcements_spec.rb index 1624b76012563b..97a4442aa98855 100644 --- a/spec/requests/api/v1/announcements_spec.rb +++ b/spec/requests/api/v1/announcements_spec.rb @@ -15,7 +15,9 @@ it 'returns http unprocessable entity' do get '/api/v1/announcements' - expect(response).to have_http_status 422 + expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -26,6 +28,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end @@ -35,7 +39,9 @@ it 'returns http unauthorized' do post "/api/v1/announcements/#{announcement.id}/dismiss" - expect(response).to have_http_status 401 + expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -48,6 +54,8 @@ it 'dismisses announcement', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(announcement.announcement_mutes.find_by(account: user.account)).to_not be_nil end end diff --git a/spec/requests/api/v1/annual_reports_spec.rb b/spec/requests/api/v1/annual_reports_spec.rb index 8051a654847ecc..b9831d17e2c4f9 100644 --- a/spec/requests/api/v1/annual_reports_spec.rb +++ b/spec/requests/api/v1/annual_reports_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -33,6 +35,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present @@ -51,6 +55,8 @@ .to change { annual_report.reload.viewed? }.to(true) expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 6fd885eb8685f6..30200ed60c3471 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -17,6 +17,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( @@ -36,6 +38,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:client_id]).to_not be_present expect(response.parsed_body[:client_secret]).to_not be_present @@ -51,6 +55,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( @@ -74,6 +80,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -86,6 +94,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end it 'returns the error in the json response' do @@ -108,6 +118,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( diff --git a/spec/requests/api/v1/apps_spec.rb b/spec/requests/api/v1/apps_spec.rb index 51a0c3fd0c6dc7..cf43e14d62c267 100644 --- a/spec/requests/api/v1/apps_spec.rb +++ b/spec/requests/api/v1/apps_spec.rb @@ -28,6 +28,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') app = Doorkeeper::Application.find_by(name: client_name) @@ -59,6 +61,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(Doorkeeper::Application.find_by(name: client_name)).to be_present expect(response.parsed_body) @@ -76,6 +80,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') app = Doorkeeper::Application.find_by(name: client_name) @@ -96,6 +102,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -106,6 +114,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(Doorkeeper::Application.find_by(name: client_name).scopes.to_s).to eq 'read' end end @@ -117,6 +127,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -127,6 +139,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -137,6 +151,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -148,6 +164,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -158,6 +176,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') app = Doorkeeper::Application.find_by(name: client_name) @@ -180,6 +200,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') app = Doorkeeper::Application.find_by(name: client_name) @@ -202,6 +224,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -212,6 +236,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -222,6 +248,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -232,6 +260,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -242,6 +272,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') app = Doorkeeper::Application.find_by(name: client_name) diff --git a/spec/requests/api/v1/blocks_spec.rb b/spec/requests/api/v1/blocks_spec.rb index fc028f9bac8dd4..498cf932756de8 100644 --- a/spec/requests/api/v1/blocks_spec.rb +++ b/spec/requests/api/v1/blocks_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end @@ -36,6 +38,8 @@ subject expect(response.parsed_body.size).to eq(params[:limit]) + expect(response.content_type) + .to start_with('application/json') expect(response) .to include_pagination_headers( prev: api_v1_blocks_url(limit: params[:limit], since_id: blocks.last.id), diff --git a/spec/requests/api/v1/bookmarks_spec.rb b/spec/requests/api/v1/bookmarks_spec.rb index 5955de66524287..c78e6912365b51 100644 --- a/spec/requests/api/v1/bookmarks_spec.rb +++ b/spec/requests/api/v1/bookmarks_spec.rb @@ -28,6 +28,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end @@ -40,6 +42,8 @@ expect(response.parsed_body.size) .to eq(params[:limit]) + expect(response.content_type) + .to start_with('application/json') expect(response) .to include_pagination_headers( prev: api_v1_bookmarks_url(limit: params[:limit], min_id: bookmarks.last.id), @@ -55,6 +59,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/conversations_spec.rb b/spec/requests/api/v1/conversations_spec.rb index bd3cbfd0e7f43f..6e2ac1df53e0a8 100644 --- a/spec/requests/api/v1/conversations_spec.rb +++ b/spec/requests/api/v1/conversations_spec.rb @@ -26,6 +26,8 @@ prev: api_v1_conversations_url(limit: 1, min_id: Status.first.id), next: api_v1_conversations_url(limit: 1, max_id: Status.first.id) ) + expect(response.content_type) + .to start_with('application/json') end it 'returns conversations', :aggregate_failures do diff --git a/spec/requests/api/v1/custom_emojis_spec.rb b/spec/requests/api/v1/custom_emojis_spec.rb index 0942734ff3d809..e860fbeb17c105 100644 --- a/spec/requests/api/v1/custom_emojis_spec.rb +++ b/spec/requests/api/v1/custom_emojis_spec.rb @@ -18,6 +18,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present @@ -33,6 +35,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present diff --git a/spec/requests/api/v1/directories_spec.rb b/spec/requests/api/v1/directories_spec.rb index aa602a71cd65e3..282be9a582551e 100644 --- a/spec/requests/api/v1/directories_spec.rb +++ b/spec/requests/api/v1/directories_spec.rb @@ -82,6 +82,8 @@ get '/api/v1/directory', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(2) expect(response.parsed_body.pluck(:id)).to contain_exactly(eligible_remote_account.id.to_s, local_discoverable_account.id.to_s) end @@ -101,6 +103,8 @@ get '/api/v1/directory', headers: headers, params: { local: '1' } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(1) expect(response.parsed_body.first[:id]).to include(local_account.id.to_s) expect(response.body).to_not include(remote_account.id.to_s) @@ -115,6 +119,8 @@ get '/api/v1/directory', headers: headers, params: { order: 'active' } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(2) expect(response.parsed_body.first[:id]).to include(new_stat.account_id.to_s) expect(response.parsed_body.second[:id]).to include(old_stat.account_id.to_s) @@ -130,6 +136,8 @@ get '/api/v1/directory', headers: headers, params: { order: 'new' } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(2) expect(response.parsed_body.first[:id]).to include(account_new.id.to_s) expect(response.parsed_body.second[:id]).to include(account_old.id.to_s) diff --git a/spec/requests/api/v1/domain_blocks_spec.rb b/spec/requests/api/v1/domain_blocks_spec.rb index 8184c26bed101f..339f49fe761f75 100644 --- a/spec/requests/api/v1/domain_blocks_spec.rb +++ b/spec/requests/api/v1/domain_blocks_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(blocked_domains) end @@ -53,6 +55,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.domain_blocking?(params[:domain])).to be(true) end @@ -63,6 +67,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -73,6 +79,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -94,6 +102,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.domain_blocking?('example.com')).to be(false) end @@ -104,6 +114,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/emails/confirmations_spec.rb b/spec/requests/api/v1/emails/confirmations_spec.rb index 0a419a10cfb937..1408ad05067318 100644 --- a/spec/requests/api/v1/emails/confirmations_spec.rb +++ b/spec/requests/api/v1/emails/confirmations_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end end @@ -41,6 +43,8 @@ subject expect(response).to have_http_status(403) + expect(response.content_type) + .to start_with('application/json') end context 'when user changed e-mail and has not confirmed it' do @@ -52,6 +56,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end @@ -61,6 +67,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -71,6 +79,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.reload.unconfirmed_email).to eq('foo@bar.com') end end @@ -82,6 +92,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -94,6 +106,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -111,6 +125,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be false end end @@ -122,6 +138,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be true end end @@ -139,6 +157,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be false end end @@ -150,6 +170,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be true end end @@ -162,6 +184,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/endorsements_spec.rb b/spec/requests/api/v1/endorsements_spec.rb index 25917f527a1645..730ba6350cf05e 100644 --- a/spec/requests/api/v1/endorsements_spec.rb +++ b/spec/requests/api/v1/endorsements_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -36,6 +38,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present @@ -51,6 +55,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to_not be_present diff --git a/spec/requests/api/v1/favourites_spec.rb b/spec/requests/api/v1/favourites_spec.rb index 2f8bef1190d75b..44d0239556b2ab 100644 --- a/spec/requests/api/v1/favourites_spec.rb +++ b/spec/requests/api/v1/favourites_spec.rb @@ -28,6 +28,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end @@ -43,6 +45,8 @@ prev: api_v1_favourites_url(limit: params[:limit], min_id: favourites.last.id), next: api_v1_favourites_url(limit: params[:limit], max_id: favourites.second.id) ) + expect(response.content_type) + .to start_with('application/json') end end @@ -53,6 +57,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/featured_tags/suggestions_spec.rb b/spec/requests/api/v1/featured_tags/suggestions_spec.rb index 8815c65cf1ee39..5fbbec50976f08 100644 --- a/spec/requests/api/v1/featured_tags/suggestions_spec.rb +++ b/spec/requests/api/v1/featured_tags/suggestions_spec.rb @@ -32,6 +32,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to contain_exactly( include(name: used_tag.name) diff --git a/spec/requests/api/v1/featured_tags_spec.rb b/spec/requests/api/v1/featured_tags_spec.rb index f0e939d42a19ac..b9c78cc11bdf5c 100644 --- a/spec/requests/api/v1/featured_tags_spec.rb +++ b/spec/requests/api/v1/featured_tags_spec.rb @@ -22,6 +22,8 @@ get '/api/v1/featured_tags' expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -29,6 +31,8 @@ get '/api/v1/featured_tags', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when the requesting user has no featured tag' do @@ -62,6 +66,8 @@ post '/api/v1/featured_tags', headers: headers, params: params expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( name: params[:name] @@ -89,6 +95,8 @@ post '/api/v1/featured_tags', params: params expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -97,6 +105,8 @@ post '/api/v1/featured_tags', headers: headers expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -107,6 +117,8 @@ post '/api/v1/featured_tags', headers: headers, params: params expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -119,6 +131,8 @@ post '/api/v1/featured_tags', headers: headers, params: params expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -131,6 +145,8 @@ delete "/api/v1/featured_tags/#{id}", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty featured_tag = FeaturedTag.find_by(id: id) @@ -150,6 +166,8 @@ delete "/api/v1/featured_tags/#{id}" expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -158,6 +176,8 @@ delete '/api/v1/featured_tags/0', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -169,6 +189,8 @@ delete "/api/v1/featured_tags/#{id}", headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/filters_spec.rb b/spec/requests/api/v1/filters_spec.rb index 93ed78b34606c8..51f03cc04d44c7 100644 --- a/spec/requests/api/v1/filters_spec.rb +++ b/spec/requests/api/v1/filters_spec.rb @@ -15,6 +15,8 @@ it 'returns http success' do get '/api/v1/filters', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to contain_exactly( include(id: custom_filter_keyword.id.to_s) @@ -35,6 +37,8 @@ filter = user.account.custom_filters.first expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(filter).to_not be_nil expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] expect(filter.context).to eq %w(home) @@ -50,6 +54,8 @@ filter = user.account.custom_filters.first expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(filter).to_not be_nil expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] expect(filter.context).to eq %w(home) @@ -68,6 +74,8 @@ get "/api/v1/filters/#{keyword.id}", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -82,6 +90,8 @@ it 'updates the filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(keyword.reload.phrase).to eq 'updated' end end @@ -97,6 +107,8 @@ it 'removes the filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound end end diff --git a/spec/requests/api/v1/follow_requests_spec.rb b/spec/requests/api/v1/follow_requests_spec.rb index c143ccaec1944e..f0f73d38ad0d9e 100644 --- a/spec/requests/api/v1/follow_requests_spec.rb +++ b/spec/requests/api/v1/follow_requests_spec.rb @@ -36,6 +36,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end @@ -66,6 +68,8 @@ it 'allows the requesting follower to follow', :aggregate_failures do expect { subject }.to change { follower.following?(user.account) }.from(false).to(true) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:followed_by]).to be true end end @@ -87,6 +91,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(FollowRequest.where(target_account: user.account, account: follower)).to_not exist expect(response.parsed_body[:followed_by]).to be false end diff --git a/spec/requests/api/v1/followed_tags_spec.rb b/spec/requests/api/v1/followed_tags_spec.rb index f15c0d7f44db50..b0191b523fc308 100644 --- a/spec/requests/api/v1/followed_tags_spec.rb +++ b/spec/requests/api/v1/followed_tags_spec.rb @@ -32,20 +32,20 @@ subject expect(response).to have_http_status(:success) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end context 'with limit param' do let(:params) { { limit: 1 } } - it 'returns only the requested number of follow tags' do + it 'returns only the requested number of follow tags and sets pagination headers' do subject + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers' do - subject expect(response) .to include_pagination_headers( diff --git a/spec/requests/api/v1/instance_spec.rb b/spec/requests/api/v1/instance_spec.rb index 8d6ba572e0aebd..821cbfec6146cf 100644 --- a/spec/requests/api/v1/instance_spec.rb +++ b/spec/requests/api/v1/instance_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present @@ -27,6 +29,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present diff --git a/spec/requests/api/v1/instances/activity_spec.rb b/spec/requests/api/v1/instances/activity_spec.rb index 72e3faeb650dd3..c2f94cc578a1e6 100644 --- a/spec/requests/api/v1/instances/activity_spec.rb +++ b/spec/requests/api/v1/instances/activity_spec.rb @@ -13,6 +13,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_present .and(be_an(Array)) diff --git a/spec/requests/api/v1/instances/domain_blocks_spec.rb b/spec/requests/api/v1/instances/domain_blocks_spec.rb index 460d338607bc9d..b214fda73b5a54 100644 --- a/spec/requests/api/v1/instances/domain_blocks_spec.rb +++ b/spec/requests/api/v1/instances/domain_blocks_spec.rb @@ -17,6 +17,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_present .and(be_an(Array)) diff --git a/spec/requests/api/v1/instances/extended_descriptions_spec.rb b/spec/requests/api/v1/instances/extended_descriptions_spec.rb index bf6d58216a0b0f..62a7fff2eccc33 100644 --- a/spec/requests/api/v1/instances/extended_descriptions_spec.rb +++ b/spec/requests/api/v1/instances/extended_descriptions_spec.rb @@ -9,6 +9,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present diff --git a/spec/requests/api/v1/instances/languages_spec.rb b/spec/requests/api/v1/instances/languages_spec.rb index 3ab1ba57b85c37..3d188d23c05bde 100644 --- a/spec/requests/api/v1/instances/languages_spec.rb +++ b/spec/requests/api/v1/instances/languages_spec.rb @@ -10,6 +10,8 @@ it 'returns http success and includes supported languages' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:code)).to match_array LanguagesHelper::SUPPORTED_LOCALES.keys.map(&:to_s) end end diff --git a/spec/requests/api/v1/instances/peers_spec.rb b/spec/requests/api/v1/instances/peers_spec.rb index 1140612f0a9438..8ebfc933579055 100644 --- a/spec/requests/api/v1/instances/peers_spec.rb +++ b/spec/requests/api/v1/instances/peers_spec.rb @@ -12,6 +12,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Array) diff --git a/spec/requests/api/v1/instances/privacy_policies_spec.rb b/spec/requests/api/v1/instances/privacy_policies_spec.rb index 93490542cdd4d7..519c2b29d048bd 100644 --- a/spec/requests/api/v1/instances/privacy_policies_spec.rb +++ b/spec/requests/api/v1/instances/privacy_policies_spec.rb @@ -9,6 +9,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present diff --git a/spec/requests/api/v1/instances/rules_spec.rb b/spec/requests/api/v1/instances/rules_spec.rb index 620c991ae2c3b0..b73004886392be 100644 --- a/spec/requests/api/v1/instances/rules_spec.rb +++ b/spec/requests/api/v1/instances/rules_spec.rb @@ -9,6 +9,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_an(Array) diff --git a/spec/requests/api/v1/instances/translation_languages_spec.rb b/spec/requests/api/v1/instances/translation_languages_spec.rb index 0de5ec3bc236ae..fef8700db928e4 100644 --- a/spec/requests/api/v1/instances/translation_languages_spec.rb +++ b/spec/requests/api/v1/instances/translation_languages_spec.rb @@ -10,6 +10,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to eq({}) @@ -24,6 +26,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to match({ und: %w(en de), en: ['de'] }) diff --git a/spec/requests/api/v1/lists/accounts_spec.rb b/spec/requests/api/v1/lists/accounts_spec.rb index 6e5f9e4e9dd424..3911d1f28b50f7 100644 --- a/spec/requests/api/v1/lists/accounts_spec.rb +++ b/spec/requests/api/v1/lists/accounts_spec.rb @@ -34,6 +34,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end @@ -68,6 +70,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(list.accounts).to include(bob) end end @@ -81,6 +85,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(list.accounts).to include(bob) end end @@ -90,6 +96,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') expect(list.accounts).to_not include(bob) end end @@ -105,6 +113,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -118,6 +128,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -143,6 +155,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(list.accounts).to_not include(bob) expect(list.accounts).to include(peter) end @@ -154,6 +168,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(list.accounts).to contain_exactly(bob, peter) end end @@ -167,6 +183,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/lists_spec.rb b/spec/requests/api/v1/lists_spec.rb index 2042a64d5ceb00..20f27a74310574 100644 --- a/spec/requests/api/v1/lists_spec.rb +++ b/spec/requests/api/v1/lists_spec.rb @@ -43,6 +43,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array(expected_response) end end @@ -60,6 +62,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match({ id: list.id.to_s, title: list.title, @@ -75,6 +79,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -83,6 +89,8 @@ get '/api/v1/lists/-1', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -100,6 +108,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match(a_hash_including(title: 'my list', replies_policy: 'none', exclusive: true)) expect(List.where(account: user.account).count).to eq(1) end @@ -111,6 +121,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -121,6 +133,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -142,6 +156,8 @@ .and change_list_exclusive expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') list.reload expect(response.parsed_body).to match({ @@ -169,6 +185,8 @@ def change_list_exclusive put '/api/v1/lists/-1', headers: headers, params: params expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -179,6 +197,8 @@ def change_list_exclusive subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -196,6 +216,8 @@ def change_list_exclusive subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(List.where(id: list.id)).to_not exist end @@ -214,6 +236,8 @@ def change_list_exclusive subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/markers_spec.rb b/spec/requests/api/v1/markers_spec.rb index a10d2dc3e280ec..d7cd78924bcec1 100644 --- a/spec/requests/api/v1/markers_spec.rb +++ b/spec/requests/api/v1/markers_spec.rb @@ -18,6 +18,8 @@ it 'returns markers', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( home: include(last_read_id: '123'), @@ -34,6 +36,8 @@ it 'creates a marker', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.markers.first.timeline).to eq 'home' expect(user.markers.first.last_read_id).to eq 69_420 end @@ -47,6 +51,8 @@ it 'updates a marker', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.markers.first.timeline).to eq 'home' expect(user.markers.first.last_read_id).to eq 70_120 end @@ -61,6 +67,8 @@ it 'returns error json' do expect(response) .to have_http_status(409) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include(error: /Conflict during update/) end diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb index a10bbb31efb01a..d7d0b92f11bfb5 100644 --- a/spec/requests/api/v1/media_spec.rb +++ b/spec/requests/api/v1/media_spec.rb @@ -21,6 +21,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( id: media.id.to_s, @@ -39,6 +41,8 @@ subject expect(response).to have_http_status(206) + expect(response.content_type) + .to start_with('application/json') end end @@ -49,6 +53,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -59,6 +65,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -75,6 +83,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(MediaAttachment.first).to be_present expect(MediaAttachment.first).to have_attached_file(:file) @@ -102,6 +112,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -112,6 +124,8 @@ subject expect(response).to have_http_status(500) + expect(response.content_type) + .to start_with('application/json') end end end @@ -153,6 +167,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -171,6 +187,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/mutes_spec.rb b/spec/requests/api/v1/mutes_spec.rb index 316d455d288fe5..61e32cb9ae0452 100644 --- a/spec/requests/api/v1/mutes_spec.rb +++ b/spec/requests/api/v1/mutes_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') muted_accounts = mutes.map(&:target_account) expect(response.parsed_body.pluck(:id)).to match_array(muted_accounts.map { |account| account.id.to_s }) @@ -34,6 +36,8 @@ subject expect(response.parsed_body.size).to eq(params[:limit]) + expect(response.content_type) + .to start_with('application/json') expect(response) .to include_pagination_headers( prev: api_v1_mutes_url(limit: params[:limit], since_id: mutes.last.id), @@ -71,6 +75,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/notifications/policies_spec.rb b/spec/requests/api/v1/notifications/policies_spec.rb index 8bafcad2fe397d..ac24501526fa38 100644 --- a/spec/requests/api/v1/notifications/policies_spec.rb +++ b/spec/requests/api/v1/notifications/policies_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include( filter_not_following: false, filter_not_followers: false, @@ -54,6 +56,8 @@ .to change { NotificationPolicy.find_or_initialize_by(account: user.account).for_not_following.to_sym }.from(:accept).to(:filter) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include( filter_not_following: true, filter_not_followers: false, diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb index 030b7cfa212e50..bee9d3a3da93f3 100644 --- a/spec/requests/api/v1/notifications/requests_spec.rb +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end @@ -43,6 +45,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(NotificationPermission.find_by(account: notification_request.account, from_account: notification_request.from_account)).to_not be_nil end @@ -53,6 +57,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -70,6 +76,8 @@ expect { subject }.to change(NotificationRequest, :count).by(-1) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when notification request belongs to someone else' do @@ -79,6 +87,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -97,6 +107,8 @@ expect(NotificationPermission.find_by(account: notification_request.account, from_account: notification_request.from_account)).to_not be_nil expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -113,6 +125,8 @@ expect { subject }.to change(NotificationRequest, :count).by(-1) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -128,6 +142,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match({ merged: true }) end end @@ -141,6 +157,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match({ merged: false }) end end diff --git a/spec/requests/api/v1/notifications_spec.rb b/spec/requests/api/v1/notifications_spec.rb index b74adb5dffc5e1..0e8eb6ad3ba2e6 100644 --- a/spec/requests/api/v1/notifications_spec.rb +++ b/spec/requests/api/v1/notifications_spec.rb @@ -31,6 +31,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 5 end end @@ -45,6 +47,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 2 end end @@ -56,6 +60,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 4 end end @@ -67,6 +73,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 2 end end @@ -80,6 +88,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq Api::V1::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT end end @@ -111,6 +121,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 5 expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow') expect(response.parsed_body.any? { |x| x[:filtered] }).to be false @@ -124,6 +136,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 6 expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow') expect(response.parsed_body.any? { |x| x[:filtered] }).to be true @@ -137,6 +151,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_account_ids.uniq).to eq [tom.account.id.to_s] end @@ -152,6 +168,8 @@ def body_json_account_ids subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq 0 end end @@ -163,6 +181,8 @@ def body_json_account_ids subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to_not eq 0 expect(body_json_types.uniq).to_not include 'mention' end @@ -175,6 +195,8 @@ def body_json_account_ids subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_types.uniq).to eq ['mention'] end end @@ -216,6 +238,8 @@ def body_json_types subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when notification belongs to someone else' do @@ -225,6 +249,8 @@ def body_json_types subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -242,6 +268,8 @@ def body_json_types subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) end @@ -252,6 +280,8 @@ def body_json_types subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -272,6 +302,8 @@ def body_json_types expect(user.account.reload.notifications).to be_empty expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/peers/search_spec.rb b/spec/requests/api/v1/peers/search_spec.rb index dc5f550d0e092d..d00a2437f279d6 100644 --- a/spec/requests/api/v1/peers/search_spec.rb +++ b/spec/requests/api/v1/peers/search_spec.rb @@ -23,6 +23,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_blank end @@ -34,6 +36,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_blank end @@ -49,6 +53,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size) .to eq(1) expect(response.parsed_body.first) diff --git a/spec/requests/api/v1/polls/votes_spec.rb b/spec/requests/api/v1/polls/votes_spec.rb index 669f64b6e4577e..d3f7eb431d93b5 100644 --- a/spec/requests/api/v1/polls/votes_spec.rb +++ b/spec/requests/api/v1/polls/votes_spec.rb @@ -18,6 +18,8 @@ it 'creates a vote', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(vote).to_not be_nil expect(vote.choice).to eq 1 @@ -30,6 +32,8 @@ it 'returns http bad request' do expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end diff --git a/spec/requests/api/v1/polls_spec.rb b/spec/requests/api/v1/polls_spec.rb index 138a37a73ce990..fd38297931a155 100644 --- a/spec/requests/api/v1/polls_spec.rb +++ b/spec/requests/api/v1/polls_spec.rb @@ -23,6 +23,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( id: poll.id.to_s, @@ -41,6 +43,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/preferences_spec.rb b/spec/requests/api/v1/preferences_spec.rb index d6991ca90ca71e..e03b9cf1087cd6 100644 --- a/spec/requests/api/v1/preferences_spec.rb +++ b/spec/requests/api/v1/preferences_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -34,6 +36,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_present end diff --git a/spec/requests/api/v1/profiles_spec.rb b/spec/requests/api/v1/profiles_spec.rb index 9616f4155974f3..fd3ab4bf587afd 100644 --- a/spec/requests/api/v1/profiles_spec.rb +++ b/spec/requests/api/v1/profiles_spec.rb @@ -32,6 +32,8 @@ delete '/api/v1/profile/avatar', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') account.reload expect(account.avatar).to_not exist @@ -53,6 +55,8 @@ delete '/api/v1/profile/header', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') account.reload expect(account.avatar).to exist diff --git a/spec/requests/api/v1/push/subscriptions_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb index a9587f8d58343f..8ad672c95ee961 100644 --- a/spec/requests/api/v1/push/subscriptions_spec.rb +++ b/spec/requests/api/v1/push/subscriptions_spec.rb @@ -45,6 +45,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(endpoint_push_subscriptions.count).to eq(0) expect(endpoint_push_subscription).to be_nil end diff --git a/spec/requests/api/v1/reports_spec.rb b/spec/requests/api/v1/reports_spec.rb index a176bd78a6ef32..18b894bf632714 100644 --- a/spec/requests/api/v1/reports_spec.rb +++ b/spec/requests/api/v1/reports_spec.rb @@ -37,6 +37,8 @@ emails = capture_emails { subject } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match( a_hash_including( status_ids: [status.id.to_s], @@ -65,6 +67,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end diff --git a/spec/requests/api/v1/scheduled_status_spec.rb b/spec/requests/api/v1/scheduled_status_spec.rb index eb03827c9ab0d5..3a1b81ce65c1d4 100644 --- a/spec/requests/api/v1/scheduled_status_spec.rb +++ b/spec/requests/api/v1/scheduled_status_spec.rb @@ -14,6 +14,8 @@ expect(response) .to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -33,6 +35,8 @@ expect(response) .to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -45,6 +49,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to_not be_present @@ -59,6 +65,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to be_present diff --git a/spec/requests/api/v1/statuses/bookmarks_spec.rb b/spec/requests/api/v1/statuses/bookmarks_spec.rb index 6401a4370db7c4..583f5b6a0ef641 100644 --- a/spec/requests/api/v1/statuses/bookmarks_spec.rb +++ b/spec/requests/api/v1/statuses/bookmarks_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.bookmarked?(status)).to be true expect(response.parsed_body).to match( @@ -37,6 +39,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -51,6 +55,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.bookmarked?(status)).to be true end end @@ -60,6 +66,8 @@ post '/api/v1/statuses/-1/bookmark', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -70,6 +78,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -93,6 +103,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.bookmarked?(status)).to be false expect(response.parsed_body).to match( @@ -113,6 +125,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.bookmarked?(status)).to be false expect(response.parsed_body).to match( @@ -126,6 +140,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end @@ -137,6 +153,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb b/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb index 24bd03d343b207..6471697154c7df 100644 --- a/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb +++ b/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb @@ -33,6 +33,8 @@ prev: api_v1_status_favourited_by_index_url(limit: 2, since_id: Favourite.last.id), next: api_v1_status_favourited_by_index_url(limit: 2, max_id: Favourite.first.id) ) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size) .to eq(2) @@ -72,6 +74,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -88,6 +92,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/favourites_spec.rb b/spec/requests/api/v1/statuses/favourites_spec.rb index c3acf0413e7f58..3d1021e29d6ef9 100644 --- a/spec/requests/api/v1/statuses/favourites_spec.rb +++ b/spec/requests/api/v1/statuses/favourites_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.favourited?(status)).to be true expect(response.parsed_body).to match( @@ -37,6 +39,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -51,6 +55,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.favourited?(status)).to be true end end @@ -62,6 +68,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -84,6 +92,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.favourited?(status)).to be false @@ -103,6 +113,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.favourited?(status)).to be false @@ -117,6 +129,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -127,6 +141,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/histories_spec.rb b/spec/requests/api/v1/statuses/histories_spec.rb index 4115a52fa8cc0e..9c7f93d3437f86 100644 --- a/spec/requests/api/v1/statuses/histories_spec.rb +++ b/spec/requests/api/v1/statuses/histories_spec.rb @@ -18,6 +18,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to_not be 0 end end diff --git a/spec/requests/api/v1/statuses/mutes_spec.rb b/spec/requests/api/v1/statuses/mutes_spec.rb index 69ae948852888a..55313482d6e8a4 100644 --- a/spec/requests/api/v1/statuses/mutes_spec.rb +++ b/spec/requests/api/v1/statuses/mutes_spec.rb @@ -18,6 +18,8 @@ it 'creates a conversation mute', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(ConversationMute.find_by(account: user.account, conversation_id: status.conversation_id)).to_not be_nil end end @@ -32,6 +34,8 @@ it 'destroys the conversation mute', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(ConversationMute.find_by(account: user.account, conversation_id: status.conversation_id)).to be_nil end end diff --git a/spec/requests/api/v1/statuses/pins_spec.rb b/spec/requests/api/v1/statuses/pins_spec.rb index 409c50e7c211e6..05d8f570cc8455 100644 --- a/spec/requests/api/v1/statuses/pins_spec.rb +++ b/spec/requests/api/v1/statuses/pins_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.pinned?(status)).to be true expect(response.parsed_body).to match( @@ -37,6 +39,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.pinned?(status)).to be true end end @@ -48,6 +52,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -56,6 +62,8 @@ post '/api/v1/statuses/-1/pin', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -66,6 +74,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -86,6 +96,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(user.account.pinned?(status)).to be false expect(response.parsed_body).to match( @@ -99,6 +111,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -107,6 +121,8 @@ post '/api/v1/statuses/-1/unpin', headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -117,6 +133,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb b/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb index bd26c22f08e388..40457f6e894a57 100644 --- a/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb +++ b/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb @@ -32,6 +32,8 @@ prev: api_v1_status_reblogged_by_index_url(limit: 2, since_id: bob.statuses.first.id), next: api_v1_status_reblogged_by_index_url(limit: 2, max_id: alice.statuses.first.id) ) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size) .to eq(2) @@ -71,6 +73,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -87,6 +91,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/reblogs_spec.rb b/spec/requests/api/v1/statuses/reblogs_spec.rb index 8c7894d875b0b4..5e88690074e22d 100644 --- a/spec/requests/api/v1/statuses/reblogs_spec.rb +++ b/spec/requests/api/v1/statuses/reblogs_spec.rb @@ -19,6 +19,8 @@ context 'with public status' do it 'reblogs the status', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(status.reblogs.count).to eq 1 @@ -40,6 +42,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -55,6 +59,8 @@ it 'destroys the reblog', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(status.reblogs.count).to eq 0 @@ -80,6 +86,8 @@ it 'destroys the reblog', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(status.reblogs.count).to eq 0 @@ -103,6 +111,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/sources_spec.rb b/spec/requests/api/v1/statuses/sources_spec.rb index eab19d64daa27b..6b769f35e1ad08 100644 --- a/spec/requests/api/v1/statuses/sources_spec.rb +++ b/spec/requests/api/v1/statuses/sources_spec.rb @@ -22,6 +22,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match({ id: status.id.to_s, text: status.text, @@ -37,6 +39,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -51,6 +55,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match({ id: status.id.to_s, text: status.text, @@ -66,6 +72,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses/translations_spec.rb b/spec/requests/api/v1/statuses/translations_spec.rb index 047b2f0485548e..e316bd451b0b16 100644 --- a/spec/requests/api/v1/statuses/translations_spec.rb +++ b/spec/requests/api/v1/statuses/translations_spec.rb @@ -20,6 +20,8 @@ it 'returns http unprocessable entity' do expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -38,6 +40,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index 057800a266cae9..ddf5945d2562cd 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -18,6 +18,8 @@ get '/api/v1/statuses', headers: headers, params: { id: [status.id, other_status.id, 123_123] } expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to contain_exactly( hash_including(id: status.id.to_s), hash_including(id: other_status.id.to_s) @@ -39,6 +41,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when post includes filtered terms' do @@ -52,6 +56,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -75,6 +81,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -97,6 +105,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:reblog][:filtered][0]).to include({ filter: a_hash_including({ id: user.account.custom_filters.first.id.to_s, @@ -121,6 +131,8 @@ get "/api/v1/statuses/#{status.id}/context", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -139,6 +151,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s expect(response.headers['X-RateLimit-Remaining']).to eq (RateLimiter::FAMILIES[:statuses][:limit] - 1).to_s end @@ -154,6 +168,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:unexpected_accounts].map { |a| a.slice(:id, :acct) }).to match [{ id: bob.id.to_s, acct: bob.acct }] end end @@ -165,6 +181,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s end end @@ -179,6 +197,8 @@ subject expect(response).to have_http_status(429) + expect(response.content_type) + .to start_with('application/json') expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s expect(response.headers['X-RateLimit-Remaining']).to eq '0' end @@ -191,6 +211,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -202,6 +224,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end it 'creates a scheduled status' do @@ -215,6 +239,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') expect(account.scheduled_statuses).to be_empty end end @@ -235,6 +261,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(Status.find_by(id: status.id)).to be_nil end end @@ -253,6 +281,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(status.reload.text).to eq 'I am updated' end end @@ -267,6 +297,8 @@ get "/api/v1/statuses/#{status.id}" expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -279,6 +311,8 @@ get "/api/v1/statuses/#{status.id}/context" expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -291,6 +325,8 @@ get "/api/v1/statuses/#{status.id}" expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -303,6 +339,8 @@ get "/api/v1/statuses/#{status.id}/context" expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/streaming_spec.rb b/spec/requests/api/v1/streaming_spec.rb index a1f64846cf7d6a..62b43d657a5f25 100644 --- a/spec/requests/api/v1/streaming_spec.rb +++ b/spec/requests/api/v1/streaming_spec.rb @@ -17,6 +17,8 @@ get '/api/v1/streaming' expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/suggestions_spec.rb b/spec/requests/api/v1/suggestions_spec.rb index b971f8812961f4..0a32d8899bce43 100644 --- a/spec/requests/api/v1/suggestions_spec.rb +++ b/spec/requests/api/v1/suggestions_spec.rb @@ -27,6 +27,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to contain_exactly(include(id: bob.id.to_s), include(id: jeff.id.to_s)) end @@ -48,6 +50,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -71,6 +75,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(FollowRecommendationMute.exists?(account: user.account, target_account: jeff)).to be true end diff --git a/spec/requests/api/v1/tags_spec.rb b/spec/requests/api/v1/tags_spec.rb index 9637823d457a1c..f6ff7c614fe328 100644 --- a/spec/requests/api/v1/tags_spec.rb +++ b/spec/requests/api/v1/tags_spec.rb @@ -21,6 +21,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:name]).to eq(name) end end @@ -32,6 +34,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -42,6 +46,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -61,6 +67,8 @@ subject expect(response).to have_http_status(:success) + expect(response.content_type) + .to start_with('application/json') expect(TagFollow.where(tag: tag, account: user.account)).to exist end end @@ -72,6 +80,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(Tag.where(name: name)).to exist expect(TagFollow.where(tag: Tag.find_by(name: name), account: user.account)).to exist end @@ -84,6 +94,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -95,6 +107,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end @@ -117,6 +131,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(TagFollow.where(tag: tag, account: user.account)).to_not exist end @@ -127,6 +143,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -138,6 +156,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/timelines/home_spec.rb b/spec/requests/api/v1/timelines/home_spec.rb index 19a6f3adbc1521..2023b189ecb8a0 100644 --- a/spec/requests/api/v1/timelines/home_spec.rb +++ b/spec/requests/api/v1/timelines/home_spec.rb @@ -35,6 +35,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)).to match_array(home_statuses.map { |status| status.id.to_s }) end @@ -52,6 +54,8 @@ prev: api_v1_timelines_home_url(limit: params[:limit], min_id: ana.statuses.first.id), next: api_v1_timelines_home_url(limit: params[:limit], max_id: ana.statuses.first.id) ) + expect(response.content_type) + .to start_with('application/json') end end end @@ -67,6 +71,8 @@ subject expect(response).to have_http_status(206) + expect(response.content_type) + .to start_with('application/json') end end @@ -77,6 +83,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -89,6 +97,8 @@ expect(response) .to have_http_status(422) .and not_have_http_link_header + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/timelines/link_spec.rb b/spec/requests/api/v1/timelines/link_spec.rb index e1d421fb7af04b..37a3b36872f076 100644 --- a/spec/requests/api/v1/timelines/link_spec.rb +++ b/spec/requests/api/v1/timelines/link_spec.rb @@ -13,6 +13,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)).to match_array(expected_statuses.map { |status| status.id.to_s }) end end @@ -50,6 +52,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -62,6 +66,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -74,6 +80,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -91,6 +99,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -101,6 +111,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -127,6 +139,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(params[:limit]) expect(response) diff --git a/spec/requests/api/v1/timelines/list_spec.rb b/spec/requests/api/v1/timelines/list_spec.rb index eb4395d1f97b54..1be754f264d750 100644 --- a/spec/requests/api/v1/timelines/list_spec.rb +++ b/spec/requests/api/v1/timelines/list_spec.rb @@ -23,6 +23,8 @@ get "/api/v1/timelines/list/#{list.id}", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end @@ -36,6 +38,8 @@ get "/api/v1/timelines/list/#{list.id}", headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v1/timelines/public_spec.rb b/spec/requests/api/v1/timelines/public_spec.rb index 759e236d05b1e4..1e459bf3ec1b44 100644 --- a/spec/requests/api/v1/timelines/public_spec.rb +++ b/spec/requests/api/v1/timelines/public_spec.rb @@ -13,6 +13,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)).to match_array(expected_statuses.map { |status| status.id.to_s }) end end @@ -77,15 +79,13 @@ context 'with limit param' do let(:params) { { limit: 1 } } - it 'returns only the requested number of statuses', :aggregate_failures do + it 'returns only the requested number of statuses and sets pagination headers', :aggregate_failures do subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to eq(params[:limit]) - end - - it 'sets the correct pagination headers', :aggregate_failures do - subject expect(response) .to include_pagination_headers( @@ -110,6 +110,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -120,6 +122,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end diff --git a/spec/requests/api/v1/timelines/tag_spec.rb b/spec/requests/api/v1/timelines/tag_spec.rb index 03d34e59f104ec..75348fe1b4efb6 100644 --- a/spec/requests/api/v1/timelines/tag_spec.rb +++ b/spec/requests/api/v1/timelines/tag_spec.rb @@ -19,6 +19,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)) .to match_array(expected_statuses.map { |status| status.id.to_s }) .and not_include(private_status.id) @@ -81,6 +83,8 @@ prev: api_v1_timelines_tag_url(limit: params[:limit], min_id: love_status.id), next: api_v1_timelines_tag_url(limit: params[:limit], max_id: love_status.id) ) + expect(response.content_type) + .to start_with('application/json') end end @@ -107,6 +111,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end diff --git a/spec/requests/api/v1/trends/links_spec.rb b/spec/requests/api/v1/trends/links_spec.rb index 04d36da0a26789..b1b77e7fd8c7ce 100644 --- a/spec/requests/api/v1/trends/links_spec.rb +++ b/spec/requests/api/v1/trends/links_spec.rb @@ -13,6 +13,8 @@ expect(response) .to have_http_status(200) .and not_have_http_link_header + expect(response.content_type) + .to start_with('application/json') end end @@ -27,6 +29,8 @@ expect(response) .to have_http_status(200) .and have_http_link_header(api_v1_trends_links_url(offset: 2)).for(rel: 'next') + expect(response.content_type) + .to start_with('application/json') end def prepare_trends diff --git a/spec/requests/api/v1/trends/statuses_spec.rb b/spec/requests/api/v1/trends/statuses_spec.rb index f04addfe0ac988..fe00c9c6458564 100644 --- a/spec/requests/api/v1/trends/statuses_spec.rb +++ b/spec/requests/api/v1/trends/statuses_spec.rb @@ -13,6 +13,8 @@ expect(response) .to have_http_status(200) .and not_have_http_link_header + expect(response.content_type) + .to start_with('application/json') end end @@ -27,6 +29,8 @@ expect(response) .to have_http_status(200) .and have_http_link_header(api_v1_trends_statuses_url(offset: 2)).for(rel: 'next') + expect(response.content_type) + .to start_with('application/json') end def prepare_trends diff --git a/spec/requests/api/v1/trends/tags_spec.rb b/spec/requests/api/v1/trends/tags_spec.rb index 2ff51eed6327a6..14ab73fc96c30e 100644 --- a/spec/requests/api/v1/trends/tags_spec.rb +++ b/spec/requests/api/v1/trends/tags_spec.rb @@ -13,6 +13,8 @@ expect(response) .to have_http_status(200) .and not_have_http_link_header + expect(response.content_type) + .to start_with('application/json') end end @@ -27,6 +29,8 @@ expect(response) .to have_http_status(200) .and have_http_link_header(api_v1_trends_tags_url(offset: 2)).for(rel: 'next') + expect(response.content_type) + .to start_with('application/json') end def prepare_trends diff --git a/spec/requests/api/web/settings_spec.rb b/spec/requests/api/web/settings_spec.rb index 81b8b449535a18..3873bc179b62d1 100644 --- a/spec/requests/api/web/settings_spec.rb +++ b/spec/requests/api/web/settings_spec.rb @@ -17,6 +17,8 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -29,6 +31,8 @@ expect(response) .to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end From 171394e914b4f3cc15b6659a45ecc210e42ee004 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 09:13:47 -0400 Subject: [PATCH 071/467] Add coverage for CSV responses for severed relationships (#31962) --- spec/requests/severed_relationships_spec.rb | 43 +++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 spec/requests/severed_relationships_spec.rb diff --git a/spec/requests/severed_relationships_spec.rb b/spec/requests/severed_relationships_spec.rb new file mode 100644 index 00000000000000..ac98ab8f94fdbe --- /dev/null +++ b/spec/requests/severed_relationships_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Severed Relationships' do + let(:account_rs_event) { Fabricate :account_relationship_severance_event } + + before { sign_in Fabricate(:user) } + + describe 'GET /severed_relationships/:id/following' do + it 'returns a CSV file with correct data' do + get following_severed_relationship_path(account_rs_event, format: :csv) + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('text/csv') + expect(response.headers['Content-Disposition']) + .to match(<<~FILENAME.squish) + attachment; filename="following-example.com-#{Date.current}.csv" + FILENAME + expect(response.body) + .to include('Account address') + end + end + + describe 'GET /severed_relationships/:id/followers' do + it 'returns a CSV file with correct data' do + get followers_severed_relationship_path(account_rs_event, format: :csv) + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('text/csv') + expect(response.headers['Content-Disposition']) + .to match(<<~FILENAME.squish) + attachment; filename="followers-example.com-#{Date.current}.csv" + FILENAME + expect(response.body) + .to include('Account address') + end + end +end From d55f4fbda1967ab0889e6553dfad9f91bb2805f0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 20 Sep 2024 09:19:53 -0400 Subject: [PATCH 072/467] Add content type checks to api/v2 request specs (#31983) --- spec/requests/api/v2/admin/accounts_spec.rb | 12 ++++++ spec/requests/api/v2/filters/keywords_spec.rb | 20 ++++++++++ spec/requests/api/v2/filters/statuses_spec.rb | 14 +++++++ spec/requests/api/v2/filters_spec.rb | 28 ++++++++++++++ spec/requests/api/v2/instance_spec.rb | 6 +++ spec/requests/api/v2/media_spec.rb | 12 ++++++ .../api/v2/notifications/accounts_spec.rb | 4 ++ .../api/v2/notifications/policies_spec.rb | 4 ++ spec/requests/api/v2/notifications_spec.rb | 38 +++++++++++++++++++ spec/requests/api/v2/search_spec.rb | 24 ++++++++++++ spec/requests/api/v2/suggestions_spec.rb | 2 + spec/requests/api/web/embeds_spec.rb | 24 ++++++++++++ 12 files changed, 188 insertions(+) diff --git a/spec/requests/api/v2/admin/accounts_spec.rb b/spec/requests/api/v2/admin/accounts_spec.rb index 17c38e2e557b85..bc3db4f8860fcf 100644 --- a/spec/requests/api/v2/admin/accounts_spec.rb +++ b/spec/requests/api/v2/admin/accounts_spec.rb @@ -34,6 +34,8 @@ it 'returns the correct accounts' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_ids).to eq([admin_account.id]) end end @@ -43,6 +45,8 @@ it 'returns the correct accounts' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_ids).to include(remote_account.id) expect(body_json_ids).to_not include(other_remote_account.id) end @@ -53,6 +57,8 @@ it 'returns the correct accounts' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_ids).to include(suspended_remote.id, suspended_account.id) end end @@ -62,6 +68,8 @@ it 'returns the correct accounts' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_ids).to include(disabled_account.id) end end @@ -71,6 +79,8 @@ it 'returns the correct accounts' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_ids).to include(pending_account.id) end end @@ -85,6 +95,8 @@ def body_json_ids it 'sets the correct pagination headers' do expect(response) .to include_pagination_headers(next: api_v2_admin_accounts_url(limit: 1, max_id: admin_account.id)) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v2/filters/keywords_spec.rb b/spec/requests/api/v2/filters/keywords_spec.rb index a31accaa5cd72d..f0d62e9ecc6ae3 100644 --- a/spec/requests/api/v2/filters/keywords_spec.rb +++ b/spec/requests/api/v2/filters/keywords_spec.rb @@ -17,6 +17,8 @@ it 'returns http success' do get "/api/v2/filters/#{filter.id}/keywords", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to contain_exactly( include(id: keyword.id.to_s) @@ -27,6 +29,8 @@ it 'returns http not found' do get "/api/v2/filters/#{other_filter.id}/keywords", headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -41,6 +45,8 @@ it 'creates a filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -58,6 +64,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -72,6 +80,8 @@ it 'responds with the keyword', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -85,6 +95,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -99,6 +111,8 @@ it 'updates the keyword', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(keyword.reload.keyword).to eq 'updated' end @@ -108,6 +122,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -122,6 +138,8 @@ it 'destroys the keyword', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { keyword.reload }.to raise_error ActiveRecord::RecordNotFound end @@ -131,6 +149,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v2/filters/statuses_spec.rb b/spec/requests/api/v2/filters/statuses_spec.rb index aed8934a5e3838..f20a6ae5e6d245 100644 --- a/spec/requests/api/v2/filters/statuses_spec.rb +++ b/spec/requests/api/v2/filters/statuses_spec.rb @@ -17,6 +17,8 @@ it 'returns http success' do get "/api/v2/filters/#{filter.id}/statuses", headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to contain_exactly( include(id: status_filter.id.to_s) @@ -27,6 +29,8 @@ it 'returns http not found' do get "/api/v2/filters/#{other_filter.id}/statuses", headers: headers expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -42,6 +46,8 @@ it 'creates a filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -58,6 +64,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -72,6 +80,8 @@ it 'responds with the filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -98,6 +108,8 @@ it 'destroys the filter', :aggregate_failures do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { status_filter.reload }.to raise_error ActiveRecord::RecordNotFound end @@ -107,6 +119,8 @@ it 'returns http not found' do expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v2/filters_spec.rb b/spec/requests/api/v2/filters_spec.rb index ad8b55973e2bc2..3b5c44cefa3e15 100644 --- a/spec/requests/api/v2/filters_spec.rb +++ b/spec/requests/api/v2/filters_spec.rb @@ -15,6 +15,8 @@ subject expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') end end @@ -32,6 +34,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.pluck(:id)).to match_array(filters.map { |filter| filter.id.to_s }) end end @@ -53,6 +57,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( @@ -81,6 +87,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -91,6 +99,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -101,6 +111,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -119,6 +131,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body) .to include( id: filter.id.to_s @@ -132,6 +146,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -158,6 +174,8 @@ filter.reload expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(filter.title).to eq 'updated' expect(filter.reload.context).to eq %w(home public) end @@ -170,6 +188,8 @@ subject expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end end @@ -185,6 +205,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(keyword.reload.keyword).to eq 'updated' @@ -199,6 +221,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -217,6 +241,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { filter.reload }.to raise_error ActiveRecord::RecordNotFound end @@ -228,6 +254,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v2/instance_spec.rb b/spec/requests/api/v2/instance_spec.rb index d484dc7c463ef0..fae92b739108c4 100644 --- a/spec/requests/api/v2/instance_spec.rb +++ b/spec/requests/api/v2/instance_spec.rb @@ -15,6 +15,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_present .and include(title: 'Mastodon') @@ -30,6 +33,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_present .and include(title: 'Mastodon') diff --git a/spec/requests/api/v2/media_spec.rb b/spec/requests/api/v2/media_spec.rb index 06ce0053e87689..70e0679f57442c 100644 --- a/spec/requests/api/v2/media_spec.rb +++ b/spec/requests/api/v2/media_spec.rb @@ -21,6 +21,9 @@ expect(response) .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_a(Hash) end @@ -38,6 +41,9 @@ expect(response) .to have_http_status(202) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_a(Hash) end @@ -63,6 +69,9 @@ expect(response) .to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_a(Hash) .and include(error: /File type/) @@ -80,6 +89,9 @@ expect(response) .to have_http_status(500) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) .to be_a(Hash) .and include(error: /processing/) diff --git a/spec/requests/api/v2/notifications/accounts_spec.rb b/spec/requests/api/v2/notifications/accounts_spec.rb index 102b009c0b9f4a..29880a4c0a6c6a 100644 --- a/spec/requests/api/v2/notifications/accounts_spec.rb +++ b/spec/requests/api/v2/notifications/accounts_spec.rb @@ -30,6 +30,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') # The group we are interested in is only favorites notifications = user.account.notifications.where(type: 'favourite').reorder(id: :desc) @@ -55,6 +57,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') # The group we are interested in is only favorites notifications = user.account.notifications.where(type: 'favourite').reorder(id: :desc) diff --git a/spec/requests/api/v2/notifications/policies_spec.rb b/spec/requests/api/v2/notifications/policies_spec.rb index dc205b6ebb6d25..f080bc730fdcd1 100644 --- a/spec/requests/api/v2/notifications/policies_spec.rb +++ b/spec/requests/api/v2/notifications/policies_spec.rb @@ -26,6 +26,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include( for_not_following: 'accept', for_not_followers: 'accept', @@ -56,6 +58,8 @@ .and change { NotificationPolicy.find_or_initialize_by(account: user.account).for_limited_accounts.to_sym }.from(:filter).to(:drop) expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to include( for_not_following: 'filter', for_not_followers: 'accept', diff --git a/spec/requests/api/v2/notifications_spec.rb b/spec/requests/api/v2/notifications_spec.rb index 9522a39e0f55a4..ffa0a71c779e1b 100644 --- a/spec/requests/api/v2/notifications_spec.rb +++ b/spec/requests/api/v2/notifications_spec.rb @@ -31,6 +31,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 4 end end @@ -42,6 +44,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 5 end end @@ -56,6 +60,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 2 end end @@ -67,6 +73,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 3 end end @@ -78,6 +86,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq 2 end end @@ -91,6 +101,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:count]).to eq Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT end end @@ -125,6 +137,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:notification_groups]).to eq [] end end @@ -134,6 +148,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow') end end @@ -145,6 +161,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:notification_groups]).to contain_exactly( a_hash_including( type: 'reblog', @@ -177,6 +195,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body.size).to_not eq 0 expect(body_json_types.uniq).to_not include 'mention' end @@ -189,6 +209,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(body_json_types.uniq).to eq ['mention'] expect(response.parsed_body.dig(:notification_groups, 0, :page_min_id)).to_not be_nil end @@ -211,6 +233,8 @@ # not the last that has been skipped, so pagination is very likely to give overlap next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[3].id) ) + expect(response.content_type) + .to start_with('application/json') end end @@ -224,6 +248,8 @@ expect(response.parsed_body[:notification_groups].size) .to eq(2) + expect(response.content_type) + .to start_with('application/json') expect(response) .to include_pagination_headers( prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), @@ -247,6 +273,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:partial_accounts].size).to be > 0 expect(response.parsed_body[:partial_accounts][0].keys.map(&:to_sym)).to contain_exactly(:acct, :avatar, :avatar_static, :bot, :id, :locked, :url) expect(response.parsed_body[:partial_accounts].pluck(:id)).to_not include(recent_account.id.to_s) @@ -261,6 +289,8 @@ subject expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -282,6 +312,8 @@ def body_json_types subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when notification belongs to someone else' do @@ -291,6 +323,8 @@ def body_json_types subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -308,6 +342,8 @@ def body_json_types subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) end @@ -341,6 +377,8 @@ def body_json_types expect(user.account.reload.notifications).to be_empty expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end end diff --git a/spec/requests/api/v2/search_spec.rb b/spec/requests/api/v2/search_spec.rb index a59ec7ca6b1807..5a2346dc39eda0 100644 --- a/spec/requests/api/v2/search_spec.rb +++ b/spec/requests/api/v2/search_spec.rb @@ -19,6 +19,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'when searching accounts' do @@ -37,6 +39,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -47,6 +51,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -57,6 +63,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -67,6 +75,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -92,6 +102,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') end end @@ -102,6 +114,8 @@ get '/api/v2/search', headers: headers, params: params expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -118,6 +132,8 @@ context 'without a `q` param' do it 'returns http bad_request' do expect(response).to have_http_status(400) + expect(response.content_type) + .to start_with('application/json') end end @@ -126,6 +142,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end end @@ -134,6 +152,8 @@ it 'returns http success' do expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') end context 'with truthy `resolve`' do @@ -141,6 +161,8 @@ it 'returns http unauthorized' do expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') expect(response.body).to match('resolve remote resources') end end @@ -150,6 +172,8 @@ it 'returns http unauthorized' do expect(response).to have_http_status(401) + expect(response.content_type) + .to start_with('application/json') expect(response.body).to match('pagination is not supported') end end diff --git a/spec/requests/api/v2/suggestions_spec.rb b/spec/requests/api/v2/suggestions_spec.rb index e92507ed661fe8..099d9bc3b22735 100644 --- a/spec/requests/api/v2/suggestions_spec.rb +++ b/spec/requests/api/v2/suggestions_spec.rb @@ -21,6 +21,8 @@ get '/api/v2/suggestions', headers: headers expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to match_array( [bob, jeff].map do |account| diff --git a/spec/requests/api/web/embeds_spec.rb b/spec/requests/api/web/embeds_spec.rb index 2b28502835843c..3cc2f977f87fb5 100644 --- a/spec/requests/api/web/embeds_spec.rb +++ b/spec/requests/api/web/embeds_spec.rb @@ -18,6 +18,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:html]).to be_present end end @@ -29,6 +31,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -42,6 +46,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -52,6 +58,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -71,6 +79,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:html]).to be_present end @@ -83,6 +93,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -98,6 +110,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -123,6 +137,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -133,6 +149,8 @@ subject expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body[:html]).to be_present end end @@ -146,6 +164,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end @@ -156,6 +176,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end @@ -167,6 +189,8 @@ subject expect(response).to have_http_status(404) + expect(response.content_type) + .to start_with('application/json') end end end From ed8b0e4b1ea9df593aff6d831bfb9ad8fe0ed32d Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 20 Sep 2024 15:33:26 +0200 Subject: [PATCH 073/467] Fix links for reblogs in moderation interface (#31979) --- app/views/admin/reports/_status.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/reports/_status.html.haml b/app/views/admin/reports/_status.html.haml index e0870503d6c70c..f4630ed25ae978 100644 --- a/app/views/admin/reports/_status.html.haml +++ b/app/views/admin/reports/_status.html.haml @@ -18,7 +18,7 @@ - if status.application = status.application.name · - = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do + = link_to ActivityPub::TagManager.instance.url_for(status.proper), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - if status.edited? · From 7ed9c590b98610f8d68deab9ef8df260eec6d8f0 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 20 Sep 2024 16:58:06 +0200 Subject: [PATCH 074/467] Fix issue when encountering reblog of deleted post in feed rebuild (#32001) --- app/lib/feed_manager.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 1fb224a1337c50..97cb25d58f5112 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -558,7 +558,7 @@ def build_crutches(receiver_id, statuses) arr = crutches[:active_mentions][s.id] || [] arr.push(s.account_id) - if s.reblog? + if s.reblog? && s.reblog.present? arr.push(s.reblog.account_id) arr.concat(crutches[:active_mentions][s.reblog_of_id] || []) end From efc0d4d526e3f05b089b7eb1685dbe415f12bb03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:11 +0200 Subject: [PATCH 075/467] Update dependency react-intl to v6.7.0 (#32028) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index c90ada78f5baf4..c17ccb39888c9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2330,9 +2330,9 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.10.4": - version: 2.10.4 - resolution: "@formatjs/intl@npm:2.10.4" +"@formatjs/intl@npm:2.10.5": + version: 2.10.5 + resolution: "@formatjs/intl@npm:2.10.5" dependencies: "@formatjs/ecma402-abstract": "npm:2.0.0" "@formatjs/fast-memoize": "npm:2.2.0" @@ -2346,7 +2346,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/ca7877e962f73f1fe0e358f12d73bdc3ec4006c14ee801e06d9f7aef06bcdcc12355a8f53f32b0e890f829949ded35e825c914ca5f4709eb1e08c2a18c1368c2 + checksum: 10c0/d00ef00e41200947ed22895b73a0863283de4762ec238b4a81e2252e642e30a309cd9c73174e4917b6c675ab6f148eda5a4e3345c3caeef64e090fc8374d27c4 languageName: node linkType: hard @@ -14509,12 +14509,12 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.6.8 - resolution: "react-intl@npm:6.6.8" + version: 6.7.0 + resolution: "react-intl@npm:6.7.0" dependencies: "@formatjs/ecma402-abstract": "npm:2.0.0" "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.4" + "@formatjs/intl": "npm:2.10.5" "@formatjs/intl-displaynames": "npm:6.6.8" "@formatjs/intl-listformat": "npm:7.5.7" "@types/hoist-non-react-statics": "npm:^3.3.1" @@ -14528,7 +14528,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/7673507eb73ad4edd1593da7173cec68f316cf77037e0959900babd32d5984a39ba7fa10aaa0a23bcddb7b98daf7dd007cb73ddfc39127ede87c18ec780a519c + checksum: 10c0/210088bf0e934ad5f09d8e7c6d7d72682bb806583645fb333d4efd8ae55585b675ea8e47bb240140d5143ca15ecc0457c3ddc3e8ca45e9b576bce1fa2f9886b3 languageName: node linkType: hard From f294c4a594ebf6da8ea5a18bdfd62b754941575e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:23 +0200 Subject: [PATCH 076/467] Update libretranslate/libretranslate Docker tag to v1.6.1 (#32027) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml index f87082013c6572..5c7263c87467d9 100644 --- a/.devcontainer/compose.yaml +++ b/.devcontainer/compose.yaml @@ -69,7 +69,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.6.0 + image: libretranslate/libretranslate:v1.6.1 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local From 84d04386dd2b16e86c520349efd898c3d4bf8b44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:37 +0200 Subject: [PATCH 077/467] Update DefinitelyTyped types (non-major) (#32026) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c17ccb39888c9f..944262bb4f465d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3786,9 +3786,9 @@ __metadata: linkType: hard "@types/prop-types@npm:*, @types/prop-types@npm:^15.7.5": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8 + version: 15.7.13 + resolution: "@types/prop-types@npm:15.7.13" + checksum: 10c0/1b20fc67281902c6743379960247bc161f3f0406ffc0df8e7058745a85ea1538612109db0406290512947f9632fe9e10e7337bf0ce6338a91d6c948df16a7c61 languageName: node linkType: hard @@ -3931,12 +3931,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.5 - resolution: "@types/react@npm:18.3.5" + version: 18.3.8 + resolution: "@types/react@npm:18.3.8" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/548b1d3d7c2f0242fbfdbbd658731b4ce69a134be072fa83e6ab516f2840402a3f20e3e7f72e95133b23d4880ef24a6d864050dc8e1f7c68f39fa87ca8445917 + checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 languageName: node linkType: hard From c37f9c0d44fb78e5023942ce9948168b5e637b74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:36:57 +0200 Subject: [PATCH 078/467] Update dependency jsdom to v25.0.1 (#32017) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 56 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/yarn.lock b/yarn.lock index 944262bb4f465d..4aa0d4b62ff4f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6826,12 +6826,12 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^4.0.1": - version: 4.0.1 - resolution: "cssstyle@npm:4.0.1" +"cssstyle@npm:^4.1.0": + version: 4.1.0 + resolution: "cssstyle@npm:4.1.0" dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10c0/cadf9a8b23e11f4c6d63f21291096a0b0be868bd4ab9c799daa2c5b18330e39e5281605f01da906e901b42f742df0f3b3645af6465e83377ff7d15a88ee432a0 + rrweb-cssom: "npm:^0.7.1" + checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa languageName: node linkType: hard @@ -11105,10 +11105,10 @@ __metadata: linkType: hard "jsdom@npm:^25.0.0": - version: 25.0.0 - resolution: "jsdom@npm:25.0.0" + version: 25.0.1 + resolution: "jsdom@npm:25.0.1" dependencies: - cssstyle: "npm:^4.0.1" + cssstyle: "npm:^4.1.0" data-urls: "npm:^5.0.0" decimal.js: "npm:^10.4.3" form-data: "npm:^4.0.0" @@ -11121,7 +11121,7 @@ __metadata: rrweb-cssom: "npm:^0.7.1" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.4" + tough-cookie: "npm:^5.0.0" w3c-xmlserializer: "npm:^5.0.0" webidl-conversions: "npm:^7.0.0" whatwg-encoding: "npm:^3.1.1" @@ -11134,7 +11134,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: 10c0/1552bcfb816b2c69ae159ba0cd79e8964030c106cc0cb2deb20a64c1ca54e1ea41352b9802d89b7cf823e43e6d74ed7289abff4aacc95b1b2bc936570aab3594 + checksum: 10c0/6bda32a6dfe4e37a30568bf51136bdb3ba9c0b72aadd6356280404275a34c9e097c8c25b5eb3c742e602623741e172da977ff456684befd77c9042ed9bf8c2b4 languageName: node linkType: hard @@ -15366,13 +15366,6 @@ __metadata: languageName: node linkType: hard -"rrweb-cssom@npm:^0.6.0": - version: 0.6.0 - resolution: "rrweb-cssom@npm:0.6.0" - checksum: 10c0/3d9d90d53c2349ea9c8509c2690df5a4ef930c9cf8242aeb9425d4046f09d712bb01047e00da0e1c1dab5db35740b3d78fd45c3e7272f75d3724a563f27c30a3 - languageName: node - linkType: hard - "rrweb-cssom@npm:^0.7.1": version: 0.7.1 resolution: "rrweb-cssom@npm:0.7.1" @@ -17036,6 +17029,24 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.47": + version: 6.1.47 + resolution: "tldts-core@npm:6.1.47" + checksum: 10c0/538372072aea7153e842646a9e22d0d9335acf7fd877d10ee374cf78dceff79a2ccebadf7d25e0dbddd7b7b60bafe1c885aac3e3b1d5bec7806963c89b163ee7 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.47 + resolution: "tldts@npm:6.1.47" + dependencies: + tldts-core: "npm:^6.1.47" + bin: + tldts: bin/cli.js + checksum: 10c0/42c999ab24ce3ab221cfefe77488d145d16d9523524913badaa4af4f1f0d65e0a92a678659b22b7d26d1c62796540c95158049220c9ff243090b93470f236302 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -17111,7 +17122,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2, tough-cookie@npm:^4.1.4": +"tough-cookie@npm:^4.1.2": version: 4.1.4 resolution: "tough-cookie@npm:4.1.4" dependencies: @@ -17123,6 +17134,15 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.0.0": + version: 5.0.0 + resolution: "tough-cookie@npm:5.0.0" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + languageName: node + linkType: hard + "tr46@npm:^1.0.1": version: 1.0.1 resolution: "tr46@npm:1.0.1" From f4632d941ad1f89a52a2cd1dfd09b54797e935d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:40:46 +0200 Subject: [PATCH 079/467] Update dependency aws-sdk-s3 to v1.164.0 (#32010) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79e542014c1ef2..85c3b4abd47802 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,16 +101,16 @@ GEM awrence (1.2.1) aws-eventstream (1.3.0) aws-partitions (1.977.0) - aws-sdk-core (3.206.0) + aws-sdk-core (3.207.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.91.0) - aws-sdk-core (~> 3, >= 3.205.0) + aws-sdk-kms (1.92.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.163.0) - aws-sdk-core (~> 3, >= 3.205.0) + aws-sdk-s3 (1.164.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.10.0) From 958f01e7225daf371307848d6fe2729a2580e0a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:41:05 +0000 Subject: [PATCH 080/467] Update dependency sass to v1.79.3 (#32009) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4aa0d4b62ff4f5..eff88f772ec3cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15468,15 +15468,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.79.2 - resolution: "sass@npm:1.79.2" + version: 1.79.3 + resolution: "sass@npm:1.79.3" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/b637daf133da4fbafbb7e6ae07b01ff7c73e406f3134e66749bf6f712dcc0056c6971d8629d8cc2b186df5ffb2282baa8f1818f35e326b3558ab284e31fdd87d + checksum: 10c0/ad171bbbb2d7a789cc47803a59dcf2d0ac92ede34b538bb3fd683b6391a9ac3dc3eabaac264fc9582c770c4e435b85840e011785b7adfc0ac002b51ba91179c9 languageName: node linkType: hard From 10d2f83025b3161fb2a149b997d06cbb5f1b8e48 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:41:26 +0000 Subject: [PATCH 081/467] Update dependency selenium-webdriver to v4.25.0 (#32008) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 85c3b4abd47802..8fece04a6dbf79 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -406,7 +406,7 @@ GEM llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - logger (1.6.0) + logger (1.6.1) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -781,7 +781,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - selenium-webdriver (4.24.0) + selenium-webdriver (4.25.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) From 5fae1d55e5e15bb3e44cae2677b0904799e4ef62 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 23 Sep 2024 10:42:03 +0200 Subject: [PATCH 082/467] Fix OAuth authorization prompt referring to third-party apps (#32005) --- config/locales/doorkeeper.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml index e28f6a79664be1..3b3b141afa7889 100644 --- a/config/locales/doorkeeper.en.yml +++ b/config/locales/doorkeeper.en.yml @@ -60,7 +60,7 @@ en: error: title: An error has occurred new: - prompt_html: "%{client_name} would like permission to access your account. It is a third-party application. If you do not trust it, then you should not authorize it." + prompt_html: "%{client_name} would like permission to access your account. Only approve this request if you recognize and trust this source." review_permissions: Review permissions title: Authorization required show: From e0b45b35c9415c912f92803ab7c797b1ae516a7e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 04:42:52 -0400 Subject: [PATCH 083/467] Combine repeated parsed_body assertions into single (#32002) --- .../activitypub/outboxes_controller_spec.rb | 15 +++++++++------ spec/requests/api/v1/admin/tags_spec.rb | 14 ++++++++++---- spec/requests/api/v1/apps/credentials_spec.rb | 5 +++-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/spec/controllers/activitypub/outboxes_controller_spec.rb b/spec/controllers/activitypub/outboxes_controller_spec.rb index 7ae28e8e09bf00..ca986dcabbee40 100644 --- a/spec/controllers/activitypub/outboxes_controller_spec.rb +++ b/spec/controllers/activitypub/outboxes_controller_spec.rb @@ -69,9 +69,10 @@ expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 2)) + orderedItems: be_an(Array) + .and(have_attributes(size: 2)) + .and(all(satisfy { |item| targets_public_collection?(item) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) }).to be true end context 'when account is permanently suspended' do @@ -113,9 +114,10 @@ expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 2)) + orderedItems: be_an(Array) + .and(have_attributes(size: 2)) + .and(all(satisfy { |item| targets_public_collection?(item) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) }).to be true end end @@ -132,9 +134,10 @@ expect(response.parsed_body) .to include( - orderedItems: be_an(Array).and(have_attributes(size: 3)) + orderedItems: be_an(Array) + .and(have_attributes(size: 3)) + .and(all(satisfy { |item| targets_public_collection?(item) || targets_followers_collection?(item, account) })) ) - expect(response.parsed_body[:orderedItems].all? { |item| targets_public_collection?(item) || targets_followers_collection?(item, account) }).to be true end end diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index 3623c09ac7ad58..696a11da6736bc 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -82,8 +82,11 @@ expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:id].to_i).to eq(tag.id) - expect(response.parsed_body[:name]).to eq(tag.name) + expect(response.parsed_body) + .to include( + id: tag.id.to_s, + name: tag.name + ) end context 'when the requested tag does not exist' do @@ -116,8 +119,11 @@ expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:id].to_i).to eq(tag.id) - expect(response.parsed_body[:name]).to eq(tag.name.upcase) + expect(response.parsed_body) + .to include( + id: tag.id.to_s, + name: tag.name.upcase + ) end context 'when the updated display name is invalid' do diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 30200ed60c3471..8e5fa14b7e82a5 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -41,8 +41,9 @@ expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body[:client_id]).to_not be_present - expect(response.parsed_body[:client_secret]).to_not be_present + expect(response.parsed_body) + .to not_include(client_id: be_present) + .and not_include(client_secret: be_present) end end From 0ba3ad4a354df6b7cdcc9fbad4dc50d86f429171 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 04:45:05 -0400 Subject: [PATCH 084/467] Remove `body_json_ids` from api/v2/admin/accounts spec (#32003) --- spec/requests/api/v2/admin/accounts_spec.rb | 32 ++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/spec/requests/api/v2/admin/accounts_spec.rb b/spec/requests/api/v2/admin/accounts_spec.rb index bc3db4f8860fcf..1d1fda3e67df1c 100644 --- a/spec/requests/api/v2/admin/accounts_spec.rb +++ b/spec/requests/api/v2/admin/accounts_spec.rb @@ -36,7 +36,10 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to eq([admin_account.id]) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: admin_account.id.to_s) + ) end end @@ -47,8 +50,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(remote_account.id) - expect(body_json_ids).to_not include(other_remote_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: remote_account.id.to_s) + ) + .and not_include(hash_including(id: other_remote_account.id.to_s)) end end @@ -59,7 +65,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(suspended_remote.id, suspended_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: suspended_remote.id.to_s), + hash_including(id: suspended_account.id.to_s) + ) end end @@ -70,7 +80,10 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(disabled_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: disabled_account.id.to_s) + ) end end @@ -81,14 +94,13 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(body_json_ids).to include(pending_account.id) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: pending_account.id.to_s) + ) end end - def body_json_ids - response.parsed_body.map { |a| a[:id].to_i } - end - context 'with limit param' do let(:params) { { limit: 1 } } From ed90d9342ee61efa110996dc88f7352c3c9efe8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:50:19 +0000 Subject: [PATCH 085/467] New Crowdin Translations (automated) (#32011) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/an.json | 2 - app/javascript/mastodon/locales/ar.json | 2 - app/javascript/mastodon/locales/be.json | 2 - app/javascript/mastodon/locales/bg.json | 2 - app/javascript/mastodon/locales/br.json | 2 - app/javascript/mastodon/locales/ca.json | 4 +- app/javascript/mastodon/locales/ckb.json | 2 - app/javascript/mastodon/locales/co.json | 2 - app/javascript/mastodon/locales/cs.json | 2 - app/javascript/mastodon/locales/cy.json | 2 - app/javascript/mastodon/locales/da.json | 4 +- app/javascript/mastodon/locales/de.json | 6 +- app/javascript/mastodon/locales/el.json | 2 - app/javascript/mastodon/locales/en-GB.json | 4 +- app/javascript/mastodon/locales/eo.json | 97 +++++++++++++++++++- app/javascript/mastodon/locales/es-AR.json | 4 +- app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/es.json | 4 +- app/javascript/mastodon/locales/et.json | 2 - app/javascript/mastodon/locales/eu.json | 2 - app/javascript/mastodon/locales/fa.json | 2 - app/javascript/mastodon/locales/fi.json | 4 +- app/javascript/mastodon/locales/fo.json | 4 +- app/javascript/mastodon/locales/fr-CA.json | 2 - app/javascript/mastodon/locales/fr.json | 2 - app/javascript/mastodon/locales/fy.json | 2 - app/javascript/mastodon/locales/ga.json | 4 +- app/javascript/mastodon/locales/gd.json | 2 - app/javascript/mastodon/locales/gl.json | 4 +- app/javascript/mastodon/locales/he.json | 4 +- app/javascript/mastodon/locales/hi.json | 2 - app/javascript/mastodon/locales/hu.json | 4 +- app/javascript/mastodon/locales/hy.json | 2 - app/javascript/mastodon/locales/ia.json | 2 - app/javascript/mastodon/locales/id.json | 2 - app/javascript/mastodon/locales/ie.json | 2 - app/javascript/mastodon/locales/io.json | 2 - app/javascript/mastodon/locales/is.json | 2 - app/javascript/mastodon/locales/it.json | 4 +- app/javascript/mastodon/locales/ja.json | 6 +- app/javascript/mastodon/locales/kab.json | 8 +- app/javascript/mastodon/locales/ko.json | 4 +- app/javascript/mastodon/locales/ku.json | 2 - app/javascript/mastodon/locales/kw.json | 2 - app/javascript/mastodon/locales/lad.json | 6 +- app/javascript/mastodon/locales/lt.json | 4 +- app/javascript/mastodon/locales/lv.json | 2 - app/javascript/mastodon/locales/mr.json | 2 - app/javascript/mastodon/locales/ms.json | 2 - app/javascript/mastodon/locales/my.json | 2 - app/javascript/mastodon/locales/nl.json | 4 +- app/javascript/mastodon/locales/nn.json | 4 +- app/javascript/mastodon/locales/no.json | 2 - app/javascript/mastodon/locales/oc.json | 2 - app/javascript/mastodon/locales/pl.json | 4 +- app/javascript/mastodon/locales/pt-BR.json | 3 +- app/javascript/mastodon/locales/pt-PT.json | 2 - app/javascript/mastodon/locales/ro.json | 2 - app/javascript/mastodon/locales/ru.json | 2 - app/javascript/mastodon/locales/sa.json | 2 - app/javascript/mastodon/locales/sc.json | 2 - app/javascript/mastodon/locales/sco.json | 2 - app/javascript/mastodon/locales/sk.json | 2 - app/javascript/mastodon/locales/sl.json | 2 - app/javascript/mastodon/locales/sq.json | 2 - app/javascript/mastodon/locales/sr-Latn.json | 2 - app/javascript/mastodon/locales/sr.json | 2 - app/javascript/mastodon/locales/sv.json | 2 - app/javascript/mastodon/locales/th.json | 2 - app/javascript/mastodon/locales/tok.json | 2 - app/javascript/mastodon/locales/tr.json | 4 +- app/javascript/mastodon/locales/tt.json | 2 - app/javascript/mastodon/locales/uk.json | 4 +- app/javascript/mastodon/locales/vi.json | 80 ++++++++-------- app/javascript/mastodon/locales/zh-CN.json | 4 +- app/javascript/mastodon/locales/zh-HK.json | 2 - app/javascript/mastodon/locales/zh-TW.json | 4 +- config/locales/devise.kab.yml | 4 +- config/locales/doorkeeper.kab.yml | 12 +-- config/locales/es-MX.yml | 2 +- config/locales/ja.yml | 3 + config/locales/kab.yml | 8 +- config/locales/lad.yml | 19 ++++ config/locales/simple_form.kab.yml | 2 +- config/locales/simple_form.lad.yml | 1 + config/locales/simple_form.vi.yml | 12 +-- config/locales/vi.yml | 18 ++-- 87 files changed, 247 insertions(+), 224 deletions(-) diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index fcd30804219961..be303985ee2fee 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -288,8 +288,6 @@ "keyboard_shortcuts.unfocus": "Retirar lo foco d'a caixa de redacción/busqueda", "keyboard_shortcuts.up": "Ir enta alto en a lista", "lightbox.close": "Zarrar", - "lightbox.compress": "Comprimir quadro de visualización d'imachen", - "lightbox.expand": "Expandir quadro de visualización d'imachen", "lightbox.next": "Siguient", "lightbox.previous": "Anterior", "limited_account_hint.action": "Amostrar perfil de totz modos", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index d50ca8dbb59bc9..17b288723bfdb1 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -420,8 +420,6 @@ "keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث", "keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة", "lightbox.close": "إغلاق", - "lightbox.compress": "ضغط مربع عرض الصورة", - "lightbox.expand": "توسيع مربع عرض الصور", "lightbox.next": "التالي", "lightbox.previous": "العودة", "limited_account_hint.action": "إظهار الملف التعريفي على أي حال", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 8c28e71d2cf2b5..098c7a7e9d458a 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -412,8 +412,6 @@ "keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок", "keyboard_shortcuts.up": "Перамясціцца ўверх па спісе", "lightbox.close": "Закрыць", - "lightbox.compress": "Сціснуць бачную вобласць выявы", - "lightbox.expand": "Павялічыць бачную вобласць выявы", "lightbox.next": "Далей", "lightbox.previous": "Назад", "limited_account_hint.action": "Усе роўна паказваць профіль", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 507b8d29372570..c8f8474e91b939 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -419,8 +419,6 @@ "keyboard_shortcuts.unfocus": "Разфокусиране на текстовото поле за съставяне/търсене", "keyboard_shortcuts.up": "Преместване нагоре в списъка", "lightbox.close": "Затваряне", - "lightbox.compress": "Свиване на полето за преглед на образи", - "lightbox.expand": "Разгъване на полето за преглед на образи", "lightbox.next": "Напред", "lightbox.previous": "Назад", "limited_account_hint.action": "Показване на профила въпреки това", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 18616fcef2cc29..79949ed91f132e 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -338,8 +338,6 @@ "keyboard_shortcuts.unfocus": "Difokus an dachenn testenn/klask", "keyboard_shortcuts.up": "Pignat er roll", "lightbox.close": "Serriñ", - "lightbox.compress": "Bihanaat boest hewel ar skeudenn", - "lightbox.expand": "Ledanaat boest hewel ar skeudenn", "lightbox.next": "Da-heul", "lightbox.previous": "A-raok", "limited_account_hint.action": "Diskouez an aelad memes tra", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 3cdeab3ae42d46..710ac594f5eb63 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca", "keyboard_shortcuts.up": "Apuja a la llista", "lightbox.close": "Tanca", - "lightbox.compress": "Comprimeix el quadre de visualització d’imatge", - "lightbox.expand": "Amplia el quadre de visualització d’imatge", "lightbox.next": "Següent", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Amplia fins a la mida real", + "lightbox.zoom_out": "Amplia fins a encabir", "limited_account_hint.action": "Mostra el perfil de totes maneres", "limited_account_hint.title": "Aquest perfil l'han amagat els moderadors de {domain}.", "link_preview.author": "Per {name}", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 2a3a391eab4885..bea6e5ceecc12f 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -335,8 +335,6 @@ "keyboard_shortcuts.unfocus": "بۆ دروستکردنی ناوچەی دەق/گەڕان", "keyboard_shortcuts.up": "بۆ ئەوەی لە لیستەکەدا بڕۆیت", "lightbox.close": "دابخە", - "lightbox.compress": "سندوقی نیشاندانی وێنە بپەستێنە", - "lightbox.expand": "فراوانکردنی سندوقی بینینی وێنە", "lightbox.next": "داهاتوو", "lightbox.previous": "پێشوو", "limited_account_hint.action": "بەهەر حاڵ پڕۆفایلی پیشان بدە", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 37eb945615a192..043061769befe3 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -196,8 +196,6 @@ "keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu", "keyboard_shortcuts.up": "cullà indè a lista", "lightbox.close": "Chjudà", - "lightbox.compress": "Cumprime a finestra d'affissera di i ritratti", - "lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti", "lightbox.next": "Siguente", "lightbox.previous": "Pricidente", "lists.account.add": "Aghjunghje à a lista", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index af7a0128132bf0..b70ff3ee2bfcc9 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -410,8 +410,6 @@ "keyboard_shortcuts.unfocus": "Zrušit zaměření na nový příspěvek/hledání", "keyboard_shortcuts.up": "Posunout v seznamu nahoru", "lightbox.close": "Zavřít", - "lightbox.compress": "Sbalit pole zobrazení obrázku", - "lightbox.expand": "Rozbalit pole zobrazení obrázku", "lightbox.next": "Další", "lightbox.previous": "Předchozí", "limited_account_hint.action": "Přesto profil zobrazit", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 51ea1bdf3a6ecc..ec93a5b11be109 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio", "keyboard_shortcuts.up": "Symud yn uwch yn y rhestr", "lightbox.close": "Cau", - "lightbox.compress": "Cywasgu blwch gweld delwedd", - "lightbox.expand": "Ehangu blwch gweld delwedd", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", "limited_account_hint.action": "Dangos y proffil beth bynnag", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 2c36869622ce80..76752802b0e685 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Fjern fokus fra tekstskrivningsområde/søgning", "keyboard_shortcuts.up": "Flyt opad på listen", "lightbox.close": "Luk", - "lightbox.compress": "Komprimér billedvisningsfelt", - "lightbox.expand": "Udvid billedvisningsfelt", "lightbox.next": "Næste", "lightbox.previous": "Forrige", + "lightbox.zoom_in": "Zoom til faktisk størrelse", + "lightbox.zoom_out": "Zoom for at tilpasse", "limited_account_hint.action": "Vis profil alligevel", "limited_account_hint.title": "Denne profil er blevet skjult af {domain}-moderatorerne.", "link_preview.author": "Af {name}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index e6c086bfa29b84..1931ce23f1458e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -155,7 +155,7 @@ "compose_form.lock_disclaimer.lock": "geschützt", "compose_form.placeholder": "Was gibt’s Neues?", "compose_form.poll.duration": "Umfragedauer", - "compose_form.poll.multiple": "Mul­ti­ple-Choice", + "compose_form.poll.multiple": "Mehrfachauswahl", "compose_form.poll.option_placeholder": "Option {number}", "compose_form.poll.single": "Einfachauswahl", "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben", @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Eingabefeld/Suche nicht mehr fokussieren", "keyboard_shortcuts.up": "Ansicht nach oben bewegen", "lightbox.close": "Schließen", - "lightbox.compress": "Bildansicht verkleinern", - "lightbox.expand": "Bildansicht vergrößern", "lightbox.next": "Vor", "lightbox.previous": "Zurück", + "lightbox.zoom_in": "In Originalgröße anzeigen", + "lightbox.zoom_out": "In angepasster Größe anzeigen", "limited_account_hint.action": "Profil trotzdem anzeigen", "limited_account_hint.title": "Dieses Profil wurde von den Moderator*innen von {domain} ausgeblendet.", "link_preview.author": "Von {name}", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 367efe1cd9b923..ac6a2cf4e8b8eb 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -427,8 +427,6 @@ "keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης", "keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα", "lightbox.close": "Κλείσιμο", - "lightbox.compress": "Συμπίεση πλαισίου προβολής εικόνας", - "lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", "limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index c81f389b9dd2b1..c0335dd6b2a637 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Move up in the list", "lightbox.close": "Close", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", "lightbox.next": "Next", "lightbox.previous": "Previous", + "lightbox.zoom_in": "Zoom to actual size", + "lightbox.zoom_out": "Zoom to fit", "limited_account_hint.action": "Show profile anyway", "limited_account_hint.title": "This profile has been hidden by the moderators of {domain}.", "link_preview.author": "By {name}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index e162e732d07dab..05f53fb7311ce6 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -215,8 +215,25 @@ "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", + "domain_block_modal.block": "Bloki servilon", + "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe", + "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.", "domain_block_modal.they_cant_follow": "Neniu el ĉi tiu servilo povas sekvi vin.", + "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", + "domain_block_modal.title": "Ĉu bloki la domajnon?", + "domain_block_modal.you_will_lose_followers": "Ĉiuj viaj sekvantoj de ĉi tiu servilo estos forigitaj.", + "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", + "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", + "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", + "domain_pill.server": "Servilo", + "domain_pill.their_handle": "Ilia identigo:", + "domain_pill.their_server": "Ilia cifereca hejmo, kie ĉiuj iliaj afiŝoj loĝas.", + "domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "domain_pill.username": "Uzantnomo", + "domain_pill.whats_in_a_handle": "Kio estas en identigo?", + "domain_pill.your_handle": "Via identigo:", + "domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.", + "domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "embed.instructions": "Enkorpigu ĉi tiun afiŝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -253,6 +270,7 @@ "empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn afiŝojn, ili aperos ĉi tie.", "empty_column.lists": "Vi ankoraŭ ne havas liston. Kiam vi kreos iun, ĝi aperos ĉi tie.", "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.", + "empty_column.notification_requests": "Ĉio klara! Estas nenio tie ĉi. Kiam vi ricevas novajn sciigojn, ili aperos ĉi tie laŭ viaj agordoj.", "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", "error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.", @@ -283,6 +301,8 @@ "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", "filter_modal.title.status": "Filtri mesaĝon", + "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", + "filtered_notifications_banner.title": "Filtritaj sciigoj", "firehose.all": "Ĉiuj", "firehose.local": "Ĉi tiu servilo", "firehose.remote": "Aliaj serviloj", @@ -290,9 +310,13 @@ "follow_request.reject": "Rifuzi", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.", "follow_suggestions.dismiss": "Ne montri denove", + "follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas", "follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.", "follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.", + "follow_suggestions.popular_suggestion": "Popularaj proponoj", "follow_suggestions.popular_suggestion_longer": "Populara en {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis", "follow_suggestions.view_all": "Vidi ĉiujn", "follow_suggestions.who_to_follow": "Kiun sekvi", "followed_tags": "Sekvataj kradvortoj", @@ -321,6 +345,11 @@ "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", + "hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.", + "hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.", + "hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}", + "hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}", + "hints.threads.see_more": "Vidi pli da respondoj sur {domain}", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi la anoncojn", @@ -328,6 +357,13 @@ "home.pending_critical_update.link": "Vidi ĝisdatigojn", "home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!", "home.show_announcements": "Montri anoncojn", + "ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.", + "ignore_notifications_modal.ignore": "Ignori sciigojn", + "ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?", + "ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?", + "ignore_notifications_modal.not_followers_title": "Ĉu ignori sciigojn de homoj, kiuj ne sekvas vin?", + "ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?", + "ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?", "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", @@ -381,13 +417,14 @@ "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", - "lightbox.compress": "Kunpremi bildan vidkeston", - "lightbox.expand": "Pligrandigi bildan vidkeston", "lightbox.next": "Antaŭen", "lightbox.previous": "Malantaŭen", + "lightbox.zoom_in": "Zomi al reala grandeco", + "lightbox.zoom_out": "Zomi por konveni", "limited_account_hint.action": "Montru profilon ĉiukaze", "limited_account_hint.title": "La profilo estas kaŝita de la moderigantoj de {domain}.", "link_preview.author": "De {name}", + "link_preview.more_from_author": "Pli de {name}", "link_preview.shares": "{count, plural, one {{counter} afiŝo} other {{counter} afiŝoj}}", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", @@ -407,8 +444,15 @@ "loading_indicator.label": "Ŝargado…", "media_gallery.hide": "Kaŝi", "moved_to_account_banner.text": "Via konto {disabledAccount} estas malvalidigita ĉar vi movis ĝin al {movedToAccount}.", + "mute_modal.hide_from_notifications": "Kaŝi de sciigoj", + "mute_modal.hide_options": "Kaŝi agordojn", + "mute_modal.indefinite": "Ĝis mi malsilentas ilin", "mute_modal.show_options": "Montri agordojn", "mute_modal.they_can_mention_and_follow": "Ili povas mencii kaj sekvi vin, sed vi ne vidos ilin.", + "mute_modal.they_wont_know": "Ili ne scios, ke ili estas silentigitaj.", + "mute_modal.title": "Ĉu silentigi uzanton?", + "mute_modal.you_wont_see_mentions": "Vi ne vidos afiŝojn, kiuj mencias ilin.", + "mute_modal.you_wont_see_posts": "Ili ankoraŭ povas vidi viajn afiŝojn, sed vi ne vidos iliajn.", "navigation_bar.about": "Pri", "navigation_bar.administration": "Administrado", "navigation_bar.advanced_interface": "Malfermi altnivelan retpaĝan interfacon", @@ -437,28 +481,58 @@ "navigation_bar.security": "Sekureco", "not_signed_in_indicator.not_signed_in": "Necesas saluti por aliri tiun rimedon.", "notification.admin.report": "{name} raportis {target}", + "notification.admin.report_account": "{name} raportis {count, plural, one {afiŝon} other {# afiŝojn}} de {target} por {category}", + "notification.admin.report_account_other": "{name} raportis {count, plural, one {afiŝon} other {# afiŝojn}} de {target}", + "notification.admin.report_statuses": "{name} raportis {target} por {category}", + "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", "notification.favourite": "{name} stelumis vian afiŝon", "notification.follow": "{name} eksekvis vin", + "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", + "notification.follow_request.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} petis sekvi vin", "notification.label.mention": "Mencii", "notification.label.private_mention": "Privata mencio", "notification.label.private_reply": "Privata respondo", "notification.label.reply": "Respondi", "notification.mention": "Mencii", "notification.moderation-warning.learn_more": "Lerni pli", + "notification.moderation_warning": "Vi ricevis moderigan averton", + "notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.", + "notification.moderation_warning.action_disable": "Via konto estas malŝaltita.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelkaj el viaj afiŝoj estis markitaj kiel sentemaj.", + "notification.moderation_warning.action_none": "Via konto ricevis moderigan averton.", + "notification.moderation_warning.action_sensitive": "Viaj afiŝoj estos markitaj kiel sentemaj ekde nun.", + "notification.moderation_warning.action_silence": "Via konto estis limigita.", + "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", "notification.own_poll": "Via enketo finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", + "notification.reblog.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} diskonigis vian afiŝon", "notification.relationships_severance_event.learn_more": "Lerni pli", "notification.status": "{name} ĵus afiŝis", "notification.update": "{name} redaktis afiŝon", "notification_requests.accept": "Akcepti", + "notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}", + "notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}", + "notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?", + "notification_requests.dismiss": "Forĵeti", + "notification_requests.edit_selection": "Redakti", + "notification_requests.exit_selection": "Farita", + "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.", + "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.", + "notification_requests.notifications_from": "Sciigoj de {name}", + "notification_requests.title": "Filtritaj sciigoj", + "notification_requests.view": "Vidi sciigojn", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", + "notifications.clear_title": "Ĉu forigi sciigojn?", "notifications.column_settings.admin.report": "Novaj raportoj:", "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", "notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.favourite": "Stelumoj:", + "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", @@ -485,7 +559,18 @@ "notifications.permission_denied_alert": "Labortablaj sciigoj ne povas esti ebligitaj, ĉar retumilpermeso antaŭe estis rifuzita", "notifications.permission_required": "Labortablaj sciigoj ne disponeblas ĉar la bezonata permeso ne estis donita.", "notifications.policy.accept": "Akcepti", + "notifications.policy.accept_hint": "Montri en sciigoj", + "notifications.policy.drop": "Ignori", + "notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove", + "notifications.policy.filter": "Filtri", + "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj", + "notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}", "notifications.policy.filter_new_accounts_title": "Novaj kontoj", + "notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin", + "notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin", + "notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas", + "notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj", + "notifications.policy.title": "Administri sciigojn de…", "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", @@ -609,10 +694,13 @@ "report.unfollow_explanation": "Vi sekvas ĉi tiun konton. Por ne plu vidi ĝiajn afiŝojn en via hejma templinio, ĉesu sekvi ĝin.", "report_notification.attached_statuses": "{count, plural, one {{count} afiŝo almetita} other {{count} afiŝoj almetitaj}}", "report_notification.categories.legal": "Laŭleĝa", + "report_notification.categories.legal_sentence": "kontraŭleĝa enhavo", "report_notification.categories.other": "Alia", "report_notification.categories.other_sentence": "alia", "report_notification.categories.spam": "Trudmesaĝo", + "report_notification.categories.spam_sentence": "trudmesaĝo", "report_notification.categories.violation": "Malobservo de la regulo", + "report_notification.categories.violation_sentence": "malobservo de la regulo", "report_notification.open": "Malfermi la raporton", "search.no_recent_searches": "Neniuj lastaj serĉoj", "search.placeholder": "Serĉi", @@ -640,8 +728,10 @@ "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", "server_banner.active_users": "aktivaj uzantoj", "server_banner.administered_by": "Administrata de:", + "server_banner.is_one_of_many": "{domain} estas unu el la multaj sendependaj Mastodon-serviloj, kiujn vi povas uzi por partopreni en la fediverso.", "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", + "sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", "sign_in_banner.sign_in": "Saluti", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", @@ -657,8 +747,10 @@ "status.direct": "Private mencii @{name}", "status.direct_indicator": "Privata mencio", "status.edit": "Redakti", + "status.edited": "Laste redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", "status.favourite": "Ŝatata", + "status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}", "status.filter": "Filtri ĉi tiun afiŝon", "status.history.created": "{name} kreis {date}", "status.history.edited": "{name} redaktis {date}", @@ -677,6 +769,7 @@ "status.reblog": "Diskonigi", "status.reblog_private": "Diskonigi kun la sama videbleco", "status.reblogged_by": "{name} diskonigis", + "status.reblogs": "{count, plural, one {diskonigo} other {diskonigoj}}", "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.remove_bookmark": "Forigi legosignon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 968b01babc28eb..6ab3f0fdb9cbf5 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Quitar el foco del área de texto de redacción o de búsqueda", "keyboard_shortcuts.up": "Subir en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de vista de imagen", - "lightbox.expand": "Expandir cuadro de vista de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 5c8f44d4a7f5d7..52ebf0ae1800d6 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de visualización de imagen", - "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 6a428e353b3e69..df05e82b0beffa 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", - "lightbox.compress": "Comprimir cuadro de visualización de imagen", - "lightbox.expand": "Expandir cuadro de visualización de imagen", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ampliar al tamaño real", + "lightbox.zoom_out": "Ampliar para ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 5b8e8369f6a437..287ffb98523afe 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Fookus tekstialalt/otsingult ära", "keyboard_shortcuts.up": "Liigu loetelus üles", "lightbox.close": "Sulge", - "lightbox.compress": "Suru kokku pildi vaatamise kast", - "lightbox.expand": "Laienda pildi vaatamise kast", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", "limited_account_hint.action": "Näita profilli sellegipoolest", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index acdd27ce2bea5d..b3137bc21a3494 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea", "keyboard_shortcuts.up": "zerrendan gora mugitzea", "lightbox.close": "Itxi", - "lightbox.compress": "Konprimatu irudia ikusteko kaxa", - "lightbox.expand": "Zabaldu irudia ikusteko kaxa", "lightbox.next": "Hurrengoa", "lightbox.previous": "Aurrekoa", "limited_account_hint.action": "Erakutsi profila hala ere", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index fba8d902351362..fbc65ec2079943 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -422,8 +422,6 @@ "keyboard_shortcuts.unfocus": "برداشتن تمرکز از ناحیهٔ نوشتن یا جست‌وجو", "keyboard_shortcuts.up": "بالا بردن در سیاهه", "lightbox.close": "بستن", - "lightbox.compress": "فشرده‌سازی جعبهٔ نمایش تصویر", - "lightbox.expand": "گسترش جعبهٔ نمایش تصویر", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 681f5d5bb20a9a..d4adef40f2f734 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Poistu kirjoitus- tai hakukentästä", "keyboard_shortcuts.up": "Siirry luettelossa taaksepäin", "lightbox.close": "Sulje", - "lightbox.compress": "Tiivis kuvankatselunäkymä", - "lightbox.expand": "Laajennettu kuvankatselunäkymä", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", + "lightbox.zoom_in": "Zoomaa todelliseen kokoon", + "lightbox.zoom_out": "Zoomaa mahtumaan", "limited_account_hint.action": "Näytä profiili joka tapauksessa", "limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.", "link_preview.author": "Tehnyt {name}", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 793a75bb05a5f5..9b87f5c8d917b6 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Tak skrivi-/leiti-økið úr miðdeplinum", "keyboard_shortcuts.up": "Flyt upp á listanum", "lightbox.close": "Lat aftur", - "lightbox.compress": "Kroyst myndavísikassa saman", - "lightbox.expand": "Víðka myndavísikassa", "lightbox.next": "Fram", "lightbox.previous": "Aftur", + "lightbox.zoom_in": "Suma til veruliga stødd", + "lightbox.zoom_out": "Suma, so tað passar", "limited_account_hint.action": "Vís vangamynd kortini", "limited_account_hint.title": "Hesin vangin er fjaldur av kjakleiðarunum á {domain}.", "link_preview.author": "Av {name}", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 8e33c6844290cc..27e776024f3276 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Ne plus se concentrer sur la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", - "lightbox.compress": "Compresser la fenêtre de visualisation d'images", - "lightbox.expand": "Agrandir la fenêtre de visualisation d'images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "limited_account_hint.action": "Afficher le profil quand même", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index e73ddf734f1b5e..f787216c467cb1 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Quitter la zone de rédaction/barre de recherche", "keyboard_shortcuts.up": "Monter dans la liste", "lightbox.close": "Fermer", - "lightbox.compress": "Compresser la fenêtre de visualisation des images", - "lightbox.expand": "Agrandir la fenêtre de visualisation des images", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", "limited_account_hint.action": "Afficher le profil quand même", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 2443692133af18..e7723c95337853 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Nei boppe yn list ferpleatse", "lightbox.close": "Slute", - "lightbox.compress": "Ofbylding passend werjaan", - "lightbox.expand": "Ofbylding grut werjaan", "lightbox.next": "Folgjende", "lightbox.previous": "Foarige", "limited_account_hint.action": "Profyl dochs besjen", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 11da6b64e94d31..e05adc27325eba 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Unfocus cum textarea/search", "keyboard_shortcuts.up": "Bog suas ar an liosta", "lightbox.close": "Dún", - "lightbox.compress": "Comhbhrúigh an bosca amhairc íomhá", - "lightbox.expand": "Leathnaigh an bosca amhairc íomhá", "lightbox.next": "An céad eile", "lightbox.previous": "Roimhe seo", + "lightbox.zoom_in": "Súmáil chuig an méid iarbhír", + "lightbox.zoom_out": "Súmáil a d'oirfeadh", "limited_account_hint.action": "Taispeáin an phróifíl ar aon nós", "limited_account_hint.title": "Tá an phróifíl seo curtha i bhfolach ag na modhnóra {domain}.", "link_preview.author": "Le {name}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 2b93662694aed6..6cd3cbcc5606ae 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Thoir am fòcas far raon teacsa an sgrìobhaidh/an luirg", "keyboard_shortcuts.up": "Gluais suas air an liosta", "lightbox.close": "Dùin", - "lightbox.compress": "Co-theannaich bogsa sealladh an deilbh", - "lightbox.expand": "Leudaich bogsa sealladh an deilbh", "lightbox.next": "Air adhart", "lightbox.previous": "Air ais", "limited_account_hint.action": "Seall a’ phròifil co-dhiù", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index d35bcd8cf5b2ab..5e67cbce25915f 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Para deixar de destacar a área de escritura/procura", "keyboard_shortcuts.up": "Para mover cara arriba na listaxe", "lightbox.close": "Fechar", - "lightbox.compress": "Comprimir a caixa de vista da imaxe", - "lightbox.expand": "Estender a caixa de vista da imaxe", "lightbox.next": "Seguinte", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Ver tamaño real", + "lightbox.zoom_out": "Ver tamaño axustado", "limited_account_hint.action": "Mostrar perfil igualmente", "limited_account_hint.title": "Este perfil foi agochado pola moderación de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 5e6ab56c238909..6503d870e51221 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש", "keyboard_shortcuts.up": "לנוע במעלה הרשימה", "lightbox.close": "סגירה", - "lightbox.compress": "דחיסת קופסת צפייה בתמונה", - "lightbox.expand": "הרחבת קופסת צפייה בתמונה", "lightbox.next": "הבא", "lightbox.previous": "הקודם", + "lightbox.zoom_in": "הגדלה לגודל מלא", + "lightbox.zoom_out": "התאמה לגודל המסך", "limited_account_hint.action": "הצג חשבון בכל זאת", "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.", "link_preview.author": "מאת {name}", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 58b04a20cd363f..4a513c1c073e3e 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -349,8 +349,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "बंद करें", - "lightbox.compress": "कंप्रेस इमेज व्यू बॉक्स", - "lightbox.expand": "एक्सपैंड इमेज व्यू बॉक्स", "lightbox.next": "अगला", "lightbox.previous": "पिछला", "limited_account_hint.action": "फिर भी प्रोफाइल दिखाओ", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index d4ced224634fe6..cb3517e3a38491 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Szerkesztés/keresés fókuszból való kivétele", "keyboard_shortcuts.up": "Mozgás felfelé a listában", "lightbox.close": "Bezárás", - "lightbox.compress": "Képnéző doboz összezárása", - "lightbox.expand": "Képnéző doboz kinyitása", "lightbox.next": "Következő", "lightbox.previous": "Előző", + "lightbox.zoom_in": "Nagyítás a tényleges méretre", + "lightbox.zoom_out": "Méretre igazítás", "limited_account_hint.action": "Profil megjelenítése mindenképpen", "limited_account_hint.title": "Ezt a profilt {domain} moderátorai elrejtették.", "link_preview.author": "{name} szerint", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index a81abb82f014a1..9e5ae790453057 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -271,8 +271,6 @@ "keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրոյթից ապասեւեռուելու համար", "keyboard_shortcuts.up": "ցանկով վերեւ շարժուելու համար", "lightbox.close": "Փակել", - "lightbox.compress": "Փակել պատկերի դիտման պատուհանը", - "lightbox.expand": "Բացել պատկերի դիտման պատուհանը", "lightbox.next": "Յաջորդ", "lightbox.previous": "Նախորդ", "lists.account.add": "Աւելացնել ցանկին", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 9e7b583375bd78..93bee9ec798e73 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -423,8 +423,6 @@ "keyboard_shortcuts.unfocus": "Disfocalisar le area de composition de texto/de recerca", "keyboard_shortcuts.up": "Displaciar in alto in le lista", "lightbox.close": "Clauder", - "lightbox.compress": "Comprimer le quadro de visualisation de imagine", - "lightbox.expand": "Expander le quadro de visualisation de imagine", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", "limited_account_hint.action": "Monstrar profilo in omne caso", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 687c32c1b155cf..b6d01ec996386a 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -381,8 +381,6 @@ "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", - "lightbox.compress": "Kompres kotak tampilan gambar", - "lightbox.expand": "Besarkan kotak tampilan gambar", "lightbox.next": "Selanjutnya", "lightbox.previous": "Sebelumnya", "limited_account_hint.action": "Tetap tampilkan profil", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 322680101922a1..1439b851d31a91 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -396,8 +396,6 @@ "keyboard_shortcuts.unfocus": "Desinfocar text-area de composition/serchar", "keyboard_shortcuts.up": "Mover ad-supra in li liste", "lightbox.close": "Cluder", - "lightbox.compress": "Compresser vise-buxe de image", - "lightbox.expand": "Expander vise-buxe de image", "lightbox.next": "Sequent", "lightbox.previous": "Precedent", "limited_account_hint.action": "Monstrar profil totvez", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index bb0a86ac2bbec9..aa284685e72173 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -339,8 +339,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Klozar", - "lightbox.compress": "Kompresez imajvidbuxo", - "lightbox.expand": "Expansez imajvidbuxo", "lightbox.next": "Nexta", "lightbox.previous": "Antea", "limited_account_hint.action": "Jus montrez profilo", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index fb807429f7056f..5f32b438dd7bc7 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Taka virkni úr textainnsetningarreit eða leit", "keyboard_shortcuts.up": "Fara ofar í listanum", "lightbox.close": "Loka", - "lightbox.compress": "Þjappa myndskoðunarreit", - "lightbox.expand": "Fletta út myndskoðunarreit", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", "limited_account_hint.action": "Birta notandasniðið samt", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 97518c586268a9..ec26d80be63fd6 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Rimuove il focus sull'area di composizione testuale/ricerca", "keyboard_shortcuts.up": "Scorre in su nell'elenco", "lightbox.close": "Chiudi", - "lightbox.compress": "Comprimi casella di visualizzazione immagine", - "lightbox.expand": "Espandi casella di visualizzazione immagine", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", + "lightbox.zoom_in": "Ingrandisci alla dimensione attuale", + "lightbox.zoom_out": "Ingrandisci per adattarsi", "limited_account_hint.action": "Mostra comunque il profilo", "limited_account_hint.title": "Questo profilo è stato nascosto dai moderatori di {domain}.", "link_preview.author": "Di {name}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 38492a73612b16..c3ddeed880e35e 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "投稿の入力欄・検索欄から離れる", "keyboard_shortcuts.up": "カラム内一つ上に移動", "lightbox.close": "閉じる", - "lightbox.compress": "画像ビューボックスを閉じる", - "lightbox.expand": "画像ビューボックスを開く", "lightbox.next": "次", "lightbox.previous": "前", + "lightbox.zoom_in": "実際のサイズにする", + "lightbox.zoom_out": "表示範囲に合わせる", "limited_account_hint.action": "構わず表示する", "limited_account_hint.title": "このプロフィールは{domain}のモデレーターによって非表示にされています。", "link_preview.author": "{name}", @@ -457,6 +457,7 @@ "lists.subheading": "あなたのリスト", "load_pending": "{count}件の新着", "loading_indicator.label": "読み込み中…", + "media_gallery.hide": "隠す", "moved_to_account_banner.text": "あなたのアカウント『{disabledAccount}』は『{movedToAccount}』に移動したため現在無効になっています。", "mute_modal.hide_from_notifications": "通知をオフにする", "mute_modal.hide_options": "オプションを閉じる", @@ -785,6 +786,7 @@ "status.edit": "編集", "status.edited": "最終更新日 {date}", "status.edited_x_times": "{count}回編集", + "status.embed": "埋め込みコードを取得", "status.favourite": "お気に入り", "status.favourites": "{count, plural, one {お気に入り} other {お気に入り}}", "status.filter": "この投稿をフィルターする", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 822fb59e6f85f8..89f68ab95fa2d0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -82,6 +82,7 @@ "block_modal.title": "Sewḥel aseqdac ?", "block_modal.you_wont_see_mentions": "Ur tezmireḍ ara ad twaliḍ tisuffaɣ anda d-yettwabdar.", "boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun", + "boost_modal.reblog": "Zuzer tasuffeɣt?", "bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis", "bundle_column_error.error.title": "Uh, ala !", "bundle_column_error.network.title": "Tuccḍa deg uẓeṭṭa", @@ -190,7 +191,7 @@ "domain_pill.server": "Aqeddac", "domain_pill.username": "Isem n useqdac", "domain_pill.your_server": "D axxam-inek·inem umḍin, anda i zedɣent akk tsuffaɣ-ik·im. Ur k·m-yeεǧib ara wa? Ssenfel-d iqeddacen melmi i ak·m-yehwa, awi-d daɣen ineḍfaren-ik·im yid-k·m.", - "embed.instructions": "Ẓẓu addad-agi deg usmel-inek s wenγal n tangalt yellan sdaw-agi.", + "embed.instructions": "Ẓẓu addad-agi deg usmel-inek·inem s wenɣal n tangalt yellan sdaw-agi.", "embed.preview": "Akka ara d-iban:", "emoji_button.activity": "Aqeddic", "emoji_button.clear": "Sfeḍ", @@ -332,8 +333,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart", "lightbox.close": "Mdel", - "lightbox.compress": "Ḥemmeẓ tamnaḍt n uskan n tugna", - "lightbox.expand": "Simeɣer tamnaḍt n uskan n tugna", "lightbox.next": "Ɣer zdat", "lightbox.previous": "Ɣer deffir", "limited_account_hint.action": "Wali amaɣnu akken yebɣu yili", @@ -356,7 +355,7 @@ "lists.subheading": "Tibdarin-ik·im", "load_pending": "{count, plural, one {# n uferdis amaynut} other {# n yiferdisen imaynuten}}", "loading_indicator.label": "Yessalay-d …", - "media_gallery.hide": "Ffer-it", + "media_gallery.hide": "Seggelmes", "mute_modal.hide_from_notifications": "Ffer-it deg ulɣuten", "mute_modal.hide_options": "Ffer tinefrunin", "mute_modal.indefinite": "Alamma ssnesreɣ asgugem fell-as", @@ -590,6 +589,7 @@ "status.direct_indicator": "Abdar uslig", "status.edit": "Ẓreg", "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}", + "status.embed": "Awi-d tangalt n weslaɣ", "status.favourite": "Amenyaf", "status.favourites": "{count, plural, one {n usmenyaf} other {n ismenyafen}}", "status.filter": "Sizdeg tassufeɣt-a", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index cf2082e105d42f..af1599572bff3a 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "작성창에서 포커스 해제", "keyboard_shortcuts.up": "리스트에서 위로 이동", "lightbox.close": "닫기", - "lightbox.compress": "이미지 박스 압축", - "lightbox.expand": "이미지 박스 확장", "lightbox.next": "다음", "lightbox.previous": "이전", + "lightbox.zoom_in": "실제 크기에 맞춰 보기", + "lightbox.zoom_out": "화면 크기에 맞춰 보기", "limited_account_hint.action": "그래도 프로필 보기", "limited_account_hint.title": "이 프로필은 {domain}의 중재자에 의해 숨겨진 상태입니다.", "link_preview.author": "{name}", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index dd10000d1813c8..86ecf984464718 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -293,8 +293,6 @@ "keyboard_shortcuts.unfocus": "Bal nede cîhê nivîsê /lêgerînê", "keyboard_shortcuts.up": "Di lîsteyê de rake jor", "lightbox.close": "Bigire", - "lightbox.compress": "Qutîya wêneya nîşan dike bitepisîne", - "lightbox.expand": "Qutîya wêneya nîşan dike fireh bike", "lightbox.next": "Pêş", "lightbox.previous": "Paş", "limited_account_hint.action": "Bi heman awayî profîlê nîşan bide", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index 60b8321d53be76..cef24aa3b78a0a 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -195,8 +195,6 @@ "keyboard_shortcuts.unfocus": "Anfogella tekstva gomposya/hwilas", "keyboard_shortcuts.up": "Movya war-vann y'n rol", "lightbox.close": "Degea", - "lightbox.compress": "Kula kist a weles aven", - "lightbox.expand": "Efani kist a weles aven", "lightbox.next": "Nessa", "lightbox.previous": "Kynsa", "lists.account.add": "Keworra dhe rol", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 72bf26050106c4..43da2ea16fddc6 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -34,7 +34,9 @@ "account.follow_back": "Sige tamyen", "account.followers": "Suivantes", "account.followers.empty": "Por agora dingun no sige a este utilizador.", + "account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}", "account.following": "Sigiendo", + "account.following_counter": "{count, plural, other {Sigiendo a {counter}}}", "account.follows.empty": "Este utilizador ainda no sige a dingun.", "account.go_to_profile": "Va al profil", "account.hide_reblogs": "Eskonde repartajasyones de @{name}", @@ -60,6 +62,7 @@ "account.requested_follow": "{name} tiene solisitado segirte", "account.share": "Partaja el profil de @{name}", "account.show_reblogs": "Amostra repartajasyones de @{name}", + "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", "account.unblock": "Dezbloka a @{name}", "account.unblock_domain": "Dezbloka domeno {domain}", "account.unblock_short": "Dezbloka", @@ -393,8 +396,6 @@ "keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda", "keyboard_shortcuts.up": "Move verso arriva en la lista", "lightbox.close": "Serra", - "lightbox.compress": "Kompresa kuadro de imaje", - "lightbox.expand": "Espande kuadro de imaje", "lightbox.next": "Sigiente", "lightbox.previous": "Anterior", "limited_account_hint.action": "Amostra el profil entanto", @@ -418,6 +419,7 @@ "lists.subheading": "Tus listas", "load_pending": "{count, plural, one {# muevo elemento} other {# muevos elementos}}", "loading_indicator.label": "Eskargando…", + "media_gallery.hide": "Eskonde", "moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.", "mute_modal.hide_from_notifications": "Eskonde de avizos", "mute_modal.hide_options": "Eskonde opsyones", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 5a510f5b96c986..632c33129a1b2f 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Nebefokusuoti rengykles teksto sritį / paiešką", "keyboard_shortcuts.up": "Perkelti į viršų sąraše", "lightbox.close": "Uždaryti", - "lightbox.compress": "Suspausti vaizdo peržiūros langelį", - "lightbox.expand": "Išplėsti vaizdo peržiūros langelį", "lightbox.next": "Kitas", "lightbox.previous": "Ankstesnis", + "lightbox.zoom_in": "Padidink iki tikrojo dydžio", + "lightbox.zoom_out": "Padidink, kad tilptų", "limited_account_hint.action": "Vis tiek rodyti profilį", "limited_account_hint.title": "Šį profilį paslėpė {domain} prižiūrėtojai.", "link_preview.author": "Sukūrė {name}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 53b3c0fcaa22a9..43fa8369f4232e 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -385,8 +385,6 @@ "keyboard_shortcuts.unfocus": "Atfokusēt veidojamā teksta/meklēšanas lauku", "keyboard_shortcuts.up": "Pārvietoties augšup sarakstā", "lightbox.close": "Aizvērt", - "lightbox.compress": "Saspiest attēla skata lodziņu", - "lightbox.expand": "Izvērst attēla skata lodziņu", "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 47c3a55e55c6fa..aa8169616e70e3 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -169,8 +169,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "बंद करा", - "lightbox.compress": "प्रतिमा दृश्य बॉक्स कॉम्प्रेस करा", - "lightbox.expand": "प्रतिमा दृश्य बॉक्स विस्तृत करा", "lightbox.next": "पुढे", "lightbox.previous": "मागील", "limited_account_hint.action": "तरीही प्रोफाइल दाखवा", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 44403ec959486e..cbd57ab356994d 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -360,8 +360,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "Pindah ke atas dalam senarai", "lightbox.close": "Tutup", - "lightbox.compress": "Kecilkan kotak paparan imej", - "lightbox.expand": "Besarkan kotak paparan imej", "lightbox.next": "Seterusnya", "lightbox.previous": "Sebelumnya", "limited_account_hint.action": "Paparkan profil", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index e93b47fd542f14..c97de733354ad6 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -339,8 +339,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "ပိတ်ပါ", - "lightbox.compress": "ရုပ်ပုံမြင်ကွင်းအကွက်ကို ချုံ့ပါ", - "lightbox.expand": "ပုံကိုဖွင့်ပါ", "lightbox.next": "ရှေ့သို့", "lightbox.previous": "ရှေ့သို့", "limited_account_hint.action": "ဘာပဲဖြစ်ဖြစ် ပရိုဖိုင်ကို ပြပါ", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1043ca8376caf8..f5f4a0a137896f 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Tekst- en zoekveld ontfocussen", "keyboard_shortcuts.up": "Naar boven in de lijst bewegen", "lightbox.close": "Sluiten", - "lightbox.compress": "Afbeelding passend weergeven", - "lightbox.expand": "Afbeelding groot weergeven", "lightbox.next": "Volgende", "lightbox.previous": "Vorige", + "lightbox.zoom_in": "Oorspronkelijke grootte weergeven", + "lightbox.zoom_out": "Passend weergeven", "limited_account_hint.action": "Alsnog het profiel tonen", "limited_account_hint.title": "Dit profiel is door de moderatoren van {domain} verborgen.", "link_preview.author": "Door {name}", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index c4b5f0291df130..702154927d903e 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "for å fokusere vekk skrive-/søkefeltet", "keyboard_shortcuts.up": "Flytt opp på lista", "lightbox.close": "Lukk", - "lightbox.compress": "Komprimer biletvisningsboksen", - "lightbox.expand": "Utvid biletvisningsboksen", "lightbox.next": "Neste", "lightbox.previous": "Førre", + "lightbox.zoom_in": "Zoom til faktisk storleik", + "lightbox.zoom_out": "Vis heile", "limited_account_hint.action": "Vis profilen likevel", "limited_account_hint.title": "Denne profilen er skjult av moderatorane på {domain}.", "link_preview.author": "Av {name}", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1222f404241e9f..1d0294cd7c02a0 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Fjern fokus fra komponerings-/søkefeltet", "keyboard_shortcuts.up": "Flytt oppover i listen", "lightbox.close": "Lukk", - "lightbox.compress": "Komprimer bildevisningsboks", - "lightbox.expand": "Ekspander bildevisning boks", "lightbox.next": "Neste", "lightbox.previous": "Forrige", "limited_account_hint.action": "Vis profil likevel", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 22193f82aa41e5..9dbd123c9be92a 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -297,8 +297,6 @@ "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", - "lightbox.compress": "Fenèstra de visualizacion dels imatges compressats", - "lightbox.expand": "Espandir la fenèstra de visualizacion d’imatge", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", "limited_account_hint.action": "Afichar lo perfil de tota manièra", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index d415bb38119c89..a4ee25250a97bc 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", "keyboard_shortcuts.up": "aby przejść na górę listy", "lightbox.close": "Zamknij", - "lightbox.compress": "Zmniejsz pole widoku obrazu", - "lightbox.expand": "Rozwiń pole widoku obrazu", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", + "lightbox.zoom_in": "Rozmiar rzeczywisty", + "lightbox.zoom_out": "Dopasuj", "limited_account_hint.action": "Pokaż profil mimo to", "limited_account_hint.title": "Ten profil został ukryty przez moderatorów {domain}.", "link_preview.author": "{name}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 053ae25822b277..1eca63ac15c8c6 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -432,10 +432,9 @@ "keyboard_shortcuts.unfocus": "desfocar de tudo", "keyboard_shortcuts.up": "mover para cima", "lightbox.close": "Fechar", - "lightbox.compress": "Fechar imagem", - "lightbox.expand": "Abrir imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", + "lightbox.zoom_in": "Voltar para o tamanho real", "limited_account_hint.action": "Exibir perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index ed4bb9ba010a6d..80f5f9f13899cd 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", - "lightbox.compress": "Compactar caixa de visualização de imagem", - "lightbox.expand": "Expandir caixa de visualização de imagem", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "limited_account_hint.action": "Exibir perfil mesmo assim", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 73b8140de65845..a61f4b0d4fd41d 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -334,8 +334,6 @@ "keyboard_shortcuts.unfocus": "Părăsește zona de text/bara de căutare", "keyboard_shortcuts.up": "Urcă în listă", "lightbox.close": "Închide", - "lightbox.compress": "Închide panoul de vizualizare a imaginilor", - "lightbox.expand": "Deschide panoul de vizualizare a imaginilor", "lightbox.next": "Înainte", "lightbox.previous": "Înapoi", "limited_account_hint.action": "Afișează profilul oricum", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d97b1658c552ae..13661149299a33 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -431,8 +431,6 @@ "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", - "lightbox.compress": "Сжать окно просмотра изображений", - "lightbox.expand": "Развернуть окно просмотра изображений", "lightbox.next": "Далее", "lightbox.previous": "Назад", "limited_account_hint.action": "Все равно показать профиль", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 85bd9aa9ddc79e..2d48f688d58971 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -299,8 +299,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "पिधीयताम्", - "lightbox.compress": "सङ्कुच चित्रप्रदर्शनपेटकम्", - "lightbox.expand": "चित्रप्रदर्शनपेटकं विस्तारय", "lightbox.next": "परः", "lightbox.previous": "पूर्वः", "limited_account_hint.action": "प्रोफैलं दर्शय कथञ्चित्", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 071643a1538f1a..bb7d062b95e31b 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -350,8 +350,6 @@ "keyboard_shortcuts.unfocus": "Essi de s'àrea de cumpositzione de testu o de chirca", "keyboard_shortcuts.up": "Move in susu in sa lista", "lightbox.close": "Serra", - "lightbox.compress": "Cumprime sa casella de visualizatzione de is immàgines", - "lightbox.expand": "Ismànnia sa casella de visualizatzione de is immàgines", "lightbox.next": "Imbeniente", "lightbox.previous": "Pretzedente", "limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 269e29a86ff6ff..c14f1cc51acda0 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -284,8 +284,6 @@ "keyboard_shortcuts.unfocus": "Unfocus scrieve textarea/seirch", "keyboard_shortcuts.up": "Muive up in the list", "lightbox.close": "Shut", - "lightbox.compress": "Compress image view box", - "lightbox.expand": "Expand image view box", "lightbox.next": "Neist", "lightbox.previous": "Last ane", "limited_account_hint.action": "Shaw profile onieweys", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index d21dc5e1ab4fa9..c989a7314c4555 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -396,8 +396,6 @@ "keyboard_shortcuts.unfocus": "Odísť z textového poľa", "keyboard_shortcuts.up": "Posunúť sa vyššie v zozname", "lightbox.close": "Zatvoriť", - "lightbox.compress": "Zmenšiť náhľad obrázku", - "lightbox.expand": "Rozšíriť náhľad obrázku", "lightbox.next": "Ďalej", "lightbox.previous": "Späť", "limited_account_hint.action": "Aj tak zobraziť profil", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index bdc1d5606289ab..43042ca998d4c6 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -412,8 +412,6 @@ "keyboard_shortcuts.unfocus": "Odstrani pozornost z območja za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "Premakni navzgor po seznamu", "lightbox.close": "Zapri", - "lightbox.compress": "Strni ogledno polje slike", - "lightbox.expand": "Razširi ogledno polje slike", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", "limited_account_hint.action": "Vseeno pokaži profil", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index ea3c6d5c7c66c6..c5e42aae77939c 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "Për heqjen e fokusit nga fusha e hartimit të mesazheve apo kërkimeve", "keyboard_shortcuts.up": "Për ngjitje sipër nëpër listë", "lightbox.close": "Mbylle", - "lightbox.compress": "Ngjeshe kuadratin e parjes së figurave", - "lightbox.expand": "Zgjeroje kuadratin e parjes së figurave", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", "limited_account_hint.action": "Shfaqe profilin sido qoftë", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index de30ca280fae12..e701da60789bc9 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -399,8 +399,6 @@ "keyboard_shortcuts.unfocus": "Ukloni fokus sa polja za unos teksta/pretrage", "keyboard_shortcuts.up": "Premesti nagore u listi", "lightbox.close": "Zatvori", - "lightbox.compress": "Komprimuj okvir za prikaz slike", - "lightbox.expand": "Proširi okvir za prikaz slike", "lightbox.next": "Sledeće", "lightbox.previous": "Prethodno", "limited_account_hint.action": "Ipak prikaži profil", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 255215a1671f72..fd13c4ee5c1a5c 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -399,8 +399,6 @@ "keyboard_shortcuts.unfocus": "Уклони фокус са поља за унос текста/претраге", "keyboard_shortcuts.up": "Премести нагоре у листи", "lightbox.close": "Затвори", - "lightbox.compress": "Компримуј оквир за приказ слике", - "lightbox.expand": "Прошири оквир за приказ слике", "lightbox.next": "Следеће", "lightbox.previous": "Претходно", "limited_account_hint.action": "Ипак прикажи профил", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 4d560a6495e451..6bb0b1424abd0d 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -429,8 +429,6 @@ "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", "keyboard_shortcuts.up": "för att flytta uppåt i listan", "lightbox.close": "Stäng", - "lightbox.compress": "Komprimera bildvyrutan", - "lightbox.expand": "Utöka bildvyrutan", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", "limited_account_hint.action": "Visa profil ändå", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9578431ff741b2..d446cacb92dc86 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -432,8 +432,6 @@ "keyboard_shortcuts.unfocus": "เลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", "keyboard_shortcuts.up": "ย้ายขึ้นในรายการ", "lightbox.close": "ปิด", - "lightbox.compress": "บีบอัดกล่องดูภาพ", - "lightbox.expand": "ขยายกล่องดูภาพ", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 6c21026bdbd0e4..9f203881823e93 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -252,8 +252,6 @@ "keyboard_shortcuts.toot": "o toki", "keyboard_shortcuts.up": "o tawa sewi lon lipu", "lightbox.close": "o pini", - "lightbox.compress": "o lili e sitelen", - "lightbox.expand": "o suli e sitelen", "lightbox.next": "sinpin", "lightbox.previous": "monsi", "link_preview.author": "tan {name}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index d4d7d3d113929c..bdb2de0ef11378 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "Listede yukarıya çıkmak için", "lightbox.close": "Kapat", - "lightbox.compress": "Resim görüntüleme kutusunu sıkıştır", - "lightbox.expand": "Resim görüntüleme kutusunu genişlet", "lightbox.next": "Sonraki", "lightbox.previous": "Önceki", + "lightbox.zoom_in": "Özgün boyuta dön", + "lightbox.zoom_out": "Sığacak şekilde boyutla", "limited_account_hint.action": "Yine de profili göster", "limited_account_hint.title": "Bu profil {domain} moderatörleri tarafından gizlendi.", "link_preview.author": "Yazar: {name}", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 01429f9431b132..08bb7979a10d85 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -271,8 +271,6 @@ "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", "lightbox.close": "Ябу", - "lightbox.compress": "Кысылган рәсемне карау тәрәзәсе", - "lightbox.expand": "Рәсемне карау тәрәзәсен ачыгыз", "lightbox.next": "Киләсе", "lightbox.previous": "Алдагы", "limited_account_hint.action": "Барыбер профильне күрсәтергә", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a1d3a872dfd91a..3bf8d00248b362 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "Розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "Рухатися вгору списком", "lightbox.close": "Закрити", - "lightbox.compress": "Стиснути поле перегляду зображень", - "lightbox.expand": "Розгорнути поле перегляду зображень", "lightbox.next": "Далі", "lightbox.previous": "Назад", + "lightbox.zoom_in": "Масштаб за реальним розміром", + "lightbox.zoom_out": "Збільшити відповідно до розміру", "limited_account_hint.action": "Усе одно показати профіль", "limited_account_hint.title": "Цей профіль сховали модератори {domain}.", "link_preview.author": "Від {name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9fcd00ddc7c56a..74c46c7b339c82 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -3,7 +3,7 @@ "about.contact": "Liên lạc:", "about.disclaimer": "Mastodon là phần mềm tự do nguồn mở của Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Lý do không được cung cấp", - "about.domain_blocks.preamble": "Mastodon cho phép bạn tương tác nội dung và giao tiếp với mọi người từ bất kỳ máy chủ nào khác trong mạng liên hợp. Còn máy chủ này có những ngoại lệ riêng.", + "about.domain_blocks.preamble": "Mastodon cho phép bạn đọc nội dung và giao tiếp với mọi người từ bất kỳ máy chủ nào. Còn đây là những ngoại lệ trên máy chủ này.", "about.domain_blocks.silenced.explanation": "Nói chung, bạn sẽ không thấy người và nội dung từ máy chủ này, trừ khi bạn tự tìm kiếm hoặc tự theo dõi.", "about.domain_blocks.silenced.title": "Hạn chế", "about.domain_blocks.suspended.explanation": "Dữ liệu từ máy chủ này sẽ không được xử lý, lưu trữ hoặc trao đổi. Mọi tương tác hoặc giao tiếp với người từ máy chủ này đều bị cấm.", @@ -34,9 +34,9 @@ "account.follow_back": "Theo dõi lại", "account.followers": "Người theo dõi", "account.followers.empty": "Chưa có người theo dõi nào.", - "account.followers_counter": "{count, plural, other {{counter} người theo dõi}}", + "account.followers_counter": "{count, plural, other {{counter} Người theo dõi}}", "account.following": "Đang theo dõi", - "account.following_counter": "{count, plural, other {{counter} đang theo dõi}}", + "account.following_counter": "{count, plural, other {{counter} Đang theo dõi}}", "account.follows.empty": "Người này chưa theo dõi ai.", "account.go_to_profile": "Xem hồ sơ", "account.hide_reblogs": "Ẩn tút @{name} đăng lại", @@ -62,7 +62,7 @@ "account.requested_follow": "{name} yêu cầu theo dõi bạn", "account.share": "Chia sẻ @{name}", "account.show_reblogs": "Hiện tút do @{name} đăng lại", - "account.statuses_counter": "{count, plural, other {{counter} tút}}", + "account.statuses_counter": "{count, plural, other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", "account.unblock_short": "Bỏ chặn", @@ -145,7 +145,7 @@ "community.column_settings.remote_only": "Chỉ người ở máy chủ khác", "compose.language.change": "Chọn ngôn ngữ tút", "compose.language.search": "Tìm ngôn ngữ...", - "compose.published.body": "Đã đăng.", + "compose.published.body": "Tút đã được đăng.", "compose.published.open": "Xem lại", "compose.saved.body": "Đã lưu tút.", "compose_form.direct_message_warning_learn_more": "Tìm hiểu thêm", @@ -154,8 +154,8 @@ "compose_form.lock_disclaimer": "Tài khoản của bạn không {locked}. Bất cứ ai cũng có thể theo dõi và xem tút riêng tư của bạn.", "compose_form.lock_disclaimer.lock": "khóa", "compose_form.placeholder": "Bạn đang nghĩ gì?", - "compose_form.poll.duration": "Hết hạn vào", - "compose_form.poll.multiple": "Nhiều lựa chọn", + "compose_form.poll.duration": "Hết hạn", + "compose_form.poll.multiple": "Chọn nhiều", "compose_form.poll.option_placeholder": "Lựa chọn {number}", "compose_form.poll.single": "Chọn một", "compose_form.poll.switch_to_multiple": "Có thể chọn nhiều lựa chọn", @@ -170,30 +170,30 @@ "compose_form.spoiler_placeholder": "Nội dung ẩn (tùy chọn)", "confirmation_modal.cancel": "Hủy bỏ", "confirmations.block.confirm": "Chặn", - "confirmations.delete.confirm": "Xóa bỏ", - "confirmations.delete.message": "Bạn thật sự muốn xóa tút này?", - "confirmations.delete.title": "Xóa tút?", - "confirmations.delete_list.confirm": "Xóa bỏ", - "confirmations.delete_list.message": "Bạn thật sự muốn xóa vĩnh viễn danh sách này?", - "confirmations.delete_list.title": "Xóa danh sách?", + "confirmations.delete.confirm": "Vẫn xóa", + "confirmations.delete.message": "Bạn có chắc muốn xóa tút này?", + "confirmations.delete.title": "Xóa tút", + "confirmations.delete_list.confirm": "Vẫn xóa", + "confirmations.delete_list.message": "Bạn có chắc muốn xóa vĩnh viễn danh sách này?", + "confirmations.delete_list.title": "Xóa danh sách", "confirmations.discard_edit_media.confirm": "Bỏ qua", "confirmations.discard_edit_media.message": "Bạn chưa lưu thay đổi đối với phần mô tả hoặc bản xem trước của media, vẫn bỏ luôn?", "confirmations.edit.confirm": "Sửa", "confirmations.edit.message": "Nội dung tút cũ sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.edit.title": "Viết đè lên tút cũ?", + "confirmations.edit.title": "Viết đè lên tút cũ", "confirmations.logout.confirm": "Đăng xuất", - "confirmations.logout.message": "Bạn có thật sự muốn thoát?", - "confirmations.logout.title": "Đăng xuất?", + "confirmations.logout.message": "Bạn có chắc muốn thoát?", + "confirmations.logout.title": "Đăng xuất", "confirmations.mute.confirm": "Ẩn", "confirmations.redraft.confirm": "Xóa & viết lại", - "confirmations.redraft.message": "Bạn thật sự muốn xóa tút và viết lại? Điều này sẽ xóa mất những lượt thích và đăng lại của tút, cũng như những trả lời sẽ không còn nội dung gốc.", - "confirmations.redraft.title": "Xóa & viết lại?", + "confirmations.redraft.message": "Điều này sẽ khiến những lượt thích và đăng lại của tút bị mất, cũng như những trả lời sẽ không còn nội dung gốc.", + "confirmations.redraft.title": "Xóa & viết lại", "confirmations.reply.confirm": "Trả lời", "confirmations.reply.message": "Nội dung bạn đang soạn thảo sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.reply.title": "Viết đè lên tút cũ?", + "confirmations.reply.title": "Viết đè lên tút cũ", "confirmations.unfollow.confirm": "Bỏ theo dõi", - "confirmations.unfollow.message": "Bạn thật sự muốn bỏ theo dõi {name}?", - "confirmations.unfollow.title": "Bỏ theo dõi?", + "confirmations.unfollow.message": "Bạn có chắc muốn bỏ theo dõi {name}?", + "confirmations.unfollow.title": "Bỏ theo dõi", "content_warning.hide": "Ẩn tút", "content_warning.show": "Nhấn để xem", "conversation.delete": "Xóa tin nhắn này", @@ -227,15 +227,15 @@ "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", "domain_pill.server": "Máy chủ", "domain_pill.their_handle": "Địa chỉ Mastodon:", - "domain_pill.their_server": "Ngôi nhà kỹ thuật số, nơi lưu giữ tút của ai đó.", - "domain_pill.their_username": "Danh tính duy nhất của họ trên máy chủ này. Có thể có tên người dùng giống nhau trên các máy chủ khác.", + "domain_pill.their_server": "Nơi lưu trữ tút của người này.", + "domain_pill.their_username": "Độc nhất trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.", "domain_pill.username": "Tên người dùng", "domain_pill.whats_in_a_handle": "Địa chỉ Mastodon là gì?", "domain_pill.who_they_are": "Vì địa chỉ Mastodon cho biết một người là ai và họ ở đâu, nên bạn có thể tương tác với mọi người trên các nền tảng có .", "domain_pill.who_you_are": "Vì địa chỉ Mastodon cho biết bạn là ai và bạn ở đâu, nên bạn có thể tương tác với mọi người trên các nền tảng có .", "domain_pill.your_handle": "Địa chỉ Mastodon của bạn:", - "domain_pill.your_server": "Ngôi nhà kỹ thuật số, nơi lưu giữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và mang theo người theo dõi của bạn.", - "domain_pill.your_username": "Danh tính duy nhất của bạn trên máy chủ này. Có thể có tên người dùng giống bạn trên các máy chủ khác.", + "domain_pill.your_server": "Nơi lưu trữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và giữ nguyên người theo dõi của bạn.", + "domain_pill.your_username": "Chỉ riêng bạn trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.", "embed.instructions": "Sao chép đoạn mã dưới đây và chèn vào trang web của bạn.", "embed.preview": "Nó sẽ hiển thị như vầy:", "emoji_button.activity": "Hoạt động", @@ -359,7 +359,7 @@ "hints.profiles.see_more_followers": "Xem thêm người theo dõi ở {domain}", "hints.profiles.see_more_follows": "Xem thêm người mà người này theo dõi ở {domain}", "hints.profiles.see_more_posts": "Xem thêm tút ở {domain}", - "hints.threads.replies_may_be_missing": "Lượt trả lời trên máy chủ khác có thể không đầy đủ.", + "hints.threads.replies_may_be_missing": "Lượt trả lời từ máy chủ khác có thể không đầy đủ.", "hints.threads.see_more": "Xem thêm ở {domain}", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", @@ -432,12 +432,12 @@ "keyboard_shortcuts.unfocus": "đưa con trỏ ra khỏi ô soạn thảo hoặc ô tìm kiếm", "keyboard_shortcuts.up": "di chuyển lên trên danh sách", "lightbox.close": "Đóng", - "lightbox.compress": "Thu nhỏ hình", - "lightbox.expand": "Phóng to hình", "lightbox.next": "Tiếp", "lightbox.previous": "Trước", + "lightbox.zoom_in": "Kích cỡ gốc", + "lightbox.zoom_out": "Vừa màn hình", "limited_account_hint.action": "Vẫn cứ xem", - "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên của {domain}.", + "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên {domain}.", "link_preview.author": "Bởi {name}", "link_preview.more_from_author": "Thêm từ {name}", "link_preview.shares": "{count, plural, other {{counter} lượt chia sẻ}}", @@ -533,7 +533,7 @@ "notification.relationships_severance_event.learn_more": "Tìm hiểu thêm", "notification.relationships_severance_event.user_domain_block": "Bạn đã chặn {target}, xóa {followersCount} người theo dõi bạn và {followingCount, plural, other {# người}} theo dõi bạn.", "notification.status": "{name} đăng tút mới", - "notification.update": "{name} đã sửa tút", + "notification.update": "{name} cập nhật tút", "notification_requests.accept": "Chấp nhận", "notification_requests.accept_multiple": "{count, plural, other {Duyệt # yêu cầu…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, other {Yêu cầu cần duyệt}}", @@ -554,7 +554,7 @@ "notification_requests.title": "Thông báo đã lọc", "notification_requests.view": "Hiện thông báo", "notifications.clear": "Xóa hết thông báo", - "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", + "notifications.clear_confirmation": "Bạn có chắc muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.clear_title": "Xóa hết thông báo?", "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Người mới tham gia:", @@ -621,7 +621,7 @@ "onboarding.profile.display_name_hint": "Tên đầy đủ hoặc biệt danh đều được…", "onboarding.profile.lead": "Bạn có thể cài đặt lại trong phần cài đặt, nơi thậm chí còn có nhiều tùy chọn hơn.", "onboarding.profile.note": "Giới thiệu", - "onboarding.profile.note_hint": "Bạn có thể @nhắnriêng ai đó hoặc #hashtags…", + "onboarding.profile.note_hint": "Bạn có thể @aiđó hoặc #hashtags…", "onboarding.profile.save_and_continue": "Lưu và tiếp tục", "onboarding.profile.title": "Thiết lập hồ sơ", "onboarding.profile.upload_avatar": "Tải lên ảnh đại diện", @@ -657,7 +657,7 @@ "poll.voted": "Bạn đã bình chọn rồi", "poll.votes": "{votes, plural, other {# lượt bình chọn}}", "poll_button.add_poll": "Tạo bình chọn", - "poll_button.remove_poll": "Hủy cuộc bình chọn", + "poll_button.remove_poll": "Xóa bình chọn", "privacy.change": "Chọn kiểu tút", "privacy.direct.long": "Những người được nhắc trong tút", "privacy.direct.short": "Người cụ thể", @@ -738,7 +738,7 @@ "report_notification.categories.violation": "Vi phạm nội quy", "report_notification.categories.violation_sentence": "vi phạm nội quy", "report_notification.open": "Mở báo cáo", - "search.no_recent_searches": "Không có tìm kiếm gần đây", + "search.no_recent_searches": "Gần đây chưa tìm gì", "search.placeholder": "Tìm kiếm", "search.quick_action.account_search": "Người có tên {x}", "search.quick_action.go_to_account": "Xem trang {x}", @@ -748,12 +748,12 @@ "search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search_popout.full_text_search_disabled_message": "Không khả dụng trên {domain}.", "search_popout.full_text_search_logged_out_message": "Cần đăng nhập trước.", - "search_popout.language_code": "Mã ngôn ngữ ISO", - "search_popout.options": "Tùy chọn tìm kiếm", + "search_popout.language_code": "mã ngôn ngữ ISO", + "search_popout.options": "Tìm nâng cao", "search_popout.quick_actions": "Thao tác nhanh", - "search_popout.recent": "Tìm kiếm gần đây", + "search_popout.recent": "Bạn đã tìm", "search_popout.specific_date": "ngày cụ thể", - "search_popout.user": "mọi người", + "search_popout.user": "địa chỉ Mastodon", "search_results.accounts": "Mọi người", "search_results.all": "Toàn bộ", "search_results.hashtags": "Hashtag", @@ -789,7 +789,7 @@ "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", "status.embed": "Lấy mã nhúng", "status.favourite": "Thích", - "status.favourites": "{count, plural, other {lượt thích}}", + "status.favourites": "{count, plural, other {Thích}}", "status.filter": "Lọc tút này", "status.history.created": "{name} đăng {date}", "status.history.edited": "{name} đã sửa {date}", @@ -808,7 +808,7 @@ "status.reblog": "Đăng lại", "status.reblog_private": "Đăng lại (Riêng tư)", "status.reblogged_by": "{name} đăng lại", - "status.reblogs": "{count, plural, other {đăng lại}}", + "status.reblogs": "{count, plural, other {Đăng lại}}", "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 6df3cde2085ab6..a7cd0899480b1f 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "取消输入/搜索", "keyboard_shortcuts.up": "在列表中让光标上移", "lightbox.close": "关闭", - "lightbox.compress": "返回图片全览", - "lightbox.expand": "放大查看图片", "lightbox.next": "下一个", "lightbox.previous": "上一个", + "lightbox.zoom_in": "缩放为实际大小", + "lightbox.zoom_out": "缩放到适合窗口大小", "limited_account_hint.action": "仍要显示个人资料", "limited_account_hint.title": "此账号资料已被 {domain} 管理员隐藏。", "link_preview.author": "由 {name}", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 6fc1b9d2673a3d..22f51a84134548 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -398,8 +398,6 @@ "keyboard_shortcuts.unfocus": "把標示移離文字輸入和搜索", "keyboard_shortcuts.up": "在列表往上移動", "lightbox.close": "關閉", - "lightbox.compress": "縮小檢視", - "lightbox.expand": "擴大檢視", "lightbox.next": "下一頁", "lightbox.previous": "上一頁", "limited_account_hint.action": "一律顯示個人檔案", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index d69f54f7c8b984..7f2caeaf4b30c1 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -432,10 +432,10 @@ "keyboard_shortcuts.unfocus": "跳離文字撰寫區塊或搜尋框", "keyboard_shortcuts.up": "向上移動", "lightbox.close": "關閉", - "lightbox.compress": "折疊圖片檢視框", - "lightbox.expand": "展開圖片檢視框", "lightbox.next": "下一步", "lightbox.previous": "上一步", + "lightbox.zoom_in": "縮放至實際大小", + "lightbox.zoom_out": "縮放至合適大小", "limited_account_hint.action": "一律顯示個人檔案", "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", "link_preview.author": "來自 {name}", diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 20249aae9431ce..32a98a37c3be0e 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -11,9 +11,9 @@ kab: invalid: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir. last_attempt: Γur-k yiwen n uɛraḍ-nniḍen kan send ad yettucekkel umiḍan-ik. locked: Amiḍan-ik yettwargel. - not_found_in_database: Tella tuccḍa deg %{authentication_keys} neγ deg wawal uffir. + not_found_in_database: Tella tuccḍa deg %{authentication_keys} neɣ deg wawal uffir. omniauth_user_creation_failure: Tuccḍa lawan n tmerna n umiḍan i timagit-a. - pending: Amiḍan-inek mazal-it deg ɛiwed n tmuγli. + pending: Amiḍan-inek·inem mazal-it deg ɛiwed n tmuɣli. timeout: Tiɣimit n tuqqna tezri. Ma ulac aɣilif ɛiwed tuqqna akken ad tkemmleḍ. unauthenticated: Ilaq ad teqqneḍ neɣ ad tjerrḍeḍ send ad tkemmelḍ. unconfirmed: Ilaq ad wekdeḍ tansa-inek·inem imayl send ad tkemmelḍ. diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml index 13d8d93258dc35..fa9e1c540ad236 100644 --- a/config/locales/doorkeeper.kab.yml +++ b/config/locales/doorkeeper.kab.yml @@ -125,10 +125,10 @@ kab: title: Tlaq tsiregt n OAuth scopes: admin:read: ad iɣeṛ akk isefka ɣef uqeddac - admin:write: ẓreg akk isefka γef uqeddac - follow: beddel assaγen n umiḍan - push: ṭṭef-d alɣuten-ik·im yettwademren - read: γeṛ akk isefka n umiḍan-ik + admin:write: ad iẓreg akk isefka ɣef uqeddac + follow: ad ibeddel assaɣen n umiḍan + push: ad iṭṭef-d alɣuten-ik·im yettwademren + read: ad iɣeṛ akk isefka n umiḍan-ik·im read:accounts: ẓer isallen n yimiḍanen read:blocks: ẓer imiḍanen i tesḥebseḍ read:bookmarks: ẓer ticraḍ-ik @@ -139,10 +139,10 @@ kab: read:notifications: ad iẓer alɣuten-inek·inem read:reports: ẓer ineqqisen-ik·im read:search: anadi deg umkan-ik·im - read:statuses: ẓer meṛṛa tisuffaɣ + read:statuses: ad iẓer meṛṛa tisuffaɣ write: beddel meṛṛa isefka n umiḍan-ik write:accounts: ad iẓreg amaɣnu-ik·im - write:blocks: seḥbes imiḍanen d tγula + write:blocks: ad iseḥbes imiḍanen akked tɣula write:bookmarks: ad yernu tisuffaɣ ɣer ticraḍ write:filters: ad isnulfu imsizedgen write:follows: ḍfeṛ imdanen diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 8aac7cbb47b2c2..0325757dca4390 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1203,7 +1203,7 @@ es-MX: caches: El contenido que ha sido almacenado en caché por otros servidores puede persistir data_removal: Tus publicaciones y el resto de datos se eliminarán definitivamente email_change_html: Puedes cambiar tu dirección de correo electrónico sin eliminar tu cuenta - email_contact_html: Si aún no te ha llegado, puedes escribir a %{email} para pedir ayuda + email_contact_html: Si todavía no te ha llegado, puedes escribir a %{email} para pedir ayuda email_reconfirmation_html: Si no te ha llegado el correo de confirmación, puedes volver a solicitarlo irreversible: No podrás restaurar ni reactivar tu cuenta more_details_html: Para más detalles, ver la política de privacidad. diff --git a/config/locales/ja.yml b/config/locales/ja.yml index ed6293e1cabaa9..cdc1fd18a80043 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -22,6 +22,8 @@ ja: admin: account_actions: action: アクションを実行 + already_silenced: すでに制限されているアカウントです。 + already_suspended: すでに停止されているアカウントです。 title: "%{acct}さんに対してアクションを実行" account_moderation_notes: create: 書き込む @@ -589,6 +591,7 @@ ja: suspend_description_html: アカウントとそのすべての内容にアクセスできなくなり、最終的に削除され、やり取りは不可能になります。 30日以内であれば元に戻すことができます。このアカウントに対するすべての通報をクローズします。 actions_description_html: このレポートへのアクションを決定してください。アカウントへ懲罰的な措置を取った場合、Spanカテゴリが選択されている場合を除き、メール通知が送信されます。 actions_description_remote_html: この通報を解決するためのアクションを選択してください。これはあなたのサーバーがこのリモートアカウントと通信し、そのコンテンツを処理する時のみ影響します。 + actions_no_posts: 削除対象となる投稿がレポートに含まれていません add_to_report: 通報にさらに追加 already_suspended_badges: local: このサーバーで停止済み diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 7044983ac9fe90..88193f8434e19f 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -222,8 +222,8 @@ kab: shortcode: Tangalt tawezlant title: Imujiten udmawanen uncategorized: War-taggayt - unlist: Kkes seg wumuγ - unlisted: Yettwakkes seg wumuγ + unlist: Kkes seg wumuɣ + unlisted: Yettwakkes seg wumuɣ update_failed_msg: Ur izmir ara ad-issali umuji-a upload: Sali dashboard: @@ -710,8 +710,8 @@ kab: privacy_policy: title: Tasertit tabaḍnit redirects: - prompt: Ma tumneḍ aseɣwen-a, sit fell-as akken ad tkemmleḍ. - title: Aql-ik·em ad teffɣeḍ seg %{instance}. + prompt: Ma tumneḍ asaɣ-a, sit fell-as akken ad tkemmleḍ. + title: Ad teffɣeḍ seg %{instance}. relationships: activity: Armud n umiḍan followers: Imeḍfaṛen diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 3d1f1a61e2447d..4136877edeb549 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -874,8 +874,12 @@ lad: message_html: "Tu magazinaje de objektos es mal konfigurado. La privasita de tus utilizadores esta en riziko." tags: moderation: + pending_review: Revizion esta asperando title: Estado + usable: Uzavle name: Nombre + newest: Mas muevos + oldest: Mas viejos reset: Reinisya review: Estado de revizion search: Bushka @@ -1027,7 +1031,9 @@ lad: guide_link_text: Todos pueden kontribuir. sensitive_content: Kontenido sensivle application_mailer: + notification_preferences: Troka preferensyas de posta salutation: "%{name}," + settings: 'Troka preferensyas de posta: %{link}' unsubscribe: Dezabona view: 'Mira:' view_profile: Ve profil @@ -1047,6 +1053,7 @@ lad: hint_html: Una koza mas! Tenemos ke konfirmar ke eres umano (para evitar spam!). Rezolve el CAPTCHA abasho i klika "Kontinua". title: Kontrolo de sigurita confirmations: + awaiting_review: Tu adreso de posta tiene sido konfirmado! La taifa de %{domain} esta revizando tu enrejistrasyon. Risiviras un meil si acheten tu kuento! awaiting_review_title: Estamos revizando tu enrejistramiento clicking_this_link: klikando en este atadijo login_link: konektate kon kuento @@ -1054,6 +1061,7 @@ lad: redirect_to_app_html: Seras readresado a la aplikasyon %{app_name}. Si esto no afita, aprova %{clicking_this_link} o regresa manualmente a la aplikasyon. registration_complete: Tu enrejistrasyon en %{domain} ya esta kompletada! welcome_title: Bienvenido, %{name}! + wrong_email_hint: Si este adreso de posta es inkorekto, puedes trokarlo en las preferensyas del kuento. delete_account: Efasa kuento delete_account_html: Si keres supremir tu kuento, puedes ir aki. Seras pedido de una konfirmasyon. description: @@ -1096,8 +1104,10 @@ lad: security: Sigurita set_new_password: Establese muevo kod setup: + email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki. email_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki. link_not_received: No risivites un atadijo? + new_confirmation_instructions_sent: Resiviras un muevo mesaj de posta elektronika kon el atadjio de konfirmasyon en unos minutos! title: Reviza tu kuti de arivo sign_in: preamble_html: Konektate kon tus kredensiales de %{domain}. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki. @@ -1109,11 +1119,14 @@ lad: status: account_status: Estado del kuento functional: Tu kuento esta kompletamente funksyonal. + pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada. redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}. self_destruct: Deke %{domain} va a serrarse, solo tendras akseso limitado a tu kuento. view_strikes: Ve amonestamientos pasados kontra tu kuento too_fast: Formulario enviado demaziado rapido, aprovalo de muevo. use_security_key: Uza la yave de sigurita + author_attribution: + more_from_html: Mas de %{name} challenge: confirm: Kontinua hint_html: "Konsejo: No retornaremos a demandarte por el kod durante la sigiente ora." @@ -1150,6 +1163,9 @@ lad: before: 'Antes de kontinuar, por favor melda kon atensyon las sigientes notas:' caches: El kontenido ke tiene sido magazinado en kashe por otros sirvidores puede persistir data_removal: Tus publikasyones i el resto de datos se supremiran definitivamente + email_change_html: Puedes trokar tu adreso de posta elektronika sin supremir tu kuento + email_contact_html: Si ainda no te tiene parvenido, puedes eskrivir a %{email} para pider ayuda + email_reconfirmation_html: Si no te tiene parvenido la posta de konfirmasyon, puedes retornar a solisitarlo irreversible: No podras restaurar ni reaktivar tu kuento more_details_html: Para mas detalyos, ver la politika de privasita. username_available: Tu nombre de utilizador retornara a estar desponivle @@ -1380,6 +1396,7 @@ lad: authentication_methods: otp: aplikasyon de autentifikasyon en dos pasos password: kod + sign_in_token: kodiche de sigurita por posta elektronika webauthn: yaves de sigurita description_html: Si ves una aktivita ke no rekoneses, konsidera trokar tu kod i kapasitar la autentifikasyon en dos pasos. empty: No ay estoria de autentifikasyon desponivle @@ -1390,6 +1407,7 @@ lad: unsubscribe: action: Si, dezabona complete: Dezabonado + confirmation_html: Estas siguro de ke ya no keres risivir %{type} de Mastodon en %{domain} a tu posta elektronika %{email}? Syempre podras reabonarte dizde las opsyones de avizos por posta.. emails: notification_emails: favourite: avizos de favoritos por posta @@ -1864,6 +1882,7 @@ lad: invalid_otp_token: Kodiche de dos pasos no valido otp_lost_help_html: Si pedriste akseso a los dos, puedes kontaktarte kon %{email} rate_limited: Demaziadas provas de autentifikasyon, aprova de muevo dempues. + seamless_external_login: Estas konektado por un servisyo eksterno i estonses la konfigurasyon de kod i konto de posta no estan disponivles. signed_in_as: 'Konektado komo:' verification: extra_instructions_html: Konsejo: El atadijo en tu web puede ser invizivle. La parte importante es rel="me", ke evita la suplantasyon de identita en sitios kon kontenido jenerado por el utilizador. Puedes inkluzo uzar una etiketa atadijo en la kavesera de la pajina en vez de a, ama el HTML deve ser aksesivle sin exekutar JavaScript. diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index 203b02371539a8..f390d42132c615 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -92,7 +92,7 @@ kab: setting_display_media_default: Akk-a kan setting_display_media_hide_all: Ffer-iten akk setting_display_media_show_all: Sken-iten-id akk - setting_hide_network: Ffer azetta-k·m + setting_hide_network: Ffer azetta-k·m inmetti setting_theme: Asental n wesmel setting_use_pending_items: Askar aleɣwayan sign_in_token_attempt: Tangalt n tɣellist diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 2a381534ba5c2a..94e387107abb59 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -237,6 +237,7 @@ lad: warn: Eskonde kon una avertensya form_admin_settings: activity_api_enabled: Publika estatistikas adjustadas sovre la aktivita del utilizador kon la API + app_icon: Ikono de aplikasyon backups_retention_period: Periodo de retensyon de la dosya de utilizador bootstrap_timeline_accounts: Rekomenda siempre estos kuentos a muevos utilizadores closed_registrations_message: Mesaj personalizado kuando las enrejistrasyones no estan desponivles diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index eab025c6655466..e67520901752df 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -4,12 +4,12 @@ vi: hints: account: attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai. - discoverable: Các tút và hồ sơ công khai của bạn có thể được giới thiệu hoặc đề xuất ở nhiều khu vực khác nhau của Mastodon và hồ sơ của bạn có thể được đề xuất cho những người dùng khác. + discoverable: Hồ sơ và tút công khai của bạn được đề xuất cho những người dùng Mastodon khác. display_name: Tên đầy đủ hoặc biệt danh đều được. fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. - indexable: Tút công khai của bạn sẽ xuất hiện khi tìm kiếm trên Mastodon. Những người đã tương tác với tút của bạn có thể tìm kiếm chúng. - note: 'Bạn có thể @nhắnriêng ai đó hoặc #hashtags.' - show_collections: Mọi người sẽ biết những bạn theo dõi và người theo dõi bạn. Những người bạn theo dõi sẽ vẫn thấy rằng bạn theo dõi họ. + indexable: Mọi người có thể tìm kiếm và tương tác với những tút công khai của bạn trên Mastodon. + note: 'Bạn có thể @aiđó hoặc #hashtags.' + show_collections: Mọi người sẽ biết những bạn theo dõi và người theo dõi bạn. unlocked: Mọi người sẽ theo dõi bạn mà không cần bạn cho phép. account_alias: acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ @@ -214,7 +214,7 @@ vi: setting_default_sensitive: Đánh dấu media nhạy cảm setting_delete_modal: Hỏi trước khi xóa tút setting_disable_hover_cards: Tắt thẻ xem trước hồ sơ - setting_disable_swiping: Không dùng chuyển động vuốt + setting_disable_swiping: Tắt thao tác vuốt setting_display_media: Media nhạy cảm setting_display_media_default: Mặc định setting_display_media_hide_all: Ẩn toàn bộ @@ -311,7 +311,7 @@ vi: text: Nội quy settings: indexable: Cho phép hiện hồ sơ trong công cụ tìm kiếm - show_application: Cho phép hiện ứng dụng dùng để đăng tút + show_application: Hiện ứng dụng dùng để đăng tút tag: listable: Cho phép xuất hiện trong tìm kiếm và đề xuất name: Hashtag diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 98696aef7c8b63..83531c65617988 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1037,7 +1037,7 @@ vi: remove: Bỏ liên kết bí danh appearance: advanced_web_interface: Bố cục - advanced_web_interface_hint: Bố cục nhiều cột cho phép bạn chuyển bố cục hiển thị thành nhiều cột khác nhau. Thích hợp với màn hình rộng. + advanced_web_interface_hint: Chia giao diện thành nhiều cột, phù hợp với màn hình rộng. animations_and_accessibility: Hiệu ứng confirmation_dialogs: Hộp thoại xác nhận discovery: Khám phá @@ -1262,7 +1262,7 @@ vi: add_new: Thêm mới errors: limit: Bạn đã đạt tới số lượng hashtag tối đa - hint_html: "Làm nổi bật những hashtag thường dùng. Một công cụ tuyệt vời để theo dõi các tác phẩm sáng tạo và dự án dài hạn của bạn, các hashtag thường dùng sẽ hiển thị nổi bật trên hồ sơ của bạn và cho phép truy cập nhanh vào các tút." + hint_html: "Làm nổi bật những hashtag thường dùng. Một công cụ tuyệt vời để theo dõi các tác phẩm sáng tạo và dự án dài hạn của bạn, cũng như giúp truy cập nhanh vào các tút." filters: contexts: account: Trang hồ sơ @@ -1555,13 +1555,13 @@ vi: posting_defaults: Mặc định cho tút public_timelines: Bảng tin privacy: - hint_html: "Tùy chỉnh cách mọi người tìm thấy hồ sơ và các tút của bạn. Nhiều tính năng trong Mastodon có thể giúp bạn tiếp cận nhiều đối tượng hơn khi được bật. Hãy xem lại các cài đặt này để đảm bảo chúng phù hợp với bạn." + hint_html: "Tùy chỉnh cách mọi người tìm thấy hồ sơ và tút của bạn. Hãy đảm bảo các thiết lập sau phù hợp với bạn." privacy: Riêng tư privacy_hint_html: Kiểm soát mức độ chi tiết bạn muốn tiết lộ. Mọi người khám phá các hồ sơ thú vị và các ứng dụng thú vị bằng cách theo dõi những người khác và xem họ đăng từ ứng dụng nào, nhưng có thể bạn muốn ẩn nó đi. reach: Tiếp cận reach_hint_html: Kiểm soát cách bạn được khám phá và theo dõi. Bạn có muốn tút của mình xuất hiện trên màn hình Khám phá không? Bạn có muốn người khác nhìn thấy bạn trong các đề xuất theo dõi của họ không? Bạn muốn tự động chấp nhận tất cả những người theo dõi mới hay tự duyệt từng người theo dõi? search: Tìm kiếm - search_hint_html: Kiểm soát cách tìm thấy bạn. Bạn có muốn mọi người tìm thấy bạn bằng những gì bạn đã đăng công khai không? Bạn có muốn những người bên ngoài Mastodon tìm thấy hồ sơ của bạn khi tìm kiếm trên web không? Xin lưu ý rằng không thể đảm bảo loại trừ hoàn toàn khỏi tất cả các công cụ tìm kiếm đối với thông tin công khai. + search_hint_html: Kiểm soát cách tìm thấy bạn. Bạn có muốn mọi người tìm thấy bạn bằng những gì bạn đã đăng công khai không? Bạn có muốn những người bên ngoài Mastodon tìm thấy hồ sơ của bạn khi tìm kiếm trên web không? Lưu ý là không thể đảm bảo tránh khỏi các công cụ tìm kiếm đối với thông tin công khai. title: Riêng tư và tiếp cận privacy_policy: title: Chính sách bảo mật @@ -1675,7 +1675,7 @@ vi: preferences: Chung profile: Hồ sơ relationships: Quan hệ - severed_relationships: Mối quan hệ bị cắt đứt + severed_relationships: Quan hệ bị cắt đứt statuses_cleanup: Tự động xóa tút cũ strikes: Lần cảnh cáo two_factor_authentication: Xác minh 2 bước @@ -1688,7 +1688,7 @@ vi: user_domain_block: Bạn đã chặn %{target_name} lost_followers: Mất người theo dõi lost_follows: Mất người đang theo dõi - preamble: Bạn có thể mất số lượt theo dõi và người theo dõi khi chặn một máy chủ hoặc khi kiểm duyệt viên của bạn quyết định tạm dừng máy chủ từ xa. Khi điều đó xảy ra, bạn sẽ có thể tải xuống danh sách các mối quan hệ đã bị cắt đứt, để kiểm tra và nhập vào máy chủ khác. + preamble: Khi bạn hoặc kiểm duyệt viên máy chủ của bạn chặn một máy chủ, người bạn đang theo dõi và người theo dõi bạn có thể sẽ bị mất. Khi điều đó xảy ra, hãy vào đây tải xuống danh sách các mối quan hệ đã bị cắt đứt, và nhập thủ công. purged: Thông tin về máy chủ này đã bị quản trị viên máy chủ của bạn xóa sạch. type: Sự kiện statuses: @@ -1769,7 +1769,7 @@ vi: contrast: Mastodon (Tương phản) default: Mastodon (Tối) mastodon-light: Mastodon (Sáng) - system: Tự động (chủ đề hệ thống) + system: Theo hệ thống time: formats: default: "%-d.%m.%Y %H:%M" @@ -1905,7 +1905,7 @@ vi: seamless_external_login: Bạn đã đăng nhập thông qua một dịch vụ bên ngoài, vì vậy mật khẩu và email không khả dụng. signed_in_as: 'Đăng nhập bằng:' verification: - extra_instructions_html: Mẹo: Liên kết trên trang web của bạn có thể ẩn. Phần quan trọng là rel="me" ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn thậm chí có thể sử dụng một thẻ link trên header của trang thay vì a, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript. + extra_instructions_html: Mẹo: Có thể ẩn liên kết trên trang web của bạn. Quan trọng là rel="me" giúp ngăn chặn việc mạo danh trên các trang web có nội dung do người dùng tạo. Bạn cũng có thể sử dụng một thẻ link trên header của trang thay vì a, nhưng HTML phải có thể truy cập được mà không cần thực thi JavaScript. here_is_how: Cách thực hiện hint_html: "Xác minh danh tính trên Mastodon là dành cho tất cả mọi người. Dựa trên các tiêu chuẩn web mở, miễn phí bây giờ và mãi mãi. Tất cả những gì bạn cần là một trang web cá nhân để mọi người nhận ra bạn. Khi bạn liên kết đến trang web này từ hồ sơ của mình, chúng tôi sẽ kiểm tra xem trang web đó có liên kết lại với hồ sơ của bạn hay không và hiển thị một chỉ báo trực quan trên đó." instructions_html: Sao chép và dán mã bên dưới vào mã nguồn trang web của bạn. Sau đó, thêm địa chỉ trang web của bạn vào một trong các trường metadata trên hồ sơ của bạn từ tab "Sửa hồ sơ" và lưu thay đổi. @@ -1918,7 +1918,7 @@ vi: error: Có vấn đề khi thêm khóa bảo mật. Xin thử lại. success: Đã thêm khóa bảo mật mới thành công. delete: Xóa - delete_confirmation: Bạn thật sự muốn xóa khóa bảo mật này? + delete_confirmation: Bạn có chắc muốn xóa khóa bảo mật này? description_html: Nếu bạn kích hoạt khóa bảo mật, bạn sẽ cần dùng một trong những khóa bảo mật đó mỗi khi đăng nhập. destroy: error: Có vấn đề khi xóa khóa bảo mật. Xin thử lại. From 11eae691ba91c2e36ce7cbdab18bf5a60a4fb9c8 Mon Sep 17 00:00:00 2001 From: Tim Campbell Date: Mon, 23 Sep 2024 10:55:35 +0200 Subject: [PATCH 086/467] Feature more otel customization (#31998) --- config/initializers/opentelemetry.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb index d121a95a366370..8edce03b909914 100644 --- a/config/initializers/opentelemetry.rb +++ b/config/initializers/opentelemetry.rb @@ -56,12 +56,13 @@ }, }) - prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon') + prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon') + separator = ENV.fetch('OTEL_SERVICE_NAME_SEPARATOR', '/') c.service_name = case $PROGRAM_NAME - when /puma/ then "#{prefix}/web" + when /puma/ then "#{prefix}#{separator}web" else - "#{prefix}/#{$PROGRAM_NAME.split('/').last}" + "#{prefix}#{separator}#{$PROGRAM_NAME.split('/').last}" end c.service_version = Mastodon::Version.to_s end From 770ec9240a8ec4f9a554533821e8b9a60be71bdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:02:16 +0000 Subject: [PATCH 087/467] Update Yarn to v4.5.0 (#31914) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ea0c0246cb7b0b..08fec76465a85a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.4.1", + "packageManager": "yarn@4.5.0", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index 64947749a17ad8..d573c9b2845139 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.4.1", + "packageManager": "yarn@4.5.0", "engines": { "node": ">=18" }, From 5d6a3f2cb07de926da007e855e24ee852dc17b91 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Sep 2024 11:13:51 +0200 Subject: [PATCH 088/467] Update dependency google-protobuf (#32029) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8fece04a6dbf79..8ba091038ddf04 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -289,7 +289,7 @@ GEM raabro (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) - google-protobuf (3.25.4) + google-protobuf (3.25.5) googleapis-common-protos-types (1.15.0) google-protobuf (>= 3.18, < 5.a) haml (6.3.0) From cd7b670cd8de145510091c5737f5ed158e16cd00 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:18:04 -0400 Subject: [PATCH 089/467] Reduce factory creation in `User#reset_password!` spec (#32021) --- spec/models/user_spec.rb | 45 +++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 972453cd690835..d28e6658f1f6c2 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -434,7 +434,9 @@ def within_duration_window_days end describe '#reset_password!' do - subject(:user) { Fabricate(:user, password: 'foobar12345') } + subject(:user) { Fabricate(:user, password: original_password) } + + let(:original_password) { 'foobar12345' } let!(:session_activation) { Fabricate(:session_activation, user: user) } let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) } @@ -442,31 +444,40 @@ def within_duration_window_days let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } - before do - allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub) - user.reset_password! - end + before { stub_redis } + + it 'changes the password immediately and revokes related access' do + expect { user.reset_password! } + .to remove_activated_sessions + .and remove_active_user_tokens + .and remove_user_web_subscriptions - it 'changes the password immediately' do - expect(user.external_or_valid_password?('foobar12345')).to be false + expect(user) + .to_not be_external_or_valid_password(original_password) + expect { session_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { web_push_subscription.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(redis_pipeline_stub) + .to have_received(:publish).with("timeline:access_token:#{access_token.id}", Oj.dump(event: :kill)).once end - it 'deactivates all sessions' do - expect(user.session_activations.count).to eq 0 - expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound) + def remove_activated_sessions + change(user.session_activations, :count).to(0) end - it 'revokes all access tokens' do - expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0 + def remove_active_user_tokens + change { Doorkeeper::AccessToken.active_for(user).count }.to(0) end - it 'revokes streaming access for all access tokens' do - expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", Oj.dump(event: :kill)).once + def remove_user_web_subscriptions + change { Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count }.to(0) end - it 'removes push subscriptions' do - expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0 - expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound) + def stub_redis + allow(redis) + .to receive(:pipelined) + .and_yield(redis_pipeline_stub) end end From 66ed7ea4b5a5c022da94eca9cb5931eb4151080d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:20:43 -0400 Subject: [PATCH 090/467] Move status creation to "with rss" context in accounts request spec (#32020) --- spec/requests/accounts_spec.rb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/spec/requests/accounts_spec.rb b/spec/requests/accounts_spec.rb index e657ae60602bda..afd9ac80e20863 100644 --- a/spec/requests/accounts_spec.rb +++ b/spec/requests/accounts_spec.rb @@ -46,21 +46,6 @@ describe 'GET to short username paths' do context 'with existing statuses' do - let!(:status) { Fabricate(:status, account: account) } - let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } - let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } - let!(:status_media) { Fabricate(:status, account: account) } - let!(:status_pinned) { Fabricate(:status, account: account) } - let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } - let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } - let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } - - before do - status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) - account.pinned_statuses << status_pinned - account.pinned_statuses << status_private - end - context 'with HTML' do let(:format) { 'html' } @@ -207,6 +192,21 @@ context 'with RSS' do let(:format) { 'rss' } + let!(:status) { Fabricate(:status, account: account) } + let!(:status_reply) { Fabricate(:status, account: account, thread: Fabricate(:status)) } + let!(:status_self_reply) { Fabricate(:status, account: account, thread: status) } + let!(:status_media) { Fabricate(:status, account: account) } + let!(:status_pinned) { Fabricate(:status, account: account) } + let!(:status_private) { Fabricate(:status, account: account, visibility: :private) } + let!(:status_direct) { Fabricate(:status, account: account, visibility: :direct) } + let!(:status_reblog) { Fabricate(:status, account: account, reblog: Fabricate(:status)) } + + before do + status_media.media_attachments << Fabricate(:media_attachment, account: account, type: :image) + account.pinned_statuses << status_pinned + account.pinned_statuses << status_private + end + context 'with a normal account in an RSS request' do before do get short_account_path(username: account.username, format: format) From 447d0a3e880221973fc81840c9ba5e3cc6c06dcb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 05:27:53 -0400 Subject: [PATCH 091/467] Remove double no-records cases in `api/v1/admin` req specs (#32014) --- .../v1/admin/canonical_email_blocks_spec.rb | 22 ++++++++++--------- .../api/v1/admin/domain_allows_spec.rb | 19 ++++++++-------- .../api/v1/admin/domain_blocks_spec.rb | 22 ++++++++++--------- .../api/v1/admin/email_domain_blocks_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/ip_blocks_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/reports_spec.rb | 22 ++++++++++--------- spec/requests/api/v1/admin/tags_spec.rb | 20 +++++++++-------- 7 files changed, 81 insertions(+), 68 deletions(-) diff --git a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb index eaa011d5167716..25af0a26afef4d 100644 --- a/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb +++ b/spec/requests/api/v1/admin/canonical_email_blocks_spec.rb @@ -20,19 +20,16 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no canonical email block' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -43,7 +40,12 @@ it 'returns the correct canonical email hashes' do subject - expect(response.parsed_body.pluck(:canonical_email_hash)).to match_array(expected_email_hashes) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body.pluck(:canonical_email_hash)) + .to match_array(expected_email_hashes) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/domain_allows_spec.rb b/spec/requests/api/v1/admin/domain_allows_spec.rb index eb5128e420834d..fba1eb15d373fb 100644 --- a/spec/requests/api/v1/admin/domain_allows_spec.rb +++ b/spec/requests/api/v1/admin/domain_allows_spec.rb @@ -20,18 +20,14 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no allowed domains' do it 'returns an empty body' do subject + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') expect(response.parsed_body).to be_empty end end @@ -51,7 +47,12 @@ it 'returns the correct allowed domains' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 1a506bd9bebca7..029de72fd7fd5a 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -20,19 +20,16 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no domain blocks' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -66,7 +63,12 @@ it 'returns the expected domain blocks' do subject - expect(response.parsed_body).to match_array(expected_responde) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_responde) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb index 3f51a3ea2d4fb6..2788a45a4a2991 100644 --- a/spec/requests/api/v1/admin/email_domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/email_domain_blocks_spec.rb @@ -21,19 +21,16 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no email domain block' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -44,7 +41,12 @@ it 'return the correct blocked email domains' do subject - expect(response.parsed_body.pluck(:domain)).to match_array(blocked_email_domains) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body.pluck(:domain)) + .to match_array(blocked_email_domains) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/ip_blocks_spec.rb b/spec/requests/api/v1/admin/ip_blocks_spec.rb index c096aa33283cae..aa3db339154fa0 100644 --- a/spec/requests/api/v1/admin/ip_blocks_spec.rb +++ b/spec/requests/api/v1/admin/ip_blocks_spec.rb @@ -20,19 +20,16 @@ it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong role', 'Moderator' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there is no ip block' do it 'returns an empty body' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -60,7 +57,12 @@ it 'returns the correct blocked ips' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with limit param' do diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index a0e7b0a369a3e1..987f0eda7fb816 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -19,19 +19,16 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no reports' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -66,7 +63,12 @@ it 'returns all unresolved reports' do subject - expect(response.parsed_body).to match_array(expected_response) + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to match_array(expected_response) end context 'with resolved param' do diff --git a/spec/requests/api/v1/admin/tags_spec.rb b/spec/requests/api/v1/admin/tags_spec.rb index 696a11da6736bc..3a57432af78c48 100644 --- a/spec/requests/api/v1/admin/tags_spec.rb +++ b/spec/requests/api/v1/admin/tags_spec.rb @@ -20,19 +20,16 @@ it_behaves_like 'forbidden for wrong scope', 'write:statuses' it_behaves_like 'forbidden for wrong role', '' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - expect(response.content_type) - .to start_with('application/json') - end - context 'when there are no tags' do it 'returns an empty list' do subject - expect(response.parsed_body).to be_empty + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to be_empty end end @@ -48,6 +45,11 @@ it 'returns the expected tags' do subject + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') tags.each do |tag| expect(response.parsed_body.find { |item| item[:id] == tag.id.to_s && item[:name] == tag.name }).to_not be_nil end From 2b4bda800448337c3eb07b679e3e1031ea301102 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 06:44:52 -0400 Subject: [PATCH 092/467] Add `response_avatar_link` helper to webfinger request spec (#31999) --- spec/requests/well_known/webfinger_spec.rb | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/spec/requests/well_known/webfinger_spec.rb b/spec/requests/well_known/webfinger_spec.rb index 6880ba4b5895e5..aeff56aebfa955 100644 --- a/spec/requests/well_known/webfinger_spec.rb +++ b/spec/requests/well_known/webfinger_spec.rb @@ -168,10 +168,12 @@ it 'returns avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to_not be_nil - expect(avatar_link[:type]).to eq alice.avatar.content_type - expect(avatar_link[:href]).to eq Addressable::URI.new(host: Rails.configuration.x.local_domain, path: alice.avatar.to_s, scheme: 'https').to_s + expect(response_avatar_link) + .to be_present + .and include( + type: eq(alice.avatar.content_type), + href: eq(Addressable::URI.new(host: Rails.configuration.x.local_domain, path: alice.avatar.to_s, scheme: 'https').to_s) + ) end context 'with limited federation mode' do @@ -182,8 +184,8 @@ it 'does not return avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end @@ -197,8 +199,8 @@ it 'does not return avatar in response' do perform_request! - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end end @@ -212,8 +214,8 @@ end it 'does not return avatar in response' do - avatar_link = get_avatar_link(response.parsed_body) - expect(avatar_link).to be_nil + expect(response_avatar_link) + .to be_nil end end @@ -247,7 +249,9 @@ private - def get_avatar_link(json) - json[:links].find { |link| link[:rel] == 'http://webfinger.net/rel/avatar' } + def response_avatar_link + response + .parsed_body[:links] + .find { |link| link[:rel] == 'http://webfinger.net/rel/avatar' } end end From bbf77522569ad284893d2380d0b688d361391889 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 06:45:34 -0400 Subject: [PATCH 093/467] Combine assertions in `Notification` model spec (#32015) --- spec/models/notification_spec.rb | 127 +++++++++++++++---------------- 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index d498ee02a556ec..67c85b40f37e2f 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -252,88 +252,83 @@ ] end - context 'with a preloaded target status' do - it 'preloads mention' do - expect(subject[0].type).to eq :mention - expect(subject[0].association(:mention)).to be_loaded - expect(subject[0].mention.association(:status)).to be_loaded + context 'with a preloaded target status and a cached status' do + it 'preloads association records and replaces association records' do + expect(subject) + .to contain_exactly( + mention_attributes, + status_attributes, + reblog_attributes, + follow_attributes, + follow_request_attributes, + favourite_attributes, + poll_attributes + ) end - it 'preloads status' do - expect(subject[1].type).to eq :status - expect(subject[1].association(:status)).to be_loaded + def mention_attributes + have_attributes( + type: :mention, + target_status: eq(mention.status).and(have_loaded_association(:account)), + mention: have_loaded_association(:status) + ).and(have_loaded_association(:mention)) end - it 'preloads reblog' do - expect(subject[2].type).to eq :reblog - expect(subject[2].association(:status)).to be_loaded - expect(subject[2].status.association(:reblog)).to be_loaded + def status_attributes + have_attributes( + type: :status, + target_status: eq(status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:status)) end - it 'preloads follow as nil' do - expect(subject[3].type).to eq :follow - expect(subject[3].target_status).to be_nil + def reblog_attributes + have_attributes( + type: :reblog, + status: have_loaded_association(:reblog), + target_status: eq(reblog.reblog).and(have_loaded_association(:account)) + ).and(have_loaded_association(:status)) end - it 'preloads follow_request as nill' do - expect(subject[4].type).to eq :follow_request - expect(subject[4].target_status).to be_nil + def follow_attributes + have_attributes( + type: :follow, + target_status: be_nil + ) end - it 'preloads favourite' do - expect(subject[5].type).to eq :favourite - expect(subject[5].association(:favourite)).to be_loaded - expect(subject[5].favourite.association(:status)).to be_loaded + def follow_request_attributes + have_attributes( + type: :follow_request, + target_status: be_nil + ) end - it 'preloads poll' do - expect(subject[6].type).to eq :poll - expect(subject[6].association(:poll)).to be_loaded - expect(subject[6].poll.association(:status)).to be_loaded - end - end - - context 'with a cached status' do - it 'replaces mention' do - expect(subject[0].type).to eq :mention - expect(subject[0].target_status.association(:account)).to be_loaded - expect(subject[0].target_status).to eq mention.status - end - - it 'replaces status' do - expect(subject[1].type).to eq :status - expect(subject[1].target_status.association(:account)).to be_loaded - expect(subject[1].target_status).to eq status - end - - it 'replaces reblog' do - expect(subject[2].type).to eq :reblog - expect(subject[2].target_status.association(:account)).to be_loaded - expect(subject[2].target_status).to eq reblog.reblog - end - - it 'replaces follow' do - expect(subject[3].type).to eq :follow - expect(subject[3].target_status).to be_nil + def favourite_attributes + have_attributes( + type: :favourite, + favourite: have_loaded_association(:status), + target_status: eq(favourite.status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:favourite)) end - it 'replaces follow_request' do - expect(subject[4].type).to eq :follow_request - expect(subject[4].target_status).to be_nil - end - - it 'replaces favourite' do - expect(subject[5].type).to eq :favourite - expect(subject[5].target_status.association(:account)).to be_loaded - expect(subject[5].target_status).to eq favourite.status - end - - it 'replaces poll' do - expect(subject[6].type).to eq :poll - expect(subject[6].target_status.association(:account)).to be_loaded - expect(subject[6].target_status).to eq poll.status + def poll_attributes + have_attributes( + type: :poll, + poll: have_loaded_association(:status), + target_status: eq(poll.status).and(have_loaded_association(:account)) + ).and(have_loaded_association(:poll)) end end end end end + +RSpec::Matchers.define :have_loaded_association do |association| + match do |record| + record.association(association).loaded? + end + + failure_message do |record| + "expected #{record} to have loaded association #{association} but it did not." + end +end From b5bdc69f7ba75852e6de651d2cd16e1e8897823f Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 23 Sep 2024 14:53:35 +0200 Subject: [PATCH 094/467] Change mobile breakpoint back to old version and allow main column to shrink (#32033) --- app/javascript/mastodon/features/ui/components/columns_area.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 2 +- app/javascript/styles/mastodon/variables.scss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/columns_area.jsx b/app/javascript/mastodon/features/ui/components/columns_area.jsx index ff76d5bcb296d3..de957a79b67c57 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.jsx +++ b/app/javascript/mastodon/features/ui/components/columns_area.jsx @@ -62,7 +62,7 @@ export default class ColumnsArea extends ImmutablePureComponent { }; // Corresponds to (max-width: $no-gap-breakpoint - 1px) in SCSS - mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1206px)'); + mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)'); state = { renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches), diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 53becb3b925bc8..f8febeae181441 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2708,7 +2708,7 @@ a.account__display-name { &__main { box-sizing: border-box; width: 100%; - flex: 0 0 auto; + flex: 0 1 auto; display: flex; flex-direction: column; diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 17442b9748b668..c477e7a750cecc 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -87,7 +87,7 @@ $media-modal-media-max-width: 100%; // put margins on top and bottom of image to avoid the screen covered by image. $media-modal-media-max-height: 80%; -$no-gap-breakpoint: 1207px; +$no-gap-breakpoint: 1175px; $mobile-breakpoint: 630px; $font-sans-serif: 'mastodon-font-sans-serif' !default; From aaab6b7adc736a17ea9adc79309ef2efc90146e9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 23 Sep 2024 15:14:15 +0200 Subject: [PATCH 095/467] Add reblogs and favourites counts to statuses in ActivityPub (#32007) --- .../activitypub/likes_controller.rb | 36 +++++++++++++++++++ .../activitypub/replies_controller.rb | 2 +- .../activitypub/shares_controller.rb | 36 +++++++++++++++++++ app/lib/activitypub/tag_manager.rb | 12 +++++++ .../activitypub/note_serializer.rb | 18 ++++++++++ config/routes.rb | 2 ++ 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 app/controllers/activitypub/likes_controller.rb create mode 100644 app/controllers/activitypub/shares_controller.rb diff --git a/app/controllers/activitypub/likes_controller.rb b/app/controllers/activitypub/likes_controller.rb new file mode 100644 index 00000000000000..4aa6a4a771f156 --- /dev/null +++ b/app/controllers/activitypub/likes_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class ActivityPub::LikesController < ActivityPub::BaseController + include Authorization + + vary_by -> { 'Signature' if authorized_fetch_mode? } + + before_action :require_account_signature!, if: :authorized_fetch_mode? + before_action :set_status + + def index + expires_in 0, public: @status.distributable? && public_fetch_mode? + render json: likes_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' + end + + private + + def pundit_user + signed_request_account + end + + def set_status + @status = @account.statuses.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + not_found + end + + def likes_collection_presenter + ActivityPub::CollectionPresenter.new( + id: account_status_likes_url(@account, @status), + type: :unordered, + size: @status.favourites_count + ) + end +end diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb index 11aac48c9c34b1..0a19275d38e942 100644 --- a/app/controllers/activitypub/replies_controller.rb +++ b/app/controllers/activitypub/replies_controller.rb @@ -12,7 +12,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController before_action :set_replies def index - expires_in 0, public: public_fetch_mode? + expires_in 0, public: @status.distributable? && public_fetch_mode? render json: replies_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json', skip_activities: true end diff --git a/app/controllers/activitypub/shares_controller.rb b/app/controllers/activitypub/shares_controller.rb new file mode 100644 index 00000000000000..65b4a5b3831326 --- /dev/null +++ b/app/controllers/activitypub/shares_controller.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class ActivityPub::SharesController < ActivityPub::BaseController + include Authorization + + vary_by -> { 'Signature' if authorized_fetch_mode? } + + before_action :require_account_signature!, if: :authorized_fetch_mode? + before_action :set_status + + def index + expires_in 0, public: @status.distributable? && public_fetch_mode? + render json: shares_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' + end + + private + + def pundit_user + signed_request_account + end + + def set_status + @status = @account.statuses.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + not_found + end + + def shares_collection_presenter + ActivityPub::CollectionPresenter.new( + id: account_status_shares_url(@account, @status), + type: :unordered, + size: @status.reblogs_count + ) + end +end diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 864328631755ff..23b44be372f28e 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -74,6 +74,18 @@ def replies_uri_for(target, page_params = nil) account_status_replies_url(target.account, target, page_params) end + def likes_uri_for(target) + raise ArgumentError, 'target must be a local activity' unless %i(note comment activity).include?(target.object_type) && target.local? + + account_status_likes_url(target.account, target) + end + + def shares_uri_for(target) + raise ArgumentError, 'target must be a local activity' unless %i(note comment activity).include?(target.object_type) && target.local? + + account_status_shares_url(target.account, target) + end + def followers_uri_for(target) target.local? ? account_followers_url(target) : target.followers_url.presence end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 27e058199d6fac..7b29e6d69be4a0 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -19,6 +19,8 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer has_many :virtual_tags, key: :tag has_one :replies, serializer: ActivityPub::CollectionSerializer, if: :local? + has_one :likes, serializer: ActivityPub::CollectionSerializer, if: :local? + has_one :shares, serializer: ActivityPub::CollectionSerializer, if: :local? has_many :poll_options, key: :one_of, if: :poll_and_not_multiple? has_many :poll_options, key: :any_of, if: :poll_and_multiple? @@ -64,6 +66,22 @@ def replies ) end + def likes + ActivityPub::CollectionPresenter.new( + id: ActivityPub::TagManager.instance.likes_uri_for(object), + type: :unordered, + size: object.favourites_count + ) + end + + def shares + ActivityPub::CollectionPresenter.new( + id: ActivityPub::TagManager.instance.shares_uri_for(object), + type: :unordered, + size: object.reblogs_count + ) + end + def language? object.language.present? end diff --git a/config/routes.rb b/config/routes.rb index ad607e537be9f1..890102955c67ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -126,6 +126,8 @@ def redirect_with_vary(path) end resources :replies, only: [:index], module: :activitypub + resources :likes, only: [:index], module: :activitypub + resources :shares, only: [:index], module: :activitypub end resources :followers, only: [:index], controller: :follower_accounts From 5dfdec645313e556413147597138a8008bc35996 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 23 Sep 2024 09:37:32 -0400 Subject: [PATCH 096/467] Convert `settings/applications` controller spec to system/request specs (#32006) --- .../settings/applications/_fields.html.haml | 36 ---- .../settings/applications/_form.html.haml | 36 ++++ app/views/settings/applications/new.html.haml | 6 +- .../settings/applications/show.html.haml | 6 +- .../settings/applications_controller_spec.rb | 178 ------------------ spec/requests/settings/applications_spec.rb | 44 +++++ spec/system/settings/applications_spec.rb | 144 ++++++++++++++ 7 files changed, 230 insertions(+), 220 deletions(-) delete mode 100644 app/views/settings/applications/_fields.html.haml create mode 100644 app/views/settings/applications/_form.html.haml delete mode 100644 spec/controllers/settings/applications_controller_spec.rb create mode 100644 spec/requests/settings/applications_spec.rb create mode 100644 spec/system/settings/applications_spec.rb diff --git a/app/views/settings/applications/_fields.html.haml b/app/views/settings/applications/_fields.html.haml deleted file mode 100644 index d5398489526b01..00000000000000 --- a/app/views/settings/applications/_fields.html.haml +++ /dev/null @@ -1,36 +0,0 @@ -.fields-group - = f.input :name, - label: t('activerecord.attributes.doorkeeper/application.name'), - wrapper: :with_label - -.fields-group - = f.input :website, - label: t('activerecord.attributes.doorkeeper/application.website'), - wrapper: :with_label - -.fields-group - = f.input :redirect_uri, - label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri'), - required: true, - wrapper: :with_block_label - - %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: content_tag(:code, Doorkeeper.configuration.native_redirect_uri)).html_safe - -.field-group - .input.with_block_label - %label= t('activerecord.attributes.doorkeeper/application.scopes') - %span.hint= t('simple_form.hints.defaults.scopes') - - - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| - = f.input :scopes, - as: :check_boxes, - collection_wrapper_tag: 'ul', - collection: value.sort, - hint: false, - include_blank: false, - item_wrapper_tag: 'li', - label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, - label: false, - required: false, - selected: f.object.scopes.all, - wrapper: :with_block_label diff --git a/app/views/settings/applications/_form.html.haml b/app/views/settings/applications/_form.html.haml new file mode 100644 index 00000000000000..66ea8bc12bf00f --- /dev/null +++ b/app/views/settings/applications/_form.html.haml @@ -0,0 +1,36 @@ +.fields-group + = form.input :name, + label: t('activerecord.attributes.doorkeeper/application.name'), + wrapper: :with_label + +.fields-group + = form.input :website, + label: t('activerecord.attributes.doorkeeper/application.website'), + wrapper: :with_label + +.fields-group + = form.input :redirect_uri, + label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri'), + required: true, + wrapper: :with_block_label + + %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: content_tag(:code, Doorkeeper.configuration.native_redirect_uri)).html_safe + +.field-group + .input.with_block_label + %label= t('activerecord.attributes.doorkeeper/application.scopes') + %span.hint= t('simple_form.hints.defaults.scopes') + + - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| + = form.input :scopes, + as: :check_boxes, + collection_wrapper_tag: 'ul', + collection: value.sort, + hint: false, + include_blank: false, + item_wrapper_tag: 'li', + label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, + label: false, + required: false, + selected: form.object.scopes.all, + wrapper: :with_block_label diff --git a/app/views/settings/applications/new.html.haml b/app/views/settings/applications/new.html.haml index aa2281fea14615..f6a546e8de143a 100644 --- a/app/views/settings/applications/new.html.haml +++ b/app/views/settings/applications/new.html.haml @@ -1,8 +1,8 @@ - content_for :page_title do = t('doorkeeper.applications.new.title') -= simple_form_for @application, url: settings_applications_path do |f| - = render 'fields', f: f += simple_form_for @application, url: settings_applications_path do |form| + = render form .actions - = f.button :button, t('doorkeeper.applications.buttons.submit'), type: :submit + = form.button :button, t('doorkeeper.applications.buttons.submit'), type: :submit diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml index be1d13eae6fdf7..19630cf49b8ccb 100644 --- a/app/views/settings/applications/show.html.haml +++ b/app/views/settings/applications/show.html.haml @@ -23,8 +23,8 @@ %hr/ -= simple_form_for @application, url: settings_application_path(@application), method: :put do |f| - = render 'fields', f: f += simple_form_for @application, url: settings_application_path(@application), method: :put do |form| + = render form .actions - = f.button :button, t('generic.save_changes'), type: :submit + = form.button :button, t('generic.save_changes'), type: :submit diff --git a/spec/controllers/settings/applications_controller_spec.rb b/spec/controllers/settings/applications_controller_spec.rb deleted file mode 100644 index 721741bacb2272..00000000000000 --- a/spec/controllers/settings/applications_controller_spec.rb +++ /dev/null @@ -1,178 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::ApplicationsController do - render_views - - let!(:user) { Fabricate(:user) } - let!(:app) { Fabricate(:application, owner: user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - before do - Fabricate(:application) - get :index - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response.headers['Cache-Control']).to include('private, no-store') - end - end - - describe 'GET #show' do - it 'returns http success' do - get :show, params: { id: app.id } - expect(response).to have_http_status(200) - expect(assigns[:application]).to eql(app) - end - - it 'returns 404 if you dont own app' do - app.update!(owner: nil) - - get :show, params: { id: app.id } - expect(response).to have_http_status 404 - end - end - - describe 'GET #new' do - it 'returns http success' do - get :new - expect(response).to have_http_status(200) - end - end - - describe 'POST #create' do - context 'when success (passed scopes as a String)' do - subject do - post :create, params: { - doorkeeper_application: { - name: 'My New App', - redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', - website: 'http://google.com', - scopes: 'read write follow', - }, - } - end - - it 'creates an entry in the database', :aggregate_failures do - expect { subject }.to change(Doorkeeper::Application, :count) - expect(response).to redirect_to(settings_applications_path) - end - end - - context 'when success (passed scopes as an Array)' do - subject do - post :create, params: { - doorkeeper_application: { - name: 'My New App', - redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', - website: 'http://google.com', - scopes: %w(read write follow), - }, - } - end - - it 'creates an entry in the database', :aggregate_failures do - expect { subject }.to change(Doorkeeper::Application, :count) - expect(response).to redirect_to(settings_applications_path) - end - end - - context 'with failure request' do - before do - post :create, params: { - doorkeeper_application: { - name: '', - redirect_uri: '', - website: '', - scopes: [], - }, - } - end - - it 'returns http success and renders form', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response).to render_template(:new) - end - end - end - - describe 'PATCH #update' do - context 'when success' do - subject do - patch :update, params: { - id: app.id, - doorkeeper_application: opts, - } - response - end - - let(:opts) do - { - website: 'https://foo.bar/', - } - end - - it 'updates existing application' do - subject - - expect(app.reload.website).to eql(opts[:website]) - expect(response).to redirect_to(settings_application_path(app)) - end - end - - context 'with failure request' do - before do - patch :update, params: { - id: app.id, - doorkeeper_application: { - name: '', - redirect_uri: '', - website: '', - scopes: [], - }, - } - end - - it 'returns http success and renders form', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response).to render_template(:show) - end - end - end - - describe 'destroy' do - let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } - let!(:access_token) { Fabricate(:accessible_access_token, application: app) } - - before do - allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub) - post :destroy, params: { id: app.id } - end - - it 'redirects back to applications page removes the app' do - expect(response).to redirect_to(settings_applications_path) - expect(Doorkeeper::Application.find_by(id: app.id)).to be_nil - end - - it 'sends a session kill payload to the streaming server' do - expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') - end - end - - describe 'regenerate' do - let(:token) { user.token_for_app(app) } - - it 'creates new token' do - expect(token).to_not be_nil - post :regenerate, params: { id: app.id } - - expect(user.token_for_app(app)).to_not eql(token) - end - end -end diff --git a/spec/requests/settings/applications_spec.rb b/spec/requests/settings/applications_spec.rb new file mode 100644 index 00000000000000..8a5b3de895b47f --- /dev/null +++ b/spec/requests/settings/applications_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings / Exports' do + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'GET /settings/application/:id' do + context 'when user does not own application' do + let(:application) { Fabricate :application } + + it 'returns http missing' do + get settings_application_path(application) + + expect(response) + .to have_http_status(404) + end + end + end + + describe 'POST /settings/applications' do + subject { post '/settings/applications', params: params } + + let(:params) do + { + doorkeeper_application: { + name: 'My New App', + redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', + website: 'http://google.com', + scopes: 'read write follow', + }, + } + end + + it 'supports passing scope values as string' do + expect { subject } + .to change(Doorkeeper::Application, :count).by(1) + expect(response) + .to redirect_to(settings_applications_path) + end + end +end diff --git a/spec/system/settings/applications_spec.rb b/spec/system/settings/applications_spec.rb new file mode 100644 index 00000000000000..ee43da3d5d6171 --- /dev/null +++ b/spec/system/settings/applications_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings applications page' do + let!(:application) { Fabricate :application, owner: user } + let(:user) { Fabricate :user } + + before { sign_in user } + + describe 'Viewing the list of applications' do + it 'sees the applications' do + visit settings_applications_path + + expect(page) + .to have_content(application.name) + .and have_private_cache_control + end + end + + describe 'Viewing a single application' do + it 'shows a page with application details' do + visit settings_application_path(application) + + expect(page) + .to have_content(application.name) + end + end + + describe 'Creating a new application' do + it 'accepts form input to make an application' do + visit new_settings_application_path + + fill_in_form + + expect { submit_form } + .to change(Doorkeeper::Application, :count).by(1) + expect(page) + .to have_content(I18n.t('doorkeeper.applications.index.title')) + .and have_content('My new app') + end + + it 'does not save with invalid form values' do + visit new_settings_application_path + + expect { submit_form } + .to not_change(Doorkeeper::Application, :count) + expect(page) + .to have_content("can't be blank") + end + + def fill_in_form + fill_in form_app_name_label, + with: 'My new app' + fill_in I18n.t('activerecord.attributes.doorkeeper/application.website'), + with: 'http://google.com' + fill_in I18n.t('activerecord.attributes.doorkeeper/application.redirect_uri'), + with: 'urn:ietf:wg:oauth:2.0:oob' + + check 'read', id: :doorkeeper_application_scopes_read + check 'write', id: :doorkeeper_application_scopes_write + check 'follow', id: :doorkeeper_application_scopes_follow + end + + def submit_form + click_on I18n.t('doorkeeper.applications.buttons.submit') + end + end + + describe 'Updating an application' do + it 'successfully updates with valid values' do + visit settings_application_path(application) + + fill_in form_app_name_label, + with: 'My new app name with a new value' + submit_form + + expect(page) + .to have_content('My new app name with a new value') + end + + it 'does not update with wrong values' do + visit settings_application_path(application) + + fill_in form_app_name_label, + with: '' + submit_form + + expect(page) + .to have_content("can't be blank") + end + + def submit_form + click_on I18n.t('generic.save_changes') + end + end + + describe 'Destroying an application' do + let(:redis_pipeline_stub) { instance_double(Redis::Namespace, publish: nil) } + let!(:access_token) { Fabricate(:accessible_access_token, application: application) } + + before { stub_redis_pipeline } + + it 'destroys the record and tells the broader universe about that' do + visit settings_applications_path + + expect { destroy_application } + .to change(Doorkeeper::Application, :count).by(-1) + expect(page) + .to have_no_content(application.name) + expect(redis_pipeline_stub) + .to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') + end + + def destroy_application + click_on I18n.t('doorkeeper.applications.index.delete') + end + + def stub_redis_pipeline + allow(redis) + .to receive(:pipelined) + .and_yield(redis_pipeline_stub) + end + end + + describe 'Regenerating an app token' do + it 'updates the app token' do + visit settings_application_path(application) + + expect { regenerate_token } + .to(change { user.token_for_app(application) }) + expect(page) + .to have_content(I18n.t('applications.token_regenerated')) + end + + def regenerate_token + click_on I18n.t('applications.regenerate_token') + end + end + + def form_app_name_label + I18n.t('activerecord.attributes.doorkeeper/application.name') + end +end From d54ce67dc9ac59ad1d2fc0ee719318610a5ed249 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 24 Sep 2024 10:00:20 +0200 Subject: [PATCH 097/467] Change hide media button to be in top right corner in web UI (#32048) --- app/javascript/styles/mastodon/components.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f8febeae181441..43ff4f28ef0c91 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -6889,7 +6889,7 @@ a.status-card { .media-gallery__actions { position: absolute; - bottom: 6px; + top: 6px; inset-inline-end: 6px; display: flex; gap: 2px; @@ -6912,7 +6912,7 @@ a.status-card { .media-gallery__item__badges { position: absolute; bottom: 8px; - inset-inline-start: 8px; + inset-inline-end: 8px; display: flex; gap: 2px; } From c808055fc3ebe311b0e89cd2486e80458be29472 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 24 Sep 2024 10:16:22 +0200 Subject: [PATCH 098/467] Update dependency webrick (#32054) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8ba091038ddf04..8f0c0ed53c88f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -893,7 +893,7 @@ GEM rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - webrick (1.8.1) + webrick (1.8.2) websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) From 11ac5c892981a1d03335f81ac0f7f147f3204a43 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:42:14 +0200 Subject: [PATCH 099/467] New Crowdin Translations (automated) (#32052) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/el.json | 13 ++++++ app/javascript/mastodon/locales/eo.json | 48 ++++++++++++++++++++-- app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es.json | 6 +-- app/javascript/mastodon/locales/gd.json | 2 + app/javascript/mastodon/locales/gl.json | 8 ++-- config/locales/activerecord.be.yml | 2 + config/locales/activerecord.el.yml | 6 +++ config/locales/doorkeeper.af.yml | 1 - config/locales/doorkeeper.an.yml | 1 - config/locales/doorkeeper.ar.yml | 1 - config/locales/doorkeeper.ast.yml | 1 - config/locales/doorkeeper.be.yml | 1 - config/locales/doorkeeper.bg.yml | 1 - config/locales/doorkeeper.ca.yml | 2 +- config/locales/doorkeeper.ckb.yml | 1 - config/locales/doorkeeper.cs.yml | 1 - config/locales/doorkeeper.cy.yml | 1 - config/locales/doorkeeper.da.yml | 2 +- config/locales/doorkeeper.de.yml | 2 +- config/locales/doorkeeper.el.yml | 1 - config/locales/doorkeeper.en-GB.yml | 2 +- config/locales/doorkeeper.eo.yml | 1 - config/locales/doorkeeper.es-AR.yml | 2 +- config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/doorkeeper.es.yml | 2 +- config/locales/doorkeeper.et.yml | 1 - config/locales/doorkeeper.eu.yml | 1 - config/locales/doorkeeper.fa.yml | 1 - config/locales/doorkeeper.fi.yml | 2 +- config/locales/doorkeeper.fo.yml | 2 +- config/locales/doorkeeper.fr-CA.yml | 1 - config/locales/doorkeeper.fr.yml | 1 - config/locales/doorkeeper.fy.yml | 1 - config/locales/doorkeeper.ga.yml | 1 - config/locales/doorkeeper.gd.yml | 2 +- config/locales/doorkeeper.gl.yml | 2 +- config/locales/doorkeeper.he.yml | 2 +- config/locales/doorkeeper.hu.yml | 1 - config/locales/doorkeeper.ia.yml | 1 - config/locales/doorkeeper.id.yml | 1 - config/locales/doorkeeper.ie.yml | 1 - config/locales/doorkeeper.io.yml | 1 - config/locales/doorkeeper.is.yml | 1 - config/locales/doorkeeper.it.yml | 2 +- config/locales/doorkeeper.ja.yml | 1 - config/locales/doorkeeper.ko.yml | 1 - config/locales/doorkeeper.ku.yml | 1 - config/locales/doorkeeper.lad.yml | 1 - config/locales/doorkeeper.lt.yml | 2 +- config/locales/doorkeeper.lv.yml | 1 - config/locales/doorkeeper.ms.yml | 1 - config/locales/doorkeeper.my.yml | 1 - config/locales/doorkeeper.nl.yml | 2 +- config/locales/doorkeeper.nn.yml | 2 +- config/locales/doorkeeper.no.yml | 1 - config/locales/doorkeeper.oc.yml | 1 - config/locales/doorkeeper.pl.yml | 2 +- config/locales/doorkeeper.pt-BR.yml | 1 - config/locales/doorkeeper.pt-PT.yml | 1 - config/locales/doorkeeper.ro.yml | 1 - config/locales/doorkeeper.ru.yml | 1 - config/locales/doorkeeper.sco.yml | 1 - config/locales/doorkeeper.si.yml | 1 - config/locales/doorkeeper.sk.yml | 1 - config/locales/doorkeeper.sl.yml | 1 - config/locales/doorkeeper.sq.yml | 1 - config/locales/doorkeeper.sr-Latn.yml | 1 - config/locales/doorkeeper.sr.yml | 1 - config/locales/doorkeeper.sv.yml | 1 - config/locales/doorkeeper.th.yml | 1 - config/locales/doorkeeper.tr.yml | 2 +- config/locales/doorkeeper.uk.yml | 2 +- config/locales/doorkeeper.vi.yml | 2 +- config/locales/doorkeeper.zh-CN.yml | 2 +- config/locales/doorkeeper.zh-HK.yml | 1 - config/locales/doorkeeper.zh-TW.yml | 2 +- config/locales/el.yml | 3 ++ config/locales/eo.yml | 29 +++++++++++++ config/locales/simple_form.el.yml | 45 ++++++++++++++++++++ 80 files changed, 174 insertions(+), 81 deletions(-) diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index ac6a2cf4e8b8eb..83f0227a0ada59 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -97,6 +97,8 @@ "block_modal.title": "Αποκλεισμός χρήστη;", "block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις την επόμενη φορά", + "boost_modal.reblog": "Ενίσχυση ανάρτησης;", + "boost_modal.undo_reblog": "Αναίρεση ενίσχυσης;", "bundle_column_error.copy_stacktrace": "Αντιγραφή αναφοράς σφάλματος", "bundle_column_error.error.body": "Δεν ήταν δυνατή η απόδοση της σελίδας που ζήτησες. Μπορεί να οφείλεται σε σφάλμα στον κώδικά μας ή σε πρόβλημα συμβατότητας του προγράμματος περιήγησης.", "bundle_column_error.error.title": "Ωχ όχι!", @@ -192,6 +194,8 @@ "confirmations.unfollow.confirm": "Άρση ακολούθησης", "confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};", "confirmations.unfollow.title": "Άρση ακολούθησης;", + "content_warning.hide": "Απόκρυψη ανάρτησης", + "content_warning.show": "Εμφάνιση ούτως ή άλλως", "conversation.delete": "Διαγραφή συζήτησης", "conversation.mark_as_read": "Σήμανση ως αναγνωσμένο", "conversation.open": "Προβολή συνομιλίας", @@ -299,6 +303,7 @@ "filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα", "filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης", "filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης", + "filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”", "filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις", "filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις", "firehose.all": "Όλα", @@ -429,6 +434,8 @@ "lightbox.close": "Κλείσιμο", "lightbox.next": "Επόμενο", "lightbox.previous": "Προηγούμενο", + "lightbox.zoom_in": "Εστίαση στο πραγματικό μέγεθος", + "lightbox.zoom_out": "Εστίαση για προσαρμογή", "limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως", "limited_account_hint.title": "Αυτό το προφίλ έχει αποκρυφτεί από τους διαχειριστές του διακομιστή {domain}.", "link_preview.author": "Από {name}", @@ -450,6 +457,7 @@ "lists.subheading": "Οι λίστες σου", "load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}", "loading_indicator.label": "Φόρτωση…", + "media_gallery.hide": "Απόκρυψη", "moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.", "mute_modal.hide_from_notifications": "Απόκρυψη από ειδοποιήσεις", "mute_modal.hide_options": "Απόκρυψη επιλογών", @@ -461,6 +469,7 @@ "mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.", "mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.", "navigation_bar.about": "Σχετικά με", + "navigation_bar.administration": "Διαχείριση", "navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού", "navigation_bar.blocks": "Αποκλεισμένοι χρήστες", "navigation_bar.bookmarks": "Σελιδοδείκτες", @@ -477,6 +486,7 @@ "navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν", "navigation_bar.lists": "Λίστες", "navigation_bar.logout": "Αποσύνδεση", + "navigation_bar.moderation": "Συντονισμός", "navigation_bar.mutes": "Αποσιωπημένοι χρήστες", "navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.", "navigation_bar.personal": "Προσωπικά", @@ -768,6 +778,7 @@ "status.bookmark": "Σελιδοδείκτης", "status.cancel_reblog_private": "Ακύρωση ενίσχυσης", "status.cannot_reblog": "Αυτή η ανάρτηση δεν μπορεί να ενισχυθεί", + "status.continued_thread": "Συνεχιζόμενο νήματος", "status.copy": "Αντιγραφή συνδέσμου ανάρτησης", "status.delete": "Διαγραφή", "status.detailed_status": "Προβολή λεπτομερούς συζήτησης", @@ -776,6 +787,7 @@ "status.edit": "Επεξεργασία", "status.edited": "Τελευταία επεξεργασία {date}", "status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}", + "status.embed": "Απόκτηση κώδικα ενσωμάτωσης", "status.favourite": "Αγαπημένα", "status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}", "status.filter": "Φιλτράρισμα αυτής της ανάρτησης", @@ -800,6 +812,7 @@ "status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.", "status.redraft": "Σβήσε & ξαναγράψε", "status.remove_bookmark": "Αφαίρεση σελιδοδείκτη", + "status.replied_in_thread": "Απαντήθηκε σε νήμα", "status.replied_to": "Απάντησε στον {name}", "status.reply": "Απάντησε", "status.replyAll": "Απάντησε στο νήμα συζήτησης", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 05f53fb7311ce6..fbf74e9efaf6ab 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -231,6 +231,8 @@ "domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", "domain_pill.username": "Uzantnomo", "domain_pill.whats_in_a_handle": "Kio estas en identigo?", + "domain_pill.who_they_are": "Ĉar identigoj diras, kiu iu estas kaj kie ili estas, vi povas interagi kun homoj tra la socia reto de .", + "domain_pill.who_you_are": "Ĉar via identigo diras kiu vi estas kaj kie vi estas, homoj povas interagi kun vi tra la socia reto de .", "domain_pill.your_handle": "Via identigo:", "domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.", "domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.", @@ -301,6 +303,7 @@ "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", "filter_modal.title.status": "Filtri mesaĝon", + "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", "filtered_notifications_banner.title": "Filtritaj sciigoj", "firehose.all": "Ĉiuj", @@ -309,11 +312,16 @@ "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", "follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.", + "follow_suggestions.curated_suggestion": "Elekto de stabo", "follow_suggestions.dismiss": "Ne montri denove", + "follow_suggestions.featured_longer": "Mane elektita de la teamo de {domain}", "follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas", + "follow_suggestions.hints.featured": "Ĉi tiu profilo estis mane elektita de la teamo de {domain}.", "follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.", "follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.", + "follow_suggestions.hints.most_interactions": "Ĉi tiu profilo lastatempe ricevis multe da atento sur {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.", + "follow_suggestions.personalized_suggestion": "Agordita propono", "follow_suggestions.popular_suggestion": "Popularaj proponoj", "follow_suggestions.popular_suggestion_longer": "Populara en {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis", @@ -346,9 +354,12 @@ "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", "hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.", + "hints.profiles.follows_may_be_missing": "Sekvatoj de ĉi tiu profilo eble mankas.", "hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.", "hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}", + "hints.profiles.see_more_follows": "Vidi pli da sekvatoj sur {domain}", "hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}", + "hints.threads.replies_may_be_missing": "Respondoj de aliaj serviloj eble mankas.", "hints.threads.see_more": "Vidi pli da respondoj sur {domain}", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", @@ -358,6 +369,10 @@ "home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!", "home.show_announcements": "Montri anoncojn", "ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.", + "ignore_notifications_modal.filter_instead": "Filtri anstataŭe", + "ignore_notifications_modal.filter_to_act_users": "Vi ankoraŭ povos akcepti, malakcepti aŭ raporti uzantojn", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrado helpas eviti eblan konfuzon", + "ignore_notifications_modal.filter_to_review_separately": "Vi povas revizii filtritajn sciigojn aparte", "ignore_notifications_modal.ignore": "Ignori sciigojn", "ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?", "ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?", @@ -471,6 +486,7 @@ "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.lists": "Listoj", "navigation_bar.logout": "Adiaŭi", + "navigation_bar.moderation": "Modereco", "navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.personal": "Persone", @@ -486,7 +502,9 @@ "notification.admin.report_statuses": "{name} raportis {target} por {category}", "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", + "notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton", "notification.favourite": "{name} stelumis vian afiŝon", + "notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon", "notification.follow": "{name} eksekvis vin", "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", @@ -506,22 +524,32 @@ "notification.moderation_warning.action_silence": "Via konto estis limigita.", "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", "notification.own_poll": "Via enketo finiĝis", + "notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", "notification.reblog.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} diskonigis vian afiŝon", + "notification.relationships_severance_event": "Perditaj konektoj kun {name}", + "notification.relationships_severance_event.account_suspension": "Administranto de {from} malakceptis {target}, kio signifas, ke vi ne plu povas ricevi ĝisdatigojn de ili aŭ interagi kun ili.", + "notification.relationships_severance_event.domain_block": "Administranto de {from} blokis {target}, inkluzive de {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.", "notification.relationships_severance_event.learn_more": "Lerni pli", + "notification.relationships_severance_event.user_domain_block": "Vi blokis {target}, forigante {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.", "notification.status": "{name} ĵus afiŝis", "notification.update": "{name} redaktis afiŝon", "notification_requests.accept": "Akcepti", "notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}", + "notification_requests.confirm_accept_multiple.message": "Vi estas akceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Ĉu vi certas, ke vi volas daŭrigi?", "notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}", + "notification_requests.confirm_dismiss_multiple.message": "Vi estas malakceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Vi ne povos facile aliri {count, plural, one {ĝin} other {ilin}} denove. Ĉu vi certas, ke vi volas daŭrigi?", "notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?", "notification_requests.dismiss": "Forĵeti", + "notification_requests.dismiss_multiple": "{count, plural, one {Malakcepti # peton…} other {# Malakcepti # petojn…}}", "notification_requests.edit_selection": "Redakti", "notification_requests.exit_selection": "Farita", "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.", "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.", + "notification_requests.maximize": "Maksimumigi", + "notification_requests.minimize_banner": "Minimumigi filtritajn sciigojn-rubandon", "notification_requests.notifications_from": "Sciigoj de {name}", "notification_requests.title": "Filtritaj sciigoj", "notification_requests.view": "Vidi sciigojn", @@ -533,6 +561,7 @@ "notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.favourite": "Stelumoj:", "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", + "notifications.column_settings.filter_bar.category": "Rapida filtrila breto", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", @@ -548,7 +577,7 @@ "notifications.filter.all": "Ĉiuj", "notifications.filter.boosts": "Diskonigoj", "notifications.filter.favourites": "Stelumoj", - "notifications.filter.follows": "Sekvoj", + "notifications.filter.follows": "Sekvatoj", "notifications.filter.mentions": "Mencioj", "notifications.filter.polls": "Balotenketaj rezultoj", "notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas", @@ -563,12 +592,16 @@ "notifications.policy.drop": "Ignori", "notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove", "notifications.policy.filter": "Filtri", + "notifications.policy.filter_hint": "Sendi al filtritaj sciigoj-enirkesto", + "notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj moderigantoj", "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj", "notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}", "notifications.policy.filter_new_accounts_title": "Novaj kontoj", + "notifications.policy.filter_not_followers_hint": "Inkluzive de homoj, kiuj sekvis vin malpli ol {days, plural, one {unu tago} other {# tagoj}}", "notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin", "notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin", "notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas", + "notifications.policy.filter_private_mentions_hint": "Filtrite krom se ĝi respondas al via propra mencio aŭ se vi sekvas la sendinton", "notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj", "notifications.policy.title": "Administri sciigojn de…", "notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn", @@ -580,8 +613,8 @@ "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "Saluton #Mastodon!", "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:", + "onboarding.follows.title": "Agordi vian hejman fluon", "onboarding.profile.discoverable": "Trovebligi mian profilon", "onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.", "onboarding.profile.display_name": "Publika nomo", @@ -602,7 +635,7 @@ "onboarding.start.title": "Vi atingas ĝin!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}", "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", @@ -632,6 +665,7 @@ "privacy.private.short": "Sekvantoj", "privacy.public.long": "Ĉiujn ajn ĉe kaj ekster Mastodon", "privacy.public.short": "Publika", + "privacy.unlisted.additional": "Ĉi tio kondutas ekzakte kiel publika, krom ke la afiŝo ne aperos en vivaj fluoj aŭ kradvortoj, esploro aŭ Mastodon-serĉo, eĉ se vi estas enskribita en la tuta konto.", "privacy.unlisted.long": "Malpli algoritmaj fanfaroj", "privacy.unlisted.short": "Diskrete publika", "privacy_policy.last_updated": "Laste ĝisdatigita en {date}", @@ -651,7 +685,9 @@ "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hodiaŭ", + "reply_indicator.attachments": "{count, plural, one {# aldonaĵo} other {# aldonaĵoj}}", "reply_indicator.cancel": "Nuligi", + "reply_indicator.poll": "Balotenketo", "report.block": "Bloki", "report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.", "report.categories.legal": "Laŭleĝa", @@ -732,6 +768,7 @@ "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", "sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", + "sign_in_banner.mastodon_is": "Mastodonto estas la plej bona maniero por resti flank-al-flanke kun kio okazas.", "sign_in_banner.sign_in": "Saluti", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", @@ -741,6 +778,7 @@ "status.bookmark": "Aldoni al la legosignoj", "status.cancel_reblog_private": "Ne plu diskonigi", "status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi", + "status.continued_thread": "Daŭrigis fadenon", "status.copy": "Kopii la ligilon al la mesaĝo", "status.delete": "Forigi", "status.detailed_status": "Detala konversacia vido", @@ -749,6 +787,7 @@ "status.edit": "Redakti", "status.edited": "Laste redaktita {date}", "status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}", + "status.embed": "Akiri enkorpigan kodon", "status.favourite": "Ŝatata", "status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}", "status.filter": "Filtri ĉi tiun afiŝon", @@ -773,6 +812,7 @@ "status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.remove_bookmark": "Forigi legosignon", + "status.replied_in_thread": "Respondis en fadeno", "status.replied_to": "Respondis al {name}", "status.reply": "Respondi", "status.replyAll": "Respondi al la fadeno", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 6ab3f0fdb9cbf5..8a37a33df2e787 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -435,7 +435,7 @@ "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", "lightbox.zoom_in": "Ampliar al tamaño real", - "lightbox.zoom_out": "Ampliar para ajustar", + "lightbox.zoom_out": "Ampliar hasta ajustar", "limited_account_hint.action": "Mostrar perfil de todos modos", "limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.", "link_preview.author": "Por {name}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index df05e82b0beffa..5915c333c4341b 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -267,7 +267,7 @@ "empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.", - "empty_column.hashtag": "No hay nada en este hashtag aún.", + "empty_column.hashtag": "No hay nada en esta etiqueta todavía.", "empty_column.home": "¡Tu línea temporal está vacía! Sigue a más personas para rellenarla.", "empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos estados, estos aparecerán aquí.", "empty_column.lists": "No tienes ninguna lista. Cuando crees una, se mostrará aquí.", @@ -342,7 +342,7 @@ "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", - "hashtag.column_settings.select.placeholder": "Introduzca hashtags…", + "hashtag.column_settings.select.placeholder": "Introduce etiquetas…", "hashtag.column_settings.tag_mode.all": "Todos estos", "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.none": "Ninguno de estos", @@ -637,7 +637,7 @@ "onboarding.steps.follow_people.title": "Personaliza tu línea de inicio", "onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}", "onboarding.steps.publish_status.title": "Escribe tu primera publicación", - "onboarding.steps.setup_profile.body": "Aumenta tus interacciones tcompletando tu perfil.", + "onboarding.steps.setup_profile.body": "Aumenta tus interacciones con un perfil completo.", "onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!", "onboarding.steps.share_profile.title": "Comparte tu perfil de Mastodon", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 6cd3cbcc5606ae..8f51d43ef8581b 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -434,6 +434,8 @@ "lightbox.close": "Dùin", "lightbox.next": "Air adhart", "lightbox.previous": "Air ais", + "lightbox.zoom_in": "Sùm dhan fhìor-mheud", + "lightbox.zoom_out": "Sùm fèin-obrachail", "limited_account_hint.action": "Seall a’ phròifil co-dhiù", "limited_account_hint.title": "Chaidh a’ phròifil seo fhalach le maoir {domain}.", "link_preview.author": "Le {name}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 5e67cbce25915f..f2ea6ee9001531 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -368,13 +368,13 @@ "home.pending_critical_update.link": "Mira as actualizacións", "home.pending_critical_update.title": "Hai una actualización crítica de seguridade!", "home.show_announcements": "Amosar anuncios", - "ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias se ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.", + "ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias de que ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.", "ignore_notifications_modal.filter_instead": "Filtrar igualmente", "ignore_notifications_modal.filter_to_act_users": "Poderás seguir aceptando, rexeitando e denunciando usuarias", "ignore_notifications_modal.filter_to_avoid_confusion": "Ao filtrar axudas a evitar posibles confusións", - "ignore_notifications_modal.filter_to_review_separately": "Podes revisar as notificacións filtradas por separado", + "ignore_notifications_modal.filter_to_review_separately": "Podes revisar por separado as notificacións filtradas", "ignore_notifications_modal.ignore": "Ignorar notificacións", - "ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas moderadas?", + "ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas limitadas?", "ignore_notifications_modal.new_accounts_title": "Ignorar notificacións desde novas contas?", "ignore_notifications_modal.not_followers_title": "Ignorar notificacións de persoas que non te seguen?", "ignore_notifications_modal.not_following_title": "Ignorar notificacións de persoas que non segues?", @@ -463,7 +463,7 @@ "mute_modal.hide_options": "Opcións ao ocultar", "mute_modal.indefinite": "Ata que as reactive", "mute_modal.show_options": "Mostrar opcións", - "mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non o verás.", + "mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non a verás.", "mute_modal.they_wont_know": "Non saberá que a acalaches.", "mute_modal.title": "Acalar usuaria?", "mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.", diff --git a/config/locales/activerecord.be.yml b/config/locales/activerecord.be.yml index db6b632dc462c6..b1495c285552f0 100644 --- a/config/locales/activerecord.be.yml +++ b/config/locales/activerecord.be.yml @@ -15,6 +15,8 @@ be: user/invite_request: text: Прычына errors: + messages: + too_many_lines: перавышана абмежаванне ў %{limit} радкоў models: account: attributes: diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml index 1c3bcc6ebf58be..a47622161674da 100644 --- a/config/locales/activerecord.el.yml +++ b/config/locales/activerecord.el.yml @@ -15,6 +15,12 @@ el: user/invite_request: text: Αιτιολογία errors: + attributes: + domain: + invalid: δεν είναι έγκυρο όνομα τομέα + messages: + invalid_domain_on_line: το %{value} δεν είναι έγκυρο όνομα τομέα + too_many_lines: υπερβαίνει το όριο των %{limit} γραμμών models: account: attributes: diff --git a/config/locales/doorkeeper.af.yml b/config/locales/doorkeeper.af.yml index 9e05f403f6c920..d32730468a7c4d 100644 --- a/config/locales/doorkeeper.af.yml +++ b/config/locales/doorkeeper.af.yml @@ -60,7 +60,6 @@ af: error: title: "’n Fout het ingesluip" new: - prompt_html: "%{client_name} wil toegang hê tot jou rekening. Dit is ’n derdepartytoepassing. Moet dit nie toelaat as jy dit nie vertrou nie." review_permissions: Hersien toestemmings title: Benodig magtiging show: diff --git a/config/locales/doorkeeper.an.yml b/config/locales/doorkeeper.an.yml index 1096d8c8dc7667..bee55771de734e 100644 --- a/config/locales/doorkeeper.an.yml +++ b/config/locales/doorkeeper.an.yml @@ -60,7 +60,6 @@ an: error: title: Ha ocurriu una error new: - prompt_html: "%{client_name} deseya permiso pa acceder ta la tuya cuenta. Ye una aplicación de tercers. Si no confías en ella, no habrías d'autorizar-la." review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index 79e6c60152235b..8dea8b4894cedc 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -60,7 +60,6 @@ ar: error: title: حدث هناك خطأ new: - prompt_html: يريد %{client_name} الإذن للوصول إلى حسابك. إنه تطبيق طرف ثالث. إذا كنت لا تثق فيه، فلا ينبغي أن تأذن له بذلك. review_permissions: مراجعة الصلاحيات title: إذن بالتصريح show: diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml index 0df15a07b62330..c9c831f7f5bf77 100644 --- a/config/locales/doorkeeper.ast.yml +++ b/config/locales/doorkeeper.ast.yml @@ -41,7 +41,6 @@ ast: error: title: Prodúxose un error new: - prompt_html: "%{client_name}, que ye una aplicación de terceros, quier tener accesu a la cuenta. Si nun t'enfotes nella, nun habríes autorizala." review_permissions: Revisión de los permisos show: title: Copia esti códigu d'autorización y apiégalu na aplicación. diff --git a/config/locales/doorkeeper.be.yml b/config/locales/doorkeeper.be.yml index 75f9930e1a6b3a..defe0ddf0dbafc 100644 --- a/config/locales/doorkeeper.be.yml +++ b/config/locales/doorkeeper.be.yml @@ -60,7 +60,6 @@ be: error: title: Узнікла памылка new: - prompt_html: "%{client_name} хацеў бы атрымаць дазвол для доступу да вашага акаунта. Гэта вонкавае прыкладанне. Не давайце дазволу на гэта, калі вы не давяраеце гэтаму прыкладанню. " review_permissions: Прагледзець дазволы title: Патрабуецца аўтарызацыя show: diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml index a1ef1778547c02..25dce0ea0895fa 100644 --- a/config/locales/doorkeeper.bg.yml +++ b/config/locales/doorkeeper.bg.yml @@ -60,7 +60,6 @@ bg: error: title: Възникна грешка new: - prompt_html: "%{client_name} иска разрешение да има достъп до акаунта ви. Приложение от трета страна е.Ако не му се доверявате, то може да не го упълномощявате." review_permissions: Преглед на разрешенията title: Изисква се упълномощаване show: diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml index 85a09b5b433571..590339fe887949 100644 --- a/config/locales/doorkeeper.ca.yml +++ b/config/locales/doorkeeper.ca.yml @@ -60,7 +60,7 @@ ca: error: title: S'ha produït un error new: - prompt_html: "%{client_name} vol permís per accedir el teu compte. És una aplicació de tercers. Si no hi confies, no hauries d'autoritzar-la." + prompt_html: "%{client_name} demana accés al vostre compte. Només aproveu aquesta petició si reconeixeu i confieu en aquest origen." review_permissions: Revisa els permisos title: Cal autorizació show: diff --git a/config/locales/doorkeeper.ckb.yml b/config/locales/doorkeeper.ckb.yml index f952b6eca9ea87..b318bce859b06d 100644 --- a/config/locales/doorkeeper.ckb.yml +++ b/config/locales/doorkeeper.ckb.yml @@ -60,7 +60,6 @@ ckb: error: title: هەڵەیەک ڕوویدا new: - prompt_html: "%{client_name} حەز دەکات مۆڵەت بدرێت بۆ چوونە ناو ئەکاونتەکەت. ئەپڵیکەیشنێکی لایەنی سێیەمە. ئەگەر متمانەت پێی نییە، ئەوا نابێت ڕێگەی پێبدەیت." review_permissions: پێداچوونەوە بە مۆڵەتەکاندا بکە title: ڕێپێدان پێویستە show: diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index 1b98d0f88b3e9c..882be66ee0c3d6 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -60,7 +60,6 @@ cs: error: title: Vyskytla se chyba new: - prompt_html: "%{client_name} si přeje oprávnění pro přístup k vašemu účtu. Je to aplikace třetí strany. Pokud jí nedůvěřujete, pak byste ji neměli autorizovat." review_permissions: Zkontrolujte oprávnění title: Je vyžadována autorizace show: diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index f15d74d72146a8..80cc022a0b0300 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -60,7 +60,6 @@ cy: error: title: Mae rhywbeth wedi mynd o'i le new: - prompt_html: Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Mae'n gais trydydd parti. Os nad ydych yn ymddiried ynddo, yna peidiwch a'i awdurdodi. review_permissions: Adolygu caniatâd title: Angen awdurdodi show: diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml index cd11dcf4e391ff..7ac16e0012b36e 100644 --- a/config/locales/doorkeeper.da.yml +++ b/config/locales/doorkeeper.da.yml @@ -60,7 +60,7 @@ da: error: title: En fejl opstod new: - prompt_html: "%{client_name} ønsker tilladelse til at tilgå din konto. Den er en tredjepartsapplikation. Har du ikke tillid til den, bør den ikke godkendes." + prompt_html: "%{client_name} vil ønsker tilladelse til at tilgå din konto. Godkend kun denne anmodning, hvis kilden genkendes, og man stoler på den." review_permissions: Gennemgå tilladelser title: Godkendelse kræves show: diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index b29d668b2ed2ef..6d0e3010af7523 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -60,7 +60,7 @@ de: error: title: Ein Fehler ist aufgetreten new: - prompt_html: "%{client_name} möchte auf dein Konto zugreifen. Es handelt sich um eine Software von Dritten. Wenn du der Anwendung nicht vertraust, solltest du ihr keinen Zugriff auf dein Konto geben." + prompt_html: "%{client_name} möchte auf dein Konto zugreifen. Du solltest diese Anfrage nur genehmigen, wenn du diese Quelle kennst und ihr vertraust." review_permissions: Berechtigungen überprüfen title: Autorisierung erforderlich show: diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml index 7fcd69c2384b53..59877b6bd06766 100644 --- a/config/locales/doorkeeper.el.yml +++ b/config/locales/doorkeeper.el.yml @@ -60,7 +60,6 @@ el: error: title: Εμφανίστηκε σφάλμα new: - prompt_html: Το %{client_name} θα ήθελε άδεια πρόσβασης στο λογαριασμό σου. Είναι μια εφαρμογή τρίτων. Αν δεν το εμπιστεύεσαι, τότε δεν πρέπει να το εγκρίνεις. review_permissions: Ανασκόπηση δικαιωμάτων title: Απαιτείται έγκριση show: diff --git a/config/locales/doorkeeper.en-GB.yml b/config/locales/doorkeeper.en-GB.yml index 999284e85ff38e..63a4575e83ce51 100644 --- a/config/locales/doorkeeper.en-GB.yml +++ b/config/locales/doorkeeper.en-GB.yml @@ -60,7 +60,7 @@ en-GB: error: title: An error has occurred new: - prompt_html: "%{client_name} would like permission to access your account. It is a third-party application. If you do not trust it, then you should not authorise it." + prompt_html: "%{client_name} would like permission to access your account. Only approve this request if you recognise and trust this source." review_permissions: Review permissions title: Authorisation required show: diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index 8bb61c7a49cfc3..12e120f8befa67 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -60,7 +60,6 @@ eo: error: title: Eraro okazis new: - prompt_html: "%{client_name} petas permeson por aliri vian konton. Se vi ne fidas ĝin, ne rajtigu ĝin." review_permissions: Revizu permesojn title: Rajtigo bezonata show: diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 91f41912477480..9f3c862272e630 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -60,7 +60,7 @@ es-AR: error: title: Ocurrió un error new: - prompt_html: "%{client_name} solicita permiso para acceder a tu cuenta. Es una aplicación de terceros. Si no confiás en ella, no deberías autorizarla." + prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." review_permissions: Revisar permisos title: Autorización requerida show: diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index 49ff9a1e43d15d..419bb58f954aaa 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -60,7 +60,7 @@ es-MX: error: title: Ha ocurrido un error new: - prompt_html: "%{client_name} requiere permiso para acceder a tu cuenta. Es una aplicación de terceros. Si no confías en esta, no deberías autorizarla." + prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index b3c7ccddd46d89..093d84397aacad 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -60,7 +60,7 @@ es: error: title: Ha ocurrido un error new: - prompt_html: "%{client_name} desea permiso para acceder a tu cuenta. Es una aplicación de terceros. Si no confías en ella, no deberías autorizarla." + prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml index ffc42239a90296..ebfaf5c710d509 100644 --- a/config/locales/doorkeeper.et.yml +++ b/config/locales/doorkeeper.et.yml @@ -60,7 +60,6 @@ et: error: title: Ilmnes viga new: - prompt_html: "%{client_name} soovib luba kontole juurdepääsuks. See on kolmanda osapoole rakendus. Kui see pole usaldusväärne, siis ei tohiks seda lubada." review_permissions: Lubade ülevaade title: Autoriseerimine vajalik show: diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml index e7963672fae5d3..a09fe42f40a4dc 100644 --- a/config/locales/doorkeeper.eu.yml +++ b/config/locales/doorkeeper.eu.yml @@ -60,7 +60,6 @@ eu: error: title: Errore bat gertatu da new: - prompt_html: "%{client_name} bezeroak zure kontura sartzeko baimena nahi du. Hirugarrengoen aplikazio bat da. Ez bazara fidatzen, ez zenuke baimendu behar." review_permissions: Berrikusi baimenak title: Baimena behar da show: diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 0ce7a9591dc21b..4ff03950b55f80 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -60,7 +60,6 @@ fa: error: title: خطایی رخ داد new: - prompt_html: "%{client_name} خواهان اجازه دسترسی به حساب کاربری شماست. اگر به آن اعتماد ندارید، نباید تاییدش کنید." review_permissions: بازبینی اجازه‌ها title: نیاز به اجازه دادن show: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index ce8aef4a9fc6cb..7d44a6a6b92528 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -60,7 +60,7 @@ fi: error: title: Tapahtui virhe new: - prompt_html: "%{client_name} pyytää oikeutta käyttää tiliäsi. Se on kolmannen osapuolen sovellus. Jos et luota siihen, älä valtuuta sitä." + prompt_html: "%{client_name} haluaisi käyttöoikeuden tiliisi. Hyväksy tämä pyyntö vain, jos tunnistat lähteen ja luotat siihen." review_permissions: Tarkista käyttöoikeudet title: Valtuutus vaaditaan show: diff --git a/config/locales/doorkeeper.fo.yml b/config/locales/doorkeeper.fo.yml index 29f8cd3387ee49..b6c1998b3a109a 100644 --- a/config/locales/doorkeeper.fo.yml +++ b/config/locales/doorkeeper.fo.yml @@ -60,7 +60,7 @@ fo: error: title: Ein feilur er íkomin new: - prompt_html: "%{client_name} kundi hugsa sær atgongd til tína kontu. Tað er ein triðjaparts-nýtsluskipan. Tú skal ikki geva henni hesa heimld, um tú ikki hevur álit á henni." + prompt_html: "%{client_name} kundi hugsað sær atgongd til tína kontu. Góðtak einans hesa umbøn, um tú kennir hesa keldu aftur og hevur álit á henni." review_permissions: Eftirkanna rættindi title: Váttan kravd show: diff --git a/config/locales/doorkeeper.fr-CA.yml b/config/locales/doorkeeper.fr-CA.yml index f06cc7804df4aa..f3dad084b56fb0 100644 --- a/config/locales/doorkeeper.fr-CA.yml +++ b/config/locales/doorkeeper.fr-CA.yml @@ -60,7 +60,6 @@ fr-CA: error: title: Une erreur est survenue new: - prompt_html: "%{client_name} souhaite accéder à votre compte. Il s'agit d'une application tierce. Si vous ne lui faites pas confiance, vous ne devriez pas l'y autoriser." review_permissions: Examiner les autorisations title: Autorisation requise show: diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index cf8d1f08b43e77..fac58460c6b458 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -60,7 +60,6 @@ fr: error: title: Une erreur est survenue new: - prompt_html: "%{client_name} souhaite accéder à votre compte. Il s'agit d'une application tierce. Vous ne devriez pas l'y autoriser si vous ne lui faites pas confiance." review_permissions: Examiner les autorisations title: Autorisation requise show: diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml index f15389faf90b42..94e67d17a60763 100644 --- a/config/locales/doorkeeper.fy.yml +++ b/config/locales/doorkeeper.fy.yml @@ -60,7 +60,6 @@ fy: error: title: Der is in flater bard new: - prompt_html: "%{client_name} hat tastimming nedich om tagong te krijen ta jo account. It giet om in tapassing fan in tredde partij.As jo dit net fertrouwe, moatte jo gjin tastimming jaan." review_permissions: Tastimmingen beoardiele title: Autorisaasje fereaske show: diff --git a/config/locales/doorkeeper.ga.yml b/config/locales/doorkeeper.ga.yml index 95c3c4d2237449..27082028c75572 100644 --- a/config/locales/doorkeeper.ga.yml +++ b/config/locales/doorkeeper.ga.yml @@ -60,7 +60,6 @@ ga: error: title: Tharla earráid new: - prompt_html: Ba mhaith le %{client_name} cead rochtain a fháil ar do chuntas. Is iarratas tríú páirtí é. Mura bhfuil muinín agat as, níor cheart duit é a údarú. review_permissions: Ceadanna a athbhreithniú title: Tá údarú ag teastáil show: diff --git a/config/locales/doorkeeper.gd.yml b/config/locales/doorkeeper.gd.yml index 1db1a90f8014a3..8157a4e5fdabb5 100644 --- a/config/locales/doorkeeper.gd.yml +++ b/config/locales/doorkeeper.gd.yml @@ -60,7 +60,7 @@ gd: error: title: Thachair mearachd new: - prompt_html: Bu mhiann le %{client_name} cead gus an cunntas agad inntrigeadh. Seo aplacaid threas-phàrtaidh. Mur eil earbsa agad ann, na ùghdarraich e. + prompt_html: Bu toigh le %{client_name} cead fhaighinn airson an cunntas agad inntrigeadh. Na gabh ris an iarrtas seo ach mas aithne dhut an tùs seo agus earbsa agad ann. review_permissions: Thoir sùil air na ceadan title: Tha feum air ùghdarrachadh show: diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index 2103e50ea198d0..adee6bd3d3ccb4 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -60,7 +60,7 @@ gl: error: title: Algo fallou new: - prompt_html: "%{client_name} solicita permiso para acceder á túa conta. É unha aplicación de terceiros. Se non confías nela, non deberías autorizala." + prompt_html: "%{client_name} solicita permiso para acceder á túa conta. Aproba esta solicitude só se recoñeces e confías da súa orixe." review_permissions: Revisar permisos title: Autorización necesaria show: diff --git a/config/locales/doorkeeper.he.yml b/config/locales/doorkeeper.he.yml index 16a8fc94cf54d6..a454c779f18f3f 100644 --- a/config/locales/doorkeeper.he.yml +++ b/config/locales/doorkeeper.he.yml @@ -60,7 +60,7 @@ he: error: title: התרחשה שגיאה new: - prompt_html: "%{client_name} מעוניין בהרשאה לגשת לחשבונך. זוהי אפליקציית צד-שלישי. אם יש סיבה לא לבטוח בה, נא לא לאשר." + prompt_html: היישום %{client_name} מבקש גישה לחשבונך. אשרו רק אם אתם מזהים את הבקשה וסומכים על מקור הבקשה. review_permissions: עיון בהרשאות title: נדרשת הרשאה show: diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml index b3cd00f4beeec4..ff37786d28e12d 100644 --- a/config/locales/doorkeeper.hu.yml +++ b/config/locales/doorkeeper.hu.yml @@ -60,7 +60,6 @@ hu: error: title: Hiba történt new: - prompt_html: "%{client_name} szeretné elérni a fiókodat. Ez egy harmadik féltől származó alkalmazás. Ha nem bízol meg benne, ne addj felhatalmazást neki." review_permissions: Jogosultságok áttekintése title: Engedélyezés szükséges show: diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml index 985d073ab80ae6..6bf5e3850670e4 100644 --- a/config/locales/doorkeeper.ia.yml +++ b/config/locales/doorkeeper.ia.yml @@ -60,7 +60,6 @@ ia: error: title: Un error ha occurrite new: - prompt_html: "%{client_name} vole haber le permission de acceder a tu conto. Illo es un application tertie. Si tu non confide in illo, alora tu non deberea autorisar lo." review_permissions: Revider permissiones title: Autorisation necessari show: diff --git a/config/locales/doorkeeper.id.yml b/config/locales/doorkeeper.id.yml index 3f9a409c21c087..cccabc07012dc5 100644 --- a/config/locales/doorkeeper.id.yml +++ b/config/locales/doorkeeper.id.yml @@ -60,7 +60,6 @@ id: error: title: Ada yang error new: - prompt_html: "%{client_name} meminta izin untuk mengakses akun Anda. Ini adalah aplikasi pihak ketiga. Jika Anda tidak mempercayainya, Anda boleh tidak mengizinkannya." review_permissions: Tinjau izin title: Izin diperlukan show: diff --git a/config/locales/doorkeeper.ie.yml b/config/locales/doorkeeper.ie.yml index 0119f3573f13b3..6d8951b326e843 100644 --- a/config/locales/doorkeeper.ie.yml +++ b/config/locales/doorkeeper.ie.yml @@ -60,7 +60,6 @@ ie: error: title: Alquo ha errat new: - prompt_html: "%{client_name}, un aplication de triesim partise, vole permission por accesser tui conto. Si tu ne fide it, ne autorisa it." review_permissions: Inspecter permissiones title: Autorisation besonat show: diff --git a/config/locales/doorkeeper.io.yml b/config/locales/doorkeeper.io.yml index a71fa95841378e..0384d968beb3d6 100644 --- a/config/locales/doorkeeper.io.yml +++ b/config/locales/doorkeeper.io.yml @@ -60,7 +60,6 @@ io: error: title: Eroro eventis new: - prompt_html: "%{client_name} volas permiso por acesar vua konti. Ol esas externa softwaro. Se vu ne fidas, lore vu debas ne yurizar." review_permissions: Kontrolez permisi title: Yurizo bezonesas show: diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml index 01093f44298a42..05f2415eea537a 100644 --- a/config/locales/doorkeeper.is.yml +++ b/config/locales/doorkeeper.is.yml @@ -60,7 +60,6 @@ is: error: title: Villa kom upp new: - prompt_html: "%{client_name} biður um heimild til að fara inn á notandaaðganginn þinn. Þetta er utanaðkomandi hugbúnaður. Ef þú treystir ekki viðkomandi, þá ættir þú ekki að heimila þetta." review_permissions: Yfirfara heimildir title: Auðkenning er nauðsynleg show: diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index 9654cb2a20b1a3..3a24465cdc2c43 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -60,7 +60,7 @@ it: error: title: Si è verificato un errore new: - prompt_html: "%{client_name} vorrebbe l'autorizzazione ad accedere al tuo profilo. È un'applicazione di terze parti. Se non ti fidi, non dovresti autorizzarla." + prompt_html: "%{client_name} vorrebbe il permesso di accedere al tuo account. Approva questa richiesta solo se riconosci e ti fidi di questa fonte." review_permissions: Revisiona le autorizzazioni title: Autorizzazione necessaria show: diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 38c4d2c1aa9ad4..7cfddf50a16c65 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -60,7 +60,6 @@ ja: error: title: エラーが発生しました new: - prompt_html: "%{client_name}があなたのアカウントにアクセスする許可を求めています。心当たりが無い場合はアクセス許可しないでください。" review_permissions: アクセス許可を確認 title: 認証が必要です show: diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml index f35333f1df3859..4dabc19e432ad6 100644 --- a/config/locales/doorkeeper.ko.yml +++ b/config/locales/doorkeeper.ko.yml @@ -60,7 +60,6 @@ ko: error: title: 오류가 발생하였습니다 new: - prompt_html: "%{client_name} 제3자 애플리케이션이 귀하의 계정에 접근하기 위한 권한을 요청하고 있습니다. 이 애플리케이션을 신뢰할 수 없다면 이 요청을 승인하지 마십시오." review_permissions: 권한 검토 title: 승인 필요 show: diff --git a/config/locales/doorkeeper.ku.yml b/config/locales/doorkeeper.ku.yml index e3438eb5de0c5b..be6f0587c982a5 100644 --- a/config/locales/doorkeeper.ku.yml +++ b/config/locales/doorkeeper.ku.yml @@ -60,7 +60,6 @@ ku: error: title: Xeletîyek çêbû new: - prompt_html: "%{client_name} mafê dixwaze ku bigihîje ajimêrê te. Ew sepanek aliyê sêyemîn e. Ku tu pê bawer nakî, wê demê divê tu mafê gihiştinê nedî. " review_permissions: Gihiştinan binirxînin title: Destûr kirin pêwîst e show: diff --git a/config/locales/doorkeeper.lad.yml b/config/locales/doorkeeper.lad.yml index c335d67fd6ee09..678a53c91d3b00 100644 --- a/config/locales/doorkeeper.lad.yml +++ b/config/locales/doorkeeper.lad.yml @@ -60,7 +60,6 @@ lad: error: title: Un yerro tiene afitado new: - prompt_html: "%{client_name} kere permiso para akseder tu kuento. Es una aplikasyon de terseros. Si no konfias en eya, no deverias autorizarla." review_permissions: Reviza permisos title: Autorizasyon rekerida show: diff --git a/config/locales/doorkeeper.lt.yml b/config/locales/doorkeeper.lt.yml index 9b3b6558a42b1c..f957e4157ce95b 100644 --- a/config/locales/doorkeeper.lt.yml +++ b/config/locales/doorkeeper.lt.yml @@ -60,7 +60,7 @@ lt: error: title: Įvyko klaida. new: - prompt_html: "%{client_name} norėtų gauti leidimą pasiekti tavo paskyrą. Tai – trečiosios šalies programa. Jei ja nepasitiki, tada neturėtum leisti." + prompt_html: "%{client_name} norėtų gauti leidimą pasiekti tavo paskyrą. Patvirtink šį prašymą tik tada, jei atpažįsti šį šaltinį ir juo pasitiki." review_permissions: Peržiūrėti leidimus title: Privalomas leidimas show: diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 0f05adf1486c1b..55e288a9d67aa4 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -60,7 +60,6 @@ lv: error: title: Radās kļūda new: - prompt_html: "%{client_name} vēlas saņemt atļauju piekļūt tavam kontam. Tā ir trešās puses lietojumprogramma. Ja tu tam neuzticies, tad nevajadzētu to autorizēt." review_permissions: Pārskatīt atļaujas title: Nepieciešama autorizācija show: diff --git a/config/locales/doorkeeper.ms.yml b/config/locales/doorkeeper.ms.yml index 32fb0044bb4793..b52824e8c3d465 100644 --- a/config/locales/doorkeeper.ms.yml +++ b/config/locales/doorkeeper.ms.yml @@ -60,7 +60,6 @@ ms: error: title: Ralat telah berlaku new: - prompt_html: "%{client_name} ingin mendapatkan kebenaran untuk mengakses akaun anda. Ia adalah aplikasi pihak ketiga. Jika anda tidak mempercayainya, maka anda tidak seharusnya membenarkannya." review_permissions: Semak kebenaran title: Kebenaran diperlukan show: diff --git a/config/locales/doorkeeper.my.yml b/config/locales/doorkeeper.my.yml index bce6039eae14f7..0cfe50598233df 100644 --- a/config/locales/doorkeeper.my.yml +++ b/config/locales/doorkeeper.my.yml @@ -60,7 +60,6 @@ my: error: title: အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည် new: - prompt_html: "%{client_name} က သင့်အကောင့်သို့ ဝင်ရောက်ရန် ခွင့်ပြုချက်ရယူလိုပါသည်။ ၎င်းမှာ ပြင်ပကြားခံအက်ပလီကေးရှင်းတစ်ခုဖြစ်သည်။ သင် မယုံကြည်ပါက ၎င်းကိုခွင့်မပြုသင့်ပါ။" review_permissions: ခွင့်ပြုချက်များကို ပြန်လည်သုံးသပ်ပါ title: ခွင့်ပြုချက် လိုအပ်သည် show: diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml index 65ef826d387d8f..c6453761f144c6 100644 --- a/config/locales/doorkeeper.nl.yml +++ b/config/locales/doorkeeper.nl.yml @@ -60,7 +60,7 @@ nl: error: title: Er is een fout opgetreden new: - prompt_html: "%{client_name} heeft toestemming nodig om toegang te krijgen tot jouw account. Het betreft een third-party-toepassing.Als je dit niet vertrouwt, moet je geen toestemming verlenen." + prompt_html: "%{client_name} vraagt om toegang tot je account. Keur dit verzoek alleen goed als je deze bron herkent en vertrouwt." review_permissions: Toestemmingen beoordelen title: Autorisatie vereist show: diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml index 975ceb43c712be..9b9ddba08d68db 100644 --- a/config/locales/doorkeeper.nn.yml +++ b/config/locales/doorkeeper.nn.yml @@ -60,7 +60,7 @@ nn: error: title: Ein feil har oppstått new: - prompt_html: "%{client_name} ønsker tilgang til kontoen din. Det er ein tredjepartsapplikasjon. Dersom du ikkje stolar på den, bør du ikkje autorisere det." + prompt_html: "%{client_name} ynskjer tilgang til kontoen din. Godkjenn dette berre dersom du kjenner att og stolar på %{client_name}." review_permissions: Sjå gjennom løyve title: Autorisasjon nødvendig show: diff --git a/config/locales/doorkeeper.no.yml b/config/locales/doorkeeper.no.yml index c432f6645cf98b..7b7b9d65342689 100644 --- a/config/locales/doorkeeper.no.yml +++ b/config/locales/doorkeeper.no.yml @@ -60,7 +60,6 @@ error: title: En feil oppstod new: - prompt_html: "%{client_name} ønsker tilgang til kontoen din. Det er en tredjeparts applikasjon. Hvis du ikke stoler på den, bør du ikke autorisere den." review_permissions: Gå gjennom tillatelser title: Autorisasjon påkrevd show: diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml index 64bc3a43e2fb95..7f1155a839ea21 100644 --- a/config/locales/doorkeeper.oc.yml +++ b/config/locales/doorkeeper.oc.yml @@ -60,7 +60,6 @@ oc: error: title: I a agut un error new: - prompt_html: "%{client_name} volria l’autorizacion d’accedir a vòstre compte. Es una aplicacion tèrça.Se vos fisatz pas a ela, alara deuriatz pas l’autorizacion." review_permissions: Repassar las autorizacions title: Cal l’autorizacion show: diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml index bf2da6f8083d76..2ff1bb5f4509c5 100644 --- a/config/locales/doorkeeper.pl.yml +++ b/config/locales/doorkeeper.pl.yml @@ -60,7 +60,7 @@ pl: error: title: Wystapił błąd new: - prompt_html: "%{client_name} chciałby uzyskać pozwolenie na dostęp do Twojego konta. Jest to aplikacja zewnętrzna. Jeśli jej nie ufasz, nie powinno się jej autoryzować." + prompt_html: "%{client_name} prosi o dostęp do twojego konta. Tylko zatwierdź tę prośbę, jeżeli ją rozpoznajesz i ufasz." review_permissions: Sprawdź uprawnienia title: Wymagana jest autoryzacja show: diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index c991850c68cc7a..f7f9dce7eacf80 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -60,7 +60,6 @@ pt-BR: error: title: Ocorreu um erro new: - prompt_html: O %{client_name} gostaria de ter permissão para acessar sua conta. Trata-se de uma aplicação de terceiros. Se você não confia nesta aplicação, então você não deve autorizá-la. review_permissions: Rever permissões title: Autorização necessária show: diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml index 3b4439584b01c1..e2ac275335fd59 100644 --- a/config/locales/doorkeeper.pt-PT.yml +++ b/config/locales/doorkeeper.pt-PT.yml @@ -60,7 +60,6 @@ pt-PT: error: title: Ocorreu um erro new: - prompt_html: "%{client_name} pretende ter permissão para aceder à sua conta. É uma aplicação de terceiros. Se não confia nesta aplicação, então não deve autorizá-la." review_permissions: Rever permissões title: Autorização necessária show: diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml index 7091bcaf7b565e..9c02501eff7ca7 100644 --- a/config/locales/doorkeeper.ro.yml +++ b/config/locales/doorkeeper.ro.yml @@ -60,7 +60,6 @@ ro: error: title: A apărut o eroare new: - prompt_html: "%{client_name} dorește să îți acceseze contul. Este o aplicație terță. Dacă nu aveți încredere în ea, atunci nu ar trebui să o autorizați." review_permissions: Revizuiți permisiunile title: Autorizare necesară show: diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index 12b7e7e87e0b45..1dcb2093d517d2 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -60,7 +60,6 @@ ru: error: title: Произошла ошибка new: - prompt_html: "%{client_name} хочет получить доступ к вашему аккаунту. Это стороннее приложение. Если вы ему не доверяете, не разрешайте доступ." review_permissions: Просмотр разрешений title: Требуется авторизация show: diff --git a/config/locales/doorkeeper.sco.yml b/config/locales/doorkeeper.sco.yml index 70341c3c691123..6e54c53ca508ca 100644 --- a/config/locales/doorkeeper.sco.yml +++ b/config/locales/doorkeeper.sco.yml @@ -60,7 +60,6 @@ sco: error: title: A error haes occurrt new: - prompt_html: "%{client_name} wad like permission fir tae access yer accoont. It is a third-party application. Gin ye dinnae trust it, then ye shuidnae authorize it." review_permissions: Luik ower permissions title: Authorization requirt show: diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index d3550cf5989b78..43a109b194cb77 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -60,7 +60,6 @@ si: error: title: දෝෂයක් සිදු වී ඇත new: - prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." review_permissions: අවසර සමාලෝචනය title: බලය පැවරීමේ අවශ්ය show: diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml index face9db96668f5..774a2648f9807c 100644 --- a/config/locales/doorkeeper.sk.yml +++ b/config/locales/doorkeeper.sk.yml @@ -60,7 +60,6 @@ sk: error: title: Nastala chyba new: - prompt_html: "%{client_name} žiada o povolenie na prístup k vášmu účtu. Ide o aplikáciu tretej strany. Ak jej nedôverujete, nemali by ste ju povoliť." review_permissions: Preskúmať povolenia title: Je potrebné schválenie show: diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml index f6f64fc87fa0f2..3f36c7375643e3 100644 --- a/config/locales/doorkeeper.sl.yml +++ b/config/locales/doorkeeper.sl.yml @@ -60,7 +60,6 @@ sl: error: title: Prišlo je do napake new: - prompt_html: "%{client_name} želi dovoljenje za dostop do vašega računa. Gre za zunanji program. Če mu ne zaupate, mu ne dodelite teh pravic." review_permissions: Preglej dovoljenja title: Potrebna je odobritev show: diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 651f90b3b4ce42..1fd9000aa2dc85 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -60,7 +60,6 @@ sq: error: title: Ndodhi një gabim new: - prompt_html: "%{client_name} do të donte leje të hyjë në llogarinë tuaj. Është një aplikacion palësh të treta. Nëse s’i zini besë, atëherë s’duhet ta autorizoni." review_permissions: Shqyrtoni leje title: Lypset autorizim show: diff --git a/config/locales/doorkeeper.sr-Latn.yml b/config/locales/doorkeeper.sr-Latn.yml index 89e84344fd43fa..bce2b1c08371c6 100644 --- a/config/locales/doorkeeper.sr-Latn.yml +++ b/config/locales/doorkeeper.sr-Latn.yml @@ -60,7 +60,6 @@ sr-Latn: error: title: Dogodila se greška new: - prompt_html: "%{client_name} želi dozvolu za pristup tvom nalogu. U pitanju je aplikacija treće strane. Ako smatraš da nije pouzdana, ne bi trebalo da je ovlastiš." review_permissions: Pregledaj dozvole title: Potrebna autorizacija show: diff --git a/config/locales/doorkeeper.sr.yml b/config/locales/doorkeeper.sr.yml index 63b940478495d2..b6ab6e61c0914a 100644 --- a/config/locales/doorkeeper.sr.yml +++ b/config/locales/doorkeeper.sr.yml @@ -60,7 +60,6 @@ sr: error: title: Догодила се грешка new: - prompt_html: "%{client_name} жели дозволу за приступ твом налогу. У питању је апликација треће стране. Ако сматраш да није поуздана, не би требало да је овластиш." review_permissions: Прегледај дозволе title: Потребна ауторизација show: diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 83927d10977bd8..9f646fd3e4b454 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -60,7 +60,6 @@ sv: error: title: Ett fel har uppstått new: - prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Det är en applikation från tredje part. Du bör endast godkänna den om du litar på den." review_permissions: Granska behörigheter title: Godkännande krävs show: diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 3735386ba3831f..e7ed0ba8a3bdb5 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -60,7 +60,6 @@ th: error: title: เกิดข้อผิดพลาด new: - prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ แอปพลิเคชันเป็นแอปพลิเคชันจากบุคคลที่สาม หากคุณไม่เชื่อถือแอปพลิเคชัน คุณไม่ควรอนุญาตแอปพลิเคชัน" review_permissions: ตรวจทานสิทธิอนุญาต title: ต้องการการอนุญาต show: diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 41996d96035b32..f7f67564d20949 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -60,7 +60,7 @@ tr: error: title: Bir hata oluştu new: - prompt_html: "%{client_name} hesabınıza erişme izni istiyor. Bu üçüncü taraf bir uygulamadır. Eğer güvenmiyorsanız, izin vermemelisiniz." + prompt_html: "%{client_name} hesabınıze erişmek için izin istiyor. Bu isteği sadece bu kaynağı tanıyor ve güveniyorsanız onaylayın." review_permissions: İzinleri incele title: İzin gerekli show: diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml index 55b91fd69dabdc..1e18eaef9a1918 100644 --- a/config/locales/doorkeeper.uk.yml +++ b/config/locales/doorkeeper.uk.yml @@ -60,7 +60,7 @@ uk: error: title: Сталася помилка new: - prompt_html: "%{client_name} хоче отримати доступ до вашого облікового запису. Це сторонній застосунок. Якщо ви йому не довіряєте, не варто авторизувати його." + prompt_html: "%{client_name} хоче отримати дозвіл на доступ до вашого облікового запису. Схвалюйте цей запит, якщо ви впізнаєте це джерело і довіряєте йому." review_permissions: Переглянути дозволи title: Необхідна авторизація show: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 5837961737aa63..195e527f70d643 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -60,7 +60,7 @@ vi: error: title: Một lỗi đã xảy ra new: - prompt_html: "%{client_name} yêu cầu truy cập tài khoản của bạn. Đây là ứng dụng của bên thứ ba. Nếu không tin tưởng, đừng cho phép nó." + prompt_html: "%{client_name} cần được bạn cho phép truy cập vào tài khoản. Cho phép nếu bạn tin tưởng ứng dụng này." review_permissions: Quyền truy cập title: Yêu cầu truy cập show: diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index ee8c0cf13aa098..46253d01b3f57c 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -60,7 +60,7 @@ zh-CN: error: title: 发生错误 new: - prompt_html: "%{client_name} 希望得到访问你账号的许可。这是一个第三方应用。如果你不信任它,那么你不应该授权它。" + prompt_html: "%{client_name} 请求获得访问您账户的权限。 请在确保自己了解并信任此来源后再批准该请求。" review_permissions: 检查权限 title: 需要授权 show: diff --git a/config/locales/doorkeeper.zh-HK.yml b/config/locales/doorkeeper.zh-HK.yml index 79629b12febf39..4450cfc1a4b242 100644 --- a/config/locales/doorkeeper.zh-HK.yml +++ b/config/locales/doorkeeper.zh-HK.yml @@ -60,7 +60,6 @@ zh-HK: error: title: 發生錯誤 new: - prompt_html: "%{client_name} 想得到存取你帳號的權限。這是一個第三方應用程式。如果你不信任它,請勿授權。" review_permissions: 檢視權限 title: 需要用戶授權 show: diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index 2759f0a3d26d02..5af93e1e07b72e 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -60,7 +60,7 @@ zh-TW: error: title: 發生錯誤 new: - prompt_html: "%{client_name} 欲請求存取您帳號之權限。這是一個第三方應用程式。若您不信任該應用程式,請不要授權。" + prompt_html: "%{client_name} 想要請求存取您帳號之權限。請僅於您所識別且信任此來源時允許請求。" review_permissions: 檢視權限 title: 需要授權 show: diff --git a/config/locales/el.yml b/config/locales/el.yml index 0da957cdb28de7..c119beec17fd7f 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -24,6 +24,8 @@ el: admin: account_actions: action: Εκτέλεση ενέργειας + already_silenced: Αυτός ο λογαριασμός έχει ήδη περιοριστεί. + already_suspended: Αυτός ο λογαριασμός έχει ήδη ανασταλεί. title: Εκτέλεση ενέργειας συντονισμού στον %{acct} account_moderation_notes: create: Άφησε σημείωση @@ -45,6 +47,7 @@ el: title: Αλλαγή email για %{username} change_role: changed_msg: Ο ρόλος άλλαξε επιτυχώς! + edit_roles: Διαχείριση ρόλων χρήστη label: Αλλαγή ρόλου no_role: Κανένας ρόλος title: Αλλαγή ρόλου για %{username} diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 7ebf0748194067..2d03ce08a7f27c 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -24,12 +24,15 @@ eo: admin: account_actions: action: Plenumi agon + already_silenced: Ĉi tiu konto jam estis limigita. + already_suspended: Ĉi tiu konto jam estis suspendita. title: Plenumi kontrolan agon al %{acct} account_moderation_notes: create: Lasi noton created_msg: Noto de moderigado sukcese kreita! destroyed_msg: Noto de moderigado sukcese detruita! accounts: + add_email_domain_block: Bloki retpoŝtan domajnon approve: Aprobi approved_msg: Sukcese aprobis aliĝ-peton de %{username} are_you_sure: Ĉu vi certas? @@ -44,6 +47,7 @@ eo: title: Ŝanĝi retadreson por %{username} change_role: changed_msg: Rolo sukcese ŝanĝita! + edit_roles: Administri uzantrolojn label: Ŝanĝi rolon no_role: Neniu rolo title: Ŝanĝi rolon por %{username} @@ -817,16 +821,27 @@ eo: action: Klaku ĉi tie por pliaj informoj message_html: "Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko." tags: + moderation: + title: Stato + name: Nomo + newest: Plej novaj + oldest: Plej malnovaj review: La statuso de la recenzo + search: Serĉi + title: Kradvortoj updated_msg: Kradvorto agordoj ĝisdatigis sukcese title: Administrado trends: allow: Permesi approved: Aprobita + confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn etikedojn? + confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn etikedojn? disallow: Malpermesi links: allow: Permesi ligilon allow_provider: Permesi publikiganto + confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn? + confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn? description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton. disallow: Malpermesi ligilon disallow_provider: Malpermesi publikiganton @@ -850,6 +865,8 @@ eo: statuses: allow: Permesi afiŝon allow_account: Permesi aŭtoron + confirm_allow_account: Ĉu vi certas, ke vi volas permesi elektitajn kontojn? + confirm_disallow_account: Ĉu vi certas, ke vi volas malpermesi elektitajn kontojn? description_html: Oni multe diskonigas kaj stelumas ĉi tiujn mesaĝojn nuntempe laŭ via servilo. Tio povas helpi novajn kaj revenantajn uzantojn trovi pli da homoj por sekvi. Mesaĝo estas montrita publike nur se vi aprobis la aŭtoron kaj se la aŭtoro aprobis ke ties konto estu proponita al aliaj. Vi ankaŭ povas permesi aŭ malakcepti specifajn mesaĝojn. disallow: Malpermesi afiŝon disallow_account: Malpermesi aŭtoron @@ -928,6 +945,8 @@ eo: body: "%{reporter} signalis %{target}" body_remote: Iu de %{domain} signalis %{target} subject: Nova signalo por %{instance} (#%{id}) + new_software_updates: + body: Novaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi! new_trends: body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:' new_trending_links: @@ -1033,6 +1052,9 @@ eo: view_strikes: Vidi antauaj admonoj kontra via konto too_fast: Formularo sendita tro rapide, klopodu denove. use_security_key: Uzi sekurecan ŝlosilon + author_attribution: + more_from_html: Pli de %{name} + s_blog: Blogo de %{name} challenge: confirm: Daŭrigi hint_html: "Konsileto: Ni ne demandos pri via pasvorto ĝis 1 horo." @@ -1231,6 +1253,7 @@ eo: states: finished: Finita unconfirmed: Nekonfirmita + status: Stato success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite titles: following: Importado de sekvaj kontoj @@ -1689,7 +1712,13 @@ eo: silence: Konto limigita suspend: Konto suspendita welcome: + apps_step: Elŝutu niajn oficialajn aplikaĵojn. + apps_title: Aplikaĵoj de Mastodon + edit_profile_action: Agordi + edit_profile_title: Agordi vian profilon explanation: Jen kelkaj konsiloj por helpi vin komenci + feature_action: Lerni pli + follow_action: Sekvi subject: Bonvenon en Mastodon title: Bonvenon, %{name}! users: diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index 88c1c0e184312d..d46e764a44fdaf 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -2,6 +2,15 @@ el: simple_form: hints: + account: + attribution_domains_as_text: Προστατεύει από ψευδείς ιδιότητες. + discoverable: Οι δημόσιες δημοσιεύσεις και το προφίλ σου μπορεί να εμφανίζονται ή να συνιστώνται σε διάφορους τομείς του Mastodon και το προφίλ σου μπορεί να προτείνεται σε άλλους χρήστες. + display_name: Το πλήρες ή το αστείο σου όνομα. + fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες. + indexable: Οι δημόσιες δημοσιεύσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης στο Mastodon. Άτομα που έχουν αλληλεπιδράσει με τις δημοσιεύσεις σου μπορεί να είναι σε θέση να τις αναζητήσουν όπως και να 'χει. + note: 'Μπορείς να @επισημάνεις άλλα άτομα ή #ετικέτες.' + show_collections: Οι χρήστες θα είναι σε θέση να περιηγηθούν στα άτομα που ακολουθείς και στους ακόλουθούς σου. Άτομα που ακολουθείς θα βλέπουν ότι τους ακολουθείς όπως και να 'χει. + unlocked: Οι χρήστες θα είναι σε θέση να σε ακολουθήσουν χωρίς να ζητούν έγκριση. Κατάργησε την επιλογή αν θες να αξιολογείς τα αιτήματα ακολούθησης και να επιλέξεις αν θα αποδεχθείς ή απορρίψεις νέους ακόλουθους. account_alias: acct: Όρισε το username@domain του λογαριασμού από τον οποίο θέλεις να μετακινηθείς account_migration: @@ -31,12 +40,14 @@ el: text: Μπορείς να κάνετε έφεση σε ένα παράπτωμα μόνο μία φορά defaults: autofollow: Όσοι εγγραφούν μέσω της πρόσκλησης θα σε ακολουθούν αυτόματα + avatar: WEBP, PNG, GIF ή JPG. Το πολύ %{size}. Θα υποβαθμιστεί σε %{dimensions}px bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου email: Θα σου σταλεί email επιβεβαίωσης + header: WEBP, PNG, GIF ή JPG. Το πολύ %{size}. Θα υποβαθμιστεί σε %{dimensions}px inbox_url: Αντέγραψε το URL της αρχικής σελίδας του ανταποκριτή που θέλεις να χρησιμοποιήσεις irreversible: Οι φιλτραρισμένες αναρτήσεις θα εξαφανιστούν αμετάκλητα, ακόμα και αν το φίλτρο αργότερα αφαιρεθεί locale: Η γλώσσα χρήσης, των email και των ειδοποιήσεων push @@ -67,10 +78,15 @@ el: warn: Απόκρυψη φιλτραρισμένου περιεχομένου πίσω από μια προειδοποίηση που αναφέρει τον τίτλο του φίλτρου form_admin_settings: activity_api_enabled: Καταμέτρηση τοπικά δημοσιευμένων δημοσιεύσεων, ενεργών χρηστών και νέων εγγραφών σε εβδομαδιαία πακέτα + app_icon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο εικονίδιο εφαρμογής σε κινητές συσκευές με προσαρμοσμένο εικονίδιο. + backups_retention_period: Οι χρήστες έχουν τη δυνατότητα να δημιουργήσουν αρχεία των αναρτήσεων τους για να κατεβάσουν αργότερα. Όταν οριστεί μια θετική τιμή, αυτά τα αρχεία θα διαγράφονται αυτόματα από τον αποθηκευτικό σου χώρο μετά τον καθορισμένο αριθμό ημερών. bootstrap_timeline_accounts: Αυτοί οι λογαριασμοί θα καρφιτσωθούν στην κορυφή των νέων χρηστών που ακολουθούν τις συστάσεις. closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές + content_cache_retention_period: Όλες οι αναρτήσεις από άλλους διακομιστές (συμπεριλαμβανομένων των ενισχύσεων και απαντήσεων) θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών, χωρίς να λαμβάνεται υπόψη οποιαδήποτε αλληλεπίδραση τοπικού χρήστη με αυτές τις αναρτήσεις. Αυτό περιλαμβάνει αναρτήσεις όπου ένας τοπικός χρήστης την έχει χαρακτηρίσει ως σελιδοδείκτη ή αγαπημένη. Θα χαθούν επίσης ιδιωτικές αναφορές μεταξύ χρηστών από διαφορετικές οντότητες και θα είναι αδύνατο να αποκατασταθούν. Η χρήση αυτής της ρύθμισης προορίζεται για οντότητες ειδικού σκοπού και χαλάει πολλές προσδοκίες του χρήστη όταν εφαρμόζεται για χρήση γενική σκοπού. custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστοσελίδας του Mastodon. + favicon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο favicon του Mastodon με ένα προσαρμοσμένο εικονίδιο. mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού. + media_cache_retention_period: Τα αρχεία πολυμέσων από αναρτήσεις που γίνονται από απομακρυσμένους χρήστες αποθηκεύονται προσωρινά στο διακομιστή σου. Όταν οριστεί μια θετική τιμή, τα μέσα θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών. Αν τα δεδομένα πολυμέσων ζητηθούν μετά τη διαγραφή τους, θα γίνει ε, αν το πηγαίο περιεχόμενο είναι ακόμα διαθέσιμο. Λόγω περιορισμών σχετικά με το πόσο συχνά οι κάρτες προεπισκόπησης συνδέσμων συνδέονται σε ιστοσελίδες τρίτων, συνιστάται να ορίσεις αυτή την τιμή σε τουλάχιστον 14 ημέρες ή οι κάρτες προεπισκόπησης συνδέσμων δεν θα ενημερώνονται κατ' απάιτηση πριν από εκείνη την ώρα. peers_api_enabled: Μια λίστα με ονόματα τομέα που συνάντησε αυτός ο διακομιστής στο fediverse. Δεν περιλαμβάνονται δεδομένα εδώ για το αν συναλλάσσετε με ένα συγκεκριμένο διακομιστή, μόνο ότι ο διακομιστής σας το ξέρει. Χρησιμοποιείται από υπηρεσίες που συλλέγουν στατιστικά στοιχεία για την συναλλαγή με γενική έννοια. profile_directory: Ο κατάλογος προφίλ παραθέτει όλους τους χρήστες που έχουν επιλέξει να είναι ανακαλύψιμοι. require_invite_text: 'Όταν η εγγραφή απαιτεί χειροκίνητη έγκριση, κάνε το πεδίο κειμένου: «Γιατί θέλετε να συμμετάσχετε;» υποχρεωτικό αντί για προαιρετικό' @@ -103,14 +119,19 @@ el: sign_up_requires_approval: Νέες εγγραφές θα απαιτούν την έγκριση σας severity: Επιλέξτε τι θα γίνεται με αιτήσεις από αυτήν την διεύθυνση IP rule: + hint: Προαιρετικό. Δώσε περισσότερες λεπτομέρειες σχετικά με τον κανόνα text: Περιγράψτε έναν κανόνα ή μια απαίτηση για τους χρήστες σε αυτόν τον διακομιστή. Προσπαθήστε να τον κρατήσετε σύντομο και απλό sessions: otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:' webauthn: Αν πρόκειται για ένα κλειδί USB βεβαιωθείτε ότι είναι συνδεδεμένο και αν απαιτείται πατήστε το ελαφρά. + settings: + indexable: Η σελίδα του προφίλ σου μπορεί να εμφανιστεί στα αποτελέσματα αναζήτησης στο Google, Bing και άλλες. + show_application: Θα είσαι πάντα σε θέση να δεις ποια εφαρμογή δημοσίευσε την ανάρτησή σου όπως και να 'χει. tag: name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο user: chosen_languages: Όταν ενεργοποιηθεί, στη δημόσια ροή θα εμφανίζονται τουτ μόνο από τις επιλεγμένες γλώσσες + role: Ο ρόλος ελέγχει ποια δικαιώματα έχει ο χρήστης. user_role: color: Το χρώμα που θα χρησιμοποιηθεί για το ρόλο σε ολόκληρη τη διεπαφή, ως RGB σε δεκαεξαδική μορφή highlighted: Αυτό καθιστά το ρόλο δημόσια ορατό @@ -119,12 +140,18 @@ el: position: Ανώτεροι ρόλοι αποφασίζει την επίλυση συγκρούσεων σε ορισμένες περιπτώσεις. Ορισμένες ενέργειες μπορούν να εκτελεστούν μόνο σε ρόλους με χαμηλότερη προτεραιότητα webhook: events: Επιλέξτε συμβάντα για αποστολή + template: Σύνθεσε το δικό σου JSON payload χρησιμοποιώντας μεταβλητή παρεμβολή. Άφησε κενό για προεπιλογή JSON. url: Πού θα σταλούν τα γεγονότα labels: account: + attribution_domains_as_text: Να επιτρέπονται μόνο συγκεκριμένες ιστοσελίδες + discoverable: Παροχή προφίλ και αναρτήσεων σε αλγορίθμους ανακάλυψης fields: name: Περιγραφή value: Περιεχόμενο + indexable: Συμπερίληψη δημόσιων αναρτήσεων στα αποτελέσματα αναζήτησης + show_collections: Εμφάνιση ακολούθων και ακολουθουμένων στο προφίλ + unlocked: Αυτόματη αποδοχή νέων ακολούθων account_alias: acct: Διακριτικό του παλιού λογαριασμού account_migration: @@ -186,6 +213,7 @@ el: setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων setting_default_sensitive: Σημείωση όλων των πολυμέσων ως ευαίσθητου περιεχομένου setting_delete_modal: Επιβεβαίωση πριν τη διαγραφή ενός τουτ + setting_disable_hover_cards: Απενεργοποίηση προεπισκόπησης προφίλ κατά την αιώρηση setting_disable_swiping: Απενεργοποίηση κινήσεων συρσίματος setting_display_media: Εμφάνιση πολυμέσων setting_display_media_default: Προκαθορισμένο @@ -217,10 +245,13 @@ el: warn: Απόκρυψη με προειδοποίηση form_admin_settings: activity_api_enabled: Δημοσίευση συγκεντρωτικών στατιστικών σχετικά με τη δραστηριότητα του χρήστη στο API + app_icon: Εικονίδιο εφαρμογής backups_retention_period: Περίοδος αρχειοθέτησης του χρήστη bootstrap_timeline_accounts: Πρότεινε πάντα αυτούς τους λογαριασμούς σε νέους χρήστες closed_registrations_message: Προσαρμοσμένο μήνυμα όταν οι εγγραφές δεν είναι διαθέσιμες + content_cache_retention_period: Περίοδος διατήρησης απομακρυσμένου περιεχομένου custom_css: Προσαρμοσμένο CSS + favicon: Favicon mascot: Προσαρμοσμένη μασκότ (απαρχαιωμένο) media_cache_retention_period: Περίοδος διατήρησης προσωρινής μνήμης πολυμέσων peers_api_enabled: Δημοσίευση λίστας των εντοπισμένων διακομιστών στο API @@ -268,15 +299,27 @@ el: pending_account: Αποστολή email όταν υπάρχει νέος λογαριασμός για επιθεώρηση reblog: Αποστολή email όταν κάποιος προωθεί τη δημοσίευση σου report: Υποβλήθηκε νέα αναφορά + software_updates: + all: Ειδοποίηση για όλες τις ενημερώσεις + critical: Ειδοποίηση μόνο για κρίσιμες ενημερώσεις + label: Μια νέα έκδοση του Mastodon είναι διαθέσιμη + none: Να μην ειδοποιούμαι ποτέ για ενημερώσεις (δεν συνιστάται) + patch: Ειδοποίηση για ενημερώσεις σφαλμάτων trending_tag: Νέο περιεχόμενο προς τάση απαιτεί αξιολόγηση rule: + hint: Επιπρόσθετες πληροφορίες text: Κανόνας + settings: + indexable: Συμπερίληψη σελίδας προφίλ στις μηχανές αναζήτησης + show_application: Εμφάνιση από ποια εφαρμογή έστειλες μία ανάρτηση tag: listable: Εμφάνιση αυτής της ετικέτας στο δημόσιο κατάλογο name: Ετικέτα trendable: Εμφάνιση της ετικέτας στις τάσεις + usable: Να επιτρέπεται η τοπική χρήση αυτής της ετικέτας από αναρτήσεις user: role: Ρόλος + time_zone: Ζώνη ώρας user_role: color: Χρώμα εμβλήματος highlighted: Εμφάνιση ρόλου ως σήμα στα προφίλ χρηστών @@ -285,9 +328,11 @@ el: position: Προτεραιότητα webhook: events: Ενεργοποιημένα συμβάντα + template: Πρότυπο payload url: Endpoint URL 'no': Όχι not_recommended: Δεν προτείνεται + overridden: Αντικαταστάθηκε recommended: Προτείνεται required: mark: "*" From 7c61533111a7046126a93580e744f99f1b72337e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:54:25 +0200 Subject: [PATCH 100/467] Update dependency aws-sdk-s3 to v1.165.0 (#32050) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8f0c0ed53c88f2..d8a13e8ecfbbaf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -101,15 +101,15 @@ GEM awrence (1.2.1) aws-eventstream (1.3.0) aws-partitions (1.977.0) - aws-sdk-core (3.207.0) + aws-sdk-core (3.208.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.92.0) + aws-sdk-kms (1.93.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.164.0) + aws-sdk-s3 (1.165.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From 780e2e9d660db329a375e6120d25be5b689acb66 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 24 Sep 2024 08:07:16 -0400 Subject: [PATCH 101/467] Convert notification mailer spec shared examples to matchers (#32047) --- spec/mailers/notification_mailer_spec.rb | 40 +++++------------------- spec/support/examples/mailers.rb | 29 +++++++++++++++++ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index eab196166d3219..056000b0422f55 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -8,38 +8,12 @@ let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } let(:own_status) { Fabricate(:status, account: receiver.account, text: 'The body of the own status') } - shared_examples 'standard headers' do |type| - it 'renders the email' do - expect(mail) - .to be_present - .and(have_header('To', "#{receiver.account.username} <#{receiver.email}>")) - .and(have_header('List-ID', "<#{type}.alice.cb6e6126.ngrok.io>")) - .and(have_header('List-Unsubscribe', %r{})) - .and(have_header('List-Unsubscribe', /&type=#{type}/)) - .and(have_header('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click')) - .and(deliver_to("#{receiver.account.username} <#{receiver.email}>")) - .and(deliver_from('notifications@localhost')) - end - end - - shared_examples 'thread headers' do - it 'renders the email with conversation thread headers' do - conversation_header_regex = // - expect(mail) - .to be_present - .and(have_header('In-Reply-To', conversation_header_regex)) - .and(have_header('References', conversation_header_regex)) - end - end - describe 'mention' do let(:mention) { Mention.create!(account: receiver.account, status: foreign_status) } let(:notification) { Notification.create!(account: receiver.account, activity: mention) } let(:mail) { prepared_mailer_for(receiver.account).mention } include_examples 'localized subject', 'notification_mailer.mention.subject', name: 'bob' - include_examples 'standard headers', 'mention' - include_examples 'thread headers' it 'renders the email' do expect(mail) @@ -47,6 +21,8 @@ .and(have_subject('You were mentioned by bob')) .and(have_body_text('You were mentioned by bob')) .and(have_body_text('The body of the foreign status')) + .and have_thread_headers + .and have_standard_headers('mention').for(receiver) end end @@ -56,13 +32,13 @@ let(:mail) { prepared_mailer_for(receiver.account).follow } include_examples 'localized subject', 'notification_mailer.follow.subject', name: 'bob' - include_examples 'standard headers', 'follow' it 'renders the email' do expect(mail) .to be_present .and(have_subject('bob is now following you')) .and(have_body_text('bob is now following you')) + .and have_standard_headers('follow').for(receiver) end end @@ -72,8 +48,6 @@ let(:mail) { prepared_mailer_for(own_status.account).favourite } include_examples 'localized subject', 'notification_mailer.favourite.subject', name: 'bob' - include_examples 'standard headers', 'favourite' - include_examples 'thread headers' it 'renders the email' do expect(mail) @@ -81,6 +55,8 @@ .and(have_subject('bob favorited your post')) .and(have_body_text('Your post was favorited by bob')) .and(have_body_text('The body of the own status')) + .and have_thread_headers + .and have_standard_headers('favourite').for(receiver) end end @@ -90,8 +66,6 @@ let(:mail) { prepared_mailer_for(own_status.account).reblog } include_examples 'localized subject', 'notification_mailer.reblog.subject', name: 'bob' - include_examples 'standard headers', 'reblog' - include_examples 'thread headers' it 'renders the email' do expect(mail) @@ -99,6 +73,8 @@ .and(have_subject('bob boosted your post')) .and(have_body_text('Your post was boosted by bob')) .and(have_body_text('The body of the own status')) + .and have_thread_headers + .and have_standard_headers('reblog').for(receiver) end end @@ -108,13 +84,13 @@ let(:mail) { prepared_mailer_for(receiver.account).follow_request } include_examples 'localized subject', 'notification_mailer.follow_request.subject', name: 'bob' - include_examples 'standard headers', 'follow_request' it 'renders the email' do expect(mail) .to be_present .and(have_subject('Pending follower: bob')) .and(have_body_text('bob has requested to follow you')) + .and have_standard_headers('follow_request').for(receiver) end end diff --git a/spec/support/examples/mailers.rb b/spec/support/examples/mailers.rb index a8469f196490ac..c1767dc419f189 100644 --- a/spec/support/examples/mailers.rb +++ b/spec/support/examples/mailers.rb @@ -12,3 +12,32 @@ expect(mail.subject).to eq I18n.t(*args, **kwrest.merge(locale: I18n.default_locale)) end end + +RSpec::Matchers.define :have_thread_headers do + match(notify_expectation_failures: true) do |mail| + expect(mail) + .to be_present + .and(have_header('In-Reply-To', conversation_header_regex)) + .and(have_header('References', conversation_header_regex)) + end + + def conversation_header_regex = // +end + +RSpec::Matchers.define :have_standard_headers do |type| + chain :for do |user| + @user = user + end + + match(notify_expectation_failures: true) do |mail| + expect(mail) + .to be_present + .and(have_header('To', "#{@user.account.username} <#{@user.email}>")) + .and(have_header('List-ID', "<#{type}.#{@user.account.username}.#{Rails.configuration.x.local_domain}>")) + .and(have_header('List-Unsubscribe', %r{})) + .and(have_header('List-Unsubscribe', /&type=#{type}/)) + .and(have_header('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click')) + .and(deliver_to("#{@user.account.username} <#{@user.email}>")) + .and(deliver_from(Rails.configuration.action_mailer.default_options[:from])) + end +end From 19dedd7cfd9a6d61e136519ede4447d7ec0e6e60 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 24 Sep 2024 09:16:31 -0400 Subject: [PATCH 102/467] Set important mailer headers with `after_action` callback (#32057) --- app/mailers/admin_mailer.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 72a2c2e64e144a..fffbbb3c6db2df 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -9,6 +9,8 @@ class AdminMailer < ApplicationMailer before_action :process_params before_action :set_instance + after_action :set_important_headers!, only: :new_critical_software_updates + default to: -> { @me.user_email } def new_report(report) @@ -56,12 +58,6 @@ def new_software_updates def new_critical_software_updates @software_updates = SoftwareUpdate.where(urgent: true).to_a.sort_by(&:gem_version) - headers( - 'Importance' => 'high', - 'Priority' => 'urgent', - 'X-Priority' => '1' - ) - locale_for_account(@me) do mail subject: default_i18n_subject(instance: @instance) end @@ -82,4 +78,12 @@ def process_params def set_instance @instance = Rails.configuration.x.local_domain end + + def set_important_headers! + headers( + 'Importance' => 'high', + 'Priority' => 'urgent', + 'X-Priority' => '1' + ) + end end From cfb8fc6222f451b16ccabfc4bb1448a84afb26ee Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 24 Sep 2024 15:16:58 +0200 Subject: [PATCH 103/467] Increase regexp timeout and allow override (#32056) --- config/initializers/regexp.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/initializers/regexp.rb b/config/initializers/regexp.rb index a820d2b5d3d473..4e79dc478e1241 100644 --- a/config/initializers/regexp.rb +++ b/config/initializers/regexp.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true -# 0.5s is a fairly high timeout, but that should account for slow servers under load -Regexp.timeout = 0.5 if Regexp.respond_to?(:timeout=) +# 2s is a fairly high default, but that should account for slow servers under load +Regexp.timeout = ENV.fetch('REGEXP_TIMEOUT', 2).to_f if Regexp.respond_to?(:timeout=) From 0a6b75b71eae0dd9eb9d5d8c73e1d210820eeb51 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 24 Sep 2024 17:03:38 +0200 Subject: [PATCH 104/467] Fix multiple bugs in notification requests and notification policies (#32062) --- .../mastodon/actions/notification_policies.ts | 4 +- .../mastodon/actions/notification_requests.ts | 40 +++++-------------- app/javascript/mastodon/api/notifications.ts | 2 +- .../filtered_notifications_banner.tsx | 4 +- .../mastodon/reducers/notification_policy.ts | 7 ++-- 5 files changed, 18 insertions(+), 39 deletions(-) diff --git a/app/javascript/mastodon/actions/notification_policies.ts b/app/javascript/mastodon/actions/notification_policies.ts index b182bcf6996326..fd798eaad7e834 100644 --- a/app/javascript/mastodon/actions/notification_policies.ts +++ b/app/javascript/mastodon/actions/notification_policies.ts @@ -17,6 +17,6 @@ export const updateNotificationsPolicy = createDataLoadingThunk( (policy: Partial) => apiUpdateNotificationsPolicy(policy), ); -export const decreasePendingNotificationsCount = createAction( - 'notificationPolicy/decreasePendingNotificationCount', +export const decreasePendingRequestsCount = createAction( + 'notificationPolicy/decreasePendingRequestsCount', ); diff --git a/app/javascript/mastodon/actions/notification_requests.ts b/app/javascript/mastodon/actions/notification_requests.ts index ef9cbef03ee4bb..8352ff2aadbf3e 100644 --- a/app/javascript/mastodon/actions/notification_requests.ts +++ b/app/javascript/mastodon/actions/notification_requests.ts @@ -13,11 +13,11 @@ import type { ApiNotificationJSON, } from 'mastodon/api_types/notifications'; import type { ApiStatusJSON } from 'mastodon/api_types/statuses'; -import type { AppDispatch, RootState } from 'mastodon/store'; +import type { AppDispatch } from 'mastodon/store'; import { createDataLoadingThunk } from 'mastodon/store/typed_functions'; import { importFetchedAccounts, importFetchedStatuses } from './importer'; -import { decreasePendingNotificationsCount } from './notification_policies'; +import { decreasePendingRequestsCount } from './notification_policies'; // TODO: refactor with notification_groups function dispatchAssociatedRecords( @@ -169,19 +169,11 @@ export const expandNotificationsForRequest = createDataLoadingThunk( }, ); -const selectNotificationCountForRequest = (state: RootState, id: string) => { - const requests = state.notificationRequests.items; - const thisRequest = requests.find((request) => request.id === id); - return thisRequest ? thisRequest.notifications_count : 0; -}; - export const acceptNotificationRequest = createDataLoadingThunk( 'notificationRequest/accept', ({ id }: { id: string }) => apiAcceptNotificationRequest(id), - (_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { - const count = selectNotificationCountForRequest(getState(), id); - - dispatch(decreasePendingNotificationsCount(count)); + (_data, { dispatch, discardLoadData }) => { + dispatch(decreasePendingRequestsCount(1)); // The payload is not used in any functions return discardLoadData; @@ -191,10 +183,8 @@ export const acceptNotificationRequest = createDataLoadingThunk( export const dismissNotificationRequest = createDataLoadingThunk( 'notificationRequest/dismiss', ({ id }: { id: string }) => apiDismissNotificationRequest(id), - (_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => { - const count = selectNotificationCountForRequest(getState(), id); - - dispatch(decreasePendingNotificationsCount(count)); + (_data, { dispatch, discardLoadData }) => { + dispatch(decreasePendingRequestsCount(1)); // The payload is not used in any functions return discardLoadData; @@ -204,13 +194,8 @@ export const dismissNotificationRequest = createDataLoadingThunk( export const acceptNotificationRequests = createDataLoadingThunk( 'notificationRequests/acceptBulk', ({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids), - (_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { - const count = ids.reduce( - (count, id) => count + selectNotificationCountForRequest(getState(), id), - 0, - ); - - dispatch(decreasePendingNotificationsCount(count)); + (_data, { dispatch, discardLoadData, actionArg: { ids } }) => { + dispatch(decreasePendingRequestsCount(ids.length)); // The payload is not used in any functions return discardLoadData; @@ -220,13 +205,8 @@ export const acceptNotificationRequests = createDataLoadingThunk( export const dismissNotificationRequests = createDataLoadingThunk( 'notificationRequests/dismissBulk', ({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids), - (_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => { - const count = ids.reduce( - (count, id) => count + selectNotificationCountForRequest(getState(), id), - 0, - ); - - dispatch(decreasePendingNotificationsCount(count)); + (_data, { dispatch, discardLoadData, actionArg: { ids } }) => { + dispatch(decreasePendingRequestsCount(ids.length)); // The payload is not used in any functions return discardLoadData; diff --git a/app/javascript/mastodon/api/notifications.ts b/app/javascript/mastodon/api/notifications.ts index 24d526655cefc4..92863ac5caa51d 100644 --- a/app/javascript/mastodon/api/notifications.ts +++ b/app/javascript/mastodon/api/notifications.ts @@ -91,5 +91,5 @@ export const apiAcceptNotificationRequests = async (id: string[]) => { }; export const apiDismissNotificationRequests = async (id: string[]) => { - return apiRequestPost('v1/notifications/dismiss/dismiss', { id }); + return apiRequestPost('v1/notifications/requests/dismiss', { id }); }; diff --git a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.tsx b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.tsx index d9e60d48cdbca4..d2241af38964f4 100644 --- a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.tsx +++ b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.tsx @@ -31,7 +31,7 @@ export const FilteredNotificationsIconButton: React.FC<{ history.push('/notifications/requests'); }, [history]); - if (policy === null || policy.summary.pending_notifications_count === 0) { + if (policy === null || policy.summary.pending_requests_count <= 0) { return null; } @@ -70,7 +70,7 @@ export const FilteredNotificationsBanner: React.FC = () => { }; }, [dispatch]); - if (policy === null || policy.summary.pending_notifications_count === 0) { + if (policy === null || policy.summary.pending_requests_count <= 0) { return null; } diff --git a/app/javascript/mastodon/reducers/notification_policy.ts b/app/javascript/mastodon/reducers/notification_policy.ts index ed912dde5d648a..a883f9c1eed5e2 100644 --- a/app/javascript/mastodon/reducers/notification_policy.ts +++ b/app/javascript/mastodon/reducers/notification_policy.ts @@ -2,7 +2,7 @@ import { createReducer, isAnyOf } from '@reduxjs/toolkit'; import { fetchNotificationPolicy, - decreasePendingNotificationsCount, + decreasePendingRequestsCount, updateNotificationsPolicy, } from 'mastodon/actions/notification_policies'; import type { NotificationPolicy } from 'mastodon/models/notification_policy'; @@ -10,10 +10,9 @@ import type { NotificationPolicy } from 'mastodon/models/notification_policy'; export const notificationPolicyReducer = createReducer(null, (builder) => { builder - .addCase(decreasePendingNotificationsCount, (state, action) => { + .addCase(decreasePendingRequestsCount, (state, action) => { if (state) { - state.summary.pending_notifications_count -= action.payload; - state.summary.pending_requests_count -= 1; + state.summary.pending_requests_count -= action.payload; } }) .addMatcher( From c36a76b9eb2e5e6809956e012028d726e113dd50 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 24 Sep 2024 17:19:55 +0200 Subject: [PATCH 105/467] Fix error when accepting appeal for sensitive posts deleted in the meantime (#32037) Co-authored-by: David Roetzel --- app/services/approve_appeal_service.rb | 2 +- spec/services/approve_appeal_service_spec.rb | 62 ++++++++++++++------ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/app/services/approve_appeal_service.rb b/app/services/approve_appeal_service.rb index b8a522b2a16d4a..3f8d1e2a3b59ea 100644 --- a/app/services/approve_appeal_service.rb +++ b/app/services/approve_appeal_service.rb @@ -53,7 +53,7 @@ def undo_delete_statuses! def undo_mark_statuses_as_sensitive! representative_account = Account.representative - @strike.statuses.includes(:media_attachments).find_each do |status| + @strike.statuses.kept.includes(:media_attachments).reorder(nil).find_each do |status| UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media? end end diff --git a/spec/services/approve_appeal_service_spec.rb b/spec/services/approve_appeal_service_spec.rb index 5707c5d7f4c5ea..52e073df0c769b 100644 --- a/spec/services/approve_appeal_service_spec.rb +++ b/spec/services/approve_appeal_service_spec.rb @@ -4,27 +4,55 @@ RSpec.describe ApproveAppealService do describe '#call' do - context 'with an existing appeal' do - let(:appeal) { Fabricate(:appeal) } - let(:account) { Fabricate(:account) } - - it 'processes the appeal approval' do - expect { subject.call(appeal, account) } - .to mark_overruled - .and record_approver - end + let(:appeal) { Fabricate(:appeal) } + let(:account) { Fabricate(:account) } + + it 'processes the appeal approval' do + expect { subject.call(appeal, account) } + .to mark_overruled + .and record_approver + end - def mark_overruled - change(appeal.strike, :overruled_at) - .from(nil) - .to(be > 1.minute.ago) + context 'with an appeal about then-deleted posts marked as sensitive by moderators' do + let(:target_account) { Fabricate(:account) } + let(:appeal) { Fabricate(:appeal, strike: strike, account: target_account) } + let(:deleted_media) { Fabricate(:media_attachment, type: :video, status: Fabricate(:status, account: target_account), account: target_account) } + let(:kept_media) { Fabricate(:media_attachment, type: :video, status: Fabricate(:status, account: target_account), account: target_account) } + let(:strike) { Fabricate(:account_warning, target_account: target_account, action: :mark_statuses_as_sensitive, status_ids: [deleted_media.status.id, kept_media.status.id]) } + + before do + target_account.unsuspend! + deleted_media.status.discard! end - def record_approver - change(appeal, :approved_by_account) - .from(nil) - .to(account) + it 'approves the appeal, marks the statuses as not sensitive and notifies target account about the approval', :inline_jobs do + emails = capture_emails { subject.call(appeal, account) } + + expect(appeal.reload).to be_approved + expect(strike.reload).to be_overruled + + expect(kept_media.status.reload).to_not be_sensitive + + expect(emails.size) + .to eq(1) + expect(emails.first) + .to have_attributes( + to: contain_exactly(target_account.user.email), + subject: eq(I18n.t('user_mailer.appeal_approved.subject', date: I18n.l(appeal.created_at))) + ) end end + + def mark_overruled + change(appeal.strike, :overruled_at) + .from(nil) + .to(be > 1.minute.ago) + end + + def record_approver + change(appeal, :approved_by_account) + .from(nil) + .to(account) + end end end From 556837f1561bb8b806030cb39d7ed658a1a1eaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Menrath?= <99024746+Menrath@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:57:53 +0200 Subject: [PATCH 106/467] Fix the summary of converted object types to be treated as HTML (#28629) --- app/lib/activitypub/activity/create.rb | 10 +++- .../fetch_remote_status_service_spec.rb | 57 ++++++++++++++++++- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index aae73e01e0f03d..09a8caf1fcce27 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -342,7 +342,15 @@ def in_reply_to_uri end def converted_text - linkify([@status_parser.title.presence, @status_parser.spoiler_text.presence, @status_parser.url || @status_parser.uri].compact.join("\n\n")) + [formatted_title, @status_parser.spoiler_text.presence, formatted_url].compact.join("\n\n") + end + + def formatted_title + "

#{@status_parser.title}

" if @status_parser.title.present? + end + + def formatted_url + linkify(@status_parser.url || @status_parser.uri) end def unsupported_media_type?(mime_type) diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb index 635fcb7976c954..9d8c6e0e0a6b60 100644 --- a/spec/services/activitypub/fetch_remote_status_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb @@ -72,7 +72,7 @@ expect(status).to_not be_nil expect(status.url).to eq 'https://foo.bar/watch?v=12345' - expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345' + expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345" end end @@ -105,7 +105,7 @@ expect(status).to_not be_nil expect(status.url).to eq 'https://foo.bar/watch?v=12345' - expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345' + expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345" end end @@ -125,7 +125,58 @@ expect(status).to_not be_nil expect(status.url).to eq 'https://foo.bar/@foo/1234' - expect(strip_tags(status.text)).to eq "Let's change the worldhttps://foo.bar/@foo/1234" + expect(strip_tags(status.text)).to eq "Let's change the world\n\nhttps://foo.bar/@foo/1234" + end + end + + context 'with Event object that contains a HTML summary' do + let(:object) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'https://foo.bar/@foo/1234', + type: 'Event', + name: 'Fediverse Birthday Party', + startTime: '2024-01-31T20:00:00.000+01:00', + location: { + type: 'Place', + name: 'FooBar – The not converted location', + }, + content: 'The not converted detailed description of the event object.', + summary: '

See you at the FooBar!

  • Doors: 8pm
  • Music: 10pm
', + attributedTo: ActivityPub::TagManager.instance.uri_for(sender), + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.url).to eq 'https://foo.bar/@foo/1234' + expect(status.text).to start_with "

#{object[:name]}

\n\n#{object[:summary]}\n\n" + expect(status.text).to include "href=\"#{object[:id]}\"" + end + end + + context 'with Article object that contains a HTML summary' do + let(:object) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'https://foo.bar/blog/future-of-the-fediverse', + type: 'Article', + name: 'Future of the Fediverse', + content: 'Lorem Ipsum', + summary: '

Guest article by John Mastodon

The fediverse is great reading this you will find out why!

', + attributedTo: ActivityPub::TagManager.instance.uri_for(sender), + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.url).to eq object[:id] + expect(status.text).to start_with "

#{object[:name]}

\n\n#{object[:summary]}\n\n" + expect(status.text).to include "href=\"#{object[:id]}\"" end end From f1b6a611aab351d9f3658fc8c255694597602d81 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 24 Sep 2024 18:47:45 +0200 Subject: [PATCH 107/467] Fix wrapping in dashboard quick access buttons (#32043) --- app/javascript/styles/mastodon/dashboard.scss | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss index 1621220ccb522e..d049b2456c1795 100644 --- a/app/javascript/styles/mastodon/dashboard.scss +++ b/app/javascript/styles/mastodon/dashboard.scss @@ -86,9 +86,7 @@ color: $primary-text-color; transition: all 100ms ease-in; font-size: 14px; - padding: 0 16px; - line-height: 36px; - height: 36px; + padding: 8px 16px; text-decoration: none; margin-bottom: 4px; From 70988519df66f0b8edeb6ca95140f1d3e436fea8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 24 Sep 2024 19:02:36 +0200 Subject: [PATCH 108/467] Fix too many requests caused by relationship look-ups in web UI (#32042) Co-authored-by: Claire --- app/javascript/mastodon/actions/accounts.js | 23 +++++++++++++------ .../mastodon/actions/notifications.js | 13 +---------- app/javascript/mastodon/utils/debounce.ts | 23 +++++++++++++++++++ 3 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 app/javascript/mastodon/utils/debounce.ts diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index 9144235195e3f5..3d0e8b8c9054b1 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -1,4 +1,5 @@ import { browserHistory } from 'mastodon/components/router'; +import { debounceWithDispatchAndArguments } from 'mastodon/utils/debounce'; import api, { getLinks } from '../api'; @@ -449,6 +450,20 @@ export function expandFollowingFail(id, error) { }; } +const debouncedFetchRelationships = debounceWithDispatchAndArguments((dispatch, ...newAccountIds) => { + if (newAccountIds.length === 0) { + return; + } + + dispatch(fetchRelationshipsRequest(newAccountIds)); + + api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => { + dispatch(fetchRelationshipsSuccess({ relationships: response.data })); + }).catch(error => { + dispatch(fetchRelationshipsFail(error)); + }); +}, { delay: 500 }); + export function fetchRelationships(accountIds) { return (dispatch, getState) => { const state = getState(); @@ -460,13 +475,7 @@ export function fetchRelationships(accountIds) { return; } - dispatch(fetchRelationshipsRequest(newAccountIds)); - - api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => { - dispatch(fetchRelationshipsSuccess({ relationships: response.data })); - }).catch(error => { - dispatch(fetchRelationshipsFail(error)); - }); + debouncedFetchRelationships(dispatch, ...newAccountIds); }; } diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 14072562d4c0e9..4c6e27cd5f8d2e 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -10,7 +10,7 @@ import api, { getLinks } from '../api'; import { unescapeHTML } from '../utils/html'; import { requestNotificationPermission } from '../utils/notifications'; -import { fetchFollowRequests, fetchRelationships } from './accounts'; +import { fetchFollowRequests } from './accounts'; import { importFetchedAccount, importFetchedAccounts, @@ -56,14 +56,6 @@ defineMessages({ group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, }); -const fetchRelatedRelationships = (dispatch, notifications) => { - const accountIds = notifications.filter(item => ['follow', 'follow_request', 'admin.sign_up'].indexOf(item.type) !== -1).map(item => item.account.id); - - if (accountIds.length > 0) { - dispatch(fetchRelationships(accountIds)); - } -}; - export const loadPending = () => ({ type: NOTIFICATIONS_LOAD_PENDING, }); @@ -106,8 +98,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered})); - - fetchRelatedRelationships(dispatch, [notification]); } else if (playSound && !filtered) { dispatch({ type: NOTIFICATIONS_UPDATE_NOOP, @@ -199,7 +189,6 @@ export function expandNotifications({ maxId = undefined, forceLoad = false }) { dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account))); dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); - fetchRelatedRelationships(dispatch, response.data); dispatch(submitMarkers()); } catch(error) { dispatch(expandNotificationsFail(error, isLoadingMore)); diff --git a/app/javascript/mastodon/utils/debounce.ts b/app/javascript/mastodon/utils/debounce.ts new file mode 100644 index 00000000000000..224a5389844aba --- /dev/null +++ b/app/javascript/mastodon/utils/debounce.ts @@ -0,0 +1,23 @@ +import { debounce } from 'lodash'; + +import type { AppDispatch } from 'mastodon/store'; + +export const debounceWithDispatchAndArguments = ( + fn: (dispatch: AppDispatch, ...args: T[]) => void, + { delay = 100 }, +) => { + let argumentBuffer: T[] = []; + let dispatchBuffer: AppDispatch; + + const wrapped = debounce(() => { + const tmpBuffer = argumentBuffer; + argumentBuffer = []; + fn(dispatchBuffer, ...tmpBuffer); + }, delay); + + return (dispatch: AppDispatch, ...args: T[]) => { + dispatchBuffer = dispatch; + argumentBuffer.push(...args); + wrapped(); + }; +}; From a773c239c3b4da4801e0438ec88ccaf0ca90e8fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:33:37 +0200 Subject: [PATCH 109/467] Update dependency aws-sdk-s3 to v1.166.0 (#32079) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d8a13e8ecfbbaf..ed217ca1464889 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,16 +100,16 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.977.0) - aws-sdk-core (3.208.0) + aws-partitions (1.978.0) + aws-sdk-core (3.209.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.93.0) + aws-sdk-kms (1.94.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.165.0) + aws-sdk-s3 (1.166.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From 4e6fc3a62f053084916b4bdfbcb20d4b5de2eb08 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 07:40:14 +0000 Subject: [PATCH 110/467] New Crowdin Translations (automated) (#32083) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fr-CA.json | 2 +- app/javascript/mastodon/locales/fr.json | 2 +- app/javascript/mastodon/locales/vi.json | 28 +++--- config/locales/activerecord.eo.yml | 6 ++ config/locales/devise.eo.yml | 3 + config/locales/doorkeeper.es-AR.yml | 2 +- config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/doorkeeper.es.yml | 2 +- config/locales/doorkeeper.hu.yml | 1 + config/locales/doorkeeper.vi.yml | 4 +- config/locales/simple_form.vi.yml | 12 +-- config/locales/vi.yml | 108 ++++++++++----------- 12 files changed, 91 insertions(+), 81 deletions(-) diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 27e776024f3276..ead016dec2a239 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -164,7 +164,7 @@ "compose_form.publish": "Publier", "compose_form.publish_form": "Publier", "compose_form.reply": "Répondre", - "compose_form.save_changes": "Mis à jour", + "compose_form.save_changes": "Mettre à jour", "compose_form.spoiler.marked": "Enlever l'avertissement de contenu", "compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu", "compose_form.spoiler_placeholder": "Avertissement de contenu (optionnel)", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index f787216c467cb1..9375eccc6fb1a0 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -164,7 +164,7 @@ "compose_form.publish": "Publier", "compose_form.publish_form": "Nouvelle publication", "compose_form.reply": "Répondre", - "compose_form.save_changes": "Mis à jour", + "compose_form.save_changes": "Mettre à jour", "compose_form.spoiler.marked": "Enlever l’avertissement de contenu", "compose_form.spoiler.unmarked": "Ajouter un avertissement de contenu", "compose_form.spoiler_placeholder": "Avertissement de contenu (optionnel)", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 74c46c7b339c82..04b73e78fa4a09 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -76,7 +76,7 @@ "admin.dashboard.monthly_retention": "Tỉ lệ người dùng ở lại sau khi đăng ký", "admin.dashboard.retention.average": "Trung bình", "admin.dashboard.retention.cohort": "Tháng đăng ký", - "admin.dashboard.retention.cohort_size": "Người mới", + "admin.dashboard.retention.cohort_size": "Số người", "admin.impact_report.instance_accounts": "Hồ sơ tài khoản này sẽ xóa", "admin.impact_report.instance_followers": "Người theo dõi của thành viên máy chủ sẽ mất", "admin.impact_report.instance_follows": "Người theo dõi người dùng của họ sẽ mất", @@ -154,7 +154,7 @@ "compose_form.lock_disclaimer": "Tài khoản của bạn không {locked}. Bất cứ ai cũng có thể theo dõi và xem tút riêng tư của bạn.", "compose_form.lock_disclaimer.lock": "khóa", "compose_form.placeholder": "Bạn đang nghĩ gì?", - "compose_form.poll.duration": "Hết hạn", + "compose_form.poll.duration": "Hết hạn sau", "compose_form.poll.multiple": "Chọn nhiều", "compose_form.poll.option_placeholder": "Lựa chọn {number}", "compose_form.poll.single": "Chọn một", @@ -180,7 +180,7 @@ "confirmations.discard_edit_media.message": "Bạn chưa lưu thay đổi đối với phần mô tả hoặc bản xem trước của media, vẫn bỏ luôn?", "confirmations.edit.confirm": "Sửa", "confirmations.edit.message": "Nội dung tút cũ sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.edit.title": "Viết đè lên tút cũ", + "confirmations.edit.title": "Ghi đè lên tút cũ", "confirmations.logout.confirm": "Đăng xuất", "confirmations.logout.message": "Bạn có chắc muốn thoát?", "confirmations.logout.title": "Đăng xuất", @@ -190,11 +190,11 @@ "confirmations.redraft.title": "Xóa & viết lại", "confirmations.reply.confirm": "Trả lời", "confirmations.reply.message": "Nội dung bạn đang soạn thảo sẽ bị ghi đè, bạn có tiếp tục?", - "confirmations.reply.title": "Viết đè lên tút cũ", + "confirmations.reply.title": "Ghi đè lên tút cũ", "confirmations.unfollow.confirm": "Bỏ theo dõi", "confirmations.unfollow.message": "Bạn có chắc muốn bỏ theo dõi {name}?", "confirmations.unfollow.title": "Bỏ theo dõi", - "content_warning.hide": "Ẩn tút", + "content_warning.hide": "Ẩn lại", "content_warning.show": "Nhấn để xem", "conversation.delete": "Xóa tin nhắn này", "conversation.mark_as_read": "Đánh dấu là đã đọc", @@ -322,7 +322,7 @@ "follow_suggestions.hints.most_interactions": "Người này đang thu hút sự chú ý trên {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Người này có nét giống những người mà bạn theo dõi gần đây.", "follow_suggestions.personalized_suggestion": "Gợi ý cá nhân hóa", - "follow_suggestions.popular_suggestion": "Những người nổi tiếng", + "follow_suggestions.popular_suggestion": "Người nổi tiếng", "follow_suggestions.popular_suggestion_longer": "Nổi tiếng trên {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Tương tự những người mà bạn theo dõi gần đây", "follow_suggestions.view_all": "Xem tất cả", @@ -480,7 +480,7 @@ "navigation_bar.domain_blocks": "Máy chủ đã ẩn", "navigation_bar.explore": "Xu hướng", "navigation_bar.favourites": "Tút thích", - "navigation_bar.filters": "Bộ lọc từ ngữ", + "navigation_bar.filters": "Từ khóa đã lọc", "navigation_bar.follow_requests": "Yêu cầu theo dõi", "navigation_bar.followed_tags": "Hashtag theo dõi", "navigation_bar.follows_and_followers": "Quan hệ", @@ -555,7 +555,7 @@ "notification_requests.view": "Hiện thông báo", "notifications.clear": "Xóa hết thông báo", "notifications.clear_confirmation": "Bạn có chắc muốn xóa vĩnh viễn tất cả thông báo của mình?", - "notifications.clear_title": "Xóa hết thông báo?", + "notifications.clear_title": "Xóa toàn bộ thông báo", "notifications.column_settings.admin.report": "Báo cáo mới:", "notifications.column_settings.admin.sign_up": "Người mới tham gia:", "notifications.column_settings.alert": "Báo trên máy tính", @@ -601,8 +601,8 @@ "notifications.policy.filter_not_followers_title": "Những người không theo dõi bạn", "notifications.policy.filter_not_following_hint": "Cho tới khi bạn duyệt họ", "notifications.policy.filter_not_following_title": "Những người bạn không theo dõi", - "notifications.policy.filter_private_mentions_hint": "Được lọc trừ khi nó trả lời lượt nhắc từ bạn hoặc nếu bạn theo dõi người gửi", - "notifications.policy.filter_private_mentions_title": "Lượt nhắc riêng tư không được yêu cầu", + "notifications.policy.filter_private_mentions_hint": "Trừ khi nó trả lời lượt nhắc từ bạn hoặc nếu bạn có theo dõi người gửi", + "notifications.policy.filter_private_mentions_title": "Lượt nhắn riêng không mong muốn", "notifications.policy.title": "Quản lý thông báo từ…", "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", @@ -713,7 +713,7 @@ "report.reasons.other": "Một lý do khác", "report.reasons.other_description": "Vấn đề không nằm trong những mục trên", "report.reasons.spam": "Đây là spam", - "report.reasons.spam_description": "Liên kết độc hại, tạo tương tác giả hoặc trả lời lặp đi lặp lại", + "report.reasons.spam_description": "Liên kết độc hại, giả tương tác hoặc trả lời lặp đi lặp lại", "report.reasons.violation": "Vi phạm nội quy máy chủ", "report.reasons.violation_description": "Bạn nhận thấy nó vi phạm nội quy máy chủ", "report.rules.subtitle": "Chọn tất cả những gì phù hợp", @@ -787,9 +787,9 @@ "status.edit": "Sửa", "status.edited": "Sửa lần cuối {date}", "status.edited_x_times": "Đã sửa {count, plural, other {{count} lần}}", - "status.embed": "Lấy mã nhúng", + "status.embed": "Nhúng", "status.favourite": "Thích", - "status.favourites": "{count, plural, other {Thích}}", + "status.favourites": "{count, plural, other {thích}}", "status.filter": "Lọc tút này", "status.history.created": "{name} đăng {date}", "status.history.edited": "{name} đã sửa {date}", @@ -808,7 +808,7 @@ "status.reblog": "Đăng lại", "status.reblog_private": "Đăng lại (Riêng tư)", "status.reblogged_by": "{name} đăng lại", - "status.reblogs": "{count, plural, other {Đăng lại}}", + "status.reblogs": "{count, plural, other {đăng lại}}", "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml index 99059e38568928..f99f726e231d84 100644 --- a/config/locales/activerecord.eo.yml +++ b/config/locales/activerecord.eo.yml @@ -15,6 +15,12 @@ eo: user/invite_request: text: Kialo errors: + attributes: + domain: + invalid: ne estas valida domajna nomo + messages: + invalid_domain_on_line: "%{value} ne estas valida domajna nomo" + too_many_lines: superas la limon de %{limit} linioj models: account: attributes: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 193fecc757201a..f0322a60a8e9f4 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -48,10 +48,13 @@ eo: subject: 'Mastodon: Instrukcioj por ŝanĝi pasvorton' title: Pasvorto restarigita two_factor_disabled: + explanation: Ensalutu nun eblas uzante nur retadreson kaj pasvorton. subject: 'Mastodon: dufaktora aŭtentigo malebligita' + subtitle: Dupaŝa aŭtentigo por via konto estas malŝaltita. title: 2FA estas malŝaltita two_factor_enabled: subject: 'Mastodon: Dufaktora aŭtentigo ebligita' + subtitle: Dupaŝa aŭtentigo por via konto estas ŝaltita. title: 2FA aktivigita two_factor_recovery_codes_changed: explanation: La antaŭaj reakiraj kodoj estis nuligitaj kaj novaj estis generitaj. diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 9f3c862272e630..804e4a51ed88d1 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -60,7 +60,7 @@ es-AR: error: title: Ocurrió un error new: - prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. review_permissions: Revisar permisos title: Autorización requerida show: diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index 419bb58f954aaa..c095777954decc 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -60,7 +60,7 @@ es-MX: error: title: Ha ocurrido un error new: - prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 093d84397aacad..c26f11a7a1073b 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -60,7 +60,7 @@ es: error: title: Ha ocurrido un error new: - prompt_html: "%{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente." + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml index ff37786d28e12d..a13c362173df2a 100644 --- a/config/locales/doorkeeper.hu.yml +++ b/config/locales/doorkeeper.hu.yml @@ -60,6 +60,7 @@ hu: error: title: Hiba történt new: + prompt_html: A(z) %{client_name} engedélyt kér hogy hozzáférjen a fiókodhoz. Csak akkor engedélyezd ezt a kérést, ha felismered és megbízol ebben a forrásban. review_permissions: Jogosultságok áttekintése title: Engedélyezés szükséges show: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 195e527f70d643..6687c0339d3388 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -71,7 +71,7 @@ vi: confirmations: revoke: Bạn có chắc không? index: - authorized_at: Cho phép %{date} + authorized_at: Cho phép vào %{date} description_html: Đây là những ứng dụng có thể truy cập tài khoản của bạn bằng API. Nếu có ứng dụng bạn không nhận ra ở đây hoặc ứng dụng hoạt động sai, bạn có thể thu hồi quyền truy cập của ứng dụng đó. last_used_at: Dùng lần cuối %{date} never_used: Chưa dùng @@ -151,7 +151,7 @@ vi: scopes: admin:read: đọc mọi dữ liệu trên máy chủ admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản - admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả các khối email chuẩn + admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả khối email chuẩn admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép admin:read:domain_blocks: đọc thông tin nhạy cảm của tất cả các tên miền chặn admin:read:email_domain_blocks: đọc thông tin nhạy cảm của tất cả các miền email chặn diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index e67520901752df..010bb262adcd27 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -42,7 +42,7 @@ vi: autofollow: Những người đăng ký sẽ tự động theo dõi bạn avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật - context: Chọn một hoặc nhiều nơi mà bộ lọc sẽ áp dụng + context: Chọn những nơi mà bộ lọc sẽ áp dụng current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) @@ -51,7 +51,7 @@ vi: inbox_url: Sao chép URL của máy chủ mà bạn muốn dùng irreversible: Các tút đã lọc sẽ không thể phục hồi, kể cả sau khi xóa bộ lọc locale: Ngôn ngữ của giao diện, email và thông báo đẩy - password: Dùng ít nhất 8 ký tự + password: Tối thiểu 8 ký tự phrase: Sẽ được hiện thị trong văn bản hoặc cảnh báo nội dung của một tút scopes: Ứng dụng sẽ được phép truy cập những API nào. Nếu bạn chọn quyền cấp cao nhất, không cần chọn quyền nhỏ. setting_aggregate_reblogs: Nếu một tút đã được đăng lại thì những lượt đăng lại sau sẽ không hiện trên bảng tin nữa @@ -74,8 +74,8 @@ vi: filters: action: Chọn hành động sẽ thực hiện khi một tút khớp với bộ lọc actions: - hide: Ẩn hoàn toàn nội dung đã lọc, như thể nó không tồn tại - warn: Ẩn nội dung đã lọc đằng sau một cảnh báo đề cập đến tiêu đề của bộ lọc + hide: Ẩn hoàn toàn, như thể nó không tồn tại + warn: Hiện cảnh báo và bộ lọc form_admin_settings: activity_api_enabled: Số lượng tút được đăng trong máy chủ, người dùng đang hoạt động và đăng ký mới hàng tuần app_icon: WEBP, PNG, GIF hoặc JPG. Dùng biểu tượng tùy chỉnh trên thiết bị di động. @@ -226,7 +226,7 @@ vi: setting_theme: Giao diện setting_trends: Hiển thị xu hướng trong ngày setting_unfollow_modal: Hỏi trước khi bỏ theo dõi ai đó - setting_use_blurhash: Phủ màu media nhạy cảm + setting_use_blurhash: Làm mờ media nhạy cảm setting_use_pending_items: Không tự động cập nhật bảng tin severity: Mức độ nghiêm trọng sign_in_token_attempt: Mã an toàn @@ -305,7 +305,7 @@ vi: label: Đã có phiên bản Mastodon mới none: Không bao giờ thông báo (không đề xuất) patch: Thông báo bản cập sửa lỗi - trending_tag: Phê duyệt nội dung nổi bật mới + trending_tag: Phê duyệt xu hướng mới rule: hint: Thông tin thêm text: Nội quy diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 83531c65617988..d969ad7d4ffdc8 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -44,7 +44,7 @@ vi: submit: Thay đổi email title: Thay đổi email cho %{username} change_role: - changed_msg: Vai trò đã thay đổi thành công! + changed_msg: Đã cập nhật vai trò! edit_roles: Quản lý vai trò người dùng label: Đổi vai trò no_role: Chưa có vai trò @@ -55,7 +55,7 @@ vi: custom: Tùy chỉnh delete: Xóa dữ liệu deleted: Đã xóa - demote: Xóa vai trò + demote: Hạ vai trò destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ disable: Khóa disable_sign_in_token_auth: Tắt xác minh bằng email @@ -108,7 +108,7 @@ vi: previous_strikes: Lịch sử kiểm duyệt previous_strikes_description_html: other: Người này bị cảnh cáo %{count} lần. - promote: Chỉ định vai trò + promote: Nâng vai trò protocol: Giao thức public: Công khai push_subscription_expires: Đăng ký PuSH hết hạn @@ -153,8 +153,8 @@ vi: suspension_irreversible: Toàn bộ dữ liệu của người này sẽ bị xóa hết. Bạn vẫn có thể ngừng vô hiệu hóa nhưng dữ liệu sẽ không thể phục hồi. suspension_reversible_hint_html: Mọi dữ liệu của người này sẽ bị xóa sạch vào %{date}. Trước thời hạn này, dữ liệu vẫn có thể phục hồi. Nếu bạn muốn xóa dữ liệu của người này ngay lập tức, hãy tiếp tục. title: Tài khoản - unblock_email: Mở khóa địa chỉ email - unblocked_email_msg: Mở khóa thành công địa chỉ email của %{username} + unblock_email: Bỏ chặn địa chỉ email + unblocked_email_msg: Đã bỏ chặn địa chỉ email của %{username} unconfirmed_email: Email chưa được xác minh undo_sensitized: Đánh dấu bình thường undo_silenced: Bỏ hạn chế @@ -170,42 +170,42 @@ vi: action_logs: action_types: approve_appeal: Chấp nhận kháng cáo - approve_user: Chấp nhận đăng ký + approve_user: Duyệt đăng ký assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email người dùng change_role_user: Đổi vai trò confirm_user: Xác minh create_account_warning: Cảnh cáo create_announcement: Tạo thông báo mới - create_canonical_email_block: Tạo chặn email + create_canonical_email_block: Chặn địa chỉ email create_custom_emoji: Tạo emoji create_domain_allow: Cho phép máy chủ create_domain_block: Chặn máy chủ create_email_domain_block: Tạo chặn tên miền email - create_ip_block: Tạo chặn IP mới - create_unavailable_domain: Máy chủ không khả dụng + create_ip_block: Chặn IP + create_unavailable_domain: Ngừng liên hợp create_user_role: Tạo vai trò - demote_user: Xóa vai trò + demote_user: Hạ vai trò destroy_announcement: Xóa thông báo - destroy_canonical_email_block: Bỏ chặn email + destroy_canonical_email_block: Bỏ chặn địa chỉ email destroy_custom_emoji: Xóa emoji destroy_domain_allow: Bỏ thanh trừng máy chủ destroy_domain_block: Bỏ chặn máy chủ destroy_email_domain_block: Bỏ chặn tên miền email destroy_instance: Thanh trừng máy chủ - destroy_ip_block: Xóa IP đã chặn + destroy_ip_block: Bỏ chặn IP destroy_status: Xóa tút - destroy_unavailable_domain: Xóa máy chủ không khả dụng + destroy_unavailable_domain: Tái liên hợp destroy_user_role: Xóa vai trò disable_2fa_user: Vô hiệu hóa 2FA disable_custom_emoji: Vô hiệu hóa emoji disable_sign_in_token_auth_user: Tắt xác minh bằng email cho người dùng disable_user: Vô hiệu hóa đăng nhập - enable_custom_emoji: Cho phép emoji + enable_custom_emoji: Duyệt emoji enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng - enable_user: Bỏ vô hiệu hóa đăng nhập + enable_user: Cho phép đăng nhập memorialize_account: Đánh dấu tưởng niệm - promote_user: Chỉ định vai trò + promote_user: Nâng vai trò reject_appeal: Từ chối kháng cáo reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện @@ -213,11 +213,11 @@ vi: resend_user: Gửi lại email xác minh reset_password_user: Đặt lại mật khẩu resolve_report: Xử lý báo cáo - sensitive_account: Áp đặt nhạy cảm - silence_account: Áp đặt ẩn - suspend_account: Áp đặt vô hiệu hóa + sensitive_account: Gán nhạy cảm + silence_account: Gán ẩn + suspend_account: Gán vô hiệu hóa unassigned_report: Báo cáo chưa xử lý - unblock_email_account: Mở khóa địa chỉ email + unblock_email_account: Bỏ chặn địa chỉ email unsensitive_account: Bỏ nhạy cảm unsilence_account: Bỏ ẩn unsuspend_account: Bỏ vô hiệu hóa @@ -229,7 +229,7 @@ vi: update_status: Cập nhật tút update_user_role: Cập nhật vai trò actions: - approve_appeal_html: "%{name} đã chấp nhận kháng cáo của %{target}" + approve_appeal_html: "%{name} đã duyệt kháng cáo của %{target}" approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}" assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}" change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}" @@ -237,7 +237,7 @@ vi: confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}" create_account_warning_html: "%{name} đã cảnh cáo %{target}" create_announcement_html: "%{name} tạo thông báo mới %{target}" - create_canonical_email_block_html: "%{name} đã chặn email với hash %{target}" + create_canonical_email_block_html: "%{name} đã chặn địa chỉ email với hash %{target}" create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}" create_domain_block_html: "%{name} chặn máy chủ %{target}" @@ -245,9 +245,9 @@ vi: create_ip_block_html: "%{name} đã chặn IP %{target}" create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}" create_user_role_html: "%{name} đã tạo vai trò %{target}" - demote_user_html: "%{name} đã xóa vai trò của %{target}" + demote_user_html: "%{name} đã hạ vai trò của %{target}" destroy_announcement_html: "%{name} xóa thông báo %{target}" - destroy_canonical_email_block_html: "%{name} đã bỏ chặn email với hash %{target}" + destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email với hash %{target}" destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}" destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}" destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}" @@ -261,11 +261,11 @@ vi: disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} đã tắt xác minh email của %{target}" disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}" - enable_custom_emoji_html: "%{name} cho phép Emoji %{target}" + enable_custom_emoji_html: "%{name} cho phép emoji %{target}" enable_sign_in_token_auth_user_html: "%{name} đã bật xác minh email của %{target}" enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}" memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" - promote_user_html: "%{name} chỉ định vai trò cho %{target}" + promote_user_html: "%{name} đã nâng vai trò của %{target}" reject_appeal_html: "%{name} đã từ chối kháng cáo của %{target}" reject_user_html: "%{name} đã từ chối đăng ký từ %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" @@ -277,7 +277,7 @@ vi: silence_account_html: "%{name} đã ẩn %{target}" suspend_account_html: "%{name} đã vô hiệu hóa %{target}" unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí" - unblock_email_account_html: "%{name} mở khóa địa chỉ email của %{target}" + unblock_email_account_html: "%{name} bỏ chặn địa chỉ email của %{target}" unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường" unsilence_account_html: "%{name} đã bỏ ẩn %{target}" unsuspend_account_html: "%{name} đã bỏ vô hiệu hóa %{target}" @@ -287,7 +287,7 @@ vi: update_ip_block_html: "%{name} cập nhật chặn IP %{target}" update_report_html: "%{name} cập nhật báo cáo %{target}" update_status_html: "%{name} cập nhật tút của %{target}" - update_user_role_html: "%{name} đã thay đổi vai trò %{target}" + update_user_role_html: "%{name} đã cập nhật vai trò %{target}" deleted_account: tài khoản đã xóa empty: Không tìm thấy bản ghi. filter_by_action: Theo hành động @@ -328,7 +328,7 @@ vi: emoji: Emoji enable: Cho phép enabled: Đã cho phép - enabled_msg: Đã cho phép thành công Emoji này + enabled_msg: Đã cho phép emoji này xong image_hint: PNG hoặc GIF tối đa %{size} list: Danh sách listed: Liệt kê @@ -692,7 +692,7 @@ vi: manage_announcements: Quản lý thông báo manage_announcements_description: Cho phép quản lý thông báo trên máy chủ manage_appeals: Quản lý kháng cáo - manage_appeals_description: Cho phép xem xét kháng cáo đối với các hành động kiểm duyệt + manage_appeals_description: Cho phép thành viên kháng cáo đối với các hành động kiểm duyệt manage_blocks: Quản lý chặn manage_blocks_description: Cho phép người dùng tự chặn các nhà cung cấp email và địa chỉ IP manage_custom_emojis: Quản lý emoji @@ -704,7 +704,7 @@ vi: manage_reports: Quản lý báo cáo manage_reports_description: Cho phép xem xét các báo cáo và thực hiện hành động kiểm duyệt đối với chúng manage_roles: Quản lý vai trò - manage_roles_description: Cho phép quản lý và chỉ định các vai trò nhỏ hơn họ + manage_roles_description: Cho phép quản lý và nâng cấp các vai trò nhỏ hơn họ manage_rules: Quản lý nội quy máy chủ manage_rules_description: Cho phép thay đổi nội quy máy chủ manage_settings: Quản lý thiết lập @@ -798,7 +798,7 @@ vi: patch: Bản vá - sửa lỗi và dễ dàng áp dụng các thay đổi version: Phiên bản statuses: - account: Tác giả + account: Người đăng application: Ứng dụng back_to_account: Quay lại trang tài khoản back_to_report: Quay lại trang báo cáo @@ -817,7 +817,7 @@ vi: open: Mở tút original_status: Tút gốc reblogs: Lượt đăng lại - status_changed: Tút đã thay đổi + status_changed: Tút đã sửa title: Toàn bộ tút trending: Xu hướng visibility: Hiển thị @@ -896,7 +896,7 @@ vi: title: Quản trị trends: allow: Cho phép - approved: Đã cho phép + approved: Đã duyệt confirm_allow: Bạn có chắc muốn cho phép những hashtag đã chọn? confirm_disallow: Bạn có chắc muốn cấm những hashtag đã chọn? disallow: Cấm @@ -915,17 +915,17 @@ vi: no_publisher_selected: Không có nguồn đăng nào thay đổi vì không có nguồn đăng nào được chọn shared_by_over_week: other: "%{count} người chia sẻ tuần rồi" - title: Tin tức nổi bật + title: Xu hướng tin tức usage_comparison: Chia sẻ %{today} lần hôm nay, so với %{yesterday} lần hôm qua not_allowed_to_trend: Không được phép thành xu hướng - only_allowed: Chỉ cho phép + only_allowed: Đã cho phép pending_review: Đang chờ preview_card_providers: allowed: Tin tức từ nguồn này có thể lên xu hướng description_html: Đây là những nguồn mà từ đó các liên kết thường được chia sẻ trên máy chủ của bạn. Các liên kết sẽ không thể lên xu hướng trừ khi bạn cho phép nguồn. Sự cho phép (hoặc cấm) của bạn áp dụng luôn cho các tên miền phụ. rejected: Tin tức từ nguồn này không thể lên xu hướng title: Nguồn đăng - rejected: Đã cấm + rejected: Từ chối statuses: allow: Cho phép tút allow_account: Cho phép người đăng @@ -936,11 +936,11 @@ vi: description_html: Đây là những tút đang được chia sẻ và yêu thích rất nhiều trên máy chủ của bạn. Nó có thể giúp người mới và người cũ tìm thấy nhiều người hơn để theo dõi. Không có tút nào được hiển thị công khai cho đến khi bạn cho phép người đăng và người cho phép đề xuất tài khoản của họ cho người khác. Bạn cũng có thể cho phép hoặc từ chối từng tút riêng. disallow: Cấm tút disallow_account: Cấm người đăng - no_status_selected: Không có tút xu hướng nào thay đổi vì không có tút nào được chọn - not_discoverable: Tác giả đã chọn không tham gia mục khám phá + no_status_selected: Bạn chưa chọn mục nào + not_discoverable: Người đăng đã chọn không tham gia mục khám phá shared_by: other: Được thích và đăng lại %{friendly_count} lần - title: Tút xu hướng + title: Xu hướng tút tags: current_score: Chỉ số gần đây %{score} dashboard: @@ -956,9 +956,9 @@ vi: not_trendable: Không cho lên xu hướng not_usable: Không được phép dùng peaked_on_and_decaying: Đỉnh điểm %{date}, giờ đang giảm - title: Hashtag nổi bật + title: Xu hướng hashtag trendable: Cho phép lên xu hướng - trending_rank: 'Nổi bật #%{rank}' + trending_rank: 'Xu hướng #%{rank}' usable: Có thể dùng usage_comparison: Dùng %{today} lần hôm nay, so với %{yesterday} hôm qua used_by_over_week: @@ -1004,7 +1004,7 @@ vi: silence: hạn chế tài khoản của họ suspend: vô hiệu hóa tài khoản của họ body: "%{target} đã khiếu nại vì bị %{action_taken_by} %{type} vào %{date}. Họ cho biết:" - next_steps: Bạn có thể chấp nhận kháng cáo để hủy kiểm duyệt hoặc bỏ qua. + next_steps: Bạn có thể duyệt kháng cáo để hủy kiểm duyệt hoặc bỏ qua. subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}" new_critical_software_updates: body: Các phiên bản quan trọng mới của Mastodon đã được phát hành, bạn nên cập nhật càng sớm càng tốt! @@ -1022,12 +1022,12 @@ vi: new_trends: body: 'Các mục sau đây cần được xem xét trước khi chúng hiển thị công khai:' new_trending_links: - title: Tin tức nổi bật + title: Xu hướng tin tức new_trending_statuses: - title: Tút nổi bật + title: Xu hướng tút new_trending_tags: - title: Hashtag nổi bật - subject: Nội dung nổi bật chờ duyệt trên %{instance} + title: Xu hướng hashtag + subject: Xu hướng chờ duyệt trên %{instance} aliases: add_new: Kết nối tài khoản created_msg: Tạo thành công một tên hiển thị mới. Bây giờ bạn có thể bắt đầu di chuyển từ tài khoản cũ. @@ -1147,7 +1147,7 @@ vi: hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon. more_from_html: Thêm từ %{name} s_blog: "%{name}'s Blog" - title: Ghi nhận tác giả + title: Ghi nhận người đăng challenge: confirm: Tiếp tục hint_html: "Mẹo: Chúng tôi sẽ không hỏi lại mật khẩu của bạn sau này." @@ -1201,7 +1201,7 @@ vi: appealed_msg: Khiếu nại của bạn đã được gửi đi. Nếu nó được chấp nhận, bạn sẽ nhận được thông báo. appeals: submit: Gửi khiếu nại - approve_appeal: Chấp nhận kháng cáo + approve_appeal: Duyệt kháng cáo associated_report: Báo cáo đính kèm created_at: Ngày description_html: Đây là những cảnh cáo và áp đặt kiểm duyệt đối với bạn bởi đội ngũ %{instance}. @@ -1280,7 +1280,7 @@ vi: deprecated_api_multiple_keywords: Không thể thay đổi các tham số này từ ứng dụng này vì chúng áp dụng cho nhiều hơn một từ khóa bộ lọc. Sử dụng ứng dụng mới hơn hoặc giao diện web. invalid_context: Bối cảnh không hợp lệ hoặc không có index: - contexts: Bộ lọc %{contexts} + contexts: Lọc ở %{contexts} delete: Xóa bỏ empty: Chưa có bộ lọc nào. expires_in: Hết hạn trong %{distance} @@ -1336,7 +1336,7 @@ vi: merge: Hợp nhất merge_long: Giữ hồ sơ hiện có và thêm hồ sơ mới overwrite: Ghi đè - overwrite_long: Thay thế các bản ghi hiện tại bằng những cái mới + overwrite_long: Thay thế các bản ghi hiện tại bằng các bản ghi mới overwrite_preambles: blocking_html: Bạn sắp thay thế danh sách chặn với %{total_items} tài khoản từ %{filename}. bookmarks_html: Bạn sắp thay thế lượt lưu với %{total_items} tút từ %{filename}. @@ -1414,7 +1414,7 @@ vi: description_html: Nếu có lần đăng nhập đáng ngờ, hãy đổi ngay mật khẩu và bật xác minh 2 bước. empty: Không có lịch sử đăng nhập failed_sign_in_html: Đăng nhập thất bại bằng %{method} từ %{ip} (%{browser}) - successful_sign_in_html: Đăng nhập thành công bằng %{method} từ %{ip} (%{browser}) + successful_sign_in_html: Đăng nhập bằng %{method} từ %{ip} (%{browser}) title: Lịch sử đăng nhập mail_subscriptions: unsubscribe: @@ -1832,14 +1832,14 @@ vi: spam: Spam violation: Nội dung vi phạm quy tắc cộng đồng explanation: - delete_statuses: Vài tút của bạn đã vi phạm nội quy máy chủ và tạm thời bị ẩn bởi kiểm duyệt viên của %{instance}. + delete_statuses: Tút của bạn đã vi phạm nội quy máy chủ và tạm thời bị ẩn bởi kiểm duyệt viên của %{instance}. disable: Bạn không còn có thể sử dụng tài khoản của mình, nhưng hồ sơ của bạn và dữ liệu khác vẫn còn nguyên. Bạn có thể yêu cầu sao lưu dữ liệu của mình, thay đổi cài đặt tài khoản hoặc xóa tài khoản của bạn. mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm. sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột. silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn. suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa. reason: 'Lý do:' - statuses: 'Tút lưu ý:' + statuses: 'Tút vi phạm:' subject: delete_statuses: Những tút %{acct} của bạn đã bị xóa bỏ disable: Tài khoản %{acct} của bạn đã bị vô hiệu hóa From 69aa5699ce8fc1076d87e8f0a8954ea0caf3d464 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 03:43:12 -0400 Subject: [PATCH 111/467] Use `not-allowed` for cursor on disabled buttons (#32076) --- app/javascript/styles/mastodon/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 43ff4f28ef0c91..25b3003b9f4882 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -93,7 +93,7 @@ &:disabled, &.disabled { background-color: $ui-primary-color; - cursor: default; + cursor: not-allowed; } &.copyable { From 06ecf9008b9f98a54eb4c2c0b57cdea0fdd96526 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 03:50:15 -0400 Subject: [PATCH 112/467] Remove single-use shared examples in controller specs (#32044) --- .../settings/featured_tags_controller_spec.rb | 8 +------- .../controllers/settings/migrations_controller_spec.rb | 10 ++-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/spec/controllers/settings/featured_tags_controller_spec.rb b/spec/controllers/settings/featured_tags_controller_spec.rb index a56ae1c498cf00..f414e818f5f8f7 100644 --- a/spec/controllers/settings/featured_tags_controller_spec.rb +++ b/spec/controllers/settings/featured_tags_controller_spec.rb @@ -5,16 +5,10 @@ RSpec.describe Settings::FeaturedTagsController do render_views - shared_examples 'authenticate user' do - it 'redirects to sign_in page' do - expect(subject).to redirect_to new_user_session_path - end - end - context 'when user is not signed in' do subject { post :create } - it_behaves_like 'authenticate user' + it { is_expected.to redirect_to new_user_session_path } end context 'when user is signed in' do diff --git a/spec/controllers/settings/migrations_controller_spec.rb b/spec/controllers/settings/migrations_controller_spec.rb index 93c5de08990e96..dca4c925fd81bf 100644 --- a/spec/controllers/settings/migrations_controller_spec.rb +++ b/spec/controllers/settings/migrations_controller_spec.rb @@ -5,17 +5,11 @@ RSpec.describe Settings::MigrationsController do render_views - shared_examples 'authenticate user' do - it 'redirects to sign_in page' do - expect(subject).to redirect_to new_user_session_path - end - end - describe 'GET #show' do context 'when user is not sign in' do subject { get :show } - it_behaves_like 'authenticate user' + it { is_expected.to redirect_to new_user_session_path } end context 'when user is sign in' do @@ -49,7 +43,7 @@ context 'when user is not sign in' do subject { post :create } - it_behaves_like 'authenticate user' + it { is_expected.to redirect_to new_user_session_path } end context 'when user is signed in' do From c3b6a7a29792ff55706a0741f88bdc43b741c46b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 03:56:08 -0400 Subject: [PATCH 113/467] Reduce factory creation (36 -> 12) in `spec/controllers/oauth/*` area (#32045) --- .../oauth/authorizations_controller_spec.rb | 40 +++++++------- ...authorized_applications_controller_spec.rb | 55 ++++++++----------- .../oauth/tokens_controller_spec.rb | 19 +++---- 3 files changed, 49 insertions(+), 65 deletions(-) diff --git a/spec/controllers/oauth/authorizations_controller_spec.rb b/spec/controllers/oauth/authorizations_controller_spec.rb index 9bb520211c2cfa..cfc80b86503f3d 100644 --- a/spec/controllers/oauth/authorizations_controller_spec.rb +++ b/spec/controllers/oauth/authorizations_controller_spec.rb @@ -10,13 +10,6 @@ get :new, params: { client_id: app.uid, response_type: 'code', redirect_uri: 'http://localhost/', scope: 'read' } end - shared_examples 'stores location for user' do - it 'stores location for user' do - subject - expect(controller.stored_location_for(:user)).to eq "/oauth/authorize?client_id=#{app.uid}&redirect_uri=http%3A%2F%2Flocalhost%2F&response_type=code&scope=read" - end - end - context 'when signed in' do let!(:user) { Fabricate(:user) } @@ -24,18 +17,17 @@ sign_in user, scope: :user end - it 'returns http success' do + it 'returns http success and private cache control headers' do subject - expect(response).to have_http_status(200) - end - it 'returns private cache control headers' do - subject - expect(response.headers['Cache-Control']).to include('private, no-store') + expect(response) + .to have_http_status(200) + expect(response.headers['Cache-Control']) + .to include('private, no-store') + expect(controller.stored_location_for(:user)) + .to eq authorize_path_for(app) end - include_examples 'stores location for user' - context 'when app is already authorized' do before do Doorkeeper::AccessToken.find_or_create_for( @@ -52,10 +44,12 @@ expect(response).to redirect_to(/\A#{app.redirect_uri}/) end - it 'does not redirect to callback with force_login=true' do - get :new, params: { client_id: app.uid, response_type: 'code', redirect_uri: 'http://localhost/', scope: 'read', force_login: 'true' } + context 'with `force_login` param true' do + subject do + get :new, params: { client_id: app.uid, response_type: 'code', redirect_uri: 'http://localhost/', scope: 'read', force_login: 'true' } + end - expect(response).to have_http_status(:success) + it { is_expected.to have_http_status(:success) } end end end @@ -63,10 +57,16 @@ context 'when not signed in' do it 'redirects' do subject - expect(response).to redirect_to '/auth/sign_in' + + expect(response) + .to redirect_to '/auth/sign_in' + expect(controller.stored_location_for(:user)) + .to eq authorize_path_for(app) end + end - include_examples 'stores location for user' + def authorize_path_for(app) + "/oauth/authorize?client_id=#{app.uid}&redirect_uri=http%3A%2F%2Flocalhost%2F&response_type=code&scope=read" end end end diff --git a/spec/controllers/oauth/authorized_applications_controller_spec.rb b/spec/controllers/oauth/authorized_applications_controller_spec.rb index 52d3dbde83e034..1cf0984abea5bc 100644 --- a/spec/controllers/oauth/authorized_applications_controller_spec.rb +++ b/spec/controllers/oauth/authorized_applications_controller_spec.rb @@ -10,38 +10,31 @@ get :index end - shared_examples 'stores location for user' do - it 'stores location for user' do - subject - expect(controller.stored_location_for(:user)).to eq '/oauth/authorized_applications' - end - end - context 'when signed in' do before do sign_in Fabricate(:user), scope: :user end - it 'returns http success' do + it 'returns http success with private cache control headers' do subject - expect(response).to have_http_status(200) + expect(response) + .to have_http_status(200) + expect(response.headers['Cache-Control']) + .to include('private, no-store') + expect(controller.stored_location_for(:user)) + .to eq '/oauth/authorized_applications' end - - it 'returns private cache control headers' do - subject - expect(response.headers['Cache-Control']).to include('private, no-store') - end - - include_examples 'stores location for user' end context 'when not signed in' do it 'redirects' do subject - expect(response).to redirect_to '/auth/sign_in' - end - include_examples 'stores location for user' + expect(response) + .to redirect_to '/auth/sign_in' + expect(controller.stored_location_for(:user)) + .to eq '/oauth/authorized_applications' + end end end @@ -55,23 +48,19 @@ before do sign_in user, scope: :user allow(redis).to receive(:pipelined).and_yield(redis_pipeline_stub) - post :destroy, params: { id: application.id } - end - - it 'revokes access tokens for the application' do - expect(Doorkeeper::AccessToken.where(application: application).first.revoked_at).to_not be_nil end - it 'removes subscriptions for the application\'s access tokens' do - expect(Web::PushSubscription.where(user: user).count).to eq 0 - end - - it 'removes the web_push_subscription' do - expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound) - end + it 'revokes access tokens for the application and removes subscriptions and sends kill payload to streaming' do + post :destroy, params: { id: application.id } - it 'sends a session kill payload to the streaming server' do - expect(redis_pipeline_stub).to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') + expect(Doorkeeper::AccessToken.where(application: application).first.revoked_at) + .to_not be_nil + expect(Web::PushSubscription.where(user: user).count) + .to eq(0) + expect { web_push_subscription.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(redis_pipeline_stub) + .to have_received(:publish).with("timeline:access_token:#{access_token.id}", '{"event":"kill"}') end end end diff --git a/spec/controllers/oauth/tokens_controller_spec.rb b/spec/controllers/oauth/tokens_controller_spec.rb index dd2d8ca70cbcc4..a2eed797e075f2 100644 --- a/spec/controllers/oauth/tokens_controller_spec.rb +++ b/spec/controllers/oauth/tokens_controller_spec.rb @@ -9,20 +9,15 @@ let!(:access_token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, application: application) } let!(:web_push_subscription) { Fabricate(:web_push_subscription, user: user, access_token: access_token) } - before do + it 'revokes the token and removes subscriptions' do post :revoke, params: { client_id: application.uid, token: access_token.token } - end - - it 'revokes the token' do - expect(access_token.reload.revoked_at).to_not be_nil - end - - it 'removes web push subscription for token' do - expect(Web::PushSubscription.where(access_token: access_token).count).to eq 0 - end - it 'removes the web_push_subscription' do - expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect(access_token.reload.revoked_at) + .to_not be_nil + expect(Web::PushSubscription.where(access_token: access_token).count) + .to eq(0) + expect { web_push_subscription.reload } + .to raise_error(ActiveRecord::RecordNotFound) end end end From c2ef83ea4c045eefe9930b66ea6abe6ddeb31740 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 03:56:42 -0400 Subject: [PATCH 114/467] Consolidate shared `a scope` example parts into one attributes check (#32046) --- spec/lib/scope_transformer_spec.rb | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/spec/lib/scope_transformer_spec.rb b/spec/lib/scope_transformer_spec.rb index 09a31e04c57f32..f4003352e40ec9 100644 --- a/spec/lib/scope_transformer_spec.rb +++ b/spec/lib/scope_transformer_spec.rb @@ -7,16 +7,13 @@ subject { described_class.new.apply(ScopeParser.new.parse(input)) } shared_examples 'a scope' do |namespace, term, access| - it 'parses the term' do - expect(subject.term).to eq term - end - - it 'parses the namespace' do - expect(subject.namespace).to eq namespace - end - - it 'parses the access' do - expect(subject.access).to eq access + it 'parses the attributes' do + expect(subject) + .to have_attributes( + term: term, + namespace: namespace, + access: access + ) end end From 83574f641aba9278bbc9c0d940717dad00522634 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 04:07:48 -0400 Subject: [PATCH 115/467] Add coverage and use mailer callback to check functional user in notification mailer (#32055) --- app/mailers/notification_mailer.rb | 16 +++++++++------- spec/mailers/notification_mailer_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 6b21b4bedde1a4..4c374f5d57fde1 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -13,12 +13,14 @@ class NotificationMailer < ApplicationMailer before_action :set_account, only: [:follow, :favourite, :reblog, :follow_request] after_action :set_list_headers! + before_deliver :verify_functional_user + default to: -> { email_address_with_name(@user.email, @me.username) } layout 'mailer' def mention - return unless @user.functional? && @status.present? + return if @status.blank? locale_for_account(@me) do mail subject: default_i18n_subject(name: @status.account.acct) @@ -26,15 +28,13 @@ def mention end def follow - return unless @user.functional? - locale_for_account(@me) do mail subject: default_i18n_subject(name: @account.acct) end end def favourite - return unless @user.functional? && @status.present? + return if @status.blank? locale_for_account(@me) do mail subject: default_i18n_subject(name: @account.acct) @@ -42,7 +42,7 @@ def favourite end def reblog - return unless @user.functional? && @status.present? + return if @status.blank? locale_for_account(@me) do mail subject: default_i18n_subject(name: @account.acct) @@ -50,8 +50,6 @@ def reblog end def follow_request - return unless @user.functional? - locale_for_account(@me) do mail subject: default_i18n_subject(name: @account.acct) end @@ -75,6 +73,10 @@ def set_account @account = @notification.from_account end + def verify_functional_user + throw(:abort) unless @user.functional? + end + def set_list_headers! headers( 'List-ID' => "<#{@type}.#{@me.username}.#{Rails.configuration.x.local_domain}>", diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 056000b0422f55..4c6107d9f76fce 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -3,6 +3,17 @@ require 'rails_helper' RSpec.describe NotificationMailer do + shared_examples 'delivery to non functional user' do + context 'when user is not functional' do + before { receiver.update(confirmed_at: nil) } + + it 'does not deliver mail' do + emails = capture_emails { mail.deliver_now } + expect(emails).to be_empty + end + end + end + let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) } let(:sender) { Fabricate(:account, username: 'bob') } let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } @@ -24,6 +35,8 @@ .and have_thread_headers .and have_standard_headers('mention').for(receiver) end + + include_examples 'delivery to non functional user' end describe 'follow' do @@ -40,6 +53,8 @@ .and(have_body_text('bob is now following you')) .and have_standard_headers('follow').for(receiver) end + + include_examples 'delivery to non functional user' end describe 'favourite' do @@ -58,6 +73,8 @@ .and have_thread_headers .and have_standard_headers('favourite').for(receiver) end + + include_examples 'delivery to non functional user' end describe 'reblog' do @@ -76,6 +93,8 @@ .and have_thread_headers .and have_standard_headers('reblog').for(receiver) end + + include_examples 'delivery to non functional user' end describe 'follow_request' do @@ -92,6 +111,8 @@ .and(have_body_text('bob has requested to follow you')) .and have_standard_headers('follow_request').for(receiver) end + + include_examples 'delivery to non functional user' end private From 3dc4ddc6631585813c1c5bce9e8679f101a03a56 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 25 Sep 2024 15:35:37 +0200 Subject: [PATCH 116/467] Fix search params being dropped when redirected to non-deck path (#31984) --- .../concerns/web_app_controller_concern.rb | 2 +- app/javascript/mastodon/features/ui/index.jsx | 2 +- app/lib/permalink_redirector.rb | 2 +- spec/lib/permalink_redirector_spec.rb | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index e1f599dcb0ca63..ebbdba59af0293 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -31,7 +31,7 @@ def set_app_body_class def redirect_unauthenticated_to_permalinks! return if user_signed_in? && current_account.moved_to_account_id.nil? - permalink_redirector = PermalinkRedirector.new(request.path) + permalink_redirector = PermalinkRedirector.new(request.original_fullpath) return if permalink_redirector.redirect_path.blank? expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index a6e3640478464c..2f9f962b810c4c 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -186,7 +186,7 @@ class SwitchingColumnsArea extends PureComponent { {redirect} {singleColumn ? : null} - {singleColumn && pathName.startsWith('/deck/') ? : null} + {singleColumn && pathName.startsWith('/deck/') ? : null} {/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */} {!singleColumn && pathName === '/getting-started' ? : null} {!singleColumn && pathName === '/home' ? : null} diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index f551f69db852f9..142a05d10d3daa 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -83,6 +83,6 @@ def second_segment end def path_segments - @path_segments ||= @path.delete_prefix('/deck').delete_prefix('/').split('/') + @path_segments ||= @path.split('?')[0].delete_prefix('/deck').delete_prefix('/').split('/') end end diff --git a/spec/lib/permalink_redirector_spec.rb b/spec/lib/permalink_redirector_spec.rb index 3f77d7665a23d2..5a544c3d38e136 100644 --- a/spec/lib/permalink_redirector_spec.rb +++ b/spec/lib/permalink_redirector_spec.rb @@ -29,5 +29,20 @@ redirector = described_class.new('@alice/123') expect(redirector.redirect_path).to eq 'https://example.com/status-123' end + + it 'returns path for legacy status links with a query param' do + redirector = described_class.new('statuses/123?foo=bar') + expect(redirector.redirect_path).to eq 'https://example.com/status-123' + end + + it 'returns path for pretty status links with a query param' do + redirector = described_class.new('@alice/123?foo=bar') + expect(redirector.redirect_path).to eq 'https://example.com/status-123' + end + + it 'returns path for deck URLs with query params' do + redirector = described_class.new('/deck/directory?local=true') + expect(redirector.redirect_path).to eq '/directory?local=true' + end end end From d6f5ee75ab91eba676e4e200d4e6a98a5aed91ef Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 25 Sep 2024 15:36:19 +0200 Subject: [PATCH 117/467] Add notification grouping for follow notifications (#32085) --- .../mastodon/actions/notification_groups.ts | 9 +++++- app/javascript/mastodon/api/notifications.ts | 1 + app/models/notification.rb | 29 ++++++++++++++++++- app/services/notify_service.rb | 21 +------------- 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index 9d3fc0d4254dcf..b40b04f8ccfd69 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -68,10 +68,15 @@ function dispatchAssociatedRecords( dispatch(importFetchedStatuses(fetchedStatuses)); } +const supportedGroupedNotificationTypes = ['favourite', 'reblog']; + export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => - apiFetchNotificationGroups({ exclude_types: getExcludedTypes(getState()) }), + apiFetchNotificationGroups({ + grouped_types: supportedGroupedNotificationTypes, + exclude_types: getExcludedTypes(getState()), + }), ({ notifications, accounts, statuses }, { dispatch }) => { dispatch(importFetchedAccounts(accounts)); dispatch(importFetchedStatuses(statuses)); @@ -93,6 +98,7 @@ export const fetchNotificationsGap = createDataLoadingThunk( 'notificationGroups/fetchGap', async (params: { gap: NotificationGap }, { getState }) => apiFetchNotificationGroups({ + grouped_types: supportedGroupedNotificationTypes, max_id: params.gap.maxId, exclude_types: getExcludedTypes(getState()), }), @@ -109,6 +115,7 @@ export const pollRecentNotifications = createDataLoadingThunk( 'notificationGroups/pollRecentNotifications', async (_params, { getState }) => { return apiFetchNotificationGroups({ + grouped_types: supportedGroupedNotificationTypes, max_id: undefined, exclude_types: getExcludedTypes(getState()), // In slow mode, we don't want to include notifications that duplicate the already-displayed ones diff --git a/app/javascript/mastodon/api/notifications.ts b/app/javascript/mastodon/api/notifications.ts index 92863ac5caa51d..813e2f3a1701dc 100644 --- a/app/javascript/mastodon/api/notifications.ts +++ b/app/javascript/mastodon/api/notifications.ts @@ -31,6 +31,7 @@ export const apiFetchNotifications = async ( export const apiFetchNotificationGroups = async (params?: { url?: string; + grouped_types?: string[]; exclude_types?: string[]; max_id?: string; since_id?: string; diff --git a/app/models/notification.rb b/app/models/notification.rb index 44a43d2ece0c65..695f39a316f6ca 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -20,6 +20,7 @@ class Notification < ApplicationRecord self.inheritance_column = nil include Paginable + include Redisable LEGACY_TYPE_CLASS_MAP = { 'Mention' => :mention, @@ -30,7 +31,9 @@ class Notification < ApplicationRecord 'Poll' => :poll, }.freeze - GROUPABLE_NOTIFICATION_TYPES = %i(favourite reblog).freeze + # `set_group_key!` needs to be updated if this list changes + GROUPABLE_NOTIFICATION_TYPES = %i(favourite reblog follow).freeze + MAXIMUM_GROUP_SPAN_HOURS = 12 # Please update app/javascript/api_types/notification.ts if you change this PROPERTIES = { @@ -123,6 +126,30 @@ def target_status end end + def set_group_key! + return if filtered? || Notification::GROUPABLE_NOTIFICATION_TYPES.exclude?(type) + + type_prefix = case type + when :favourite, :reblog + [type, target_status&.id].join('-') + when :follow + type + else + raise NotImplementedError + end + redis_key = "notif-group/#{account.id}/#{type_prefix}" + hour_bucket = activity.created_at.utc.to_i / 1.hour.to_i + + # Reuse previous group if it does not span too large an amount of time + previous_bucket = redis.get(redis_key).to_i + hour_bucket = previous_bucket if hour_bucket < previous_bucket + MAXIMUM_GROUP_SPAN_HOURS + + # We do not concern ourselves with race conditions since we use hour buckets + redis.set(redis_key, hour_bucket, ex: MAXIMUM_GROUP_SPAN_HOURS.hours.to_i) + + self.group_key = "#{type_prefix}-#{hour_bucket}" + end + class << self def browserable(types: [], exclude_types: [], from_account_id: nil, include_filtered: false) requested_types = if types.empty? diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 97eee0548763e6..9aebab787ee165 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -3,8 +3,6 @@ class NotifyService < BaseService include Redisable - MAXIMUM_GROUP_SPAN_HOURS = 12 - # TODO: the severed_relationships type probably warrants email notifications NON_EMAIL_TYPES = %i( admin.report @@ -216,7 +214,7 @@ def call(recipient, type, activity) return if drop? @notification.filtered = filter? - @notification.group_key = notification_group_key + @notification.set_group_key! @notification.save! # It's possible the underlying activity has been deleted @@ -236,23 +234,6 @@ def call(recipient, type, activity) private - def notification_group_key - return nil if @notification.filtered || Notification::GROUPABLE_NOTIFICATION_TYPES.exclude?(@notification.type) - - type_prefix = "#{@notification.type}-#{@notification.target_status.id}" - redis_key = "notif-group/#{@recipient.id}/#{type_prefix}" - hour_bucket = @notification.activity.created_at.utc.to_i / 1.hour.to_i - - # Reuse previous group if it does not span too large an amount of time - previous_bucket = redis.get(redis_key).to_i - hour_bucket = previous_bucket if hour_bucket < previous_bucket + MAXIMUM_GROUP_SPAN_HOURS - - # We do not concern ourselves with race conditions since we use hour buckets - redis.set(redis_key, hour_bucket, ex: MAXIMUM_GROUP_SPAN_HOURS.hours.to_i) - - "#{type_prefix}-#{hour_bucket}" - end - def drop? DropCondition.new(@notification).drop? end From 51777fe3e2ec1646fece2b99ade0b802afe2088d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 25 Sep 2024 09:54:22 -0400 Subject: [PATCH 118/467] Prefer structure checks over multi-line size/parts checks in `parsed_body` (#32063) --- .../api/v1/accounts/follower_accounts_spec.rb | 20 ++++++++---- .../v1/accounts/following_accounts_spec.rb | 20 ++++++++---- spec/requests/api/v1/directories_spec.rb | 31 ++++++++++++------- spec/requests/api/v1/peers/search_spec.rb | 8 ++--- .../statuses/favourited_by_accounts_spec.rb | 9 +++--- .../v1/statuses/reblogged_by_accounts_spec.rb | 9 +++--- 6 files changed, 60 insertions(+), 37 deletions(-) diff --git a/spec/requests/api/v1/accounts/follower_accounts_spec.rb b/spec/requests/api/v1/accounts/follower_accounts_spec.rb index 7db9884a57a8f7..61987fac1cc667 100644 --- a/spec/requests/api/v1/accounts/follower_accounts_spec.rb +++ b/spec/requests/api/v1/accounts/follower_accounts_spec.rb @@ -23,8 +23,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq 2 - expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s), + hash_including(id: bob.id.to_s) + ) end it 'does not return blocked users', :aggregate_failures do @@ -34,8 +37,10 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq 1 - expect(response.parsed_body[0][:id]).to eq alice.id.to_s + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s) + ) end context 'when requesting user is blocked' do @@ -56,8 +61,11 @@ account.mute!(bob) get "/api/v1/accounts/#{account.id}/followers", params: { limit: 2 }, headers: headers - expect(response.parsed_body.size).to eq 2 - expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s), + hash_including(id: bob.id.to_s) + ) end end end diff --git a/spec/requests/api/v1/accounts/following_accounts_spec.rb b/spec/requests/api/v1/accounts/following_accounts_spec.rb index ffb7332c4eb7b9..aae811467d2243 100644 --- a/spec/requests/api/v1/accounts/following_accounts_spec.rb +++ b/spec/requests/api/v1/accounts/following_accounts_spec.rb @@ -23,8 +23,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq 2 - expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s), + hash_including(id: bob.id.to_s) + ) end it 'does not return blocked users', :aggregate_failures do @@ -34,8 +37,10 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq 1 - expect(response.parsed_body[0][:id]).to eq alice.id.to_s + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s) + ) end context 'when requesting user is blocked' do @@ -56,8 +61,11 @@ account.mute!(bob) get "/api/v1/accounts/#{account.id}/following", params: { limit: 2 }, headers: headers - expect(response.parsed_body.size).to eq 2 - expect([response.parsed_body[0][:id], response.parsed_body[1][:id]]).to contain_exactly(alice.id.to_s, bob.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s), + hash_including(id: bob.id.to_s) + ) end end end diff --git a/spec/requests/api/v1/directories_spec.rb b/spec/requests/api/v1/directories_spec.rb index 282be9a582551e..07e65f49b75b54 100644 --- a/spec/requests/api/v1/directories_spec.rb +++ b/spec/requests/api/v1/directories_spec.rb @@ -84,8 +84,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq(2) - expect(response.parsed_body.pluck(:id)).to contain_exactly(eligible_remote_account.id.to_s, local_discoverable_account.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: eligible_remote_account.id.to_s), + hash_including(id: local_discoverable_account.id.to_s) + ) end end @@ -105,9 +108,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq(1) - expect(response.parsed_body.first[:id]).to include(local_account.id.to_s) - expect(response.body).to_not include(remote_account.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: local_account.id.to_s) + ) + .and not_include(remote_account.id.to_s) end end @@ -121,9 +126,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq(2) - expect(response.parsed_body.first[:id]).to include(new_stat.account_id.to_s) - expect(response.parsed_body.second[:id]).to include(old_stat.account_id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: new_stat.account_id.to_s), + hash_including(id: old_stat.account_id.to_s) + ) end end @@ -138,9 +145,11 @@ expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size).to eq(2) - expect(response.parsed_body.first[:id]).to include(account_new.id.to_s) - expect(response.parsed_body.second[:id]).to include(account_old.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: account_new.id.to_s), + hash_including(id: account_old.id.to_s) + ) end end end diff --git a/spec/requests/api/v1/peers/search_spec.rb b/spec/requests/api/v1/peers/search_spec.rb index d00a2437f279d6..afcc14190296b4 100644 --- a/spec/requests/api/v1/peers/search_spec.rb +++ b/spec/requests/api/v1/peers/search_spec.rb @@ -55,10 +55,10 @@ .to have_http_status(200) expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size) - .to eq(1) - expect(response.parsed_body.first) - .to eq(account.domain) + expect(response.parsed_body) + .to contain_exactly( + eq(account.domain) + ) end end end diff --git a/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb b/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb index 6471697154c7df..441664d0994e21 100644 --- a/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb +++ b/spec/requests/api/v1/statuses/favourited_by_accounts_spec.rb @@ -36,8 +36,6 @@ expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size) - .to eq(2) expect(response.parsed_body) .to contain_exactly( include(id: alice.id.to_s), @@ -50,9 +48,10 @@ subject - expect(response.parsed_body.size) - .to eq 1 - expect(response.parsed_body.first[:id]).to eq(alice.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s) + ) end end end diff --git a/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb b/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb index 40457f6e894a57..824b5aa2755e99 100644 --- a/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb +++ b/spec/requests/api/v1/statuses/reblogged_by_accounts_spec.rb @@ -35,8 +35,6 @@ expect(response.content_type) .to start_with('application/json') - expect(response.parsed_body.size) - .to eq(2) expect(response.parsed_body) .to contain_exactly( include(id: alice.id.to_s), @@ -49,9 +47,10 @@ subject - expect(response.parsed_body.size) - .to eq 1 - expect(response.parsed_body.first[:id]).to eq(alice.id.to_s) + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: alice.id.to_s) + ) end end end From 739ad0eed2f537bc49f53fb556beab52fd6e66da Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 25 Sep 2024 16:33:58 +0200 Subject: [PATCH 119/467] Keep the status action buttons at their position regardless of the counter size (#32084) Co-authored-by: Claire --- .../mastodon/components/status_action_bar.jsx | 37 ++++++++++++------- .../styles/mastodon/components.scss | 13 +++++++ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 165e81c7d88a0f..75531abf568cf7 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -375,20 +375,29 @@ class StatusActionBar extends ImmutablePureComponent { return (
- - - - - - +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
); } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 25b3003b9f4882..ea163ff9bf522e 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -299,6 +299,10 @@ } } + &--with-counter { + padding-inline-end: 4px; + } + &__counter { display: block; width: auto; @@ -1465,6 +1469,15 @@ body > [data-popper-placement] { } } + &__action-bar__button-wrapper { + flex-basis: 0; + flex-grow: 1; + + &:last-child { + flex-grow: 0; + } + } + &--first-in-thread { border-top: 1px solid var(--background-border-color); } From 28966fa0a6d7b98ee94696acdc79e45449ce8349 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 25 Sep 2024 17:21:11 +0200 Subject: [PATCH 120/467] Remove deprecated `v2_alpha` endpoint for grouped notifications (#32089) --- config/routes/api.rb | 30 +- .../api/v2_alpha/notifications_spec.rb | 345 ------------------ 2 files changed, 11 insertions(+), 364 deletions(-) delete mode 100644 spec/requests/api/v2_alpha/notifications_spec.rb diff --git a/config/routes/api.rb b/config/routes/api.rb index 39c699b9a3042b..93698381cbfb1a 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -299,21 +299,6 @@ end end - concern :grouped_notifications do - resources :notifications, param: :group_key, only: [:index, :show] do - collection do - post :clear - get :unread_count - end - - member do - post :dismiss - end - - resources :accounts, only: [:index], module: :notifications - end - end - namespace :v2 do get '/search', to: 'search#index', as: :search @@ -340,11 +325,18 @@ resource :policy, only: [:show, :update] end - concerns :grouped_notifications - end + resources :notifications, param: :group_key, only: [:index, :show] do + collection do + post :clear + get :unread_count + end - namespace :v2_alpha, module: 'v2' do - concerns :grouped_notifications + member do + post :dismiss + end + + resources :accounts, only: [:index], module: :notifications + end end namespace :web do diff --git a/spec/requests/api/v2_alpha/notifications_spec.rb b/spec/requests/api/v2_alpha/notifications_spec.rb deleted file mode 100644 index 6d7df45b6563ff..00000000000000 --- a/spec/requests/api/v2_alpha/notifications_spec.rb +++ /dev/null @@ -1,345 +0,0 @@ -# frozen_string_literal: true - -# TODO: remove this before 4.3.0-rc1 - -require 'rails_helper' - -RSpec.describe 'Notifications' do - let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - let(:scopes) { 'read:notifications write:notifications' } - let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - - describe 'GET /api/v2_alpha/notifications/unread_count', :inline_jobs do - subject do - get '/api/v2_alpha/notifications/unread_count', headers: headers, params: params - end - - let(:params) { {} } - - before do - first_status = PostStatusService.new.call(user.account, text: 'Test') - ReblogService.new.call(Fabricate(:account), first_status) - PostStatusService.new.call(Fabricate(:account), text: 'Hello @alice') - FavouriteService.new.call(Fabricate(:account), first_status) - FavouriteService.new.call(Fabricate(:account), first_status) - FollowService.new.call(Fabricate(:account), user.account) - end - - it_behaves_like 'forbidden for wrong scope', 'write write:notifications' - - context 'with no options' do - it 'returns expected notifications count' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq 4 - end - end - - context 'with grouped_types parameter' do - let(:params) { { grouped_types: %w(reblog) } } - - it 'returns expected notifications count' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq 5 - end - end - - context 'with a read marker' do - before do - id = user.account.notifications.browserable.order(id: :desc).offset(2).first.id - user.markers.create!(timeline: 'notifications', last_read_id: id) - end - - it 'returns expected notifications count' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq 2 - end - end - - context 'with exclude_types param' do - let(:params) { { exclude_types: %w(mention) } } - - it 'returns expected notifications count' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq 3 - end - end - - context 'with a user-provided limit' do - let(:params) { { limit: 2 } } - - it 'returns a capped value' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq 2 - end - end - - context 'when there are more notifications than the limit' do - before do - stub_const('Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT', 2) - end - - it 'returns a capped value' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:count]).to eq Api::V2::NotificationsController::DEFAULT_NOTIFICATIONS_COUNT_LIMIT - end - end - end - - describe 'GET /api/v2_alpha/notifications', :inline_jobs do - subject do - get '/api/v2_alpha/notifications', headers: headers, params: params - end - - let(:bob) { Fabricate(:user) } - let(:tom) { Fabricate(:user) } - let(:params) { {} } - - before do - first_status = PostStatusService.new.call(user.account, text: 'Test') - ReblogService.new.call(bob.account, first_status) - PostStatusService.new.call(bob.account, text: 'Hello @alice') - FavouriteService.new.call(bob.account, first_status) - FavouriteService.new.call(tom.account, first_status) - FollowService.new.call(bob.account, user.account) - end - - it_behaves_like 'forbidden for wrong scope', 'write write:notifications' - - context 'when there are no notifications' do - before do - user.account.notifications.destroy_all - end - - it 'returns 0 notifications' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:notification_groups]).to eq [] - end - end - - context 'with no options' do - it 'returns expected notification types', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow') - end - end - - context 'with grouped_types param' do - let(:params) { { grouped_types: %w(reblog) } } - - it 'returns everything, but does not group favourites' do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:notification_groups]).to contain_exactly( - a_hash_including( - type: 'reblog', - sample_account_ids: [bob.account_id.to_s] - ), - a_hash_including( - type: 'mention', - sample_account_ids: [bob.account_id.to_s] - ), - a_hash_including( - type: 'favourite', - sample_account_ids: [bob.account_id.to_s] - ), - a_hash_including( - type: 'favourite', - sample_account_ids: [tom.account_id.to_s] - ), - a_hash_including( - type: 'follow', - sample_account_ids: [bob.account_id.to_s] - ) - ) - end - end - - context 'with exclude_types param' do - let(:params) { { exclude_types: %w(mention) } } - - it 'returns everything but excluded type', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body.size).to_not eq 0 - expect(body_json_types.uniq).to_not include 'mention' - end - end - - context 'with types param' do - let(:params) { { types: %w(mention) } } - - it 'returns only requested type', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(body_json_types.uniq).to eq ['mention'] - expect(response.parsed_body.dig(:notification_groups, 0, :page_min_id)).to_not be_nil - end - end - - context 'with limit param' do - let(:params) { { limit: 3 } } - let(:notifications) { user.account.notifications.reorder(id: :desc) } - - it 'returns the requested number of notifications paginated', :aggregate_failures do - subject - - expect(response.parsed_body[:notification_groups].size) - .to eq(params[:limit]) - - expect(response) - .to include_pagination_headers( - prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), - # TODO: one downside of the current approach is that we return the first ID matching the group, - # not the last that has been skipped, so pagination is very likely to give overlap - next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[3].id) - ) - end - end - - context 'with since_id param' do - let(:params) { { since_id: notifications[2].id } } - let(:notifications) { user.account.notifications.reorder(id: :desc) } - - it 'returns the requested number of notifications paginated', :aggregate_failures do - subject - - expect(response.parsed_body[:notification_groups].size) - .to eq(2) - - expect(response) - .to include_pagination_headers( - prev: api_v2_notifications_url(limit: params[:limit], min_id: notifications.first.id), - # TODO: one downside of the current approach is that we return the first ID matching the group, - # not the last that has been skipped, so pagination is very likely to give overlap - next: api_v2_notifications_url(limit: params[:limit], max_id: notifications[1].id) - ) - end - end - - context 'when requesting stripped-down accounts' do - let(:params) { { expand_accounts: 'partial_avatars' } } - - let(:recent_account) { Fabricate(:account) } - - before do - FavouriteService.new.call(recent_account, user.account.statuses.first) - end - - it 'returns an account in "partial_accounts", with the expected keys', :aggregate_failures do - subject - - expect(response).to have_http_status(200) - expect(response.parsed_body[:partial_accounts].size).to be > 0 - expect(response.parsed_body[:partial_accounts][0].keys.map(&:to_sym)).to contain_exactly(:acct, :avatar, :avatar_static, :bot, :id, :locked, :url) - expect(response.parsed_body[:partial_accounts].pluck(:id)).to_not include(recent_account.id.to_s) - expect(response.parsed_body[:accounts].pluck(:id)).to include(recent_account.id.to_s) - end - end - - context 'when passing an invalid value for "expand_accounts"' do - let(:params) { { expand_accounts: 'unknown_foobar' } } - - it 'returns http bad request' do - subject - - expect(response).to have_http_status(400) - end - end - - def body_json_types - response.parsed_body[:notification_groups].pluck(:type) - end - end - - describe 'GET /api/v2_alpha/notifications/:id' do - subject do - get "/api/v2_alpha/notifications/#{notification.group_key}", headers: headers - end - - let(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') } - - it_behaves_like 'forbidden for wrong scope', 'write write:notifications' - - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - context 'when notification belongs to someone else' do - let(:notification) { Fabricate(:notification, group_key: 'foobar') } - - it 'returns http not found' do - subject - - expect(response).to have_http_status(404) - end - end - end - - describe 'POST /api/v2_alpha/notifications/:id/dismiss' do - subject do - post "/api/v2_alpha/notifications/#{notification.group_key}/dismiss", headers: headers - end - - let!(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') } - - it_behaves_like 'forbidden for wrong scope', 'read read:notifications' - - it 'destroys the notification' do - subject - - expect(response).to have_http_status(200) - expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - - context 'when notification belongs to someone else' do - let(:notification) { Fabricate(:notification) } - - it 'returns http not found' do - subject - - expect(response).to have_http_status(404) - end - end - end - - describe 'POST /api/v2_alpha/notifications/clear' do - subject do - post '/api/v2_alpha/notifications/clear', headers: headers - end - - before do - Fabricate(:notification, account: user.account) - end - - it_behaves_like 'forbidden for wrong scope', 'read read:notifications' - - it 'clears notifications for the account' do - subject - - expect(user.account.reload.notifications).to be_empty - expect(response).to have_http_status(200) - end - end -end From 28c4eca0af696ff039b90b8af57aa818df442edf Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 18:36:19 +0200 Subject: [PATCH 121/467] Change responsive break points on navigation panel in web UI (#32034) --- .../mastodon/components/navigation_portal.tsx | 32 ++--- .../mastodon/features/account/navigation.jsx | 5 +- .../features/ui/components/column_link.jsx | 7 +- .../ui/components/navigation_panel.jsx | 111 ++++++++++-------- .../styles/mastodon/components.scss | 54 ++++++--- 5 files changed, 115 insertions(+), 94 deletions(-) diff --git a/app/javascript/mastodon/components/navigation_portal.tsx b/app/javascript/mastodon/components/navigation_portal.tsx index 46f2c0bfacdc89..08f91ce18aaf58 100644 --- a/app/javascript/mastodon/components/navigation_portal.tsx +++ b/app/javascript/mastodon/components/navigation_portal.tsx @@ -4,22 +4,22 @@ import AccountNavigation from 'mastodon/features/account/navigation'; import Trends from 'mastodon/features/getting_started/containers/trends_container'; import { showTrends } from 'mastodon/initial_state'; -const DefaultNavigation: React.FC = () => - showTrends ? ( - <> -
- - - ) : null; +const DefaultNavigation: React.FC = () => (showTrends ? : null); export const NavigationPortal: React.FC = () => ( - - - - - - - - - +
+ + + + + + + + + +
); diff --git a/app/javascript/mastodon/features/account/navigation.jsx b/app/javascript/mastodon/features/account/navigation.jsx index ccebe9043a1302..aa78135de247a9 100644 --- a/app/javascript/mastodon/features/account/navigation.jsx +++ b/app/javascript/mastodon/features/account/navigation.jsx @@ -43,10 +43,7 @@ class AccountNavigation extends PureComponent { } return ( - <> -
- - + ); } diff --git a/app/javascript/mastodon/features/ui/components/column_link.jsx b/app/javascript/mastodon/features/ui/components/column_link.jsx index 6ef122c07be844..3386c17f071f5e 100644 --- a/app/javascript/mastodon/features/ui/components/column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/column_link.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useRouteMatch, NavLink } from 'react-router-dom'; -import { Icon } from 'mastodon/components/icon'; +import { Icon } from 'mastodon/components/icon'; -const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, ...other }) => { +const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, optional, ...other }) => { const match = useRouteMatch(to); - const className = classNames('column-link', { 'column-link--transparent': transparent }); + const className = classNames('column-link', { 'column-link--transparent': transparent, 'column-link--optional': optional }); const badgeElement = typeof badge !== 'undefined' ? {badge} : null; const iconElement = (typeof icon === 'string' || iconComponent) ? : icon; const activeIconElement = activeIcon ?? (activeIconComponent ? : iconElement); @@ -43,6 +43,7 @@ ColumnLink.propTypes = { method: PropTypes.string, badge: PropTypes.node, transparent: PropTypes.bool, + optional: PropTypes.bool, }; export default ColumnLink; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 0ca21e89765449..8fa20a554d3869 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -120,14 +120,17 @@ class NavigationPanel extends Component { let banner = undefined; - if(transientSingleColumn) - banner = (
- {intl.formatMessage(messages.openedInClassicInterface)} - {" "} - - {intl.formatMessage(messages.advancedInterface)} - -
); + if (transientSingleColumn) { + banner = ( +
+ {intl.formatMessage(messages.openedInClassicInterface)} + {" "} + + {intl.formatMessage(messages.advancedInterface)} + +
+ ); + } return (
@@ -141,54 +144,58 @@ class NavigationPanel extends Component {
} - {signedIn && ( - <> - - - - - )} - - {trendsEnabled ? ( - - ) : ( - - )} - - {(signedIn || timelinePreview) && ( - - )} - - {!signedIn && ( -
+
+ {signedIn && ( + <> + + + + + )} + + {trendsEnabled ? ( + + ) : ( + + )} + + {(signedIn || timelinePreview) && ( + + )} + + {!signedIn && ( +
+
+ { disabledAccountId ? : } +
+ )} + + {signedIn && ( + <> + + + + + + + +
+ + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + +

- { disabledAccountId ? : } +
- )} - - {signedIn && ( - <> - - - - - - - -
- - - - {canManageReports(permissions) && } - {canViewAdminDashboard(permissions) && } - - )} - -
-
-
+
+
); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index ea163ff9bf522e..847c594ae50f43 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3490,12 +3490,14 @@ $ui-header-logo-wordmark-width: 99px; margin-top: 10px; margin-bottom: 10px; height: calc(100% - 20px); - overflow-y: auto; + overflow: hidden; display: flex; flex-direction: column; - & > a { - flex: 0 0 auto; + &__menu { + flex: 1 1 auto; + min-height: 0; + overflow-y: auto; } .logo { @@ -3506,6 +3508,36 @@ $ui-header-logo-wordmark-width: 99px; &__logo { margin-bottom: 12px; } + + @media screen and (height <= 710px) { + &__portal { + display: none; + } + } + + @media screen and (height <= 765px) { + &__portal .trends__item:nth-child(n + 3) { + display: none; + } + } + + @media screen and (height <= 820px) { + &__portal .trends__item:nth-child(n + 4) { + display: none; + } + } + + @media screen and (height <= 920px) { + .column-link.column-link--optional { + display: none; + } + } + + @media screen and (height <= 1040px) { + .list-panel { + display: none; + } + } } .navigation-panel, @@ -3869,22 +3901,6 @@ $ui-header-logo-wordmark-width: 99px; } } - @media screen and (height <= 810px) { - .trends__item:nth-of-type(3) { - display: none; - } - } - - @media screen and (height <= 720px) { - .trends__item:nth-of-type(2) { - display: none; - } - } - - @media screen and (height <= 670px) { - display: none; - } - .trends__item { border-bottom: 0; padding: 10px; From 3426ea2912d1cd69ebdfa4e43a119dc6e7374c49 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 20:13:36 +0200 Subject: [PATCH 122/467] Add preview of followers removed in domain block modal in web UI (#32032) --- .../v1/domain_blocks/previews_controller.rb | 27 +++ app/javascript/mastodon/api.ts | 1 + app/javascript/mastodon/components/button.tsx | 3 + .../features/ui/components/block_modal.jsx | 2 +- .../ui/components/domain_block_modal.jsx | 106 --------- .../ui/components/domain_block_modal.tsx | 204 ++++++++++++++++++ app/javascript/mastodon/locales/en.json | 2 +- .../styles/mastodon/components.scss | 20 ++ app/javascript/styles/mastodon/variables.scss | 3 + .../domain_block_preview_presenter.rb | 5 + .../rest/domain_block_preview_serializer.rb | 5 + config/routes/api.rb | 4 + 12 files changed, 274 insertions(+), 108 deletions(-) create mode 100644 app/controllers/api/v1/domain_blocks/previews_controller.rb delete mode 100644 app/javascript/mastodon/features/ui/components/domain_block_modal.jsx create mode 100644 app/javascript/mastodon/features/ui/components/domain_block_modal.tsx create mode 100644 app/presenters/domain_block_preview_presenter.rb create mode 100644 app/serializers/rest/domain_block_preview_serializer.rb diff --git a/app/controllers/api/v1/domain_blocks/previews_controller.rb b/app/controllers/api/v1/domain_blocks/previews_controller.rb new file mode 100644 index 00000000000000..a917bddd98ed4c --- /dev/null +++ b/app/controllers/api/v1/domain_blocks/previews_controller.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class Api::V1::DomainBlocks::PreviewsController < Api::BaseController + before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' } + before_action :require_user! + before_action :set_domain + before_action :set_domain_block_preview + + def show + render json: @domain_block_preview, serializer: REST::DomainBlockPreviewSerializer + end + + private + + def set_domain + @domain = TagManager.instance.normalize_domain(params[:domain]) + end + + def set_domain_block_preview + @domain_block_preview = with_read_replica do + DomainBlockPreviewPresenter.new( + following_count: current_account.following.where(domain: @domain).count, + followers_count: current_account.followers.where(domain: @domain).count + ) + end + end +end diff --git a/app/javascript/mastodon/api.ts b/app/javascript/mastodon/api.ts index 25bb25547cf94d..51cbe0b6954e09 100644 --- a/app/javascript/mastodon/api.ts +++ b/app/javascript/mastodon/api.ts @@ -70,6 +70,7 @@ export async function apiRequest( args: { params?: RequestParamsOrData; data?: RequestParamsOrData; + timeout?: number; } = {}, ) { const { data } = await api().request({ diff --git a/app/javascript/mastodon/components/button.tsx b/app/javascript/mastodon/components/button.tsx index c76aaea42f26fc..3e720f7ceead2a 100644 --- a/app/javascript/mastodon/components/button.tsx +++ b/app/javascript/mastodon/components/button.tsx @@ -7,6 +7,7 @@ interface BaseProps extends Omit, 'children'> { block?: boolean; secondary?: boolean; + dangerous?: boolean; } interface PropsChildren extends PropsWithChildren { @@ -26,6 +27,7 @@ export const Button: React.FC = ({ disabled, block, secondary, + dangerous, className, title, text, @@ -46,6 +48,7 @@ export const Button: React.FC = ({ className={classNames('button', className, { 'button-secondary': secondary, 'button--block': block, + 'button--dangerous': dangerous, })} disabled={disabled} onClick={handleClick} diff --git a/app/javascript/mastodon/features/ui/components/block_modal.jsx b/app/javascript/mastodon/features/ui/components/block_modal.jsx index d6fc6c41546d2e..21a984f97f4e35 100644 --- a/app/javascript/mastodon/features/ui/components/block_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/block_modal.jsx @@ -99,7 +99,7 @@ export const BlockModal = ({ accountId, acct }) => { -
diff --git a/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx b/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx deleted file mode 100644 index 78d5cbb1301b2b..00000000000000 --- a/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import PropTypes from 'prop-types'; -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import { useDispatch } from 'react-redux'; - -import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; -import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; -import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; -import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; -import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { blockAccount } from 'mastodon/actions/accounts'; -import { blockDomain } from 'mastodon/actions/domain_blocks'; -import { closeModal } from 'mastodon/actions/modal'; -import { Button } from 'mastodon/components/button'; -import { Icon } from 'mastodon/components/icon'; - -export const DomainBlockModal = ({ domain, accountId, acct }) => { - const dispatch = useDispatch(); - - const handleClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockDomain(domain)); - }, [dispatch, domain]); - - const handleSecondaryClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockAccount(accountId)); - }, [dispatch, accountId]); - - const handleCancel = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - }, [dispatch]); - - return ( -
-
-
-
- -
- -
-

-
{domain}
-
-
- -
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
-
- -
-
- - -
- - - - -
-
-
- ); -}; - -DomainBlockModal.propTypes = { - domain: PropTypes.string.isRequired, - accountId: PropTypes.string.isRequired, - acct: PropTypes.string.isRequired, -}; - -export default DomainBlockModal; diff --git a/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx new file mode 100644 index 00000000000000..7e6715990e0df7 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx @@ -0,0 +1,204 @@ +import { useCallback, useEffect, useState } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; +import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; +import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import { blockAccount } from 'mastodon/actions/accounts'; +import { blockDomain } from 'mastodon/actions/domain_blocks'; +import { closeModal } from 'mastodon/actions/modal'; +import { apiRequest } from 'mastodon/api'; +import { Button } from 'mastodon/components/button'; +import { Icon } from 'mastodon/components/icon'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { ShortNumber } from 'mastodon/components/short_number'; +import { useAppDispatch } from 'mastodon/store'; + +interface DomainBlockPreviewResponse { + following_count: number; + followers_count: number; +} + +export const DomainBlockModal: React.FC<{ + domain: string; + accountId: string; + acct: string; +}> = ({ domain, accountId, acct }) => { + const dispatch = useAppDispatch(); + const [loading, setLoading] = useState(true); + const [preview, setPreview] = useState( + null, + ); + + const handleClick = useCallback(() => { + if (loading) { + return; // Prevent destructive action before the preview finishes loading or times out + } + + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockDomain(domain)); + }, [dispatch, loading, domain]); + + const handleSecondaryClick = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockAccount(accountId)); + }, [dispatch, accountId]); + + const handleCancel = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + }, [dispatch]); + + useEffect(() => { + setLoading(true); + + apiRequest('GET', 'v1/domain_blocks/preview', { + params: { domain }, + timeout: 5000, + }) + .then((data) => { + setPreview(data); + setLoading(false); + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, [setPreview, setLoading, domain]); + + return ( +
+
+
+
+ +
+ +
+

+ +

+
{domain}
+
+
+ +
+ {preview && preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+ + + + +
+
+
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default DomainBlockModal; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index d0563bb1b2c5cd..0dc4ccee804176 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", - "domain_block_modal.you_will_lose_followers": "All your followers from this server will be removed.", + "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 847c594ae50f43..1d710546ca2bc6 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -81,6 +81,18 @@ outline: $ui-button-icon-focus-outline; } + &--dangerous { + background-color: var(--error-background-color); + color: var(--on-error-color); + + &:active, + &:focus, + &:hover { + background-color: var(--error-active-background-color); + transition: none; + } + } + &--destructive { &:active, &:focus, @@ -6237,6 +6249,14 @@ a.status-card { display: flex; gap: 16px; align-items: center; + + strong { + font-weight: 700; + } + } + + &--deemphasized { + color: $secondary-text-color; } &__icon { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index c477e7a750cecc..2601113d3246bf 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -111,4 +111,7 @@ $font-monospace: 'mastodon-font-monospace' !default; --surface-variant-active-background-color: #{lighten($ui-base-color, 4%)}; --on-surface-color: #{transparentize($ui-base-color, 0.5)}; --avatar-border-radius: 8px; + --error-background-color: #{darken($error-red, 16%)}; + --error-active-background-color: #{darken($error-red, 12%)}; + --on-error-color: #fff; } diff --git a/app/presenters/domain_block_preview_presenter.rb b/app/presenters/domain_block_preview_presenter.rb new file mode 100644 index 00000000000000..601f76273ddcdf --- /dev/null +++ b/app/presenters/domain_block_preview_presenter.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class DomainBlockPreviewPresenter < ActiveModelSerializers::Model + attributes :followers_count, :following_count +end diff --git a/app/serializers/rest/domain_block_preview_serializer.rb b/app/serializers/rest/domain_block_preview_serializer.rb new file mode 100644 index 00000000000000..fea8c2f1eea1f7 --- /dev/null +++ b/app/serializers/rest/domain_block_preview_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class REST::DomainBlockPreviewSerializer < ActiveModel::Serializer + attributes :following_count, :followers_count +end diff --git a/config/routes/api.rb b/config/routes/api.rb index 93698381cbfb1a..46907a1ce2f3db 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -125,6 +125,10 @@ get :search, to: 'search#index' end + namespace :domain_blocks do + resource :preview, only: [:show] + end + resource :domain_blocks, only: [:show, :create, :destroy] resource :directory, only: [:show] From db332553c96152302223e6c8c5df61832fab7a08 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Wed, 25 Sep 2024 21:54:28 +0200 Subject: [PATCH 123/467] Rename "Data export" menu item (#32099) --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 625f53f2e57108..9c3bab6baa2142 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1693,7 +1693,7 @@ en: delete: Account deletion development: Development edit_profile: Edit profile - export: Data export + export: Export featured_tags: Featured hashtags import: Import import_and_export: Import and export From 886baa5e3543a983b82a9efd15b9e41f7f38227d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 09:40:59 +0200 Subject: [PATCH 124/467] Fix typo causing incorrect error being raised in blurhash processing failure (#32104) --- lib/paperclip/blurhash_transcoder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb index 150275bc9e078f..b4ff4a12a0e0f6 100644 --- a/lib/paperclip/blurhash_transcoder.rb +++ b/lib/paperclip/blurhash_transcoder.rb @@ -7,7 +7,7 @@ def make width, height, data = blurhash_params # Guard against segfaults if data has unexpected size - raise RangeError("Invalid image data size (expected #{width * height * 3}, got #{data.size})") if data.size != width * height * 3 # TODO: should probably be another exception type + raise RangeError, "Invalid image data size (expected #{width * height * 3}, got #{data.size})" if data.size != width * height * 3 # TODO: should probably be another exception type attachment.instance.blurhash = Blurhash.encode(width, height, data, **(options[:blurhash] || {})) From 278a075b22204b72e7acb43266388c81aedfc402 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:47:38 +0200 Subject: [PATCH 125/467] New Crowdin Translations (automated) (#32103) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/bg.json | 1 - app/javascript/mastodon/locales/ca.json | 2 +- app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 4 ++- app/javascript/mastodon/locales/da.json | 2 +- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/el.json | 1 - app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 2 +- app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/es.json | 2 +- app/javascript/mastodon/locales/et.json | 1 - app/javascript/mastodon/locales/eu.json | 1 - app/javascript/mastodon/locales/fa.json | 1 - app/javascript/mastodon/locales/fi.json | 1 - app/javascript/mastodon/locales/fil.json | 1 - app/javascript/mastodon/locales/fo.json | 2 +- app/javascript/mastodon/locales/fr-CA.json | 1 - app/javascript/mastodon/locales/fr.json | 1 - app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 1 - app/javascript/mastodon/locales/gd.json | 1 - app/javascript/mastodon/locales/gl.json | 4 +-- app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/hu.json | 1 - app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 1 - app/javascript/mastodon/locales/ie.json | 1 - app/javascript/mastodon/locales/is.json | 1 - app/javascript/mastodon/locales/it.json | 1 - app/javascript/mastodon/locales/ja.json | 1 - app/javascript/mastodon/locales/ko.json | 1 - app/javascript/mastodon/locales/la.json | 1 - app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 1 - app/javascript/mastodon/locales/lv.json | 1 - app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/nn.json | 1 - app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/pl.json | 2 +- app/javascript/mastodon/locales/pt-BR.json | 1 - app/javascript/mastodon/locales/pt-PT.json | 1 - app/javascript/mastodon/locales/ru.json | 1 - app/javascript/mastodon/locales/sk.json | 5 +++- app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 4 ++- app/javascript/mastodon/locales/sr-Latn.json | 1 - app/javascript/mastodon/locales/sr.json | 1 - app/javascript/mastodon/locales/sv.json | 1 - app/javascript/mastodon/locales/th.json | 1 - app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 2 +- app/javascript/mastodon/locales/uk.json | 1 - app/javascript/mastodon/locales/vi.json | 2 +- app/javascript/mastodon/locales/zh-CN.json | 1 - app/javascript/mastodon/locales/zh-HK.json | 1 - app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.sk.yml | 5 ++++ config/locales/an.yml | 1 - config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 2 +- config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 2 +- config/locales/de.yml | 1 - config/locales/doorkeeper.cy.yml | 1 + config/locales/doorkeeper.sq.yml | 1 + config/locales/el.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/eo.yml | 29 +++++++++++++++++++- config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/ga.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 2 +- config/locales/he.yml | 1 - config/locales/hr.yml | 1 - config/locales/hu.yml | 1 - config/locales/hy.yml | 1 - config/locales/ia.yml | 1 - config/locales/id.yml | 1 - config/locales/ie.yml | 1 - config/locales/io.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/ka.yml | 1 - config/locales/kab.yml | 1 - config/locales/kk.yml | 1 - config/locales/ko.yml | 2 +- config/locales/ku.yml | 1 - config/locales/lad.yml | 1 - config/locales/lt.yml | 1 - config/locales/lv.yml | 9 +++++- config/locales/ms.yml | 1 - config/locales/my.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/oc.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/sc.yml | 1 - config/locales/sco.yml | 1 - config/locales/si.yml | 1 - config/locales/simple_form.es-MX.yml | 8 +++--- config/locales/simple_form.lv.yml | 1 + config/locales/simple_form.sk.yml | 2 +- config/locales/sk.yml | 7 +++-- config/locales/sl.yml | 1 - config/locales/sq.yml | 3 +- config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 2 +- config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 2 +- config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - 138 files changed, 86 insertions(+), 140 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 17b288723bfdb1..18830708db615f 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "لا أحد من هذا الخادم يمكنه متابعتك.", "domain_block_modal.they_wont_know": "لن يَعرف أنه قد تم حظره.", "domain_block_modal.title": "أتريد حظر النطاق؟", - "domain_block_modal.you_will_lose_followers": "سيتم إزالة جميع متابعيك من هذا الخادم.", "domain_block_modal.you_wont_see_posts": "لن ترى منشورات أو إشعارات من المستخدمين على هذا الخادم.", "domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.", "domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 098c7a7e9d458a..797d8cc22e578d 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Ніхто з гэтага сервера не зможа падпісацца на вас.", "domain_block_modal.they_wont_know": "Карыстальнік не будзе ведаць пра блакіроўку.", "domain_block_modal.title": "Заблакіраваць дамен?", - "domain_block_modal.you_will_lose_followers": "Усе падпісчыкі з гэтага сервера будуць выдаленыя.", "domain_block_modal.you_wont_see_posts": "Вы не ўбачыце допісаў і апавяшчэнняў ад карыстальнікаў з гэтага сервера.", "domain_pill.activitypub_lets_connect": "Ён дазваляе вам узаемадзейнічаць не толькі з карыстальнікамі Mastodon, але і розных іншых сацыяльных платформ.", "domain_pill.activitypub_like_language": "ActivityPub — гэта мова, на якой Mastodon размаўляе з іншымі сацыяльнымі сеткамі.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index c8f8474e91b939..bf0b656f934b78 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Никого от този сървър не може да ви последва.", "domain_block_modal.they_wont_know": "Няма да узнаят, че са били блокирани.", "domain_block_modal.title": "Блокирате ли домейн?", - "domain_block_modal.you_will_lose_followers": "Всичките ви последователи от този сървър ще се премахнат.", "domain_block_modal.you_wont_see_posts": "Няма да виждате публикации или известия от потребителите на този сървър.", "domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.", "domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 710ac594f5eb63..2c6dcba46917a1 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ningú d'aquest servidor us pot seguir.", "domain_block_modal.they_wont_know": "No sabran que són blocats.", "domain_block_modal.title": "Bloquem el domini?", - "domain_block_modal.you_will_lose_followers": "S'eliminaran tots els vostres seguidors d'aquest servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perdreu {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidors}} i {followingCount, plural, one {{followingCountDisplay} persona} other {{followingCountDisplay} persones}} que seguiu.", "domain_block_modal.you_wont_see_posts": "No veureu ni les publicacions ni les notificacions dels usuaris d'aquest servidor.", "domain_pill.activitypub_lets_connect": "Us permet connectar i interactuar amb persones a Mastodon i també a d'altres apps socials.", "domain_pill.activitypub_like_language": "ActivityPub és el llenguatge que Mastodon parla amb altres xarxes socials.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index b70ff3ee2bfcc9..1f2804daa5f657 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.", "domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován*a.", "domain_block_modal.title": "Blokovat doménu?", - "domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.", "domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.", "domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i s dalšími sociálními aplikacemi.", "domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index ec93a5b11be109..f2d0708882fae5 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.", "domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.", "domain_block_modal.title": "Blocio parth?", - "domain_block_modal.you_will_lose_followers": "Bydd eich holl ddilynwyr o'r gweinydd hwn yn cael eu tynnu.", "domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.", "domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.", "domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.", @@ -434,6 +433,8 @@ "lightbox.close": "Cau", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", + "lightbox.zoom_in": "Chwyddo i faint gwirioneddol", + "lightbox.zoom_out": "Chwyddo i ffitio", "limited_account_hint.action": "Dangos y proffil beth bynnag", "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.", "link_preview.author": "Gan {name}", @@ -785,6 +786,7 @@ "status.edit": "Golygu", "status.edited": "Golygwyd ddiwethaf {date}", "status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}", + "status.embed": "Cael y cod mewnblannu", "status.favourite": "Ffafrio", "status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}", "status.filter": "Hidlo'r postiad hwn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 76752802b0e685..e7d2bcaf80c785 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ingen fra denne server kan følge dig.", "domain_block_modal.they_wont_know": "Vedkommende ser ikke den aktive blokering.", "domain_block_modal.title": "Blokér domæne?", - "domain_block_modal.you_will_lose_followers": "Alle følgerne fra denne server fjernes.", + "domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.", "domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.", "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 1931ce23f1458e..2f8c89961a7302 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Niemand von diesem Server wird dir folgen können.", "domain_block_modal.they_wont_know": "Es wird nicht erkennbar sein, dass diese Domain blockiert wurde.", "domain_block_modal.title": "Domain blockieren?", - "domain_block_modal.you_will_lose_followers": "Alle Follower von diesem Server werden entfernt.", + "domain_block_modal.you_will_lose_num_followers": "Du wirst {followersCount, plural, one {{followersCountDisplay} Follower} other {{followersCountDisplay} Follower}} verlieren und {followingCount, plural, one {{followingCountDisplay} Profil} other {{followingCountDisplay} Profilen}} entfolgen.", "domain_block_modal.you_wont_see_posts": "Du wirst keine Beiträge oder Benachrichtigungen von Profilen auf diesem Server sehen.", "domain_pill.activitypub_lets_connect": "Somit kannst du dich nicht nur auf Mastodon mit Leuten verbinden und mit ihnen interagieren, sondern über alle sozialen Apps hinweg.", "domain_pill.activitypub_like_language": "ActivityPub ist sozusagen die Sprache, die Mastodon mit anderen sozialen Netzwerken spricht.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 83f0227a0ada59..85f893c63ddc3e 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Κανείς από αυτόν τον διακομιστή δεν μπορεί να σε ακολουθήσει.", "domain_block_modal.they_wont_know": "Δεν θα ξέρουν ότι έχουν αποκλειστεί.", "domain_block_modal.title": "Αποκλεισμός τομέα;", - "domain_block_modal.you_will_lose_followers": "Οι ακόλουθοί σου από αυτόν τον διακομιστή θα αφαιρεθούν.", "domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.", "domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.", "domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index c0335dd6b2a637..ee38b775544b1a 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", - "domain_block_modal.you_will_lose_followers": "All your followers from this server will be removed.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index fbf74e9efaf6ab..8139e8c76dc87f 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Neniu el ĉi tiu servilo povas sekvi vin.", "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", "domain_block_modal.title": "Ĉu bloki la domajnon?", - "domain_block_modal.you_will_lose_followers": "Ĉiuj viaj sekvantoj de ĉi tiu servilo estos forigitaj.", + "domain_block_modal.you_will_lose_num_followers": "Vi perdos {followersCount, plural, one {{followersCountDisplay} sekvanton} other {{followersCountDisplay} sekvantojn}} kaj {followingCount, plural, one {{followingCountDisplay} homon, kiu vi sekvas} other {{followingCountDisplay} homojn, kiuj vi sekvas}}.", "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 8a37a33df2e787..26a37e76b3939e 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que fueron bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Se eliminarán todos tus seguidores de este servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con cuentas no solo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 52ebf0ae1800d6..dd3188c146c995 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Todos tus seguidores de este servidor serán eliminados.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás publicaciones ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 5915c333c4341b..aa282b4c5bf13a 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Se eliminarán todos tus seguidores de este servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 287ffb98523afe..69df3c4140ebc5 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Sellest serverist ei saa keegi sind jälgida.", "domain_block_modal.they_wont_know": "Nad ei tea, et nad on blokeeritud.", "domain_block_modal.title": "Blokeerida domeen?", - "domain_block_modal.you_will_lose_followers": "Kõik sinu sellest serverist pärit jälgijad eemaldatakse.", "domain_block_modal.you_wont_see_posts": "Sa ei näe selle serveri kasutajate postitusi ega teavitusi.", "domain_pill.activitypub_lets_connect": "See võimaldab sul ühenduda inimestega ja nendega suhelda mitte ainult Mastodonis, vaid ka teistes suhtlusrakendustes.", "domain_pill.activitypub_like_language": "ActivityPub on nagu keel, mida Mastodon räägib teiste suhtlusvõrgustikega.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index b3137bc21a3494..35b869486bb3d7 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Zerbitzari honetako inork ezin zaitu jarraitu.", "domain_block_modal.they_wont_know": "Ez dute jakingo blokeatuak izan direnik.", "domain_block_modal.title": "Domeinua blokeatu nahi duzu?", - "domain_block_modal.you_will_lose_followers": "Zerbitzari honetako jarraitzaile guztiak kenduko dira.", "domain_block_modal.you_wont_see_posts": "Ez dituzu zerbitzari honetako erabiltzaileen argitalpenik edota jakinarazpenik ikusiko.", "domain_pill.activitypub_lets_connect": "Mastodon-en ez ezik, beste sare sozialen aplikazioetako jendearekin konektatzea eta harremanetan jartzea uzten dizu.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon-ek beste sare sozialekin hitz egiteko erabiltzen duen hizkuntza bezalakoxea da.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index fbc65ec2079943..583fd4ec5a9d2b 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", - "domain_block_modal.you_will_lose_followers": "همهٔ پی‌گیرندگانتان از این کارساز برداشته خواهند شد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", "domain_pill.server": "کارساز", "domain_pill.their_handle": "شناسه‌اش:", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index d4adef40f2f734..4caec3159fb321 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", - "domain_block_modal.you_will_lose_followers": "Kaikki seuraajasi tältä palvelimelta poistetaan.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 31004560912a6e..952bc60882389c 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -134,7 +134,6 @@ "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", "domain_block_modal.block": "Harangan ang serbiro", "domain_block_modal.title": "Harangan ang domain?", - "domain_block_modal.you_will_lose_followers": "Mabubura ang iyong mga tagasunod mula sa serbirong ito.", "domain_pill.server": "Serbiro", "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", "embed.preview": "Ito ang magiging itsura:", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 9b87f5c8d917b6..3165c101533407 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Eingin frá hesum ambætara kann fylgja tær.", "domain_block_modal.they_wont_know": "Tey vita ikki, at tey eru bannað.", "domain_block_modal.title": "Banna økisnavni?", - "domain_block_modal.you_will_lose_followers": "Allir tínir fylgjarar á hesum ambætara hvørva.", + "domain_block_modal.you_will_lose_num_followers": "Tú missir {followersCount, plural, one {{followersCountDisplay} fylgjara} other {{followersCountDisplay} fylgjarar}} og {followingCount, plural, one {{followingCountDisplay} persón, sum tú fylgir} other {{followingCountDisplay} persónar, sum tú fylgir}}.", "domain_block_modal.you_wont_see_posts": "Tú sært ongar postar ella boð frá brúkarum á hesum ambætara.", "domain_pill.activitypub_lets_connect": "Tað letur teg fáa samband og samvirka við fólki ikki bara á Mastodon, men á øðrum sosialum appum eisini.", "domain_pill.activitypub_like_language": "ActivityPub er málið, sum Mastodon tosar við onnur sosial netverk.", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index ead016dec2a239..a92cd50c67a24b 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", - "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9375eccc6fb1a0..a2bf4d5363fb30 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", - "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index e7723c95337853..1d71ef36c69d77 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.", "domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.", "domain_block_modal.title": "Domein blokkearje?", - "domain_block_modal.you_will_lose_followers": "Al jo folgers fan dizze server wurde ûntfolge.", "domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.", "domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index e05adc27325eba..2161591dcd40c7 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ní féidir le duine ar bith ón bhfreastalaí seo tú a leanúint.", "domain_block_modal.they_wont_know": "Ní bheidh a fhios acu go bhfuil bac orthu.", "domain_block_modal.title": "Blocáil fearann?", - "domain_block_modal.you_will_lose_followers": "Bainfear do leantóirí go léir ón bhfreastalaí seo.", "domain_block_modal.you_wont_see_posts": "Ní fheicfidh tú postálacha nó fógraí ó úsáideoirí ar an bhfreastalaí seo.", "domain_pill.activitypub_lets_connect": "Ligeann sé duit ceangal agus idirghníomhú le daoine, ní hamháin ar Mastodon, ach thar aipeanna sóisialta éagsúla freisin.", "domain_pill.activitypub_like_language": "Tá GníomhaíochtPub cosúil leis an teanga a labhraíonn Mastodon le líonraí sóisialta eile.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 8f51d43ef8581b..ecbc11f3a2b7fa 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.", "domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.", "domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?", - "domain_block_modal.you_will_lose_followers": "Thèid a h-uile neach-leantainn agad a th’ air an fhrithealaiche seo a thoirt air falbh.", "domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.", "domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.", "domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index f2ea6ee9001531..aa3a78fce8f897 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ninguén deste servidor pode seguirte.", "domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.", "domain_block_modal.title": "Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Vanse eliminar todas as túas seguidoras deste servidor.", + "domain_block_modal.you_will_lose_num_followers": "Vas perder {followersCount, plural, one {{followersCountDisplay} seguidora} other {{followersCountDisplay} seguidoras}} e {followingCount, plural, one {{followingCountDisplay} persoa que segues} other {{followingCountDisplay} persoas que segues}}.", "domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.", "domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras sociais.", "domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.", @@ -527,7 +527,7 @@ "notification.poll": "Rematou a enquisa na que votaches", "notification.reblog": "{name} compartiu a túa publicación", "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} promoveron a túa publicación", - "notification.relationships_severance_event": "Perdeuse a conexión con {name}", + "notification.relationships_severance_event": "Relacións perdidas con {name}", "notification.relationships_severance_event.account_suspension": "A administración de {from} suspendeu a {target}, o que significa que xa non vas recibir actualizacións de esa conta ou interactuar con ela.", "notification.relationships_severance_event.domain_block": "A administración de {from} bloqueou a {target}, que inclúe a {followersCount} das túas seguidoras e a {followingCount, plural, one {# conta} other {# contas}} que sigues.", "notification.relationships_severance_event.learn_more": "Saber máis", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 6503d870e51221..4ce0d41620d5dc 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "משתמש משרת זה לא יכול לעקוב אחריך.", "domain_block_modal.they_wont_know": "הם לא ידעו כי נחסמו.", "domain_block_modal.title": "לחסום שרת?", - "domain_block_modal.you_will_lose_followers": "כל עוקביך משרת זה יוסרו.", "domain_block_modal.you_wont_see_posts": "לא תוכלו לראות הודעות ממשתמשים על שרת זה.", "domain_pill.activitypub_lets_connect": "מאפשר לך להתחבר ולהתרועע עם אחרים לא רק במסטודון, אלא גם ביישומים חברתיים שונים אחרים.", "domain_pill.activitypub_like_language": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index cb3517e3a38491..2e48cb626df40b 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.", "domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.", "domain_block_modal.title": "Letiltsuk a domaint?", - "domain_block_modal.you_will_lose_followers": "Az ezen a kiszolgálón lévő összes követődet törölni fogjuk.", "domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.", "domain_pill.activitypub_lets_connect": "Lehetővé teszi, hogy kapcsolatba lépj nem csak a Mastodonon, hanem a más közösségi alkalmazásokon lévő emberekkel is.", "domain_pill.activitypub_like_language": "Az ActivityPub olyan mint egy nyelv, amelyet a Mastodon a más közösségi hálózatokkal való kommunikációra használ.", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 93bee9ec798e73..35482297f03b07 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.", "domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.", "domain_block_modal.title": "Blocar dominio?", - "domain_block_modal.you_will_lose_followers": "Tote tu sequitores de iste servitor essera removite.", "domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.", "domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.", "domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index b6d01ec996386a..f5c71d4a36e3ca 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Tidak ada seorangpun dari server ini yang dapat mengikuti anda.", "domain_block_modal.they_wont_know": "Mereka tidak akan tahu bahwa mereka diblokir.", "domain_block_modal.title": "Blokir domain?", - "domain_block_modal.you_will_lose_followers": "Semua pengikut anda dari server ini akan dihapus.", "domain_block_modal.you_wont_see_posts": "Anda tidak akan melihat postingan atau notifikasi dari pengguna di server ini.", "domain_pill.activitypub_lets_connect": "Ini memungkinkan anda terhubung dan berinteraksi dengan orang-orang tidak hanya di Mastodon, tetapi juga di berbagai aplikasi sosial.", "domain_pill.activitypub_like_language": "ActivityPub seperti bahasa yang digunakan Mastodon dengan jejaring sosial lainnya.", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 1439b851d31a91..d91c49e83f9bcb 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -206,7 +206,6 @@ "domain_block_modal.they_cant_follow": "Nequi de ti-ci servitor posse sequer te.", "domain_block_modal.they_wont_know": "Ne va esser conscient pri li bloccada.", "domain_block_modal.title": "Bloccar dominia?", - "domain_block_modal.you_will_lose_followers": "Omni tui sequitores de ti-ci servitor va esser efaciat.", "domain_block_modal.you_wont_see_posts": "Tu ne va vider postas ni notificationes de usatores sur ti-ci servitor.", "domain_pill.activitypub_lets_connect": "It possibilisa tui conexiones e interactiones con persones ne solmen sur Mastodon, ma anc tra diferent social aplis.", "domain_pill.activitypub_like_language": "ActivityPub es li lingue usat de Mastodon por parlar con altri social retages.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 5f32b438dd7bc7..c78c5d78428216 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Enginn frá þessum netþjóni getur fylgst með þér.", "domain_block_modal.they_wont_know": "Viðkomandi mun ekki vita að hann hafi verið útilokaður.", "domain_block_modal.title": "Útiloka lén?", - "domain_block_modal.you_will_lose_followers": "Allir fylgjendur þínir af þessum netþjóni verða fjarlægðir.", "domain_block_modal.you_wont_see_posts": "Þú munt ekki sjá neinar færslur eða tilkynningar frá notendum á þessum netþjóni.", "domain_pill.activitypub_lets_connect": "Það gerir þér kleift að tengjast og eiga í samskiptum við fólk, ekki bara á Mastodon, heldur einnig á mörgum öðrum mismunandi samfélagsmiðlum.", "domain_pill.activitypub_like_language": "ActivityPub er eins og tungumál sem Mastodon notar til að tala við önnur samfélagsnet.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ec26d80be63fd6..fdb56f542e90fe 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.", "domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.", "domain_block_modal.title": "Bloccare il dominio?", - "domain_block_modal.you_will_lose_followers": "Tutti i tuoi seguaci da questo server verranno rimossi.", "domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.", "domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.", "domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index c3ddeed880e35e..f5e7cc9c0484c3 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "このサーバーのユーザーはあなたをフォローできなくなります。", "domain_block_modal.they_wont_know": "ドメインブロックは相手からはわかりません。", "domain_block_modal.title": "ドメインをブロックしますか?", - "domain_block_modal.you_will_lose_followers": "このサーバーのフォロワーはすべてフォロー解除されます。", "domain_block_modal.you_wont_see_posts": "このサーバーのユーザーからの投稿や通知が閲覧できなくなります。", "domain_pill.activitypub_lets_connect": "Mastodonからほかのソーシャルアプリのユーザーへ、そのまた別のアプリのユーザーへと、それぞれが互いにつながり関わり合うことをこのActivityPubの仕組みが実現しています。", "domain_pill.activitypub_like_language": "ActivityPubとは、Mastodonがほかのサーバーと会話をするときにしゃべる「言葉」のようなものです。", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index af1599572bff3a..87ea3cfabf8628 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "이 서버의 누구도 나를 팔로우 할 수 없습니다.", "domain_block_modal.they_wont_know": "내가 차단했다는 사실을 모를 것입니다.", "domain_block_modal.title": "도메인을 차단할까요?", - "domain_block_modal.you_will_lose_followers": "이 서버에 있는 팔로워들이 모두 제거될 것입니다.", "domain_block_modal.you_wont_see_posts": "이 서버 사용자의 게시물이나 알림을 보지 않게 됩니다.", "domain_pill.activitypub_lets_connect": "이것은 마스토돈 뿐만이 아니라 다른 소셜 앱들을 넘나들며 사람들을 연결하고 상호작용 할 수 있게 합니다.", "domain_pill.activitypub_like_language": "액티비티펍은 마스토돈이 다른 소셜 네트워크와 대화할 때 쓰는 언어 같은 것입니다.", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index d894cc01c68788..ac95b590e3b307 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -58,7 +58,6 @@ "disabled_account_banner.text": "Ratio tua {disabledAccount} debilitata est.", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", - "domain_block_modal.you_will_lose_followers": "Omnes sectatores tuī ex hoc servō removēbuntur.", "domain_block_modal.you_wont_see_posts": "Nuntios aut notificātiōnēs ab usoribus in hōc servō nōn vidēbis.", "domain_pill.activitypub_like_language": "ActivityPub est velut lingua quam Mastodon cum aliīs sociālibus rētibus loquitur.", "domain_pill.your_handle": "Tuus nominulus:", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 43da2ea16fddc6..c5026fa33b7738 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -215,7 +215,6 @@ "domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.", "domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.", "domain_block_modal.title": "Bloka el domeno?", - "domain_block_modal.you_will_lose_followers": "Se efasaran todos tus suivantes de este sirvidor.", "domain_block_modal.you_wont_see_posts": "No veras publikasyones ni avizos de utilizadores en este sirvidor.", "domain_pill.server": "Sirvidor", "domain_pill.their_handle": "Su alias:", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 632c33129a1b2f..7dcc3468026d2e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Niekas iš šio serverio negali tavęs sekti.", "domain_block_modal.they_wont_know": "Jie nežinos, kad buvo užblokuoti.", "domain_block_modal.title": "Blokuoti serverį?", - "domain_block_modal.you_will_lose_followers": "Visi tavo sekėjai iš šio serverio bus pašalinti.", "domain_block_modal.you_wont_see_posts": "Nematysi naudotojų įrašų ar pranešimų šiame serveryje.", "domain_pill.activitypub_lets_connect": "Tai leidžia tau prisijungti ir bendrauti su žmonėmis ne tik „Mastodon“ platformoje, bet ir įvairiose socialinėse programėlėse.", "domain_pill.activitypub_like_language": "„ActivityPub“ – tai tarsi kalba, kuria „Mastodon“ kalba su kitais socialiniais tinklais.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 43fa8369f4232e..1e973ffd3ea5bf 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -215,7 +215,6 @@ "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", "domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.", "domain_block_modal.title": "Bloķēt domēnu?", - "domain_block_modal.you_will_lose_followers": "Tiks noņemti visi tavi sekotāji no šī servera.", "domain_pill.server": "Serveris", "domain_pill.username": "Lietotājvārds", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index f5f4a0a137896f..f8e98e865bf578 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Niemand op deze server kan jou volgen.", "domain_block_modal.they_wont_know": "Ze krijgen niet te weten dat ze worden geblokkeerd.", "domain_block_modal.title": "Server blokkeren?", - "domain_block_modal.you_will_lose_followers": "Al jouw volgers van deze server worden ontvolgd.", + "domain_block_modal.you_will_lose_num_followers": "Je verliest {followersCount, plural, one {{followersCountDisplay} volger} other {{followersCountDisplay} volgers}} en {followingCount, plural, one {{followingCountDisplay} persoon die jij volgt} other {{followingCountDisplay} personen die jij volgt}}.", "domain_block_modal.you_wont_see_posts": "Je ziet geen berichten of meldingen meer van gebruikers op deze server.", "domain_pill.activitypub_lets_connect": "Het zorgt ervoor dat je niet alleen maar kunt verbinden en communiceren met mensen op Mastodon, maar ook met andere sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal die Mastodon met andere sociale netwerken spreekt.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 702154927d903e..9524dfd5585e45 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ingen på denne tenaren kan fylgja deg.", "domain_block_modal.they_wont_know": "Dei veit ikkje at dei er blokkerte.", "domain_block_modal.title": "Blokker domenet?", - "domain_block_modal.you_will_lose_followers": "Alle fylgjarane dine frå denne tenaren blir fjerna.", "domain_block_modal.you_wont_see_posts": "Du vil ikkje sjå innlegg eller varslingar frå brukarar på denne tenaren.", "domain_pill.activitypub_lets_connect": "Den lar deg kople til og samhandle med folk ikkje berre på Mastodon, men òg på tvers av forskjellige sosiale appar.", "domain_pill.activitypub_like_language": "ActivityPub er som språket Mastodon snakkar med andre sosiale nettverk.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1d0294cd7c02a0..8cd3387eaf968c 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ingen fra denne serveren kan følge deg.", "domain_block_modal.they_wont_know": "De kommer ikke til å få vite at du har valgt å blokkere dem.", "domain_block_modal.title": "Blokker domenet?", - "domain_block_modal.you_will_lose_followers": "Alle dine følgere fra denne serveren vil bli fjernet.", "domain_block_modal.you_wont_see_posts": "Du vil ikke se innlegg eller få varsler fra brukere på denne serveren.", "domain_pill.activitypub_lets_connect": "Den lar deg koble til og samhandle med folk ikke bare på Mastodon, men også på tvers av forskjellige sosiale apper.", "domain_pill.activitypub_like_language": "ActivityPub er liksom språket Mastodon snakker med andre sosiale nettverk.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index a4ee25250a97bc..452894079701ba 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może Cię obserwować.", "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", "domain_block_modal.title": "Zablokować domenę?", - "domain_block_modal.you_will_lose_followers": "Wszyscy twoi obserwujący z tego serwera zostaną usunięci.", + "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 1eca63ac15c8c6..402c0b38b5a750 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Dominio do bloco", - "domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.", "domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.", "domain_pill.activitypub_lets_connect": "Ele permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.", "domain_pill.activitypub_like_language": "ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 80f5f9f13899cd..6be7e03b393d3a 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode segui-lo.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Bloquear domínio?", - "domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.", "domain_block_modal.you_wont_see_posts": "Não verá publicações ou notificações de utilizadores neste servidor.", "domain_pill.activitypub_lets_connect": "Permite-lhe conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.", "domain_pill.activitypub_like_language": "O ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 13661149299a33..9bd2ed5b4e7be7 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Никто из этого сервера не может подписываться на вас.", "domain_block_modal.they_wont_know": "Он не будет знать, что его заблокировали.", "domain_block_modal.title": "Заблокировать домен?", - "domain_block_modal.you_will_lose_followers": "Все ваши подписчики с этого сервера будут удалены.", "domain_block_modal.you_wont_see_posts": "Вы не будете видеть записи или уведомления от пользователей на этом сервере.", "domain_pill.activitypub_lets_connect": "Это позволяет вам общаться и взаимодействовать с людьми не только на Mastodon, но и в различных социальных приложениях.", "domain_pill.activitypub_like_language": "ActivityPub как язык Mastodon говорит с другими социальными сетями.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index c989a7314c4555..ddf341584c0d85 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -34,7 +34,9 @@ "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", "account.followers.empty": "Tento účet ešte nikto nesleduje.", + "account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}", "account.following": "Sledovaný účet", + "account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}", "account.follows.empty": "Tento účet ešte nikoho nesleduje.", "account.go_to_profile": "Prejsť na profil", "account.hide_reblogs": "Skryť zdieľania od @{name}", @@ -60,6 +62,7 @@ "account.requested_follow": "{name} vás chce sledovať", "account.share": "Zdieľaj profil @{name}", "account.show_reblogs": "Zobrazovať zdieľania od @{name}", + "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "account.unblock": "Odblokovať @{name}", "account.unblock_domain": "Odblokovať doménu {domain}", "account.unblock_short": "Odblokovať", @@ -215,7 +218,6 @@ "domain_block_modal.they_cant_follow": "Nikto z tohoto servera ťa nemôže nasledovať.", "domain_block_modal.they_wont_know": "Nebude vedieť, že bol/a zablokovaný/á.", "domain_block_modal.title": "Blokovať doménu?", - "domain_block_modal.you_will_lose_followers": "Všetci tvoji nasledovatelia z tohto servera budú odstránení.", "domain_block_modal.you_wont_see_posts": "Neuvidíš príspevky, ani oboznámenia od užívateľov na tomto serveri.", "domain_pill.activitypub_like_language": "ActivityPub je ako jazyk, ktorým Mastodon hovorí s ostatnými sociálnymi sieťami.", "domain_pill.server": "Server", @@ -418,6 +420,7 @@ "lists.subheading": "Vaše zoznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}", "loading_indicator.label": "Načítavanie…", + "media_gallery.hide": "Skryť", "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný, pretože ste sa presunuli na {movedToAccount}.", "mute_modal.hide_from_notifications": "Ukryť z upozornení", "mute_modal.hide_options": "Skryť možnosti", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 43042ca998d4c6..71bee6822b3c64 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -217,7 +217,6 @@ "domain_block_modal.they_cant_follow": "Nihče s tega strežnika vam ne more slediti.", "domain_block_modal.they_wont_know": "Ne bodo vedeli, da so blokirani.", "domain_block_modal.title": "Blokiraj domeno?", - "domain_block_modal.you_will_lose_followers": "Vsi vaši sledilci s tega strežnika bodo odstranjeni.", "domain_block_modal.you_wont_see_posts": "Objav ali obvestil uporabnikov s tega strežnika ne boste videli.", "domain_pill.activitypub_lets_connect": "Omogoča vam povezovanje in interakcijo z ljudmi, ki niso samo na Mastodonu, ampak tudi na drugih družabnih platformah.", "domain_pill.activitypub_like_language": "Protokol ActivityPub je kot jezik, s katerim se Mastodon pogovarja z drugimi družabnimi omrežji.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index c5e42aae77939c..2195e6bf9abe12 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "S’mund t’ju ndjekë askush nga ky shërbyes.", "domain_block_modal.they_wont_know": "S’do ta dinë se janë bllokuar.", "domain_block_modal.title": "Të bllokohet përkatësia?", - "domain_block_modal.you_will_lose_followers": "Krejt ndjekësit tuaj nga ky shërbyes do të hiqen.", + "domain_block_modal.you_will_lose_num_followers": "Do të humbni {followersCount, plural, one {{followersCountDisplay} ndjekës} other {{followersCountDisplay} ndjekës}} dhe {followingCount, plural, one {{followingCountDisplay} person që ndiqni} other {{followingCountDisplay} vetë që ndiqni}}.", "domain_block_modal.you_wont_see_posts": "S’do të shihni postime, apo njoftime nga përdorues në këtë shërbyes.", "domain_pill.activitypub_lets_connect": "Ju lejon të lidheni dhe ndërveproni me persona jo thjesht në Mastodon, por edhe nëpër aplikacione të ndryshme shoqërore.", "domain_pill.activitypub_like_language": "ActivityPub është si gjuha me të cilën Mastodon-i komunikon me rrjete të tjerë shoqërorë.", @@ -434,6 +434,8 @@ "lightbox.close": "Mbylle", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", + "lightbox.zoom_in": "Ktheje në madhësinë origjinale", + "lightbox.zoom_out": "Zmadhoje të përshtatet", "limited_account_hint.action": "Shfaqe profilin sido qoftë", "limited_account_hint.title": "Ky profil është fshehur nga moderatorët e {domain}.", "link_preview.author": "Nga {name}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index e701da60789bc9..1053d581c323f5 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -209,7 +209,6 @@ "domain_block_modal.they_cant_follow": "Niko sa ovog servera ne može da vas prati.", "domain_block_modal.they_wont_know": "Neće znati da su blokirani.", "domain_block_modal.title": "Blokirati domen?", - "domain_block_modal.you_will_lose_followers": "Svi vaši pratioci sa ovog servera će biti uklonjeni.", "domain_block_modal.you_wont_see_posts": "Nećete videti objave ili obaveštenja korisnika na ovom serveru.", "domain_pill.activitypub_lets_connect": "Omogućuje vam da se povežete i komunicirate sa ljudima ne samo na Mastodon-u, već i u različitim društvenim aplikacijama.", "domain_pill.activitypub_like_language": "ActivityPub je kao jezik kojim Mastodon govori sa drugim društvenim mrežama.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index fd13c4ee5c1a5c..9529c41fe301df 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -209,7 +209,6 @@ "domain_block_modal.they_cant_follow": "Нико са овог сервера не може да вас прати.", "domain_block_modal.they_wont_know": "Неће знати да су блокирани.", "domain_block_modal.title": "Блокирати домен?", - "domain_block_modal.you_will_lose_followers": "Сви ваши пратиоци са овог сервера ће бити уклоњени.", "domain_block_modal.you_wont_see_posts": "Нећете видети објаве или обавештења корисника на овом серверу.", "domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.", "domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 6bb0b1424abd0d..b1e5a95edf55a2 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.", "domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.", "domain_block_modal.title": "Blockera domän?", - "domain_block_modal.you_will_lose_followers": "Alla dina följare från denna server kommer att tas bort.", "domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.", "domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.", "domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d446cacb92dc86..68b64ca54863c3 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "ไม่มีใครจากเซิร์ฟเวอร์นี้สามารถติดตามคุณ", "domain_block_modal.they_wont_know": "เขาจะไม่ทราบว่ามีการปิดกั้นเขา", "domain_block_modal.title": "ปิดกั้นโดเมน?", - "domain_block_modal.you_will_lose_followers": "จะเอาผู้ติดตามทั้งหมดของคุณจากเซิร์ฟเวอร์นี้ออก", "domain_block_modal.you_wont_see_posts": "คุณจะไม่เห็นโพสต์หรือการแจ้งเตือนจากผู้ใช้ในเซิร์ฟเวอร์นี้", "domain_pill.activitypub_lets_connect": "โปรโตคอลช่วยให้คุณเชื่อมต่อและโต้ตอบกับผู้คนไม่ใช่แค่ใน Mastodon แต่ทั่วทั้งแอปสังคมต่าง ๆ เช่นกัน", "domain_pill.activitypub_like_language": "ActivityPub เป็นเหมือนภาษาที่ Mastodon พูดกับเครือข่ายสังคมอื่น ๆ", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 9f203881823e93..ba5395b7bd3d0f 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -163,7 +163,6 @@ "dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.", "dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.", "domain_block_modal.block": "o weka e ma", - "domain_block_modal.you_will_lose_followers": "ma ni la jan alasa ale sina li weka", "domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni", "domain_pill.server": "ma", "domain_pill.username": "nimi jan", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index bdb2de0ef11378..509dbc7a217781 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Bu sunucudan hiç kimse sizi takip edemez.", "domain_block_modal.they_wont_know": "Engellendiklerini bilmeyecekler.", "domain_block_modal.title": "Alan adını engelle?", - "domain_block_modal.you_will_lose_followers": "Bu sunucudaki tüm takipçileriniz kaldırılacaktır.", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, one {{followersCountDisplay} takipçi} other {{followersCountDisplay} takipçi}} ve {followingCount, plural, one {{followingCountDisplay} takip ettiğiniz kişi} other {{followingCountDisplay} takip ettiğiniz kişi}} kaybedeceksiniz.", "domain_block_modal.you_wont_see_posts": "Bu sunucudaki kullanıcılardan gelen gönderileri veya bildirimleri göremezsiniz.", "domain_pill.activitypub_lets_connect": "Sadece Mastodon üzerindeki değil, diğer sosyal uygulamalardaki kişilerle de bağlantı kurmanıza ve etkileşmenize olanak sağlar.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon'un diğer sosyal ağlarla konuşmak için kullandığı dil gibidir.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 3bf8d00248b362..1b5dbb4c9bffeb 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.", "domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.", "domain_block_modal.title": "Заблокувати домен?", - "domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.", "domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.", "domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних застосунках.", "domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Mastodon розмовляє з іншими соціальними мережами.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 04b73e78fa4a09..9c5c9ae1e4fc51 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Không ai trên máy chủ này có thể theo dõi bạn.", "domain_block_modal.they_wont_know": "Họ sẽ không biết đã bị bạn chặn.", "domain_block_modal.title": "Chặn máy chủ?", - "domain_block_modal.you_will_lose_followers": "Những người theo dõi bạn ở máy chủ này sẽ bị xóa.", + "domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.", "domain_block_modal.you_wont_see_posts": "Bạn sẽ không thấy tút hoặc thông báo từ thành viên máy chủ này.", "domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.", "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index a7cd0899480b1f..1f539727f96ac0 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", "domain_block_modal.title": "屏蔽该域名?", - "domain_block_modal.you_will_lose_followers": "该服务器上你的所有关注者都会被删除。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 22f51a84134548..a081e5589706ff 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -208,7 +208,6 @@ "domain_block_modal.they_cant_follow": "此伺服器的人無法追蹤你。", "domain_block_modal.they_wont_know": "對方不會知道自己被封鎖。", "domain_block_modal.title": "封鎖網域?", - "domain_block_modal.you_will_lose_followers": "你在此伺服器的所有追蹤者都將會被移除。", "domain_block_modal.you_wont_see_posts": "你將看不到此伺服器使用者的帖文和通知。", "domain_pill.activitypub_lets_connect": "這讓你不僅能在 Mastodon 上,也能在其他社交應用程式中與人交流互動。", "domain_pill.activitypub_like_language": "ActivityPub 就像 Mastodon 與其他社交網絡溝通所用的語言。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 7f2caeaf4b30c1..c585f98b6eb40d 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "來自此伺服器之使用者將無法跟隨您。", "domain_block_modal.they_wont_know": "他們不會知道他們已被封鎖。", "domain_block_modal.title": "是否封鎖該網域?", - "domain_block_modal.you_will_lose_followers": "所有您來自此伺服器之跟隨者將被移除。", + "domain_block_modal.you_will_lose_num_followers": "您將會失去 {followersCount, plural, other {{followersCountDisplay} 個跟隨者}} 與 {followingCount, plural, other {{followingCountDisplay} 個您跟隨之帳號}}.", "domain_block_modal.you_wont_see_posts": "您不會見到來自此伺服器使用者之任何嘟文或推播通知。", "domain_pill.activitypub_lets_connect": "它使您能於 Mastodon 及其他不同的社群應用程式與人連結及互動。", "domain_pill.activitypub_like_language": "ActivityPub 像是 Mastodon 與其他社群網路溝通時所用的語言。", diff --git a/config/locales/activerecord.sk.yml b/config/locales/activerecord.sk.yml index 809d00647146db..68a9e447b9099c 100644 --- a/config/locales/activerecord.sk.yml +++ b/config/locales/activerecord.sk.yml @@ -15,6 +15,11 @@ sk: user/invite_request: text: Dôvod errors: + attributes: + domain: + invalid: nie je platný tvar domény + messages: + invalid_domain_on_line: "%{value} nie je platný tvar domény" models: account: attributes: diff --git a/config/locales/an.yml b/config/locales/an.yml index 2f181e0757da43..2db042f1b1ad30 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1375,7 +1375,6 @@ an: delete: Borrar cuenta development: Desembolique edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacaus import: Importar import_and_export: Importar y exportar diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 81705acba045d6..829855776d9afa 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1719,7 +1719,6 @@ ar: delete: حذف الحسابات development: التطوير edit_profile: تعديل الصفحة التعريفية - export: تصدير البيانات featured_tags: الوسوم الشائعة import: استيراد import_and_export: استيراد وتصدير diff --git a/config/locales/ast.yml b/config/locales/ast.yml index a7d4a9917eebdb..72c5d9d75254ce 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -774,7 +774,6 @@ ast: back: Volver a Mastodon development: Desendolcu edit_profile: Edición del perfil - export: Esportación de datos featured_tags: Etiquetes destacaes import: Importación import_and_export: Importación y esportación diff --git a/config/locales/be.yml b/config/locales/be.yml index d45f443b75f06c..d1d3e17679f2d6 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1722,7 +1722,6 @@ be: delete: Выдаленне ўліковага запісу development: Распрацоўка edit_profile: Рэдагаваць профіль - export: Экспарт даных featured_tags: Выбраныя хэштэгі import: Імпарт import_and_export: Імпарт і экспарт diff --git a/config/locales/bg.yml b/config/locales/bg.yml index e2c246827afb4b..00b3a41167cec1 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1617,7 +1617,6 @@ bg: delete: Изтриване на акаунта development: Разработка edit_profile: Редактирай профила си - export: Експортиране на данни featured_tags: Актуални хаштагове import: Импортиране import_and_export: Импортиране и експортиране diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 33a1d4e88f7bfe..e0a68f7b46834e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1686,7 +1686,7 @@ ca: delete: Eliminació del compte development: Desenvolupament edit_profile: Edita el perfil - export: Exportació de dades + export: Exporta featured_tags: Etiquetes destacades import: Importació import_and_export: Importació i exportació diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index bc668d2ce4c7e4..88dadff0146769 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -907,7 +907,6 @@ ckb: delete: سڕینەوەی هەژمارە development: گەشەپێدان edit_profile: دەستکاری پرۆفایل - export: ناردن زانیاری featured_tags: هاشتاگی تایبەت import: هاوردن import_and_export: هاوردەکردن و ناردن diff --git a/config/locales/co.yml b/config/locales/co.yml index 58ddd7d01b593f..dad3e08ffd23d0 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -891,7 +891,6 @@ co: delete: Suppressione di u contu development: Sviluppu edit_profile: Mudificà u prufile - export: Spurtazione d’infurmazione featured_tags: Hashtag in vista import: Impurtazione import_and_export: Impurtazione è spurtazione diff --git a/config/locales/cs.yml b/config/locales/cs.yml index b7fc8ab1b0bc26..91fa517944d17c 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1666,7 +1666,6 @@ cs: delete: Smazání účtu development: Vývoj edit_profile: Upravit profil - export: Export dat featured_tags: Zvýrazněné hashtagy import: Import import_and_export: Import a export diff --git a/config/locales/cy.yml b/config/locales/cy.yml index c2c193d9434292..1ae6aa08fff93a 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1796,7 +1796,6 @@ cy: delete: Dileu cyfrif development: Datblygu edit_profile: Golygu proffil - export: Allforio data featured_tags: Prif hashnodau import: Mewnforio import_and_export: Mewnforio ac allforio diff --git a/config/locales/da.yml b/config/locales/da.yml index a177b97de76fd2..96b27c91b3a733 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1692,7 +1692,7 @@ da: delete: Kontosletning development: Udvikling edit_profile: Redigér profil - export: Dataeksport + export: Eksport featured_tags: Udvalgte hashtags import: Import import_and_export: Import og eksport diff --git a/config/locales/de.yml b/config/locales/de.yml index 85e24c230ec339..5af77c431d6f8a 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1692,7 +1692,6 @@ de: delete: Kontolöschung development: Entwicklung edit_profile: Profil bearbeiten - export: Exportieren featured_tags: Vorgestellte Hashtags import: Importieren import_and_export: Importieren und exportieren diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index 80cc022a0b0300..32f5055b6c0665 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -60,6 +60,7 @@ cy: error: title: Mae rhywbeth wedi mynd o'i le new: + prompt_html: Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Dim ond os ydych chi'n adnabod ac yn ymddiried yn y ffynhonnell hon y dylech gymeradwyo'r cais hwn. review_permissions: Adolygu caniatâd title: Angen awdurdodi show: diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 1fd9000aa2dc85..f98cf88c630c87 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -60,6 +60,7 @@ sq: error: title: Ndodhi një gabim new: + prompt_html: "%{client_name} do të donte leje të hyjë në llogarinë tuaj. Miratojeni këtë kërkesë vetëm nëse e njihni dhe e besoni këtë burim." review_permissions: Shqyrtoni leje title: Lypset autorizim show: diff --git a/config/locales/el.yml b/config/locales/el.yml index c119beec17fd7f..610ae4026512a7 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1604,7 +1604,6 @@ el: delete: Διαγραφή λογαριασμού development: Ανάπτυξη edit_profile: Επεξεργασία προφίλ - export: Εξαγωγή δεδομένων featured_tags: Παρεχόμενες ετικέτες import: Εισαγωγή import_and_export: Εισαγωγή και εξαγωγή diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 577978ce88d54f..21afcd990fc2e7 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1692,7 +1692,6 @@ en-GB: delete: Account deletion development: Development edit_profile: Edit profile - export: Data export featured_tags: Featured hashtags import: Import import_and_export: Import and export diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 2d03ce08a7f27c..7d0f66a0c06628 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -275,6 +275,7 @@ eo: filter_by_action: Filtri per ago filter_by_user: Filtri per uzanto title: Ĵurnalo de revizo + unavailable_instance: "(domajna nomo nedisponebla)" announcements: destroyed_msg: Anonco sukcese forigita! edit: @@ -412,6 +413,7 @@ eo: attempts_over_week: one: "%{count} provo ekde lasta semajno" other: "%{count} registroprovoj ekde lasta semajno" + created_msg: Sukcese blokita retpoŝta domajno delete: Forigi dns: types: @@ -420,6 +422,7 @@ eo: new: create: Aldoni domajnon resolve: Solvi domajnon + title: Bloki novan retpoŝtan domajnon not_permitted: Ne permesita resolved_through_html: Solvis tra %{domain} export_domain_allows: @@ -572,6 +575,7 @@ eo: silence_description_html: La konto estos videbla al nur personoj kiu jam sekvis ĝin au permane serĉo ĝin, ege limigante ĝian atingon. Malfermi ciujn raportojn kontra ĉi tiun konton. suspend_description_html: La konto kaj ciuj ĝiaj enhavoj estos neatingebla kaj poŝte forigitas, kaj interagi per ĝi estos neebla. Malfermi ciujn raportojn kontra ĉi tiu konto. actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon. + actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi add_to_report: Aldoni pli al raporto are_you_sure: Ĉu vi certas? assign_to_self: Asigni al mi @@ -608,6 +612,7 @@ eo: report: 'Signalo #%{id}' reported_account: Signalita konto reported_by: Signalita de + reported_with_application: Raportita per aplikaĵo resolved: Solvitaj resolved_msg: Signalo sukcese solvita! skip_to_actions: Salti al agoj @@ -804,6 +809,8 @@ eo: message_html: Estas pritraktataj datumbazaj migradoj. Bonvolu ekzekuti ilin por certigi, ke la apliko kondutas kiel atendite elasticsearch_preset: action: Legi dokumentaron + elasticsearch_preset_single_node: + action: Vidi dokumentadon elasticsearch_running_check: message_html: Ne eblas konekti Elasticsearch. Bonvolu kontroli ke ĝi funkcias, aǔ malŝaltu plentekstan serĉon elasticsearch_version_check: @@ -814,6 +821,8 @@ eo: message_html: Vi ne difinis iujn servilajn regulojn. sidekiq_process_check: message_html: Neniu Sidekiq-procezo por la %{value} vico + software_version_critical_check: + action: Vidi disponeblajn ĝisdatigojn upload_check_privacy_error: action: Klaku ĉi tie por pliaj informoj message_html: "Via retservilo estas misagordita. La privateco de viaj uzantoj estas en risko." @@ -975,7 +984,9 @@ eo: guide_link_text: Ĉiu povas kontribui. sensitive_content: Tikla enhavo application_mailer: + notification_preferences: Ŝanĝi retpoŝtajn preferojn salutation: "%{name}," + settings: 'Ŝanĝi retpoŝtajn preferojn: %{link}' unsubscribe: Malabonu view: 'Vidi:' view_profile: Vidi profilon @@ -994,8 +1005,11 @@ eo: help_html: Se vi havas problemojn solvi la CAPTCHA, vi povas kontakti nin per %{email} kaj ni povas helpi vin. title: Sekureckontrolo confirmations: + clicking_this_link: alklakante ĉi tiun ligilon login_link: ensaluti + registration_complete: Via registriĝo sur %{domain} nun finiĝis! welcome_title: Bonvenon, %{name}! + wrong_email_hint: Se tiu retadreso ne estas ĝusta, vi povas ŝanĝi ĝin en kontagordoj. delete_account: Forigi konton delete_account_html: Se vi deziras forigi vian konton, vi povas fari tion ĉi tie. Vi bezonos konfirmi vian peton. description: @@ -1016,6 +1030,7 @@ eo: or_log_in_with: Aŭ saluti per privacy_policy_agreement_html: Mi legis kaj konsentis pri privatpolitiko progress: + confirm: Konfirmi retadreson details: Viaj detaloj review: Niaj recenzoj rules: Akcepti regulojn @@ -1053,8 +1068,10 @@ eo: too_fast: Formularo sendita tro rapide, klopodu denove. use_security_key: Uzi sekurecan ŝlosilon author_attribution: + example_title: Ekzempla teksto more_from_html: Pli de %{name} s_blog: Blogo de %{name} + title: Atribuo de aŭtoro challenge: confirm: Daŭrigi hint_html: "Konsileto: Ni ne demandos pri via pasvorto ĝis 1 horo." @@ -1250,8 +1267,10 @@ eo: overwrite: Anstataŭigi overwrite_long: Anstataŭigi la nunajn registrojn per la novaj preface: Vi povas importi datumojn, kiujn vi eksportis el alia servilo, kiel liston de homoj, kiujn vi sekvas aŭ blokas. + recent_imports: Lastatempaj importoj states: finished: Finita + in_progress: Farata unconfirmed: Nekonfirmita status: Stato success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite @@ -1541,7 +1560,6 @@ eo: delete: Konta forigo development: Evoluigado edit_profile: Redakti profilon - export: Eksporti datumojn featured_tags: Elstarigitaj kradvortoj import: Enporti import_and_export: Importi kaj eksporti @@ -1553,6 +1571,9 @@ eo: strikes: Kontroladmonoj two_factor_authentication: Dufaktora aŭtentigo webauthn_authentication: Sekurecaj ŝlosiloj + severed_relationships: + lost_followers: Perditaj sekvantoj + type: Evento statuses: attached: audio: @@ -1719,6 +1740,12 @@ eo: explanation: Jen kelkaj konsiloj por helpi vin komenci feature_action: Lerni pli follow_action: Sekvi + hashtags_title: Popularaj kradvortoj + hashtags_view_more: Vidi pli da popularaj kradvortoj + post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj. + post_title: Faru vian unuan afiŝon + share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon. + sign_in_action: Ensaluti subject: Bonvenon en Mastodon title: Bonvenon, %{name}! users: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 9f1dc46c9df8ce..01685f99fe30be 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1692,7 +1692,6 @@ es-AR: delete: Eliminación de la cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportación de datos featured_tags: Etiquetas destacadas import: Importar import_and_export: Importación y exportación diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 0325757dca4390..a8ff5c6938be0c 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1692,7 +1692,6 @@ es-MX: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/es.yml b/config/locales/es.yml index 2815ada77957ce..ab7fd3bc54de22 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1692,7 +1692,6 @@ es: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/et.yml b/config/locales/et.yml index 60f98a471e37a2..b71e3ccb6878a9 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1692,7 +1692,6 @@ et: delete: Konto kustutamine development: Arendus edit_profile: Muuda profiili - export: Andmete eksportimine featured_tags: Esile toodud sildid import: Impordi import_and_export: Import / eksport diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7c7f995a7143b1..e80207d46fc945 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1592,7 +1592,6 @@ eu: delete: Kontuaren ezabaketa development: Garapena edit_profile: Editatu profila - export: Datuen esportazioa featured_tags: Nabarmendutako traolak import: Inportazioa import_and_export: Inportatu eta esportatu diff --git a/config/locales/fa.yml b/config/locales/fa.yml index c2c22af4c46a51..e7d932de113a84 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1438,7 +1438,6 @@ fa: delete: پاک‌کردن حساب development: فرابری edit_profile: ویرایش نمایه - export: برون‌سپاری داده‌ها featured_tags: برچسب‌های برگزیده import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5df82bff9fa440..9bd0f12241f6a8 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1692,7 +1692,6 @@ fi: delete: Tilin poisto development: Kehitys edit_profile: Muokkaa profiilia - export: Vie tietoja featured_tags: Suositellut aihetunnisteet import: Tuo tietoja import_and_export: Tuonti ja vienti diff --git a/config/locales/fo.yml b/config/locales/fo.yml index ce21aa3be7c44f..50b4802bc7d78a 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1692,7 +1692,6 @@ fo: delete: Striking av kontu development: Menning edit_profile: Rætta vanga - export: Útflyt dátur featured_tags: Varpaði frámerki import: Innflyt import_and_export: Innflyt og útflyt diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 3f9252ffabff7b..6ab0ee66606d8f 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1692,7 +1692,6 @@ fr-CA: delete: Suppression du compte development: Développement edit_profile: Modifier le profil - export: Export de données featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/fr.yml b/config/locales/fr.yml index cb76ae2243c33d..6e13466bfe0ee7 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1692,7 +1692,6 @@ fr: delete: Suppression du compte development: Développement edit_profile: Modifier le profil - export: Export de données featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 8b854494d4b555..0379af34e9afc9 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1682,7 +1682,6 @@ fy: delete: Account fuortsmite development: Untwikkelers edit_profile: Profyl bewurkje - export: Eksportearje featured_tags: Utljochte hashtags import: Ymportearje import_and_export: Ymportearje en eksportearje diff --git a/config/locales/ga.yml b/config/locales/ga.yml index a6369354cd8a56..95136239328434 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1770,7 +1770,6 @@ ga: delete: Scriosadh cuntais development: Forbairt edit_profile: Cuir an phróifíl in eagar - export: Easpórtáil sonraí featured_tags: Haischlib faoi thrácht import: Iompórtáil import_and_export: Iompórtáil agus easpórtáil diff --git a/config/locales/gd.yml b/config/locales/gd.yml index b5cbc4a73ed372..90d03c74e15fdb 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1744,7 +1744,6 @@ gd: delete: Sguabadh às cunntais development: Leasachadh edit_profile: Deasaich a’ phròifil - export: Às-phortadh dàta featured_tags: Tagaichean hais brosnaichte import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 9813514a7bf6cf..2eadb2ba6b04a6 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1692,7 +1692,7 @@ gl: delete: Eliminación da conta development: Desenvolvemento edit_profile: Editar perfil - export: Exportar datos + export: Exportar featured_tags: Cancelos destacados import: Importar import_and_export: Importar e exportar diff --git a/config/locales/he.yml b/config/locales/he.yml index 13a1f6f05d30d3..c7af22660f7b16 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1744,7 +1744,6 @@ he: delete: מחיקת חשבון development: פיתוח edit_profile: עריכת פרופיל - export: יצוא מידע featured_tags: תגיות נבחרות import: יבוא import_and_export: יבוא ויצוא diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 7dacf2007790f1..908cbf51c4328e 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -205,7 +205,6 @@ hr: delete: Brisanje računa development: Razvijanje edit_profile: Uredi profil - export: Izvoz podataka featured_tags: Istaknuti hashtagovi import: Uvezi import_and_export: Uvezi i izvezi diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 9767c488345493..2f6a4c57783346 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1692,7 +1692,6 @@ hu: delete: Fiók törlése development: Fejlesztőknek edit_profile: Profil szerkesztése - export: Adatok exportálása featured_tags: Kiemelt hashtagek import: Importálás import_and_export: Import és export diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 1fda020c0790a4..201922d102c043 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -757,7 +757,6 @@ hy: delete: Հաշուի ջնջում development: Ծրագրավորում edit_profile: Խմբագրել պրոֆիլը - export: Տվյալների արտահանում featured_tags: Ընտրուած հէշթեգեր import: Ներմուծել import_and_export: Ներմուծել և արտահանել diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 6632af061ec364..a8bc48b306a4b3 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1675,7 +1675,6 @@ ia: delete: Deletion de conto development: Disveloppamento edit_profile: Modificar profilo - export: Exportation de datos featured_tags: Hashtags in evidentia import: Importar import_and_export: Importar e exportar diff --git a/config/locales/id.yml b/config/locales/id.yml index 96a5022a7c81da..6a005fddaae7dc 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1347,7 +1347,6 @@ id: delete: Penghapusan akun development: Pengembangan edit_profile: Ubah profil - export: Expor data featured_tags: Tagar unggulan import: Impor import_and_export: Impor dan ekspor diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 513a8eda7eb930..7e8140a374daff 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1590,7 +1590,6 @@ ie: delete: Deletion de conto development: Developation edit_profile: Modificar profil - export: Exportation de data featured_tags: Recomandat hashtags import: Importar import_and_export: Importation e exportation diff --git a/config/locales/io.yml b/config/locales/io.yml index 97cc417df0f82e..dfb583450a6b88 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1555,7 +1555,6 @@ io: delete: Kontoefaco development: Developo edit_profile: Redaktar la profilo - export: Exportacar datumi featured_tags: Estelata hashtagi import: Importacar import_and_export: Importaco e exportaco diff --git a/config/locales/is.yml b/config/locales/is.yml index 590805ad3027b0..4af26eea0b0cf6 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1696,7 +1696,6 @@ is: delete: Eyðing notandaaðgangs development: Þróun edit_profile: Breyta notandasniði - export: Útflutningur gagna featured_tags: Myllumerki með aukið vægi import: Flytja inn import_and_export: Inn- og útflutningur diff --git a/config/locales/it.yml b/config/locales/it.yml index fe6fec17d778aa..9fdeede8bf5b91 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1694,7 +1694,6 @@ it: delete: Cancellazione account development: Sviluppo edit_profile: Modifica profilo - export: Esportazione dati featured_tags: Hashtag in evidenza import: Importa import_and_export: Importa ed esporta diff --git a/config/locales/ja.yml b/config/locales/ja.yml index cdc1fd18a80043..41f93397da990f 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1659,7 +1659,6 @@ ja: delete: アカウントの削除 development: 開発 edit_profile: プロフィールを編集 - export: データのエクスポート featured_tags: 注目のハッシュタグ import: データのインポート import_and_export: インポート・エクスポート diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 576937507886d2..2a0365fbf52644 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -410,7 +410,6 @@ ka: delete: ანგარიშის გაუქმება development: დეველოპმენტი edit_profile: პროფილის ცვლილება - export: მონაცემის ექსპორტი import: იმპორტი migrate: ანგარიშის მიგრაცია preferences: პრეფერენციები diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 88193f8434e19f..12bda84d463d2a 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -776,7 +776,6 @@ kab: delete: Tukksa n umiḍan development: Taneflit edit_profile: Ẓreg amaɣnu - export: Taktert n yisefka import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 67969d4d69eadf..537104ba51a90d 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -623,7 +623,6 @@ kk: delete: Аккаунт өшіру development: Жасаушы топ edit_profile: Профиль өңдеу - export: Экспорт уақыты featured_tags: Таңдаулы хэштегтер import: Импорт import_and_export: Импорт/экспорт diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 216e4687620368..ba43310e02dbb0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1668,7 +1668,7 @@ ko: delete: 계정 삭제 development: 개발 edit_profile: 프로필 편집 - export: 데이터 내보내기 + export: 내보내기 featured_tags: 추천 해시태그 import: 데이터 가져오기 import_and_export: 가져오기 & 내보내기 diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 08843f645e2078..ddd214441c352b 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1369,7 +1369,6 @@ ku: delete: Jêbirina ajimêr development: Pêşdebir edit_profile: Profîlê serrast bike - export: Derxistinê daneyan featured_tags: Hashtagên bijarte import: Têxistin import_and_export: Têxistin û derxistin diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 4136877edeb549..275bdab86100c7 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1652,7 +1652,6 @@ lad: delete: Efasa kuento development: Dezvelopamiento edit_profile: Edita profil - export: Eksporta enformasyon featured_tags: Etiketas avaliadas import: Importo import_and_export: Importo i eksporto diff --git a/config/locales/lt.yml b/config/locales/lt.yml index fa07eb6f59dfc0..ef13817028e3c2 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1090,7 +1090,6 @@ lt: delete: Paskyros trynimas development: Kūrimas edit_profile: Redaguoti profilį - export: Duomenų eksportas featured_tags: Rodomi saitažodžiai import: Importuoti import_and_export: Importas ir eksportas diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 4aeec5ceca73dc..16844a95c2bd4c 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1130,6 +1130,8 @@ lv: too_fast: Veidlapa ir iesniegta pārāk ātri, mēģini vēlreiz. use_security_key: Lietot drošības atslēgu author_attribution: + example_title: Parauga teksts + more_from_html: Vairāk no %{name} s_blog: "%{name} emuāri" title: Autora attiecinājums challenge: @@ -1650,20 +1652,23 @@ lv: delete: Konta dzēšana development: Izstrāde edit_profile: Labot profilu - export: Datu eksports featured_tags: Piedāvātie tēmturi import: Imports import_and_export: Imports un eksports migrate: Konta migrācija + notifications: E-pasta paziņojumi preferences: Iestatījumi profile: Profils relationships: Sekojamie un sekotāji + severed_relationships: Pārtrauktās attiecības statuses_cleanup: Automātiska ziņu dzēšana strikes: Moderācijas aizrādījumi two_factor_authentication: Divpakāpju autentifikācija webauthn_authentication: Drošības atslēgas severed_relationships: download: Lejupielādēt (%{count}) + lost_followers: Zaudētie sekotāji + lost_follows: Zaudētie sekojumi type: Notikums statuses: attached: @@ -1829,6 +1834,8 @@ lv: suspend: Konts apturēts welcome: apps_android_action: Iegūt to Google Play + apps_ios_action: Lejupielādēt no App Store + apps_step: Lejupielādēt mūsu oficiālās lietotnes. apps_title: Mastodon lietotnes edit_profile_action: Pielāgot edit_profile_title: Pielāgo savu profilu diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 0c0ffb69bfc849..9994a34bb5eac5 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1529,7 +1529,6 @@ ms: delete: Pemadaman akaun development: Pembangunan edit_profile: Sunting profil - export: Eksport data featured_tags: Tanda pagar terpilih import: Import import_and_export: Import dan eksport diff --git a/config/locales/my.yml b/config/locales/my.yml index 6acaa34cdc5c74..598915fad9019b 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1529,7 +1529,6 @@ my: delete: အကောင့်ဖျက်သိမ်းခြင်း development: Development edit_profile: ပရိုဖိုင်ပြင်ဆင်ရန် - export: အချက်အလက်ထုတ်ယူခြင်း featured_tags: အသားပေးဖော်ပြထားသည့် ဟက်ရှ်တဂျ်များ import: ထည့်သွင်းခြင်း import_and_export: ထည့်သွင်းခြင်းနှင့် ထုတ်ယူခြင်း diff --git a/config/locales/nn.yml b/config/locales/nn.yml index dcf571a7923c46..98f62e123a707b 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1692,7 +1692,6 @@ nn: delete: Kontosletting development: Utvikling edit_profile: Endr profil - export: Dataeksport featured_tags: Utvalgte emneknagger import: Hent inn import_and_export: Importer og eksporter diff --git a/config/locales/no.yml b/config/locales/no.yml index 1f0b6baccecfd8..ec0b14d5a3bfff 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1584,7 +1584,6 @@ delete: Kontosletting development: Utvikling edit_profile: Endre profil - export: Dataeksport featured_tags: Utvalgte emneknagger import: Importér import_and_export: Importer og eksporter diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 5cdd9240b01d97..a30126c44ba936 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -813,7 +813,6 @@ oc: delete: Supression de compte development: Desvolopament edit_profile: Modificar lo perfil - export: Exportar de donadas featured_tags: Etiquetas en avant import: Importar de donadas import_and_export: Import e export diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 314adf885f8dc6..e68ea2b16acd1c 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1744,7 +1744,6 @@ pl: delete: Usuń konto development: Tworzenie aplikacji edit_profile: Edytuj profil - export: Eksportowanie danych featured_tags: Wyróżnione hashtagi import: Importowanie danych import_and_export: Import i eksport diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 7742a80569c1c8..ba21dd1b3bb079 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1692,7 +1692,6 @@ pt-BR: delete: Exclusão de conta development: Desenvolvimento edit_profile: Editar perfil - export: Exportar dados featured_tags: Hashtags em destaque import: Importar import_and_export: Importar e exportar diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index d6c5c4a6ff01f7..6b48e8de26b48e 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1679,7 +1679,6 @@ pt-PT: delete: Eliminação da conta development: Desenvolvimento edit_profile: Editar perfil - export: Exportar dados featured_tags: Etiquetas destacadas import: Importar import_and_export: Importar e exportar diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 387772749006e1..c61c7f459fcf3e 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1741,7 +1741,6 @@ ru: delete: Удаление учётной записи development: Разработчикам edit_profile: Изменить профиль - export: Экспорт данных featured_tags: Избранные хэштеги import: Импорт import_and_export: Импорт и экспорт diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 780270ddf17b2e..306e670b7182ca 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1080,7 +1080,6 @@ sc: delete: Eliminatzione de su contu development: Isvilupu edit_profile: Modìfica profilu - export: Esportatzione de datos featured_tags: Etichetas in evidèntzia import: Importatzione import_and_export: Importatzione e esportatzione diff --git a/config/locales/sco.yml b/config/locales/sco.yml index 97eaa21ed6d0d6..8cc733a4acc2a2 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1359,7 +1359,6 @@ sco: delete: Accoont deletion development: Development edit_profile: Edit profile - export: Data export featured_tags: Featured hashtags import: Import import_and_export: Import an export diff --git a/config/locales/si.yml b/config/locales/si.yml index 8460de01da9f6a..270e0ae3fc4e31 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1234,7 +1234,6 @@ si: delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය - export: දත්ත නිර්යාතය featured_tags: විශේෂාංගගත හැෂ් ටැග් import: ආයාතය import_and_export: ආයාත හා නිර්යාත diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index f2108828d5643b..8c84e35a4d1880 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -79,14 +79,14 @@ es-MX: form_admin_settings: activity_api_enabled: Conteo de publicaciones publicadas localmente, usuarios activos, y nuevos registros en periodos semanales app_icon: WEBP, PNG, GIF o JPG. Reemplaza el icono de aplicación predeterminado en dispositivos móviles con un icono personalizado. - backups_retention_period: Los usuarios tienen la capacidad de generar archivos de sus mensajes para descargar más adelante. Cuando se establece un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número de días especificado. + backups_retention_period: Los usuarios tienen la posibilidad de generar archivos de sus mensajes para descargarlos más adelante. Cuando se establece en un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número especificado de días. bootstrap_timeline_accounts: Estas cuentas aparecerán en la parte superior de las recomendaciones de los nuevos usuarios. closed_registrations_message: Mostrado cuando los registros están cerrados - content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general. + content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. mascot: Reemplaza la ilustración en la interfaz web avanzada. - media_cache_retention_period: Los archivos multimedia de las publicaciones creadas por usuarios remotos se almacenan en caché en tu servidor. Cuando se establece un valor positivo, estos archivos se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlaces realizan peticiones a sitios de terceros, se recomienda establecer este valor a al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese momento. + media_cache_retention_period: Los archivos multimedia de las publicaciones realizadas por usuarios remotos se almacenan en caché en su servidor. Si se establece en un valor positivo, los archivos multimedia se eliminarán tras el número de días especificado. Si los datos multimedia se solicitan después de haber sido eliminados, se volverán a descargar, si el contenido de origen sigue estando disponible. Debido a las restricciones sobre la frecuencia con la que las tarjetas de previsualización de enlaces sondean sitios de terceros, se recomienda establecer este valor en al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese tiempo. peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, sólo que su servidor lo sabe. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general. profile_directory: El directorio de perfiles lista a todos los usuarios que han optado por que su cuenta pueda ser descubierta. require_invite_text: Cuando los registros requieren aprobación manual, hace obligatoria la entrada de texto "¿Por qué quieres unirte?" en lugar de opcional @@ -249,7 +249,7 @@ es-MX: backups_retention_period: Período de retención del archivo de usuario bootstrap_timeline_accounts: Recomendar siempre estas cuentas a nuevos usuarios closed_registrations_message: Mensaje personalizado cuando los registros no están disponibles - content_cache_retention_period: Período de retención de contenido remoto + content_cache_retention_period: Periodo de conservación de contenidos remotos custom_css: CSS personalizado favicon: Favicon mascot: Mascota personalizada (legado) diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index ed27e08bc33466..9cc32457f7465f 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -82,6 +82,7 @@ lv: backups_retention_period: Lietotājiem ir iespēja izveidot savu ierakstu arhīvu lejupielādēšanai vēlāk. Kad iestatīta pozitīva vērtība, šie arhīvi tiks automātiski izdzēsti no krātuves pēc norādītā dienu skaita. bootstrap_timeline_accounts: Šie konti tiks piesprausti jauno lietotāju ieteikumu augšdaļā. closed_registrations_message: Tiek rādīts, kad reģistrēšanās ir slēgta + content_cache_retention_period: Visi ieraksti no citiem serveriem (tajā skaitā pastiprinājumi un atbildes) tiks izdzēsti pēc norādītā dienu skaita, neņemot vērā vietēja lietotāja mijiedarbību ar šādiem ierakstiem. Tas ietver ierakstus, kurus vietējs lietotājs ir atzīmējis kā grāmatzīmi vai pievienojis izlasē. Tiks zaudēti arī privāti pieminējumi starp lietotājiem no dažādiem serveriem, un tos nebūs iespējams atgūt. Šī iestatījuma izmantošana ir paredzēta īpašam nolūkam paredzētiem serveriem un neatbilst tam, ko sagaida vairums lietotāju, kad pielietots vispārējas izmantošanas serveros. custom_css: Vari lietot pielāgotus stilus Mastodon tīmekļa versijā. favicon: WEBP, PNG, GIF vai JPG. Aizstāj noklusējuma Mastodon favikonu ar pielāgotu. mascot: Ignorē ilustrāciju uzlabotajā tīmekļa saskarnē. diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 9d3845e7a752a6..aa8dbe76936020 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -126,7 +126,7 @@ sk: setting_system_font_ui: Použi základné systémové písmo setting_theme: Vzhľad webu setting_trends: Ukáž dnešné trendy - setting_unfollow_modal: Vyžaduj potvrdenie pred skončením sledovania iného užívateľa + setting_unfollow_modal: Vyžaduj potvrdenie pred tým, než niekoho prestaneš sledovať setting_use_blurhash: Ukáž farebné prechody pre skryté médiá setting_use_pending_items: Pomalý režim severity: Závažnosť diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d7eacb68509796..8076682ed46e12 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -394,6 +394,7 @@ sk: resolve: Preveď doménu not_permitted: Nepovolená resolved_through_html: Prevedená cez %{domain} + title: Blokované e-mailové domény export_domain_allows: new: title: Nahraj povolené domény @@ -401,6 +402,7 @@ sk: export_domain_blocks: import: existing_relationships_warning: Existujúce vzťahy nasledovania + private_comment_template: 'Importované z: %{source} dňa %{date}' title: Nahraj zákazy domén new: title: Nahraj zákazy domén @@ -1097,7 +1099,7 @@ sk: subject: "%{name} si obľúbil/a tvoj príspevok" title: Novo obľúbené follow: - body: "%{name} ťa teraz následuje!" + body: "%{name} ťa teraz nasleduje!" subject: "%{name} ťa teraz nasleduje" title: Nový sledovateľ follow_request: @@ -1166,7 +1168,7 @@ sk: follow_failure: Nemožno nasledovať niektoré z vybraných účtov. follow_selected_followers: Následuj označených sledovatelov followers: Následovatelia - following: Následovaní + following: Nasledovaní invited: Pozvaný/á last_active: Naposledy aktívny most_recent: Najnovšie @@ -1226,7 +1228,6 @@ sk: delete: Vymazanie účtu development: Vývoj edit_profile: Uprav profil - export: Exportuj dáta featured_tags: Zvýraznené haštagy import: Importuj import_and_export: Import a export diff --git a/config/locales/sl.yml b/config/locales/sl.yml index c8e806bf35efa9..286bece8778bd1 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1729,7 +1729,6 @@ sl: delete: Brisanje računa development: Razvoj edit_profile: Uredi profil - export: Izvoz podatkov featured_tags: Vključeni ključniki import: Uvozi import_and_export: Uvoz in izvoz diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 294c8a888f043f..c1ed91cf96ac45 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -296,6 +296,7 @@ sq: filter_by_action: Filtroji sipas veprimit filter_by_user: Filtroji sipas përdoruesit title: Regjistër auditimesh + unavailable_instance: "(emër përkatësie jo i passhëm)" announcements: destroyed_msg: Lajmërimi u fshi me sukses! edit: @@ -1684,7 +1685,7 @@ sq: delete: Fshirje llogarie development: Zhvillim edit_profile: Përpunoni profilin - export: Eksportim të dhënash + export: Eksportim featured_tags: Hashtag-ë të zgjedhur import: Importo import_and_export: Importim dhe eksportim diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index bfb52c275b66b1..ad14d9d131f57f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1619,7 +1619,6 @@ sr-Latn: delete: Brisanje naloga development: Razvoj edit_profile: Uređivanje profila - export: Izvoz podataka featured_tags: Istaknute heš oznake import: Uvoz import_and_export: Uvoz i izvoz diff --git a/config/locales/sr.yml b/config/locales/sr.yml index af7e7ab8d6945e..fc92b98176186e 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1649,7 +1649,6 @@ sr: delete: Брисање налога development: Развој edit_profile: Уређивање профила - export: Извоз података featured_tags: Истакнуте хеш ознаке import: Увоз import_and_export: Увоз и извоз diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 6146cfc8d7feeb..ab545005375036 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1645,7 +1645,7 @@ sv: delete: Konto radering development: Utveckling edit_profile: Redigera profil - export: Exportera data + export: Export featured_tags: Utvalda hashtaggar import: Importera import_and_export: Import och export diff --git a/config/locales/th.yml b/config/locales/th.yml index d56385f2611add..fa04b6030ac155 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1666,7 +1666,6 @@ th: delete: การลบบัญชี development: การพัฒนา edit_profile: แก้ไขโปรไฟล์ - export: การส่งออกข้อมูล featured_tags: แฮชแท็กที่น่าสนใจ import: การนำเข้า import_and_export: การนำเข้าและการส่งออก diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 16dd4c899ded7c..d2cf412cc9bd10 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1692,7 +1692,6 @@ tr: delete: Hesap silme development: Geliştirme edit_profile: Profili düzenle - export: Veriyi dışa aktar featured_tags: Öne çıkan etiketler import: İçe aktar import_and_export: İçe ve dışa aktar diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 0ef08a15555659..d0164d846a89ae 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1744,7 +1744,6 @@ uk: delete: Видалення облікового запису development: Розробка edit_profile: Редагувати профіль - export: Експорт даних featured_tags: Рекомендовані хештеґи import: Імпорт import_and_export: Імпорт та експорт diff --git a/config/locales/vi.yml b/config/locales/vi.yml index d969ad7d4ffdc8..21fc4a3bf1a53e 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1666,7 +1666,7 @@ vi: delete: Xóa tài khoản development: Lập trình edit_profile: Sửa hồ sơ - export: Xuất dữ liệu + export: Xuất featured_tags: Hashtag thường dùng import: Nhập dữ liệu import_and_export: Dữ liệu diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 8b34da076a0162..ade35ceb626009 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1666,7 +1666,6 @@ zh-CN: delete: 删除账户 development: 开发 edit_profile: 更改个人资料 - export: 导出 featured_tags: 精选的话题标签 import: 导入 import_and_export: 导入和导出 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 598c65d0494ec7..c0726fc2f7d04e 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1564,7 +1564,6 @@ zh-HK: delete: 刪除帳戶 development: 開發 edit_profile: 修改個人資料 - export: 匯出 featured_tags: 推薦的標籤 import: 匯入 import_and_export: 匯入及匯出 From db57fe80c8a4fcac2b0fb857c7eb959cbf82a2e0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 26 Sep 2024 04:54:01 -0400 Subject: [PATCH 126/467] Remove `page_json` var from ap/replies spec (#32000) --- .../activitypub/replies_controller_spec.rb | 82 ++++++++++++++----- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index 27821b0d4ec415..d7c2c2d3b02cc1 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -66,7 +66,6 @@ context 'when status is public' do let(:parent_visibility) { :public } - let(:page_json) { response.parsed_body[:first] } it 'returns http success and correct media type' do expect(response) @@ -78,16 +77,28 @@ context 'without only_other_accounts' do it "returns items with thread author's replies" do - expect(page_json).to be_a Hash - expect(page_json[:items]).to be_an Array - expect(page_json[:items].size).to eq 1 - expect(page_json[:items].all? { |item| targets_public_collection?(item) }).to be true + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + items: be_an(Array) + .and(have_attributes(size: 1)) + .and(all(satisfy { |item| targets_public_collection?(item) })) + ) + ) + ) end context 'when there are few self-replies' do it 'points next to replies from other people' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=true page=true)).any? } + ) + ) + ) end end @@ -97,8 +108,14 @@ end it 'points next to other self-replies' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=false', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=false page=true)).any? } + ) + ) + ) end end end @@ -107,26 +124,31 @@ let(:only_other_accounts) { 'true' } it 'returns items with other public or unlisted replies' do - expect(page_json).to be_a Hash - expect(page_json[:items]).to be_an Array - expect(page_json[:items].size).to eq 3 + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include(items: be_an(Array).and(have_attributes(size: 3))) + ) + ) end it 'only inlines items that are local and public or unlisted replies' do - inlined_replies = page_json[:items].select { |x| x.is_a?(Hash) } - expect(inlined_replies.all? { |item| targets_public_collection?(item) }).to be true - expect(inlined_replies.all? { |item| ActivityPub::TagManager.instance.local_uri?(item[:id]) }).to be true + expect(inlined_replies) + .to all(satisfy { |item| targets_public_collection?(item) }) + .and all(satisfy { |item| ActivityPub::TagManager.instance.local_uri?(item[:id]) }) end it 'uses ids for remote toots' do - remote_replies = page_json[:items].reject { |x| x.is_a?(Hash) } - expect(remote_replies.all? { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }).to be true + expect(remote_replies) + .to all(satisfy { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }) end context 'when there are few replies' do it 'does not have a next page' do - expect(page_json).to be_a Hash - expect(page_json[:next]).to be_nil + expect(response.parsed_body) + .to include( + first: be_a(Hash).and(not_include(next: be_present)) + ) end end @@ -136,8 +158,14 @@ end it 'points next to other replies' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=true page=true)).any? } + ) + ) + ) end end end @@ -193,6 +221,18 @@ private + def inlined_replies + response + .parsed_body[:first][:items] + .select { |x| x.is_a?(Hash) } + end + + def remote_replies + response + .parsed_body[:first][:items] + .reject { |x| x.is_a?(Hash) } + end + def parsed_uri_query_values(uri) Addressable::URI .parse(uri) From 00aaf77e04ce3aeadd976b4e1726c49794b3ea89 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 26 Sep 2024 13:48:01 +0200 Subject: [PATCH 127/467] Use same styling for statuses in email as on web (#32073) --- app/javascript/styles/mailer.scss | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index e5d0c05f81d97b..2c1b443cb51114 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -168,6 +168,7 @@ table + p { // Utility classes .email-w-full { + table-layout: fixed; width: 100%; } @@ -587,7 +588,10 @@ table + p { p { font-size: 14px; line-height: 20px; + margin-bottom: 20px; color: #17063b; + white-space: pre-wrap; + unicode-bidi: plaintext; } a { @@ -598,6 +602,21 @@ table + p { color: #563acc !important; } } + + .invisible { + font-size: 0; + line-height: 0; + display: inline-block; + width: 0; + height: 0; + position: absolute; + } + + .ellipsis { + &::after { + content: '…'; + } + } } .email-status-media { From 89df27a06c69818d38621c1147c6724d76beefde Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 26 Sep 2024 14:31:32 +0200 Subject: [PATCH 128/467] Change design of media tab on profiles in web UI (#31967) --- .../mastodon/components/media_gallery.jsx | 13 +- app/javascript/mastodon/components/status.jsx | 38 ++-- .../account_gallery/components/media_item.jsx | 158 -------------- .../account_gallery/components/media_item.tsx | 197 ++++++++++++++++++ .../features/account_gallery/index.jsx | 2 +- .../status/components/detailed_status.tsx | 33 +-- app/javascript/mastodon/models/status.ts | 2 + .../material-icons/400-20px/mood-fill.svg | 2 +- .../material-icons/400-20px/mood.svg | 2 +- .../material-icons/400-20px/warning-fill.svg | 2 +- .../material-icons/400-20px/warning.svg | 2 +- .../400-24px/add_photo_alternate-fill.svg | 2 +- .../400-24px/add_photo_alternate.svg | 2 +- .../400-24px/bookmarks-fill.svg | 2 +- .../material-icons/400-24px/bookmarks.svg | 2 +- .../400-24px/headphones-fill.svg | 1 + .../material-icons/400-24px/headphones.svg | 1 + .../400-24px/manufacturing-fill.svg | 1 + .../material-icons/400-24px/manufacturing.svg | 2 +- .../material-icons/400-24px/movie-fill.svg | 1 + .../material-icons/400-24px/movie.svg | 1 + .../400-24px/quiet_time-fill.svg | 2 +- .../material-icons/400-24px/quiet_time.svg | 2 +- .../material-icons/400-24px/share-fill.svg | 2 +- .../material-icons/400-24px/share.svg | 2 +- .../styles/mastodon/components.scss | 99 +++++---- app/javascript/styles/mastodon/variables.scss | 2 + 27 files changed, 330 insertions(+), 245 deletions(-) delete mode 100644 app/javascript/mastodon/features/account_gallery/components/media_item.jsx create mode 100644 app/javascript/mastodon/features/account_gallery/components/media_item.tsx create mode 100644 app/javascript/material-icons/400-24px/headphones-fill.svg create mode 100644 app/javascript/material-icons/400-24px/headphones.svg create mode 100644 app/javascript/material-icons/400-24px/manufacturing-fill.svg create mode 100644 app/javascript/material-icons/400-24px/movie-fill.svg create mode 100644 app/javascript/material-icons/400-24px/movie.svg diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index ba54b7f903645a..35924008b5ef00 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -11,6 +11,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; import { Blurhash } from 'mastodon/components/blurhash'; +import { formatTime } from 'mastodon/features/video'; import { autoPlayGif, displayMedia, useBlurhash } from '../initial_state'; @@ -57,7 +58,7 @@ class Item extends PureComponent { hoverToPlay () { const { attachment } = this.props; - return !this.getAutoPlay() && attachment.get('type') === 'gifv'; + return !this.getAutoPlay() && ['gifv', 'video'].includes(attachment.get('type')); } handleClick = (e) => { @@ -150,10 +151,15 @@ class Item extends PureComponent { /> ); - } else if (attachment.get('type') === 'gifv') { + } else if (['gifv', 'video'].includes(attachment.get('type'))) { const autoPlay = this.getAutoPlay(); + const duration = attachment.getIn(['meta', 'original', 'duration']); - badges.push(GIF); + if (attachment.get('type') === 'gifv') { + badges.push(GIF); + } else { + badges.push({formatTime(Math.floor(duration))}); + } thumbnail = (
@@ -167,6 +173,7 @@ class Item extends PureComponent { onClick={this.handleClick} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} + onLoadedData={this.handleImageLoad} autoPlay={autoPlay} playsInline loop diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 6c32fd245d7a1b..46926b4aaead34 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -449,7 +449,25 @@ class Status extends ImmutablePureComponent { } else if (status.get('media_attachments').size > 0) { const language = status.getIn(['translation', 'language']) || status.get('language'); - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + if (['image', 'gifv'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { + media = ( + + {Component => ( + + )} + + ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { const attachment = status.getIn(['media_attachments', 0]); const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); @@ -501,24 +519,6 @@ class Status extends ImmutablePureComponent { )} ); - } else { - media = ( - - {Component => ( - - )} - - ); } } else if (status.get('spoiler_text').length === 0 && status.get('card')) { media = ( diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx b/app/javascript/mastodon/features/account_gallery/components/media_item.jsx deleted file mode 100644 index 087e7757533327..00000000000000 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx +++ /dev/null @@ -1,158 +0,0 @@ -import PropTypes from 'prop-types'; - -import classNames from 'classnames'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -import AudiotrackIcon from '@/material-icons/400-24px/music_note.svg?react'; -import PlayArrowIcon from '@/material-icons/400-24px/play_arrow.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { Blurhash } from 'mastodon/components/blurhash'; -import { Icon } from 'mastodon/components/icon'; -import { autoPlayGif, displayMedia, useBlurhash } from 'mastodon/initial_state'; - -export default class MediaItem extends ImmutablePureComponent { - - static propTypes = { - attachment: ImmutablePropTypes.map.isRequired, - displayWidth: PropTypes.number.isRequired, - onOpenMedia: PropTypes.func.isRequired, - }; - - state = { - visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all', - loaded: false, - }; - - handleImageLoad = () => { - this.setState({ loaded: true }); - }; - - handleMouseEnter = e => { - if (this.hoverToPlay()) { - e.target.play(); - } - }; - - handleMouseLeave = e => { - if (this.hoverToPlay()) { - e.target.pause(); - e.target.currentTime = 0; - } - }; - - hoverToPlay () { - return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1; - } - - handleClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - - if (this.state.visible) { - this.props.onOpenMedia(this.props.attachment); - } else { - this.setState({ visible: true }); - } - } - }; - - render () { - const { attachment, displayWidth } = this.props; - const { visible, loaded } = this.state; - - const width = `${Math.floor((displayWidth - 4) / 3) - 4}px`; - const height = width; - const status = attachment.get('status'); - const title = status.get('spoiler_text') || attachment.get('description'); - - let thumbnail, label, icon, content; - - if (!visible) { - icon = ( - - - - ); - } else { - if (['audio', 'video'].includes(attachment.get('type'))) { - content = ( - {attachment.get('description')} - ); - - if (attachment.get('type') === 'audio') { - label = ; - } else { - label = ; - } - } else if (attachment.get('type') === 'image') { - const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0; - const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0; - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - - content = ( - {attachment.get('description')} - ); - } else if (attachment.get('type') === 'gifv') { - content = ( -
- {preview && preview.followers_count + preview.following_count > 0 && ( + {preview && + preview !== 'error' && + preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + + {preview === 'error' && (
@@ -97,18 +126,8 @@ export const DomainBlockModal: React.FC<{
- ), - followingCount: preview.following_count, - followingCountDisplay: ( - - ), - }} + id='domain_block_modal.you_will_lose_relationships' + defaultMessage='You will lose all followers and people you follow from this server.' />
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 0dc4ccee804176..b20934388cc5b3 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -222,6 +222,7 @@ "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", + "domain_block_modal.you_will_lose_relationships": "You will lose all followers and people you follow from this server.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", From a04433f995099854c06fbc7d02245a7d2a3677c0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 26 Sep 2024 15:26:49 +0200 Subject: [PATCH 130/467] Add ability to view alt text by clicking the ALT badge in web UI (#32058) --- .../mastodon/components/alt_text_badge.tsx | 67 +++++++++++++++++++ .../mastodon/components/media_gallery.jsx | 7 +- .../account_gallery/components/media_item.tsx | 17 +++-- app/javascript/mastodon/locales/en.json | 1 + .../styles/mastodon/components.scss | 45 +++++++++++-- 5 files changed, 121 insertions(+), 16 deletions(-) create mode 100644 app/javascript/mastodon/components/alt_text_badge.tsx diff --git a/app/javascript/mastodon/components/alt_text_badge.tsx b/app/javascript/mastodon/components/alt_text_badge.tsx new file mode 100644 index 00000000000000..99bec1ee51cf71 --- /dev/null +++ b/app/javascript/mastodon/components/alt_text_badge.tsx @@ -0,0 +1,67 @@ +import { useState, useCallback, useRef } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import Overlay from 'react-overlays/Overlay'; +import type { + OffsetValue, + UsePopperOptions, +} from 'react-overlays/esm/usePopper'; + +const offset = [0, 4] as OffsetValue; +const popperConfig = { strategy: 'fixed' } as UsePopperOptions; + +export const AltTextBadge: React.FC<{ + description: string; +}> = ({ description }) => { + const anchorRef = useRef(null); + const [open, setOpen] = useState(false); + + const handleClick = useCallback(() => { + setOpen((v) => !v); + }, [setOpen]); + + const handleClose = useCallback(() => { + setOpen(false); + }, [setOpen]); + + return ( + <> + + + + {({ props }) => ( +
+
+

+ +

+

{description}

+
+
+ )} +
+ + ); +}; diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 35924008b5ef00..84cb4e04dcb5db 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -10,6 +10,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; +import { AltTextBadge } from 'mastodon/components/alt_text_badge'; import { Blurhash } from 'mastodon/components/blurhash'; import { formatTime } from 'mastodon/features/video'; @@ -97,7 +98,7 @@ class Item extends PureComponent { } if (attachment.get('description')?.length > 0) { - badges.push(ALT); + badges.push(); } const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); @@ -156,9 +157,9 @@ class Item extends PureComponent { const duration = attachment.getIn(['meta', 'original', 'duration']); if (attachment.get('type') === 'gifv') { - badges.push(GIF); + badges.push(GIF); } else { - badges.push({formatTime(Math.floor(duration))}); + badges.push({formatTime(Math.floor(duration))}); } thumbnail = ( diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.tsx b/app/javascript/mastodon/features/account_gallery/components/media_item.tsx index 1a294a74a05b40..729e40a9934d42 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.tsx +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.tsx @@ -5,6 +5,7 @@ import classNames from 'classnames'; import HeadphonesIcon from '@/material-icons/400-24px/headphones-fill.svg?react'; import MovieIcon from '@/material-icons/400-24px/movie-fill.svg?react'; import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import { AltTextBadge } from 'mastodon/components/alt_text_badge'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { formatTime } from 'mastodon/features/video'; @@ -77,11 +78,7 @@ export const MediaItem: React.FC<{ const badges = []; if (description && description.length > 0) { - badges.push( - - ALT - , - ); + badges.push(); } if (!visible) { @@ -156,13 +153,19 @@ export const MediaItem: React.FC<{ if (type === 'gifv') { badges.push( - + GIF , ); } else { badges.push( - + {formatTime(Math.floor(duration))} , ); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index b20934388cc5b3..e86e300bcba7d8 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f3464c83b7d53e..8cb63e42e63df6 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -6971,14 +6971,14 @@ a.status-card { inset-inline-end: 8px; display: flex; gap: 2px; + pointer-events: none; } -.media-gallery__alt__label, -.media-gallery__gifv__label { - display: flex; - align-items: center; - justify-content: center; +.media-gallery__alt__label { + display: block; + text-align: center; color: $white; + border: 0; background: rgba($black, 0.65); backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); padding: 3px 8px; @@ -6986,8 +6986,41 @@ a.status-card { font-size: 12px; font-weight: 700; z-index: 1; - pointer-events: none; line-height: 20px; + cursor: pointer; + pointer-events: auto; + + &--non-interactive { + pointer-events: none; + } +} + +.media-gallery__alt__popover { + background: rgba($black, 0.65); + backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + border-radius: 4px; + box-shadow: var(--dropdown-shadow); + padding: 16px; + min-width: 16em; + min-height: 2em; + max-width: 22em; + max-height: 30em; + overflow-y: auto; + + h4 { + font-size: 15px; + line-height: 20px; + font-weight: 500; + color: $white; + margin-bottom: 8px; + } + + p { + font-size: 15px; + line-height: 20px; + color: rgba($white, 0.85); + white-space: pre-line; + } } .attachment-list { From 89c39e7826bee92ebc537babfc4061bd4d98c8ba Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 16:26:04 +0200 Subject: [PATCH 131/467] Fix scrollbar width (#32091) --- app/javascript/styles/mastodon/reset.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/javascript/styles/mastodon/reset.scss b/app/javascript/styles/mastodon/reset.scss index 5a4152826d9e4b..fc0305baf3cdb4 100644 --- a/app/javascript/styles/mastodon/reset.scss +++ b/app/javascript/styles/mastodon/reset.scss @@ -56,7 +56,6 @@ table { @supports not selector(::-webkit-scrollbar) { html { scrollbar-color: $action-button-color var(--background-border-color); - scrollbar-width: thin; } } From 106b22bd2dc2fca8561d36f849c80dd4a918ca2e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 26 Sep 2024 15:26:40 -0400 Subject: [PATCH 132/467] Use 1 column layout for form `ul` on narrow widths (#32112) --- app/javascript/styles/mastodon/forms.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 56f7b893f3953b..957a28352267e4 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -312,6 +312,10 @@ code { ul { columns: 2; + + @media screen and (max-width: $mobile-breakpoint) { + columns: 1; + } } } From ee2d966080b4e293d07acedf9385786a939432c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:27:13 +0200 Subject: [PATCH 133/467] Update dependency blurhash to v0.1.8 (#32114) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ed217ca1464889..e1ea677dfd27aa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,7 +134,7 @@ GEM bindata (2.5.0) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) - blurhash (0.1.7) + blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) brakeman (6.2.1) From 513f187dafd8ff441479a6de12c61f8bb8d4c5bf Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 21:27:57 +0200 Subject: [PATCH 134/467] =?UTF-8?q?Add=20=E2=80=9CA=20Mastodon=20update=20?= =?UTF-8?q?is=20available.=E2=80=9D=20message=20on=20admin=20dashboard=20f?= =?UTF-8?q?or=20non-bugfix=20updates=20(#32106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/admin/system_check/software_version_check.rb | 6 ++++-- config/locales/en.yml | 3 +++ spec/lib/admin/system_check/software_version_check_spec.rb | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/lib/admin/system_check/software_version_check.rb b/app/lib/admin/system_check/software_version_check.rb index e142feddf0d000..e5cacfe354bbaf 100644 --- a/app/lib/admin/system_check/software_version_check.rb +++ b/app/lib/admin/system_check/software_version_check.rb @@ -14,14 +14,16 @@ def pass? def message if software_updates.any?(&:urgent?) Admin::SystemCheck::Message.new(:software_version_critical_check, nil, admin_software_updates_path, true) - else + elsif software_updates.any?(&:patch_type?) Admin::SystemCheck::Message.new(:software_version_patch_check, nil, admin_software_updates_path) + else + Admin::SystemCheck::Message.new(:software_version_check, nil, admin_software_updates_path) end end private def software_updates - @software_updates ||= SoftwareUpdate.pending_to_a.filter { |update| update.urgent? || update.patch_type? } + @software_updates ||= SoftwareUpdate.pending_to_a end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 9c3bab6baa2142..bf45dff33af855 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -875,6 +875,9 @@ en: message_html: You haven't defined any server rules. sidekiq_process_check: message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration + software_version_check: + action: See available updates + message_html: A Mastodon update is available. software_version_critical_check: action: See available updates message_html: A critical Mastodon update is available, please update as quickly as possible. diff --git a/spec/lib/admin/system_check/software_version_check_spec.rb b/spec/lib/admin/system_check/software_version_check_spec.rb index 1affaa3a969d82..8460d9066881bf 100644 --- a/spec/lib/admin/system_check/software_version_check_spec.rb +++ b/spec/lib/admin/system_check/software_version_check_spec.rb @@ -51,8 +51,8 @@ Fabricate(:software_update, version: '99.99.99', type: 'major', urgent: false) end - it 'returns true' do - expect(check.pass?).to be true + it 'returns false' do + expect(check.pass?).to be false end end From c9b069996456fb79d41dd37d986673a07cef5187 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:34:46 +0200 Subject: [PATCH 135/467] New Crowdin Translations (automated) (#32121) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 2 + app/javascript/mastodon/locales/da.json | 2 + app/javascript/mastodon/locales/de.json | 2 + app/javascript/mastodon/locales/en-GB.json | 3 + app/javascript/mastodon/locales/eo.json | 2 + app/javascript/mastodon/locales/es-AR.json | 2 + app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/es.json | 2 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 5 + app/javascript/mastodon/locales/fi.json | 3 + app/javascript/mastodon/locales/fo.json | 2 + app/javascript/mastodon/locales/ga.json | 1 + app/javascript/mastodon/locales/gl.json | 2 + app/javascript/mastodon/locales/hu.json | 2 + app/javascript/mastodon/locales/io.json | 206 +++++++++++++++++++++ app/javascript/mastodon/locales/it.json | 3 + app/javascript/mastodon/locales/lt.json | 7 +- app/javascript/mastodon/locales/nl.json | 4 +- app/javascript/mastodon/locales/pl.json | 2 + app/javascript/mastodon/locales/pt-BR.json | 3 + app/javascript/mastodon/locales/sq.json | 2 + app/javascript/mastodon/locales/tr.json | 2 + app/javascript/mastodon/locales/uk.json | 3 + app/javascript/mastodon/locales/vi.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 3 + app/javascript/mastodon/locales/zh-TW.json | 2 + config/locales/activerecord.io.yml | 6 + config/locales/ca.yml | 3 + config/locales/da.yml | 3 + config/locales/de.yml | 4 + config/locales/devise.io.yml | 10 + config/locales/doorkeeper.ga.yml | 1 + config/locales/doorkeeper.pt-BR.yml | 1 + config/locales/en-GB.yml | 1 + config/locales/es-AR.yml | 1 + config/locales/es-MX.yml | 1 + config/locales/es.yml | 1 + config/locales/fi.yml | 1 + config/locales/fo.yml | 1 + config/locales/ga.yml | 1 + config/locales/gl.yml | 7 +- config/locales/hu.yml | 1 + config/locales/it.yml | 4 + config/locales/lt.yml | 4 + config/locales/nl.yml | 3 + config/locales/nn.yml | 3 + config/locales/pl.yml | 4 + config/locales/pt-BR.yml | 1 + config/locales/simple_form.io.yml | 20 ++ config/locales/sq.yml | 3 + config/locales/tr.yml | 1 + config/locales/uk.yml | 4 + config/locales/zh-CN.yml | 4 + config/locales/zh-TW.yml | 3 + 55 files changed, 364 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 2c6dcba46917a1..1cd643842cdc2a 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Límit de freqüència", "alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.title": "Vaja!", + "alt_text_badge.title": "Text alternatiu", "announcement.announcement": "Anunci", "attachments_list.unprocessed": "(sense processar)", "audio.hide": "Amaga l'àudio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabran que són blocats.", "domain_block_modal.title": "Bloquem el domini?", "domain_block_modal.you_will_lose_num_followers": "Perdreu {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidors}} i {followingCount, plural, one {{followingCountDisplay} persona} other {{followingCountDisplay} persones}} que seguiu.", + "domain_block_modal.you_will_lose_relationships": "Perdreu seguidors i gent a qui seguiu d'aquest servidor.", "domain_block_modal.you_wont_see_posts": "No veureu ni les publicacions ni les notificacions dels usuaris d'aquest servidor.", "domain_pill.activitypub_lets_connect": "Us permet connectar i interactuar amb persones a Mastodon i també a d'altres apps socials.", "domain_pill.activitypub_like_language": "ActivityPub és el llenguatge que Mastodon parla amb altres xarxes socials.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e7d2bcaf80c785..8223177ab93a9e 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Hastighedsbegrænset", "alert.unexpected.message": "En uventet fejl opstod.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Bekendtgørelse", "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Vedkommende ser ikke den aktive blokering.", "domain_block_modal.title": "Blokér domæne?", "domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.", + "domain_block_modal.you_will_lose_relationships": "Alle følgere og personer som følges på denne server mistes.", "domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.", "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2f8c89961a7302..30a55df05b2a83 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.title": "Oha!", + "alt_text_badge.title": "Bildbeschreibung", "announcement.announcement": "Ankündigung", "attachments_list.unprocessed": "(ausstehend)", "audio.hide": "Audio ausblenden", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Es wird nicht erkennbar sein, dass diese Domain blockiert wurde.", "domain_block_modal.title": "Domain blockieren?", "domain_block_modal.you_will_lose_num_followers": "Du wirst {followersCount, plural, one {{followersCountDisplay} Follower} other {{followersCountDisplay} Follower}} verlieren und {followingCount, plural, one {{followingCountDisplay} Profil} other {{followingCountDisplay} Profilen}} entfolgen.", + "domain_block_modal.you_will_lose_relationships": "Du wirst von diesem Server alle Follower und Profile, denen du dort folgst, verlieren.", "domain_block_modal.you_wont_see_posts": "Du wirst keine Beiträge oder Benachrichtigungen von Profilen auf diesem Server sehen.", "domain_pill.activitypub_lets_connect": "Somit kannst du dich nicht nur auf Mastodon mit Leuten verbinden und mit ihnen interagieren, sondern über alle sozialen Apps hinweg.", "domain_pill.activitypub_like_language": "ActivityPub ist sozusagen die Sprache, die Mastodon mit anderen sozialen Netzwerken spricht.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index ee38b775544b1a..b1d61ddd3dc746 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", + "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", + "domain_block_modal.you_will_lose_relationships": "You will lose all followers and people you follow from this server.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 8139e8c76dc87f..832bf9eda0cf95 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Aj!", + "alt_text_badge.title": "Alt-teksto", "announcement.announcement": "Anoncoj", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", "domain_block_modal.title": "Ĉu bloki la domajnon?", "domain_block_modal.you_will_lose_num_followers": "Vi perdos {followersCount, plural, one {{followersCountDisplay} sekvanton} other {{followersCountDisplay} sekvantojn}} kaj {followingCount, plural, one {{followingCountDisplay} homon, kiu vi sekvas} other {{followingCountDisplay} homojn, kiuj vi sekvas}}.", + "domain_block_modal.you_will_lose_relationships": "Vi perdos ĉiujn sekvantojn kaj homojn, kiujn vi sekvas de ĉi tiu servilo.", "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 26a37e76b3939e..e0a4f0fc923f28 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Acción limitada", "alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.title": "¡Epa!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "[sin procesar]", "audio.hide": "Ocultar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabrán que fueron bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y gente a la que sigas de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con cuentas no solo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index dd3188c146c995..3948de6c3277fb 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -221,7 +222,8 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_num_followers": "Vas a perder {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigas}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás todos los seguidores y las personas que sigues de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás publicaciones ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index aa282b4c5bf13a..6e7ea9c9ec72d8 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tráfico limitado", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y gente a la que sigas de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 35b869486bb3d7..63449e934210ee 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Abiadura mugatua", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.title": "Ene!", + "alt_text_badge.title": "Testu alternatiboa", "announcement.announcement": "Iragarpena", "attachments_list.unprocessed": "(prozesatu gabe)", "audio.hide": "Ezkutatu audioa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 583fd4ec5a9d2b..d510c2a6a455c9 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -85,9 +85,11 @@ "alert.rate_limited.title": "محدودیت تعداد", "alert.unexpected.message": "خطایی غیرمنتظره رخ داد.", "alert.unexpected.title": "ای وای!", + "alt_text_badge.title": "متن جایگزین", "announcement.announcement": "اعلامیه", "attachments_list.unprocessed": "(پردازش نشده)", "audio.hide": "نهفتن صدا", + "block_modal.remote_users_caveat": "ما از کارساز {domain} خواهیم خواست که به تصمیم شما احترام بگذارد. با این حال، تضمینی برای رعایت آن وجود ندارد زیرا برخی کارسازها ممکن است بلوک‌ها را به‌طور متفاوتی مدیریت کنند. فرسته‌های عمومی ممکن است همچنان برای کاربران که وارد نشده قابل مشاهده باشند.", "block_modal.show_less": "نمایش کم‌تر", "block_modal.show_more": "نمایش بیش‌تر", "block_modal.they_cant_mention": "نمی‌توانند نامتان را برده یا پی‌تان بگیرند.", @@ -220,7 +222,10 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", + "domain_block_modal.you_will_lose_relationships": "شما تمام پیگیرکنندگان و افرادی که از این کارساز پیگیری می‌کنید را از دست خواهید داد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", + "domain_pill.activitypub_lets_connect": "این به شما اجازه می‌دهد تا نه تنها در ماستودون، بلکه در برنامه‌های اجتماعی مختلف نیز با افراد ارتباط برقرار کرده و تعامل داشته باشید.", + "domain_pill.activitypub_like_language": "ActivityPub مانند زبانی است که ماستودون با دیگر شبکه‌های اجتماعی صحبت می‌کند.", "domain_pill.server": "کارساز", "domain_pill.their_handle": "شناسه‌اش:", "domain_pill.their_server": "خانهٔ رقمیش. جایی که همهٔ فرسته‌هایش می‌زیند.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4caec3159fb321..0a37a96abbcb9d 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Pyyntömäärää rajoitettu", "alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.title": "Hups!", + "alt_text_badge.title": "Vaihtoehtoinen teksti", "announcement.announcement": "Tiedote", "attachments_list.unprocessed": "(käsittelemätön)", "audio.hide": "Piilota ääni", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", + "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattusi} other {{followingCountDisplay} seurattuasi}}.", + "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattusi.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 3165c101533407..70908c62dc9288 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Avmarkaður títtleiki", "alert.unexpected.message": "Ein óvæntaður feilur kom fyri.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Annar tekstur", "announcement.announcement": "Kunngerð", "attachments_list.unprocessed": "(óviðgjørt)", "audio.hide": "Fjal ljóð", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Tey vita ikki, at tey eru bannað.", "domain_block_modal.title": "Banna økisnavni?", "domain_block_modal.you_will_lose_num_followers": "Tú missir {followersCount, plural, one {{followersCountDisplay} fylgjara} other {{followersCountDisplay} fylgjarar}} og {followingCount, plural, one {{followingCountDisplay} persón, sum tú fylgir} other {{followingCountDisplay} persónar, sum tú fylgir}}.", + "domain_block_modal.you_will_lose_relationships": "Tú fer at missa allar fylgjarar og øll tey, tú fylgir á hesum ambætaranum.", "domain_block_modal.you_wont_see_posts": "Tú sært ongar postar ella boð frá brúkarum á hesum ambætara.", "domain_pill.activitypub_lets_connect": "Tað letur teg fáa samband og samvirka við fólki ikki bara á Mastodon, men á øðrum sosialum appum eisini.", "domain_pill.activitypub_like_language": "ActivityPub er málið, sum Mastodon tosar við onnur sosial netverk.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 2161591dcd40c7..6d64c6f712eea5 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -221,6 +221,7 @@ "domain_block_modal.they_cant_follow": "Ní féidir le duine ar bith ón bhfreastalaí seo tú a leanúint.", "domain_block_modal.they_wont_know": "Ní bheidh a fhios acu go bhfuil bac orthu.", "domain_block_modal.title": "Blocáil fearann?", + "domain_block_modal.you_will_lose_num_followers": "Caillfidh tú {followersCount, plural, one {{followersCountDisplay} leantóir} two {{followersCountDisplay} leantóirí} few {{followersCountDisplay} leantóirí} many {{followersCountDisplay} leantóirí} other {{followersCountDisplay} leantóirí}} agus {followingCount, plural, one {{followingCountDisplay} duine atá á leanúint agat} two {{followingCountDisplay} daoine atá á leanúint agat} few {{followingCountDisplay} daoine atá á leanúint agat} many {{followingCountDisplay} daoine atá á leanúint agat} other {{followingCountDisplay} daoine atá á leanúint agat}}.", "domain_block_modal.you_wont_see_posts": "Ní fheicfidh tú postálacha nó fógraí ó úsáideoirí ar an bhfreastalaí seo.", "domain_pill.activitypub_lets_connect": "Ligeann sé duit ceangal agus idirghníomhú le daoine, ní hamháin ar Mastodon, ach thar aipeanna sóisialta éagsúla freisin.", "domain_pill.activitypub_like_language": "Tá GníomhaíochtPub cosúil leis an teanga a labhraíonn Mastodon le líonraí sóisialta eile.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index aa3a78fce8f897..c2b645ed0f2deb 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Límite de intentos", "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaites!", + "alt_text_badge.title": "Texto Alt", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sen procesar)", "audio.hide": "Agochar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.", "domain_block_modal.title": "Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Vas perder {followersCount, plural, one {{followersCountDisplay} seguidora} other {{followersCountDisplay} seguidoras}} e {followingCount, plural, one {{followingCountDisplay} persoa que segues} other {{followingCountDisplay} persoas que segues}}.", + "domain_block_modal.you_will_lose_relationships": "Vas perder todas as seguidoras e seguimentos a persoas deste servidor.", "domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.", "domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras sociais.", "domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 2e48cb626df40b..34a9949afd1a1c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -221,6 +221,8 @@ "domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.", "domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.", "domain_block_modal.title": "Letiltsuk a domaint?", + "domain_block_modal.you_will_lose_num_followers": "El fogsz veszíteni {followersCount, plural, one {{followersCountDisplay} követőt} other {{followersCountDisplay} követőt}} és {followingCount, plural, one {{followingCountDisplay} követett személyt} other {{followingCountDisplay} követett személyt}}.", + "domain_block_modal.you_will_lose_relationships": "Minden követőt és követett személyt el fogsz veszíteni erről a kiszolgálóról.", "domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.", "domain_pill.activitypub_lets_connect": "Lehetővé teszi, hogy kapcsolatba lépj nem csak a Mastodonon, hanem a más közösségi alkalmazásokon lévő emberekkel is.", "domain_pill.activitypub_like_language": "Az ActivityPub olyan mint egy nyelv, amelyet a Mastodon a más közösségi hálózatokkal való kommunikációra használ.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index aa284685e72173..b47590a64c7ae6 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -1,6 +1,7 @@ { "about.blocks": "Jerata servili", "about.contact": "Kontaktajo:", + "about.disclaimer": "Mastodon esas libera, publikfonta e komercmarko di Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Expliko nedisponebla", "about.domain_blocks.preamble": "Mastodon generale permisas on vidar kontenajo e interagar kun uzanti de irga altra servilo en fediverso. Existas eceptioni quo facesis che ca partikulara servilo.", "about.domain_blocks.silenced.explanation": "On generale ne vidar profili e kontenajo de ca servilo, se on ne reale trovar o voluntale juntar per sequar.", @@ -10,6 +11,7 @@ "about.not_available": "Ca informo ne igesis che ca servilo.", "about.powered_by": "Necentraligita sociala ret quo povigesas da {mastodon}", "about.rules": "Servilreguli", + "account.account_note_header": "Personala noto", "account.add_or_remove_from_list": "Insertez o removez de listi", "account.badges.bot": "Boto", "account.badges.group": "Grupo", @@ -29,9 +31,12 @@ "account.featured_tags.last_status_never": "Nula posti", "account.featured_tags.title": "Estalita hashtagi di {name}", "account.follow": "Sequar", + "account.follow_back": "Anke sequez", "account.followers": "Sequanti", "account.followers.empty": "Nulu sequas ca uzanto til nun.", + "account.followers_counter": "{count, plural,one {{counter} sequanto} other {{counter} sequanti}}", "account.following": "Sequata", + "account.following_counter": "{count, plural,one {{counter} sequato} other {{counter} sequati}}", "account.follows.empty": "Ca uzanto ne sequa irgu til nun.", "account.go_to_profile": "Irez al profilo", "account.hide_reblogs": "Celez repeti de @{name}", @@ -47,6 +52,7 @@ "account.mute_notifications_short": "Silencigez avizi", "account.mute_short": "Silencigez", "account.muted": "Silencigata", + "account.mutual": "Mutuala", "account.no_bio": "Deskriptajo ne provizesis.", "account.open_original_page": "Apertez originala pagino", "account.posts": "Mesaji", @@ -56,6 +62,7 @@ "account.requested_follow": "{name} demandis sequar tu", "account.share": "Partigez profilo di @{name}", "account.show_reblogs": "Montrez repeti de @{name}", + "account.statuses_counter": "{count, plural,one {{counter} mesajo} other {{counter} mesaji}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Desblokusar {domain}", "account.unblock_short": "Desblokusar", @@ -78,10 +85,21 @@ "alert.rate_limited.title": "Demandi limitizita", "alert.unexpected.message": "Neexpektita eroro eventis.", "alert.unexpected.title": "Problemo!", + "alt_text_badge.title": "Alternativa texto", "announcement.announcement": "Anunco", "attachments_list.unprocessed": "(neprocedita)", "audio.hide": "Celez audio", + "block_modal.remote_users_caveat": "Ni questionos {domain} di la servilo por respektar vua decido. Publika posti forsan ankore estas videbla a neenirinta uzanti.", + "block_modal.show_less": "Montrar mine", + "block_modal.show_more": "Montrar plue", + "block_modal.they_cant_mention": "Oli ne povas mencionar o sequar vu.", + "block_modal.they_cant_see_posts": "Oli ne povas vidar vua mesaji e vu ne vidos vidar olia.", + "block_modal.they_will_know": "Oli povas vidar ke oli esas blokusita.", + "block_modal.title": "Blokusar uzanto?", + "block_modal.you_wont_see_mentions": "Vu ne vidos mesaji qua mencionas oli.", "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", + "boost_modal.reblog": "Ka repetar posto?", + "boost_modal.undo_reblog": "Ka retrorepetar posto?", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -138,30 +156,47 @@ "compose_form.lock_disclaimer.lock": "klefagesas", "compose_form.placeholder": "Quo esas en tua spirito?", "compose_form.poll.duration": "Votpostoduro", + "compose_form.poll.multiple": "Multopla selekteso", + "compose_form.poll.option_placeholder": "Selektato {number}", + "compose_form.poll.single": "Selektez un", "compose_form.poll.switch_to_multiple": "Chanjez votposto por permisar multiselektaji", "compose_form.poll.switch_to_single": "Chanjez votposto por permisar una selektajo", + "compose_form.poll.type": "Stilo", + "compose_form.publish": "Posto", "compose_form.publish_form": "Publish", + "compose_form.reply": "Respondez", + "compose_form.save_changes": "Aktualigez", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Kontenajaverto (selektebla)", "confirmation_modal.cancel": "Anulez", "confirmations.block.confirm": "Restriktez", "confirmations.delete.confirm": "Efacez", "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.title": "Ka efacar posto?", "confirmations.delete_list.confirm": "Efacez", "confirmations.delete_list.message": "Ka vu certe volas netempale efacar ca listo?", + "confirmations.delete_list.title": "Ka efacar listo?", "confirmations.discard_edit_media.confirm": "Efacez", "confirmations.discard_edit_media.message": "Vu havas nesparita chanji di mediodeskript o prevido, vu volas jus efacar?", "confirmations.edit.confirm": "Modifikez", "confirmations.edit.message": "Modifikar nun remplasos la mesajo quon vu nune skribas. Ka vu certe volas procedar?", + "confirmations.edit.title": "Ka remplasar posto?", "confirmations.logout.confirm": "Ekirez", "confirmations.logout.message": "Ka tu certe volas ekirar?", + "confirmations.logout.title": "Ka ekirar?", "confirmations.mute.confirm": "Silencigez", "confirmations.redraft.confirm": "Efacez e riskisez", "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.", + "confirmations.redraft.title": "Ka efacar & riskisar posto?", "confirmations.reply.confirm": "Respondez", "confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?", + "confirmations.reply.title": "Ka remplasar posto?", "confirmations.unfollow.confirm": "Desequez", "confirmations.unfollow.message": "Ka vu certe volas desequar {name}?", + "confirmations.unfollow.title": "Ka retrosequar uzanto?", + "content_warning.hide": "Celez posto", + "content_warning.show": "Montrez nur", "conversation.delete": "Efacez konverso", "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", @@ -181,6 +216,28 @@ "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.", "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.", "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.", + "domain_block_modal.block": "Blokusez servilo", + "domain_block_modal.block_account_instead": "Blokusez @{name} vice", + "domain_block_modal.they_can_interact_with_old_posts": "Personi de ca servilo povas interagar kun vua desnova posti.", + "domain_block_modal.they_cant_follow": "Nulu de ca servilo povas sequar vu.", + "domain_block_modal.they_wont_know": "Lu ne savos ke lu blokusesis.", + "domain_block_modal.title": "Ka blokusar domeno?", + "domain_block_modal.you_will_lose_num_followers": "Vu desganos {followersCount, plural, one {{followersCountDisplay} sequanto} other {{followersCountDisplay} sequanti}} e {followingCount, plural, one {{followingCountDisplay} persono quan vu sequas} other {{followingCountDisplay} personi quan vu sequas}}.", + "domain_block_modal.you_will_lose_relationships": "Vu desganos omna sequanti e sequati de ca servilo.", + "domain_block_modal.you_wont_see_posts": "Vu ne vidos postoi o savigi de uzanti en ca servilo.", + "domain_pill.activitypub_lets_connect": "Ol povigas vu kuneskas e interagar kun personi ne nur sur Mastodon, o anke kun dessama socia softwari.", + "domain_pill.activitypub_like_language": "ActivityPub esas kam linguo quan Mastodon parolas kun altra socia reti.", + "domain_pill.server": "Servilo", + "domain_pill.their_handle": "Lua nomo:", + "domain_pill.their_server": "Lua komputala hemo, e havas omna lua posti.", + "domain_pill.their_username": "Lua unika identesilo sur lua servilo. Posible trovar uzanti kun sama uzantonomo sur dessama servili.", + "domain_pill.username": "Uzantonomo", + "domain_pill.whats_in_a_handle": "Quo esas nomo?", + "domain_pill.who_they_are": "Pro ke nomo esas deskripto di ulu, vu povas interagar kun personi tra socia interreto kun .", + "domain_pill.who_you_are": "Pro ke vua nomo esas deskripto pri vu e vua situo, personi povas interagar kun vu tra socia interreto kun .", + "domain_pill.your_handle": "Vua nomo:", + "domain_pill.your_server": "Vua komputerala hemo qua havas omna vua posti. On povas transferar a altra servili ulatempe e anke adportar vua sequanti.", + "domain_pill.your_username": "Vua unika identesilo sur lua servilo. Posible trovar uzanti kun sama uzantonomo sur dessama servili.", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Co esas quon ol semblos tale:", "emoji_button.activity": "Ago", @@ -217,6 +274,7 @@ "empty_column.list": "There is nothing in this list yet.", "empty_column.lists": "Vu ne havas irga listi til nun. Kande vu kreas talo, ol montresos hike.", "empty_column.mutes": "Vu ne silencigis irga uzanti til nun.", + "empty_column.notification_requests": "Finis. Kande vu recevas nova savigi, oli aparos hike segun vua preferaji.", "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", "error.unexpected_crash.explanation": "Pro eroro en nia kodexo o vidilkonciliebloproblemo, ca pagino ne povas korekte montresar.", @@ -247,12 +305,30 @@ "filter_modal.select_filter.subtitle": "Usez disponebla grupo o kreez novajo", "filter_modal.select_filter.title": "Filtragez ca posto", "filter_modal.title.status": "Filtragez posto", + "filter_warning.matches_filter": "Sama kam filtrilo \"{title}\"", + "filtered_notifications_banner.pending_requests": "De {count, plural,=0 {nulu} one {1 persono} other {# personi}} quan vu forsan konocas", + "filtered_notifications_banner.title": "Filtrilita savigi", "firehose.all": "Omno", "firehose.local": "Ca servilo", "firehose.remote": "Altra servili", "follow_request.authorize": "Yurizar", "follow_request.reject": "Refuzar", "follow_requests.unlocked_explanation": "Quankam vua konto ne klefklozesis, la {domain} laborero pensas ke vu forsan volas kontralar sequodemandi de ca konti manuale.", + "follow_suggestions.curated_suggestion": "Selektato de jeranto", + "follow_suggestions.dismiss": "Ne montrez pluse", + "follow_suggestions.featured_longer": "Selektesis da la grupo di {domain}", + "follow_suggestions.friends_of_friends_longer": "Populara inter personi quan vu sequas", + "follow_suggestions.hints.featured": "Ca profilo selektesis da la grupo di {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ca profilo esas populara inter personi quan vu sequas.", + "follow_suggestions.hints.most_followed": "Vua profilo esas un de maxim sequita sur {domain}.", + "follow_suggestions.hints.most_interactions": "Ca profilo recente populareskis sur {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ca profilo esas simila a la profili quan vu recente sequis.", + "follow_suggestions.personalized_suggestion": "Personalita sugestato", + "follow_suggestions.popular_suggestion": "Populara sugestato", + "follow_suggestions.popular_suggestion_longer": "Populara sur {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Simila a profili quan vu recente sequis", + "follow_suggestions.view_all": "Videz omno", + "follow_suggestions.who_to_follow": "Sequindo", "followed_tags": "Hashtagi sequita", "footer.about": "Pri co", "footer.directory": "Profilcheflisto", @@ -279,6 +355,14 @@ "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", + "hints.profiles.followers_may_be_missing": "Sequanti di ca profilo forsan ne esas hike.", + "hints.profiles.follows_may_be_missing": "Sequati di ca profilo forsan ne esas hike.", + "hints.profiles.posts_may_be_missing": "Kelka posti sur ca profilo forsan ne esas hike.", + "hints.profiles.see_more_followers": "Vidar plu multa sequanti sur {domain}", + "hints.profiles.see_more_follows": "Vidar plu multa sequati sur {domain}", + "hints.profiles.see_more_posts": "Vidar plu multa posti sur {domain}", + "hints.threads.replies_may_be_missing": "Respondi de altra servili forsan ne esas hike.", + "hints.threads.see_more": "Vidar plu multa demandi sur {domain}", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", "home.hide_announcements": "Celez anunci", @@ -286,6 +370,17 @@ "home.pending_critical_update.link": "Vidar aktualigaji", "home.pending_critical_update.title": "Sekuresala aktualigajo gravega disponebla!", "home.show_announcements": "Montrez anunci", + "ignore_notifications_modal.disclaimer": "Mastodon ne povas savigar uzanti ke vu ignoris olia savigi. Ignorar savigi ne cesos ipse mesaji sendesar.", + "ignore_notifications_modal.filter_instead": "Filtrar vice", + "ignore_notifications_modal.filter_to_act_users": "Vu povos aceptar, refuzar o raportar uzanti", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtro helpas evitar posibla konfuzo", + "ignore_notifications_modal.filter_to_review_separately": "Vu povas kontrolar filtrita savigi separe", + "ignore_notifications_modal.ignore": "Ignorez savigi", + "ignore_notifications_modal.limited_accounts_title": "Ka ignorar savigi de jerita konti?", + "ignore_notifications_modal.new_accounts_title": "Ka ignorar savigi de nova konti?", + "ignore_notifications_modal.not_followers_title": "Ka ignorar savigi de personi qua ne sequas vu?", + "ignore_notifications_modal.not_following_title": "Ka ignorar savigi de personi quan vu ne sequas?", + "ignore_notifications_modal.private_mentions_title": "Ka ignorar savigi de nekonocita privata mencionii?", "interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.", "interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.", "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.", @@ -341,9 +436,13 @@ "lightbox.close": "Klozar", "lightbox.next": "Nexta", "lightbox.previous": "Antea", + "lightbox.zoom_in": "Grandigez a reala grandeso", + "lightbox.zoom_out": "Grandigez por fitigar", "limited_account_hint.action": "Jus montrez profilo", "limited_account_hint.title": "Ca profilo celesas dal jereri di {domain}.", "link_preview.author": "Da {name}", + "link_preview.more_from_author": "Plua de {name}", + "link_preview.shares": "{count, plural,one {{counter} posto} other {{counter} posti}}", "lists.account.add": "Insertez a listo", "lists.account.remove": "Efacez de listo", "lists.delete": "Efacez listo", @@ -360,8 +459,19 @@ "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", "loading_indicator.label": "Kargante…", + "media_gallery.hide": "Celez", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Celez de savigi", + "mute_modal.hide_options": "Celez preferaji", + "mute_modal.indefinite": "Til me retrosilencigas lu", + "mute_modal.show_options": "Montrez preferaji", + "mute_modal.they_can_mention_and_follow": "Lu povas mencionar e sequar vu, ma vu ne vidos lu.", + "mute_modal.they_wont_know": "Lu ne savos ke lu silencigesis.", + "mute_modal.title": "Ka silencigar uzanto?", + "mute_modal.you_wont_see_mentions": "Vu ne vidos posti qua mencionas lu.", + "mute_modal.you_wont_see_posts": "Lu ankore povas vidar vua posti, ma vu ne vidos lua.", "navigation_bar.about": "Pri co", + "navigation_bar.administration": "Administro", "navigation_bar.advanced_interface": "Apertez per retintervizajo", "navigation_bar.blocks": "Blokusita uzeri", "navigation_bar.bookmarks": "Libromarki", @@ -378,6 +488,7 @@ "navigation_bar.follows_and_followers": "Sequati e sequanti", "navigation_bar.lists": "Listi", "navigation_bar.logout": "Ekirar", + "navigation_bar.moderation": "Jero", "navigation_bar.mutes": "Celita uzeri", "navigation_bar.opened_in_classic_interface": "Posti, konti e altra pagini specifika apertesas en la retovidilo klasika.", "navigation_bar.personal": "Personala", @@ -388,20 +499,71 @@ "navigation_bar.security": "Sekureso", "not_signed_in_indicator.not_signed_in": "Vu mustas enirar por acesar ca moyeno.", "notification.admin.report": "{name} raportizis {target}", + "notification.admin.report_account": "{name} raportis {count, plural,one {1 posto} other {# posti}} de {target} pro {category}", + "notification.admin.report_account_other": "{name} raportis {count, plural,one {1 posto} other {# posti}} de {target}", + "notification.admin.report_statuses": "{name} raportis {target} pro {category}", + "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} registresis", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} enrejistris", "notification.favourite": "{name} favorizis tua mesajo", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {# altri}} favorizis vua posto", "notification.follow": "{name} sequeskis tu", + "notification.follow.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} sequis vu", "notification.follow_request": "{name} demandas sequar vu", + "notification.follow_request.name_and_others": "{name} e {count, plural,one {# altru} other {# altri}} volas sequar vu", + "notification.label.mention": "Mencionez", + "notification.label.private_mention": "Privata menciono", + "notification.label.private_reply": "Privata respondo", + "notification.label.reply": "Respondez", + "notification.mention": "Mencionez", + "notification.moderation-warning.learn_more": "Lernez pluse", + "notification.moderation_warning": "Vu recevis jeraverto", + "notification.moderation_warning.action_delete_statuses": "Kelka vua posti efacesis.", + "notification.moderation_warning.action_disable": "Vua konto estas desaktivigita.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelka vua posti markizesis quale sentoza.", + "notification.moderation_warning.action_none": "Vua konto recevis jeraverto.", + "notification.moderation_warning.action_sensitive": "Vua posti markizesos quale sentoza pos nun.", + "notification.moderation_warning.action_silence": "Vua konto limitizesis.", + "notification.moderation_warning.action_suspend": "Vua konto restriktesis.", "notification.own_poll": "Vua votposto finigis", + "notification.poll": "Votposto quan vu partoprenis finis", "notification.reblog": "{name} repetis tua mesajo", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {#altri}} repetis vua posto", + "notification.relationships_severance_event": "Desganis konekteso kun {name}", + "notification.relationships_severance_event.account_suspension": "Administranto de {from} restriktis {target}, do vu ne povas plue recevar novaji de lu o interagar kun lu.", + "notification.relationships_severance_event.domain_block": "Administranto de {from} blokusis {target}, e anke {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {# konti}} quan vu sequas.", + "notification.relationships_severance_event.learn_more": "Lernez pluse", + "notification.relationships_severance_event.user_domain_block": "Vu blokusis {target}, do efacis {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {#konti}} quan vu sequis.", "notification.status": "{name} nove postigis", "notification.update": "{name} modifikis posto", + "notification_requests.accept": "Aceptez", + "notification_requests.accept_multiple": "{count, plural, one {Aceptar # demando…} other {Aceptar # demandi…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar demando} other {Aceptar demandi}}", + "notification_requests.confirm_accept_multiple.message": "Vu aceptos {count, plural, one {1 savigdemando} other {# savigdemandi}}. Ka vu certe volas durar?", + "notification_requests.confirm_accept_multiple.title": "Ka aceptar savigdemandi?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorez demando} other {Ignorez demandi}}", + "notification_requests.confirm_dismiss_multiple.message": "Vu ignoros {count, plural, one {1 savigdemando} other {# savigdemandi}}. Vu ne povas facile ganar {count, plural, one {ol} other {oli}} pluse. Ka vu esas certe ke vu volas durar?", + "notification_requests.confirm_dismiss_multiple.title": "Ka ignorar savigdemandi?", + "notification_requests.dismiss": "Ignorez", + "notification_requests.dismiss_multiple": "{count, plural,one {Ignorez # demando…} other {Ignorez # demandi…}}", + "notification_requests.edit_selection": "Modifikez", + "notification_requests.exit_selection": "Finas", + "notification_requests.explainer_for_limited_account": "Savigi de ca konto filtresis pro ke la konto limitizesis da jeranto.", + "notification_requests.explainer_for_limited_remote_account": "Savigi de ca konto filtresis pro ke la konto o olua servilo limitizesis da jeranto.", + "notification_requests.maximize": "Parmontrez", + "notification_requests.minimize_banner": "Celez banero di filtrita savigi", + "notification_requests.notifications_from": "Savigi de {name}", + "notification_requests.title": "Filtrita savigi", + "notification_requests.view": "Videz savigi", "notifications.clear": "Efacar savigi", "notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?", + "notifications.clear_title": "Ka efacar savigi?", "notifications.column_settings.admin.report": "Nova raporti:", "notifications.column_settings.admin.sign_up": "Nova registranti:", "notifications.column_settings.alert": "Desktopavizi", "notifications.column_settings.favourite": "Favoriziti:", + "notifications.column_settings.filter_bar.advanced": "Montrez omna kategorii", + "notifications.column_settings.filter_bar.category": "Rapidfiltrilbaro", "notifications.column_settings.follow": "Nova sequanti:", "notifications.column_settings.follow_request": "Nova sequodemandi:", "notifications.column_settings.mention": "Mencioni:", @@ -427,6 +589,23 @@ "notifications.permission_denied": "Desktopavizi esas nedisplonebla pro antea refuzita vidilpermisdemando", "notifications.permission_denied_alert": "Desktopavizi ne povas aktivigesar pro ke vidilpermiso refuzesis", "notifications.permission_required": "Desktopavizi esas nedisplonebla pro ke bezonata permiso ne donesis.", + "notifications.policy.accept": "Aceptez", + "notifications.policy.accept_hint": "Montrez en savigi", + "notifications.policy.drop": "Ignorez", + "notifications.policy.drop_hint": "Nihiligez lu", + "notifications.policy.filter": "Filtrez", + "notifications.policy.filter_hint": "Sendez a enbuxo di filtrita savigi", + "notifications.policy.filter_limited_accounts_hint": "Limitizesis da serviljeranti", + "notifications.policy.filter_limited_accounts_title": "Jerita konti", + "notifications.policy.filter_new_accounts.hint": "Kreesis depos {days, plural, one {1 dio} other {# dii}}", + "notifications.policy.filter_new_accounts_title": "Nova konti", + "notifications.policy.filter_not_followers_hint": "Inkluzanta personi qua sequas vu min kam {days, plural, one {1 dio} other {# dii}}", + "notifications.policy.filter_not_followers_title": "Nesequanti", + "notifications.policy.filter_not_following_hint": "Til vu manuale aprobas lu", + "notifications.policy.filter_not_following_title": "Nesequati", + "notifications.policy.filter_private_mentions_hint": "Filtrita se ol ne esas respondo a vua sua menciono o se vu sequas la sendanto", + "notifications.policy.filter_private_mentions_title": "Nekonocita privata mencioni", + "notifications.policy.title": "Regular savigi de…", "notifications_permission_banner.enable": "Aktivigez desktopavizi", "notifications_permission_banner.how_to_control": "Por ganar avizi kande Mastodon ne esas apertita, aktivigez dekstopavizi. Vu povas precize regularar quale interakti facas deskstopavizi tra la supera {icon} butono pos oli aktivigesis.", "notifications_permission_banner.title": "Irga kozo ne pasas vu", @@ -464,6 +643,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Ka vu savas? Vu povas sekurigar vua konto per pozar 2-faktora verifiko en preferaji de vua konto. Telefonilnombro ne bezonesis!", + "onboarding.tips.accounts_from_other_servers": "Ka vu savas? Vu povas interagar kun profili sur altra servili senrupte!", + "onboarding.tips.migration": "Ka vu savas? Se vu sentas ke {domain} ne esas apta por vu en la futuro, vu povas transferar a altra servilo di Mastodon sen malganar vua sequanti!", + "onboarding.tips.verification": "Ka vu savas? Vu povas verifikar vua konto per pozi ligilo a vua profilo di Mastodon sur vua sua retsituo e adjuntar la retsituo a vua profilo. Senpage!", "password_confirmation.exceeds_maxlength": "La konfirmo dil pasvorto superesas la limito pri longeso di pasvorti", "password_confirmation.mismatching": "La konfirmo dil pasvorto ne egalesas", "picture_in_picture.restore": "Retropozez", @@ -478,7 +661,15 @@ "poll_button.add_poll": "Insertez votposto", "poll_button.remove_poll": "Efacez votposto", "privacy.change": "Aranjar privateso di mesaji", + "privacy.direct.long": "Omnu quan mencionesis en la posto", + "privacy.direct.short": "Specifika personi", + "privacy.private.long": "Nur vua sequanti", + "privacy.private.short": "Sequanti", + "privacy.public.long": "Ulu de e ne de Mastodon", "privacy.public.short": "Publike", + "privacy.unlisted.additional": "Co kondutas exakte kam publika, escepte la posto ne aparos en viva novajari o gretiketi, exploro, o sercho di Mastodon, mem se vu esas volunta totkonte.", + "privacy.unlisted.long": "Min multa algoritmoridikuli", + "privacy.unlisted.short": "Deslauta publiko", "privacy_policy.last_updated": "Antea novajo ye {date}", "privacy_policy.title": "Privatesguidilo", "recommended": "Rekomendata", @@ -496,7 +687,9 @@ "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hodie", + "reply_indicator.attachments": "{count, plural, one {# atachajo} other {# atachaji}}", "reply_indicator.cancel": "Nihiligar", + "reply_indicator.poll": "Votposto", "report.block": "Restriktez", "report.block_explanation": "Vu ne vidos olia posti. Oli ne povas vidar vua posti o sequar vu. Oli savos ke oli restriktesis.", "report.categories.legal": "Legala", @@ -539,9 +732,13 @@ "report.unfollow_explanation": "Vu sequas ca konto. Por ne vidar olia posti en vua hemniuzeto pluse, desequez oli.", "report_notification.attached_statuses": "{count, plural,one {{count} posti} other {{count} posti}} adjuntesas", "report_notification.categories.legal": "Legala", + "report_notification.categories.legal_sentence": "deslegala kontenajo", "report_notification.categories.other": "Altra", + "report_notification.categories.other_sentence": "altra", "report_notification.categories.spam": "Spamo", + "report_notification.categories.spam_sentence": "sendacho", "report_notification.categories.violation": "Regulnesequo", + "report_notification.categories.violation_sentence": "regulviolaco", "report_notification.open": "Apertez raporto", "search.no_recent_searches": "Nula serchi recenta", "search.placeholder": "Serchez", @@ -569,8 +766,11 @@ "server_banner.about_active_users": "Personi quo uzas ca servilo dum antea 30 dii (monate aktiva uzanti)", "server_banner.active_users": "aktiva uzanti", "server_banner.administered_by": "Administresis da:", + "server_banner.is_one_of_many": "{domain} esas 1 de multa sendependa servili di Mastodon quan vu povas uzar por partoprenar en la fediverso.", "server_banner.server_stats": "Servilstatistiko:", "sign_in_banner.create_account": "Kreez konto", + "sign_in_banner.follow_anyone": "On povas sequar ulu sur tota fediverso e vidar omno ye kronologia ordino. Nula algoritmi, reklami o klikatrapo omnaloke.", + "sign_in_banner.mastodon_is": "Mastodon esas la maxim bona voyo por saveskar eventi.", "sign_in_banner.sign_in": "Enirez", "sign_in_banner.sso_redirect": "Enirar o krear konto", "status.admin_account": "Apertez jerintervizajo por @{name}", @@ -580,14 +780,18 @@ "status.bookmark": "Libromarko", "status.cancel_reblog_private": "Desrepetez", "status.cannot_reblog": "Ca posto ne povas repetesar", + "status.continued_thread": "Durigita postaro", "status.copy": "Copy link to status", "status.delete": "Efacar", "status.detailed_status": "Detala konversvido", "status.direct": "Private mencionez @{name}", "status.direct_indicator": "Privata menciono", "status.edit": "Modifikez", + "status.edited": "Recente modifikesis ye {date}", "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", + "status.embed": "Ganez adherkodexo", "status.favourite": "Favorizar", + "status.favourites": "{count, plural, one {favorizo} other {favorizi}}", "status.filter": "Filtragez ca posto", "status.history.created": "{name} kreis ye {date}", "status.history.edited": "{name} modifikis ye {date}", @@ -606,9 +810,11 @@ "status.reblog": "Repetez", "status.reblog_private": "Repetez kun originala videbleso", "status.reblogged_by": "{name} repetis", + "status.reblogs": "{count, plural, one {repeto} other {repeti}}", "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", "status.remove_bookmark": "Efacez libromarko", + "status.replied_in_thread": "Respondesis en postaro", "status.replied_to": "Respondis a {name}", "status.reply": "Respondar", "status.replyAll": "Respondar a filo", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fdb56f542e90fe..ef709516c23bee 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Limitazione per eccesso di richieste", "alert.unexpected.message": "Si è verificato un errore imprevisto.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Testo alternativo", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non elaborato)", "audio.hide": "Nascondi audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.", "domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.", "domain_block_modal.title": "Bloccare il dominio?", + "domain_block_modal.you_will_lose_num_followers": "Perderai {followersCount, plural, one {{followersCountDisplay} seguace} other {{followersCountDisplay} seguaci}} e {followingCount, plural, one {{followingCountDisplay} persona che segui} other {{followingCountDisplay} persone che segui}}.", + "domain_block_modal.you_will_lose_relationships": "Perderai tutti i seguaci e le persone che segui da questo server.", "domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.", "domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.", "domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 7dcc3468026d2e..0eb3dbf5b447fb 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Sparta apribota.", "alert.unexpected.message": "Įvyko netikėta klaida.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alternatyvus tekstas", "announcement.announcement": "Skelbimas", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", @@ -98,7 +99,7 @@ "block_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.", "boost_modal.combo": "Galima paspausti {combo}, kad praleisti tai kitą kartą", "boost_modal.reblog": "Pasidalinti įrašą?", - "boost_modal.undo_reblog": "Panaikinti pasidalintą įrašą?", + "boost_modal.undo_reblog": "Nebepasidalinti įrašo?", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", "bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", "bundle_column_error.error.title": "O, ne!", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Niekas iš šio serverio negali tavęs sekti.", "domain_block_modal.they_wont_know": "Jie nežinos, kad buvo užblokuoti.", "domain_block_modal.title": "Blokuoti serverį?", + "domain_block_modal.you_will_lose_num_followers": "Prarasi {followersCount, plural, one {{followersCountDisplay} sekėją} few {{followersCountDisplay} sekėjus} many {{followersCountDisplay} sekėjo} other {{followersCountDisplay} sekėjų}} ir {followingCount, plural, one {{followingCountDisplay} žmogų, kurį seki} few {{followingCountDisplay} žmones, kuriuos seki} many {{followingCountDisplay} žmonės, kuriuos seki} other {{followingCountDisplay} žmonių, kurių seki}}.", + "domain_block_modal.you_will_lose_relationships": "Prarasi visus sekėjus ir žmones, kuriuos seki iš šio serverio.", "domain_block_modal.you_wont_see_posts": "Nematysi naudotojų įrašų ar pranešimų šiame serveryje.", "domain_pill.activitypub_lets_connect": "Tai leidžia tau prisijungti ir bendrauti su žmonėmis ne tik „Mastodon“ platformoje, bet ir įvairiose socialinėse programėlėse.", "domain_pill.activitypub_like_language": "„ActivityPub“ – tai tarsi kalba, kuria „Mastodon“ kalba su kitais socialiniais tinklais.", @@ -765,7 +768,7 @@ "status.admin_status": "Atidaryti šį įrašą prižiūrėjimo sąsajoje", "status.block": "Blokuoti @{name}", "status.bookmark": "Pridėti į žymės", - "status.cancel_reblog_private": "Nebepakelti", + "status.cancel_reblog_private": "Nebepasidalinti", "status.cannot_reblog": "Šis įrašas negali būti pakeltas.", "status.continued_thread": "Tęsiama gijoje", "status.copy": "Kopijuoti nuorodą į įrašą", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index f8e98e865bf578..282c345def6b24 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Dataverkeer beperkt", "alert.unexpected.message": "Er deed zich een onverwachte fout voor", "alert.unexpected.title": "Oeps!", + "alt_text_badge.title": "Alt-tekst", "announcement.announcement": "Mededeling", "attachments_list.unprocessed": "(niet verwerkt)", "audio.hide": "Audio verbergen", @@ -216,12 +217,13 @@ "dismissable_banner.explore_tags": "Deze hashtags winnen aan populariteit op het sociale web (fediverse). Hashtags die door meer verschillende mensen worden gebruikt staan hoger.", "dismissable_banner.public_timeline": "Dit zijn de meest recente openbare berichten van accounts op het sociale web (fediverse) die door mensen op {domain} worden gevolgd.", "domain_block_modal.block": "Server blokkeren", - "domain_block_modal.block_account_instead": "In plaats hiervan {name} blokkeren", + "domain_block_modal.block_account_instead": "Alleen {name} blokkeren", "domain_block_modal.they_can_interact_with_old_posts": "Mensen op deze server kunnen interactie hebben met jouw oude berichten.", "domain_block_modal.they_cant_follow": "Niemand op deze server kan jou volgen.", "domain_block_modal.they_wont_know": "Ze krijgen niet te weten dat ze worden geblokkeerd.", "domain_block_modal.title": "Server blokkeren?", "domain_block_modal.you_will_lose_num_followers": "Je verliest {followersCount, plural, one {{followersCountDisplay} volger} other {{followersCountDisplay} volgers}} en {followingCount, plural, one {{followingCountDisplay} persoon die jij volgt} other {{followingCountDisplay} personen die jij volgt}}.", + "domain_block_modal.you_will_lose_relationships": "Je verliest alle volgers en mensen die je volgt van deze server.", "domain_block_modal.you_wont_see_posts": "Je ziet geen berichten of meldingen meer van gebruikers op deze server.", "domain_pill.activitypub_lets_connect": "Het zorgt ervoor dat je niet alleen maar kunt verbinden en communiceren met mensen op Mastodon, maar ook met andere sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal die Mastodon met andere sociale netwerken spreekt.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 452894079701ba..8e9dd96baf67df 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Ograniczenie liczby zapytań", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Tekst alternatywny", "announcement.announcement": "Ogłoszenie", "attachments_list.unprocessed": "(nieprzetworzone)", "audio.hide": "Ukryj dźwięk", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", "domain_block_modal.title": "Zablokować domenę?", "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", + "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących z tego serwera i wszystkie osoby które obserwujesz na tym serwerze.", "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 402c0b38b5a750..d1a3ecdaa73aff 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tentativas limitadas", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Eita!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Comunicados", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Dominio do bloco", + "domain_block_modal.you_will_lose_num_followers": "Você perderá {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que você segue} other {{followingCountDisplay} pessoas que você segue}}.", + "domain_block_modal.you_will_lose_relationships": "Você irá perder todos os seguidores e pessoas que você segue neste servidor.", "domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.", "domain_pill.activitypub_lets_connect": "Ele permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.", "domain_pill.activitypub_like_language": "ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 2195e6bf9abe12..084ac9945fae18 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", + "alt_text_badge.title": "Tekst alternativ", "announcement.announcement": "Lajmërim", "attachments_list.unprocessed": "(e papërpunuar)", "audio.hide": "Fshihe audion", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "S’do ta dinë se janë bllokuar.", "domain_block_modal.title": "Të bllokohet përkatësia?", "domain_block_modal.you_will_lose_num_followers": "Do të humbni {followersCount, plural, one {{followersCountDisplay} ndjekës} other {{followersCountDisplay} ndjekës}} dhe {followingCount, plural, one {{followingCountDisplay} person që ndiqni} other {{followingCountDisplay} vetë që ndiqni}}.", + "domain_block_modal.you_will_lose_relationships": "Do të humbni krejt ndjekësit dhe personat që ndiqni nga ky shërbyes.", "domain_block_modal.you_wont_see_posts": "S’do të shihni postime, apo njoftime nga përdorues në këtë shërbyes.", "domain_pill.activitypub_lets_connect": "Ju lejon të lidheni dhe ndërveproni me persona jo thjesht në Mastodon, por edhe nëpër aplikacione të ndryshme shoqërore.", "domain_pill.activitypub_like_language": "ActivityPub është si gjuha me të cilën Mastodon-i komunikon me rrjete të tjerë shoqërorë.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 509dbc7a217781..6feae5d137d8ef 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Aşırı istek gönderildi", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", + "alt_text_badge.title": "Alternatif metin", "announcement.announcement": "Duyuru", "attachments_list.unprocessed": "(işlenmemiş)", "audio.hide": "Sesi gizle", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Engellendiklerini bilmeyecekler.", "domain_block_modal.title": "Alan adını engelle?", "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, one {{followersCountDisplay} takipçi} other {{followersCountDisplay} takipçi}} ve {followingCount, plural, one {{followingCountDisplay} takip ettiğiniz kişi} other {{followingCountDisplay} takip ettiğiniz kişi}} kaybedeceksiniz.", + "domain_block_modal.you_will_lose_relationships": "Bu sunucudaki tüm takip edenleri ve takip ettiklerinizi kaybedeceksiniz.", "domain_block_modal.you_wont_see_posts": "Bu sunucudaki kullanıcılardan gelen gönderileri veya bildirimleri göremezsiniz.", "domain_pill.activitypub_lets_connect": "Sadece Mastodon üzerindeki değil, diğer sosyal uygulamalardaki kişilerle de bağlantı kurmanıza ve etkileşmenize olanak sağlar.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon'un diğer sosyal ağlarla konuşmak için kullandığı dil gibidir.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 1b5dbb4c9bffeb..1753d0bebe44df 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Швидкість обмежена", "alert.unexpected.message": "Сталася неочікувана помилка.", "alert.unexpected.title": "Ой!", + "alt_text_badge.title": "Альтернативний текст", "announcement.announcement": "Оголошення", "attachments_list.unprocessed": "(не оброблено)", "audio.hide": "Сховати аудіо", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.", "domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.", "domain_block_modal.title": "Заблокувати домен?", + "domain_block_modal.you_will_lose_num_followers": "Ви втратите {followersCount, plural, one {{followersCountDisplay} підписника} few {{followersCountDisplay} підписника} many {{followersCountDisplay} підписників} other {{followersCountDisplay} підписника}} та {followingCount, plural, one {{followingCountDisplay} особу, за якою ви стежите} few {{followingCountDisplay} особи, за якими ви стежите} many {{followingCountDisplay} осіб, за якими ви стежите} other {{followingCountDisplay} особу, за якою ви стежите}}.", + "domain_block_modal.you_will_lose_relationships": "Ви втратите всіх підписників і людей, на яких ви підписані.", "domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.", "domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних застосунках.", "domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Mastodon розмовляє з іншими соціальними мережами.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9c5c9ae1e4fc51..12d9bd43540b31 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -222,6 +222,7 @@ "domain_block_modal.they_wont_know": "Họ sẽ không biết đã bị bạn chặn.", "domain_block_modal.title": "Chặn máy chủ?", "domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.", + "domain_block_modal.you_will_lose_relationships": "Bạn sẽ mất tất cả người theo dõi và những người bạn theo dõi từ máy chủ này.", "domain_block_modal.you_wont_see_posts": "Bạn sẽ không thấy tút hoặc thông báo từ thành viên máy chủ này.", "domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.", "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 1f539727f96ac0..8ce888a0396290 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "频率受限", "alert.unexpected.message": "发生了意外错误。", "alert.unexpected.title": "哎呀!", + "alt_text_badge.title": "替代文本", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未处理)", "audio.hide": "隐藏音频", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", "domain_block_modal.title": "屏蔽该域名?", + "domain_block_modal.you_will_lose_num_followers": "你将失去 {followersCount, plural, other {{followersCountDisplay} 名关注者}}和 {followingCount, plural, other {{followingCountDisplay} 名关注}}。", + "domain_block_modal.you_will_lose_relationships": "你将失去在此实例上的所有关注和关注者。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index c585f98b6eb40d..530202f0a5b0fe 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生非預期的錯誤。", "alert.unexpected.title": "哎呀!", + "alt_text_badge.title": "ALT 說明文字", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未經處理)", "audio.hide": "隱藏音訊", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "他們不會知道他們已被封鎖。", "domain_block_modal.title": "是否封鎖該網域?", "domain_block_modal.you_will_lose_num_followers": "您將會失去 {followersCount, plural, other {{followersCountDisplay} 個跟隨者}} 與 {followingCount, plural, other {{followingCountDisplay} 個您跟隨之帳號}}.", + "domain_block_modal.you_will_lose_relationships": "您將失去所有的跟隨者與您自此伺服器跟隨之帳號。", "domain_block_modal.you_wont_see_posts": "您不會見到來自此伺服器使用者之任何嘟文或推播通知。", "domain_pill.activitypub_lets_connect": "它使您能於 Mastodon 及其他不同的社群應用程式與人連結及互動。", "domain_pill.activitypub_like_language": "ActivityPub 像是 Mastodon 與其他社群網路溝通時所用的語言。", diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index 6426defc55a41d..2b0d5091985242 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -15,6 +15,12 @@ io: user/invite_request: text: Rezono errors: + attributes: + domain: + invalid: ne esas valida domennomo + messages: + invalid_domain_on_line: "%{value} ne esas valida domennomo" + too_many_lines: esas plu kam la limito qua esas %{limit} linei models: account: attributes: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index e0a68f7b46834e..965f354a35f82c 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -873,6 +873,9 @@ ca: message_html: No has definit cap norma del servidor. sidekiq_process_check: message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Reviseu la configuració de Sidekiq + software_version_check: + action: Veure les actualitzacions disponibles + message_html: Hi ha disponible una actualització de Mastodon. software_version_critical_check: action: Veure actualitzacions disponibles message_html: Hi ha disponible una actualització crítica de Mastodon, si us plau, actualitza-la el més abans possible. diff --git a/config/locales/da.yml b/config/locales/da.yml index 96b27c91b3a733..0da901d4a8c48c 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -875,6 +875,9 @@ da: message_html: Ingen serverregler defineret. sidekiq_process_check: message_html: Ingen Sidekiq-proces kører for %{value}-kø(er). Gennemgå Sidekiq-opsætningen + software_version_check: + action: Se tilgængelige opdateringer + message_html: En Mastodon-opdatering er tilgængelig. software_version_critical_check: action: Se tilgængelige opdateringer message_html: En kritisk Mastodon-opdatering er tilgængelig. Opdatér hurtigst muligt. diff --git a/config/locales/de.yml b/config/locales/de.yml index 5af77c431d6f8a..b98a96a1cd37ac 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -875,6 +875,9 @@ de: message_html: Du hast keine Serverregeln festgelegt. sidekiq_process_check: message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfe deine Sidekiq-Konfiguration + software_version_check: + action: Verfügbare Updates ansehen + message_html: Ein Update für Mastodon ist verfügbar. software_version_critical_check: action: Verfügbare Updates ansehen message_html: Ein kritisches Mastodon-Update ist verfügbar – bitte aktualisiere so schnell wie möglich. @@ -1692,6 +1695,7 @@ de: delete: Kontolöschung development: Entwicklung edit_profile: Profil bearbeiten + export: Exportieren featured_tags: Vorgestellte Hashtags import: Importieren import_and_export: Importieren und exportieren diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 6bf0b52cef18b0..49637579e4dfe8 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -12,6 +12,7 @@ io: last_attempt: Tu ankore povas probar unfoye ante ke tua konto esos extingita. locked: Tua konto esas extingita. not_found_in_database: Nejusta %{authentication_keys}. + omniauth_user_creation_failure: Eroro dum ke kreas konto por ca identeso. pending: Vua konti ankore kontrolesas. timeout: Vua kunsido expiris. Voluntez rienirar por avancar. unauthenticated: Tu devas enirar o membreskar por durar. @@ -47,14 +48,19 @@ io: subject: Instrucioni por chanjar la pasvorto title: Richanjo di pasvorto two_factor_disabled: + explanation: Eniro esas nun posibla per nur retpostoadreso e pasvorto. subject: 'Mastodon: 2-faktorverifiko deaktivigesis' + subtitle: 2-faktora verifiko por vua konto desaktivigesis. title: 2FA deaktivigesis two_factor_enabled: + explanation: Ficho facesis da parigita softwaro TOTP bezonesos por eniro. subject: 'Mastodon: 2-faktorverifiko aktivigesis' + subtitle: 2-faktora verifiko aktivigesis por vua konto. title: 2FA aktivigesis two_factor_recovery_codes_changed: explanation: Antea rigankodexi devalidesis e novo facesis. subject: 'Mastodon: 2-faktorrigankodexi rifacesis' + subtitle: Antea rigankodexi desvalidesis e novo facesis. title: 2FA-rigankodexi chanjesis unlock_instructions: subject: Instructioni por riacendar la konto @@ -68,9 +74,13 @@ io: subject: 'Mastodon: Sekurklefo efacesis' title: 1 de vua sekurklefi efacesis webauthn_disabled: + explanation: Verifiko per sekuresklefi desaktivigesis por vua konto. + extra: Eniro esas nun posibla per nur ficho qua facesis da parigita softwaro TOTP. subject: 'Mastodon: Verifiko per sekurklefi deaktivigesis' title: Sekurklefi deaktivigesis webauthn_enabled: + explanation: Sekuresklefoa verifiko aktivigesis por vua konto. + extra: Vua sekuresklefo povas nun uzesar por eniro. subject: 'Mastodon: Sekurklefverifiko aktivigesis' title: Sekurklefi aktivigesis omniauth_callbacks: diff --git a/config/locales/doorkeeper.ga.yml b/config/locales/doorkeeper.ga.yml index 27082028c75572..b8ee3497b79db1 100644 --- a/config/locales/doorkeeper.ga.yml +++ b/config/locales/doorkeeper.ga.yml @@ -60,6 +60,7 @@ ga: error: title: Tharla earráid new: + prompt_html: Ba mhaith le %{client_name} cead rochtain a fháil ar do chuntas. Ní cheadaigh an t-iarratas seo ach amháin má aithníonn tú an fhoinse seo agus go bhfuil muinín agat as. review_permissions: Ceadanna a athbhreithniú title: Tá údarú ag teastáil show: diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index f7f9dce7eacf80..85bf5d60c02a05 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -60,6 +60,7 @@ pt-BR: error: title: Ocorreu um erro new: + prompt_html: "%{client_name} gostaria de permissão para acessar sua conta. Aprove esta solicitação apenas se você reconhecer e confiar nesta fonte." review_permissions: Rever permissões title: Autorização necessária show: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 21afcd990fc2e7..fbd48d1c316097 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1692,6 +1692,7 @@ en-GB: delete: Account deletion development: Development edit_profile: Edit profile + export: Export featured_tags: Featured hashtags import: Import import_and_export: Import and export diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 01685f99fe30be..292bbbff513aac 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1692,6 +1692,7 @@ es-AR: delete: Eliminación de la cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Etiquetas destacadas import: Importar import_and_export: Importación y exportación diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index a8ff5c6938be0c..45d88645029d06 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1692,6 +1692,7 @@ es-MX: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/es.yml b/config/locales/es.yml index ab7fd3bc54de22..85bcf9065a8b48 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1692,6 +1692,7 @@ es: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 9bd0f12241f6a8..258dda8cc421d3 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1692,6 +1692,7 @@ fi: delete: Tilin poisto development: Kehitys edit_profile: Muokkaa profiilia + export: Vie featured_tags: Suositellut aihetunnisteet import: Tuo tietoja import_and_export: Tuonti ja vienti diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 50b4802bc7d78a..034e1f6bd250e0 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1692,6 +1692,7 @@ fo: delete: Striking av kontu development: Menning edit_profile: Rætta vanga + export: Flyt út featured_tags: Varpaði frámerki import: Innflyt import_and_export: Innflyt og útflyt diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 95136239328434..c678e93323e7c4 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1770,6 +1770,7 @@ ga: delete: Scriosadh cuntais development: Forbairt edit_profile: Cuir an phróifíl in eagar + export: Easpórtáil featured_tags: Haischlib faoi thrácht import: Iompórtáil import_and_export: Iompórtáil agus easpórtáil diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 2eadb2ba6b04a6..e396761f7eb5d5 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -543,7 +543,7 @@ gl: total_reported: Denuncias sobre eles total_storage: Adxuntos multimedia totals_time_period_hint_html: Os totais aquí mostrados inclúen todo o historial de datos. - unknown_instance: Actualmente non temos constancia deste rexistro no servidor. + unknown_instance: Actualmente non hai rexistro deste dominio no servidor. invites: deactivate_all: Desactivar todo filter: @@ -602,7 +602,7 @@ gl: resolve_description_html: Non se van tomar accións contra a conta denunciada, nin se gardarán avisos, e pecharase a denuncia. silence_description_html: A conta será visible só para quen xa a está a seguir ou quen a buscou manualmente, limitando moito o seu alcance. Pódese cambiar. Isto pecha tódalas denuncias acerca desta conta. suspend_description_html: A conta e todo o seu contido non serán accesible e finalmente eliminaranse, será imposible interactuar con ela. A decisión é reversible durante 30 días. Isto pecha tódalas denuncias sobre esta conta. - actions_description_html: Decide a acción a tomar para resolver esta denuncia. Se tomas accións punitivas contra a conta denunciada enviaraselle un correo, excepto se está indicada a categoría Spam. + actions_description_html: Decide a acción a tomar para resolver esta denuncia. Se tomas accións punitivas contra a conta denunciada enviaráselle un correo, excepto se está indicada a categoría Spam. actions_description_remote_html: Decide a acción a tomar para resolver a denuncia. Isto só lle afecta ao xeito en que o teu servidor se comunica con esta conta remota e xestiona o seu contido. actions_no_posts: Esta denuncia non ten publicacións asociadas para eliminar add_to_report: Engadir máis á denuncia @@ -875,6 +875,9 @@ gl: message_html: Non tes definidas regras para o servidor. sidekiq_process_check: message_html: Non hai procesos Sidekiq a funcionar para a cola(s) %{value}. Revisa a túa configuración para Sidekiq + software_version_check: + action: Ver as actualizacións dispoñibles + message_html: Hai dispoñible unha actualización para Mastodon. software_version_critical_check: action: Mira as actualizacións dispoñibles message_html: Hai unha actualización crítica de Mastodon dispoñible, actualiza axiña. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 2f6a4c57783346..11f2a415f26731 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1692,6 +1692,7 @@ hu: delete: Fiók törlése development: Fejlesztőknek edit_profile: Profil szerkesztése + export: Exportálás featured_tags: Kiemelt hashtagek import: Importálás import_and_export: Import és export diff --git a/config/locales/it.yml b/config/locales/it.yml index 9fdeede8bf5b91..a89fa0a53e444e 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -875,6 +875,9 @@ it: message_html: Non hai definito alcuna regola del server. sidekiq_process_check: message_html: Nessun processo di Sidekiq in esecuzione per le code di %{value}. Sei pregato di revisionare la tua configurazione di Sidekiq + software_version_check: + action: Visualizza gli aggiornamenti disponibili + message_html: È disponibile un aggiornamento per Mastodon. software_version_critical_check: action: Visualizza gli aggiornamenti disponibili message_html: Un aggiornamento critico di Mastodon è disponibile, ti preghiamo di aggiornare il più rapidamente possibile. @@ -1694,6 +1697,7 @@ it: delete: Cancellazione account development: Sviluppo edit_profile: Modifica profilo + export: Esporta featured_tags: Hashtag in evidenza import: Importa import_and_export: Importa ed esporta diff --git a/config/locales/lt.yml b/config/locales/lt.yml index ef13817028e3c2..3b63ba6dcf9fc8 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -608,6 +608,9 @@ lt: message_html: Tavo Elasticsearch klasteris turi tik vieną mazgą, ES_PRESET turėtų būti nustatyta į single_node_cluster. elasticsearch_running_check: message_html: Nepavyko prijungti prie Elasticsearch. Patikrink, ar ji veikia, arba išjunk viso teksto paiešką. + software_version_check: + action: Žiūrėti galimus naujinimus + message_html: Yra „Mastodon“ naujinimas. tags: moderation: not_trendable: Netendencinga @@ -1090,6 +1093,7 @@ lt: delete: Paskyros trynimas development: Kūrimas edit_profile: Redaguoti profilį + export: Eksportuoti featured_tags: Rodomi saitažodžiai import: Importuoti import_and_export: Importas ir eksportas diff --git a/config/locales/nl.yml b/config/locales/nl.yml index afc4652bf600cc..7681a04eaecdfa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -875,6 +875,9 @@ nl: message_html: Je hebt voor deze server geen regels opgesteld. sidekiq_process_check: message_html: Er draait geen Sidekiqproces voor de wachtrij(en) %{value}. Controleer je Sidekiqconfiguratie + software_version_check: + action: Beschikbare updates bekijken + message_html: Er is een Mastodon-update beschikbaar. software_version_critical_check: action: Bekijk de beschikbare updates message_html: Er is een kritieke update voor Mastodon beschikbaar. Update zo snel mogelijk. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 98f62e123a707b..81047d92e7d4eb 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -875,6 +875,9 @@ nn: message_html: Du har ikke definert noen serverregler. sidekiq_process_check: message_html: Ingen Sidekiq-prosess kjører for %{value} køen(e). Vennligst se gjennom Sidekiq-konfigurasjonen din + software_version_check: + action: Sjå tilgjengelege oppdateringar + message_html: Ei Mastodon-oppdatering er tilgjengeleg. software_version_critical_check: action: Sjå tilgjengelege oppdateringar message_html: Ei kritisk oppdatering til Mastodon er tilgjengeleg. Oppdater så snart som mogleg. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e68ea2b16acd1c..3aaf7a5a57a2a4 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -903,6 +903,9 @@ pl: message_html: Nie zdefiniowano żadnych reguł serwera. sidekiq_process_check: message_html: Brak uruchomionego procesu Sidekiq dla kolejki(-ek) %{value}. Sprawdź konfigurację Sidekiq + software_version_check: + action: Pokaż dostępne aktualizacje + message_html: Dostępna aktualizacja Mastodona. software_version_critical_check: action: Pokaż dostępne aktualizacje message_html: Dostępna krytyczna aktualizacja Mastodona, zaktualizuj jak tylko będzie to możliwe. @@ -1744,6 +1747,7 @@ pl: delete: Usuń konto development: Tworzenie aplikacji edit_profile: Edytuj profil + export: Eksportowanie danych featured_tags: Wyróżnione hashtagi import: Importowanie danych import_and_export: Import i eksport diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ba21dd1b3bb079..30022be93ab0b9 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1692,6 +1692,7 @@ pt-BR: delete: Exclusão de conta development: Desenvolvimento edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags em destaque import: Importar import_and_export: Importar e exportar diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index fe8243b0e9fb57..5cbbd9d06e90e3 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -3,6 +3,7 @@ io: simple_form: hints: account: + attribution_domains_as_text: Protektas de falsa akreditaji. discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. display_name: Vua tota nomo o vua gaya nomo. fields: Vua retsituo, pronomi, evo, irgo quan vu volas. @@ -39,12 +40,14 @@ io: text: Vu povas nur apelar striko unafoye defaults: autofollow: Personi quo registresesas tra invito automatika sequos vu + avatar: WEBP, PNG, GIF o JPG. Maxime %{size}. Esos mikrigita a %{dimensions}px bot: Signalez a altra personi ke la konto precipue havas automatikigita agi e forsan ne surveyesas context: Situeso kande filtrilo debas aplikesar current_password: Por sekuresorezoni, pozez pasvorto di ca konto current_username: Por konfirmar, pozez uzantonomo di ca konto digest: Nur sendesas pos longa neaktiveso e nur se vu ganis irga mesaji dum ke vu esas neprezenta email: Vu sendesos konfirmretposto + header: WEBP, PNG, GIF o JPG. Maxime %{size}. Esos mikrigita a %{dimensions}px inbox_url: Kopiez URL de frontpagino de relayo quon vu volas uzar irreversible: Filtrita posti neinversigeble desaparos, mem se filtro efacesas pose locale: Linguo di uzantointervizajo, retposti e pulsavizi @@ -75,10 +78,15 @@ io: warn: Celez filtrita kontenajo dop avert quo montras titulo di filtrilo form_admin_settings: activity_api_enabled: Quanto de lokale publikigita posti, aktiva uzanti e nova registri, donita semanope + app_icon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di softwaro sur poshaparati kun personaligita imajeto. + backups_retention_period: Uzanto povas facar arkivi di sua posti por deskargar pose. Se ol esas positiva nombro, ca arkivi automate efacesis de vua konserveyo pos la decidita quanto di dii. bootstrap_timeline_accounts: Ca konti pinglagesos a super sequorekomendi di nova uzanti. closed_registrations_message: Montresas kande registradi klozesas + content_cache_retention_period: Omna posti de altra servili efacesos (anke repeti e respondi) pos decidita quanto di dii, sen ye irga lokala uzantointerago kun ti posti. Privata mencioni inter uzanto de dessanta servili anke desganos e neposible riganesos. custom_css: Vu povas pozar kustumizita staili en retverso di Mastodon. + favicon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di Mastodon kun personaligita imajeto. mascot: Remplas montreso en avanca retintervizajo. + media_cache_retention_period: Medidoseri de posti quan posti da deslokala uzanti retummemoresis sur vua servilo. Se medidatumo demandesas pos ol efacesas, ol rideskargesos. peers_api_enabled: Listo di domeni quin ca servilo trovis en la fediverso. Nula informo inkluzesas hike pri ka vu federas kun partikulara servilo, nur ke vua servilo savas pri lo. Co es uzata da enti qui kolektas statistiki pri federeso generale. profile_directory: La profilcheflisto montras omna uzanti quo voluntale volas esar deskovrebla. require_invite_text: Kande registradi bezonas manuala aprobo, ol kauzigas "Por quo vu volas juntas?" textoenpozo esar obliganta @@ -111,6 +119,7 @@ io: sign_up_requires_approval: Nova registro bezonos vua aprobo severity: Selektez quo eventos kun demandi de ca IP rule: + hint: Nemusta. Ol donas plu multa detali pri la regulo text: Deskriptez regulo o bezonaj por uzanti en ca servilo. Vu debas lasar lu esar korta e simpla sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. @@ -122,6 +131,7 @@ io: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: chosen_languages: Kande marketigesis, nur posti en selektesis lingui montresos en publika tempolinei + role: La rolo donas certena permisi a la uzanto. user_role: color: Koloro quo uzesas por rolo en tota UI, quale RGB kun hexformato highlighted: Co kauzigas rolo divenar publike videbla @@ -130,9 +140,11 @@ io: position: Plu alta rolo decidas problemsolvo en kelka situeso. Kelka agi povas nur eventar a roli kun plu basa prioreso webhook: events: Selektigez eventi por sendar + template: Facez vua sua JSON per variebla interpolo. Lasez quale nulo por originala JSON. url: Ibe eventi sendesos labels: account: + attribution_domains_as_text: Nur permisas specifika retsitui discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo @@ -201,6 +213,7 @@ io: setting_default_privacy: Videbleso di la mesaji setting_default_sensitive: Sempre markizez medii quale sentoza setting_delete_modal: Montrez konfirmdialogo ante efacar posto + setting_disable_hover_cards: Desaktivigez profilprevido dum klikpaso setting_disable_swiping: Desaktivigez fingromovi setting_display_media: Mediomontrajo setting_display_media_default: Originalo @@ -232,10 +245,13 @@ io: warn: Celez kun averto form_admin_settings: activity_api_enabled: Publikigez rezumstatistiko pri uzantoaktiveso en API + app_icon: Softwarimajeto backups_retention_period: Uzantoarkivretendurtempo bootstrap_timeline_accounts: Sempre rekomendez ca konti a nova uzanti closed_registrations_message: Kustumizita mesajo kande registradi ne esas disponebla + content_cache_retention_period: Fora kontenajretenperiodo custom_css: Kustumizita CSS + favicon: Imajeto mascot: Kustumizita reprezentimajo (oldo) media_cache_retention_period: Mediimemorajretendurtempo peers_api_enabled: Publikigez listo di deskovrita servili en API @@ -291,6 +307,7 @@ io: patch: Notifikar pri problemosolvanta aktualigi trending_tag: Nova tendenco bezonas kontrolo rule: + hint: Plusa informo text: Regulo settings: indexable: Inkluzar profilopagino en serchili @@ -299,6 +316,7 @@ io: listable: Permisez ca hashtago aparar en trovaji e sugestaji name: Hashtago trendable: Permisez ca hashtago aparar che tendenci + usable: Permisez posti uzar ca gretiketo lokale user: role: Rolo time_zone: Klokozono @@ -310,9 +328,11 @@ io: position: Prioreso webhook: events: Aktivigita eventi + template: Pagkargshablono url: URL di finpunto 'no': Ne not_recommended: Ne rekomendesas + overridden: Remplesis recommended: Rekomendito required: mark: "*" diff --git a/config/locales/sq.yml b/config/locales/sq.yml index c1ed91cf96ac45..2f05d7860cb3cd 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -871,6 +871,9 @@ sq: message_html: S’keni përcaktuar ndonjë rregull shërbyesi. sidekiq_process_check: message_html: S’ka proces Sidekiq në punë për %{value} radhë. Ju lutemi, shqyrtoni formësimin tuaj për Sidekiq-un + software_version_check: + action: Shihni përditësimet e gatshme + message_html: Ka gati një përditësim Mastodon-i. software_version_critical_check: action: Shihni përditësimet e gatshme message_html: Ka të gatshëm një përditësim kritik të Mastodon-it, ju lutemi, përditësojeni sa më shpejt të jetë e mundur. diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d2cf412cc9bd10..2935948a475f31 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1692,6 +1692,7 @@ tr: delete: Hesap silme development: Geliştirme edit_profile: Profili düzenle + export: Dışa Aktar featured_tags: Öne çıkan etiketler import: İçe aktar import_and_export: İçe ve dışa aktar diff --git a/config/locales/uk.yml b/config/locales/uk.yml index d0164d846a89ae..de1847a745aa05 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -903,6 +903,9 @@ uk: message_html: Ви не визначили будь-які правила сервера. sidekiq_process_check: message_html: Не працює процес Sidekiq для %{value} черги. Перегляньте конфігурації вашого Sidekiq + software_version_check: + action: Переглянути доступні оновлення + message_html: Доступне оновлення Mastodon. software_version_critical_check: action: Переглянути доступні оновлення message_html: Виявлено критичне оновлення Mastodon. Оновіться якнайшвидше. @@ -1744,6 +1747,7 @@ uk: delete: Видалення облікового запису development: Розробка edit_profile: Редагувати профіль + export: Експорт featured_tags: Рекомендовані хештеґи import: Імпорт import_and_export: Імпорт та експорт diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index ade35ceb626009..a73871115b3a72 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -861,6 +861,9 @@ zh-CN: message_html: 你没有定义任何服务器规则。 sidekiq_process_check: message_html: "%{value} 队列未运行任何 Sidekiq 进程。请检查你的 Sidekiq 配置" + software_version_check: + action: 查看可用更新 + message_html: 有一个 Mastodon 更新可用。 software_version_critical_check: action: 查看可用更新 message_html: 有一个紧急Mastodon紧急更新可用,请尽快更新。 @@ -1666,6 +1669,7 @@ zh-CN: delete: 删除账户 development: 开发 edit_profile: 更改个人资料 + export: 导出 featured_tags: 精选的话题标签 import: 导入 import_and_export: 导入和导出 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 41c4c8a534e482..4079f68a50c38e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -863,6 +863,9 @@ zh-TW: message_html: 您尚未定義任何伺服器規則。 sidekiq_process_check: message_html: 沒有佇列 %{value} 的 Sidekiq 行程,請檢查您的 Sidekiq 設定組態 + software_version_check: + action: 檢視可取得的更新 + message_html: 有可取得的 Mastodon 更新。 software_version_critical_check: action: 檢視可取得的更新 message_html: 有可取得的重要 Mastodon 更新,請立即升級。 From 675ec1a0adf9b179c9b5fe407f7926c94266dd69 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:18:42 -0400 Subject: [PATCH 136/467] Only show recently used tags hint when they are present (#32120) --- app/helpers/settings_helper.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 64f2ad70a66e16..fd631ce92ecd30 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -10,16 +10,17 @@ def ui_languages end def featured_tags_hint(recently_used_tags) - safe_join( - [ - t('simple_form.hints.featured_tag.name'), - safe_join( - links_for_featured_tags(recently_used_tags), - ', ' - ), - ], - ' ' - ) + recently_used_tags.present? && + safe_join( + [ + t('simple_form.hints.featured_tag.name'), + safe_join( + links_for_featured_tags(recently_used_tags), + ', ' + ), + ], + ' ' + ) end def session_device_icon(session) From 04dd3a9eb6f28eb6387dd480b0556e5f7aba772b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:20:21 -0400 Subject: [PATCH 137/467] Wrap webhook event label with `samp` tag (#32115) --- app/views/admin/webhooks/_form.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/webhooks/_form.html.haml b/app/views/admin/webhooks/_form.html.haml index 2b948b9a6aa210..bdba08a45425cf 100644 --- a/app/views/admin/webhooks/_form.html.haml +++ b/app/views/admin/webhooks/_form.html.haml @@ -13,7 +13,8 @@ as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', - disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) } + disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) }, + label_method: ->(event) { tag.samp(event) } .fields-group = form.input :template, From e02e88bff4ad5f5acd017fa340f745b87f430a46 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:21:27 -0400 Subject: [PATCH 138/467] Use previously extracted model constants in form `maxlength` attributes (#32113) --- app/models/form/admin_settings.rb | 4 +++- app/views/admin/settings/branding/show.html.haml | 2 +- app/views/auth/registrations/new.html.haml | 2 +- app/views/disputes/strikes/show.html.haml | 2 +- app/views/settings/profiles/show.html.haml | 8 ++++---- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 85b913cf80aadc..515909d5cfd2f7 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -73,6 +73,8 @@ class Form::AdminSettings authorized_fetch: :authorized_fetch_mode?, }.freeze + DESCRIPTION_LIMIT = 200 + attr_accessor(*KEYS) validates :registrations_mode, inclusion: { in: %w(open approved none) }, if: -> { defined?(@registrations_mode) } @@ -82,7 +84,7 @@ class Form::AdminSettings validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks) } validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks_rationale) } validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true, if: -> { defined?(@media_cache_retention_period) || defined?(@content_cache_retention_period) || defined?(@backups_retention_period) } - validates :site_short_description, length: { maximum: 200 }, if: -> { defined?(@site_short_description) } + validates :site_short_description, length: { maximum: DESCRIPTION_LIMIT }, if: -> { defined?(@site_short_description) } validates :status_page_url, url: true, allow_blank: true validate :validate_site_uploads diff --git a/app/views/admin/settings/branding/show.html.haml b/app/views/admin/settings/branding/show.html.haml index e03c16a25a88f8..62e9c724592d92 100644 --- a/app/views/admin/settings/branding/show.html.haml +++ b/app/views/admin/settings/branding/show.html.haml @@ -25,7 +25,7 @@ .fields-group = f.input :site_short_description, as: :text, - input_html: { rows: 2, maxlength: 200 }, + input_html: { rows: 2, maxlength: Form::AdminSettings::DESCRIPTION_LIMIT }, wrapper: :with_block_label .fields-row diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 1e5aac2976a77e..d58f1ccf4d38bb 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -21,7 +21,7 @@ = f.simple_fields_for :account do |ff| = ff.input :username, append: "@#{site_hostname}", - input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: 30 }, + input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: Account::USERNAME_LENGTH_LIMIT }, label: false, required: true, wrapper: :with_label diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 2bfecebbff9af2..150dc06759188d 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -76,7 +76,7 @@ = simple_form_for(@appeal, url: disputes_strike_appeal_path(@strike)) do |f| .fields-group - = f.input :text, wrapper: :with_label, input_html: { maxlength: 500 } + = f.input :text, wrapper: :with_label, input_html: { maxlength: Appeal::TEXT_LENGTH_LIMIT } .actions = f.button :button, t('disputes.strikes.appeals.submit'), type: :submit diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 9790df7d05cff7..8fb21325197e3c 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -15,10 +15,10 @@ .fields-row .fields-row__column.fields-row__column-6 .fields-group - = f.input :display_name, wrapper: :with_block_label, input_html: { maxlength: 30, data: { default: @account.username } } + = f.input :display_name, wrapper: :with_block_label, input_html: { maxlength: Account::DISPLAY_NAME_LENGTH_LIMIT, data: { default: @account.username } } .fields-group - = f.input :note, wrapper: :with_block_label, input_html: { maxlength: 500 } + = f.input :note, wrapper: :with_block_label, input_html: { maxlength: Account::NOTE_LENGTH_LIMIT } .fields-row__column.fields-group.fields-row__column-6 .input.with_block_label @@ -27,8 +27,8 @@ = f.simple_fields_for :fields do |fields_f| .row - = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: 255 } - = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: 255 } + = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL } + = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL } .fields-row .fields-row__column.fields-row__column-6 From cdd7526531f3b2f2fa39497ce2d89002b4f428e3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:22:40 -0400 Subject: [PATCH 139/467] Remove completed TODO note in tags request spec (#32108) --- spec/requests/tags_spec.rb | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/spec/requests/tags_spec.rb b/spec/requests/tags_spec.rb index 7974a6b15267b9..fbd1f7d56ee4ae 100644 --- a/spec/requests/tags_spec.rb +++ b/spec/requests/tags_spec.rb @@ -7,18 +7,6 @@ context 'when tag exists' do let(:tag) { Fabricate :tag } - context 'with HTML format' do - # TODO: Update the have_cacheable_headers matcher to operate on capybara sessions - # Remove this example, rely on system spec (which should use matcher) - before { get tag_path(tag) } - - it 'returns http success' do - expect(response) - .to have_http_status(200) - .and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie') - end - end - context 'with JSON format' do before { get tag_path(tag, format: :json) } From 11a12e56b3480ac03921e831a7ccfcc7ade24b52 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 27 Sep 2024 17:09:39 +0200 Subject: [PATCH 140/467] Change media reordering design in the compose form in web UI (#32093) --- .../features/compose/components/upload.jsx | 81 -------- .../features/compose/components/upload.tsx | 130 ++++++++++++ .../compose/components/upload_form.jsx | 53 ----- .../compose/components/upload_form.tsx | 185 ++++++++++++++++++ app/javascript/mastodon/locales/en.json | 5 + .../mastodon/models/media_attachment.ts | 2 + .../styles/mastodon/components.scss | 59 ++++-- package.json | 3 + yarn.lock | 59 ++++++ 9 files changed, 423 insertions(+), 154 deletions(-) delete mode 100644 app/javascript/mastodon/features/compose/components/upload.jsx create mode 100644 app/javascript/mastodon/features/compose/components/upload.tsx delete mode 100644 app/javascript/mastodon/features/compose/components/upload_form.jsx create mode 100644 app/javascript/mastodon/features/compose/components/upload_form.tsx create mode 100644 app/javascript/mastodon/models/media_attachment.ts diff --git a/app/javascript/mastodon/features/compose/components/upload.jsx b/app/javascript/mastodon/features/compose/components/upload.jsx deleted file mode 100644 index 7f6ef6cfd8e418..00000000000000 --- a/app/javascript/mastodon/features/compose/components/upload.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import PropTypes from 'prop-types'; -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import classNames from 'classnames'; - -import { useDispatch, useSelector } from 'react-redux'; - -import spring from 'react-motion/lib/spring'; - -import CloseIcon from '@/material-icons/400-20px/close.svg?react'; -import EditIcon from '@/material-icons/400-24px/edit.svg?react'; -import WarningIcon from '@/material-icons/400-24px/warning.svg?react'; -import { undoUploadCompose, initMediaEditModal } from 'mastodon/actions/compose'; -import { Blurhash } from 'mastodon/components/blurhash'; -import { Icon } from 'mastodon/components/icon'; -import Motion from 'mastodon/features/ui/util/optional_motion'; - -export const Upload = ({ id, onDragStart, onDragEnter, onDragEnd }) => { - const dispatch = useDispatch(); - const media = useSelector(state => state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id)); - const sensitive = useSelector(state => state.getIn(['compose', 'spoiler'])); - - const handleUndoClick = useCallback(() => { - dispatch(undoUploadCompose(id)); - }, [dispatch, id]); - - const handleFocalPointClick = useCallback(() => { - dispatch(initMediaEditModal(id)); - }, [dispatch, id]); - - const handleDragStart = useCallback(() => { - onDragStart(id); - }, [onDragStart, id]); - - const handleDragEnter = useCallback(() => { - onDragEnter(id); - }, [onDragEnter, id]); - - if (!media) { - return null; - } - - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - const missingDescription = (media.get('description') || '').length === 0; - - return ( -
- - {({ scale }) => ( -
- {sensitive && } - -
- - -
- -
- -
-
- )} -
-
- ); -}; - -Upload.propTypes = { - id: PropTypes.string, - onDragEnter: PropTypes.func, - onDragStart: PropTypes.func, - onDragEnd: PropTypes.func, -}; diff --git a/app/javascript/mastodon/features/compose/components/upload.tsx b/app/javascript/mastodon/features/compose/components/upload.tsx new file mode 100644 index 00000000000000..3a24b28291e290 --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/upload.tsx @@ -0,0 +1,130 @@ +import { useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import classNames from 'classnames'; + +import { useSortable } from '@dnd-kit/sortable'; +import { CSS } from '@dnd-kit/utilities'; + +import CloseIcon from '@/material-icons/400-20px/close.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import WarningIcon from '@/material-icons/400-24px/warning.svg?react'; +import { + undoUploadCompose, + initMediaEditModal, +} from 'mastodon/actions/compose'; +import { Blurhash } from 'mastodon/components/blurhash'; +import { Icon } from 'mastodon/components/icon'; +import type { MediaAttachment } from 'mastodon/models/media_attachment'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +export const Upload: React.FC<{ + id: string; + dragging?: boolean; + overlay?: boolean; + tall?: boolean; + wide?: boolean; +}> = ({ id, dragging, overlay, tall, wide }) => { + const dispatch = useAppDispatch(); + const media = useAppSelector( + (state) => + state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call + .get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access + .find((item: MediaAttachment) => item.get('id') === id) as // eslint-disable-line @typescript-eslint/no-unsafe-member-access + | MediaAttachment + | undefined, + ); + const sensitive = useAppSelector( + (state) => state.compose.get('spoiler') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + + const handleUndoClick = useCallback(() => { + dispatch(undoUploadCompose(id)); + }, [dispatch, id]); + + const handleFocalPointClick = useCallback(() => { + dispatch(initMediaEditModal(id)); + }, [dispatch, id]); + + const { attributes, listeners, setNodeRef, transform, transition } = + useSortable({ id }); + + if (!media) { + return null; + } + + const focusX = media.getIn(['meta', 'focus', 'x']) as number; + const focusY = media.getIn(['meta', 'focus', 'y']) as number; + const x = (focusX / 2 + 0.5) * 100; + const y = (focusY / -2 + 0.5) * 100; + const missingDescription = + ((media.get('description') as string | undefined) ?? '').length === 0; + + const style = { + transform: CSS.Transform.toString(transform), + transition, + }; + + return ( +
+
+ {sensitive && ( + + )} + +
+ + +
+ +
+ +
+
+
+ ); +}; diff --git a/app/javascript/mastodon/features/compose/components/upload_form.jsx b/app/javascript/mastodon/features/compose/components/upload_form.jsx deleted file mode 100644 index adf5591382a49f..00000000000000 --- a/app/javascript/mastodon/features/compose/components/upload_form.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useRef, useCallback } from 'react'; - -import { useSelector, useDispatch } from 'react-redux'; - -import { changeMediaOrder } from 'mastodon/actions/compose'; - -import { Upload } from './upload'; -import { UploadProgress } from './upload_progress'; - -export const UploadForm = () => { - const dispatch = useDispatch(); - const mediaIds = useSelector(state => state.getIn(['compose', 'media_attachments']).map(item => item.get('id'))); - const active = useSelector(state => state.getIn(['compose', 'is_uploading'])); - const progress = useSelector(state => state.getIn(['compose', 'progress'])); - const isProcessing = useSelector(state => state.getIn(['compose', 'is_processing'])); - - const dragItem = useRef(); - const dragOverItem = useRef(); - - const handleDragStart = useCallback(id => { - dragItem.current = id; - }, [dragItem]); - - const handleDragEnter = useCallback(id => { - dragOverItem.current = id; - }, [dragOverItem]); - - const handleDragEnd = useCallback(() => { - dispatch(changeMediaOrder(dragItem.current, dragOverItem.current)); - dragItem.current = null; - dragOverItem.current = null; - }, [dispatch, dragItem, dragOverItem]); - - return ( - <> - - - {mediaIds.size > 0 && ( -
- {mediaIds.map(id => ( - - ))} -
- )} - - ); -}; diff --git a/app/javascript/mastodon/features/compose/components/upload_form.tsx b/app/javascript/mastodon/features/compose/components/upload_form.tsx new file mode 100644 index 00000000000000..1c01c2bd9ccc78 --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/upload_form.tsx @@ -0,0 +1,185 @@ +import { useState, useCallback, useMemo } from 'react'; + +import { useIntl, defineMessages } from 'react-intl'; + +import type { List } from 'immutable'; + +import type { + DragStartEvent, + DragEndEvent, + UniqueIdentifier, + Announcements, + ScreenReaderInstructions, +} from '@dnd-kit/core'; +import { + DndContext, + closestCenter, + KeyboardSensor, + PointerSensor, + useSensor, + useSensors, + DragOverlay, +} from '@dnd-kit/core'; +import { + SortableContext, + sortableKeyboardCoordinates, + rectSortingStrategy, +} from '@dnd-kit/sortable'; + +import { changeMediaOrder } from 'mastodon/actions/compose'; +import type { MediaAttachment } from 'mastodon/models/media_attachment'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +import { Upload } from './upload'; +import { UploadProgress } from './upload_progress'; + +const messages = defineMessages({ + screenReaderInstructions: { + id: 'upload_form.drag_and_drop.instructions', + defaultMessage: + 'To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.', + }, + onDragStart: { + id: 'upload_form.drag_and_drop.on_drag_start', + defaultMessage: 'Picked up media attachment {item}.', + }, + onDragOver: { + id: 'upload_form.drag_and_drop.on_drag_over', + defaultMessage: 'Media attachment {item} was moved.', + }, + onDragEnd: { + id: 'upload_form.drag_and_drop.on_drag_end', + defaultMessage: 'Media attachment {item} was dropped.', + }, + onDragCancel: { + id: 'upload_form.drag_and_drop.on_drag_cancel', + defaultMessage: + 'Dragging was cancelled. Media attachment {item} was dropped.', + }, +}); + +export const UploadForm: React.FC = () => { + const dispatch = useAppDispatch(); + const intl = useIntl(); + const mediaIds = useAppSelector( + (state) => + state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call + .get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access + .map((item: MediaAttachment) => item.get('id')) as List, // eslint-disable-line @typescript-eslint/no-unsafe-member-access + ); + const active = useAppSelector( + (state) => state.compose.get('is_uploading') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const progress = useAppSelector( + (state) => state.compose.get('progress') as number, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const isProcessing = useAppSelector( + (state) => state.compose.get('is_processing') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const [activeId, setActiveId] = useState(null); + const sensors = useSensors( + useSensor(PointerSensor, { + activationConstraint: { + distance: 5, + }, + }), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates, + }), + ); + + const handleDragStart = useCallback( + (e: DragStartEvent) => { + const { active } = e; + + setActiveId(active.id); + }, + [setActiveId], + ); + + const handleDragEnd = useCallback( + (e: DragEndEvent) => { + const { active, over } = e; + + if (over && active.id !== over.id) { + dispatch(changeMediaOrder(active.id, over.id)); + } + + setActiveId(null); + }, + [dispatch, setActiveId], + ); + + const accessibility: { + screenReaderInstructions: ScreenReaderInstructions; + announcements: Announcements; + } = useMemo( + () => ({ + screenReaderInstructions: { + draggable: intl.formatMessage(messages.screenReaderInstructions), + }, + + announcements: { + onDragStart({ active }) { + return intl.formatMessage(messages.onDragStart, { item: active.id }); + }, + + onDragOver({ active }) { + return intl.formatMessage(messages.onDragOver, { item: active.id }); + }, + + onDragEnd({ active }) { + return intl.formatMessage(messages.onDragEnd, { item: active.id }); + }, + + onDragCancel({ active }) { + return intl.formatMessage(messages.onDragCancel, { item: active.id }); + }, + }, + }), + [intl], + ); + + return ( + <> + + + {mediaIds.size > 0 && ( +
+ + + {mediaIds.map((id, idx) => ( + + ))} + + + + {activeId ? : null} + + +
+ )} + + ); +}; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index e86e300bcba7d8..1e78745359aa28 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -852,6 +852,11 @@ "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people who are deaf or hard of hearing", "upload_form.description": "Describe for people who are blind or have low vision", + "upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.", + "upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.", + "upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.", "upload_form.edit": "Edit", "upload_form.thumbnail": "Change thumbnail", "upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision", diff --git a/app/javascript/mastodon/models/media_attachment.ts b/app/javascript/mastodon/models/media_attachment.ts new file mode 100644 index 00000000000000..0e5b9ab555e354 --- /dev/null +++ b/app/javascript/mastodon/models/media_attachment.ts @@ -0,0 +1,2 @@ +// Temporary until we type it correctly +export type MediaAttachment = Immutable.Map; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 8cb63e42e63df6..14de6e6818bdd3 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -653,19 +653,39 @@ body > [data-popper-placement] { } &__uploads { - display: flex; - gap: 8px; padding: 0 12px; - flex-wrap: wrap; - align-self: stretch; - align-items: flex-start; - align-content: flex-start; - justify-content: center; + aspect-ratio: 3/2; + } + + .media-gallery { + gap: 8px; } &__upload { - flex: 1 1 0; - min-width: calc(50% - 8px); + position: relative; + cursor: grab; + + &.dragging { + opacity: 0; + } + + &.overlay { + height: 100%; + border-radius: 8px; + pointer-events: none; + } + + &__drag-handle { + position: absolute; + top: 50%; + inset-inline-start: 0; + transform: translateY(-50%); + color: $white; + background: transparent; + border: 0; + padding: 8px 3px; + cursor: grab; + } &__actions { display: flex; @@ -686,8 +706,7 @@ body > [data-popper-placement] { &__thumbnail { width: 100%; - height: 144px; - border-radius: 6px; + height: 100%; background-position: center; background-size: cover; background-repeat: no-repeat; @@ -7098,30 +7117,30 @@ a.status-card { gap: 2px; &--layout-2 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; } } &--layout-3 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(3) { + & > .media-gallery__item:nth-child(3) { border-start-start-radius: 0; border-end-start-radius: 0; border-start-end-radius: 0; @@ -7129,26 +7148,26 @@ a.status-card { } &--layout-4 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(3) { + & > .media-gallery__item:nth-child(3) { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(4) { + & > .media-gallery__item:nth-child(4) { border-start-start-radius: 0; border-end-start-radius: 0; border-start-end-radius: 0; diff --git a/package.json b/package.json index 08fec76465a85a..7a6dee131188ce 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,9 @@ "@babel/preset-react": "^7.22.3", "@babel/preset-typescript": "^7.21.5", "@babel/runtime": "^7.22.3", + "@dnd-kit/core": "^6.1.0", + "@dnd-kit/sortable": "^8.0.0", + "@dnd-kit/utilities": "^3.2.2", "@formatjs/intl-pluralrules": "^5.2.2", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", diff --git a/yarn.lock b/yarn.lock index eff88f772ec3cf..62a538b42cbe6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2010,6 +2010,55 @@ __metadata: languageName: node linkType: hard +"@dnd-kit/accessibility@npm:^3.1.0": + version: 3.1.0 + resolution: "@dnd-kit/accessibility@npm:3.1.0" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/4f9d24e801d66d4fbb551ec389ed90424dd4c5bbdf527000a618e9abb9833cbd84d9a79e362f470ccbccfbd6d00217a9212c92f3cef66e01c951c7f79625b9d7 + languageName: node + linkType: hard + +"@dnd-kit/core@npm:^6.1.0": + version: 6.1.0 + resolution: "@dnd-kit/core@npm:6.1.0" + dependencies: + "@dnd-kit/accessibility": "npm:^3.1.0" + "@dnd-kit/utilities": "npm:^3.2.2" + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 10c0/c793eb97cb59285ca8937ebcdfcd27cff09d750ae06722e36ca5ed07925e41abc36a38cff98f9f6056f7a07810878d76909826142a2968330e7e22060e6be584 + languageName: node + linkType: hard + +"@dnd-kit/sortable@npm:^8.0.0": + version: 8.0.0 + resolution: "@dnd-kit/sortable@npm:8.0.0" + dependencies: + "@dnd-kit/utilities": "npm:^3.2.2" + tslib: "npm:^2.0.0" + peerDependencies: + "@dnd-kit/core": ^6.1.0 + react: ">=16.8.0" + checksum: 10c0/a6066c652b892c6a11320c7d8f5c18fdf723e721e8eea37f4ab657dee1ac5e7ca710ac32ce0712a57fe968bc07c13bcea5d5599d90dfdd95619e162befd4d2fb + languageName: node + linkType: hard + +"@dnd-kit/utilities@npm:^3.2.2": + version: 3.2.2 + resolution: "@dnd-kit/utilities@npm:3.2.2" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/9aa90526f3e3fd567b5acc1b625a63177b9e8d00e7e50b2bd0e08fa2bf4dba7e19529777e001fdb8f89a7ce69f30b190c8364d390212634e0afdfa8c395e85a0 + languageName: node + linkType: hard + "@dual-bundle/import-meta-resolve@npm:^4.1.0": version: 4.1.0 resolution: "@dual-bundle/import-meta-resolve@npm:4.1.0" @@ -2753,6 +2802,9 @@ __metadata: "@babel/preset-react": "npm:^7.22.3" "@babel/preset-typescript": "npm:^7.21.5" "@babel/runtime": "npm:^7.22.3" + "@dnd-kit/core": "npm:^6.1.0" + "@dnd-kit/sortable": "npm:^8.0.0" + "@dnd-kit/utilities": "npm:^3.2.2" "@formatjs/cli": "npm:^6.1.1" "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" @@ -17205,6 +17257,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + "tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.6.3 resolution: "tslib@npm:2.6.3" From 24d3ce7bab2becc345152a143224924044ebe33c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 15:38:44 -0400 Subject: [PATCH 141/467] Add `no-toolbar` state for "nothing here" batch table views (#32128) --- app/javascript/styles/mastodon/tables.scss | 4 ++++ app/views/admin/tags/index.html.haml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 2becd85bc667ef..af8ccf5b3839ef 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -359,6 +359,10 @@ a.table-action-link { @media screen and (max-width: $no-gap-breakpoint) { border-top: 1px solid var(--background-border-color); } + + &--no-toolbar { + border-top: 1px solid var(--background-border-color); + } } @media screen and (width <= 870px) { diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index 8d76d8ffa7469f..be699e5ab2be53 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -32,7 +32,7 @@ .batch-table .batch-table__body - if @tags.empty? - = nothing_here 'nothing-here--under-tabs' + = nothing_here 'nothing-here--under-tabs nothing-here--no-toolbar' - else = render partial: 'tag', collection: @tags From 9d664f87a04b6a5157ddbe60ee33b5b7a960198e Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 27 Sep 2024 21:41:41 +0200 Subject: [PATCH 142/467] Mailer layout fixes (#32132) --- app/javascript/styles/mailer.scss | 2 ++ app/views/user_mailer/welcome.html.haml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index 2c1b443cb51114..f46160889a7a49 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -366,6 +366,7 @@ table + p { .email-header-card-banner-td { border-radius: 12px 12px 0 0; + width: 236px; height: 80px; background-color: #f3f2f5 !important; background-position: center !important; @@ -523,6 +524,7 @@ table + p { height: 40px; text-align: center; mso-padding-alt: 0 35px; + word-break: normal; } .email-btn-a { diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index 0f9cbf36ffb263..efc6cad3934526 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -9,7 +9,7 @@ %td %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.email-header-card-banner-td{ height: 140, background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } + %td.email-header-card-banner-td{ background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-header-card-body-td From c352ce6f4550a8bea554448fd48ca657bbdc50c2 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 30 Sep 2024 10:20:20 +0200 Subject: [PATCH 143/467] Fix missing permission on new embeds making them unclickable (#32135) --- public/embed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/embed.js b/public/embed.js index 3fb57469a96523..53372a38904982 100644 --- a/public/embed.js +++ b/public/embed.js @@ -81,7 +81,7 @@ const allowedPrefixes = (document.currentScript && document.currentScript.tagNam embeds.set(id, iframe); iframe.allow = 'fullscreen'; - iframe.sandbox = 'allow-scripts allow-same-origin'; + iframe.sandbox = 'allow-scripts allow-same-origin allow-popups'; iframe.style.border = 0; iframe.style.overflow = 'hidden'; iframe.style.display = 'block'; @@ -112,7 +112,7 @@ const allowedPrefixes = (document.currentScript && document.currentScript.tagNam iframe.width = container.clientWidth; iframe.height = 0; iframe.allow = 'fullscreen'; - iframe.sandbox = 'allow-scripts allow-same-origin'; + iframe.sandbox = 'allow-scripts allow-same-origin allow-popups'; iframe.style.border = 0; iframe.style.overflow = 'hidden'; iframe.style.display = 'block'; From 6037714f76910dbc15f99cbf3ab97e5d3d5006d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:47:57 +0200 Subject: [PATCH 144/467] Update dependency propshaft to v1.0.1 (#32158) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e1ea677dfd27aa..b85d97761d2dd3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -347,7 +347,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.7.2) - irb (1.14.0) + irb (1.14.1) rdoc (>= 4.0.0) reline (>= 0.4.2) jmespath (1.6.2) @@ -601,7 +601,7 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - propshaft (1.0.0) + propshaft (1.0.1) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack From f477dc399e9edf9b02c2033724a6a57679c7b286 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:53:29 +0000 Subject: [PATCH 145/467] New Crowdin Translations (automated) (#32140) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/ca.json | 5 +++++ app/javascript/mastodon/locales/da.json | 5 +++++ app/javascript/mastodon/locales/de.json | 9 +++++++-- app/javascript/mastodon/locales/eo.json | 5 +++++ app/javascript/mastodon/locales/es-AR.json | 9 +++++++-- app/javascript/mastodon/locales/es-MX.json | 17 +++++++++++------ app/javascript/mastodon/locales/es.json | 5 +++++ app/javascript/mastodon/locales/fi.json | 7 ++++++- app/javascript/mastodon/locales/fil.json | 8 +++++++- app/javascript/mastodon/locales/fo.json | 5 +++++ app/javascript/mastodon/locales/fr-CA.json | 5 +++++ app/javascript/mastodon/locales/fr.json | 5 +++++ app/javascript/mastodon/locales/ga.json | 7 +++++++ app/javascript/mastodon/locales/gl.json | 5 +++++ app/javascript/mastodon/locales/io.json | 11 ++++++++--- app/javascript/mastodon/locales/kab.json | 1 + app/javascript/mastodon/locales/ko.json | 10 +++++++++- app/javascript/mastodon/locales/lt.json | 7 ++++++- app/javascript/mastodon/locales/nl.json | 5 +++++ app/javascript/mastodon/locales/nn.json | 8 ++++++++ app/javascript/mastodon/locales/pl.json | 5 +++++ app/javascript/mastodon/locales/th.json | 1 + app/javascript/mastodon/locales/vi.json | 14 ++++++++++---- app/javascript/mastodon/locales/zh-CN.json | 5 +++++ app/javascript/mastodon/locales/zh-TW.json | 5 +++++ config/locales/activerecord.bg.yml | 6 ++++++ config/locales/de.yml | 6 +++--- config/locales/devise.eo.yml | 2 ++ config/locales/doorkeeper.bg.yml | 1 + config/locales/doorkeeper.es-AR.yml | 2 +- config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/doorkeeper.es.yml | 2 +- config/locales/doorkeeper.fr-CA.yml | 1 + config/locales/doorkeeper.fr.yml | 1 + config/locales/doorkeeper.ko.yml | 1 + config/locales/eo.yml | 4 ++++ config/locales/es-AR.yml | 3 +++ config/locales/es-MX.yml | 3 +++ config/locales/es.yml | 3 +++ config/locales/fi.yml | 3 +++ config/locales/fo.yml | 3 +++ config/locales/fr-CA.yml | 7 +++++++ config/locales/fr.yml | 9 ++++++++- config/locales/ga.yml | 3 +++ config/locales/hu.yml | 3 +++ config/locales/ko.yml | 3 +++ config/locales/nn.yml | 1 + config/locales/pt-BR.yml | 3 +++ config/locales/simple_form.bg.yml | 3 +++ config/locales/simple_form.eo.yml | 8 ++++++++ config/locales/sv.yml | 2 ++ config/locales/th.yml | 6 +++++- config/locales/tr.yml | 3 +++ config/locales/vi.yml | 5 ++++- 55 files changed, 239 insertions(+), 30 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index bf0b656f934b78..1e462ba752757c 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Скоростта е ограничена", "alert.unexpected.message": "Възникна неочаквана грешка.", "alert.unexpected.title": "Опаа!", + "alt_text_badge.title": "Алтернативен текст", "announcement.announcement": "Оповестяване", "attachments_list.unprocessed": "(необработено)", "audio.hide": "Скриване на звука", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 1cd643842cdc2a..b79ac156e229ac 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -852,6 +852,11 @@ "upload_error.poll": "No es permet carregar fitxers a les enquestes.", "upload_form.audio_description": "Descriu-ho per a persones amb problemes d'audició", "upload_form.description": "Descriu-ho per a persones amb problemes de visió", + "upload_form.drag_and_drop.instructions": "Per a agafar un fitxer multimèdia adjunt, premeu l'espai o la tecla Enter. Mentre l'arrossegueu, utilitzeu les fletxes per a moure l'adjunt en qualsevol direcció. Premeu espai o Enter un altre cop per a deixar-lo anar a la seva nova posició, o premeu la tecla d'escapament per cancel·lar.", + "upload_form.drag_and_drop.on_drag_cancel": "S'ha cancel·lat l'arrossegament. S'ha deixat anar l'adjunt multimèdia {item}.", + "upload_form.drag_and_drop.on_drag_end": "S'ha deixat anar l'adjunt multimèdia {item}.", + "upload_form.drag_and_drop.on_drag_over": "S'ha mogut l'adjunt multimèdia {item}.", + "upload_form.drag_and_drop.on_drag_start": "S'ha agafat l'adjunt multimèdia {item}.", "upload_form.edit": "Edita", "upload_form.thumbnail": "Canvia la miniatura", "upload_form.video_description": "Descriu-ho per a persones amb problemes de visió o audició", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 8223177ab93a9e..659f807d050c59 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -852,6 +852,11 @@ "upload_error.poll": "Filupload ikke tilladt for afstemninger.", "upload_form.audio_description": "Beskrivelse til hørehæmmede", "upload_form.description": "Beskrivelse til svagtseende", + "upload_form.drag_and_drop.instructions": "For at opsamle en medievedhæftning, tryk på Mellemrum eller Retur. Mens der trækkes, benyt piletasterne til at flytte medievedhæftningen i en given retning. Tryk på Mellemrum eller Retur igen for at slippe medievedhæftningen på den nye position, eller tryk på Escape for at afbryde.", + "upload_form.drag_and_drop.on_drag_cancel": "Træk blev afbrudt. Medievedhæftningen {item} blev sluppet.", + "upload_form.drag_and_drop.on_drag_end": "Medievedhæftningen {item} er sluppet.", + "upload_form.drag_and_drop.on_drag_over": "Medievedhæftningen {item} er flyttet.", + "upload_form.drag_and_drop.on_drag_start": "Opsamlede medievedhæftningen {item}.", "upload_form.edit": "Redigér", "upload_form.thumbnail": "Skift miniature", "upload_form.video_description": "Beskrivelse for hørehæmmede eller synshandicappede personer", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 30a55df05b2a83..6f45d4fe5329a3 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -229,14 +229,14 @@ "domain_pill.activitypub_like_language": "ActivityPub ist sozusagen die Sprache, die Mastodon mit anderen sozialen Netzwerken spricht.", "domain_pill.server": "Server", "domain_pill.their_handle": "Deren Adresse:", - "domain_pill.their_server": "Deren digitales Zuhause. Hier „leben“ alle Beiträge von diesem Profil.", + "domain_pill.their_server": "Deren digitale Heimat. Hier „leben“ alle Beiträge von diesem Profil.", "domain_pill.their_username": "Deren eindeutigen Identität auf dem betreffenden Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.", "domain_pill.username": "Profilname", "domain_pill.whats_in_a_handle": "Was ist Teil der Adresse?", "domain_pill.who_they_are": "Adressen teilen mit, wer jemand ist und wo sich jemand aufhält. Daher kannst du mit Leuten im gesamten Social Web interagieren, wenn es eine durch ist.", "domain_pill.who_you_are": "Deine Adresse teilt mit, wer du bist und wo du dich aufhältst. Daher können andere Leute im gesamten Social Web mit dir interagieren, wenn es eine durch ist.", "domain_pill.your_handle": "Deine Adresse:", - "domain_pill.your_server": "Dein digitales Zuhause. Hier „leben“ alle Beiträge von dir. Dir gefällt es hier nicht? Du kannst jederzeit den Server wechseln und ebenso deine Follower übertragen.", + "domain_pill.your_server": "Deine digitale Heimat. Hier „leben“ alle Beiträge von dir. Falls es dir hier nicht gefällt, kannst du jederzeit den Server wechseln und ebenso deine Follower übertragen.", "domain_pill.your_username": "Deine eindeutige Identität auf diesem Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.", "embed.instructions": "Du kannst diesen Beitrag auf deiner Website einbetten, indem du den nachfolgenden Code kopierst.", "embed.preview": "Vorschau:", @@ -852,6 +852,11 @@ "upload_error.poll": "Medien-Anhänge sind zusammen mit Umfragen nicht erlaubt.", "upload_form.audio_description": "Beschreibe für Menschen mit Hörbehinderung", "upload_form.description": "Beschreibe für Menschen mit Sehbehinderung", + "upload_form.drag_and_drop.instructions": "Drücke zum Aufnehmen eines Medienanhangs die Eingabe- oder Leertaste. Verwende beim Ziehen die Pfeiltasten, um den Medienanhang zur gewünschten Position zu bewegen. Drücke erneut die Eingabe- oder Leertaste, um den Medienanhang an der gewünschten Position abzulegen. Mit der Escape-Taste kannst du den Vorgang abbrechen.", + "upload_form.drag_and_drop.on_drag_cancel": "Das Ziehen wurde abgebrochen und der Medienanhang {item} wurde abgelegt.", + "upload_form.drag_and_drop.on_drag_end": "Der Medienanhang {item} wurde abgelegt.", + "upload_form.drag_and_drop.on_drag_over": "Der Medienanhang {item} wurde bewegt.", + "upload_form.drag_and_drop.on_drag_start": "Der Medienanhang {item} wurde aufgenommen.", "upload_form.edit": "Bearbeiten", "upload_form.thumbnail": "Vorschaubild ändern", "upload_form.video_description": "Beschreibe für Menschen mit einer Hör- oder Sehbehinderung", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 832bf9eda0cf95..4268c385359327 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -852,6 +852,11 @@ "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.", "upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi", "upload_form.description": "Priskribi por personoj, kiuj estas blindaj aŭ havas vidmalsufiĉon", + "upload_form.drag_and_drop.instructions": "Por preni amaskomunikilaron aldonaĵon, premu spacoklavon aŭ enen-klavon. Dum trenado, uzu la sagoklavojn por movi la amaskomunikilaron aldonaĵon en iu ajn direkto. Premu spacoklavon aŭ enen-klavon denove por faligi la amaskomunikilaron aldonaĵon en ĝia nova pozicio, aŭ premu eskapan klavon por nuligi.", + "upload_form.drag_and_drop.on_drag_cancel": "Trenado estis nuligita. Amaskomunikila aldonaĵo {item} estis forigita.", + "upload_form.drag_and_drop.on_drag_end": "Amaskomunikila aldonaĵo {item} estis forigita.", + "upload_form.drag_and_drop.on_drag_over": "Amaskomunikila aldonaĵo {item} estis movita.", + "upload_form.drag_and_drop.on_drag_start": "Prenis amaskomunikilan aldonaĵon {item}.", "upload_form.edit": "Redakti", "upload_form.thumbnail": "Ŝanĝi etigita bildo", "upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index e0a4f0fc923f28..609175d94f7460 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -222,8 +222,8 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que fueron bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", - "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y gente a la que sigas de este servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} cuenta que seguís} other {{followingCountDisplay} cuentas que seguís}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y cuentas a las que seguís de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con cuentas no solo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", @@ -852,6 +852,11 @@ "upload_error.poll": "No se permite la subida de archivos en encuestas.", "upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas", "upload_form.description": "Agregá una descripción para personas con dificultades visuales", + "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsá la barra espaciadora o la tecla Enter. Mientras arrastrás, usá las teclas de flecha para mover el archivo multimedia en cualquier dirección. Volvé a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsá la tecla Escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", + "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", + "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 3948de6c3277fb..7c2e4003380f9b 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -95,7 +95,7 @@ "block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.", "block_modal.they_cant_see_posts": "No pueden ver tus publicaciones y tú no verás las de ellos.", "block_modal.they_will_know": "Pueden ver que están bloqueados.", - "block_modal.title": "¿Bloquear usuario?", + "block_modal.title": "¿Deseas bloquear al usuario?", "block_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.", "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "boost_modal.reblog": "¿Deseas impulsar la publicación?", @@ -173,9 +173,9 @@ "confirmations.block.confirm": "Bloquear", "confirmations.delete.confirm": "Eliminar", "confirmations.delete.message": "¿Estás seguro de que quieres borrar esta publicación?", - "confirmations.delete.title": "¿Eliminar publicación?", + "confirmations.delete.title": "¿Deseas eliminar la publicación?", "confirmations.delete_list.confirm": "Eliminar", - "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", + "confirmations.delete_list.message": "¿Estás seguro de que quieres eliminar esta lista de forma permanente?", "confirmations.delete_list.title": "¿Deseas eliminar la lista?", "confirmations.discard_edit_media.confirm": "Descartar", "confirmations.discard_edit_media.message": "Tienes cambios sin guardar en la descripción o vista previa del archivo, ¿deseas descartarlos de cualquier manera?", @@ -191,7 +191,7 @@ "confirmations.redraft.title": "¿Borrar y volver a redactar la publicación?", "confirmations.reply.confirm": "Responder", "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", - "confirmations.reply.title": "¿Sobreescribir publicación?", + "confirmations.reply.title": "¿Deseas sobreescribir la publicación?", "confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", @@ -221,7 +221,7 @@ "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este servidor pueden interactuar con tus publicaciones antiguas.", "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", - "domain_block_modal.title": "¿Bloquear dominio?", + "domain_block_modal.title": "¿Deseas bloquear el dominio?", "domain_block_modal.you_will_lose_num_followers": "Vas a perder {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigas}}.", "domain_block_modal.you_will_lose_relationships": "Perderás todos los seguidores y las personas que sigues de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás publicaciones ni notificaciones de usuarios en este servidor.", @@ -467,7 +467,7 @@ "mute_modal.show_options": "Mostrar opciones", "mute_modal.they_can_mention_and_follow": "Pueden mencionarte y seguirte, pero no verás nada de ellos.", "mute_modal.they_wont_know": "No sabrán que han sido silenciados.", - "mute_modal.title": "¿Silenciar usuario?", + "mute_modal.title": "¿Deseas silenciar el usuario?", "mute_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.", "mute_modal.you_wont_see_posts": "Todavía pueden ver tus publicaciones, pero tú no verás las de ellos.", "navigation_bar.about": "Acerca de", @@ -852,6 +852,11 @@ "upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_form.audio_description": "Describir para personas con problemas auditivos", "upload_form.description": "Describir para los usuarios con dificultad visual", + "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", + "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.", + "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 6e7ea9c9ec72d8..b8414893382ace 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -852,6 +852,11 @@ "upload_error.poll": "No se permite la subida de archivos con encuestas.", "upload_form.audio_description": "Describir para personas con problemas auditivos", "upload_form.description": "Describir para personas con discapacidad visual", + "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", + "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.", + "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 0a37a96abbcb9d..2e4cd661d5049c 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -797,7 +797,7 @@ "status.history.edited": "{name} muokkasi {date}", "status.load_more": "Lataa lisää", "status.media.open": "Avaa napsauttamalla", - "status.media.show": "Napsauta näyttääksesi", + "status.media.show": "Näytä napsauttamalla", "status.media_hidden": "Media piilotettu", "status.mention": "Mainitse @{name}", "status.more": "Enemmän", @@ -852,6 +852,11 @@ "upload_error.poll": "Tiedostojen lisääminen äänestysten oheen ei ole sallittua.", "upload_form.audio_description": "Kuvaile sisältöä kuuroille ja kuulorajoitteisille", "upload_form.description": "Kuvaile sisältöä sokeille ja näkörajoitteisille", + "upload_form.drag_and_drop.instructions": "Valitse medialiite painamalla välilyöntiä tai enteriä. Vetäessäsi käytä nuolinäppäimiä siirtääksesi medialiitettä vastaavaan suuntaan. Paina välilyöntiä tai enteriä uudelleen pudottaaksesi medialiitteen uuteen kohtaansa, tai peru siirto painamalla escape-näppäintä.", + "upload_form.drag_and_drop.on_drag_cancel": "Veto peruttiin. Medialiitettä {item} ei siirretty.", + "upload_form.drag_and_drop.on_drag_end": "Medialiite {item} pudotettiin.", + "upload_form.drag_and_drop.on_drag_over": "Medialiitettä {item} siirrettiin.", + "upload_form.drag_and_drop.on_drag_start": "Valittiin medialiite {item}.", "upload_form.edit": "Muokkaa", "upload_form.thumbnail": "Vaihda pienoiskuva", "upload_form.video_description": "Kuvaile sisältöä kuuroille, kuulorajoitteisille, sokeille tai näkörajoitteisille", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 952bc60882389c..40292c269126e9 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -3,9 +3,15 @@ "about.contact": "Kontak:", "about.disclaimer": "Ang Mastodon ay software na malaya at bukas-na-pinagmulan, at isang tatak-pangkalakal ng Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Hindi makuha ang dahilan", + "about.domain_blocks.preamble": "Sa kadalasan, hinahayaan ka ng Mastodon na makita ang mga content sa, at makipag-interact sa users ng, ibang servers sa fediverse. Narito ang exceptions na ginawa sa partikular na server na ito.", + "about.domain_blocks.silenced.explanation": "Sa kadalasan, hindi mo makikita ang profiles at content mula sa server na ito, maliban na lang kung sasadyain mo silang hanapin o piliing magawa ito sa pamamagitan ng mga sumusunod.", "about.domain_blocks.silenced.title": "Limitado", + "about.domain_blocks.suspended.explanation": "Walang data mula sa server na ito ang mapoproseso, maiimbak o maipagpapaplitan. Sa gayon. imposibleng magawa ang interaksiyon o komunikasyon sa ibang users sa server na ito.", "about.domain_blocks.suspended.title": "Suspendido", + "about.not_available": "Hindi available ang impormasyong ito.", + "about.powered_by": "Decentralisadong social media na pinapagana ng {mastodon}", "about.rules": "Mga alituntunin ng server", + "account.account_note_header": "Note na personal", "account.add_or_remove_from_list": "I-dagdag o tanggalin mula sa mga listahan", "account.badges.bot": "Pakusa", "account.badges.group": "Pangkat", @@ -216,7 +222,7 @@ "link_preview.author": "Ni/ng {name}", "lists.account.add": "Idagdag sa talaan", "lists.account.remove": "Tanggalin mula sa talaan", - "lists.delete": "Burahin ang talaan", + "lists.delete": "Burahin ang listahan", "lists.new.create": "Idagdag sa talaan", "lists.new.title_placeholder": "Bagong pangalan ng talaan", "lists.replies_policy.title": "Ipakita ang mga tugon sa:", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 70908c62dc9288..c7e752d3783823 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -852,6 +852,11 @@ "upload_error.poll": "Ikki loyvt at leggja fílur upp í spurnarkanningum.", "upload_form.audio_description": "Lýs fyri teimum, sum eru deyv ella hava ringa hoyrn", "upload_form.description": "Lýs fyri teimum, sum eru blind ella eru sjónveik", + "upload_form.drag_and_drop.instructions": "Fyri at heinta eitt miðlaviðfesti, trýst á millumrúm ella returknapp. Meðan tú dregur, brúka pílarnar fyri at flyta miðaviðfesti í einhvønn rætning. Trýst á millumrúm ella returknapp aftur fyri at sleppa miðlaviðfestinum í nýggja staðnum ella trýst á esc-knappin fyri at angra.", + "upload_form.drag_and_drop.on_drag_cancel": "Draging varð steðgað. Miðlaviðfestið {item} varð slept.", + "upload_form.drag_and_drop.on_drag_end": "Miðlaviðfestið {item} var slept.", + "upload_form.drag_and_drop.on_drag_over": "Miðlaviðfestið {item} var flutt.", + "upload_form.drag_and_drop.on_drag_start": "Heintaði miðlaviðfestið {item}.", "upload_form.edit": "Rætta", "upload_form.thumbnail": "Broyt smámynd", "upload_form.video_description": "Lýs fyri teimum, sum eru deyv, hava ringa hoyrn, eru blind ella eru sjónveik", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index a92cd50c67a24b..bdceb9bd30d036 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Débit limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups!", + "alt_text_badge.title": "Texte Alt", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", + "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", + "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", @@ -433,6 +436,8 @@ "lightbox.close": "Fermer", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", + "lightbox.zoom_in": "Zoomer sur la taille réelle", + "lightbox.zoom_out": "Zoomer pour adapter", "limited_account_hint.action": "Afficher le profil quand même", "limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.", "link_preview.author": "Par {name}", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index a2bf4d5363fb30..2acad020935f04 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Nombre de requêtes limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups !", + "alt_text_badge.title": "Texte Alt", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", + "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", + "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", @@ -433,6 +436,8 @@ "lightbox.close": "Fermer", "lightbox.next": "Suivant", "lightbox.previous": "Précédent", + "lightbox.zoom_in": "Zoomer sur la taille réelle", + "lightbox.zoom_out": "Zoomer pour adapter", "limited_account_hint.action": "Afficher le profil quand même", "limited_account_hint.title": "Ce profil a été masqué par la modération de {domain}.", "link_preview.author": "Par {name}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 6d64c6f712eea5..84c76478d1b6c6 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Rátatheoranta", "alert.unexpected.message": "Tharla earráid gan choinne.", "alert.unexpected.title": "Hiúps!", + "alt_text_badge.title": "Téacs alt", "announcement.announcement": "Fógra", "attachments_list.unprocessed": "(neamhphróiseáilte)", "audio.hide": "Cuir fuaim i bhfolach", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Ní bheidh a fhios acu go bhfuil bac orthu.", "domain_block_modal.title": "Blocáil fearann?", "domain_block_modal.you_will_lose_num_followers": "Caillfidh tú {followersCount, plural, one {{followersCountDisplay} leantóir} two {{followersCountDisplay} leantóirí} few {{followersCountDisplay} leantóirí} many {{followersCountDisplay} leantóirí} other {{followersCountDisplay} leantóirí}} agus {followingCount, plural, one {{followingCountDisplay} duine atá á leanúint agat} two {{followingCountDisplay} daoine atá á leanúint agat} few {{followingCountDisplay} daoine atá á leanúint agat} many {{followingCountDisplay} daoine atá á leanúint agat} other {{followingCountDisplay} daoine atá á leanúint agat}}.", + "domain_block_modal.you_will_lose_relationships": "Caillfidh tú gach leantóir agus duine a leanann tú ón bhfreastalaí seo.", "domain_block_modal.you_wont_see_posts": "Ní fheicfidh tú postálacha nó fógraí ó úsáideoirí ar an bhfreastalaí seo.", "domain_pill.activitypub_lets_connect": "Ligeann sé duit ceangal agus idirghníomhú le daoine, ní hamháin ar Mastodon, ach thar aipeanna sóisialta éagsúla freisin.", "domain_pill.activitypub_like_language": "Tá GníomhaíochtPub cosúil leis an teanga a labhraíonn Mastodon le líonraí sóisialta eile.", @@ -850,6 +852,11 @@ "upload_error.poll": "Ní cheadaítear uaslódáil comhad le pobalbhreith.", "upload_form.audio_description": "Déan cur síos ar dhaoine bodhra nó lagéisteachta", "upload_form.description": "Describe for the visually impaired", + "upload_form.drag_and_drop.instructions": "Chun ceangaltán meán a phiocadh suas, brúigh spás nó cuir isteach. Agus tú ag tarraingt, bain úsáid as na heochracha saigheada chun an ceangaltán meán a bhogadh i dtreo ar bith. Brúigh spás nó cuir isteach arís chun an ceangaltán meán a scaoileadh ina phost nua, nó brúigh éalú chun cealú.", + "upload_form.drag_and_drop.on_drag_cancel": "Cuireadh an tarraingt ar ceal. Scaoileadh ceangaltán meán {item}.", + "upload_form.drag_and_drop.on_drag_end": "Scaoileadh ceangaltán meán {item}.", + "upload_form.drag_and_drop.on_drag_over": "Bogadh ceangaltán meán {item}.", + "upload_form.drag_and_drop.on_drag_start": "Roghnaíodh ceangaltán meán {item}.", "upload_form.edit": "Cuir in eagar", "upload_form.thumbnail": "Athraigh mionsamhail", "upload_form.video_description": "Déan cur síos ar dhaoine atá bodhar, lagéisteachta, dall nó lagamhairc", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index c2b645ed0f2deb..3bc9e1ee590dfd 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -852,6 +852,11 @@ "upload_error.poll": "Non se poden subir ficheiros nas enquisas.", "upload_form.audio_description": "Describir para persoas con problemas auditivos", "upload_form.description": "Describir para persoas cegas ou con problemas visuais", + "upload_form.drag_and_drop.instructions": "Preme en Espazo ou Enter para escoller un anexo multimedia. Ao arrastrar usa as teclas de frecha para mover o anexo en todas direccións.Preme Espazo ou Enter outra vez para soltalo na súa nova posición, ou preme Escape para desbotar.", + "upload_form.drag_and_drop.on_drag_cancel": "Cancelouse o movemento. O anexo {item} soltouse.", + "upload_form.drag_and_drop.on_drag_end": "Soltouse o anexo multimedia {item}.", + "upload_form.drag_and_drop.on_drag_over": "Moveuse o anexo multimedia {item}.", + "upload_form.drag_and_drop.on_drag_start": "Escolleuse o anexo multimedia {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar a miniatura", "upload_form.video_description": "Describe para persoas con problemas visuais ou auditivos", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index b47590a64c7ae6..bfc248a845e79e 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -99,7 +99,7 @@ "block_modal.you_wont_see_mentions": "Vu ne vidos mesaji qua mencionas oli.", "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", "boost_modal.reblog": "Ka repetar posto?", - "boost_modal.undo_reblog": "Ka retrorepetar posto?", + "boost_modal.undo_reblog": "Ka desrepetar posto?", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -194,7 +194,7 @@ "confirmations.reply.title": "Ka remplasar posto?", "confirmations.unfollow.confirm": "Desequez", "confirmations.unfollow.message": "Ka vu certe volas desequar {name}?", - "confirmations.unfollow.title": "Ka retrosequar uzanto?", + "confirmations.unfollow.title": "Ka dessequar uzanto?", "content_warning.hide": "Celez posto", "content_warning.show": "Montrez nur", "conversation.delete": "Efacez konverso", @@ -463,7 +463,7 @@ "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", "mute_modal.hide_from_notifications": "Celez de savigi", "mute_modal.hide_options": "Celez preferaji", - "mute_modal.indefinite": "Til me retrosilencigas lu", + "mute_modal.indefinite": "Til me dessilencigas lu", "mute_modal.show_options": "Montrez preferaji", "mute_modal.they_can_mention_and_follow": "Lu povas mencionar e sequar vu, ma vu ne vidos lu.", "mute_modal.they_wont_know": "Lu ne savos ke lu silencigesis.", @@ -852,6 +852,11 @@ "upload_error.poll": "Failadchargo ne permisesas kun votposti.", "upload_form.audio_description": "Deskriptez por personi kun audnekapableso", "upload_form.description": "Deskriptez por personi kun vidnekapableso", + "upload_form.drag_and_drop.instructions": "Por tenar mediatachajo, presez spaco o eniro. Presez spaco o eniro itere por destenar la mediatachajo en olua nova loko, o presez eskapo por anular.", + "upload_form.drag_and_drop.on_drag_cancel": "Tiro anulesis. Mediatachajo {item} destenesis.", + "upload_form.drag_and_drop.on_drag_end": "Mediatachajo {item} destenesis.", + "upload_form.drag_and_drop.on_drag_over": "Mediatachajo {item} movigesis.", + "upload_form.drag_and_drop.on_drag_start": "Tenis mediatachajo {item}.", "upload_form.edit": "Modifikez", "upload_form.thumbnail": "Chanjez imajeto", "upload_form.video_description": "Deskriptez por personi kun audnekapableso o vidnekapableso", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 89f68ab95fa2d0..9e2c9f3af8079a 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -73,6 +73,7 @@ "alert.rate_limited.title": "Aktum s talast", "alert.unexpected.message": "Yeḍra-d unezri ur netturaǧu ara.", "alert.unexpected.title": "Ayhuh!", + "alt_text_badge.title": "Aḍris asegzan", "announcement.announcement": "Ulɣu", "audio.hide": "Ffer amesli", "block_modal.show_less": "Ssken-d drus", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 87ea3cfabf8628..2054dfc0ff7ff1 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -31,7 +31,7 @@ "account.featured_tags.last_status_never": "게시물 없음", "account.featured_tags.title": "{name} 님의 추천 해시태그", "account.follow": "팔로우", - "account.follow_back": "맞팔로우 하기", + "account.follow_back": "맞팔로우", "account.followers": "팔로워", "account.followers.empty": "아직 아무도 이 사용자를 팔로우하고 있지 않습니다.", "account.followers_counter": "{count, plural, other {팔로워 {counter}명}}", @@ -85,6 +85,7 @@ "alert.rate_limited.title": "빈도 제한됨", "alert.unexpected.message": "예상하지 못한 에러가 발생했습니다.", "alert.unexpected.title": "앗!", + "alt_text_badge.title": "대체 문구", "announcement.announcement": "공지사항", "attachments_list.unprocessed": "(처리 안 됨)", "audio.hide": "소리 숨기기", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "이 서버의 누구도 나를 팔로우 할 수 없습니다.", "domain_block_modal.they_wont_know": "내가 차단했다는 사실을 모를 것입니다.", "domain_block_modal.title": "도메인을 차단할까요?", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, other {{followersCountDisplay} 명의 팔로워}}와 {followingCount, plural, other {{followingCountDisplay} 명의 팔로우}}를 잃게 됩니다.", + "domain_block_modal.you_will_lose_relationships": "이 서버의 팔로워와 팔로우를 모두 잃게 됩니다.", "domain_block_modal.you_wont_see_posts": "이 서버 사용자의 게시물이나 알림을 보지 않게 됩니다.", "domain_pill.activitypub_lets_connect": "이것은 마스토돈 뿐만이 아니라 다른 소셜 앱들을 넘나들며 사람들을 연결하고 상호작용 할 수 있게 합니다.", "domain_pill.activitypub_like_language": "액티비티펍은 마스토돈이 다른 소셜 네트워크와 대화할 때 쓰는 언어 같은 것입니다.", @@ -849,6 +852,11 @@ "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없습니다.", "upload_form.audio_description": "청각장애인이나 저청각자를 위한 설명", "upload_form.description": "시각장애인이나 저시력자를 위한 설명", + "upload_form.drag_and_drop.instructions": "미디어 첨부파일을 집으려면 스페이스나 엔터를 누르세요. 드래그 하는 동안 방향키를 이용해 원하는 방향으로 이동할 수 있습니다. 스페이스나 엔터를 다시 눌러 새 위치에 놓거나 ESC를 이용해 취소할 수 있습니다.", + "upload_form.drag_and_drop.on_drag_cancel": "드래그가 취소되었습니다. 미디어 첨부파일 {item}은 이동되지 않았습니다.", + "upload_form.drag_and_drop.on_drag_end": "미디어 첨부파일 {item}은 이동되지 않았습니다.", + "upload_form.drag_and_drop.on_drag_over": "미디어 첨부파일 {item}이 이동되었습니다.", + "upload_form.drag_and_drop.on_drag_start": "미디어 첨부파일 {item}을 집었습니다.", "upload_form.edit": "수정", "upload_form.thumbnail": "썸네일 변경", "upload_form.video_description": "청각장애인, 저청각자, 시각장애인, 저시력자를 위한 설명", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 0eb3dbf5b447fb..043dcfb05d7f0c 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -1,7 +1,7 @@ { "about.blocks": "Prižiūrimi serveriai", "about.contact": "Kontaktai:", - "about.disclaimer": "„Mastodon“ – tai nemokama atvirojo kodo programinė įranga ir „Mastodon“ gGmbH prekės ženklas.", + "about.disclaimer": "„Mastodon“ – tai nemokama atvirojo kodo programinė įranga ir „Mastodon gGmbH“ prekės ženklas.", "about.domain_blocks.no_reason_available": "Priežastis nepateikta", "about.domain_blocks.preamble": "„Mastodon“ paprastai leidžia peržiūrėti turinį ir bendrauti su naudotojais iš bet kurio kito fediverse esančio serverio. Šios yra išimtys, kurios buvo padarytos šiame konkrečiame serveryje.", "about.domain_blocks.silenced.explanation": "Paprastai nematysi profilių ir turinio iš šio serverio, nebent jį aiškiai ieškosi arba pasirinksi jį sekant.", @@ -840,6 +840,11 @@ "upload_error.poll": "Failų įkėlimas neleidžiamas su apklausomis.", "upload_form.audio_description": "Aprašyk žmonėms, kurie yra kurtieji ar neprigirdintys.", "upload_form.description": "Aprašyk žmonėms, kurie yra aklieji arba silpnaregiai.", + "upload_form.drag_and_drop.instructions": "Kad paimtum medijos priedą, paspausk tarpo arba įvedimo klavišą. Tempant naudok rodyklių klavišus, kad perkeltum medijos priedą bet kuria kryptimi. Dar kartą paspausk tarpo arba įvedimo klavišą, kad nuleistum medijos priedą naujoje vietoje, arba paspausk grįžimo klavišą, kad atšauktum.", + "upload_form.drag_and_drop.on_drag_cancel": "Nutempimas buvo atšauktas. Medijos priedas {item} buvo nuleistas.", + "upload_form.drag_and_drop.on_drag_end": "Medijos priedas {item} buvo nuleistas.", + "upload_form.drag_and_drop.on_drag_over": "Medijos priedas {item} buvo perkeltas.", + "upload_form.drag_and_drop.on_drag_start": "Paimtas medijos priedas {item}.", "upload_form.edit": "Redaguoti", "upload_form.thumbnail": "Keisti miniatiūrą", "upload_form.video_description": "Aprašyk žmonėms, kurie yra kurtieji, neprigirdintys, aklieji ar silpnaregiai.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 282c345def6b24..1c31574deaffe4 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -852,6 +852,11 @@ "upload_error.poll": "Het uploaden van bestanden is bij peilingen niet toegestaan.", "upload_form.audio_description": "Omschrijf dit voor dove of slechthorende mensen", "upload_form.description": "Omschrijf dit voor blinde of slechtziende mensen", + "upload_form.drag_and_drop.instructions": "Druk op spatie of enter om een mediabijlage op te pakken. Gebruik de pijltjestoetsen om de bijlage in een bepaalde richting te verplaatsen. Druk opnieuw op de spatiebalk of enter om de mediabijlage op de nieuwe positie te plaatsen, of druk op escape om te annuleren.", + "upload_form.drag_and_drop.on_drag_cancel": "Slepen is geannuleerd. Mediabijlage {item} is niet verplaatst.", + "upload_form.drag_and_drop.on_drag_end": "Mediabijlage {item} is niet verplaatst.", + "upload_form.drag_and_drop.on_drag_over": "Mediabijlage {item} is verplaatst.", + "upload_form.drag_and_drop.on_drag_start": "Mediabijlage {item} is opgepakt.", "upload_form.edit": "Bewerken", "upload_form.thumbnail": "Miniatuurafbeelding wijzigen", "upload_form.video_description": "Omschrijf dit voor dove, slechthorende, blinde of slechtziende mensen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 9524dfd5585e45..69883a54953084 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Redusert kapasitet", "alert.unexpected.message": "Det oppstod eit uventa problem.", "alert.unexpected.title": "Oi sann!", + "alt_text_badge.title": "Alternativ tekst", "announcement.announcement": "Kunngjering", "attachments_list.unprocessed": "(ubehandla)", "audio.hide": "Gøym lyd", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ingen på denne tenaren kan fylgja deg.", "domain_block_modal.they_wont_know": "Dei veit ikkje at dei er blokkerte.", "domain_block_modal.title": "Blokker domenet?", + "domain_block_modal.you_will_lose_num_followers": "Du vil mista {followersCount, plural, one {{followersCountDisplay} fylgjar} other {{followersCountDisplay} fylgjarar}} og {followingCount, plural, one {{followingCountDisplay} person du fylgjer} other {{followingCountDisplay} folk du fylgjer}}.", + "domain_block_modal.you_will_lose_relationships": "Du vil mista alle fylgjarar og folk du fylgjer på denne tenaren.", "domain_block_modal.you_wont_see_posts": "Du vil ikkje sjå innlegg eller varslingar frå brukarar på denne tenaren.", "domain_pill.activitypub_lets_connect": "Den lar deg kople til og samhandle med folk ikkje berre på Mastodon, men òg på tvers av forskjellige sosiale appar.", "domain_pill.activitypub_like_language": "ActivityPub er som språket Mastodon snakkar med andre sosiale nettverk.", @@ -849,6 +852,11 @@ "upload_error.poll": "Filopplasting er ikkje lov for rundspørjingar.", "upload_form.audio_description": "Skildre for dei med nedsett høyrsel", "upload_form.description": "Skildre for blinde og svaksynte", + "upload_form.drag_and_drop.instructions": "For å plukka opp eit medievedlegg, trykkjer du på mellomrom eller enter. Når du dreg, brukar du piltastane for å flytta vedlegget i den retninga du vil. Deretter trykkjer du mellomrom eller enter att for å sleppa vedlegget på den nye plassen, eller trykk escape for å avbryta.", + "upload_form.drag_and_drop.on_drag_cancel": "Du avbraut draginga. Medievedlegget {item} vart sleppt.", + "upload_form.drag_and_drop.on_drag_end": "Medeivedlegget {item} vart sleppt.", + "upload_form.drag_and_drop.on_drag_over": "Medievedlegget {item} vart flytta.", + "upload_form.drag_and_drop.on_drag_start": "Plukka opp medievedlegget {item}.", "upload_form.edit": "Rediger", "upload_form.thumbnail": "Bytt miniatyrbilete", "upload_form.video_description": "Skildre for dei med nedsett høyrsel eller redusert syn", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 8e9dd96baf67df..4dc74db8cbed73 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -852,6 +852,11 @@ "upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.", "upload_form.audio_description": "Opisz dla osób niesłyszących i niedosłyszących", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", + "upload_form.drag_and_drop.instructions": "Naciśnij spację lub enter żeby podnieść załącznik. Podczas przeciągania, strzałki przesuwają załącznik. Naciśnięcie spacji lub entera upuści załącznik w nowym miejscu, a escape anuluje przesuwanie.", + "upload_form.drag_and_drop.on_drag_cancel": "Przesuwanie anulowane. Załącznik {item} upuszczony.", + "upload_form.drag_and_drop.on_drag_end": "Upuszczono załącznik {item}.", + "upload_form.drag_and_drop.on_drag_over": "Przesunięto załącznik {item}.", + "upload_form.drag_and_drop.on_drag_start": "Podniesiono załącznik {item}.", "upload_form.edit": "Edytuj", "upload_form.thumbnail": "Zmień miniaturę", "upload_form.video_description": "Opisz dla osób niesłyszących, niedosłyszących, niewidomych i niedowidzących", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 68b64ca54863c3..160b6ec4e69be0 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "มีการจำกัดอัตรา", "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", + "alt_text_badge.title": "ข้อความแสดงแทน", "announcement.announcement": "ประกาศ", "attachments_list.unprocessed": "(ยังไม่ได้ประมวลผล)", "audio.hide": "ซ่อนเสียง", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 12d9bd43540b31..770dcbaef55bde 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Vượt giới hạn", "alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.", "alert.unexpected.title": "Ốiii!", + "alt_text_badge.title": "Văn bản thay thế", "announcement.announcement": "Có gì mới?", "attachments_list.unprocessed": "(chưa xử lí)", "audio.hide": "Ẩn âm thanh", @@ -463,7 +464,7 @@ "mute_modal.hide_from_notifications": "Ẩn thông báo", "mute_modal.hide_options": "Tùy chọn ẩn", "mute_modal.indefinite": "Cho tới khi bỏ ẩn", - "mute_modal.show_options": "Hiển thị tùy chọn", + "mute_modal.show_options": "Thêm tùy chọn", "mute_modal.they_can_mention_and_follow": "Họ có thể nhắc đến và theo dõi bạn, nhưng bạn không thấy họ.", "mute_modal.they_wont_know": "Họ sẽ không biết đã bị bạn ẩn.", "mute_modal.title": "Ẩn người này?", @@ -752,7 +753,7 @@ "search_popout.language_code": "mã ngôn ngữ ISO", "search_popout.options": "Tìm nâng cao", "search_popout.quick_actions": "Thao tác nhanh", - "search_popout.recent": "Bạn đã tìm", + "search_popout.recent": "Lượt tìm gần đây", "search_popout.specific_date": "ngày cụ thể", "search_popout.user": "địa chỉ Mastodon", "search_results.accounts": "Mọi người", @@ -779,7 +780,7 @@ "status.bookmark": "Lưu", "status.cancel_reblog_private": "Hủy đăng lại", "status.cannot_reblog": "Không thể đăng lại tút này", - "status.continued_thread": "Tiếp tục trong chủ đề", + "status.continued_thread": "Tiếp tục chủ đề", "status.copy": "Sao chép URL", "status.delete": "Xóa", "status.detailed_status": "Xem chi tiết thêm", @@ -813,7 +814,7 @@ "status.reblogs.empty": "Tút này chưa có ai đăng lại. Nếu có, nó sẽ hiển thị ở đây.", "status.redraft": "Xóa và viết lại", "status.remove_bookmark": "Bỏ lưu", - "status.replied_in_thread": "Trả lời trong chủ đề", + "status.replied_in_thread": "Trả lời thảo luận", "status.replied_to": "Trả lời {name}", "status.reply": "Trả lời", "status.replyAll": "Trả lời", @@ -851,6 +852,11 @@ "upload_error.poll": "Không cho phép đính kèm tập tin.", "upload_form.audio_description": "Mô tả cho người mất thính giác", "upload_form.description": "Mô tả cho người khiếm thị", + "upload_form.drag_and_drop.instructions": "Để chọn tập tin đính kèm, hãy nhấn phím cách hoặc phím Enter. Trong khi kéo, sử dụng các phím mũi tên để di chuyển tập tin đính kèm theo bất kỳ hướng nào. Nhấn phím cách hoặc phím Enter một lần nữa để thả tập tin đính kèm vào vị trí mới hoặc nhấn phím thoát để hủy.", + "upload_form.drag_and_drop.on_drag_cancel": "Kéo thả đã bị hủy bỏ. Tập tin đính kèm {item} bị bỏ qua.", + "upload_form.drag_and_drop.on_drag_end": "Tập tin đính kèm {item} bị bỏ qua.", + "upload_form.drag_and_drop.on_drag_over": "Tập tin đính kèm {item} đã bị dời.", + "upload_form.drag_and_drop.on_drag_start": "Đã chọn tập tin đính kèm {item}.", "upload_form.edit": "Biên tập", "upload_form.thumbnail": "Đổi ảnh thumbnail", "upload_form.video_description": "Mô tả cho người mất thị lực hoặc không thể nghe", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 8ce888a0396290..0a4505d4ee5482 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -852,6 +852,11 @@ "upload_error.poll": "投票中不允许上传文件。", "upload_form.audio_description": "为听障人士添加文字描述", "upload_form.description": "为视觉障碍人士添加文字说明", + "upload_form.drag_and_drop.instructions": "要选中某个媒体附件,请按空格键或回车键。在拖拽时,使用方向键将媒体附件移动到任何给定方向。再次按空格键或回车键可将媒体附件放置在新位置,或按 Esc 键取消。", + "upload_form.drag_and_drop.on_drag_cancel": "拖拽已终止。媒体附件 {item} 已被丢弃。", + "upload_form.drag_and_drop.on_drag_end": "媒体附件 {item} 已被丢弃。", + "upload_form.drag_and_drop.on_drag_over": "媒体附件 {item} 已被移动。", + "upload_form.drag_and_drop.on_drag_start": "已选中媒体附件 {item}。", "upload_form.edit": "编辑", "upload_form.thumbnail": "更改缩略图", "upload_form.video_description": "为听障人士和视障人士添加文字描述", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 530202f0a5b0fe..2047a69f44b8af 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -852,6 +852,11 @@ "upload_error.poll": "不允許於投票時上傳檔案。", "upload_form.audio_description": "為聽障人士增加文字說明", "upload_form.description": "為視障人士增加文字說明", + "upload_form.drag_and_drop.instructions": "請按空白鍵或 Enter 鍵取多媒體附加檔案。使用方向鍵移動多媒體附加檔案。按下空白鍵或 Enter 鍵於新位置放置多媒體附加檔案,或按下 ESC 鍵取消。", + "upload_form.drag_and_drop.on_drag_cancel": "移動已取消。多媒體附加檔案 {item} 已被放置。", + "upload_form.drag_and_drop.on_drag_end": "多媒體附加檔案 {item} 已被放置。", + "upload_form.drag_and_drop.on_drag_over": "多媒體附加檔案 {item} 已被移動。", + "upload_form.drag_and_drop.on_drag_start": "多媒體附加檔案 {item} 已被選取。", "upload_form.edit": "編輯", "upload_form.thumbnail": "更改預覽圖", "upload_form.video_description": "為聽障或視障人士增加文字說明", diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml index 1e19d1effba69f..221be3f680e01a 100644 --- a/config/locales/activerecord.bg.yml +++ b/config/locales/activerecord.bg.yml @@ -15,6 +15,12 @@ bg: user/invite_request: text: Причина errors: + attributes: + domain: + invalid: не е действително име на домейн + messages: + invalid_domain_on_line: "%{value} не е действително име на домейн" + too_many_lines: е над ограничение от %{limit} реда models: account: attributes: diff --git a/config/locales/de.yml b/config/locales/de.yml index b98a96a1cd37ac..c82e65282ffe3e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -877,7 +877,7 @@ de: message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfe deine Sidekiq-Konfiguration software_version_check: action: Verfügbare Updates ansehen - message_html: Ein Update für Mastodon ist verfügbar. + message_html: Ein Mastodon-Update ist verfügbar. software_version_critical_check: action: Verfügbare Updates ansehen message_html: Ein kritisches Mastodon-Update ist verfügbar – bitte aktualisiere so schnell wie möglich. @@ -1425,7 +1425,7 @@ de: max_uses: one: Eine Verwendung other: "%{count} Verwendungen" - max_uses_prompt: Keine Einschränkung + max_uses_prompt: Unbegrenzt prompt: Erstelle Einladungen und teile die dazugehörigen Links, um anderen einen Zugang zu diesem Server zu gewähren table: expires_at: Läuft ab @@ -1903,7 +1903,7 @@ de: feature_action: Mehr erfahren feature_audience: Mastodon bietet dir eine einzigartige Möglichkeit, deine Reichweite ohne Mittelsperson zu verwalten. Auf deiner eigenen Infrastruktur bereitgestellt, ermöglicht Mastodon es dir, jedem anderen Mastodon-Server zu folgen und von jedem anderen Server aus gefolgt zu werden. Ebenso steht Mastodon unter deiner Kontrolle. feature_audience_title: Baue deine Reichweite mit Vertrauen auf - feature_control: Du weißt am besten, was du auf deiner Startseite sehen möchtest. Keine Algorithmen oder Werbung, die deine Zeit verschwenden. Folge Nutzer*innen von jedem Mastodon-Server von einem einzelnen Konto aus und empfange deren Beiträge in chronologischer Reihenfolge. Mache Mastodon zu deinem ganz persönlichen Fleckchen im Internet. + feature_control: Du weißt am besten, was du auf deiner Startseite sehen möchtest. Keine Algorithmen oder Werbung, die deine Zeit verschwenden. Folge Nutzer*innen auf allen Mastodon-Servern von einem einzelnen Konto aus und empfange deren Beiträge in chronologischer Reihenfolge. Mache Mastodon zu deinem ganz persönlichen Fleckchen im Internet. feature_control_title: Behalte die Kontrolle über deine eigene Timeline feature_creativity: Mastodon unterstützt Audio-, Video- und Bildbeiträge, Beschreibungen, Umfragen, Inhaltswarnungen, animierte Avatare, benutzerdefinierte Emojis, das Zuschneiden von Vorschaubildern und vieles mehr, um dir zu helfen, dich online zu entfalten. Egal, ob du deine Kunst, deine Musik oder deinen Podcast veröffentlichst – Mastodon ist für dich da. feature_creativity_title: Einzigartige Kreativität diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index f0322a60a8e9f4..9d946967e9cba9 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -72,9 +72,11 @@ eo: subject: 'Mastodon: sekureca ŝlosilo forigita' title: Unu el viaj sekurecaj ŝlosiloj estis forigita webauthn_disabled: + explanation: Aŭtentigo per sekurecaj ŝlosiloj estas malŝaltita por via konto. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita' title: Sekurecaj ŝlosiloj malaktivigitaj webauthn_enabled: + extra: Via sekureca ŝlosilo nun povas esti uzata por ensaluto. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita' title: Sekurecaj ŝlosiloj aktivigitaj omniauth_callbacks: diff --git a/config/locales/doorkeeper.bg.yml b/config/locales/doorkeeper.bg.yml index 25dce0ea0895fa..c3977e58441e22 100644 --- a/config/locales/doorkeeper.bg.yml +++ b/config/locales/doorkeeper.bg.yml @@ -60,6 +60,7 @@ bg: error: title: Възникна грешка new: + prompt_html: "%{client_name} желае да има достъп до акаунта ви. Одобрявайте само тази заявка, ако я разпознавате и ако имате доворерие на източника." review_permissions: Преглед на разрешенията title: Изисква се упълномощаване show: diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml index 804e4a51ed88d1..a6e1a46b80718c 100644 --- a/config/locales/doorkeeper.es-AR.yml +++ b/config/locales/doorkeeper.es-AR.yml @@ -60,7 +60,7 @@ es-AR: error: title: Ocurrió un error new: - prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprobá esta solicitud solo si reconocés y confiás en esta fuente. review_permissions: Revisar permisos title: Autorización requerida show: diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index c095777954decc..e119d71f4e7028 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -60,7 +60,7 @@ es-MX: error: title: Ha ocurrido un error new: - prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente. review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index c26f11a7a1073b..d582460d3fe7a9 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -60,7 +60,7 @@ es: error: title: Ha ocurrido un error new: - prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Solo aprueba esta solicitud si reconoces y confías en esta fuente. + prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente. review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.fr-CA.yml b/config/locales/doorkeeper.fr-CA.yml index f3dad084b56fb0..9279a8a26ace25 100644 --- a/config/locales/doorkeeper.fr-CA.yml +++ b/config/locales/doorkeeper.fr-CA.yml @@ -60,6 +60,7 @@ fr-CA: error: title: Une erreur est survenue new: + prompt_html: "%{client_name} aimerait avoir la permission d'accéder à votre compte. Approuver cette demande uniquement si vous reconnaissez et faites confiance à cette source." review_permissions: Examiner les autorisations title: Autorisation requise show: diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index fac58460c6b458..71c9605d8a9393 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -60,6 +60,7 @@ fr: error: title: Une erreur est survenue new: + prompt_html: "%{client_name} aimerait avoir la permission d'accéder à votre compte. Approuver cette demande uniquement si vous reconnaissez et faites confiance à cette source." review_permissions: Examiner les autorisations title: Autorisation requise show: diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml index 4dabc19e432ad6..dc1b8c08b1baa5 100644 --- a/config/locales/doorkeeper.ko.yml +++ b/config/locales/doorkeeper.ko.yml @@ -60,6 +60,7 @@ ko: error: title: 오류가 발생하였습니다 new: + prompt_html: "%{client_name}이 계정에 접근할 권한을 요청합니다. 내가 알아볼 수 있고 신뢰할 수 있는 출처의 요청인 경우에만 승인하세요." review_permissions: 권한 검토 title: 승인 필요 show: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 7d0f66a0c06628..a3f968d1396bad 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -821,8 +821,12 @@ eo: message_html: Vi ne difinis iujn servilajn regulojn. sidekiq_process_check: message_html: Neniu Sidekiq-procezo por la %{value} vico + software_version_check: + message_html: Mastodon-ĝisdatigo disponeblas. software_version_critical_check: action: Vidi disponeblajn ĝisdatigojn + software_version_patch_check: + action: Vidi disponeblajn ĝisdatigojn upload_check_privacy_error: action: Klaku ĉi tie por pliaj informoj message_html: "Via retservilo estas misagordita. La privateco de viaj uzantoj estas en risko." diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 292bbbff513aac..49b8f288fa0436 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -875,6 +875,9 @@ es-AR: message_html: No definiste ninguna regla del servidor. sidekiq_process_check: message_html: No hay ningún proceso Sidekiq en ejecución para la/s cola/s %{value}. Por favor, revisá tu configuración de Sidekiq + software_version_check: + action: Ver actualizaciones disponibles + message_html: Hay disponible una actualización de Mastodon. software_version_critical_check: action: Ver actualizaciones disponibles message_html: Una actualización crítica de Mastodon está disponible; por favor, actualizá lo antes posible. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 45d88645029d06..0f4c8452c007dc 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -875,6 +875,9 @@ es-MX: message_html: No ha definido ninguna regla del servidor. sidekiq_process_check: message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq + software_version_check: + action: Ver actualizaciones disponibles + message_html: Hay disponible una actualización de Mastodon. software_version_critical_check: action: Ver actualizaciones disponibles message_html: Una actualización crítica de Mastodon está disponible, por favor actualice lo antes posible. diff --git a/config/locales/es.yml b/config/locales/es.yml index 85bcf9065a8b48..aa18e7b52eb916 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -875,6 +875,9 @@ es: message_html: No ha definido ninguna regla del servidor. sidekiq_process_check: message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq + software_version_check: + action: Ver actualizaciones disponibles + message_html: Hay disponible una actualización de Mastodon. software_version_critical_check: action: Ver actualizaciones disponibles message_html: Una actualización crítica de Mastodon está disponible, por favor actualiza lo antes posible. diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 258dda8cc421d3..22ccc711612746 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -875,6 +875,9 @@ fi: message_html: Et ole määritellyt palvelimen sääntöjä lainkaan. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset + software_version_check: + action: Näytä saatavilla olevat päivitykset + message_html: Saatavilla on Mastodon-päivitys. software_version_critical_check: action: Näytä saatavilla olevat päivitykset message_html: Kriittinen Mastodon-päivitys on saatavilla. Tee päivitys mahdollisimman ripeästi. diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 034e1f6bd250e0..31eb67b3b099af 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -875,6 +875,9 @@ fo: message_html: Tú hevur ikki ásett nakrar ambætarareglur. sidekiq_process_check: message_html: Eingin Sidekiq gongd koyrir fyri %{value} bíðirøðina(r). Vinarliga eftirkanna Sidekiq uppsetingina + software_version_check: + action: Sí tøkar dagføringar + message_html: Ein Mastodon-dagføring er tøk. software_version_critical_check: action: Sí tøkar dagføringar message_html: Ein kritisk Mastodon-dagføring er tøk, vinarliga dagfør sum skjótast. diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 6ab0ee66606d8f..16cdb79317cc5b 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -262,8 +262,10 @@ fr-CA: destroy_user_role_html: "%{name} a supprimé le rôle %{target}" disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}" disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}" disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}" enable_custom_emoji_html: "%{name} a activé l'émoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}" enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}" memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial" promote_user_html: "%{name} a promu l'utilisateur·rice %{target}" @@ -876,6 +878,9 @@ fr-CA: message_html: Vous n'avez pas défini de règles pour le serveur. sidekiq_process_check: message_html: Aucun processus Sidekiq en cours d'exécution pour la/les file(s) d'attente %{value}. Veuillez vérifier votre configuration de Sidekiq + software_version_check: + action: Voir les mises à jour disponibles + message_html: Une mise à jour de Mastodon est disponible. software_version_critical_check: action: Voir les mises à jour disponibles message_html: Une mise à jour critique de Mastodon est disponible, veuillez mettre à jour le plus rapidement possible. @@ -1447,6 +1452,7 @@ fr-CA: unsubscribe: action: Oui, me désabonner complete: Désabonné·e + confirmation_html: Êtes-vous sûr de vouloir vous désabonner de la réception de %{type} pour Mastodon sur %{domain} à votre adresse e-mail %{email} ? Vous pouvez toujours vous réabonner à partir de vos paramètres de notification par messagerie. emails: notification_emails: favourite: e-mails de notifications de favoris @@ -1692,6 +1698,7 @@ fr-CA: delete: Suppression du compte development: Développement edit_profile: Modifier le profil + export: Exportation featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6e13466bfe0ee7..bc57d00e658f37 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -262,8 +262,10 @@ fr: destroy_user_role_html: "%{name} a supprimé le rôle %{target}" disable_2fa_user_html: "%{name} a désactivé l'authentification à deux facteurs pour l'utilisateur·rice %{target}" disable_custom_emoji_html: "%{name} a désactivé l'émoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} a désactivé l'authentification par jeton de courriel pour %{target}" disable_user_html: "%{name} a désactivé la connexion de l'utilisateur·rice %{target}" enable_custom_emoji_html: "%{name} a activé l'émoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} a activé l'authentification par jeton de courriel pour %{target}" enable_user_html: "%{name} a activé la connexion de l'utilisateur·rice %{target}" memorialize_account_html: "%{name} a converti le compte de %{target} en un mémorial" promote_user_html: "%{name} a promu l'utilisateur·rice %{target}" @@ -427,7 +429,7 @@ fr: undo: Annuler le blocage de domaine view: Afficher les blocages de domaines email_domain_blocks: - add_new: Ajouter + add_new: Ajouter un nouveau allow_registrations_with_approval: Autoriser les inscriptions avec approbation attempts_over_week: one: "%{count} tentative au cours de la dernière semaine" @@ -876,6 +878,9 @@ fr: message_html: Vous n'avez pas défini de règles pour le serveur. sidekiq_process_check: message_html: Aucun processus Sidekiq en cours d'exécution pour la/les file(s) d'attente %{value}. Veuillez vérifier votre configuration de Sidekiq + software_version_check: + action: Voir les mises à jour disponibles + message_html: Une mise à jour de Mastodon est disponible. software_version_critical_check: action: Voir les mises à jour disponibles message_html: Une mise à jour critique de Mastodon est disponible, veuillez mettre à jour le plus rapidement possible. @@ -1447,6 +1452,7 @@ fr: unsubscribe: action: Oui, se désinscrire complete: Désinscrit + confirmation_html: Êtes-vous sûr de vouloir vous désabonner de la réception de %{type} pour Mastodon sur %{domain} à votre adresse e-mail %{email} ? Vous pouvez toujours vous réabonner à partir de vos paramètres de notification par messagerie. emails: notification_emails: favourite: e-mails de notifications de favoris @@ -1692,6 +1698,7 @@ fr: delete: Suppression du compte development: Développement edit_profile: Modifier le profil + export: Exportation featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/ga.yml b/config/locales/ga.yml index c678e93323e7c4..e25865903ea365 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -917,6 +917,9 @@ ga: message_html: Níl aon rialacha freastalaí sainmhínithe agat. sidekiq_process_check: message_html: Níl próiseas Sidekiq ag rith don scuaine/(scuainí) %{value}. Déan athbhreithniú ar do chumraíocht Sidekiq + software_version_check: + action: Féach nuashonruithe atá ar fáil + message_html: Tá nuashonrú Mastodon ar fáil. software_version_critical_check: action: Féach nuashonruithe atá ar fáil message_html: Tá nuashonrú ríthábhachtach Mastodon ar fáil, nuashonraigh chomh tapa agus is féidir le do thoil. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 11f2a415f26731..5a00db954813e8 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -875,6 +875,9 @@ hu: message_html: Még nem definiáltál egy szerver szabályt sem. sidekiq_process_check: message_html: Nincs Sidekiq folyamat, mely a %{value} sorhoz van rendelve. Kérlek, nézd át a Sidekiq beállításait + software_version_check: + action: Elérhető frissítések megtekintése + message_html: Egy Mastodon-frissítés elérhető. software_version_critical_check: action: Elérhető frissítések megtekintése message_html: Kritikus Mastodon frissítés érhető el, frissíts a lehető leggyorsabban. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index ba43310e02dbb0..3f6c4b39b8b646 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -863,6 +863,9 @@ ko: message_html: 아직 서버 규칙을 정하지 않았습니다. sidekiq_process_check: message_html: "%{value} 큐에 대한 사이드킥 프로세스가 발견되지 않았습니다. 사이드킥 설정을 검토해주세요" + software_version_check: + action: 사용 가능한 업데이트 보기 + message_html: 마스토돈 업데이트가 있습니다. software_version_critical_check: action: 사용 가능한 업데이트 보기 message_html: 긴급 마스토돈 업데이트가 있으니, 가능한 서둘러 업데이트 해주세요. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 81047d92e7d4eb..8f6afc2426bb9b 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1695,6 +1695,7 @@ nn: delete: Kontosletting development: Utvikling edit_profile: Endr profil + export: Eksporter featured_tags: Utvalgte emneknagger import: Hent inn import_and_export: Importer og eksporter diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 30022be93ab0b9..5e7317c5fbb730 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -875,6 +875,9 @@ pt-BR: message_html: Você não definiu nenhuma regra de servidor. sidekiq_process_check: message_html: Nenhum processo Sidekiq rodando para a(s) fila(s) %{value}. Por favor, revise a sua configuração para Sidekiq + software_version_check: + action: Ver atualizações disponíveis + message_html: Uma atualização do Mastodon está disponível. software_version_critical_check: action: Ver atualizações disponíveis message_html: Uma atualização crítica do Mastodon está disponível. Por favor, atualize o mais rápido possível. diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index a2cf8e4222543a..7b7d92995b04e8 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -3,6 +3,7 @@ bg: simple_form: hints: account: + attribution_domains_as_text: Защитава от фалшиви атрибути. discoverable: Вашите публични публикации и профил може да се представят или препоръчват в различни области на Mastodon и вашия профил може да се предлага на други потребители. display_name: Вашето пълно име или псевдоним. fields: Вашата начална страница, местоимения, години, всичко що искате. @@ -130,6 +131,7 @@ bg: name: Можете да смените само употребата на големи/малки букви, например, за да е по-четимо user: chosen_languages: Само публикации на отметнатите езици ще се показват в публичните часови оси + role: Ролята управлява какви позволения има потребителят. user_role: color: Цветът, използван за ролите в потребителския интерфейс, като RGB в шестнадесетичен формат highlighted: Това прави ролята обществено видима @@ -142,6 +144,7 @@ bg: url: До къде ще се изпращат събитията labels: account: + attribution_domains_as_text: Позволяване само на особени уебсайтове discoverable: Включване на профил и публикации в алгоритмите за откриване fields: name: Етикет diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 053816ef881c06..cb4a9041e81eb6 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -3,6 +3,7 @@ eo: simple_form: hints: account: + attribution_domains_as_text: Protektas kontraŭ falsaj atribuoj. discoverable: Viaj publikaj afiŝoj kaj profilo povas esti prezentitaj aŭ rekomenditaj en diversaj lokoj de Mastodon kaj via profilo povas esti proponita al aliaj uzantoj. display_name: Via plena nomo aŭ via kromnomo. fields: Via retpaĝo, pronomoj, aĝo, ĉio, kion vi volas. @@ -78,6 +79,7 @@ eo: bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj. closed_registrations_message: Montrita kiam registroj fermitas custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon. + favicon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan Mastodon-favikono kun propra bildsimbolo. mascot: Anstatauigi la ilustraĵon en la altnivela retinterfaco. peers_api_enabled: Listo de domajnaj nomoj kiujn ĉi tiu servilo renkontis en la fediverso. Neniuj datumoj estas inkluditaj ĉi tie pri ĉu vi federacias kun donita servilo, nur ke via servilo scias pri ĝi. Ĉi tio estas uzata de servoj kiuj kolektas statistikojn pri federacio en ĝenerala signifo. profile_directory: La profilujo listigas ĉiujn uzantojn kiu volonte malkovrebli. @@ -111,6 +113,7 @@ eo: sign_up_requires_approval: Novaj registriĝoj bezonos vian aprobon severity: Elektu, kio okazos pri petoj de ĉi tiu IP-adreso rule: + hint: Laŭvola. Provizu pliajn detalojn pri la regulo text: Priskribu regulon aŭ neceson por uzantoj en ĉi tiu servilo. Provu fari ĝin mallonga kaj simpla sessions: otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:' @@ -122,6 +125,7 @@ eo: name: Vi povas ŝanĝi nur la majuskladon de la literoj, ekzemple, por igi ĝin pli legebla user: chosen_languages: Kun tio markita nur mesaĝoj en elektitaj lingvoj aperos en publikaj tempolinioj + role: La rolo kontrolas kiujn permesojn la uzanto havas. user_role: color: Koloro uzita por la rolo sur la UI, kun RGB-formato highlighted: Ĉi tio igi la rolon publike videbla @@ -134,6 +138,7 @@ eo: url: Kien eventoj sendotas labels: account: + attribution_domains_as_text: Permesi nur specifajn retejojn discoverable: Elstarigi profilon kaj afiŝojn en eltrovantaj algoritmoj fields: name: Etikedo @@ -239,6 +244,7 @@ eo: bootstrap_timeline_accounts: Ĉiam rekomendi ĉi tiujn kontojn al novaj uzantoj closed_registrations_message: Kutima mesaĝo kiam registroj ne estas disponeblaj custom_css: Propa CSS + favicon: Favorikono mascot: Propa maskoto media_cache_retention_period: Audovidaĵkaŝaĵretendauro peers_api_enabled: Eldonu liston de malkovritaj serviloj en la API @@ -294,6 +300,7 @@ eo: patch: Sciigi pri cimoriparaj ĝisdatigoj trending_tag: Nova furoro bezonas kontrolon rule: + hint: Pliaj informoj text: Regulo settings: indexable: Inkludi profilan paĝon en serĉiloj @@ -302,6 +309,7 @@ eo: listable: Permesi ĉi tiun kradvorton aperi en serĉoj kaj sugestoj name: Kradvorto trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj + usable: Permesi afiŝojn uzi ĉi tiun kradvorton loke user: role: Rolo time_zone: Horzono diff --git a/config/locales/sv.yml b/config/locales/sv.yml index ab545005375036..dadd5f160030dd 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -860,6 +860,8 @@ sv: message_html: Du har inte definierat några serverregler. sidekiq_process_check: message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration + software_version_check: + message_html: En Mastodon-uppdatering är tillgänglig. software_version_critical_check: action: Se tillgängliga uppdateringar message_html: En kritisk uppdatering för Mastodon är tillgänglig. Uppdatera så snart som möjligt. diff --git a/config/locales/th.yml b/config/locales/th.yml index fa04b6030ac155..3cb802afe3e981 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -861,12 +861,15 @@ th: message_html: คุณไม่ได้กำหนดกฎของเซิร์ฟเวอร์ใด ๆ sidekiq_process_check: message_html: ไม่มีกระบวนการ Sidekiq ที่กำลังทำงานสำหรับคิว %{value} โปรดตรวจทานการกำหนดค่า Sidekiq ของคุณ + software_version_check: + action: ดูการอัปเดตที่พร้อมใช้งาน + message_html: มีการอัปเดต Mastodon ที่พร้อมใช้งาน software_version_critical_check: action: ดูการอัปเดตที่พร้อมใช้งาน message_html: มีการอัปเดต Mastodon สำคัญพร้อมใช้งาน โปรดอัปเดตโดยเร็วที่สุดเท่าที่จะเป็นไปได้ software_version_patch_check: action: ดูการอัปเดตที่พร้อมใช้งาน - message_html: มีการอัปเดต Mastodon ที่แก้ไขข้อบกพร่องพร้อมใช้งาน + message_html: มีการอัปเดต Mastodon ที่แก้ไขข้อบกพร่องที่พร้อมใช้งาน upload_check_privacy_error: action: ตรวจสอบที่นี่สำหรับข้อมูลเพิ่มเติม message_html: "เว็บเซิร์ฟเวอร์ของคุณกำหนดค่าไม่ถูกต้อง ความเป็นส่วนตัวของผู้ใช้ของคุณตกอยู่ในความเสี่ยง" @@ -1666,6 +1669,7 @@ th: delete: การลบบัญชี development: การพัฒนา edit_profile: แก้ไขโปรไฟล์ + export: ส่งออก featured_tags: แฮชแท็กที่น่าสนใจ import: การนำเข้า import_and_export: การนำเข้าและการส่งออก diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 2935948a475f31..738263191150de 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -875,6 +875,9 @@ tr: message_html: Herhangi bir sunucu kuralı belirlemediniz. sidekiq_process_check: message_html: "%{value} kuyruk(lar)ı için herhangi bir Sidekiq süreci çalışmıyor. Lütfen Sidekiq yapılandırmanızı gözden geçirin" + software_version_check: + action: Mevcut güncellemeleri görün + message_html: Mastodon güncellemesi mevcut. software_version_critical_check: action: Mevcut güncellemeleri göster message_html: Kritik bir Mastodon güncellemesi var, lütfen en kısa sürede güncelleyin. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 21fc4a3bf1a53e..7e44e76e44e762 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -91,7 +91,7 @@ vi: moderation: active: Hoạt động all: Tất cả - disabled: Đã tắt + disabled: Khóa đăng nhập pending: Chờ silenced: Hạn chế suspended: Vô hiệu hóa @@ -861,6 +861,9 @@ vi: message_html: Bạn chưa cập nhật nội quy máy chủ. sidekiq_process_check: message_html: Sidekiq không hoạt động khi truy vấn %{value}. Hãy kiểm tra lại cấu hình Sidekiq + software_version_check: + action: Bản cập nhật mới + message_html: Có bản cập nhật Mastodon mới. software_version_critical_check: action: Bản cập nhật mới message_html: Có bản cập nhật quan trọng của Mastodon, vui lòng cập nhật nhanh nhất có thể. From bf7cfba48e03bf482bbdae1d92378c8cebf0702e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:53:52 +0000 Subject: [PATCH 146/467] Update DefinitelyTyped types (non-major) (#32163) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 62a538b42cbe6b..f9867cc91df82d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3762,9 +3762,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.7 - resolution: "@types/lodash@npm:4.17.7" - checksum: 10c0/40c965b5ffdcf7ff5c9105307ee08b782da228c01b5c0529122c554c64f6b7168fc8f11dc79aa7bae4e67e17efafaba685dc3a47e294dbf52a65ed2b67100561 + version: 4.17.9 + resolution: "@types/lodash@npm:4.17.9" + checksum: 10c0/54de935e835508b5f835a5dfaedd2b9a299685a21d11e9c5cd2dde57331d03bc2f98b71d2424ca8460f447ecd55a673e45ccdb70e58f9f72745710f6b91abc60 languageName: node linkType: hard @@ -3983,12 +3983,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.8 - resolution: "@types/react@npm:18.3.8" + version: 18.3.10 + resolution: "@types/react@npm:18.3.10" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 + checksum: 10c0/f5be1de1b0331c1fdb33d577f4cf7f1b949d4bded5347b2351a537f03c51dade5be115e21b161dcf1b37061954d320f6a0bdf8d7b70e24eda51071fdd614383d languageName: node linkType: hard @@ -17257,20 +17257,13 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0": +"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.7.0 resolution: "tslib@npm:2.7.0" checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 languageName: node linkType: hard -"tslib@npm:^2.4.0, tslib@npm:^2.6.2": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a - languageName: node - linkType: hard - "tty-browserify@npm:0.0.0": version: 0.0.0 resolution: "tty-browserify@npm:0.0.0" From 431b3825639ea4087338fcd77ac1adb342b0ef4e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:55:18 +0000 Subject: [PATCH 147/467] Update dependency sass to v1.79.4 (#32139) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f9867cc91df82d..38402229bdfcc9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15520,15 +15520,15 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.79.3 - resolution: "sass@npm:1.79.3" + version: 1.79.4 + resolution: "sass@npm:1.79.4" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/ad171bbbb2d7a789cc47803a59dcf2d0ac92ede34b538bb3fd683b6391a9ac3dc3eabaac264fc9582c770c4e435b85840e011785b7adfc0ac002b51ba91179c9 + checksum: 10c0/505ff0d9267d0fb990971e617acfeabf7c060c55d4cef68fe8a4bc693e7ea88ae7d7caeca3975e4b453459ba4a707b6e5b6979fc9395a7e08f0a43ca6aed06b8 languageName: node linkType: hard From e22eff890003481977ee0bcecee12c3d40aededb Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 30 Sep 2024 11:41:06 +0200 Subject: [PATCH 148/467] Remove regexp timeout feature (#32169) --- config/initializers/regexp.rb | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 config/initializers/regexp.rb diff --git a/config/initializers/regexp.rb b/config/initializers/regexp.rb deleted file mode 100644 index 4e79dc478e1241..00000000000000 --- a/config/initializers/regexp.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -# 2s is a fairly high default, but that should account for slow servers under load -Regexp.timeout = ENV.fetch('REGEXP_TIMEOUT', 2).to_f if Regexp.respond_to?(:timeout=) From 0c872beed4a49ca879e5899ddd96f51c69c68cb8 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 30 Sep 2024 12:25:54 +0200 Subject: [PATCH 149/467] Merge commit from fork This should not change the set of words matched by `USERNAME_RE` but does change the one matched by `MENTION_RE`. Indeed, the previous regexp allowed a domain part to start with `.` or `-`, which the new regexp does not allow. --- app/models/account.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 078d7aaa056220..3b841e7c77622e 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -68,8 +68,8 @@ class Account < ApplicationRecord DEFAULT_FIELDS_SIZE = 4 INSTANCE_ACTOR_ID = -99 - USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i - MENTION_RE = %r{(? Date: Mon, 30 Sep 2024 12:42:59 +0200 Subject: [PATCH 150/467] Bump version to 4.3.0-rc.1 (#32124) --- CHANGELOG.md | 48 ++++++++++++++++++++++++++++++----------- docker-compose.yml | 6 +++--- lib/mastodon/version.rb | 2 +- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d1e0bfcf78061..5eef082cccd83d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,12 +10,13 @@ The following changelog entries focus on changes visible to users, administrator - **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\ This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared. +- Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx)) - Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire) - Update dependencies ### Added -- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610 and #31929 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ +- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089 and #32085 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\ This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\ As part of this, the visual design of the entire notifications feature has been revamped.\ @@ -27,7 +28,7 @@ The following changelog entries focus on changes visible to users, administrator - `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts - `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group - `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count -- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, and #31723 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ +- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723 and #32062 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\ You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\ Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\ @@ -76,7 +77,11 @@ The following changelog entries focus on changes visible to users, administrator Clicking the domain of a user in their profile will now open a tooltip with a short explanation about servers and federation. - **Add support for Redis sentinel** (#31694, #31623, #31744, #31767, and #31768 by @ThisIsMissEm and @oneiros)\ See https://docs.joinmastodon.org/admin/scaling/#redis-sentinel -- Add ability to reorder uploaded media before posting in web UI (#28456 by @Gargron) +- **Add ability to reorder uploaded media before posting in web UI** (#28456 and #32093 by @Gargron) +- Add “A Mastodon update is available.” message on admin dashboard for non-bugfix updates (#32106 by @ClearlyClaire) +- Add ability to view alt text by clicking the ALT badge in web UI (#32058 by @Gargron) +- Add preview of followers removed in domain block modal in web UI (#32032 and #32105 by @ClearlyClaire and @Gargron) +- Add reblogs and favourites counts to statuses in ActivityPub (#32007 by @Gargron) - Add moderation interface for searching hashtags (#30880 by @ThisIsMissEm) - Add ability for admins to configure instance favicon and logo (#30040, #30208, #30259, #30375, #30734, #31016, and #30205 by @ClearlyClaire, @FawazFarid, @JasonPunyon, @mgmn, and @renchap)\ This is also exposed through the REST API: https://docs.joinmastodon.org/entities/Instance/#icon @@ -122,14 +127,14 @@ The following changelog entries focus on changes visible to users, administrator - Add Interlingue and Interlingua to interface languages (#28630 and #30828 by @Dhghomon and @renchap) - Add Kashubian, Pennsylvania Dutch, Vai, Jawi Malay, Mohawk and Low German to posting languages (#26024, #26634, #27136, #29098, #27115, and #27434 by @EngineerDali, @HelgeKrueger, and @gunchleoc) - Add option to use native Ruby driver for Redis through `REDIS_DRIVER=ruby` (#30717 by @vmstan) -- Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, and #30858 by @ClearlyClaire, @Gargron, and @mjankowski)\ +- Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, #30858 and #32104 by @ClearlyClaire, @Gargron, and @mjankowski)\ Server admins can now use libvips as a faster and lighter alternative to ImageMagick for processing user-uploaded images.\ This requires libvips 8.13 or newer, and needs to be enabled with `MASTODON_USE_LIBVIPS=true`.\ This is enabled by default in the official Docker images, and is intended to completely replace ImageMagick in the future. - Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm) - Add anchors to each authorized application in `/oauth/authorized_applications` (#31677 by @fowl2) - Add active animation to header settings button (#30221, #30307, and #30388 by @daudix) -- Add OpenTelemetry instrumentation (#30130, #30322, #30353, and #30350 by @julianocosta89, @renchap, and @robbkidd)\ +- Add OpenTelemetry instrumentation (#30130, #30322, #30353, #30350 and #31998 by @julianocosta89, @renchap, @robbkidd and @timetinytim)\ See https://docs.joinmastodon.org/admin/config/#otel for documentation - Add API to get multiple accounts and statuses (#27871 and #30465 by @ClearlyClaire)\ This adds `GET /api/v1/accounts` and `GET /api/v1/statuses` to the REST API, see https://docs.joinmastodon.org/methods/accounts/#index and https://docs.joinmastodon.org/methods/statuses/#index @@ -138,7 +143,6 @@ The following changelog entries focus on changes visible to users, administrator - Add RFC8414 OAuth 2.0 server metadata (#29191 by @ThisIsMissEm) - Add loading indicator and empty result message to advanced interface search (#30085 by @ClearlyClaire) - Add `profile` OAuth 2.0 scope, allowing more limited access to user data (#29087 and #30357 by @ThisIsMissEm) -- Add global Regexp timeout (#31928 by @ClearlyClaire) - Add the role ID to the badge component (#29707 by @renchap) - Add diagnostic message for failure during CLI search deploy (#29462 by @mjankowski) - Add pagination `Link` headers on API accounts/statuses when pinned true (#29442 by @mjankowski) @@ -167,15 +171,15 @@ The following changelog entries focus on changes visible to users, administrator - **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\ In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state. -- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, and #31889 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ +- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ The compose form has been completely redesigned for a more modern and consistent look, as well as spelling out the chosen privacy setting and language name at all times.\ As part of this, the “Unlisted” privacy setting has been renamed to “Quiet public”. - **Change design of modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, #31399, #31555, #31752, #31801, #31883, #31844, #31864, and #31943 by @ClearlyClaire, @Gargron, @tribela and @vmstan)\ The mute, block, and domain block confirmation modals have been completely redesigned to be clearer and include more detailed information on the action to be performed.\ They also have a more modern and consistent design, along with other confirmation modals in the application. -- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan) +- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, #31510 and #32128 by @ClearlyClaire, @Gargron, @mjankowski, @renchap, and @vmstan) - **Change onboarding prompt to follow suggestions carousel in web UI** (#28878, #29272, and #31912 by @Gargron) -- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\ +- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, #29879, #32073 and #32132 by @c960657, @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\ All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to read and keeping maximum compatibility across mail clients. - **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\ This replaces the “past interactions” recommendation algorithm with a “friends of friends” algorithm that suggests accounts followed by people you follow, and a “similar profiles” algorithm that suggests accounts with a profile similar to your most recent follows.\ @@ -188,10 +192,17 @@ The following changelog entries focus on changes visible to users, administrator Administrators may need to update their setup accordingly. - Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron) - Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros) -- Change embedded posts to use web UI (#31766 by @Gargron) +- Change embedded posts to use web UI (#31766 and #32135 by @Gargron) - Change inner borders in media galleries in web UI (#31852 by @Gargron) -- Change design of hide media button in web UI (#31807 by @Gargron) +- Change design of media attachments and profile media tab in web UI (#31807, #32048, and #31967 by @Gargron) - Change labels on thread indicators in web UI (#31806 by @Gargron) +- Change label of "Data export" menu item in settings interface (#32099 by @c960657) +- Change responsive break points on navigation panel in web UI (#32034 by @Gargron) +- Change cursor to `not-allowed` on disabled buttons (#32076 by @mjankowski) +- Change OAuth authorization prompt to not refer to apps as “third-party” (#32005 by @Gargron) +- Change Mastodon to issue correct HTTP signatures by default (#31994 by @ClearlyClaire) +- Change zoom icon in web UI (#29683 by @Gargron) +- Change directory page to use URL query strings for options (#31980, #31977 and #31984 by @ClearlyClaire and @renchap) - Change report action buttons to be disabled when action has already been taken (#31773, #31822, and #31899 by @ClearlyClaire and @ThisIsMissEm) - Change width of columns in advanced web UI (#31762 by @Gargron) - Change design of unread conversations in web UI (#31763 by @Gargron) @@ -254,6 +265,7 @@ The following changelog entries focus on changes visible to users, administrator ### Removed +- Remove unused E2EE messaging code and related `crypto` OAuth scope (#31193, #31945, #31963, and #31964 by @ClearlyClaire and @mjankowski) - Remove StatsD integration (replaced by OpenTelemetry) (#30240 by @mjankowski) - Remove `CacheBuster` default options (#30718 by @mjankowski) - Remove home marker updates from the Web UI (#22721 by @davbeck)\ @@ -269,9 +281,21 @@ The following changelog entries focus on changes visible to users, administrator - Fix log out from user menu not working on Safari (#31402 by @renchap) - Fix various issues when in link preview card generation (#28748, #30017, #30362, #30173, #30853, #30929, #30933, #30957, #30987, and #31144 by @adamniedzielski, @oneiros, @phocks, @timothyjrogers, and @tribela) - Fix handling of missing links in Webfinger responses (#31030 by @adamniedzielski) +- Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire) +- Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire) +- Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron) +- Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron) +- Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire) +- Fix the appearance of avatars when they do not load (#31966 by @renchap) +- Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657) - Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil) - Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire) - Fix cross-origin loading of `inert.css` polyfill (#30687 by @louis77) +- Fix wrapping in dashboard quick access buttons (#32043 by @renchap) +- Fix recently used tags hint being displayed in profile edition page when there is none (#32120 by @mjankowski) +- Fix checkbox lists on narrow screens in the settings interface (#32112 by @mjankowski) +- Fix the position of status action buttons being affected by interaction counters (#32084 by @renchap) +- Fix the summary of converted ActivityPub object types to be treated as HTML (#28629 by @Menrath) - Fix cutoff of instance name in sign-up form (#30598 by @oneiros) - Fix invalid date searches returning 503 errors (#31526 by @notchairmk) - Fix invalid `visibility` values in `POST /api/v1/statuses` returning 500 errors (#31571 by @c960657) @@ -285,7 +309,7 @@ The following changelog entries focus on changes visible to users, administrator - Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm) - Fix right-to-left text in preview cards (#30930 by @ClearlyClaire) - Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski) -- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, and #31445 by @valtlai and @vmstan) +- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445 and #32091 by @ClearlyClaire, @valtlai and @vmstan) - Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire) - Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire) - Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers) diff --git a/docker-compose.yml b/docker-compose.yml index c4e8cb73748122..41876d26f99e23 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-beta.2 + image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -83,7 +83,7 @@ services: # build: # dockerfile: ./streaming/Dockerfile # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-beta.2 + image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-rc.1 restart: always env_file: .env.production command: node ./streaming/index.js @@ -101,7 +101,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-beta.2 + image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 9b6ea2e4e56c27..8ee37c683ffaf6 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -17,7 +17,7 @@ def patch end def default_prerelease - 'beta.2' + 'rc.1' end def prerelease From 07cd1fd1efe0c47e4738189297a484cc2662aebf Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 30 Sep 2024 19:32:23 +0200 Subject: [PATCH 151/467] Support translation branches in Crowdin (#32174) --- .github/workflows/crowdin-download-stable.yml | 69 +++++++++++++++++++ .github/workflows/crowdin-upload.yml | 2 +- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/crowdin-download-stable.yml diff --git a/.github/workflows/crowdin-download-stable.yml b/.github/workflows/crowdin-download-stable.yml new file mode 100644 index 00000000000000..c0b402a5b9300e --- /dev/null +++ b/.github/workflows/crowdin-download-stable.yml @@ -0,0 +1,69 @@ +name: Crowdin / Download translations (stable branches) +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + download-translations-stable: + runs-on: ubuntu-latest + if: github.repository == 'mastodon/mastodon' + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Increase Git http.postBuffer + # This is needed due to a bug in Ubuntu's cURL version? + # See https://github.com/orgs/community/discussions/55820 + run: | + git config --global http.version HTTP/1.1 + git config --global http.postBuffer 157286400 + + # Download the translation files from Crowdin + - name: crowdin action + uses: crowdin/github-action@v2 + with: + upload_sources: false + upload_translations: false + download_translations: true + crowdin_branch_name: ${{ github.base_ref || github.ref_name }} + push_translations: false + create_pull_request: false + env: + CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + + # As the files are extracted from a Docker container, they belong to root:root + # We need to fix this before the next steps + - name: Fix file permissions + run: sudo chown -R runner:docker . + + # This is needed to run the normalize step + - name: Set up Ruby environment + uses: ./.github/actions/setup-ruby + + - name: Run i18n normalize task + run: bundle exec i18n-tasks normalize + + # Create or update the pull request + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7.0.1 + with: + commit-message: 'New Crowdin translations' + title: 'New Crowdin Translations for ${{ github.base_ref || github.ref_name }} (automated)' + author: 'GitHub Actions ' + body: | + New Crowdin translations, automated with GitHub Actions + + See `.github/workflows/crowdin-download.yml` + + This PR will be updated every day with new translations. + + Due to a limitation in GitHub Actions, checks are not running on this PR without manual action. + If you want to run the checks, then close and re-open it. + branch: i18n/crowdin/translations-${{ github.base_ref || github.ref_name }} + base: ${{ github.base_ref || github.ref_name }} + labels: i18n diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml index b7a0a2b8199e06..62ad1150bca414 100644 --- a/.github/workflows/crowdin-upload.yml +++ b/.github/workflows/crowdin-upload.yml @@ -31,7 +31,7 @@ jobs: upload_sources: true upload_translations: false download_translations: false - crowdin_branch_name: main + crowdin_branch_name: ${{ github.base_ref || github.ref_name }} env: CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }} From 0b6d217b9e0c51cd4132f8e7d24c8df4b9f02f20 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 04:19:53 -0400 Subject: [PATCH 152/467] Use account display name for pretend blog example in attribution area (#32188) --- app/views/settings/verifications/show.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/settings/verifications/show.html.haml b/app/views/settings/verifications/show.html.haml index 5318b0767ddfb0..af9556d0048704 100644 --- a/app/views/settings/verifications/show.html.haml +++ b/app/views/settings/verifications/show.html.haml @@ -50,13 +50,13 @@ = image_tag frontend_asset_url('images/preview.png'), alt: '', class: 'status-card__image-image' .status-card__content %span.status-card__host - %span= t('author_attribution.s_blog', name: @account.username) + %span= t('author_attribution.s_blog', name: display_name(@account)) · %time.time-ago{ datetime: 1.year.ago.to_date.iso8601 } %strong.status-card__title= t('author_attribution.example_title') .more-from-author = logo_as_symbol(:icon) - = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + content_tag(:bdi, display_name(@account)) }) + = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + tag.bdi(display_name(@account)) }) .actions = f.button :button, t('generic.save_changes'), type: :submit From 5839ee434ba8510f9eb50804ee4530dacf146e97 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 08:21:17 +0000 Subject: [PATCH 153/467] New Crowdin Translations (automated) (#32195) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 3 +- app/javascript/mastodon/locales/el.json | 8 ++++ app/javascript/mastodon/locales/fr-CA.json | 1 + app/javascript/mastodon/locales/fr.json | 1 + app/javascript/mastodon/locales/gd.json | 10 ++++- app/javascript/mastodon/locales/hu.json | 6 +++ app/javascript/mastodon/locales/kab.json | 4 +- app/javascript/mastodon/locales/pt-BR.json | 8 +++- config/locales/doorkeeper.el.yml | 1 + config/locales/el.yml | 43 ++++++++++++++++++++++ config/locales/eo.yml | 5 +++ config/locales/gd.yml | 6 ++- config/locales/kab.yml | 9 +++++ config/locales/pt-BR.yml | 2 +- 14 files changed, 101 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 18830708db615f..b11382cf0312b6 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -84,6 +84,7 @@ "alert.rate_limited.title": "معدل الطلبات محدود", "alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.", "alert.unexpected.title": "المعذرة!", + "alt_text_badge.title": "نص بديل", "announcement.announcement": "إعلان", "attachments_list.unprocessed": "(غير معالَج)", "audio.hide": "إخفاء المقطع الصوتي", @@ -758,7 +759,7 @@ "status.history.edited": "عدله {name} {date}", "status.load_more": "حمّل المزيد", "status.media.open": "اضغط للفتح", - "status.media.show": "اضغط لإظهاره", + "status.media.show": "اضغط لإظهارها", "status.media_hidden": "وسائط مخفية", "status.mention": "أذكُر @{name}", "status.more": "المزيد", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 85f893c63ddc3e..2565f5da687011 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Περιορισμός συχνότητας", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.title": "Ουπς!", + "alt_text_badge.title": "Εναλλακτικό κείμενο", "announcement.announcement": "Ανακοίνωση", "attachments_list.unprocessed": "(μη επεξεργασμένο)", "audio.hide": "Απόκρυψη αρχείου ήχου", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Κανείς από αυτόν τον διακομιστή δεν μπορεί να σε ακολουθήσει.", "domain_block_modal.they_wont_know": "Δεν θα ξέρουν ότι έχουν αποκλειστεί.", "domain_block_modal.title": "Αποκλεισμός τομέα;", + "domain_block_modal.you_will_lose_num_followers": "Θα χάσετε {followersCount, plural, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.", + "domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.", "domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.", "domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.", "domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.", @@ -849,6 +852,11 @@ "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής", "upload_form.description": "Περιγραφή για άτομα με προβλήματα όρασης", + "upload_form.drag_and_drop.instructions": "Για να επιλέξετε ένα συνημμένο αρχείο πολυμέσων, πατήστε το Space ή το Enter. Ενώ το σέρνετε, χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε το συνημμένο αρχείο πολυμέσων προς οποιαδήποτε κατεύθυνση. Πατήστε ξανά το Space ή το Enter για να αποθέσετε το συνημμένο αρχείο πολυμέσων στη νέα του θέση ή πατήστε το Escape για ακύρωση.", + "upload_form.drag_and_drop.on_drag_cancel": "Η μετακίνηση ακυρώθηκε. Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_end": "Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_over": "Έγινε μετακίνηση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_start": "Έγινε επιλογή του συνημμένου αρχείου πολυμέσων «{item}».", "upload_form.edit": "Επεξεργασία", "upload_form.thumbnail": "Αλλαγή μικρογραφίας", "upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index bdceb9bd30d036..3349be4fad1612 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -852,6 +852,7 @@ "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyants", + "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 2acad020935f04..5c4e582a87da4c 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -852,6 +852,7 @@ "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyant·e·s", + "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index ecbc11f3a2b7fa..f6d3f172ca1399 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Cuingeachadh ùine", "alert.unexpected.message": "Thachair mearachd ris nach robh dùil.", "alert.unexpected.title": "Oich!", + "alt_text_badge.title": "Roghainn teacsa", "announcement.announcement": "Brath-fios", "attachments_list.unprocessed": "(gun phròiseasadh)", "audio.hide": "Falaich an fhuaim", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.", "domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.", "domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?", + "domain_block_modal.you_will_lose_num_followers": "Caillidh tu {followersCount, plural, one {{followersCountDisplay} neach-leantainn} two {{followersCountDisplay} luchd-leantainn} few {{followersCountDisplay} luchd-leantainn} other {{followersCountDisplay} luchd-leantainn}} ’s {followingCount, plural, one {{followingCountDisplay} neach a tha thu a’ leantainn} two {{followingCountDisplay} daoine a tha thu a’ leantainn} few {{followingCountDisplay} daoine a tha thu a’ leantainn} other {{followingCountDisplay} daoine a tha thu a’ leantainn}}.", + "domain_block_modal.you_will_lose_relationships": "Caillidh tu a h-uile luchd-leantainn ’s neach a leanas tu air an fhrithealaiche seo.", "domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.", "domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.", "domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.", @@ -330,7 +333,7 @@ "footer.about": "Mu dhèidhinn", "footer.directory": "Eòlaire nam pròifil", "footer.get_app": "Faigh an aplacaid", - "footer.invite": "Thoir cuireadh do dhaoine", + "footer.invite": "Thoir cuireadh", "footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir", "footer.privacy_policy": "Poileasaidh prìobhaideachd", "footer.source_code": "Seall am bun-tùs", @@ -849,6 +852,11 @@ "upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.", "upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag", "upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne", + "upload_form.drag_and_drop.instructions": "Airson ceanglachan meadhain a thogail, brùth air space no enter. Fhad ’ a bhios tu ’ga shlaodadh, cleachd na h-iuchraichean-saighde airson an ceanglachan meadhain a ghluasad gu comhair sam bith. Brùth air space no enter a-rithist airson an ceanglachen meadhain a leigeil às air an ionad ùr aige no brùth air escape airson sgur dheth.", + "upload_form.drag_and_drop.on_drag_cancel": "Chaidh sgur dhen t-slaodadh. Chaidh an ceanglachan meadhain {item} a leigeil às.", + "upload_form.drag_and_drop.on_drag_end": "Chaidh an ceanglachan meadhain {item} a leigeil às.", + "upload_form.drag_and_drop.on_drag_over": "Chaidh an ceanglachan meadhain {item} a ghluasad.", + "upload_form.drag_and_drop.on_drag_start": "Chaidh an ceanglachan meadhain {item} a thogail.", "upload_form.edit": "Deasaich", "upload_form.thumbnail": "Atharraich an dealbhag", "upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 34a9949afd1a1c..8baf584b7833d7 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Adatforgalom korlátozva", "alert.unexpected.message": "Váratlan hiba történt.", "alert.unexpected.title": "Hoppá!", + "alt_text_badge.title": "Helyettesítő szöveg", "announcement.announcement": "Közlemény", "attachments_list.unprocessed": "(feldolgozatlan)", "audio.hide": "Hang elrejtése", @@ -851,6 +852,11 @@ "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára", "upload_form.description": "Leírás vak vagy gyengénlátó emberek számára", + "upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomjon Szóközt vagy Entert. Húzás közben használja a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomja meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomja meg az Esc gombot.", + "upload_form.drag_and_drop.on_drag_cancel": "Az áthúzást megszakította. A(z) {item} médiamelléklet el lett dobva.", + "upload_form.drag_and_drop.on_drag_end": "A(z) {item} médiamelléklet el lett dobva.", + "upload_form.drag_and_drop.on_drag_over": "A(z) {item} médiamelléklet át lett helyezve.", + "upload_form.drag_and_drop.on_drag_start": "A(z) {item} médiamelléklet fel lett véve.", "upload_form.edit": "Szerkesztés", "upload_form.thumbnail": "Bélyegkép megváltoztatása", "upload_form.video_description": "Leírás siket, hallássérült, vak vagy gyengénlátó emberek számára", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 9e2c9f3af8079a..ff06c9c464ed5e 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -1,5 +1,5 @@ { - "about.blocks": "Ulac agbur", + "about.blocks": "Iqeddacen yettwaɛassen", "about.contact": "Anermis:", "about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Ulac taɣẓint", @@ -550,6 +550,7 @@ "report_notification.attached_statuses": "{count, plural, one {{count} n tsuffeɣt} other {{count} n tsuffiɣin}} ttwaqnent", "report_notification.categories.legal": "Azerfan", "report_notification.categories.other": "Ayen nniḍen", + "report_notification.categories.other_sentence": "ayen nniḍen", "report_notification.categories.spam": "Aspam", "report_notification.categories.spam_sentence": "aspam", "report_notification.open": "Ldi aneqqis", @@ -589,6 +590,7 @@ "status.direct": "Bder-d @{name} weḥd-s", "status.direct_indicator": "Abdar uslig", "status.edit": "Ẓreg", + "status.edited": "Taẓrigt taneggarut {date}", "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}", "status.embed": "Awi-d tangalt n weslaɣ", "status.favourite": "Amenyaf", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index d1a3ecdaa73aff..ab5701cde0c0a7 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -437,6 +437,7 @@ "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.zoom_in": "Voltar para o tamanho real", + "lightbox.zoom_out": "Zoom para ajustar", "limited_account_hint.action": "Exibir perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.", "link_preview.author": "Por {name}", @@ -813,7 +814,7 @@ "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.", "status.redraft": "Excluir e rascunhar", "status.remove_bookmark": "Remover do Salvos", - "status.replied_in_thread": "Respondido na discussão", + "status.replied_in_thread": "Respondido na conversa", "status.replied_to": "Em resposta a {name}", "status.reply": "Responder", "status.replyAll": "Responder a conversa", @@ -851,6 +852,11 @@ "upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.", "upload_form.audio_description": "Descrever para deficientes auditivos", "upload_form.description": "Descrever para deficientes visuais", + "upload_form.drag_and_drop.instructions": "Para pegar um anexo de mídia, pressione espaço ou enter. Enquanto arrastar, use as setas do teclado para mover o anexo de mídia em qualquer direção. Pressione espaço ou insira novamente para soltar o anexo de mídia em sua nova posição, ou pressione escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "O arrastamento foi cancelado. O anexo da mídia {item} foi descartado.", + "upload_form.drag_and_drop.on_drag_end": "O anexo {item} foi removido.", + "upload_form.drag_and_drop.on_drag_over": "O anexo de mídia {item} foi movido.", + "upload_form.drag_and_drop.on_drag_start": "Foi coletado o anexo de mídia {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Alterar miniatura", "upload_form.video_description": "Descrever para deficientes auditivos ou visuais", diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml index 59877b6bd06766..984eff887127c4 100644 --- a/config/locales/doorkeeper.el.yml +++ b/config/locales/doorkeeper.el.yml @@ -60,6 +60,7 @@ el: error: title: Εμφανίστηκε σφάλμα new: + prompt_html: Το %{client_name} επιθυμεί το δικαίωμα πρόσβασης στον λογαριασμό σας. Εγκρίνετε αυτό το αίτημα μόνο αν αναγνωρίζετε και εμπιστεύεστε αυτήν την πηγή. review_permissions: Ανασκόπηση δικαιωμάτων title: Απαιτείται έγκριση show: diff --git a/config/locales/el.yml b/config/locales/el.yml index 610ae4026512a7..4496ec51a67f8a 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -953,6 +953,7 @@ el: used_by_over_week: one: Χρησιμοποιήθηκε από ένα άτομο την τελευταία εβδομάδα other: Χρησιμοποιήθηκε από %{count} άτομα την τελευταία εβδομάδα + title: Προτάσεις και τάσεις trending: Τάσεις warning_presets: add_new: Πρόσθεση νέου @@ -1037,7 +1038,9 @@ el: guide_link_text: Μπορεί να συνεισφέρει ο οποιοσδήποτε. sensitive_content: Ευαίσθητο περιεχόμενο application_mailer: + notification_preferences: Αλλαγή προτιμήσεων email salutation: "%{name}," + settings: 'Αλλαγή προτιμήσεων email: %{link}' unsubscribe: Κατάργηση εγγραφής view: 'Προβολή:' view_profile: Προβολή προφίλ @@ -1084,6 +1087,7 @@ el: or_log_in_with: Ή συνδέσου με privacy_policy_agreement_html: Έχω διαβάσει και συμφωνώ με την πολιτική απορρήτου progress: + confirm: Επιβεβαίωση email details: Τα στοιχεία σας review: Η αξιολόγησή μας rules: Αποδοχή κανόνων @@ -1123,6 +1127,8 @@ el: view_strikes: Προβολή προηγούμενων ποινών εναντίον του λογαριασμού σας too_fast: Η φόρμα υποβλήθηκε πολύ γρήγορα, προσπαθήστε ξανά. use_security_key: Χρήση κλειδιού ασφαλείας + author_attribution: + example_title: Δείγμα κειμένου challenge: confirm: Συνέχεια hint_html: "Συμβουλή: Δεν θα σου ζητήσουμε τον κωδικό ασφαλείας σου ξανά για την επόμενη ώρα." @@ -1342,7 +1348,10 @@ el: time_started: Ξεκίνησε στις titles: blocking: Εισαγωγή αποκλεισμένων λογαριασμών + bookmarks: Εισαγωγή σελιδοδεικτών + domain_blocking: Εισαγωγή αποκλεισμένων τομέων following: Εισαγωγή λογαριασμών που ακολουθείτε + lists: Εισαγωγή λιστών type: Τύπος εισαγωγής type_groups: destructive: Μπλοκ & σίγαση @@ -1351,6 +1360,7 @@ el: bookmarks: Σελιδοδείκτες domain_blocking: Λίστα αποκλεισμένων τομέων following: Λίστα ατόμων που ακολουθείτε + lists: Λίστες muting: Λίστα αποσιωπήσεων upload: Μεταμόρφωση invites: @@ -1365,6 +1375,7 @@ el: '86400': 1 μέρα expires_in_prompt: Ποτέ generate: Δημιουργία συνδέσμου πρόσκλησης + invalid: Αυτή η πρόσκληση δεν είναι έγκυρη invited_by: 'Σε προσκάλεσε ο/η:' max_uses: one: 1 χρήσης @@ -1388,6 +1399,11 @@ el: failed_sign_in_html: Αποτυχημένη προσπάθεια σύνδεσης με %{method} από %{ip} (%{browser}) successful_sign_in_html: Επιτυχής σύνδεση με %{method} από %{ip} (%{browser}) title: Ιστορικό ελέγχου ταυτότητας + mail_subscriptions: + unsubscribe: + action: Ναι, κατάργηση συνδρομής + complete: Η συνδρομή καταργήθηκε + title: Κατάργηση συνδρομής media_attachments: validations: images_and_video: Δεν γίνεται να προσθέσεις βίντεο σε ανάρτηση που ήδη περιέχει εικόνες @@ -1467,6 +1483,7 @@ el: update: subject: "%{name} επεξεργάστηκε μια ανάρτηση" notifications: + email_events: Συμβάντα για ειδοποιήσεις μέσω email email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:' number: human: @@ -1507,12 +1524,18 @@ el: other: Άλλες posting_defaults: Προεπιλογές ανάρτησης public_timelines: Δημόσιες ροές + privacy: + privacy: Απόρρητο + search: Αναζήτηση privacy_policy: title: Πολιτική Απορρήτου reactions: errors: limit_reached: Το όριο διαφορετικών αντιδράσεων ξεπεράστηκε unrecognized_emoji: δεν είναι ένα αναγνωρισμένο emoji + redirects: + prompt: Αν εμπιστεύεστε αυτόν τον σύνδεσμο, κάντε κλικ σε αυτόν για να συνεχίσετε. + title: Αποχωρείτε από το %{instance}. relationships: activity: Δραστηριότητα λογαριασμού confirm_follow_selected_followers: Είσαι βέβαιος ότι θες να ακολουθήσεις τους επιλεγμένους ακόλουθους; @@ -1548,6 +1571,9 @@ el: over_daily_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων για εκείνη τη μέρα over_total_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων too_soon: Η προγραμματισμένη ημερομηνία πρέπει να είναι στο μέλλον + self_destruct: + lead_html: Δυστυχώς, το %{domain} κλείνει οριστικά. Αν είχατε λογαριασμό εκεί, δεν θα μπορείτε να συνεχίσετε τη χρήση του, αλλά μπορείτε ακόμα να ζητήσετε ένα αντίγραφο ασφαλείας των δεδομένων σας. + title: Αυτός ο διακομιστής κλείνει οριστικά sessions: activity: Τελευταία δραστηριότητα browser: Φυλλομετρητής @@ -1604,10 +1630,12 @@ el: delete: Διαγραφή λογαριασμού development: Ανάπτυξη edit_profile: Επεξεργασία προφίλ + export: Εξαγωγή featured_tags: Παρεχόμενες ετικέτες import: Εισαγωγή import_and_export: Εισαγωγή και εξαγωγή migrate: Μετακόμιση λογαριασμού + notifications: Ειδοποιήσεις μέσω email preferences: Προτιμήσεις profile: Προφίλ relationships: Ακολουθείς και σε ακολουθούν @@ -1615,6 +1643,12 @@ el: strikes: Παραπτώματα από ομάδα συντονισμού two_factor_authentication: Πιστοποίηση 2 παραγόντων webauthn_authentication: Κλειδιά ασφαλείας + severed_relationships: + download: Λήψη (%{count}) + event_type: + account_suspension: Αναστολή λογαριασμού (%{target_name}) + domain_block: Αναστολή διακομιστή (%{target_name}) + type: Συμβάν statuses: attached: audio: @@ -1697,11 +1731,13 @@ el: contrast: Mastodon (Υψηλή αντίθεση) default: Mastodon (Σκοτεινό) mastodon-light: Mastodon (Ανοιχτόχρωμο) + system: Αυτόματο (θέμα συστήματος) time: formats: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d %b %Y, %H:%M %Z" two_factor_authentication: add: Προσθήκη disable: Απενεργοποίηση 2FA @@ -1789,6 +1825,10 @@ el: feature_action: Μάθε περισσότερα feature_audience: Το Mastodon σού παρέχει μια μοναδική δυνατότητα διαχείρισης του κοινού σου χωρίς μεσάζοντες. Το Mastodon όταν αναπτύσσεται στη δική σου υποδομή σού επιτρέπει να ακολουθείς και να ακολουθείσαι από οποιονδήποτε άλλο συνδεδεμένο διακομιστή Mastodon και κανείς δεν τον ελέγχει, εκτός από σένα. feature_audience_title: Χτίσε το κοινό σου με σιγουριά + post_action: Σύνθεση + share_action: Κοινοποίηση + share_title: Μοιραστείτε το προφίλ σας στο Mastodon + sign_in_action: Σύνδεση subject: Καλώς ήρθες στο Mastodon title: Καλώς όρισες, %{name}! users: @@ -1798,7 +1838,10 @@ el: otp_lost_help_html: Αν χάσεις πρόσβαση και στα δύο, μπορείς να επικοινωνήσεις με %{email} signed_in_as: 'Έχεις συνδεθεί ως:' verification: + here_is_how: Δείτε πώς verification: Πιστοποίηση + verified_links: Οι επαληθευμένοι σύνδεσμοι σας + website_verification: Επαλήθευση ιστοτόπου webauthn_credentials: add: Προσθήκη νέου κλειδιού ασφαλείας create: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index a3f968d1396bad..10b297f1a8b70c 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -218,18 +218,22 @@ eo: update_custom_emoji: Ĝisdatigi proprajn emoĝiojn update_domain_block: Ĝigdatigi domajnan blokadon update_ip_block: Krei IP-regulon + update_report: Ĝisdatigo de Raporto update_status: Ĝisdatigi afiŝon update_user_role: Ĝisdatigi rolon actions: approve_appeal_html: "%{name} aprobis apelacion kontraŭ moderiga decido de %{target}" approve_user_html: "%{name} aprobis registriĝon de %{target}" assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem" + change_email_user_html: "%{name} ŝanĝis retadreson de uzanto %{target}" change_role_user_html: "%{name} ŝanĝis rolon de %{target}" + confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}" create_account_warning_html: "%{name} sendis averton al %{target}" create_announcement_html: "%{name} kreis novan anoncon %{target}" create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}" create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_block_html: "%{name} blokis domajnon %{target}" + create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}" create_ip_block_html: "%{name} kreis regulon por IP %{target}" create_unavailable_domain_html: "%{name} ĉesis sendon al domajno %{target}" create_user_role_html: "%{name} kreis rolon de %{target}" @@ -238,6 +242,7 @@ eo: destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block_html: "%{name} malblokis domajnon %{target}" + destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" destroy_instance_html: "%{name} forigis domajnon %{target}" destroy_ip_block_html: "%{name} forigis regulon por IP %{target}" destroy_status_html: "%{name} forigis mesaĝojn de %{target}" diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 90d03c74e15fdb..a030b0d18584e1 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -903,6 +903,9 @@ gd: message_html: Cha do mhìnich thu riaghailtean an fhrithealaiche fhathast. sidekiq_process_check: message_html: Chan eil pròiseas Sidekiq sam bith a ruith dhan chiutha/dha na ciuthan %{value}. Thoir sùil air an rèiteachadh Sidekiq agad + software_version_check: + action: Faic na h-ùrachaidhean a tha ri fhaighinn + message_html: Tha ùrachadh Mastodon ri fhaighinn. software_version_critical_check: action: Faic na h-ùrachaidhean a tha ri fhaighinn message_html: Tha ùrachadh èiginneach air Mastodon ri fhaighinn, ùraich cho luath ’s a ghabhas. @@ -1021,7 +1024,7 @@ gd: delete: Sguab às edit_preset: Deasaich rabhadh ro-shuidhichte empty: Cha do mhìnich thu ro-sheataichean rabhaidhean fhathast. - title: Ro-sheataichean rabhaidhean + title: Rabhaidhean ro-shocraichte webhooks: add_new: Cuir puing-dheiridh ris delete: Sguab às @@ -1744,6 +1747,7 @@ gd: delete: Sguabadh às cunntais development: Leasachadh edit_profile: Deasaich a’ phròifil + export: Às-phortadh featured_tags: Tagaichean hais brosnaichte import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 12bda84d463d2a..993488f1fc0934 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -264,6 +264,8 @@ kab: domain: Taɣult new: create: Rnu taɣult + export_domain_allows: + no_file: Ula d yiwen ufaylu ma yettwafran export_domain_blocks: no_file: Ulac afaylu yettwafernen follow_recommendations: @@ -529,6 +531,10 @@ kab: account_status: Addad n umiḍan functional: Amiḍan-inek·inem yetteddu s lekmal-is. use_security_key: Seqdec tasarut n teɣlist + author_attribution: + example_title: Amedya n weḍris + more_from_html: Ugar s ɣur %{name} + s_blog: Ablug n %{name} challenge: confirm: Kemmel invalid_password: Yir awal uffir @@ -685,6 +691,9 @@ kab: subject: Yuder-ik·ikem-id %{name} reblog: subject: "%{name} yesselha addad-ik·im" + title: Azuzer amaynut + status: + subject: "%{name} akken i d-y·t·essufeɣ" number: human: decimal_units: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 5e7317c5fbb730..6451e7c601ace5 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1888,7 +1888,7 @@ pt-BR: none: Aviso sensitive: Conta marcada como sensível silence: Conta silenciada - suspend: Conta banida + suspend: Conta suspensa welcome: apps_android_action: Disponível no Google Play apps_ios_action: Disponível na App Store From 1be55ce24418ea149a9ca0def237a76f4c6501af Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 1 Oct 2024 10:22:14 +0200 Subject: [PATCH 154/467] Fix follow notifications from streaming being grouped (#32179) --- .../mastodon/actions/notification_groups.ts | 4 ++ .../mastodon/reducers/notification_groups.ts | 67 ++++++++++--------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index b40b04f8ccfd69..a359913e614bb4 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -70,6 +70,10 @@ function dispatchAssociatedRecords( const supportedGroupedNotificationTypes = ['favourite', 'reblog']; +export function shouldGroupNotificationType(type: string) { + return supportedGroupedNotificationTypes.includes(type); +} + export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index f3c83ccd8d6e44..375e64387633da 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -21,6 +21,7 @@ import { unmountNotifications, refreshStaleNotificationGroups, pollRecentNotifications, + shouldGroupNotificationType, } from 'mastodon/actions/notification_groups'; import { disconnectTimeline, @@ -205,46 +206,50 @@ function processNewNotification( groups: NotificationGroupsState['groups'], notification: ApiNotificationJSON, ) { - const existingGroupIndex = groups.findIndex( - (group) => - group.type !== 'gap' && group.group_key === notification.group_key, - ); + if (shouldGroupNotificationType(notification.type)) { + const existingGroupIndex = groups.findIndex( + (group) => + group.type !== 'gap' && group.group_key === notification.group_key, + ); - // In any case, we are going to add a group at the top - // If there is currently a gap at the top, now is the time to update it - if (groups.length > 0 && groups[0]?.type === 'gap') { - groups[0].maxId = notification.id; - } + // In any case, we are going to add a group at the top + // If there is currently a gap at the top, now is the time to update it + if (groups.length > 0 && groups[0]?.type === 'gap') { + groups[0].maxId = notification.id; + } - if (existingGroupIndex > -1) { - const existingGroup = groups[existingGroupIndex]; + if (existingGroupIndex > -1) { + const existingGroup = groups[existingGroupIndex]; - if ( - existingGroup && - existingGroup.type !== 'gap' && - !existingGroup.sampleAccountIds.includes(notification.account.id) // This can happen for example if you like, then unlike, then like again the same post - ) { - // Update the existing group if ( - existingGroup.sampleAccountIds.unshift(notification.account.id) > - NOTIFICATIONS_GROUP_MAX_AVATARS - ) - existingGroup.sampleAccountIds.pop(); + existingGroup && + existingGroup.type !== 'gap' && + !existingGroup.sampleAccountIds.includes(notification.account.id) // This can happen for example if you like, then unlike, then like again the same post + ) { + // Update the existing group + if ( + existingGroup.sampleAccountIds.unshift(notification.account.id) > + NOTIFICATIONS_GROUP_MAX_AVATARS + ) + existingGroup.sampleAccountIds.pop(); + + existingGroup.most_recent_notification_id = notification.id; + existingGroup.page_max_id = notification.id; + existingGroup.latest_page_notification_at = notification.created_at; + existingGroup.notifications_count += 1; - existingGroup.most_recent_notification_id = notification.id; - existingGroup.page_max_id = notification.id; - existingGroup.latest_page_notification_at = notification.created_at; - existingGroup.notifications_count += 1; + groups.splice(existingGroupIndex, 1); + mergeGapsAround(groups, existingGroupIndex); - groups.splice(existingGroupIndex, 1); - mergeGapsAround(groups, existingGroupIndex); + groups.unshift(existingGroup); - groups.unshift(existingGroup); + return; + } } - } else { - // Create a new group - groups.unshift(createNotificationGroupFromNotificationJSON(notification)); } + + // We have not found an existing group, create a new one + groups.unshift(createNotificationGroupFromNotificationJSON(notification)); } function trimNotifications(state: NotificationGroupsState) { From 685067efd148e28cc7c158705ac1fa1199daeeda Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 04:23:05 -0400 Subject: [PATCH 155/467] Avoid `id` duplication conflict with main navigation from settings profile link (#32181) --- app/views/settings/shared/_profile_navigation.html.haml | 4 ++-- config/navigation.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/settings/shared/_profile_navigation.html.haml b/app/views/settings/shared/_profile_navigation.html.haml index d490bd75661704..2f81cb5cfdccdf 100644 --- a/app/views/settings/shared/_profile_navigation.html.haml +++ b/app/views/settings/shared/_profile_navigation.html.haml @@ -1,7 +1,7 @@ .content__heading__tabs = render_navigation renderer: :links do |primary| :ruby - primary.item :profile, safe_join([material_symbol('person'), t('settings.edit_profile')]), settings_profile_path - primary.item :privacy, safe_join([material_symbol('lock'), t('privacy.title')]), settings_privacy_path + primary.item :edit_profile, safe_join([material_symbol('person'), t('settings.edit_profile')]), settings_profile_path + primary.item :privacy_reach, safe_join([material_symbol('lock'), t('privacy.title')]), settings_privacy_path primary.item :verification, safe_join([material_symbol('check'), t('verification.verification')]), settings_verification_path primary.item :featured_tags, safe_join([material_symbol('tag'), t('settings.featured_tags')]), settings_featured_tags_path diff --git a/config/navigation.rb b/config/navigation.rb index 33efb78b1eee5f..c79e96835b9b0a 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -35,7 +35,7 @@ s.item :export, safe_join([material_symbol('cloud_download'), t('settings.export')]), settings_export_path end - n.item :invites, safe_join([material_symbol('person_add'), t('invites.title')]), invites_path, if: -> { current_user.can?(:invite_users) && current_user.functional? && !self_destruct } + n.item :user_invites, safe_join([material_symbol('person_add'), t('invites.title')]), invites_path, if: -> { current_user.can?(:invite_users) && current_user.functional? && !self_destruct } n.item :development, safe_join([material_symbol('code'), t('settings.development')]), settings_applications_path, highlights_on: %r{/settings/applications}, if: -> { current_user.functional? && !self_destruct } n.item :trends, safe_join([material_symbol('trending_up'), t('admin.trends.title')]), admin_trends_statuses_path, if: -> { current_user.can?(:manage_taxonomies) && !self_destruct } do |s| From d9973f3b705d62db2305420af9b51b4a75c14332 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 08:28:50 +0000 Subject: [PATCH 156/467] Update peter-evans/create-pull-request action to v7.0.5 (#32164) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/crowdin-download-stable.yml | 2 +- .github/workflows/crowdin-download.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/crowdin-download-stable.yml b/.github/workflows/crowdin-download-stable.yml index c0b402a5b9300e..de21e2e58fcfff 100644 --- a/.github/workflows/crowdin-download-stable.yml +++ b/.github/workflows/crowdin-download-stable.yml @@ -50,7 +50,7 @@ jobs: # Create or update the pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v7.0.1 + uses: peter-evans/create-pull-request@v7.0.5 with: commit-message: 'New Crowdin translations' title: 'New Crowdin Translations for ${{ github.base_ref || github.ref_name }} (automated)' diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml index f1817b3e9a1c36..900899dd526474 100644 --- a/.github/workflows/crowdin-download.yml +++ b/.github/workflows/crowdin-download.yml @@ -52,7 +52,7 @@ jobs: # Create or update the pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v7.0.1 + uses: peter-evans/create-pull-request@v7.0.5 with: commit-message: 'New Crowdin translations' title: 'New Crowdin Translations (automated)' From 497e8d00b9644bed65c3085b5cc1ca3139eebd58 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 1 Oct 2024 10:36:22 +0200 Subject: [PATCH 157/467] Bump `main` version 4.4.0-alpha.1 (#32180) --- lib/mastodon/version.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 8ee37c683ffaf6..88aa5152964a7a 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ def major end def minor - 3 + 4 end def patch @@ -17,7 +17,7 @@ def patch end def default_prerelease - 'rc.1' + 'alpha.1' end def prerelease From 675d3ea5c11d78821d505b8ea8debe6355dee2df Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 04:36:41 -0400 Subject: [PATCH 158/467] Extract dashboard partial for admin instance page (#32189) --- .../admin/instances/_dashboard.html.haml | 66 ++++++++++++++++++ app/views/admin/instances/show.html.haml | 67 +------------------ 2 files changed, 67 insertions(+), 66 deletions(-) create mode 100644 app/views/admin/instances/_dashboard.html.haml diff --git a/app/views/admin/instances/_dashboard.html.haml b/app/views/admin/instances/_dashboard.html.haml new file mode 100644 index 00000000000000..ef8500103be462 --- /dev/null +++ b/app/views/admin/instances/_dashboard.html.haml @@ -0,0 +1,66 @@ +-# locals: (instance_domain:, period_end_at:, period_start_at:) +%p + = material_symbol 'info' + = t('admin.instances.totals_time_period_hint_html') + +.dashboard + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + href: admin_accounts_path(origin: 'remote', by_domain: instance_domain), + label: t('admin.instances.dashboard.instance_accounts_measure'), + measure: 'instance_accounts', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_statuses_measure'), + measure: 'instance_statuses', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_media_attachments_measure'), + measure: 'instance_media_attachments', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_follows_measure'), + measure: 'instance_follows', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_followers_measure'), + measure: 'instance_followers', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + href: admin_reports_path(by_target_domain: instance_domain), + label: t('admin.instances.dashboard.instance_reports_measure'), + measure: 'instance_reports', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :dimension, + dimension: 'instance_accounts', + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_accounts_dimension'), + limit: 8, + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :dimension, + dimension: 'instance_languages', + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_languages_dimension'), + limit: 8, + params: { domain: instance_domain }, + start_at: period_start_at diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index c55eb89dc94933..dfedbf4cb4fc2c 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -8,72 +8,7 @@ = l(@time_period.last) - if @instance.persisted? - %p - = material_symbol 'info' - = t('admin.instances.totals_time_period_hint_html') - - .dashboard - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - href: admin_accounts_path(origin: 'remote', by_domain: @instance.domain), - label: t('admin.instances.dashboard.instance_accounts_measure'), - measure: 'instance_accounts', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_statuses_measure'), - measure: 'instance_statuses', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_media_attachments_measure'), - measure: 'instance_media_attachments', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_follows_measure'), - measure: 'instance_follows', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_followers_measure'), - measure: 'instance_followers', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - href: admin_reports_path(by_target_domain: @instance.domain), - label: t('admin.instances.dashboard.instance_reports_measure'), - measure: 'instance_reports', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :dimension, - dimension: 'instance_accounts', - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_accounts_dimension'), - limit: 8, - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :dimension, - dimension: 'instance_languages', - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_languages_dimension'), - limit: 8, - params: { domain: @instance.domain }, - start_at: @time_period.first - + = render 'dashboard', instance_domain: @instance.domain, period_end_at: @time_period.last, period_start_at: @time_period.first - else %p = t('admin.instances.unknown_instance') From f811fcb2b2749d1e7a30ee7558ddff9d01e86e70 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 05:08:29 -0400 Subject: [PATCH 159/467] Improve alignment of icons on admin roles list (#32153) --- app/javascript/styles/mastodon/admin.scss | 4 ++++ app/javascript/styles/mastodon/tables.scss | 1 + 2 files changed, 5 insertions(+) diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 120bad27ed9324..da76fa11071d19 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1054,6 +1054,10 @@ a.name-tag, } } + .icon { + vertical-align: middle; + } + a.announcements-list__item__title { &:hover, &:focus, diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index af8ccf5b3839ef..0cbf5c1d554921 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -137,6 +137,7 @@ a.table-action-link { padding: 0 10px; color: $darker-text-color; font-weight: 500; + white-space: nowrap; &:hover { color: $highlight-text-color; From 2829f72d1668ec2cda5f07137f0e69c7abd37274 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:13:29 +0200 Subject: [PATCH 160/467] Update dependency propshaft to v1.1.0 (#32192) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b85d97761d2dd3..a06b4407a0d1ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -601,7 +601,7 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - propshaft (1.0.1) + propshaft (1.1.0) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack From 3d943f03fd5264ec5f8c636f4fde18867a4e22c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:13:33 +0200 Subject: [PATCH 161/467] Update dependency webmock to v3.24.0 (#32190) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a06b4407a0d1ee..b3c37393f2652c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -698,7 +698,7 @@ GEM responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.3.7) + rexml (3.3.8) rotp (6.3.0) rouge (4.3.0) rpam2 (4.0.2) @@ -884,7 +884,7 @@ GEM webfinger (1.2.0) activesupport httpclient (>= 2.4) - webmock (3.23.1) + webmock (3.24.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) From b7ddf45924c35dc8d5ecc8f4ab3c611da9d70d94 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:29:38 +0200 Subject: [PATCH 162/467] Update docker/dockerfile Docker tag to v1.10 (#32166) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- streaming/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c7c02d9b467ef9..0452e5d0621c82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# syntax=docker/dockerfile:1.9 +# syntax=docker/dockerfile:1.10 # This file is designed for production server deployment, not local development work # For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker diff --git a/streaming/Dockerfile b/streaming/Dockerfile index 938f1655d15d24..bed6b637380dac 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -1,4 +1,4 @@ -# syntax=docker/dockerfile:1.9 +# syntax=docker/dockerfile:1.10 # Please see https://docs.docker.com/engine/reference/builder for information about # the extended buildx capabilities used in this file. From 7a653001b42d07eb82858801b5c5b00d71fefa12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:30:09 +0200 Subject: [PATCH 163/467] Update dependency haml_lint to v0.59.0 (#32146) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b3c37393f2652c..cd939c9eba8c70 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -301,7 +301,7 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.58.0) + haml_lint (0.59.0) haml (>= 5.0) parallel (~> 1.10) rainbow @@ -862,7 +862,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.9.1) - unicode-display_width (2.5.0) + unicode-display_width (2.6.0) uri (0.13.1) validate_email (0.1.6) activemodel (>= 3.0) From f251edfc1daffecb30914d1f48e6919710c61b12 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 05:30:21 -0400 Subject: [PATCH 164/467] Add `date_range` view helper (#32187) --- app/helpers/admin/dashboard_helper.rb | 5 +++++ app/views/admin/dashboard/index.html.haml | 4 +--- app/views/admin/instances/show.html.haml | 4 +--- app/views/admin/tags/show.html.haml | 4 +--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/helpers/admin/dashboard_helper.rb b/app/helpers/admin/dashboard_helper.rb index 6096ff1381e7bb..4de779b79a80fb 100644 --- a/app/helpers/admin/dashboard_helper.rb +++ b/app/helpers/admin/dashboard_helper.rb @@ -18,6 +18,11 @@ def relevant_account_ip(account, ip_query) end end + def date_range(range) + [l(range.first), l(range.last)] + .join(' - ') + end + def relevant_account_timestamp(account) timestamp, exact = if account.user_current_sign_in_at && account.user_current_sign_in_at < 24.hours.ago [account.user_current_sign_in_at, true] diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 27d8f4790ba8be..2b4d02fa67c0a0 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -2,9 +2,7 @@ = t('admin.dashboard.title') - content_for :heading_actions do - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) - unless @system_checks.empty? .flash-message-stack diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index dfedbf4cb4fc2c..812a9c8870b0eb 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -3,9 +3,7 @@ - if current_user.can?(:view_dashboard) - content_for :heading_actions do - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) - if @instance.persisted? = render 'dashboard', instance_domain: @instance.domain, period_end_at: @time_period.last, period_start_at: @time_period.first diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index 93387843b2ce41..462ca312a07e86 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -4,9 +4,7 @@ - content_for :heading_actions do - if current_user.can?(:view_dashboard) .time-period - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) = link_to t('admin.tags.open'), tag_url(@tag), class: 'button', target: '_blank', rel: 'noopener noreferrer' From 0b89765e9a9154c5f904b602ae5aaa0966880818 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:30:54 +0000 Subject: [PATCH 165/467] Update RuboCop (non-major) to v1.22.1 (#31573) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index cd939c9eba8c70..334a9e30d17280 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -748,15 +748,15 @@ GEM parser (>= 3.3.1.0) rubocop-capybara (2.21.0) rubocop (~> 1.41) - rubocop-performance (1.21.1) + rubocop-performance (1.22.1) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.25.1) + rubocop-rails (2.26.2) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 1.33.0, < 2.0) + rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.0.4) + rubocop-rspec (3.0.5) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) From e6cda8388c0eae4dee82437538544563b04e7f24 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 1 Oct 2024 11:38:42 +0200 Subject: [PATCH 166/467] Move OTP secret length to configuration (#32125) --- .../otp_authentication_controller.rb | 2 +- app/models/user.rb | 3 ++- spec/controllers/auth/sessions_controller_spec.rb | 6 +++--- spec/requests/auth/sessions/security_key_options_spec.rb | 2 +- spec/system/oauth_spec.rb | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb b/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb index 0bff01ec2793a4..ca8d46afe48199 100644 --- a/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb +++ b/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb @@ -15,7 +15,7 @@ def show end def create - session[:new_otp_secret] = User.generate_otp_secret(32) + session[:new_otp_secret] = User.generate_otp_secret redirect_to new_settings_two_factor_authentication_confirmation_path end diff --git a/app/models/user.rb b/app/models/user.rb index fcb0eced72e3b9..c32a575edff71a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -71,7 +71,8 @@ class User < ApplicationRecord ACTIVE_DURATION = ENV.fetch('USER_ACTIVE_DAYS', 7).to_i.days.freeze devise :two_factor_authenticatable, - otp_secret_encryption_key: Rails.configuration.x.otp_secret + otp_secret_encryption_key: Rails.configuration.x.otp_secret, + otp_secret_length: 32 include LegacyOtpSecret # Must be after the above `devise` line in order to override the legacy method diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 713ea3ff16c5bf..4a6956cb095e1c 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -208,7 +208,7 @@ context 'when using two-factor authentication' do context 'with OTP enabled as second factor' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end let!(:recovery_codes) do @@ -230,7 +230,7 @@ context 'when using email and password after an unfinished log-in attempt to a 2FA-protected account' do let!(:other_user) do - Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end before do @@ -342,7 +342,7 @@ context 'with WebAuthn and OTP enabled as second factor' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end let!(:webauthn_credential) do diff --git a/spec/requests/auth/sessions/security_key_options_spec.rb b/spec/requests/auth/sessions/security_key_options_spec.rb index 6246e4beb315f7..e53b9802b4c820 100644 --- a/spec/requests/auth/sessions/security_key_options_spec.rb +++ b/spec/requests/auth/sessions/security_key_options_spec.rb @@ -6,7 +6,7 @@ RSpec.describe 'Security Key Options' do describe 'GET /auth/sessions/security_key_options' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end context 'with WebAuthn and OTP enabled as second factor' do diff --git a/spec/system/oauth_spec.rb b/spec/system/oauth_spec.rb index 0f96a59675803b..64ac75879e666d 100644 --- a/spec/system/oauth_spec.rb +++ b/spec/system/oauth_spec.rb @@ -179,7 +179,7 @@ end context 'when the user has set up TOTP' do - let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) } + let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret) } it 'when accepting the authorization request' do params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } From e975b55c24f420316b14d5dc02b2eab3fbba4d6e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 05:54:42 -0400 Subject: [PATCH 167/467] Remove `WebfingerHelper` module & move usage inline (#31203) --- app/helpers/webfinger_helper.rb | 7 ------- app/models/remote_follow.rb | 3 +-- app/services/activitypub/fetch_remote_actor_service.rb | 5 ++--- app/services/resolve_account_service.rb | 5 ++--- 4 files changed, 5 insertions(+), 15 deletions(-) delete mode 100644 app/helpers/webfinger_helper.rb diff --git a/app/helpers/webfinger_helper.rb b/app/helpers/webfinger_helper.rb deleted file mode 100644 index 482f4e19eabef0..00000000000000 --- a/app/helpers/webfinger_helper.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -module WebfingerHelper - def webfinger!(uri) - Webfinger.new(uri).perform - end -end diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb index 10715ac97da425..fa0586f57eb4c9 100644 --- a/app/models/remote_follow.rb +++ b/app/models/remote_follow.rb @@ -3,7 +3,6 @@ class RemoteFollow include ActiveModel::Validations include RoutingHelper - include WebfingerHelper attr_accessor :acct, :addressable_template @@ -66,7 +65,7 @@ def redirect_uri_template end def acct_resource - @acct_resource ||= webfinger!("acct:#{acct}") + @acct_resource ||= Webfinger.new("acct:#{acct}").perform rescue Webfinger::Error, HTTP::ConnectionError nil end diff --git a/app/services/activitypub/fetch_remote_actor_service.rb b/app/services/activitypub/fetch_remote_actor_service.rb index 2c372c2ec3fd84..560cf424e1539f 100644 --- a/app/services/activitypub/fetch_remote_actor_service.rb +++ b/app/services/activitypub/fetch_remote_actor_service.rb @@ -3,7 +3,6 @@ class ActivityPub::FetchRemoteActorService < BaseService include JsonLdHelper include DomainControlHelper - include WebfingerHelper class Error < StandardError; end @@ -45,7 +44,7 @@ def call(uri, prefetched_body: nil, break_on_redirect: false, only_key: false, s private def check_webfinger! - webfinger = webfinger!("acct:#{@username}@#{@domain}") + webfinger = Webfinger.new("acct:#{@username}@#{@domain}").perform confirmed_username, confirmed_domain = split_acct(webfinger.subject) if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? @@ -54,7 +53,7 @@ def check_webfinger! return end - webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + webfinger = Webfinger.new("acct:#{confirmed_username}@#{confirmed_domain}").perform @username, @domain = split_acct(webfinger.subject) raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{@uri} (stopped at #{@username}@#{@domain})" unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 8a5863baba6c7f..cd96b55c740e23 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -2,7 +2,6 @@ class ResolveAccountService < BaseService include DomainControlHelper - include WebfingerHelper include Redisable include Lockable @@ -81,7 +80,7 @@ def process_options!(uri, options) end def process_webfinger!(uri) - @webfinger = webfinger!("acct:#{uri}") + @webfinger = Webfinger.new("acct:#{uri}").perform confirmed_username, confirmed_domain = split_acct(@webfinger.subject) if confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? @@ -91,7 +90,7 @@ def process_webfinger!(uri) end # Account doesn't match, so it may have been redirected - @webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + @webfinger = Webfinger.new("acct:#{confirmed_username}@#{confirmed_domain}").perform @username, @domain = split_acct(@webfinger.subject) raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? From 454d21ab5ad87def97e712bc53e8e8ef50a5c678 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 1 Oct 2024 11:56:58 +0200 Subject: [PATCH 168/467] Remove OAuth Password Grant Type support (#30960) --- config/initializers/doorkeeper.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index b47e76c08bc60a..de1c75f576ec8e 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -9,16 +9,9 @@ current_user || redirect_to(new_user_session_url) end - resource_owner_from_credentials do |_routes| - user = User.authenticate_with_ldap(email: request.params[:username], password: request.params[:password]) if Devise.ldap_authentication - user ||= User.authenticate_with_pam(email: request.params[:username], password: request.params[:password]) if Devise.pam_authentication - - if user.nil? - user = User.find_by(email: request.params[:username]) - user = nil unless user&.valid_password?(request.params[:password]) - end - - user unless user&.otp_required_for_login? + # Disable Resource Owner Password Credentials Grant Flow + resource_owner_from_credentials do + nil end # Doorkeeper provides some administrative interfaces for managing OAuth @@ -169,7 +162,7 @@ # http://tools.ietf.org/html/rfc6819#section-4.4.3 # - grant_flows %w(authorization_code password client_credentials) + grant_flows %w(authorization_code client_credentials) # Under some circumstances you might want to have applications auto-approved, # so that the user skips the authorization step. From efd3f59627a2786b5601ef6a5c484ec96a777ae5 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 06:02:58 -0400 Subject: [PATCH 169/467] Use `module: :users` in routes/admin section (#30767) --- config/routes/admin.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 50c4c10594a010..3dba6fa5b8eb6d 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -144,8 +144,10 @@ end resources :users, only: [] do - resource :two_factor_authentication, only: [:destroy], controller: 'users/two_factor_authentications' - resource :role, only: [:show, :update], controller: 'users/roles' + scope module: :users do + resource :two_factor_authentication, only: [:destroy] + resource :role, only: [:show, :update] + end end resources :custom_emojis, only: [:index, :new, :create] do From 8ae381fd042aa7dbcc546c13ccb158ccd8b01ff3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:04:12 +0000 Subject: [PATCH 170/467] Update dependency postcss-preset-env to v10.0.5 (#32019) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 38402229bdfcc9..8970981d88b1b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1763,9 +1763,9 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.2" +"@csstools/postcss-light-dark-function@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.4" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -1773,7 +1773,7 @@ __metadata: "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f8973c435868998e5d6af1fc0c35b27bbf65fa9d0c35f5055c689b8ee2807a16802044e296f7def39a7253ae544fb49559e8273ee22eb4e21845aa980a1bc82b + checksum: 10c0/0176422ad9747953964b1ceff002df1ecb1952ebc481db6192070d68777135b582ea6fd32ae819b9c64c96cb9170bd6907c647c85b48daa4984b7ed3d7f9bccb languageName: node linkType: hard @@ -13921,8 +13921,8 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.3 - resolution: "postcss-preset-env@npm:10.0.3" + version: 10.0.5 + resolution: "postcss-preset-env@npm:10.0.5" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" "@csstools/postcss-color-function": "npm:^4.0.2" @@ -13936,7 +13936,7 @@ __metadata: "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.2" + "@csstools/postcss-light-dark-function": "npm:^2.0.4" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" @@ -13987,7 +13987,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/da42caa2aab4d825fddfde00ebe2416d338c7b9a6f79a68840297888a8384f85991991c3fa10cf2d359fb230c885375f5cebd7bd63972725cd2a596d218f8b6a + checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05 languageName: node linkType: hard From 7e35bef97efc5b5c107434d0157326427b79660a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 06:34:05 -0400 Subject: [PATCH 171/467] Remove explicit `put` action in settings forms (#32176) --- app/views/settings/applications/show.html.haml | 2 +- app/views/settings/preferences/appearance/show.html.haml | 2 +- app/views/settings/preferences/notifications/show.html.haml | 2 +- app/views/settings/preferences/other/show.html.haml | 2 +- app/views/settings/privacy/show.html.haml | 2 +- app/views/settings/profiles/show.html.haml | 2 +- app/views/settings/verifications/show.html.haml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml index 19630cf49b8ccb..099e0d96a8bcf5 100644 --- a/app/views/settings/applications/show.html.haml +++ b/app/views/settings/applications/show.html.haml @@ -23,7 +23,7 @@ %hr/ -= simple_form_for @application, url: settings_application_path(@application), method: :put do |form| += simple_form_for @application, url: settings_application_path(@application) do |form| = render form .actions diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index f34ce4a6aa5e61..22f88c7cdd7f55 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_user' -= simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f| += simple_form_for current_user, url: settings_preferences_appearance_path, html: { id: :edit_user } do |f| .fields-row .fields-group.fields-row__column.fields-row__column-6 = f.input :locale, diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index de318dda5437c1..a8e179d01914ec 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_notification' -= simple_form_for current_user, url: settings_preferences_notifications_path, html: { method: :put, id: 'edit_notification' } do |f| += simple_form_for current_user, url: settings_preferences_notifications_path, html: { id: :edit_notification } do |f| = render 'shared/error_messages', object: current_user %h4= t 'notifications.email_events' diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index e2888f7212935f..92df8e5213f209 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_preferences' -= simple_form_for current_user, url: settings_preferences_other_path, html: { method: :put, id: 'edit_preferences' } do |f| += simple_form_for current_user, url: settings_preferences_other_path, html: { id: :edit_preferences } do |f| = render 'shared/error_messages', object: current_user = f.simple_fields_for :settings, current_user.settings do |ff| diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index 3c14382587f593..f7241cfb2469f0 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -5,7 +5,7 @@ %h2= t('settings.profile') = render partial: 'settings/shared/profile_navigation' -= simple_form_for @account, url: settings_privacy_path, html: { method: :put } do |f| += simple_form_for @account, url: settings_privacy_path do |f| = render 'shared/error_messages', object: @account %p.lead= t('privacy.hint_html') diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 8fb21325197e3c..cad5aee669c88c 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -5,7 +5,7 @@ %h2= t('settings.profile') = render partial: 'settings/shared/profile_navigation' -= simple_form_for @account, url: settings_profile_path, html: { method: :put, id: 'edit_profile' } do |f| += simple_form_for @account, url: settings_profile_path, html: { id: :edit_profile } do |f| = render 'shared/error_messages', object: @account %p.lead= t('edit_profile.hint_html') diff --git a/app/views/settings/verifications/show.html.haml b/app/views/settings/verifications/show.html.haml index af9556d0048704..00491866c6592c 100644 --- a/app/views/settings/verifications/show.html.haml +++ b/app/views/settings/verifications/show.html.haml @@ -31,7 +31,7 @@ = material_symbol 'check', class: 'verified-badge__mark' %span= field.value -= simple_form_for @account, url: settings_verification_path, html: { method: :put, class: 'form-section' } do |f| += simple_form_for @account, url: settings_verification_path, html: { class: 'form-section' } do |f| = render 'shared/error_messages', object: @account %h3= t('author_attribution.title') From 489abb817358bd27417ce464d144bafb5ae191fb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 06:35:40 -0400 Subject: [PATCH 172/467] Remove explicit `put` action in prefs forms (#32175) From 4b4bf82ea99a5d4f223556e92d97a04dbfa45297 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 06:48:27 -0400 Subject: [PATCH 173/467] Fix nav item active highlight for some paths (#32159) --- config/navigation.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/navigation.rb b/config/navigation.rb index c79e96835b9b0a..09a7b55b5e1382 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -25,13 +25,13 @@ n.item :statuses_cleanup, safe_join([material_symbol('history'), t('settings.statuses_cleanup')]), statuses_cleanup_path, if: -> { current_user.functional_or_moved? && !self_destruct } n.item :security, safe_join([material_symbol('lock'), t('settings.account')]), edit_user_registration_path do |s| - s.item :password, safe_join([material_symbol('lock'), t('settings.account_settings')]), edit_user_registration_path, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities|^/disputes} + s.item :password, safe_join([material_symbol('lock'), t('settings.account_settings')]), edit_user_registration_path, highlights_on: %r{^/auth|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities|^/disputes} s.item :two_factor_authentication, safe_join([material_symbol('safety_check'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_methods_path, highlights_on: %r{/settings/two_factor_authentication|/settings/otp_authentication|/settings/security_keys} s.item :authorized_apps, safe_join([material_symbol('list_alt'), t('settings.authorized_apps')]), oauth_authorized_applications_path, if: -> { !self_destruct } end n.item :data, safe_join([material_symbol('cloud_sync'), t('settings.import_and_export')]), settings_export_path do |s| - s.item :import, safe_join([material_symbol('cloud_upload'), t('settings.import')]), settings_imports_path, if: -> { current_user.functional? && !self_destruct } + s.item :import, safe_join([material_symbol('cloud_upload'), t('settings.import')]), settings_imports_path, highlights_on: %r{/settings/imports}, if: -> { current_user.functional? && !self_destruct } s.item :export, safe_join([material_symbol('cloud_download'), t('settings.export')]), settings_export_path end @@ -51,7 +51,9 @@ s.item :accounts, safe_join([material_symbol('groups'), t('admin.accounts.title')]), admin_accounts_path(origin: 'local'), highlights_on: %r{/admin/accounts|admin/account_moderation_notes|/admin/pending_accounts|/admin/users}, if: -> { current_user.can?(:manage_users) } s.item :tags, safe_join([material_symbol('tag'), t('admin.tags.title')]), admin_tags_path, highlights_on: %r{/admin/tags}, if: -> { current_user.can?(:manage_taxonomies) } s.item :invites, safe_join([material_symbol('person_add'), t('admin.invites.title')]), admin_invites_path, if: -> { current_user.can?(:manage_invites) } - s.item :instances, safe_join([material_symbol('cloud'), t('admin.instances.title')]), admin_instances_path(limited: limited_federation_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.can?(:manage_federation) } + s.item :instances, safe_join([material_symbol('cloud'), t('admin.instances.title')]), admin_instances_path(limited: limited_federation_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows|/admin/export_domain_blocks}, if: lambda { + current_user.can?(:manage_federation) + } s.item :email_domain_blocks, safe_join([material_symbol('mail'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_path, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.can?(:manage_blocks) } s.item :ip_blocks, safe_join([material_symbol('hide_source'), t('admin.ip_blocks.title')]), admin_ip_blocks_path, highlights_on: %r{/admin/ip_blocks}, if: -> { current_user.can?(:manage_blocks) } s.item :action_logs, safe_join([material_symbol('list'), t('admin.action_logs.title')]), admin_action_logs_path, if: -> { current_user.can?(:view_audit_log) } From 651846c62227917729492ff9d6fc4161ea8d86c5 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 07:03:13 -0400 Subject: [PATCH 174/467] Only show email domain blocks MX table when some found (#32155) --- app/views/admin/email_domain_blocks/new.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/email_domain_blocks/new.html.haml b/app/views/admin/email_domain_blocks/new.html.haml index dd4b83ee3f2832..2dfdca93763dda 100644 --- a/app/views/admin/email_domain_blocks/new.html.haml +++ b/app/views/admin/email_domain_blocks/new.html.haml @@ -16,7 +16,7 @@ label: I18n.t('admin.email_domain_blocks.allow_registrations_with_approval'), wrapper: :with_label - - if defined?(@resolved_records) + - if defined?(@resolved_records) && @resolved_records.any? %p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html') .batch-table From c0095079128d04974a10821e04e046ec27fa6a3f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 07:14:12 -0400 Subject: [PATCH 175/467] Use `button_to` for `method: :post` links on account show page (#32154) --- app/javascript/styles/mastodon/forms.scss | 4 ++++ app/views/admin/accounts/_buttons.html.haml | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 957a28352267e4..4f974ea585ee5a 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -19,6 +19,10 @@ code { margin-bottom: 24px; } +form.button_to { + display: inline-block; +} + .fade-out-top { position: relative; overflow: hidden; diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml index 2aaca8962c10e0..eb1a7c3a4fe3d2 100644 --- a/app/views/admin/accounts/_buttons.html.haml +++ b/app/views/admin/accounts/_buttons.html.haml @@ -4,8 +4,8 @@ %p.muted-hint= deletion_request.present? ? t('admin.accounts.remote_suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.remote_suspension_irreversible') - else %p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') - = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account) - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote? + = button_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), class: :button if can?(:unsuspend, account) + = button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button if can?(:redownload, account) && account.suspension_origin_remote? - if deletion_request.present? && can?(:destroy, account) = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } - else @@ -14,28 +14,28 @@ - if account.local? && account.user_approved? = link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account) - if account.user_disabled? - = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) + = button_to t('admin.accounts.enable'), enable_admin_account_path(account.id), class: :button if can?(:enable, account.user) - elsif can?(:disable, account.user) = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' - if account.sensitized? - = link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account) + = button_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), class: :button if can?(:unsensitive, account) - elsif !account.local? || account.user_approved? = link_to t('admin.accounts.sensitive'), new_admin_account_action_path(account.id, type: 'sensitive'), class: 'button' if can?(:sensitive, account) - if account.silenced? - = link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsilence, account) + = button_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), class: :button if can?(:unsilence, account) - elsif !account.local? || account.user_approved? = link_to t('admin.accounts.silence'), new_admin_account_action_path(account.id, type: 'silence'), class: 'button' if can?(:silence, account) - if account.local? - if account.user_pending? - = link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user) - = link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) + = button_to t('admin.accounts.approve'), approve_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: :button if can?(:approve, account.user) + = button_to t('admin.accounts.reject'), reject_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) - if !account.user_confirmed? && can?(:confirm, account.user) - = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' + = button_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), class: :button - if (!account.local? || account.user_approved?) && can?(:suspend, account) = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' %div - if account.local? - if !account.memorial? && account.user_approved? && can?(:memorialize, account) - = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + = button_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' - elsif can?(:redownload, account) - = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' + = button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button From ec16ed37c39a79ae23d5b4d759f571b0fa66506b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 07:36:25 -0400 Subject: [PATCH 176/467] Extract constants for header and avatar geometry (#32151) --- app/models/concerns/account/avatar.rb | 7 +++++-- app/models/concerns/account/header.rb | 5 ++++- app/views/settings/profiles/show.html.haml | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/models/concerns/account/avatar.rb b/app/models/concerns/account/avatar.rb index 39f599db182275..5ca8fa862f9495 100644 --- a/app/models/concerns/account/avatar.rb +++ b/app/models/concerns/account/avatar.rb @@ -6,10 +6,13 @@ module Account::Avatar IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze LIMIT = 2.megabytes + AVATAR_DIMENSIONS = [400, 400].freeze + AVATAR_GEOMETRY = [AVATAR_DIMENSIONS.first, AVATAR_DIMENSIONS.last].join('x') + class_methods do def avatar_styles(file) - styles = { original: { geometry: '400x400#', file_geometry_parser: FastGeometryParser } } - styles[:static] = { geometry: '400x400#', format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif' + styles = { original: { geometry: "#{AVATAR_GEOMETRY}#", file_geometry_parser: FastGeometryParser } } + styles[:static] = { geometry: "#{AVATAR_GEOMETRY}#", format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif' styles end diff --git a/app/models/concerns/account/header.rb b/app/models/concerns/account/header.rb index 44ae774e94d034..2a47097fcfd038 100644 --- a/app/models/concerns/account/header.rb +++ b/app/models/concerns/account/header.rb @@ -5,7 +5,10 @@ module Account::Header IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze LIMIT = 2.megabytes - MAX_PIXELS = 750_000 # 1500x500px + + HEADER_DIMENSIONS = [1500, 500].freeze + HEADER_GEOMETRY = [HEADER_DIMENSIONS.first, HEADER_DIMENSIONS.last].join('x') + MAX_PIXELS = HEADER_DIMENSIONS.first * HEADER_DIMENSIONS.last class_methods do def header_styles(file) diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index cad5aee669c88c..427a4fa95ac884 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -34,7 +34,7 @@ .fields-row__column.fields-row__column-6 .fields-group = f.input :avatar, - hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(Account::Avatar::LIMIT)), + hint: t('simple_form.hints.defaults.avatar', dimensions: Account::Avatar::AVATAR_GEOMETRY, size: number_to_human_size(Account::Avatar::LIMIT)), input_html: { accept: Account::Avatar::IMAGE_MIME_TYPES.join(',') }, wrapper: :with_block_label @@ -50,7 +50,7 @@ .fields-row__column.fields-row__column-6 .fields-group = f.input :header, - hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(Account::Header::LIMIT)), + hint: t('simple_form.hints.defaults.header', dimensions: Account::Header::HEADER_GEOMETRY, size: number_to_human_size(Account::Header::LIMIT)), input_html: { accept: Account::Header::IMAGE_MIME_TYPES.join(',') }, wrapper: :with_block_label From 44071fdbae14d12bcd2c64bdc0d4162aca9de486 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 08:45:58 -0400 Subject: [PATCH 177/467] Wrap datetime in `time` element with attrs (#32177) --- app/views/settings/exports/show.html.haml | 3 ++- app/views/settings/imports/index.html.haml | 5 ++++- app/views/severed_relationships/index.html.haml | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 320bb0c7cebcbb..273c5a4ba6feac 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -61,7 +61,8 @@ %tbody - @backups.each do |backup| %tr - %td= l backup.created_at + %td + %time.formatted{ datetime: backup.created_at.iso8601, title: l(backup.created_at) }= l backup.created_at - if backup.processed? %td= number_to_human_size backup.dump_file_size %td= table_link_to 'download', t('exports.archive_takeout.download'), download_backup_url(backup) diff --git a/app/views/settings/imports/index.html.haml b/app/views/settings/imports/index.html.haml index 634631b5aaa4cc..55421991e13173 100644 --- a/app/views/settings/imports/index.html.haml +++ b/app/views/settings/imports/index.html.haml @@ -55,7 +55,10 @@ = t("imports.states.#{import.state}") %td #{import.imported_items} / #{import.total_items} - %td= l(import.created_at) + %td + %time.formatted{ datetime: import.created_at.iso8601, title: l(import.created_at) } + = l(import.created_at) + %td - num_failed = import.processed_items - import.imported_items - if num_failed.positive? diff --git a/app/views/severed_relationships/index.html.haml b/app/views/severed_relationships/index.html.haml index 7c599e9c0e7e55..cc9439b4681eed 100644 --- a/app/views/severed_relationships/index.html.haml +++ b/app/views/severed_relationships/index.html.haml @@ -15,7 +15,9 @@ %tbody - @events.each do |event| %tr - %td= l event.created_at + %td + %time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) } + = l(event.created_at) %td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name) - if event.purged? %td{ rowspan: 2 }= t('severed_relationships.purged') From c5f0da98e43134d5922ea76dc89db292cd3531e8 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 1 Oct 2024 14:49:04 +0200 Subject: [PATCH 178/467] Add detection and download of material_symbol icons in config/navigation.rb (#31366) --- .../material-icons/400-24px/breaking_news-fill.svg | 1 + .../material-icons/400-24px/breaking_news.svg | 2 +- .../400-24px/captive_portal-fill.svg | 1 + .../material-icons/400-24px/captive_portal.svg | 2 +- .../material-icons/400-24px/chat_bubble-fill.svg | 1 + .../material-icons/400-24px/chat_bubble.svg | 2 +- .../material-icons/400-24px/cloud-fill.svg | 1 + app/javascript/material-icons/400-24px/cloud.svg | 2 +- .../400-24px/cloud_download-fill.svg | 1 + .../material-icons/400-24px/cloud_download.svg | 2 +- .../material-icons/400-24px/cloud_sync-fill.svg | 1 + .../material-icons/400-24px/cloud_sync.svg | 2 +- .../material-icons/400-24px/cloud_upload-fill.svg | 1 + .../material-icons/400-24px/cloud_upload.svg | 2 +- .../material-icons/400-24px/code-fill.svg | 1 + app/javascript/material-icons/400-24px/code.svg | 2 +- .../material-icons/400-24px/computer-fill.svg | 1 + .../material-icons/400-24px/computer.svg | 2 +- .../material-icons/400-24px/contact_mail-fill.svg | 1 + .../material-icons/400-24px/contact_mail.svg | 2 +- .../material-icons/400-24px/database-fill.svg | 1 + .../material-icons/400-24px/database.svg | 2 +- .../material-icons/400-24px/diamond-fill.svg | 1 + app/javascript/material-icons/400-24px/diamond.svg | 2 +- .../material-icons/400-24px/filter_alt-fill.svg | 1 + .../material-icons/400-24px/filter_alt.svg | 2 +- .../material-icons/400-24px/groups-fill.svg | 1 + app/javascript/material-icons/400-24px/groups.svg | 2 +- .../material-icons/400-24px/hide_source-fill.svg | 1 + .../material-icons/400-24px/hide_source.svg | 2 +- .../material-icons/400-24px/inbox-fill.svg | 1 + app/javascript/material-icons/400-24px/inbox.svg | 2 +- .../material-icons/400-24px/list-fill.svg | 1 + app/javascript/material-icons/400-24px/list.svg | 2 +- .../material-icons/400-24px/mail-fill.svg | 1 + app/javascript/material-icons/400-24px/mail.svg | 2 +- .../material-icons/400-24px/mood-fill.svg | 1 + app/javascript/material-icons/400-24px/mood.svg | 2 +- .../material-icons/400-24px/report-fill.svg | 1 + app/javascript/material-icons/400-24px/report.svg | 2 +- .../material-icons/400-24px/safety_check-fill.svg | 1 + .../material-icons/400-24px/safety_check.svg | 2 +- .../material-icons/400-24px/speed-fill.svg | 1 + app/javascript/material-icons/400-24px/speed.svg | 2 +- .../material-icons/400-24px/trending_up-fill.svg | 1 + .../material-icons/400-24px/trending_up.svg | 2 +- lib/tasks/icons.rake | 14 ++++++++++++++ 47 files changed, 60 insertions(+), 23 deletions(-) create mode 100644 app/javascript/material-icons/400-24px/breaking_news-fill.svg create mode 100644 app/javascript/material-icons/400-24px/captive_portal-fill.svg create mode 100644 app/javascript/material-icons/400-24px/chat_bubble-fill.svg create mode 100644 app/javascript/material-icons/400-24px/cloud-fill.svg create mode 100644 app/javascript/material-icons/400-24px/cloud_download-fill.svg create mode 100644 app/javascript/material-icons/400-24px/cloud_sync-fill.svg create mode 100644 app/javascript/material-icons/400-24px/cloud_upload-fill.svg create mode 100644 app/javascript/material-icons/400-24px/code-fill.svg create mode 100644 app/javascript/material-icons/400-24px/computer-fill.svg create mode 100644 app/javascript/material-icons/400-24px/contact_mail-fill.svg create mode 100644 app/javascript/material-icons/400-24px/database-fill.svg create mode 100644 app/javascript/material-icons/400-24px/diamond-fill.svg create mode 100644 app/javascript/material-icons/400-24px/filter_alt-fill.svg create mode 100644 app/javascript/material-icons/400-24px/groups-fill.svg create mode 100644 app/javascript/material-icons/400-24px/hide_source-fill.svg create mode 100644 app/javascript/material-icons/400-24px/inbox-fill.svg create mode 100644 app/javascript/material-icons/400-24px/list-fill.svg create mode 100644 app/javascript/material-icons/400-24px/mail-fill.svg create mode 100644 app/javascript/material-icons/400-24px/mood-fill.svg create mode 100644 app/javascript/material-icons/400-24px/report-fill.svg create mode 100644 app/javascript/material-icons/400-24px/safety_check-fill.svg create mode 100644 app/javascript/material-icons/400-24px/speed-fill.svg create mode 100644 app/javascript/material-icons/400-24px/trending_up-fill.svg diff --git a/app/javascript/material-icons/400-24px/breaking_news-fill.svg b/app/javascript/material-icons/400-24px/breaking_news-fill.svg new file mode 100644 index 00000000000000..633ca48d57d6b4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/breaking_news-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/breaking_news.svg b/app/javascript/material-icons/400-24px/breaking_news.svg index d7dd0c12f47fec..c043f11a8b0207 100644 --- a/app/javascript/material-icons/400-24px/breaking_news.svg +++ b/app/javascript/material-icons/400-24px/breaking_news.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/captive_portal-fill.svg b/app/javascript/material-icons/400-24px/captive_portal-fill.svg new file mode 100644 index 00000000000000..5c0b26fb647b18 --- /dev/null +++ b/app/javascript/material-icons/400-24px/captive_portal-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/captive_portal.svg b/app/javascript/material-icons/400-24px/captive_portal.svg index 1f0f09c7734912..5c0b26fb647b18 100644 --- a/app/javascript/material-icons/400-24px/captive_portal.svg +++ b/app/javascript/material-icons/400-24px/captive_portal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chat_bubble-fill.svg b/app/javascript/material-icons/400-24px/chat_bubble-fill.svg new file mode 100644 index 00000000000000..b47338a6c9c9ab --- /dev/null +++ b/app/javascript/material-icons/400-24px/chat_bubble-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chat_bubble.svg b/app/javascript/material-icons/400-24px/chat_bubble.svg index 7d210b460865ee..05d976d242d866 100644 --- a/app/javascript/material-icons/400-24px/chat_bubble.svg +++ b/app/javascript/material-icons/400-24px/chat_bubble.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud-fill.svg b/app/javascript/material-icons/400-24px/cloud-fill.svg new file mode 100644 index 00000000000000..d049a74c0191e3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud.svg b/app/javascript/material-icons/400-24px/cloud.svg index 75b4e957fc416a..a36bddda918e0f 100644 --- a/app/javascript/material-icons/400-24px/cloud.svg +++ b/app/javascript/material-icons/400-24px/cloud.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_download-fill.svg b/app/javascript/material-icons/400-24px/cloud_download-fill.svg new file mode 100644 index 00000000000000..c55d49f7e5c0dd --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_download-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_download.svg b/app/javascript/material-icons/400-24px/cloud_download.svg index 2fc3717ff9e35e..8e9314800cca76 100644 --- a/app/javascript/material-icons/400-24px/cloud_download.svg +++ b/app/javascript/material-icons/400-24px/cloud_download.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_sync-fill.svg b/app/javascript/material-icons/400-24px/cloud_sync-fill.svg new file mode 100644 index 00000000000000..0c648e19e4f36b --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_sync-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_sync.svg b/app/javascript/material-icons/400-24px/cloud_sync.svg index dbf6adc0001ada..461796e323ff9a 100644 --- a/app/javascript/material-icons/400-24px/cloud_sync.svg +++ b/app/javascript/material-icons/400-24px/cloud_sync.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_upload-fill.svg b/app/javascript/material-icons/400-24px/cloud_upload-fill.svg new file mode 100644 index 00000000000000..66a7bb22d3511e --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_upload-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_upload.svg b/app/javascript/material-icons/400-24px/cloud_upload.svg index 5e1a4b9aef684f..94968cb94713bf 100644 --- a/app/javascript/material-icons/400-24px/cloud_upload.svg +++ b/app/javascript/material-icons/400-24px/cloud_upload.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/code-fill.svg b/app/javascript/material-icons/400-24px/code-fill.svg new file mode 100644 index 00000000000000..8ef5c55cd48598 --- /dev/null +++ b/app/javascript/material-icons/400-24px/code-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/code.svg b/app/javascript/material-icons/400-24px/code.svg index 5bdc338f7f5bc6..8ef5c55cd48598 100644 --- a/app/javascript/material-icons/400-24px/code.svg +++ b/app/javascript/material-icons/400-24px/code.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/computer-fill.svg b/app/javascript/material-icons/400-24px/computer-fill.svg new file mode 100644 index 00000000000000..91295d68463510 --- /dev/null +++ b/app/javascript/material-icons/400-24px/computer-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/computer.svg b/app/javascript/material-icons/400-24px/computer.svg index 8c5bd9110e1d23..b8af5d46447944 100644 --- a/app/javascript/material-icons/400-24px/computer.svg +++ b/app/javascript/material-icons/400-24px/computer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail-fill.svg b/app/javascript/material-icons/400-24px/contact_mail-fill.svg new file mode 100644 index 00000000000000..c42c799955cc9a --- /dev/null +++ b/app/javascript/material-icons/400-24px/contact_mail-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail.svg b/app/javascript/material-icons/400-24px/contact_mail.svg index 1ae26cc4d157ed..4547c48ec5b7b4 100644 --- a/app/javascript/material-icons/400-24px/contact_mail.svg +++ b/app/javascript/material-icons/400-24px/contact_mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/database-fill.svg b/app/javascript/material-icons/400-24px/database-fill.svg new file mode 100644 index 00000000000000..3520f6961446e6 --- /dev/null +++ b/app/javascript/material-icons/400-24px/database-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/database.svg b/app/javascript/material-icons/400-24px/database.svg index 54ca2f4e560b2e..a3bc2bfbc24474 100644 --- a/app/javascript/material-icons/400-24px/database.svg +++ b/app/javascript/material-icons/400-24px/database.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/diamond-fill.svg b/app/javascript/material-icons/400-24px/diamond-fill.svg new file mode 100644 index 00000000000000..474968ad6f8cdf --- /dev/null +++ b/app/javascript/material-icons/400-24px/diamond-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/diamond.svg b/app/javascript/material-icons/400-24px/diamond.svg index 26f4814b443b95..b604492fa8bf7c 100644 --- a/app/javascript/material-icons/400-24px/diamond.svg +++ b/app/javascript/material-icons/400-24px/diamond.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/filter_alt-fill.svg b/app/javascript/material-icons/400-24px/filter_alt-fill.svg new file mode 100644 index 00000000000000..ec1d90bba6bbd5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/filter_alt-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/filter_alt.svg b/app/javascript/material-icons/400-24px/filter_alt.svg index 0294cf1da53ac0..e4af9efd5d4d67 100644 --- a/app/javascript/material-icons/400-24px/filter_alt.svg +++ b/app/javascript/material-icons/400-24px/filter_alt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/groups-fill.svg b/app/javascript/material-icons/400-24px/groups-fill.svg new file mode 100644 index 00000000000000..754eb0946c291c --- /dev/null +++ b/app/javascript/material-icons/400-24px/groups-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/groups.svg b/app/javascript/material-icons/400-24px/groups.svg index 0e795eb301d89d..998ff03729bd58 100644 --- a/app/javascript/material-icons/400-24px/groups.svg +++ b/app/javascript/material-icons/400-24px/groups.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/hide_source-fill.svg b/app/javascript/material-icons/400-24px/hide_source-fill.svg new file mode 100644 index 00000000000000..959631bc1aa150 --- /dev/null +++ b/app/javascript/material-icons/400-24px/hide_source-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/hide_source.svg b/app/javascript/material-icons/400-24px/hide_source.svg index d103ed770a5d6b..09633cef8c83b6 100644 --- a/app/javascript/material-icons/400-24px/hide_source.svg +++ b/app/javascript/material-icons/400-24px/hide_source.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox-fill.svg b/app/javascript/material-icons/400-24px/inbox-fill.svg new file mode 100644 index 00000000000000..15ae2d8f3c4068 --- /dev/null +++ b/app/javascript/material-icons/400-24px/inbox-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox.svg b/app/javascript/material-icons/400-24px/inbox.svg index 427817958c169a..32c727e8104990 100644 --- a/app/javascript/material-icons/400-24px/inbox.svg +++ b/app/javascript/material-icons/400-24px/inbox.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list-fill.svg b/app/javascript/material-icons/400-24px/list-fill.svg new file mode 100644 index 00000000000000..c9cbe35eb52fa9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/list-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list.svg b/app/javascript/material-icons/400-24px/list.svg index 457a820ab1781b..c9cbe35eb52fa9 100644 --- a/app/javascript/material-icons/400-24px/list.svg +++ b/app/javascript/material-icons/400-24px/list.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mail-fill.svg b/app/javascript/material-icons/400-24px/mail-fill.svg new file mode 100644 index 00000000000000..5e7e4a2fb246b3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/mail-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mail.svg b/app/javascript/material-icons/400-24px/mail.svg index a92ea7b198a82f..15e1d12d4e1a21 100644 --- a/app/javascript/material-icons/400-24px/mail.svg +++ b/app/javascript/material-icons/400-24px/mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mood-fill.svg b/app/javascript/material-icons/400-24px/mood-fill.svg new file mode 100644 index 00000000000000..9480d0fb92aaa3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/mood-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mood.svg b/app/javascript/material-icons/400-24px/mood.svg index 27b3534244888c..46cafa76808008 100644 --- a/app/javascript/material-icons/400-24px/mood.svg +++ b/app/javascript/material-icons/400-24px/mood.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/report-fill.svg b/app/javascript/material-icons/400-24px/report-fill.svg new file mode 100644 index 00000000000000..50c638869d69cd --- /dev/null +++ b/app/javascript/material-icons/400-24px/report-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/report.svg b/app/javascript/material-icons/400-24px/report.svg index f281f0e1fa8f01..b08b5a1c987d5a 100644 --- a/app/javascript/material-icons/400-24px/report.svg +++ b/app/javascript/material-icons/400-24px/report.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check-fill.svg b/app/javascript/material-icons/400-24px/safety_check-fill.svg new file mode 100644 index 00000000000000..b38091a8ec4f2a --- /dev/null +++ b/app/javascript/material-icons/400-24px/safety_check-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check.svg b/app/javascript/material-icons/400-24px/safety_check.svg index f4eab46fb75b82..87bdba21fe3444 100644 --- a/app/javascript/material-icons/400-24px/safety_check.svg +++ b/app/javascript/material-icons/400-24px/safety_check.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/speed-fill.svg b/app/javascript/material-icons/400-24px/speed-fill.svg new file mode 100644 index 00000000000000..dca22ac521e3f0 --- /dev/null +++ b/app/javascript/material-icons/400-24px/speed-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/speed.svg b/app/javascript/material-icons/400-24px/speed.svg index ceb855c684f8c3..0837877f42f2f8 100644 --- a/app/javascript/material-icons/400-24px/speed.svg +++ b/app/javascript/material-icons/400-24px/speed.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/trending_up-fill.svg b/app/javascript/material-icons/400-24px/trending_up-fill.svg new file mode 100644 index 00000000000000..cd0e368964ec68 --- /dev/null +++ b/app/javascript/material-icons/400-24px/trending_up-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/trending_up.svg b/app/javascript/material-icons/400-24px/trending_up.svg index 06f9ba20639860..cd0e368964ec68 100644 --- a/app/javascript/material-icons/400-24px/trending_up.svg +++ b/app/javascript/material-icons/400-24px/trending_up.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/lib/tasks/icons.rake b/lib/tasks/icons.rake index 96e0a143150584..9a05cf349914d2 100644 --- a/lib/tasks/icons.rake +++ b/lib/tasks/icons.rake @@ -38,6 +38,20 @@ def find_used_icons end end + Rails.root.join('config', 'navigation.rb').open('r') do |file| + pattern = /material_symbol\('(?[^']*)'\)/ + file.each_line do |line| + match = pattern.match(line) + next if match.blank? + + # navigation.rb only uses 400x24 icons, per material_symbol() in + # app/helpers/application_helper.rb + icons_by_weight_and_size[400] ||= {} + icons_by_weight_and_size[400][24] ||= Set.new + icons_by_weight_and_size[400][24] << match['icon'] + end + end + icons_by_weight_and_size end From 7b92cf3b4771b42ff3895f247c006679e9a11ff6 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 1 Oct 2024 14:52:13 +0200 Subject: [PATCH 179/467] Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161) --- app/services/activitypub/process_collection_service.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index 4f049a5ae940b0..cadc7d2d10e300 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -2,6 +2,7 @@ class ActivityPub::ProcessCollectionService < BaseService include JsonLdHelper + include DomainControlHelper def call(body, actor, **options) @account = actor @@ -69,6 +70,9 @@ def process_item(item) end def verify_account! + return unless @json['signature'].is_a?(Hash) + return if domain_not_allowed?(@json['signature']['creator']) + @options[:relayed_through_actor] = @account @account = ActivityPub::LinkedDataSignature.new(@json).verify_actor! @account = nil unless @account.is_a?(Account) From f73787a4b84eb23ccad9d425b52aa09e1c26e18c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 09:38:29 -0400 Subject: [PATCH 180/467] Fix broken border on applications list (#32147) --- app/views/settings/applications/index.html.haml | 4 +++- app/views/settings/applications/show.html.haml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/views/settings/applications/index.html.haml b/app/views/settings/applications/index.html.haml index 80eaed5c3994f8..e3011947a64f59 100644 --- a/app/views/settings/applications/index.html.haml +++ b/app/views/settings/applications/index.html.haml @@ -18,7 +18,9 @@ - @applications.each do |application| %tr %td= link_to application.name, settings_application_path(application) - %th= application.scopes + %th + - application.scopes.to_s.split.each do |scope| + = tag.samp(scope, class: 'information-badge', title: t("doorkeeper.scopes.#{scope}")) %td = table_link_to 'close', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') } diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml index 099e0d96a8bcf5..bfde27daa96440 100644 --- a/app/views/settings/applications/show.html.haml +++ b/app/views/settings/applications/show.html.haml @@ -15,10 +15,11 @@ %td %code= @application.secret %tr - %th{ rowspan: 2 }= t('applications.your_token') + %th= t('applications.your_token') %td %code= current_user.token_for_app(@application).token %tr + %th %td= table_link_to 'refresh', t('applications.regenerate_token'), regenerate_settings_application_path(@application), method: :post %hr/ From f10d61bf86559bc1464b2e7972b8980ae789908d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 09:41:25 -0400 Subject: [PATCH 181/467] Adjust spacing on setting sub-nav items when below mobile size (#32137) --- app/javascript/styles/mastodon/admin.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index da76fa11071d19..0712a0d3f4934e 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -226,6 +226,10 @@ $content-width: 840px; gap: 5px; white-space: nowrap; + @media screen and (max-width: $mobile-breakpoint) { + flex: 1 0 50%; + } + &:hover, &:focus, &:active { From df98cf71e30063ece4022ae4a8a73c21dfea5f74 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 09:50:20 -0400 Subject: [PATCH 182/467] Avoid repeated icon stack in settings sidebar (#32201) --- config/navigation.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/navigation.rb b/config/navigation.rb index 09a7b55b5e1382..7ec7ecb7e72794 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -24,7 +24,7 @@ n.item :filters, safe_join([material_symbol('filter_alt'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? && !self_destruct } n.item :statuses_cleanup, safe_join([material_symbol('history'), t('settings.statuses_cleanup')]), statuses_cleanup_path, if: -> { current_user.functional_or_moved? && !self_destruct } - n.item :security, safe_join([material_symbol('lock'), t('settings.account')]), edit_user_registration_path do |s| + n.item :security, safe_join([material_symbol('account_circle'), t('settings.account')]), edit_user_registration_path do |s| s.item :password, safe_join([material_symbol('lock'), t('settings.account_settings')]), edit_user_registration_path, highlights_on: %r{^/auth|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities|^/disputes} s.item :two_factor_authentication, safe_join([material_symbol('safety_check'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_methods_path, highlights_on: %r{/settings/two_factor_authentication|/settings/otp_authentication|/settings/security_keys} s.item :authorized_apps, safe_join([material_symbol('list_alt'), t('settings.authorized_apps')]), oauth_authorized_applications_path, if: -> { !self_destruct } From 65508bb0c07bab4760576a9c59cacb43cf7d1301 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 1 Oct 2024 22:54:28 +0900 Subject: [PATCH 183/467] Show timestamp when the user deletes their account on admin dashboard (#25640) Co-authored-by: Claire --- app/helpers/admin/dashboard_helper.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/helpers/admin/dashboard_helper.rb b/app/helpers/admin/dashboard_helper.rb index 4de779b79a80fb..f87fdad70832de 100644 --- a/app/helpers/admin/dashboard_helper.rb +++ b/app/helpers/admin/dashboard_helper.rb @@ -30,6 +30,8 @@ def relevant_account_timestamp(account) [account.user_current_sign_in_at, false] elsif account.user_pending? [account.user_created_at, true] + elsif account.suspended_at.present? && account.local? && account.user.nil? + [account.suspended_at, true] elsif account.last_status_at.present? [account.last_status_at, true] else From 4cae309f6a1835dcff6b85ac31b046092e2985a1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 1 Oct 2024 09:56:43 -0400 Subject: [PATCH 184/467] Fix `Rails/CreateTableWithTimestamps` cop (#30836) --- db/migrate/.rubocop.yml | 5 +++++ db/migrate/20170508230434_create_conversation_mutes.rb | 2 +- db/migrate/20170823162448_create_status_pins.rb | 2 +- db/migrate/20171116161857_create_list_accounts.rb | 2 +- db/migrate/20180929222014_create_account_conversations.rb | 2 +- db/migrate/20181007025445_create_pghero_space_stats.rb | 2 +- db/migrate/20190103124649_create_scheduled_statuses.rb | 2 +- db/migrate/20220824233535_create_status_trends.rb | 2 +- db/migrate/20221006061337_create_preview_card_trends.rb | 2 +- 9 files changed, 13 insertions(+), 8 deletions(-) diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml index 4e23800dd14965..6f8b6cc60da42e 100644 --- a/db/migrate/.rubocop.yml +++ b/db/migrate/.rubocop.yml @@ -2,3 +2,8 @@ inherit_from: ../../.rubocop.yml Naming/VariableNumber: CheckSymbols: false + +# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity +Rails/CreateTableWithTimestamps: + Include: + - '*.rb' diff --git a/db/migrate/20170508230434_create_conversation_mutes.rb b/db/migrate/20170508230434_create_conversation_mutes.rb index 01122c45166a92..4beba9dfa32009 100644 --- a/db/migrate/20170508230434_create_conversation_mutes.rb +++ b/db/migrate/20170508230434_create_conversation_mutes.rb @@ -2,7 +2,7 @@ class CreateConversationMutes < ActiveRecord::Migration[5.0] def change - create_table :conversation_mutes do |t| + create_table :conversation_mutes do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.integer :account_id, null: false t.bigint :conversation_id, null: false end diff --git a/db/migrate/20170823162448_create_status_pins.rb b/db/migrate/20170823162448_create_status_pins.rb index c8d3fab3a5128e..2cf3a85ca9de6b 100644 --- a/db/migrate/20170823162448_create_status_pins.rb +++ b/db/migrate/20170823162448_create_status_pins.rb @@ -2,7 +2,7 @@ class CreateStatusPins < ActiveRecord::Migration[5.1] def change - create_table :status_pins do |t| + create_table :status_pins do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :status, foreign_key: { on_delete: :cascade }, null: false end diff --git a/db/migrate/20171116161857_create_list_accounts.rb b/db/migrate/20171116161857_create_list_accounts.rb index ff9ab3faad89bc..b0371e4c884771 100644 --- a/db/migrate/20171116161857_create_list_accounts.rb +++ b/db/migrate/20171116161857_create_list_accounts.rb @@ -2,7 +2,7 @@ class CreateListAccounts < ActiveRecord::Migration[5.2] def change - create_table :list_accounts do |t| + create_table :list_accounts do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :list, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :account, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :follow, foreign_key: { on_delete: :cascade }, null: false diff --git a/db/migrate/20180929222014_create_account_conversations.rb b/db/migrate/20180929222014_create_account_conversations.rb index 9386b86e7c9181..4e85e68d4771f5 100644 --- a/db/migrate/20180929222014_create_account_conversations.rb +++ b/db/migrate/20180929222014_create_account_conversations.rb @@ -2,7 +2,7 @@ class CreateAccountConversations < ActiveRecord::Migration[5.2] def change - create_table :account_conversations do |t| + create_table :account_conversations do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade } t.belongs_to :conversation, foreign_key: { on_delete: :cascade } t.bigint :participant_account_ids, array: true, null: false, default: [] diff --git a/db/migrate/20181007025445_create_pghero_space_stats.rb b/db/migrate/20181007025445_create_pghero_space_stats.rb index ddaf4aef31c6f0..696b53d8d77518 100644 --- a/db/migrate/20181007025445_create_pghero_space_stats.rb +++ b/db/migrate/20181007025445_create_pghero_space_stats.rb @@ -2,7 +2,7 @@ class CreatePgheroSpaceStats < ActiveRecord::Migration[5.2] def change - create_table :pghero_space_stats do |t| + create_table :pghero_space_stats do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.text :database t.text :schema t.text :relation diff --git a/db/migrate/20190103124649_create_scheduled_statuses.rb b/db/migrate/20190103124649_create_scheduled_statuses.rb index a66546187eed57..02b4916be86281 100644 --- a/db/migrate/20190103124649_create_scheduled_statuses.rb +++ b/db/migrate/20190103124649_create_scheduled_statuses.rb @@ -2,7 +2,7 @@ class CreateScheduledStatuses < ActiveRecord::Migration[5.2] def change - create_table :scheduled_statuses do |t| + create_table :scheduled_statuses do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade } t.datetime :scheduled_at, index: true t.jsonb :params diff --git a/db/migrate/20220824233535_create_status_trends.rb b/db/migrate/20220824233535_create_status_trends.rb index 52dcbf8f38e9e5..e68e5b7c11aa5d 100644 --- a/db/migrate/20220824233535_create_status_trends.rb +++ b/db/migrate/20220824233535_create_status_trends.rb @@ -2,7 +2,7 @@ class CreateStatusTrends < ActiveRecord::Migration[6.1] def change - create_table :status_trends do |t| + create_table :status_trends do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.references :status, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true } t.references :account, null: false, foreign_key: { on_delete: :cascade } t.float :score, null: false, default: 0 diff --git a/db/migrate/20221006061337_create_preview_card_trends.rb b/db/migrate/20221006061337_create_preview_card_trends.rb index 934a06e24d1728..266f6440239751 100644 --- a/db/migrate/20221006061337_create_preview_card_trends.rb +++ b/db/migrate/20221006061337_create_preview_card_trends.rb @@ -2,7 +2,7 @@ class CreatePreviewCardTrends < ActiveRecord::Migration[6.1] def change - create_table :preview_card_trends do |t| + create_table :preview_card_trends do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.references :preview_card, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true } t.float :score, null: false, default: 0 t.integer :rank, null: false, default: 0 From a2c4ba20010a1fabca65ff6353e1b0fbea3b5f6d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:10:56 +0200 Subject: [PATCH 185/467] Update dependency rubocop-rspec to v3.1.0 (#32202) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 334a9e30d17280..c623f92e7d4dbc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -756,7 +756,7 @@ GEM rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.0.5) + rubocop-rspec (3.1.0) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) From f91f077985eccf9933346052ce4ee532215099c6 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Tue, 1 Oct 2024 12:26:30 -0400 Subject: [PATCH 186/467] Enable ESLlint no-case-declarations (#30768) --- .eslintrc.js | 1 - app/javascript/mastodon/actions/streaming.js | 3 ++- app/javascript/mastodon/reducers/compose.js | 3 ++- app/javascript/mastodon/reducers/notifications.js | 3 ++- app/javascript/mastodon/reducers/search.js | 3 ++- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index b6e4253e61dfff..93ff1d7b59030e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -64,7 +64,6 @@ module.exports = defineConfig({ 'indent': ['error', 2], 'jsx-quotes': ['error', 'prefer-single'], 'semi': ['error', 'always'], - 'no-case-declarations': 'off', 'no-catch-shadow': 'error', 'no-console': [ 'warn', diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index b6fc31fae855ac..30e643363a1c0d 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -106,12 +106,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti dispatch(processNewNotificationForGroups(notificationJSON)); break; } - case 'notifications_merged': + case 'notifications_merged': { const state = getState(); if (state.notifications.top || !state.notifications.mounted) dispatch(expandNotifications({ forceLoad: true, maxId: undefined })); dispatch(refreshStaleNotificationGroups()); break; + } case 'conversation': // @ts-expect-error dispatch(updateConversations(JSON.parse(data.payload))); diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 9f66c09631d770..e77f2ac6e68904 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -407,7 +407,7 @@ export default function compose(state = initialState, action) { return item; })); - case INIT_MEDIA_EDIT_MODAL: + case INIT_MEDIA_EDIT_MODAL: { const media = state.get('media_attachments').find(item => item.get('id') === action.id); return state.set('media_modal', ImmutableMap({ id: action.id, @@ -416,6 +416,7 @@ export default function compose(state = initialState, action) { focusY: media.getIn(['meta', 'focus', 'y'], 0), dirty: false, })); + } case COMPOSE_CHANGE_MEDIA_DESCRIPTION: return state.setIn(['media_modal', 'description'], action.description).setIn(['media_modal', 'dirty'], true); case COMPOSE_CHANGE_MEDIA_FOCUS: diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 622f5e8e884bbd..c99a619b52dc69 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -298,9 +298,10 @@ export default function notifications(state = initialState, action) { return action.payload.timeline === 'home' ? state.update(action.payload.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : state; - case NOTIFICATIONS_MARK_AS_READ: + case NOTIFICATIONS_MARK_AS_READ: { const lastNotification = state.get('items').find(item => item !== null); return lastNotification ? recountUnread(state, lastNotification.get('id')) : state; + } case NOTIFICATIONS_SET_BROWSER_SUPPORT: return state.set('browserSupport', action.value); case NOTIFICATIONS_SET_BROWSER_PERMISSION: diff --git a/app/javascript/mastodon/reducers/search.js b/app/javascript/mastodon/reducers/search.js index 7828d49eeedd9a..7de1c65c07a295 100644 --- a/app/javascript/mastodon/reducers/search.js +++ b/app/javascript/mastodon/reducers/search.js @@ -72,9 +72,10 @@ export default function search(state = initialState, action) { }); case SEARCH_EXPAND_REQUEST: return state.set('type', action.searchType).set('isLoading', true); - case SEARCH_EXPAND_SUCCESS: + case SEARCH_EXPAND_SUCCESS: { const results = action.searchType === 'hashtags' ? ImmutableOrderedSet(fromJS(action.results.hashtags)) : action.results[action.searchType].map(item => item.id); return state.updateIn(['results', action.searchType], list => list.union(results)).set('isLoading', false); + } case SEARCH_HISTORY_UPDATE: return state.set('recent', ImmutableOrderedSet(fromJS(action.recent))); default: From 66b2bc1c841d6ad59fe4961ff9f0075fa3e52d50 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Wed, 2 Oct 2024 17:08:02 +0900 Subject: [PATCH 187/467] Ignore error if mentioned account was not processable (#29215) Co-authored-by: Claire --- app/lib/activitypub/activity/create.rb | 10 ++++++ app/workers/mention_resolve_worker.rb | 37 +++++++++++++++++++ spec/lib/activitypub/activity/create_spec.rb | 37 +++++++++++++++++++ spec/workers/mention_resolve_worker_spec.rb | 38 ++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 app/workers/mention_resolve_worker.rb create mode 100644 spec/workers/mention_resolve_worker_spec.rb diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 09a8caf1fcce27..928803cd645655 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -42,6 +42,7 @@ def audience_cc def process_status @tags = [] @mentions = [] + @unresolved_mentions = [] @silenced_account_ids = [] @params = {} @@ -55,6 +56,7 @@ def process_status end resolve_thread(@status) + resolve_unresolved_mentions(@status) fetch_replies(@status) distribute forward_for_reply @@ -197,6 +199,8 @@ def process_mention(tag) return if account.nil? @mentions << Mention.new(account: account, silent: false) + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + @unresolved_mentions << tag['href'] end def process_emoji(tag) @@ -301,6 +305,12 @@ def resolve_thread(status) ThreadResolveWorker.perform_async(status.id, in_reply_to_uri, { 'request_id' => @options[:request_id] }) end + def resolve_unresolved_mentions(status) + @unresolved_mentions.uniq.each do |uri| + MentionResolveWorker.perform_in(rand(30...600).seconds, status.id, uri, { 'request_id' => @options[:request_id] }) + end + end + def fetch_replies(status) collection = @object['replies'] return if collection.blank? diff --git a/app/workers/mention_resolve_worker.rb b/app/workers/mention_resolve_worker.rb new file mode 100644 index 00000000000000..72dcd9633f32fe --- /dev/null +++ b/app/workers/mention_resolve_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class MentionResolveWorker + include Sidekiq::Worker + include ExponentialBackoff + include JsonLdHelper + + sidekiq_options queue: 'pull', retry: 7 + + def perform(status_id, uri, options = {}) + status = Status.find_by(id: status_id) + return if status.nil? + + account = account_from_uri(uri) + account = ActivityPub::FetchRemoteAccountService.new.call(uri, request_id: options[:request_id]) if account.nil? + + return if account.nil? + + status.mentions.create!(account: account, silent: false) + rescue ActiveRecord::RecordNotFound + # Do nothing + rescue Mastodon::UnexpectedResponseError => e + response = e.response + + if response_error_unsalvageable?(response) + # Give up + else + raise e + end + end + + private + + def account_from_uri(uri) + ActivityPub::TagManager.instance.uri_to_resource(uri, Account) + end +end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 0986ae17151e0f..bdc8fd9d519080 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -63,6 +63,24 @@ } end + let(:invalid_mention_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), 'post2'].join('/'), + type: 'Note', + to: [ + 'https://www.w3.org/ns/activitystreams#Public', + ActivityPub::TagManager.instance.uri_for(follower), + ], + content: '@bob lorem ipsum', + published: 1.hour.ago.utc.iso8601, + updated: 1.hour.ago.utc.iso8601, + tag: { + type: 'Mention', + href: 'http://notexisting.dontexistingtld/actor', + }, + } + end + def activity_for_object(json) { '@context': 'https://www.w3.org/ns/activitystreams', @@ -117,6 +135,25 @@ def activity_for_object(json) # Creates two notifications expect(Notification.count).to eq 2 end + + it 'ignores unprocessable mention', :aggregate_failures do + stub_request(:get, invalid_mention_json[:tag][:href]).to_raise(HTTP::ConnectionError) + # When receiving the post that contains an invalid mention… + described_class.new(activity_for_object(invalid_mention_json), sender, delivery: true).perform + + # NOTE: Refering explicitly to the workers is a bit awkward + DistributionWorker.drain + FeedInsertWorker.drain + + # …it creates a status + status = Status.find_by(uri: invalid_mention_json[:id]) + + # Check the process did not crash + expect(status.nil?).to be false + + # It has queued a mention resolve job + expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, invalid_mention_json[:tag][:href], anything) + end end describe '#perform' do diff --git a/spec/workers/mention_resolve_worker_spec.rb b/spec/workers/mention_resolve_worker_spec.rb new file mode 100644 index 00000000000000..5e23876b4ae4f8 --- /dev/null +++ b/spec/workers/mention_resolve_worker_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe MentionResolveWorker do + let(:status_id) { -42 } + let(:uri) { 'https://example.com/users/unknown' } + + describe '#perform' do + subject { described_class.new.perform(status_id, uri, {}) } + + context 'with a non-existent status' do + it 'returns nil' do + expect(subject).to be_nil + end + end + + context 'with a valid user' do + let(:status) { Fabricate(:status) } + let(:status_id) { status.id } + + let(:service_double) { instance_double(ActivityPub::FetchRemoteAccountService) } + + before do + allow(ActivityPub::FetchRemoteAccountService).to receive(:new).and_return(service_double) + + allow(service_double).to receive(:call).with(uri, anything) { Fabricate(:account, domain: 'example.com', uri: uri) } + end + + it 'resolves the account and adds a new mention', :aggregate_failures do + expect { subject } + .to change { status.reload.mentions }.from([]).to(a_collection_including(having_attributes(account: having_attributes(uri: uri), silent: false))) + + expect(service_double).to have_received(:call).once + end + end + end +end From ea72d5ec3a2eda181baa6846a67aec9b8b4b0142 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:05:57 +0000 Subject: [PATCH 188/467] New Crowdin Translations (automated) (#32214) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/cy.json | 7 +++ app/javascript/mastodon/locales/eo.json | 64 ++++++++++++------------ app/javascript/mastodon/locales/gl.json | 2 +- app/javascript/mastodon/locales/he.json | 8 +++ app/javascript/mastodon/locales/hu.json | 4 +- app/javascript/mastodon/locales/ja.json | 1 + app/javascript/mastodon/locales/kab.json | 2 + app/javascript/mastodon/locales/no.json | 2 + app/javascript/mastodon/locales/tr.json | 5 ++ config/locales/cy.yml | 4 ++ config/locales/doorkeeper.gl.yml | 2 +- config/locales/he.yml | 4 ++ config/locales/nn.yml | 6 +-- 13 files changed, 72 insertions(+), 39 deletions(-) diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index f2d0708882fae5..52dc6a49e2f2fe 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.title": "Wps!", + "alt_text_badge.title": "Testun Amgen", "announcement.announcement": "Cyhoeddiad", "attachments_list.unprocessed": "(heb eu prosesu)", "audio.hide": "Cuddio sain", @@ -221,6 +222,7 @@ "domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.", "domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.", "domain_block_modal.title": "Blocio parth?", + "domain_block_modal.you_will_lose_relationships": "Byddwch yn colli'r holl ddilynwyr a phobl rydych chi'n eu dilyn o'r gweinydd hwn.", "domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.", "domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.", "domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.", @@ -849,6 +851,11 @@ "upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.", "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", + "upload_form.drag_and_drop.instructions": "I godi atodiad cyfryngau, pwyswch y space neu enter. Wrth lusgo, defnyddiwch y bysellau saeth i symud yr atodiad cyfryngau i unrhyw gyfeiriad penodol. Pwyswch space neu enter eto i ollwng yr atodiad cyfryngau yn ei safle newydd, neu pwyswch escape i ddiddymu.", + "upload_form.drag_and_drop.on_drag_cancel": "Cafodd llusgo ei ddiddymu. Cafodd atodiad cyfryngau {item} ei ollwng.", + "upload_form.drag_and_drop.on_drag_end": "Cafodd atodiad cyfryngau {item} ei ollwng.", + "upload_form.drag_and_drop.on_drag_over": "Symudwyd atodiad cyfryngau {item}.", + "upload_form.drag_and_drop.on_drag_start": "Atodiad cyfryngau godwyd {item}.", "upload_form.edit": "Golygu", "upload_form.thumbnail": "Newid llun bach", "upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 4268c385359327..35c2a5c7448e46 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -22,10 +22,10 @@ "account.cancel_follow_request": "Nuligi peton por sekvado", "account.copy": "Kopii ligilon al profilo", "account.direct": "Private mencii @{name}", - "account.disable_notifications": "Ne plu sciigi min, kiam @{name} mesaĝas", + "account.disable_notifications": "Ĉesu sciigi min kiam @{name} afiŝas", "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti la profilon", - "account.enable_notifications": "Sciigi min, kiam @{name} mesaĝas", + "account.enable_notifications": "Sciigu min kiam @{name} afiŝos", "account.endorse": "Rekomendi ĉe via profilo", "account.featured_tags.last_status_at": "Lasta afîŝo je {date}", "account.featured_tags.last_status_never": "Neniu afiŝo", @@ -49,14 +49,14 @@ "account.mention": "Mencii @{name}", "account.moved_to": "{name} indikis, ke ria nova konto estas nun:", "account.mute": "Silentigi @{name}", - "account.mute_notifications_short": "Silentigu Sciigojn", + "account.mute_notifications_short": "Silentigu sciigojn", "account.mute_short": "Silentigu", "account.muted": "Silentigita", "account.mutual": "Reciproka", "account.no_bio": "Neniu priskribo estas provizita.", "account.open_original_page": "Malfermi la originalan paĝon", "account.posts": "Afiŝoj", - "account.posts_with_replies": "Mesaĝoj kaj respondoj", + "account.posts_with_replies": "Afiŝoj kaj respondoj", "account.report": "Raporti @{name}", "account.requested": "Atendo de aprobo. Klaku por nuligi la peton por sekvado", "account.requested_follow": "{name} petis sekvi vin", @@ -69,7 +69,7 @@ "account.unendorse": "Ne plu rekomendi ĉe la profilo", "account.unfollow": "Ĉesi sekvi", "account.unmute": "Ne plu silentigi @{name}", - "account.unmute_notifications_short": "Malsilentigu Sciigojn", + "account.unmute_notifications_short": "Malsilentigu sciigojn", "account.unmute_short": "Ne plu silentigi", "account_note.placeholder": "Alklaku por aldoni noton", "admin.dashboard.daily_retention": "Uzantoretenprocento lau tag post registro", @@ -81,7 +81,7 @@ "admin.impact_report.instance_followers": "Sekvantojn niaj uzantoj perdus", "admin.impact_report.instance_follows": "Sekvantojn ties uzantoj perdus", "admin.impact_report.title": "Influa reporto", - "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", + "alert.rate_limited.message": "Bonvolu reprovi poste {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Aj!", @@ -163,7 +163,7 @@ "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", "compose_form.poll.type": "Stilo", "compose_form.publish": "Afiŝo", - "compose_form.publish_form": "Afiŝi", + "compose_form.publish_form": "Nova afiŝo", "compose_form.reply": "Respondi", "compose_form.save_changes": "Ĝisdatigi", "compose_form.spoiler.marked": "Forigi la averton de enhavo", @@ -173,7 +173,7 @@ "confirmations.block.confirm": "Bloki", "confirmations.delete.confirm": "Forigi", "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?", - "confirmations.delete.title": "Ĉu forigi Afiŝon?", + "confirmations.delete.title": "Ĉu forigi afiŝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", "confirmations.delete_list.title": "Ĉu forigi liston?", @@ -213,9 +213,9 @@ "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.", "dismissable_banner.dismiss": "Eksigi", "dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.", - "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", + "dismissable_banner.explore_statuses": "Ĉi tiuj estas afiŝoj de la tuta socia reto, kiuj populariĝas hodiaŭ. Pli novaj afiŝoj kun pli da diskonigoj kaj plej ŝatataj estas rangigitaj pli alte.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", - "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", + "dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.", "domain_block_modal.block": "Bloki servilon", "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe", "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.", @@ -265,8 +265,8 @@ "empty_column.direct": "Vi ankoraŭ ne havas privatan mencion. Kiam vi sendos aŭ ricevos iun, tiu aperos ĉi tie.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", - "empty_column.favourited_statuses": "Vi ankoraŭ ne havas stelumitan afiŝon.", - "empty_column.favourites": "Ankoraŭ neniu stelumis tiun afiŝon.", + "empty_column.favourited_statuses": "Vi ankoraŭ ne havas plej ŝatatajn afiŝojn. Kiam vi ŝatatas unu, ĝi aperos ĉi tie.", + "empty_column.favourites": "Neniu ankoraŭ ŝatis ĉi tiun afiŝon. Kiam iu ŝatos ĝin, ili aperos ĉi tie.", "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.followed_tags": "Vi ankoraŭ ne sekvas iujn kradvortojn. Kiam vi faras, ili aperos ĉi tie.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", @@ -296,7 +296,7 @@ "filter_modal.added.review_and_configure": "Por kontroli kaj pli modifi ĉi tiu filtrilkategorio, iru al la {settings_link}.", "filter_modal.added.review_and_configure_title": "Filtrilopcioj", "filter_modal.added.settings_link": "opciopaĝo", - "filter_modal.added.short_explanation": "Ĉi tiu mesaĝo aldonitas al la filtrilkategorio: {title}.", + "filter_modal.added.short_explanation": "Ĉi tiu afiŝo aldonitas al la filtrilkategorio: {title}.", "filter_modal.added.title": "Filtrilo aldonita!", "filter_modal.select_filter.context_mismatch": "ne kongruas la kuntekston", "filter_modal.select_filter.expired": "eksvalidiĝinta", @@ -304,7 +304,7 @@ "filter_modal.select_filter.search": "Serĉi aŭ krei", "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", - "filter_modal.title.status": "Filtri mesaĝon", + "filter_modal.title.status": "Filtri afiŝon", "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", "filtered_notifications_banner.title": "Filtritaj sciigoj", @@ -351,7 +351,7 @@ "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", "hashtag.counter_by_accounts": "{count, plural,one {{counter} partoprenanto} other {{counter} partoprenantoj}}", "hashtag.counter_by_uses": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", - "hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiau", + "hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiaŭ", "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", @@ -382,9 +382,9 @@ "ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?", "ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?", "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", - "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.", + "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", - "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.", + "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.", "interaction_modal.login.action": "Prenu min hejmen", "interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social", "interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?", @@ -402,12 +402,12 @@ "keyboard_shortcuts.back": "reveni", "keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj", "keyboard_shortcuts.boost": "Diskonigi la mesaĝon", - "keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj", + "keyboard_shortcuts.column": "Fokusi kolumnon", "keyboard_shortcuts.compose": "enfokusigi la tekstujon", "keyboard_shortcuts.description": "Priskribo", "keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj", "keyboard_shortcuts.down": "iri suben en la listo", - "keyboard_shortcuts.enter": "malfermi mesaĝon", + "keyboard_shortcuts.enter": "Malfermi afiŝon", "keyboard_shortcuts.favourite": "Stelumi afiŝon", "keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj", "keyboard_shortcuts.federated": "Malfermi la frataran templinion", @@ -421,16 +421,16 @@ "keyboard_shortcuts.my_profile": "malfermi vian profilon", "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", "keyboard_shortcuts.open_media": "Malfermi plurmedion", - "keyboard_shortcuts.pinned": "malfermi la liston de alpinglitaj mesaĝoj", + "keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston", "keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro", - "keyboard_shortcuts.reply": "respondi", + "keyboard_shortcuts.reply": "Respondu al afiŝo", "keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado", "keyboard_shortcuts.search": "enfokusigi la serĉilon", "keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")", "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")", "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion", - "keyboard_shortcuts.toot": "Krei novan mesaĝon", + "keyboard_shortcuts.toot": "Komencu novan afiŝon", "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", "keyboard_shortcuts.up": "iri supren en la listo", "lightbox.close": "Fermi", @@ -476,9 +476,9 @@ "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", "navigation_bar.community_timeline": "Loka templinio", - "navigation_bar.compose": "Skribi novan mesaĝon", + "navigation_bar.compose": "Redakti novan afiŝon", "navigation_bar.direct": "Privataj mencioj", - "navigation_bar.discover": "Esplori", + "navigation_bar.discover": "Malkovri", "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.explore": "Esplori", "navigation_bar.favourites": "Stelumoj", @@ -487,12 +487,12 @@ "navigation_bar.followed_tags": "Sekvataj kradvortoj", "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.lists": "Listoj", - "navigation_bar.logout": "Adiaŭi", + "navigation_bar.logout": "Elsaluti", "navigation_bar.moderation": "Modereco", "navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.personal": "Persone", - "navigation_bar.pins": "Alpinglitaj mesaĝoj", + "navigation_bar.pins": "Alpinglitaj afiŝoj", "navigation_bar.preferences": "Preferoj", "navigation_bar.public_timeline": "Fratara templinio", "navigation_bar.search": "Serĉi", @@ -572,7 +572,7 @@ "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", - "notifications.column_settings.status": "Novaj mesaĝoj:", + "notifications.column_settings.status": "Novaj afiŝoj:", "notifications.column_settings.unread_notifications.category": "Nelegitaj sciigoj", "notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn", "notifications.column_settings.update": "Redaktoj:", @@ -660,7 +660,7 @@ "poll.votes": "{votes, plural, one {# voĉdono} other {# voĉdonoj}}", "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", - "privacy.change": "Agordi mesaĝan privatecon", + "privacy.change": "Ŝanĝu afiŝan privatecon", "privacy.direct.long": "Ĉiuj menciitaj en la afiŝo", "privacy.direct.short": "Specifaj homoj", "privacy.private.long": "Nur viaj sekvantoj", @@ -775,13 +775,13 @@ "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", "status.admin_account": "Malfermi fasadon de moderigado por @{name}", "status.admin_domain": "Malfermu moderigan interfacon por {domain}", - "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", + "status.admin_status": "Malfermi ĉi tiun afiŝon en la kontrola interfaco", "status.block": "Bloki @{name}", "status.bookmark": "Aldoni al la legosignoj", "status.cancel_reblog_private": "Ne plu diskonigi", "status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi", "status.continued_thread": "Daŭrigis fadenon", - "status.copy": "Kopii la ligilon al la mesaĝo", + "status.copy": "Kopii la ligilon al la afiŝo", "status.delete": "Forigi", "status.detailed_status": "Detala konversacia vido", "status.direct": "Private mencii @{name}", @@ -803,9 +803,9 @@ "status.more": "Pli", "status.mute": "Silentigi @{name}", "status.mute_conversation": "Silentigi konversacion", - "status.open": "Disvolvi la mesaĝon", + "status.open": "Pligrandigu ĉi tiun afiŝon", "status.pin": "Alpingli al la profilo", - "status.pinned": "Alpinglita mesaĝo", + "status.pinned": "Alpinglita afiŝo", "status.read_more": "Legi pli", "status.reblog": "Diskonigi", "status.reblog_private": "Diskonigi kun la sama videbleco", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3bc9e1ee590dfd..2a31bfa4638d79 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -193,7 +193,7 @@ "confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.reply.title": "Editar a publicación?", "confirmations.unfollow.confirm": "Deixar de seguir", - "confirmations.unfollow.message": "Desexas deixar de seguir a {name}?", + "confirmations.unfollow.message": "Tes certeza de querer deixar de seguir a {name}?", "confirmations.unfollow.title": "Deixar de seguir á usuaria?", "content_warning.hide": "Agochar publicación", "content_warning.show": "Mostrar igualmente", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 4ce0d41620d5dc..16f558e543e5a7 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "חלה הגבלה על קצב התעבורה", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.title": "אופס!", + "alt_text_badge.title": "כיתוב חלופי", "announcement.announcement": "הכרזה", "attachments_list.unprocessed": "(לא מעובד)", "audio.hide": "השתק", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "משתמש משרת זה לא יכול לעקוב אחריך.", "domain_block_modal.they_wont_know": "הם לא ידעו כי נחסמו.", "domain_block_modal.title": "לחסום שרת?", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural,one {יאבד לך עוקב אחד}other {יאבדו לך {followersCountDisplay} עוקבים}} {followingCount, plural,one {ונעקב אחד}other {ו־{followingCountDisplay} נעקבים}}.", + "domain_block_modal.you_will_lose_relationships": "יאבדו לך כל העוקבים והנעקבים משרת זה.", "domain_block_modal.you_wont_see_posts": "לא תוכלו לראות הודעות ממשתמשים על שרת זה.", "domain_pill.activitypub_lets_connect": "מאפשר לך להתחבר ולהתרועע עם אחרים לא רק במסטודון, אלא גם ביישומים חברתיים שונים אחרים.", "domain_pill.activitypub_like_language": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.", @@ -849,6 +852,11 @@ "upload_error.poll": "לא ניתן להעלות קובץ עם סקר.", "upload_form.audio_description": "תאר/י עבור לקויי שמיעה", "upload_form.description": "תיאור לכבדי ראיה", + "upload_form.drag_and_drop.instructions": "כדי לבחור קובץ מוצמד, יש ללחוץ על מקש רווח או אנטר. בעת הגרירה, השתמשו במקשי החיצים כדי להזיז את הקובץ המוצמד בכל כיוון. לחצו רווח או אנטר בשנית כדי לעזוב את הקובץ במקומו החדש, או לחצו אסקייפ לביטול.", + "upload_form.drag_and_drop.on_drag_cancel": "הגרירה בוטלה. קובץ המדיה {item} נעזב.", + "upload_form.drag_and_drop.on_drag_end": "קובץ המדיה {item} נעזב.", + "upload_form.drag_and_drop.on_drag_over": "קובץ המדיה {item} הוזז.", + "upload_form.drag_and_drop.on_drag_start": "קובץ המדיה {item} נבחר.", "upload_form.edit": "עריכה", "upload_form.thumbnail": "שנה/י תמונה ממוזערת", "upload_form.video_description": "תאר/י עבור לקויי שמיעה ולקויי ראייה", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 8baf584b7833d7..f9f403177c96dd 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -852,8 +852,8 @@ "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára", "upload_form.description": "Leírás vak vagy gyengénlátó emberek számára", - "upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomjon Szóközt vagy Entert. Húzás közben használja a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomja meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomja meg az Esc gombot.", - "upload_form.drag_and_drop.on_drag_cancel": "Az áthúzást megszakította. A(z) {item} médiamelléklet el lett dobva.", + "upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomj Szóközt vagy Entert. Húzás közben használd a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomd meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomd meg az Esc gombot.", + "upload_form.drag_and_drop.on_drag_cancel": "Az áthúzás megszakítva. A(z) {item} médiamelléklet el lett dobva.", "upload_form.drag_and_drop.on_drag_end": "A(z) {item} médiamelléklet el lett dobva.", "upload_form.drag_and_drop.on_drag_over": "A(z) {item} médiamelléklet át lett helyezve.", "upload_form.drag_and_drop.on_drag_start": "A(z) {item} médiamelléklet fel lett véve.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index f5e7cc9c0484c3..46444863acea18 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "制限に達しました", "alert.unexpected.message": "不明なエラーが発生しました。", "alert.unexpected.title": "エラー!", + "alt_text_badge.title": "代替テキスト", "announcement.announcement": "お知らせ", "attachments_list.unprocessed": "(未処理)", "audio.hide": "音声を閉じる", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index ff06c9c464ed5e..07236bb73ecd83 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -585,6 +585,7 @@ "status.bookmark": "Creḍ", "status.cancel_reblog_private": "Sefsex beṭṭu", "status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen", + "status.continued_thread": "Asentel yettkemmil", "status.copy": "Nɣel assaɣ ɣer tasuffeɣt", "status.delete": "Kkes", "status.direct": "Bder-d @{name} weḥd-s", @@ -616,6 +617,7 @@ "status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.", "status.redraft": "Kkes tɛiwdeḍ tira", "status.remove_bookmark": "Kkes tacreḍt", + "status.replied_in_thread": "Y·t·erra-d deg usentel", "status.replied_to": "Y·terra-yas i {name}", "status.reply": "Err", "status.replyAll": "Err i lxiḍ", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 8cd3387eaf968c..1dd5df32b8a4a5 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -502,6 +502,8 @@ "notification.reblog": "{name} fremhevet ditt innlegg", "notification.status": "{name} la nettopp ut", "notification.update": "{name} redigerte et innlegg", + "notification_requests.minimize_banner": "Minimer banneret for filtrerte varsler", + "notification_requests.view": "Vis varsler", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", "notifications.column_settings.admin.report": "Nye rapporter:", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 6feae5d137d8ef..2d9c7321d033e0 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -852,6 +852,11 @@ "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", "upload_form.audio_description": "İşitme kaybı olan kişiler için yazı ekleyiniz", "upload_form.description": "Görme engelliler için açıklama", + "upload_form.drag_and_drop.instructions": "Bir medya eklentisini taşımak için, boşluk veya enter tuşuna basın. Sürükleme sırasında medya eklentisini herhangi bir yöne hareket ettirmek için ok tuşlarını kullanın. Medya eklentisini yeni konumuna bırakmak için tekrar boşluk veya enter tuşuna basın veya işlemi iptal etmek için escape tuşuna basın.", + "upload_form.drag_and_drop.on_drag_cancel": "Sürükleme iptal edildi. Medya eklentisi {item} bırakıldı.", + "upload_form.drag_and_drop.on_drag_end": "Medya eklentisi {item} bırakıldı.", + "upload_form.drag_and_drop.on_drag_over": "Medya eklentisi {item} hareket ettirildi.", + "upload_form.drag_and_drop.on_drag_start": "Medya eklentisi {item} tutuldu.", "upload_form.edit": "Düzenle", "upload_form.thumbnail": "Küçük resmi değiştir", "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için açıklama ekleyiniz", diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 1ae6aa08fff93a..a70d08ed8e5ef0 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -931,6 +931,9 @@ cy: message_html: Nid ydych wedi diffinio unrhyw reolau gweinydd. sidekiq_process_check: message_html: Does dim proses Sidekiq yn rhedeg ar gyfer y ciw(iau) %{value}. Adolygwch eich ffurfweddiad Sidekiq + software_version_check: + action: Gweld y diweddariadau sydd ar gael + message_html: Mae diweddariad Mastodon ar gael. software_version_critical_check: action: Gweld y diweddariadau sydd ar gael message_html: Mae diweddariad hanfodol Mastodon ar gael, diweddarwch cyn gynted â phosibl. @@ -1796,6 +1799,7 @@ cy: delete: Dileu cyfrif development: Datblygu edit_profile: Golygu proffil + export: Allforio featured_tags: Prif hashnodau import: Mewnforio import_and_export: Mewnforio ac allforio diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index adee6bd3d3ccb4..5d7148b84b0284 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -69,7 +69,7 @@ gl: buttons: revoke: Retirar autorización confirmations: - revoke: Estás segura? + revoke: Tes certeza? index: authorized_at: Autorizada o %{date} description_html: Estas aplicacións poden acceder á túa conta usando a API. Se ves aplicacións que non recoñeces, ou hai comportamentos non consentidos dalgunha delas, podes revogar o acceso. diff --git a/config/locales/he.yml b/config/locales/he.yml index c7af22660f7b16..846b0d14af94aa 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -903,6 +903,9 @@ he: message_html: לא הוגדרו שום כללי שרת. sidekiq_process_check: message_html: שום הליכי Sidekiq לא רצים עבור %{value} תור(ות). בחנו בבקשה את הגדרות Sidekiq + software_version_check: + action: ראו עדכונים זמינים + message_html: עדכון מסטודון זמין כעת. software_version_critical_check: action: ראו עדכונים זמינים message_html: יצא עדכון קריטי למסטודון, נא לעדכן את תוכנת מסטודון בהקדם האפשרי. @@ -1744,6 +1747,7 @@ he: delete: מחיקת חשבון development: פיתוח edit_profile: עריכת פרופיל + export: ייצוא featured_tags: תגיות נבחרות import: יבוא import_and_export: יבוא ויצוא diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 8f6afc2426bb9b..ca5e34ee55d80d 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1,7 +1,7 @@ --- nn: about: - about_mastodon_html: 'Framtidas sosiale nettverk: Ingen annonsar, ingen verksemder som overvaker deg, etisk design og desentralisering! Eig idéane dine med Mastodon!' + about_mastodon_html: 'Framtidas sosiale nettverk: Ingen annonsar, ingen verksemder som overvaker deg, etisk design og desentralisering! Eig dataene dine med Mastodon!' contact_missing: Ikkje sett contact_unavailable: I/T hosted_on: "%{domain} er vert for Mastodon" @@ -39,7 +39,7 @@ nn: avatar: Bilete by_domain: Domene change_email: - changed_msg: Konto-e-posten er endra! + changed_msg: E-post for konto er endra! current_email: Noverande e-post label: Byt e-post new_email: Ny e-post @@ -62,7 +62,7 @@ nn: disable: Slå av disable_sign_in_token_auth: Slå av e-post-token-autentisering disable_two_factor_authentication: Slå av 2FA - disabled: Slege av + disabled: Inaktiv display_name: Synleg namn domain: Domene edit: Rediger From f0716368e642c4c3d21d2327009ddd59d27cec8b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 05:07:52 -0400 Subject: [PATCH 189/467] Update simplecov-html to version 0.13.1 (#32205) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c623f92e7d4dbc..3950a30d62abb2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -815,7 +815,7 @@ GEM docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-html (0.12.3) + simplecov-html (0.13.1) simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) stackprof (0.2.26) From 33d3ca7cf19b5ae6e90163092d63d4a49fe45d4b Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Wed, 2 Oct 2024 11:23:44 +0200 Subject: [PATCH 190/467] Support /.well-known/host-meta.json (#32206) --- .../well_known/host_meta_controller.rb | 18 ++++++++- config/routes.rb | 2 +- spec/requests/well_known/host_meta_spec.rb | 40 ++++++++++++++----- spec/routing/well_known_routes_spec.rb | 9 ++++- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/app/controllers/well_known/host_meta_controller.rb b/app/controllers/well_known/host_meta_controller.rb index 201da9fbc3b440..6dee587baf4fc8 100644 --- a/app/controllers/well_known/host_meta_controller.rb +++ b/app/controllers/well_known/host_meta_controller.rb @@ -7,7 +7,23 @@ class HostMetaController < ActionController::Base # rubocop:disable Rails/Applic def show @webfinger_template = "#{webfinger_url}?resource={uri}" expires_in 3.days, public: true - render content_type: 'application/xrd+xml', formats: [:xml] + + respond_to do |format| + format.any do + render content_type: 'application/xrd+xml', formats: [:xml] + end + + format.json do + render json: { + links: [ + { + rel: 'lrdd', + template: @webfinger_template, + }, + ], + } + end + end end end end diff --git a/config/routes.rb b/config/routes.rb index 890102955c67ac..83170fba0f3180 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -67,7 +67,7 @@ def redirect_with_vary(path) scope path: '.well-known' do scope module: :well_known do get 'oauth-authorization-server', to: 'oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' } - get 'host-meta', to: 'host_meta#show', as: :host_meta, defaults: { format: 'xml' } + get 'host-meta', to: 'host_meta#show', as: :host_meta get 'nodeinfo', to: 'node_info#index', as: :nodeinfo, defaults: { format: 'json' } get 'webfinger', to: 'webfinger#show', as: :webfinger end diff --git a/spec/requests/well_known/host_meta_spec.rb b/spec/requests/well_known/host_meta_spec.rb index 09f17baa894d64..726911dda1964f 100644 --- a/spec/requests/well_known/host_meta_spec.rb +++ b/spec/requests/well_known/host_meta_spec.rb @@ -9,19 +9,39 @@ expect(response) .to have_http_status(200) .and have_attributes( - media_type: 'application/xrd+xml', - body: host_meta_xml_template + media_type: 'application/xrd+xml' + ) + + doc = Nokogiri::XML(response.parsed_body) + expect(doc.at_xpath('/xrd:XRD/xrd:Link[@rel="lrdd"]/@template', 'xrd' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0').value) + .to eq 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}' + end + + it 'returns http success with valid JSON response with .json extension' do + get '/.well-known/host-meta.json' + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) + + expect(response.parsed_body) + .to include( + links: [ + 'rel' => 'lrdd', + 'template' => 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}', + ] ) end - private + it 'returns http success with valid JSON response with Accept header' do + get '/.well-known/host-meta', headers: { 'Accept' => 'application/json' } - def host_meta_xml_template - <<~XML - - - - - XML + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) end end diff --git a/spec/routing/well_known_routes_spec.rb b/spec/routing/well_known_routes_spec.rb index 6578e939ae1e14..84081059bba75e 100644 --- a/spec/routing/well_known_routes_spec.rb +++ b/spec/routing/well_known_routes_spec.rb @@ -4,9 +4,14 @@ RSpec.describe 'Well Known routes' do describe 'the host-meta route' do - it 'routes to correct place with xml format' do + it 'routes to correct place' do expect(get('/.well-known/host-meta')) - .to route_to('well_known/host_meta#show', format: 'xml') + .to route_to('well_known/host_meta#show') + end + + it 'routes to correct place with json format' do + expect(get('/.well-known/host-meta.json')) + .to route_to('well_known/host_meta#show', format: 'json') end end From ebab3b80c7e8abb7e29d1ab912427e52d89faa1c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 05:43:04 -0400 Subject: [PATCH 191/467] Expand coverage for `Export` utility class (#32212) --- .../account_domain_block_fabricator.rb | 2 +- spec/models/export_spec.rb | 169 ++++++++++++++---- 2 files changed, 140 insertions(+), 31 deletions(-) diff --git a/spec/fabricators/account_domain_block_fabricator.rb b/spec/fabricators/account_domain_block_fabricator.rb index 83df509da2cc85..a211b7c6667031 100644 --- a/spec/fabricators/account_domain_block_fabricator.rb +++ b/spec/fabricators/account_domain_block_fabricator.rb @@ -2,5 +2,5 @@ Fabricator(:account_domain_block) do account { Fabricate.build(:account) } - domain 'example.com' + domain { sequence { |n| "host-#{n}.example" } } end diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 06bf07ed78a314..48e78830dd15dd 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -3,66 +3,175 @@ require 'rails_helper' RSpec.describe Export do + subject { described_class.new(account) } + let(:account) { Fabricate(:account) } let(:target_accounts) do - [{}, { username: 'one', domain: 'local.host' }].map(&method(:Fabricate).curry(2).call(:account)) + [ + Fabricate(:account), + Fabricate(:account, username: 'one', domain: 'local.host'), + ] end - describe 'to_csv' do - it 'returns a csv of the blocked accounts' do - target_accounts.each { |target_account| account.block!(target_account) } + describe '#to_bookmarks_csv' do + before { Fabricate.times(2, :bookmark, account: account) } - export = described_class.new(account).to_blocked_accounts_csv - results = export.strip.split + let(:export) { CSV.parse(subject.to_bookmarks_csv) } - expect(results.size).to eq 2 - expect(results.first).to eq 'one@local.host' + it 'returns a csv of bookmarks' do + expect(export) + .to contain_exactly( + include(/statuses/), + include(/statuses/) + ) end + end - it 'returns a csv of the muted accounts' do - target_accounts.each { |target_account| account.mute!(target_account) } + describe '#to_blocked_accounts_csv' do + before { target_accounts.each { |target_account| account.block!(target_account) } } + + let(:export) { CSV.parse(subject.to_blocked_accounts_csv) } + + it 'returns a csv of the blocked accounts' do + expect(export) + .to contain_exactly( + include('one@local.host'), + include(be_present) + ) + end + end - export = described_class.new(account).to_muted_accounts_csv - results = export.strip.split("\n") + describe '#to_muted_accounts_csv' do + before { target_accounts.each { |target_account| account.mute!(target_account) } } - expect(results.size).to eq 3 - expect(results.first).to eq 'Account address,Hide notifications' - expect(results.second).to eq 'one@local.host,true' + let(:export) { CSV.parse(subject.to_muted_accounts_csv) } + + it 'returns a csv of the muted accounts' do + expect(export) + .to contain_exactly( + contain_exactly('Account address', 'Hide notifications'), + include('one@local.host', 'true'), + include(be_present) + ) end + end + + describe '#to_following_accounts_csv' do + before { target_accounts.each { |target_account| account.follow!(target_account) } } + + let(:export) { CSV.parse(subject.to_following_accounts_csv) } it 'returns a csv of the following accounts' do - target_accounts.each { |target_account| account.follow!(target_account) } + expect(export) + .to contain_exactly( + contain_exactly('Account address', 'Show boosts', 'Notify on new posts', 'Languages'), + include('one@local.host', 'true', 'false', be_blank), + include(be_present) + ) + end + end + + describe '#to_lists_csv' do + before do + target_accounts.each do |target_account| + account.follow!(target_account) + Fabricate(:list, account: account).accounts << target_account + end + end - export = described_class.new(account).to_following_accounts_csv - results = export.strip.split("\n") + let(:export) { CSV.parse(subject.to_lists_csv) } - expect(results.size).to eq 3 - expect(results.first).to eq 'Account address,Show boosts,Notify on new posts,Languages' - expect(results.second).to eq 'one@local.host,true,false,' + it 'returns a csv of the lists' do + expect(export) + .to contain_exactly( + include('one@local.host'), + include(be_present) + ) end end - describe 'total_storage' do + describe '#to_blocked_domains_csv' do + before { Fabricate.times(2, :account_domain_block, account: account) } + + let(:export) { CSV.parse(subject.to_blocked_domains_csv) } + + it 'returns a csv of the blocked domains' do + expect(export) + .to contain_exactly( + include(/example/), + include(/example/) + ) + end + end + + describe '#total_storage' do it 'returns the total size of the media attachments' do media_attachment = Fabricate(:media_attachment, account: account) - expect(described_class.new(account).total_storage).to eq media_attachment.file_file_size || 0 + expect(subject.total_storage).to eq media_attachment.file_file_size || 0 + end + end + + describe '#total_statuses' do + before { Fabricate.times(2, :status, account: account) } + + it 'returns the total number of statuses' do + expect(subject.total_statuses).to eq(2) + end + end + + describe '#total_bookmarks' do + before { Fabricate.times(2, :bookmark, account: account) } + + it 'returns the total number of bookmarks' do + expect(subject.total_bookmarks).to eq(2) end end - describe 'total_follows' do + describe '#total_follows' do + before { target_accounts.each { |target_account| account.follow!(target_account) } } + it 'returns the total number of the followed accounts' do - target_accounts.each { |target_account| account.follow!(target_account) } - expect(described_class.new(account.reload).total_follows).to eq 2 + expect(subject.total_follows).to eq(2) + end + end + + describe '#total_lists' do + before { Fabricate.times(2, :list, account: account) } + + it 'returns the total number of lists' do + expect(subject.total_lists).to eq(2) end + end + + describe '#total_followers' do + before { target_accounts.each { |target_account| target_account.follow!(account) } } + + it 'returns the total number of the follower accounts' do + expect(subject.total_followers).to eq(2) + end + end + + describe '#total_blocks' do + before { target_accounts.each { |target_account| account.block!(target_account) } } it 'returns the total number of the blocked accounts' do - target_accounts.each { |target_account| account.block!(target_account) } - expect(described_class.new(account.reload).total_blocks).to eq 2 + expect(subject.total_blocks).to eq(2) end + end + + describe '#total_mutes' do + before { target_accounts.each { |target_account| account.mute!(target_account) } } it 'returns the total number of the muted accounts' do - target_accounts.each { |target_account| account.mute!(target_account) } - expect(described_class.new(account.reload).total_mutes).to eq 2 + expect(subject.total_mutes).to eq(2) + end + end + + describe '#total_domain_blocks' do + before { Fabricate.times(2, :account_domain_block, account: account) } + + it 'returns the total number of account domain blocks' do + expect(subject.total_domain_blocks).to eq(2) end end end From 4a737a948a6aa8803ba366374569a93970437ec7 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 2 Oct 2024 12:03:04 +0200 Subject: [PATCH 192/467] Fix incorrect `'navigator'` check (#32219) --- app/javascript/mastodon/actions/markers.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/javascript/mastodon/actions/markers.ts b/app/javascript/mastodon/actions/markers.ts index 0b3280c2128dea..251546cb9a35b3 100644 --- a/app/javascript/mastodon/actions/markers.ts +++ b/app/javascript/mastodon/actions/markers.ts @@ -37,8 +37,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk( }); return; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - } else if ('navigator' && 'sendBeacon' in navigator) { + } else if ('sendBeacon' in navigator) { // Failing that, we can use sendBeacon, but we have to encode the data as // FormData for DoorKeeper to recognize the token. const formData = new FormData(); From 4aa26eba53a0c6c5e305f0de9367ea54c83f86db Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 07:11:52 -0400 Subject: [PATCH 193/467] Extract `WebPushRequest` from push notification worker and subscription (#32208) --- app/lib/web_push_request.rb | 72 +++++++++++++++++++ app/models/web/push_subscription.rb | 28 -------- app/workers/web/push_notification_worker.rb | 36 ++++++---- .../web/push_notification_worker_spec.rb | 45 ++++++++---- 4 files changed, 128 insertions(+), 53 deletions(-) create mode 100644 app/lib/web_push_request.rb diff --git a/app/lib/web_push_request.rb b/app/lib/web_push_request.rb new file mode 100644 index 00000000000000..a43e22480e12a2 --- /dev/null +++ b/app/lib/web_push_request.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +class WebPushRequest + SIGNATURE_ALGORITHM = 'p256ecdsa' + AUTH_HEADER = 'WebPush' + PAYLOAD_EXPIRATION = 24.hours + JWT_ALGORITHM = 'ES256' + JWT_TYPE = 'JWT' + + attr_reader :web_push_subscription + + delegate( + :endpoint, + :key_auth, + :key_p256dh, + to: :web_push_subscription + ) + + def initialize(web_push_subscription) + @web_push_subscription = web_push_subscription + end + + def audience + @audience ||= Addressable::URI.parse(endpoint).normalized_site + end + + def authorization_header + [AUTH_HEADER, encoded_json_web_token].join(' ') + end + + def crypto_key_header + [SIGNATURE_ALGORITHM, vapid_key.public_key_for_push_header].join('=') + end + + def encrypt(payload) + Webpush::Encryption.encrypt(payload, key_p256dh, key_auth) + end + + private + + def encoded_json_web_token + JWT.encode( + web_token_payload, + vapid_key.curve, + JWT_ALGORITHM, + typ: JWT_TYPE + ) + end + + def web_token_payload + { + aud: audience, + exp: PAYLOAD_EXPIRATION.from_now.to_i, + sub: payload_subject, + } + end + + def payload_subject + [:mailto, contact_email].join(':') + end + + def vapid_key + @vapid_key ||= Webpush::VapidKey.from_keys( + Rails.configuration.x.vapid_public_key, + Rails.configuration.x.vapid_private_key + ) + end + + def contact_email + @contact_email ||= ::Setting.site_contact_email + end +end diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index ddfd08146e76ae..9d30881bf38238 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -29,26 +29,6 @@ class Web::PushSubscription < ApplicationRecord delegate :locale, to: :associated_user - def encrypt(payload) - Webpush::Encryption.encrypt(payload, key_p256dh, key_auth) - end - - def audience - @audience ||= Addressable::URI.parse(endpoint).normalized_site - end - - def crypto_key_header - p256ecdsa = vapid_key.public_key_for_push_header - - "p256ecdsa=#{p256ecdsa}" - end - - def authorization_header - jwt = JWT.encode({ aud: audience, exp: 24.hours.from_now.to_i, sub: "mailto:#{contact_email}" }, vapid_key.curve, 'ES256', typ: 'JWT') - - "WebPush #{jwt}" - end - def pushable?(notification) policy_allows_notification?(notification) && alert_enabled_for_notification_type?(notification) end @@ -92,14 +72,6 @@ def find_or_create_access_token ) end - def vapid_key - @vapid_key ||= Webpush::VapidKey.from_keys(Rails.configuration.x.vapid_public_key, Rails.configuration.x.vapid_private_key) - end - - def contact_email - @contact_email ||= ::Setting.site_contact_email - end - def alert_enabled_for_notification_type?(notification) truthy?(data&.dig('alerts', notification.type.to_s)) end diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index 7e9691aaba37cd..104503f130fc2d 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -16,10 +16,10 @@ def perform(subscription_id, notification_id) # in the meantime, so we have to double-check before proceeding return unless @notification.activity.present? && @subscription.pushable?(@notification) - payload = @subscription.encrypt(push_notification_json) + payload = web_push_request.encrypt(push_notification_json) - request_pool.with(@subscription.audience) do |http_client| - request = Request.new(:post, @subscription.endpoint, body: payload.fetch(:ciphertext), http_client: http_client) + request_pool.with(web_push_request.audience) do |http_client| + request = Request.new(:post, web_push_request.endpoint, body: payload.fetch(:ciphertext), http_client: http_client) request.add_headers( 'Content-Type' => 'application/octet-stream', @@ -27,8 +27,8 @@ def perform(subscription_id, notification_id) 'Urgency' => URGENCY, 'Content-Encoding' => 'aesgcm', 'Encryption' => "salt=#{Webpush.encode64(payload.fetch(:salt)).delete('=')}", - 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{@subscription.crypto_key_header}", - 'Authorization' => @subscription.authorization_header + 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{web_push_request.crypto_key_header}", + 'Authorization' => web_push_request.authorization_header ) request.perform do |response| @@ -50,17 +50,27 @@ def perform(subscription_id, notification_id) private + def web_push_request + @web_push_request || WebPushRequest.new(@subscription) + end + def push_notification_json - json = I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do - ActiveModelSerializers::SerializableResource.new( - @notification, - serializer: Web::NotificationSerializer, - scope: @subscription, - scope_name: :current_push_subscription - ).as_json + Oj.dump(serialized_notification_in_subscription_locale.as_json) + end + + def serialized_notification_in_subscription_locale + I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do + serialized_notification end + end - Oj.dump(json) + def serialized_notification + ActiveModelSerializers::SerializableResource.new( + @notification, + serializer: Web::NotificationSerializer, + scope: @subscription, + scope_name: :current_push_subscription + ) end def request_pool diff --git a/spec/workers/web/push_notification_worker_spec.rb b/spec/workers/web/push_notification_worker_spec.rb index ced21d5bf799b4..7f836d99e431f9 100644 --- a/spec/workers/web/push_notification_worker_spec.rb +++ b/spec/workers/web/push_notification_worker_spec.rb @@ -22,27 +22,48 @@ let(:payload) { { ciphertext: ciphertext, salt: salt, server_public_key: server_public_key, shared_secret: shared_secret } } describe 'perform' do + around do |example| + original_private = Rails.configuration.x.vapid_private_key + original_public = Rails.configuration.x.vapid_public_key + Rails.configuration.x.vapid_private_key = vapid_private_key + Rails.configuration.x.vapid_public_key = vapid_public_key + example.run + Rails.configuration.x.vapid_private_key = original_private + Rails.configuration.x.vapid_public_key = original_public + end + before do - allow(subscription).to receive_messages(contact_email: contact_email, vapid_key: vapid_key) - allow(Web::PushSubscription).to receive(:find).with(subscription.id).and_return(subscription) + Setting.site_contact_email = contact_email + allow(Webpush::Encryption).to receive(:encrypt).and_return(payload) allow(JWT).to receive(:encode).and_return('jwt.encoded.payload') stub_request(:post, endpoint).to_return(status: 201, body: '') + end + it 'calls the relevant service with the correct headers' do subject.perform(subscription.id, notification.id) + + expect(web_push_endpoint_request) + .to have_been_made end - it 'calls the relevant service with the correct headers' do - expect(a_request(:post, endpoint).with(headers: { - 'Content-Encoding' => 'aesgcm', - 'Content-Type' => 'application/octet-stream', - 'Crypto-Key' => "dh=BAgtUks5d90kFmxGevk9tH7GEmvz9DB0qcEMUsOBgKwMf-TMjsKIIG6LQvGcFAf6jcmAod15VVwmYwGIIxE4VWE;p256ecdsa=#{vapid_public_key.delete('=')}", - 'Encryption' => 'salt=WJeVM-RY-F9351SVxTFx_g', - 'Ttl' => '172800', - 'Urgency' => 'normal', - 'Authorization' => 'WebPush jwt.encoded.payload', - }, body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr")).to have_been_made + def web_push_endpoint_request + a_request( + :post, + endpoint + ).with( + headers: { + 'Content-Encoding' => 'aesgcm', + 'Content-Type' => 'application/octet-stream', + 'Crypto-Key' => "dh=BAgtUks5d90kFmxGevk9tH7GEmvz9DB0qcEMUsOBgKwMf-TMjsKIIG6LQvGcFAf6jcmAod15VVwmYwGIIxE4VWE;p256ecdsa=#{vapid_public_key.delete('=')}", + 'Encryption' => 'salt=WJeVM-RY-F9351SVxTFx_g', + 'Ttl' => '172800', + 'Urgency' => 'normal', + 'Authorization' => 'WebPush jwt.encoded.payload', + }, + body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr" + ) end end end From 1f65a95421a4dcbe44e25bd9e36329830a396eef Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 08:26:16 -0400 Subject: [PATCH 194/467] Remove unneeded `reorder(nil)` conditions (#32200) --- app/lib/vacuum/imports_vacuum.rb | 4 ++-- app/models/account_filter.rb | 2 +- app/models/admin/tag_filter.rb | 2 +- app/services/purge_domain_service.rb | 4 ++-- app/workers/filtered_notification_cleanup_worker.rb | 2 +- app/workers/scheduler/user_cleanup_scheduler.rb | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/lib/vacuum/imports_vacuum.rb b/app/lib/vacuum/imports_vacuum.rb index 700bd81847f4ac..b67865194f39a9 100644 --- a/app/lib/vacuum/imports_vacuum.rb +++ b/app/lib/vacuum/imports_vacuum.rb @@ -9,10 +9,10 @@ def perform private def clean_unconfirmed_imports! - BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).reorder(nil).in_batches.delete_all + BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).in_batches.delete_all end def clean_old_imports! - BulkImport.where(created_at: ..1.week.ago).reorder(nil).in_batches.delete_all + BulkImport.where(created_at: ..1.week.ago).in_batches.delete_all end end diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb index 42b1c49538b0a5..e2f359a8c32ef6 100644 --- a/app/models/account_filter.rb +++ b/app/models/account_filter.rb @@ -21,7 +21,7 @@ def initialize(params) end def results - scope = Account.includes(:account_stat, user: [:ips, :invite_request]).without_instance_actor.reorder(nil) + scope = Account.includes(:account_stat, user: [:ips, :invite_request]).without_instance_actor relevant_params.each do |key, value| next if key.to_s == 'page' diff --git a/app/models/admin/tag_filter.rb b/app/models/admin/tag_filter.rb index 6149c52175884b..5e75757b2374a7 100644 --- a/app/models/admin/tag_filter.rb +++ b/app/models/admin/tag_filter.rb @@ -14,7 +14,7 @@ def initialize(params) end def results - scope = Tag.reorder(nil) + scope = Tag.all params.each do |key, value| next if key == :page diff --git a/app/services/purge_domain_service.rb b/app/services/purge_domain_service.rb index ca0f0d441fe5bb..feab8aa1dd5da2 100644 --- a/app/services/purge_domain_service.rb +++ b/app/services/purge_domain_service.rb @@ -16,12 +16,12 @@ def purge_relationship_severance_events! end def purge_accounts! - Account.remote.where(domain: @domain).reorder(nil).find_each do |account| + Account.remote.where(domain: @domain).find_each do |account| DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) end end def purge_emojis! - CustomEmoji.remote.where(domain: @domain).reorder(nil).find_each(&:destroy) + CustomEmoji.remote.where(domain: @domain).find_each(&:destroy) end end diff --git a/app/workers/filtered_notification_cleanup_worker.rb b/app/workers/filtered_notification_cleanup_worker.rb index 2b955da3c0a1ac..87ff6a9eb5e928 100644 --- a/app/workers/filtered_notification_cleanup_worker.rb +++ b/app/workers/filtered_notification_cleanup_worker.rb @@ -4,6 +4,6 @@ class FilteredNotificationCleanupWorker include Sidekiq::Worker def perform(account_id, from_account_id) - Notification.where(account_id: account_id, from_account_id: from_account_id, filtered: true).reorder(nil).in_batches(order: :desc).delete_all + Notification.where(account_id: account_id, from_account_id: from_account_id, filtered: true).in_batches(order: :desc).delete_all end end diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb index 9f58d9225b3a14..f7551283320dce 100644 --- a/app/workers/scheduler/user_cleanup_scheduler.rb +++ b/app/workers/scheduler/user_cleanup_scheduler.rb @@ -16,7 +16,7 @@ def perform private def clean_unconfirmed_accounts! - User.unconfirmed.where(confirmation_sent_at: ..UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS.days.ago).reorder(nil).find_in_batches do |batch| + User.unconfirmed.where(confirmation_sent_at: ..UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS.days.ago).find_in_batches do |batch| # We have to do it separately because of missing database constraints AccountModerationNote.where(target_account_id: batch.map(&:account_id)).delete_all Account.where(id: batch.map(&:account_id)).delete_all From cf859d151b494a0786c07167f26dc52d0cfd407f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 09:08:40 -0400 Subject: [PATCH 195/467] More link/button conversion across views (#32199) --- app/views/admin/accounts/show.html.haml | 2 +- app/views/admin/instances/show.html.haml | 12 ++++++------ app/views/admin/invites/index.html.haml | 2 +- app/views/admin/reports/_actions.html.haml | 2 +- app/views/admin/reports/show.html.haml | 4 ++-- app/views/disputes/strikes/show.html.haml | 4 ++-- app/views/settings/exports/show.html.haml | 2 +- .../otp_authentication/show.html.haml | 2 +- .../index.html.haml | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index f148b9a0822193..2d9e30e368054c 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -30,7 +30,7 @@ = render 'admin/accounts/counters', account: @account - if @account.local? && @account.user.nil? - = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) + = button_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), class: :button if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) - else .table-wrapper %table.table.inline-table diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index 812a9c8870b0eb..dd4c50549cdb31 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -21,7 +21,7 @@ - if @instance.domain_allow = link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@instance.domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } - else - = link_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: 'button', method: :post + = button_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: :button - else %p= t('admin.instances.content_policies.description_html') @@ -40,7 +40,7 @@ %td= @instance.domain_block.policies.map { |policy| t(policy, scope: 'admin.instances.content_policies.policies') }.join(' · ') = link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@instance.domain_block), class: 'button' - = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } + = button_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: :button, data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button' @@ -70,16 +70,16 @@ - if @instance.unavailable? %span.negative-hint = t('admin.instances.availability.failure_threshold_reached', date: l(@instance.unavailable_domain.created_at.to_date)) - = link_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } + = button_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } - elsif @instance.exhausted_deliveries_days.empty? %span.positive-hint = t('admin.instances.availability.no_failures_recorded') - = link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } + = button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } - else %span.negative-hint = t('admin.instances.availability.failures_recorded', count: @instance.delivery_failure_tracker.days) - %span= link_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } unless @instance.exhausted_deliveries_days.empty? - %span= link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } + %span= button_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } unless @instance.exhausted_deliveries_days.empty? + %span= button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } - if @instance.purgeable? %p= t('admin.instances.purge_description_html') diff --git a/app/views/admin/invites/index.html.haml b/app/views/admin/invites/index.html.haml index 964deaba8f3da1..bbccca31470e72 100644 --- a/app/views/admin/invites/index.html.haml +++ b/app/views/admin/invites/index.html.haml @@ -34,4 +34,4 @@ = paginate @invites - if policy(:invite).deactivate_all? - = link_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' + = button_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, data: { confirm: t('admin.accounts.are_you_sure') }, class: :button diff --git a/app/views/admin/reports/_actions.html.haml b/app/views/admin/reports/_actions.html.haml index ef016e949bddf0..c25f45e169fd42 100644 --- a/app/views/admin/reports/_actions.html.haml +++ b/app/views/admin/reports/_actions.html.haml @@ -2,7 +2,7 @@ .report-actions .report-actions__item .report-actions__item__button - = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), method: :post, class: 'button' + = button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), class: :button .report-actions__item__description = t('admin.reports.actions.resolve_description_html') - if statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? } diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 69e9c02921ea51..32b6b3be8d7b8e 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -3,9 +3,9 @@ - content_for :heading_actions do - if @report.unresolved? - = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button' + = button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), class: :button - else - = link_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), method: :post, class: 'button' + = button_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), class: :button - unless @report.account.local? || @report.target_account.local? .flash-message= t('admin.reports.forwarded_replies_explanation') diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 150dc06759188d..1d71e0ddd1cac9 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -3,8 +3,8 @@ - content_for :heading_actions do - if @appeal.persisted? - = link_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), method: :post, class: 'button' if can?(:approve, @appeal) - = link_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), method: :post, class: 'button button--destructive' if can?(:reject, @appeal) + = button_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), class: :button if can?(:approve, @appeal) + = button_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), class: 'button button--destructive' if can?(:reject, @appeal) - if @strike.overruled? %p.hint diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 273c5a4ba6feac..61d55350c253ed 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -46,7 +46,7 @@ %p.muted-hint= t('exports.archive_takeout.hint_html') - if policy(:backup).create? - %p= link_to t('exports.archive_takeout.request'), settings_export_path, class: 'button', method: :post + %p= button_to t('exports.archive_takeout.request'), settings_export_path, class: :button - unless @backups.empty? %hr.spacer/ diff --git a/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml b/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml index d069ba12a96bc1..01f385dbea6431 100644 --- a/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml +++ b/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml @@ -6,4 +6,4 @@ %hr.spacer/ - = link_to t('otp_authentication.setup'), settings_otp_authentication_path, data: { method: :post }, class: 'block-button' + = button_to t('otp_authentication.setup'), settings_otp_authentication_path, class: 'block-button' diff --git a/app/views/settings/two_factor_authentication_methods/index.html.haml b/app/views/settings/two_factor_authentication_methods/index.html.haml index 8b670283b9e089..e3a211a3d7b915 100644 --- a/app/views/settings/two_factor_authentication_methods/index.html.haml +++ b/app/views/settings/two_factor_authentication_methods/index.html.haml @@ -2,7 +2,7 @@ = t('settings.two_factor_authentication') - content_for :heading_actions do - = link_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive', method: :post + = button_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive' %p.hint %span.positive-hint @@ -38,4 +38,4 @@ %hr.spacer/ .simple_form - = link_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, data: { method: :post }, class: 'block-button' + = button_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, class: 'block-button' From 2151dfb8d687f08438fc76d8fdf670a473d6a1e8 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 09:24:40 -0400 Subject: [PATCH 196/467] Add `relevant_params` to ReportFilter (matches account filter) (#32136) --- app/models/report_filter.rb | 14 +++++++++++++- spec/models/report_filter_spec.rb | 13 +++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index fd0e23cb81705d..9d2b0fb37420f5 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -18,13 +18,25 @@ def initialize(params) def results scope = Report.unresolved - params.each do |key, value| + relevant_params.each do |key, value| scope = scope.merge scope_for(key, value) end scope end + private + + def relevant_params + params.tap do |args| + args.delete(:target_origin) if origin_is_remote_and_domain_present? + end + end + + def origin_is_remote_and_domain_present? + params[:target_origin] == 'remote' && params[:by_target_domain].present? + end + def scope_for(key, value) case key.to_sym when :by_target_domain diff --git a/spec/models/report_filter_spec.rb b/spec/models/report_filter_spec.rb index 8668eb3d1085e8..51933e475adb70 100644 --- a/spec/models/report_filter_spec.rb +++ b/spec/models/report_filter_spec.rb @@ -30,4 +30,17 @@ expect(Report).to have_received(:resolved) end end + + context 'when given remote target_origin and also by_target_domain' do + let!(:matching_report) { Fabricate :report, target_account: Fabricate(:account, domain: 'match.example') } + let!(:non_matching_report) { Fabricate :report, target_account: Fabricate(:account, domain: 'other.example') } + + it 'preserves the domain value' do + filter = described_class.new(by_target_domain: 'match.example', target_origin: 'remote') + + expect(filter.results) + .to include(matching_report) + .and not_include(non_matching_report) + end + end end From d270d6dd4fce6dd15107ee1fe9b7877a5fca02d9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 09:26:46 -0400 Subject: [PATCH 197/467] Provide `use_path` to qr generator for svg data size reduction (#32127) --- .../two_factor_authentication/confirmations/new.html.haml | 2 +- .../two_factor_authentication/confirmations_controller_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/settings/two_factor_authentication/confirmations/new.html.haml b/app/views/settings/two_factor_authentication/confirmations/new.html.haml index 0b8278a104eaea..a35479b84e6850 100644 --- a/app/views/settings/two_factor_authentication/confirmations/new.html.haml +++ b/app/views/settings/two_factor_authentication/confirmations/new.html.haml @@ -5,7 +5,7 @@ %p.hint= t('otp_authentication.instructions_html') .qr-wrapper - .qr-code!= @qrcode.as_svg(padding: 0, module_size: 4) + .qr-code!= @qrcode.as_svg(padding: 0, module_size: 4, use_path: true) .qr-alternative %p.hint= t('otp_authentication.manual_instructions') diff --git a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb index 34eaacdf498f96..224310b7ef3043 100644 --- a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb @@ -18,7 +18,7 @@ def qr_code_markup RQRCode::QRCode.new( 'otpauth://totp/cb6e6126.ngrok.io:local-part%40domain?secret=thisisasecretforthespecofnewview&issuer=cb6e6126.ngrok.io' - ).as_svg(padding: 0, module_size: 4) + ).as_svg(padding: 0, module_size: 4, use_path: true) end end From b5006539c995cbefda04db25888ffe5bb5995d3f Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 2 Oct 2024 15:28:36 +0200 Subject: [PATCH 198/467] Fix media uploads in composer appearing over search results in advanced interface (#32217) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 14de6e6818bdd3..5f410ead931066 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3611,6 +3611,7 @@ $ui-header-logo-wordmark-width: 99px; overflow-y: auto; width: 100%; height: 100%; + z-index: 0; } .drawer__inner__mastodon { From f760899b04ef5647d8688e9f1f08094fb3cf5894 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 2 Oct 2024 15:29:23 +0200 Subject: [PATCH 199/467] Fix editing description of media uploads with custom thumbnails (#32221) --- app/javascript/mastodon/reducers/compose.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index e77f2ac6e68904..ba975b75a84f09 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -402,7 +402,7 @@ export default function compose(state = initialState, action) { .set('isUploadingThumbnail', false) .update('media_attachments', list => list.map(item => { if (item.get('id') === action.media.id) { - return fromJS(action.media); + return fromJS(action.media).set('unattached', item.get('unattached')); } return item; From b7bb850efd485466d4424f4744c1795541ca592f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 09:56:26 -0400 Subject: [PATCH 200/467] Enable hostname config for all system specs (#32109) --- spec/rails_helper.rb | 5 +++++ spec/system/invites_spec.rb | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index ee03b49bc6aa16..84cee0974f1a42 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -161,6 +161,11 @@ def sign_in(resource, _deprecated = nil, scope: nil) host! Rails.configuration.x.local_domain end + config.before :each, type: :system do + # Align with capybara config so that rails helpers called from rspec use matching host + host! 'localhost:3000' + end + config.after do Rails.cache.clear redis.del(redis.keys) diff --git a/spec/system/invites_spec.rb b/spec/system/invites_spec.rb index c57de871cc6e1a..fc60ce5913bc03 100644 --- a/spec/system/invites_spec.rb +++ b/spec/system/invites_spec.rb @@ -7,10 +7,7 @@ let(:user) { Fabricate :user } - before do - host! 'localhost:3000' # TODO: Move into before for all system specs? - sign_in user - end + before { sign_in user } describe 'Viewing invites' do it 'Lists existing user invites' do From 36f9c96812c313c5f782a702df221ad4b57da0f3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 10:45:12 -0400 Subject: [PATCH 201/467] Clean up labels on development application form (#32116) --- app/helpers/application_helper.rb | 13 +++++-------- app/models/session_activation.rb | 4 +++- app/views/settings/applications/_form.html.haml | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index de00f76d3623d5..a40580fbaec1ff 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,12 +1,6 @@ # frozen_string_literal: true module ApplicationHelper - DANGEROUS_SCOPES = %w( - read - write - follow - ).freeze - RTL_LOCALES = %i( ar ckb @@ -95,8 +89,11 @@ def title Rails.env.production? ? site_title : "#{site_title} (Dev)" end - def class_for_scope(scope) - 'scope-danger' if DANGEROUS_SCOPES.include?(scope.to_s) + def label_for_scope(scope) + safe_join [ + tag.samp(scope, class: { 'scope-danger' => SessionActivation::DEFAULT_SCOPES.include?(scope.to_s) }), + tag.span(t("doorkeeper.scopes.#{scope}"), class: :hint), + ] end def can?(action, record) diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index d0a77daf0a666c..8b8e533d30c980 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -28,6 +28,8 @@ class SessionActivation < ApplicationRecord before_create :assign_access_token + DEFAULT_SCOPES = %w(read write follow).freeze + class << self def active?(id) id && exists?(session_id: id) @@ -64,7 +66,7 @@ def access_token_attributes { application_id: Doorkeeper::Application.find_by(superapp: true)&.id, resource_owner_id: user_id, - scopes: 'read write follow', + scopes: DEFAULT_SCOPES.join(' '), expires_in: Doorkeeper.configuration.access_token_expires_in, use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?, } diff --git a/app/views/settings/applications/_form.html.haml b/app/views/settings/applications/_form.html.haml index 66ea8bc12bf00f..85fdefa0fcdf2e 100644 --- a/app/views/settings/applications/_form.html.haml +++ b/app/views/settings/applications/_form.html.haml @@ -18,7 +18,7 @@ .field-group .input.with_block_label - %label= t('activerecord.attributes.doorkeeper/application.scopes') + = form.label t('activerecord.attributes.doorkeeper/application.scopes'), required: true %span.hint= t('simple_form.hints.defaults.scopes') - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| @@ -29,7 +29,7 @@ hint: false, include_blank: false, item_wrapper_tag: 'li', - label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, + label_method: ->(scope) { label_for_scope(scope) }, label: false, required: false, selected: form.object.scopes.all, From 7d6b9ccd34fd10cce33114ac13201905222a807e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 10:45:54 -0400 Subject: [PATCH 202/467] Add `copyable_input` helper method to wrap shared options (#32119) --- app/helpers/application_helper.rb | 4 ++++ app/views/admin/invites/_invite.html.haml | 2 +- app/views/invites/_invite.html.haml | 2 +- app/views/oauth/authorizations/show.html.haml | 2 +- app/views/settings/verifications/show.html.haml | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a40580fbaec1ff..8f9a433d82d226 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -240,6 +240,10 @@ def mascot_url full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg')) end + def copyable_input(options = {}) + tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options) + end + private def storage_host_var diff --git a/app/views/admin/invites/_invite.html.haml b/app/views/admin/invites/_invite.html.haml index 8bd5f10feefdc6..53eac1d0cddf89 100644 --- a/app/views/admin/invites/_invite.html.haml +++ b/app/views/admin/invites/_invite.html.haml @@ -2,7 +2,7 @@ %td .input-copy .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: public_invite_url(invite_code: invite.code) } + = copyable_input value: public_invite_url(invite_code: invite.code) %button{ type: :button }= t('generic.copy') %td diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml index 892fdc5a0e38af..7c94062de450bb 100644 --- a/app/views/invites/_invite.html.haml +++ b/app/views/invites/_invite.html.haml @@ -2,7 +2,7 @@ %td .input-copy .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: public_invite_url(invite_code: invite.code) } + = copyable_input value: public_invite_url(invite_code: invite.code) %button{ type: :button }= t('generic.copy') - if invite.valid_for_use? diff --git a/app/views/oauth/authorizations/show.html.haml b/app/views/oauth/authorizations/show.html.haml index a5122a87fc39d7..bdff3363682c07 100644 --- a/app/views/oauth/authorizations/show.html.haml +++ b/app/views/oauth/authorizations/show.html.haml @@ -3,5 +3,5 @@ %p= t('doorkeeper.authorizations.show.title') .input-copy .input-copy__wrapper - %input.oauth-code{ type: 'text', spellcheck: 'false', readonly: true, value: params[:code] } + = copyable_input value: params[:code], class: 'oauth-code' %button{ type: :button }= t('generic.copy') diff --git a/app/views/settings/verifications/show.html.haml b/app/views/settings/verifications/show.html.haml index 00491866c6592c..560807f27ca7fb 100644 --- a/app/views/settings/verifications/show.html.haml +++ b/app/views/settings/verifications/show.html.haml @@ -16,7 +16,7 @@ .input-copy.lead .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: link_to('Mastodon', ActivityPub::TagManager.instance.url_for(@account), rel: 'me').to_str } + = copyable_input value: link_to('Mastodon', ActivityPub::TagManager.instance.url_for(@account), rel: :me) %button{ type: :button }= t('generic.copy') %p.lead= t('verification.extra_instructions_html') From cec89613720c23cb18d566ae05a6f69ac52d115e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 2 Oct 2024 10:47:00 -0400 Subject: [PATCH 203/467] Move admin action log type list generation to helper (#32178) --- app/helpers/admin/action_logs_helper.rb | 7 +++++++ app/views/admin/action_logs/index.html.haml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index e8d56341262cc5..51e28d8b4e9234 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -35,4 +35,11 @@ def log_target(log) end end end + + def sorted_action_log_types + Admin::ActionLogFilter::ACTION_TYPE_MAP + .keys + .map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] } + .sort_by(&:first) + end end diff --git a/app/views/admin/action_logs/index.html.haml b/app/views/admin/action_logs/index.html.haml index c02c8f0ad41fae..a5d41882943cf2 100644 --- a/app/views/admin/action_logs/index.html.haml +++ b/app/views/admin/action_logs/index.html.haml @@ -16,7 +16,7 @@ %strong= t('admin.action_logs.filter_by_action') .input.select.optional = form.select :action_type, - options_for_select(Admin::ActionLogFilter::ACTION_TYPE_MAP.keys.map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] }, params[:action_type]), + options_for_select(sorted_action_log_types, params[:action_type]), prompt: I18n.t('admin.accounts.moderation.all') - if @action_logs.empty? From f768a6eb16880f4e584db530e4106be9b9dcf206 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 2 Oct 2024 17:51:05 +0200 Subject: [PATCH 204/467] Hide badges in media gallery when media are hidden (#32224) --- app/javascript/mastodon/components/media_gallery.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 84cb4e04dcb5db..1380d244ad9a92 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -196,7 +196,7 @@ class Item extends PureComponent { {visible && thumbnail} - {badges && ( + {visible && badges && (
{badges}
From 6ef510fe3f4a08908df223d33d2788f851d0cb52 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:04:12 +0200 Subject: [PATCH 205/467] Update dependency json-schema to v5.0.1 (#32234) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3950a30d62abb2..987234a73d746f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -369,7 +369,7 @@ GEM json-ld-preloaded (3.3.0) json-ld (~> 3.3) rdf (~> 3.3) - json-schema (5.0.0) + json-schema (5.0.1) addressable (~> 2.8) jsonapi-renderer (0.2.2) jwt (2.7.1) From 0be1d332f28ca31e734954d7b8d73b41d60f485f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:04:33 +0200 Subject: [PATCH 206/467] Update dependency aws-sdk-s3 to v1.167.0 (#32231) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 987234a73d746f..1c2bb8df083089 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,8 +100,8 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.978.0) - aws-sdk-core (3.209.0) + aws-partitions (1.983.0) + aws-sdk-core (3.209.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.9) @@ -109,7 +109,7 @@ GEM aws-sdk-kms (1.94.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.166.0) + aws-sdk-s3 (1.167.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From d96351a87d7078e8d6a07486d7d30e4a7956745d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:05:11 +0000 Subject: [PATCH 207/467] Update babel monorepo to v7.25.7 (#32225) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 1368 ++++++++++++++++++++++++++--------------------------- 1 file changed, 680 insertions(+), 688 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8970981d88b1b2..0a7f89990cb2c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,127 +42,127 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/code-frame@npm:7.25.7" dependencies: - "@babel/highlight": "npm:^7.24.7" + "@babel/highlight": "npm:^7.25.7" picocolors: "npm:^1.0.0" - checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 + checksum: 10c0/14825c298bdec914caf3d24d1383b6d4cd6b030714686004992f4fc251831ecf432236652896f99d5d341f17170ae9a07b58d8d7b15aa0df8cfa1c5a7d5474bc languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: 10c0/50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/compat-data@npm:7.25.7" + checksum: 10c0/e5cc915abdd18d021236474a96606b2d4a915c4fb620c1ad776b8a08d91111e788cb3b7e9bad43593d4e0bfa4f06894357bcb0984102de1861b9e7322b6bc9f8 languageName: node linkType: hard "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" + version: 7.25.7 + resolution: "@babel/core@npm:7.25.7" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-module-transforms": "npm:^7.25.2" - "@babel/helpers": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.2" - "@babel/types": "npm:^7.25.2" + "@babel/code-frame": "npm:^7.25.7" + "@babel/generator": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helpers": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 + checksum: 10c0/dad20af39624086afc3a0910bd97ae712c9ad0e9dda09fc5da93876e8ea1802b63ddd81c44f4aa8a9834db46de801eaab1ce9b81ab54b4fe907ae052c24de136 languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.4, @babel/generator@npm:^7.7.2": - version: 7.25.4 - resolution: "@babel/generator@npm:7.25.4" +"@babel/generator@npm:^7.25.7, @babel/generator@npm:^7.7.2": + version: 7.25.7 + resolution: "@babel/generator@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.25.4" + "@babel/types": "npm:^7.25.7" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/a2d8cc39e759214740f836360c8d9c17aa93e16e41afe73368a9e7ccd1d5c3303a420ce3aca1c9a31fdb93d1899de471d5aac97d1c64f741f8750a25a6e91fbc + jsesc: "npm:^3.0.2" + checksum: 10c0/c03a26c79864d60d04ce36b649c3fa0d6fd7b2bf6a22e22854a0457aa09206508392dd73ee40e7bc8d50b3602f9ff068afa47770cda091d332e7db1ca382ee96 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" +"@babel/helper-annotate-as-pure@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + "@babel/types": "npm:^7.25.7" + checksum: 10c0/2f020b0fa9d336b5778485cc2de3141561ec436a7591b685457a5bcdae4ce41d9ddee68169c95504e0789e5a4327e73b8b7e72e5b60e82e96d730c4d19255248 languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/0ed84abf848c79fb1cd4c1ddac12c771d32c1904d87fc3087f33cfdeb0c2e0db4e7892b74b407d9d8d0c000044f3645a7391a781f788da8410c290bb123a1f13 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/e9dc5a7920a1d74150dec53ccd5e34f2b31ae307df7cdeec6289866f7bda97ecb1328b49a7710ecde5db5b6daad768c904a030f9a0fa3184963b0017622c42aa languageName: node linkType: hard -"@babel/helper-builder-react-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-builder-react-jsx@npm:7.24.7" +"@babel/helper-builder-react-jsx@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-builder-react-jsx@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/c95c8856c67c57060461f39b669707b2dca3501149bcc54b7c3e49c95069afce52179fc7c2bd809981acfbfdf0860ef1035dd7512cdba46c83bdb1ad6f6dc53f + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/f8123a76e8c3fcdbb24cc14bfefc80e4c7bf58112ab26bea3247298748c674cbaee70591c362d0d881e4d88154ea4809b145f3ddcf96221cf55ba27bfde535c6 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-compilation-targets@npm:7.25.7" dependencies: - "@babel/compat-data": "npm:^7.25.2" - "@babel/helper-validator-option": "npm:^7.24.8" - browserslist: "npm:^4.23.1" + "@babel/compat-data": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 + checksum: 10c0/705be7e5274a3fdade68e3e2cf42e2b600316ab52794e13b91299a16f16c926f15886b6e9d6df20eb943ccc1cdba5a363d4766f8d01e47b8e6f4e01175f5e66c languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" +"@babel/helper-create-class-features-plugin@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.4" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-member-expression-to-functions": "npm:^7.25.7" + "@babel/helper-optimise-call-expression": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/a765d9e0482e13cf96642fa8aa28e6f7d4d7d39f37840d6246e5e10a7c47f47c52d52522edd3073f229449d17ec0db6f9b7b5e398bff6bb0b4994d65957a164c + checksum: 10c0/405c3c1a137acda1206380a96993cf2cfd808b3bee1c11c4af47ee0f03a20858497aa53394d6adc5431793c543be5e02010620e871a5ab39d938ae90a54b50f2 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - regexpu-core: "npm:^5.3.1" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + regexpu-core: "npm:^6.1.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/85a7e3639c118856fb1113f54fb7e3bf7698171ddfd0cd6fccccd5426b3727bc1434fe7f69090441dcde327feef9de917e00d35e47ab820047057518dd675317 + checksum: 10c0/75919fd5a67cd7be8497b56f7b9ed6b4843cb401956ba8d403aa9ae5b005bc28e35c7f27e704d820edbd1154394ed7a7984d4719916795d89d716f6980fe8bd4 languageName: node linkType: hard @@ -181,223 +181,223 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" +"@babel/helper-member-expression-to-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.8" - "@babel/types": "npm:^7.24.8" - checksum: 10c0/7e14a5acc91f6cd26305a4441b82eb6f616bd70b096a4d2099a968f16b26d50207eec0b9ebfc466fefd62bd91587ac3be878117cdfec819b7151911183cb0e5a + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/1e948162ab48d84593a7c6ec9570d14c906146f1697144fc369c59dbeb00e4a062da67dd06cb0d8f98a044cd8389002dcf2ab6f5613d99c35748307846ec63fc languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-module-imports@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/0fd0c3673835e5bf75558e184bcadc47c1f6dd2fe2016d53ebe1e5a6ae931a44e093015c2f9a6651c1a89f25c76d9246710c2b0b460b95ee069c464f2837fa2c languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" +"@babel/helper-module-transforms@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-module-transforms@npm:7.25.7" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.2" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-simple-access": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 + checksum: 10c0/f37fa7d1d4df21690535b278468cbd5faf0133a3080f282000cfa4f3ffc9462a1458f866b04b6a2f2d1eec4691236cba9a867da61270dab3ab19846e62f05090 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" +"@babel/helper-optimise-call-expression@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + "@babel/types": "npm:^7.25.7" + checksum: 10c0/19b4cc7e77811b1fedca4928dbc14026afef913c2ba4142e5e110ebdcb5c3b2efc0f0fbee9f362c23a194674147b9d627adea71c289b9be08b9067bc0085308b languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.25.7 + resolution: "@babel/helper-plugin-utils@npm:7.25.7" + checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" +"@babel/helper-remap-async-to-generator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-wrap-function": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-wrap-function": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/0d17b5f7bb6a607edc9cc62fff8056dd9f341bf2f919884f97b99170d143022a5e7ae57922c4891e4fc360ad291e708d2f8cd8989f1d3cd7a17600159984f5a6 + checksum: 10c0/972d84876adce6ab61c87a2df47e1afc790b73cff0d1767d0a1c5d9f7aa5e91d8c581a272b66b2051a26cfbb167d8a780564705e488e3ce1f477f1c15059bc5f languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-replace-supers@npm:7.25.0" +"@babel/helper-replace-supers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-replace-supers@npm:7.25.7" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-member-expression-to-functions": "npm:^7.25.7" + "@babel/helper-optimise-call-expression": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/b4b6650ab3d56c39a259367cd97f8df2f21c9cebb3716fea7bca40a150f8847bfb82f481e98927c7c6579b48a977b5a8f77318a1c6aeb497f41ecd6dbc3fdfef + checksum: 10c0/761d64ee74429f7326a6aa65e2cd5bfcb8de9e3bc3f1efb14b8f610d2410f003b0fca52778dc801d49ff8fbc90b057e8f51b27c62b0b05c95eaf23140ca1287b languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" +"@babel/helper-simple-access@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-simple-access@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/eed1b499bfb4f613c18debd61517e3de77b6da2727ca025aa05ac81599e0269f1dddb5237db04e8bb598115d015874752e0a7f11ff38672d74a4976097417059 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/5804adb893849a9d8cfb548e3812566a81d95cb0c9a10d66b52912d13f488e577c33063bf19bc06ac70e6333162a7370d67ba1a1c3544d37fb50d5f4a00db4de languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 +"@babel/helper-string-parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-string-parser@npm:7.25.7" + checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 +"@babel/helper-validator-identifier@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-identifier@npm:7.25.7" + checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f +"@babel/helper-validator-option@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-option@npm:7.25.7" + checksum: 10c0/12ed418c8e3ed9ed44c8c80d823f4e42d399b5eb2e423adccb975e31a31a008cd3b5d8eab688b31f740caff4a1bb28fe06ea2fa7d635aee34cc0ad6995d50f0a languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-wrap-function@npm:7.25.0" +"@babel/helper-wrap-function@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-wrap-function@npm:7.25.7" dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/d54601a98384c191cbc1ff07b03a19e288ef8d5c6bfafe270b2a303d96e7304eb296002921ed464cc1b105a547d1db146eb86b0be617924dee1ba1b379cdc216 + "@babel/template": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/b5d412f72697f4a4ce4cb9784fbaf82501c63cf95066c0eadd3179e3439cbbf0aa5fa4858d93590083671943cd357aeb87286958df34aa56fdf8a4c9dea39755 languageName: node linkType: hard -"@babel/helpers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helpers@npm:7.25.0" +"@babel/helpers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helpers@npm:7.25.7" dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/b7fe007fc4194268abf70aa3810365085e290e6528dcb9fbbf7a765d43c74b6369ce0f99c5ccd2d44c413853099daa449c9a0123f0b212ac8d18643f2e8174b8 + "@babel/template": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/3b3ae9e373bd785414195ef8f59976a69d5a6ebe0ef2165fdcc5165e5c3ee09e0fcee94bb457df2ddb8c0532e4146d0a9b7a96b3497399a4bff4ffe196b30228 languageName: node linkType: hard -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" +"@babel/highlight@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/highlight@npm:7.25.7" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a + checksum: 10c0/1f5894fdb0a0af6101fb2822369b2eeeae32cbeae2ef73ff73fc6a0a4a20471565cd9cfa589f54ed69df66adeca7c57266031ca9134b7bd244d023a488d419aa languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/parser@npm:7.25.4" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/parser@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.25.4" + "@babel/types": "npm:^7.25.7" bin: parser: ./bin/babel-parser.js - checksum: 10c0/bdada5662f15d1df11a7266ec3bc9bb769bf3637ecf3d051eafcfc8f576dcf5a3ac1007c5e059db4a1e1387db9ae9caad239fc4f79e4c2200930ed610e779993 + checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.3" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/814b4d3f102e7556a5053d1acf57ef601cfcff39a2c81b8cdc6a5c842e3cb9838f5925d1466a5f1e6416e74c9c83586a3c07fbd7fb8610a396c2becdf9ae5790 + checksum: 10c0/c6ba97c39973897a2ab021c4a77221e1e93e853a5811d498db325da1bd692e41fa521db6d91bb709ccafd4e54ddd00869ffb35846923c3ccd49d46124b316904 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/9645a1f47b3750acadb1353c02e71cc712d072aafe5ce115ed3a886bc14c5d9200cfb0b5b5e60e813baa549b800cf798f8714019fd246c699053cf68c428e426 + checksum: 10c0/ac284868bf410f952c6959b0d77708464127160416f003b05c8127d30e64792d671abc167ebf778b17707e32174223ea8d3ff487276991fa90297d92f0dac6e2 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/ed1ce1c90cac46c01825339fd0f2a96fa071b016fb819d8dfaf8e96300eae30e74870cb47e4dc80d4ce2fb287869f102878b4f3b35bc927fec8b1d0d76bcf612 + checksum: 10c0/1bffc0a20c8c82b4c77515eb4c99b961b38184116f008bb42bed4e12d3379ba7b2bc6cf299bcea8118d645bb7a5e0caa83969842f16dd1fce49fb3a050e4ac65 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10c0/aeb6e7aa363a47f815cf956ea1053c5dd8b786a17799f065c9688ba4b0051fe7565d258bbe9400bfcbfb3114cb9fda66983e10afe4d750bc70ff75403e15dd36 + checksum: 10c0/32223f012614a0b2657579317ded7d0d09af2aa316285715c5012f974d0f15c2ce2fe0d8e80fdd9bac6c10c21c93cc925a9dfd6c8e21ce7ba1a9fe06a58088b4 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/45988025537a9d4a27b610fd696a18fd9ba9336621a69b4fb40560eeb10c79657f85c92a37f30c7c8fb29c22970eea0b373315795a891f1a05549a6cfe5a6bfe + checksum: 10c0/aa2ee7a5954d187de6cbcca0e0b64cfb79c4d224c332d1eb1e0e4afd92ef1a1f4bc4af24f66154097ccb348c08121a875456f47baed220b1b9e93584e6a19b65 languageName: node linkType: hard @@ -476,25 +476,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" +"@babel/plugin-syntax-import-assertions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b82c53e095274ee71c248551352d73441cf65b3b3fc0107258ba4e9aef7090772a425442b3ed1c396fa207d0efafde8929c87a17d3c885b3ca2021316e87e246 + checksum: 10c0/0fee0d971f3c654749fdf92e09b6556bba26ab014c8e99b7252f6a7f1ca108f17edd7ceefb5401d7b7008e98ab1b6f8c3c6a5db72862e7c7b2fcd649d000d690 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" +"@babel/plugin-syntax-import-attributes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/eccc54d0f03c96d0eec7a6e2fa124dadbc7298345b62ffc4238f173308c4325b5598f139695ff05a95cf78412ef6903599e4b814496612bf39aad4715a16375b + checksum: 10c0/fe00cdb96fd289ab126830a98e1dcf5ab7b529a6ef1c01a72506b5e7b1197d6e46c3c4d029cd90d1d61eb9a15ef77c282d156d0c02c7e32f168bb09d84150db4 languageName: node linkType: hard @@ -520,14 +520,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.24.7, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" +"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.25.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f44d927a9ae8d5ef016ff5b450e1671e56629ddc12e56b938e41fd46e141170d9dfc9a53d6cb2b9a20a7dd266a938885e6a3981c60c052a2e1daed602ac80e51 + checksum: 10c0/17db499c31fcfaa94d5408726d943955d51d478353d1e2dd84eda6024f7e3d104b9456a77f8aabfae0db7f4dc32f810d08357112f7fcbe305e7c9fcf5b3cac13 languageName: node linkType: hard @@ -619,14 +619,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" +"@babel/plugin-syntax-typescript@npm:^7.25.7, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.25.7 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/cdabd2e8010fb0ad15b49c2c270efc97c4bfe109ead36c7bbcf22da7a74bc3e49702fc4f22f12d2d6049e8e22a5769258df1fd05f0420ae45e11bdd5bc07805a + checksum: 10c0/ed51fd81a5cf571a89fc4cf4c0e3b0b91285c367237374c133d2e5e718f3963cfa61b81997df39220a8837dc99f9e9a8ab7701d259c09fae379e4843d9db60c2 languageName: node linkType: hard @@ -642,466 +642,466 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" +"@babel/plugin-transform-arrow-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6ac05a54e5582f34ac6d5dc26499e227227ec1c7fa6fc8de1f3d40c275f140d3907f79bbbd49304da2d7008a5ecafb219d0b71d78ee3290ca22020d878041245 + checksum: 10c0/c8d75ead93f130bf113b6d29493aca695092661ef039336d2a227169c3b7895aa5e9bcc548c42a95a6eaaaf49e512317b00699940bd40ccefd77443e703d3935 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-remap-async-to-generator": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-remap-async-to-generator": "npm:^7.25.7" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/traverse": "npm:^7.25.4" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/efed6f6be90b25ad77c15a622a0dc0b22dbf5d45599c207ab8fbc4e959aef21f574fa467d9cf872e45de664a46c32334e78dee2332d82f5f27e26249a34a0920 + checksum: 10c0/dcdd17d8cafafe0eb2edd0a46a7abe86c72235c957c8eb1157ccadb2b199572d5d1aa36a2d3bce5cb99990f7d3c6290ecf09959c62f3081c4df9ff717a1c84a4 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" +"@babel/plugin-transform-async-to-generator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.7" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-remap-async-to-generator": "npm:^7.24.7" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-remap-async-to-generator": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/83c82e243898875af8457972a26ab29baf8a2078768ee9f35141eb3edff0f84b165582a2ff73e90a9e08f5922bf813dbf15a85c1213654385198f4591c0dc45d + checksum: 10c0/1dbefba9c1455f7a92b8c59a93c622091db945294c936fc2c09b1648308c5b4cb2ecaae92baae0d07a324ab890a8a2ee27ceb046bc120932845d27aede275821 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/113e86de4612ae91773ff5cb6b980f01e1da7e26ae6f6012127415d7ae144e74987bc23feb97f63ba4bc699331490ddea36eac004d76a20d5369e4cc6a7f61cd + checksum: 10c0/b1e77492295d1b271ef850a81b0404cf3d0dd6a2bcbeab28a0fd99e61c6de4bda91dff583bb42138eec61bf71282bdd3b1bebcb53b7e373035e77fd6ba66caeb languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" +"@babel/plugin-transform-block-scoping@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/382931c75a5d0ea560387e76cb57b03461300527e4784efcb2fb62f36c1eb0ab331327b6034def256baa0cad9050925a61f9c0d56261b6afd6a29c3065fb0bd4 + checksum: 10c0/b2057e00535cd0e8bd5ee5d4640aa2e952564aeafb1bcf4e7b6de33442422877bb0ca8669ad0a48262ec077271978c61eae87b6b3bc8f472d830fa781d6f7e44 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" +"@babel/plugin-transform-class-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.4" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0b41bc8a5920d3d17c7c06220b601cf43e0a32ac34f05f05cd0cdf08915e4521b1b707cb1e60942b4fc68a5dfac09f0444a8720e0c72ce76fb039e8ec5263115 + checksum: 10c0/1f41e6934b20ad3e05df63959cff9bc600ff3119153b9acbbd44c1731e7df04866397e6e17799173f4c53cdee6115e155632859aee20bf47ec7dcef3f2168a47 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" +"@babel/plugin-transform-class-static-block@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/b0ade39a3d09dce886f79dbd5907c3d99b48167eddb6b9bbde24a0598129654d7017e611c20494cdbea48b07ac14397cd97ea34e3754bbb2abae4e698128eccb + checksum: 10c0/cbb4b46cbd8ad10106eb2bedb5a0665661a1d1d5b6f3ab565ff454b802dab4718e02b25670fe0d40835494aedb3dc26757c06cc4da6ff3e80291c5f882269bd3 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-classes@npm:7.25.4" +"@babel/plugin-transform-classes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-classes@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.4" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c68424d9dd64860825111aa4a4ed5caf29494b7a02ddb9c36351d768c41e8e05127d89274795cdfcade032d9d299e6c677418259df58c71e68f1741583dcf467 + checksum: 10c0/8121781e1d8acd80e6169019106f73a399475ad9c895c1988a344dfed5a6ddd340938ac55123dc1e423bb8f25f255f5d11031116ad756ba3c314595a97c973af languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" +"@babel/plugin-transform-computed-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/25636dbc1f605c0b8bc60aa58628a916b689473d11551c9864a855142e36742fe62d4a70400ba3b74902338e77fb3d940376c0a0ba154b6b7ec5367175233b49 + checksum: 10c0/7ad0a1c126f50935a02e77d438ebc39078a9d644b3a60de60bec32c5d9f49e7f2b193fcecb8c61bb1bc3cdd4af1e93f72d022d448511fa76a171527c633cd1bf languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" +"@babel/plugin-transform-destructuring@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/804968c1d5f5072c717505296c1e5d5ec33e90550423de66de82bbcb78157156e8470bbe77a04ab8c710a88a06360a30103cf223ac7eff4829adedd6150de5ce + checksum: 10c0/a563123b2fb267e03aa50104005f00b56226a685938906c42c1b251462e0cc9fc89e587d5656d3324159071eb8ebda8c68a6011f11d5a00fb1436cb5a5411b7b languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" +"@babel/plugin-transform-dotall-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/793f14c9494972d294b7e7b97b747f47874b6d57d7804d3443c701becf5db192c9311be6a1835c07664486df1f5c60d33196c36fb7e11a53015e476b4c145b33 + checksum: 10c0/7f1db3ec20b7fae46db4a9c4c257d75418b0896b72c0a3de20b3044f952801480f0a2e75ebb0d64f13e8cd4db0e49aa42c5c0edff372b23c41679b1ea5dd3ed4 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/75ff7ec1117ac500e77bf20a144411d39c0fdd038f108eec061724123ce6d1bb8d5bd27968e466573ee70014f8be0043361cdb0ef388f8a182d1d97ad67e51b9 + checksum: 10c0/b4079981e2db19737a0f1a00254e7388e2d3c01ce36e9fd826e4d86d3c1755339495e29c71fd7c84a068201ec24687328d48f3bf53b32b6d6224f51d9a34da74 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.0" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/1c9b57ddd9b33696e88911d0e7975e1573ebc46219c4b30eb1dc746cbb71aedfac6f6dab7fdfdec54dd58f31468bf6ab56b157661ea4ffe58f906d71f89544c8 + checksum: 10c0/e4946090ff6d88d54b78265ee653079ec34c117ac046e22f66f7c4ac44249cdc2dfca385bc5bf4386db668b9948eeb12985589500188bc252e684c7714c31475 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/eeda48372efd0a5103cb22dadb13563c975bce18ae85daafbb47d57bb9665d187da9d4fe8d07ac0a6e1288afcfcb73e4e5618bf75ff63fddf9736bfbf225203b + checksum: 10c0/c733252ff20a32d9747dd081916270f5a073856597e849a5f458b12f4354499b18714f5e7049e341432851d9975077cb37effcd276c7f816faa6f5ff708dc5e1 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.7" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ace3e11c94041b88848552ba8feb39ae4d6cad3696d439ff51445bd2882d8b8775d85a26c2c0edb9b5e38c9e6013cc11b0dea89ec8f93c7d9d7ee95e3645078c + checksum: 10c0/c8537b9f3cddc5a8d3710f6980196dc7a0f4389f8f82617312a5f7b8b15bcd8ddaeba783c687c3ac6031eb0a4ba0bc380a98da6bf7efe98e225602a98ad42a1e languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4e144d7f1c57bc63b4899dbbbdfed0880f2daa75ea9c7251c7997f106e4b390dc362175ab7830f11358cb21f6b972ca10a43a2e56cd789065f7606b082674c0c + checksum: 10c0/ef61fc5d54c9c8b075cbd9db62beaf295e38e08a1edb1882995105d3e959763be1631f7d7f7cb7461b702ebd0b4a601f2eb2cd6521acaf061310a3a3305fa756 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-for-of@npm:7.24.7" +"@babel/plugin-transform-for-of@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-for-of@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/77629b1173e55d07416f05ba7353caa09d2c2149da2ca26721ab812209b63689d1be45116b68eadc011c49ced59daf5320835b15245eb7ae93ae0c5e8277cfc0 + checksum: 10c0/08a37a1742368a422d095c998ed76f60f6bf3f9cc060033be121d803fd2dddc08fe543e48ee49c022bdc9ed80893ca79d084958d83d30684178b088774754277 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.1": - version: 7.25.1 - resolution: "@babel/plugin-transform-function-name@npm:7.25.1" +"@babel/plugin-transform-function-name@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-function-name@npm:7.25.7" dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.8" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.1" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e74912174d5e33d1418b840443c2e226a7b76cc017c1ed20ee30a566e4f1794d4a123be03180da046241576e8b692731807ba1f52608922acf1cb2cb6957593f + checksum: 10c0/ca98e1116c0ada7211ed43e4b7f21ca15f95bbbdad70f2fbe1ec2d90a97daedf9f22fcb0a25c8b164a5e394f509f2e4d1f7609d26dc938a58d37c5ee9b80088a languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" +"@babel/plugin-transform-json-strings@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/17c72cd5bf3e90e722aabd333559275f3309e3fa0b9cea8c2944ab83ae01502c71a2be05da5101edc02b3fc8df15a8dbb9b861cbfcc8a52bf5e797cf01d3a40a + checksum: 10c0/aa6e5f65c8a5f2459d7daa9b5b4ff97ff43bab21f4a8513ed84d35300b0323ec542dc101c5f11622e442dfc93b3a229c7f41ebc7645370dfec6d066bda800a0b languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/plugin-transform-literals@npm:7.25.2" +"@babel/plugin-transform-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0796883217b0885d37e7f6d350773be349e469a812b6bf11ccf862a6edf65103d3e7c849529d65381b441685c12e756751d8c2489a0fd3f8139bb5ef93185f58 + checksum: 10c0/c2c2488102f33e566f45becdcb632e53bd052ecfb2879deb07a614b3e9437e3b624c3b16d080096d50b0b622edebd03e438acbf9260bcc41167897963f64560e languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dbe882eb9053931f2ab332c50fc7c2a10ef507d6421bd9831adbb4cb7c9f8e1e5fbac4fbd2e007f6a1bf1df1843547559434012f118084dc0bf42cda3b106272 + checksum: 10c0/d610a8a2c1be83e03cce2256f29519e705dc68289c09d67f1f362d1fd80f4b36eaf2affc05710abb53a272895041e24d9e95ec73a516a23a67cb907023fbe37b languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e789ae359bdf2d20e90bedef18dfdbd965c9ebae1cee398474a0c349590fda7c8b874e1a2ceee62e47e5e6ec1730e76b0f24e502164357571854271fc12cc684 + checksum: 10c0/d6936b98ae4d3daed850dc4e064042ea4375f815219ba9d8591373bf1fba4cfdb5be42623ae8882f2d666cc34af650a4855e2a5ad89e3c235d73a6f172f9969c languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" +"@babel/plugin-transform-modules-amd@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6df7de7fce34117ca4b2fa07949b12274c03668cbfe21481c4037b6300796d50ae40f4f170527b61b70a67f26db906747797e30dbd0d9809a441b6e220b5728f + checksum: 10c0/c0bc999206c3834c090e6559a6c8a55d7672d3573104e832223ebe7df99bd1b82fc850e15ba32f512c84b0db1cdb613b66fa60abe9abb9c7e8dcbff91649b356 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.8" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-simple-access": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-simple-access": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7 + checksum: 10c0/2f1c945fc3c9b690b0ddcf2c80156b2e4fbf2cf15aac43ac8fe6e4b34125869528839a53d07c564e62e4aed394ebdc1d2c3b796b547374455522581c11b7599c languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.0" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/fca6198da71237e4bb1274b3b67a0c81d56013c9535361242b6bfa87d70a9597854aadb45d4d8203369be4a655e158be2a5d20af0040b1f8d1bfc47db3ad7b68 + checksum: 10c0/95eaea7082636710c61e49e58b3907e85ec79db4327411d3784f28592509fbe94a53cc3d20a36a1cf245efc6d3f0017eae15b45ffd645c1ab949bb4e1670e6bb languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" +"@babel/plugin-transform-modules-umd@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7791d290121db210e4338b94b4a069a1a79e4c7a8d7638d8159a97b281851bbed3048dac87a4ae718ad963005e6c14a5d28e6db2eeb2b04e031cee92fb312f85 + checksum: 10c0/8849ab04eecdb73cd37e2d7289449fa5256331832b0304c220b2a6aaa12e2d2dd87684f2813412d1fc5bdb3d6b55cc08c6386d3273fe05a65177c09bee5b6769 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/41a0b0f2d0886318237440aa3b489f6d0305361d8671121777d9ff89f9f6de9d0c02ce93625049061426c8994064ef64deae8b819d1b14c00374a6a2336fb5d9 + checksum: 10c0/eb55fec55dc930cd122911f3e4a421320fa8b1b4de85bfd7ef11b46c611ec69b0213c114a6e1c6bc224d6b954ff183a0caa7251267d5258ecc0f00d6d9ca1d52 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-new-target@npm:7.24.7" +"@babel/plugin-transform-new-target@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-new-target@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2540808a35e1a978e537334c43dab439cf24c93e7beb213a2e71902f6710e60e0184316643790c0a6644e7a8021e52f7ab8165e6b3e2d6651be07bdf517b67df + checksum: 10c0/8e5dce6d027e0f3fd394578ea1af7f515de157793a15c23a5aad7034a6d8a4005ef280238e67a232bb4dd4fafd3a264fed462deb149128ddd9ce59ff6f575cff languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7243c8ff734ed5ef759dd8768773c4b443c12e792727e759a1aec2c7fa2bfdd24f1ecb42e292a7b3d8bd3d7f7b861cf256a8eb4ba144fc9cc463892c303083d9 + checksum: 10c0/b35a96a79ef4895b00e4f758d3185cb17e4fbfada311894ad5f0988a55fc2c21820dc789b26a3cb8fbd620434faa516e52acb6e2da105c2edbd29de8b6b0facf languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e18e09ca5a6342645d00ede477731aa6e8714ff357efc9d7cda5934f1703b3b6fb7d3298dce3ce3ba53e9ff1158eab8f1aadc68874cc21a6099d33a1ca457789 + checksum: 10c0/c028ae89e6b4e1d757f8f1ebcb3b420e6559bb35002728f6f5651d5f669fbf73764adf6e3597908fa12adf8dbae683e5f74b3a7f68e8774a9663c18c0f999539 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-parameters": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9ad64bc003f583030f9da50614b485852f8edac93f8faf5d1cd855201a4852f37c5255ae4daf70dd4375bdd4874e16e39b91f680d4668ec219ba05441ce286eb + checksum: 10c0/e8b978d9d1020452da0d5d92f80fe57e302761dac20137bb8bf863478a4779fcd63d314db89e796125d9d76da2a38f64f012d6e0c4913815951b3eb3fba2feb6 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-super@npm:7.24.7" +"@babel/plugin-transform-object-super@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-object-super@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/770cebb4b4e1872c216b17069db9a13b87dfee747d359dc56d9fcdd66e7544f92dc6ab1861a4e7e0528196aaff2444e4f17dc84efd8eaf162d542b4ba0943869 + checksum: 10c0/7f2968d4da997101b63fd3b74445c9b16f56bd32cd8a0a16c368af9d3e983e7675c1b05d18601f32307cb06e7d884ee11d13ff18a1f6830c0db243a9a852afab languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1e2f10a018f7d03b3bde6c0b70d063df8d5dd5209861d4467726cf834f5e3d354e2276079dc226aa8e6ece35f5c9b264d64b8229a8bb232829c01e561bcfb07a + checksum: 10c0/bb609e5103780be0825a255ffe1fefbb5335aead88a46eecc2257053279ea2c45ff66b0ef1fb54302c8c8c57146e88e52f3ecb62b4c6f619218d7b3843b352d9 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" +"@babel/plugin-transform-optional-chaining@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4ffbe1aad7dec7c9aa2bf6ceb4b2f91f96815b2784f2879bde80e46934f59d64a12cb2c6262e40897c4754d77d2c35d8a5cfed63044fdebf94978b1ed3d14b17 + checksum: 10c0/887441ada6c2bc1b789984b7531d9bc585f335ece99642886d3d9fd8aee7e6b8d4f7ca61d76b5f23477f3aa607284d5056eadaa1eb17e7b39af6b0e834cbe878 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-parameters@npm:7.24.7" +"@babel/plugin-transform-parameters@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-parameters@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/53bf190d6926771545d5184f1f5f3f5144d0f04f170799ad46a43f683a01fab8d5fe4d2196cf246774530990c31fe1f2b9f0def39f0a5ddbb2340b924f5edf01 + checksum: 10c0/b40ba70278842ce1e800d7ab400df730994941550da547ef453780023bd61a9b8acf4b9fb8419c1b5bcbe09819a1146ff59369db11db07eb71870bef86a12422 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" +"@babel/plugin-transform-private-methods@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.4" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7abdb427c3984a2c8a2e9d806297d8509b02f78a3501b7760e544be532446e9df328b876daa8fc38718f3dce7ccc45083016ee7aeaab169b81c142bc18700794 + checksum: 10c0/92e076f63f7c4696e1321dafdd56c4212eb41784cdadba0ebc39091f959a76d357c3df61a6c668be81d6b6ad8964ee458e85752ab0c6cfbbaf2066903edda732 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c6fa7defb90b1b0ed46f24ff94ff2e77f44c1f478d1090e81712f33cf992dda5ba347016f030082a2f770138bac6f4a9c2c1565e9f767a125901c77dd9c239ba + checksum: 10c0/5ad8832ba54e2079c1f558b8680e170265e3f376424e5fbb75b17b7f08696fb0af6c96d23d92f7df3dcc559f5971a02587281fcec38a853174aa95478565f5fc languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" +"@babel/plugin-transform-property-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/52564b58f3d111dc02d241d5892a4b01512e98dfdf6ef11b0ed62f8b11b0acacccef0fc229b44114fe8d1a57a8b70780b11bdd18b807d3754a781a07d8f57433 + checksum: 10c0/6d5bccdc772207906666ad5201bd91e4e132e1d806dbcf4163a1d08e18c57cc3795578c4e10596514bcd6afaf9696f478ea4f0dea890176d93b9cb077b9e5c55 languageName: node linkType: hard @@ -1116,244 +1116,245 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" +"@babel/plugin-transform-react-display-name@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c14a07a9e75723c96f1a0a306b8a8e899ff1c6a0cc3d62bcda79bb1b54e4319127b258651c513a1a47da152cdc22e16525525a30ae5933a2980c7036fd0b4d24 + checksum: 10c0/a0c537cc7c328ed7468d3b6a37bf0d9cb15d94afcdf3f2849ce6e5a68494fc61f0fa4fc529482a6b95b00f3c5c734f310bf18085293bff40702789f06c816f36 languageName: node linkType: hard "@babel/plugin-transform-react-inline-elements@npm:^7.21.0": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-inline-elements@npm:7.24.7" + version: 7.25.7 + resolution: "@babel/plugin-transform-react-inline-elements@npm:7.25.7" dependencies: - "@babel/helper-builder-react-jsx": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-builder-react-jsx": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/affe44efc641e5dc4de077db74c80e3dee896a5dfea04491cbd8167ac40dcbb6eaa1ad0ba599e4a85071acdaa08732e7f5d9cf3236a2aa635406c232c8f08236 + checksum: 10c0/de85180c09002083cb330ef28d5b31b44e6ac6565c700b603be76e629f5a92c59ff69f79c08cc1dbd2dd1f271f44fe8d4c751deaf66c059ba721aa3cb43c881e languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" +"@babel/plugin-transform-react-jsx-development@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.7" dependencies: - "@babel/plugin-transform-react-jsx": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/fce647db50f90a5291681f0f97865d9dc76981262dff71d6d0332e724b85343de5860c26f9e9a79e448d61e1d70916b07ce91e8c7f2b80dceb4b16aee41794d8 + checksum: 10c0/a3dc14644d09a6d22875af7b5584393ab53e467e0531cd192fc6242504dacaffa421e89265ba7f84fd4edef2b7b100d2e2ebf092a4dce2b55cf9c5fe29390c18 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.24.7" +"@babel/plugin-transform-react-jsx@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/plugin-syntax-jsx": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5c46d2c1c06a30e6bde084839df9cc689bf9c9cb0292105d61c225ca731f64247990724caee7dfc7f817dc964c062e8319e7f05394209590c476b65d75373435 + checksum: 10c0/6766b0357b8bbfcb77fca5350f06cf822c89bbe75ddcaea24614601ef23957504da24e76597d743038ce8fa081373b0663c8ad0c86d7c7226e8185f0680b8b56 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/fae517d293d9c93b7b920458c3e4b91cb0400513889af41ba184a5f3acc8bfef27242cc262741bb8f87870df376f1733a0d0f52b966d342e2aaaf5607af8f73d + checksum: 10c0/d92c9b511850fb6dea71966a0d4f313d67e317db7fc3633a7ff2e27d6df2e95cbc91c4c25abdb6c8db651fcda842a0cb7433835a8a9d4a3fdc5d452068428101 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" +"@babel/plugin-transform-regenerator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d2dc2c788fdae9d97217e70d46ba8ca9db0035c398dc3e161552b0c437113719a75c04f201f9c91ddc8d28a1da60d0b0853f616dead98a396abb9c845c44892b + checksum: 10c0/7ee3a57c4050bc908ef7ac392d810826b294970a7182f4ec34a8ca93dbe36deb21bc862616d46a6f3d881d6b5749930e1679e875b638a00866d844a4250df212 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" +"@babel/plugin-transform-reserved-words@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2229de2768615e7f5dc0bbc55bc121b5678fd6d2febd46c74a58e42bb894d74cd5955c805880f4e02d0e1cf94f6886270eda7fafc1be9305a1ec3b9fd1d063f5 + checksum: 10c0/920c98130daff6c1288fb13a9a2d2e45863bba93e619cb88d90e1f5b5cb358a3ee8880a425a3adb1b4bd5dbb6bd0500eea3370fc612633045eec851b08cc586c languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-runtime@npm:7.25.4" + version: 7.25.7 + resolution: "@babel/plugin-transform-runtime@npm:7.25.7" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c08698276596d58bf49e222ead3c414c35d099a7e5a6174b11e2db9b74420e94783ada596820437622c3eccc8852c0e750ad053bd8e775f0050839479ba76e6a + checksum: 10c0/9b2514e9079361ac8e7e500ffd522dad869d61a3894302da7e29bbac80de00276c8a1b4394d1dcf0b51c57b2c854919928df9648be336139fdf1d6ecd6d1bb32 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/41b155bdbb3be66618358488bf7731b3b2e8fff2de3dbfd541847720a9debfcec14db06a117abedd03c9cd786db20a79e2a86509a4f19513f6e1b610520905cf + checksum: 10c0/4250f89a0072f0f400be7a2e3515227b8e2518737899bd57d497e5173284a0e05d812e4a3c219ffcd484e9fa9a01c19fce5acd77bbb898f4d594512c56701eb4 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-spread@npm:7.24.7" +"@babel/plugin-transform-spread@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-spread@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/facba1553035f76b0d2930d4ada89a8cd0f45b79579afd35baefbfaf12e3b86096995f4b0c402cf9ee23b3f2ea0a4460c3b1ec0c192d340962c948bb223d4e66 + checksum: 10c0/258bd1b52388cd7425d0ae25fa39538734f7540ea503a1d8a72211d33f6f214cb4e3b73d6cd03016cbcff5d41169f1e578b9ea331965ad224d223591983e90a7 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" +"@babel/plugin-transform-sticky-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5a74ed2ed0a3ab51c3d15fcaf09d9e2fe915823535c7a4d7b019813177d559b69677090e189ec3d5d08b619483eb5ad371fbcfbbff5ace2a76ba33ee566a1109 + checksum: 10c0/0e466cfc3ca1e0db4bb11eb630215b0e1f43066d7678325e5ddadcf5a118b2351a528f67205729c32ac5b78ab68ab7f40517dd33bcb1fb6b456509f5f54ce097 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" +"@babel/plugin-transform-template-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3630f966257bcace122f04d3157416a09d40768c44c3a800855da81146b009187daa21859d1c3b7d13f4e19e8888e60613964b175b2275d451200fb6d8d6cfe6 + checksum: 10c0/a3455303b6841cb536ac66d1a2d03c194b9f371519482d8d1e8edbd33bf5ca7cdd5db1586b2b0ea5f909ebf74a0eafacf0fb28d257e4905445282dcdccfa6139 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" +"@babel/plugin-transform-typeof-symbol@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2f570a4fbbdc5fd85f48165a97452826560051e3b8efb48c3bb0a0a33ee8485633439e7b71bfe3ef705583a1df43f854f49125bd759abdedc195b2cf7e60012a + checksum: 10c0/ce1a0744a900b05de1372a70508c4148f17eb941c482da26eb369b9f0347570dce45470c8a86d907bc3a0443190344da1e18489ecfecb30388ab6178e8a9916b languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-typescript@npm:7.24.7" +"@babel/plugin-transform-typescript@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-typescript@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/plugin-syntax-typescript": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/plugin-syntax-typescript": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e8dacdc153a4c4599014b66eb01b94e3dc933d58d4f0cc3039c1a8f432e77b9df14f34a61964e014b975bf466f3fefd8c4768b3e887d3da1be9dc942799bdfdf + checksum: 10c0/5fa839b9560221698edff5e00b5cccc658c7875efaa7971c66d478f5b026770f12dd47b1be024463a44f9e29b4e14e8ddddbf4a2b324b0b94f58370dd5ae7195 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8b18e2e66af33471a6971289492beff5c240e56727331db1d34c4338a6a368a82a7ed6d57ec911001b6d65643aed76531e1e7cac93265fb3fb2717f54d845e69 + checksum: 10c0/8b1f71fda0a832c6e26ba4c00f99e9033e6f9b36ced542a512921f4ad861a70e2fec2bd54a91a5ca2efa46aaa8c8893e4c602635c4ef172bd3ed6eef3178c70b languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bc57656eb94584d1b74a385d378818ac2b3fca642e3f649fead8da5fb3f9de22f8461185936915dfb33d5a9104e62e7a47828331248b09d28bb2d59e9276de3e + checksum: 10c0/b4bfcf7529138d00671bf5cdfe606603d52cfe57ec1be837da57683f404fc0b0c171834a02515eb03379e5c806121866d097b90e31cb437d21d0ea59368ad82b languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/83f72a345b751566b601dc4d07e9f2c8f1bc0e0c6f7abb56ceb3095b3c9d304de73f85f2f477a09f8cc7edd5e65afd0ff9e376cdbcbea33bc0c28f3705b38fd9 + checksum: 10c0/73ae34c02ea8b7ac7e4efa690f8c226089c074e3fef658d2a630ad898a93550d84146ce05e073c271c8b2bbba61cbbfd5a2002a7ea940dcad3274e5b5dcb6bcf languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/f65749835a98d8d6242e961f9276bdcdb09020e791d151ccc145acaca9a66f025b2c7cb761104f139180d35eb066a429596ee6edece81f5fd9244e0edb97d7ec + checksum: 10c0/39e45ae3db7adfc3457b1d6ba5608ffbace957ad019785967e5357a6639f261765bda12363f655d39265f5a2834af26327037751420191d0b73152ccc7ce3c35 languageName: node linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.25.4 - resolution: "@babel/preset-env@npm:7.25.4" - dependencies: - "@babel/compat-data": "npm:^7.25.4" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-validator-option": "npm:^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.0" + version: 7.25.7 + resolution: "@babel/preset-env@npm:7.25.7" + dependencies: + "@babel/compat-data": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.24.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" + "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" @@ -1365,64 +1366,64 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" - "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.0" - "@babel/plugin-transform-class-properties": "npm:^7.25.4" - "@babel/plugin-transform-class-static-block": "npm:^7.24.7" - "@babel/plugin-transform-classes": "npm:^7.25.4" - "@babel/plugin-transform-computed-properties": "npm:^7.24.7" - "@babel/plugin-transform-destructuring": "npm:^7.24.8" - "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.0" - "@babel/plugin-transform-dynamic-import": "npm:^7.24.7" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.24.7" - "@babel/plugin-transform-for-of": "npm:^7.24.7" - "@babel/plugin-transform-function-name": "npm:^7.25.1" - "@babel/plugin-transform-json-strings": "npm:^7.24.7" - "@babel/plugin-transform-literals": "npm:^7.25.2" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" - "@babel/plugin-transform-member-expression-literals": "npm:^7.24.7" - "@babel/plugin-transform-modules-amd": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.0" - "@babel/plugin-transform-modules-umd": "npm:^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" - "@babel/plugin-transform-new-target": "npm:^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" - "@babel/plugin-transform-object-super": "npm:^7.24.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" - "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.25.4" - "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" - "@babel/plugin-transform-property-literals": "npm:^7.24.7" - "@babel/plugin-transform-regenerator": "npm:^7.24.7" - "@babel/plugin-transform-reserved-words": "npm:^7.24.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" - "@babel/plugin-transform-spread": "npm:^7.24.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" - "@babel/plugin-transform-template-literals": "npm:^7.24.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.24.8" - "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.4" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.7" + "@babel/plugin-transform-class-properties": "npm:^7.25.7" + "@babel/plugin-transform-class-static-block": "npm:^7.25.7" + "@babel/plugin-transform-classes": "npm:^7.25.7" + "@babel/plugin-transform-computed-properties": "npm:^7.25.7" + "@babel/plugin-transform-destructuring": "npm:^7.25.7" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" + "@babel/plugin-transform-for-of": "npm:^7.25.7" + "@babel/plugin-transform-function-name": "npm:^7.25.7" + "@babel/plugin-transform-json-strings": "npm:^7.25.7" + "@babel/plugin-transform-literals": "npm:^7.25.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" + "@babel/plugin-transform-modules-amd": "npm:^7.25.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.7" + "@babel/plugin-transform-modules-umd": "npm:^7.25.7" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" + "@babel/plugin-transform-new-target": "npm:^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" + "@babel/plugin-transform-object-super": "npm:^7.25.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/plugin-transform-parameters": "npm:^7.25.7" + "@babel/plugin-transform-private-methods": "npm:^7.25.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" + "@babel/plugin-transform-property-literals": "npm:^7.25.7" + "@babel/plugin-transform-regenerator": "npm:^7.25.7" + "@babel/plugin-transform-reserved-words": "npm:^7.25.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.7" + "@babel/plugin-transform-spread": "npm:^7.25.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.7" + "@babel/plugin-transform-template-literals": "npm:^7.25.7" + "@babel/plugin-transform-typeof-symbol": "npm:^7.25.7" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.7" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.7" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.7" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" - core-js-compat: "npm:^3.37.1" + core-js-compat: "npm:^3.38.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ed210a1974b5a1e7f80a933c87253907ec869457cea900bc97892642fa9a690c47627a9bac08a7c9495deb992a2b15f308ffca2741e1876ba47172c96fa27e14 + checksum: 10c0/bf704a06a69420250c1de2b126cd5c859a851002c2fb2cce0910cd85a8e6755b9b31577021e94feb7e1e53519923726349aaf07580923928791583db61438fb8 languageName: node linkType: hard @@ -1440,40 +1441,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.22.3": - version: 7.24.7 - resolution: "@babel/preset-react@npm:7.24.7" + version: 7.25.7 + resolution: "@babel/preset-react@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-transform-react-display-name": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx-development": "npm:^7.24.7" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/plugin-transform-react-display-name": "npm:^7.25.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.7" + "@babel/plugin-transform-react-jsx-development": "npm:^7.25.7" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9658b685b25cedaadd0b65c4e663fbc7f57394b5036ddb4c99b1a75b0711fb83292c1c625d605c05b73413fc7a6dc20e532627f6a39b6dc8d4e00415479b054c + checksum: 10c0/b133b1a2f46c70a337d8b1ef442e09e3dbdaecb0d6bed8f1cb64dfddc31c16e248b017385ab909caeebd8462111c9c0e1c5409deb10f2be5cb5bcfdaa4d27718 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.24.7 - resolution: "@babel/preset-typescript@npm:7.24.7" + version: 7.25.7 + resolution: "@babel/preset-typescript@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - "@babel/plugin-syntax-jsx": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" - "@babel/plugin-transform-typescript": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/plugin-syntax-jsx": "npm:^7.25.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" + "@babel/plugin-transform-typescript": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/986bc0978eedb4da33aba8e1e13a3426dd1829515313b7e8f4ba5d8c18aff1663b468939d471814e7acf4045d326ae6cff37239878d169ac3fe53a8fde71f8ee - languageName: node - linkType: hard - -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 10c0/4f3ddd8c7c96d447e05c8304c1d5ba3a83fcabd8a716bc1091c2f31595cdd43a3a055fff7cb5d3042b8cb7d402d78820fcb4e05d896c605a7d8bcf30f2424c4a + checksum: 10c0/8dc1258e3c5230bbe42ff9811f08924509238e6bd32fa0b7b0c0a6c5e1419512a8e1f733e1b114454d367b7c164beca2cf33acf2ed9e0d99be010c1c5cdbef0c languageName: node linkType: hard @@ -1487,48 +1481,48 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.25.6 - resolution: "@babel/runtime@npm:7.25.6" + version: 7.25.7 + resolution: "@babel/runtime@npm:7.25.7" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/d6143adf5aa1ce79ed374e33fdfd74fa975055a80bc6e479672ab1eadc4e4bfd7484444e17dd063a1d180e051f3ec62b357c7a2b817e7657687b47313158c3d2 + checksum: 10c0/86b7829d2fc9343714a9afe92757cf96c4dc799006ca61d73cda62f4b9e29bfa1ce36794955bc6cb4c188f5b10db832c949339895e1bbe81a69022d9d578ce29 languageName: node linkType: hard -"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" +"@babel/template@npm:^7.25.7, @babel/template@npm:^7.3.3": + version: 7.25.7 + resolution: "@babel/template@npm:7.25.7" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b + "@babel/code-frame": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/8ae9e36e4330ee83d4832531d1d9bec7dc2ef6a2a8afa1ef1229506fd60667abcb17f306d1c3d7e582251270597022990c845d5d69e7add70a5aea66720decb9 languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/traverse@npm:7.25.4" +"@babel/traverse@npm:7, @babel/traverse@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/traverse@npm:7.25.7" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.4" - "@babel/parser": "npm:^7.25.4" - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.4" + "@babel/code-frame": "npm:^7.25.7" + "@babel/generator": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/37c9b49b277e051fe499ef5f6f217370c4f648d6370564d70b5e6beb2da75bfda6d7dab1d39504d89e9245448f8959bc1a5880d2238840cdc3979b35338ed0f5 + checksum: 10c0/75d73e52c507a7a7a4c7971d6bf4f8f26fdd094e0d3a0193d77edf6a5efa36fc3db91ec5cc48e8b94e6eb5d5ad21af0a1040e71309172851209415fd105efb1a languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.4, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.4 - resolution: "@babel/types@npm:7.25.4" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.25.7 + resolution: "@babel/types@npm:7.25.7" dependencies: - "@babel/helper-string-parser": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/helper-string-parser": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/9aa25dfcd89cc4e4dde3188091c34398a005a49e2c2b069d0367b41e1122c91e80fd92998c52a90f2fb500f7e897b6090ec8be263d9cb53d0d75c756f44419f2 + checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 languageName: node linkType: hard @@ -5687,17 +5681,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" +"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": + version: 4.24.0 + resolution: "browserslist@npm:4.24.0" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" + caniuse-lite: "npm:^1.0.30001663" + electron-to-chromium: "npm:^1.5.28" node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + checksum: 10c0/95e76ad522753c4c470427f6e3c8a4bb5478ff448841e22b3d3e53f89ecaf17b6984666d6c7e715c370f1e7fa0cf684f42e34e554236a8b2fab38ea76b9e4c52 languageName: node linkType: hard @@ -5899,10 +5893,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001651 - resolution: "caniuse-lite@npm:1.0.30001651" - checksum: 10c0/7821278952a6dbd17358e5d08083d258f092e2a530f5bc1840657cb140fbbc5ec44293bc888258c44a18a9570cde149ed05819ac8320b9710cf22f699891e6ad +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001663": + version: 1.0.30001666 + resolution: "caniuse-lite@npm:1.0.30001666" + checksum: 10c0/2d49e9be676233c24717f12aad3d01b3e5f902b457fe1deefaa8d82e64786788a8f79381ae437c61b50e15c9aea8aeb59871b1d54cb4c28b9190d53d292e2339 languageName: node linkType: hard @@ -6412,7 +6406,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": +"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1": version: 3.38.1 resolution: "core-js-compat@npm:3.38.1" dependencies: @@ -7474,10 +7468,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.7 - resolution: "electron-to-chromium@npm:1.5.7" - checksum: 10c0/be4460bbe3d2186a16d53a03da67fde6fd06ad41943553ce517a45d52e03424732a982f75528e8a2d5fb042d6afde64186aa482caec0fb925daa5a74cf5ef060 +"electron-to-chromium@npm:^1.5.28": + version: 1.5.31 + resolution: "electron-to-chromium@npm:1.5.31" + checksum: 10c0/e8aecd88c4c6d50a9d459b4b222865b855bab8f1b52e82913804e18b7884f2887bd76c61b3aa08c2ccbdcda098dd8486443f75bf770f0138f21dd9e63548fca7 languageName: node linkType: hard @@ -11190,21 +11184,12 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" +"jsesc@npm:^3.0.2, jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" bin: jsesc: bin/jsesc - checksum: 10c0/f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 languageName: node linkType: hard @@ -15042,12 +15027,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: "npm:^1.4.2" - checksum: 10c0/89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 languageName: node linkType: hard @@ -15110,28 +15095,35 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" +"regexpu-core@npm:^6.1.1": + version: 6.1.1 + resolution: "regexpu-core@npm:6.1.1" dependencies: - "@babel/regjsgen": "npm:^0.8.0" regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.1.0" - regjsparser: "npm:^0.9.1" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.11.0" unicode-match-property-ecmascript: "npm:^2.0.0" unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10c0/7945d5ab10c8bbed3ca383d4274687ea825aee4ab93a9c51c6e31e1365edd5ea807f6908f800ba017b66c462944ba68011164e7055207747ab651f8111ef3770 + checksum: 10c0/07d49697e20f9b65977535abba4858b7f5171c13f7c366be53ec1886d3d5f69f1b98cc6a6e63cf271adda077c3366a4c851c7473c28bbd69cf5a6b6b008efc3e languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.11.0": + version: 0.11.0 + resolution: "regjsparser@npm:0.11.0" dependencies: - jsesc: "npm:~0.5.0" + jsesc: "npm:~3.0.2" bin: regjsparser: bin/parser - checksum: 10c0/fe44fcf19a99fe4f92809b0b6179530e5ef313ff7f87df143b08ce9a2eb3c4b6189b43735d645be6e8f4033bfb015ed1ca54f0583bc7561bed53fd379feb8225 + checksum: 10c0/155143a8f2c95e3170df4fff10ddf3f16a351b5d2b8cbb257e9f4a50abb9a980a28af0936b5bf850fee767537ffa8eb77c6b211fe8be19834dbe584dfd950c62 languageName: node linkType: hard From fe3f5375e3c0a2f138558947db69267813c0e726 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:15:31 +0200 Subject: [PATCH 208/467] New Crowdin Translations (automated) (#32233) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 4 +- app/javascript/mastodon/locales/nl.json | 10 +- app/javascript/mastodon/locales/sc.json | 124 ++++++++++++++++++++++++ app/javascript/mastodon/locales/tr.json | 4 +- app/javascript/mastodon/locales/uk.json | 5 + config/locales/de.yml | 2 +- config/locales/sc.yml | 43 ++++++++ config/locales/tr.yml | 2 +- 8 files changed, 183 insertions(+), 11 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 6f45d4fe5329a3..0b541b2e4804f3 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -41,7 +41,7 @@ "account.go_to_profile": "Profil aufrufen", "account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden", "account.in_memoriam": "Zum Andenken.", - "account.joined_short": "Beigetreten", + "account.joined_short": "Mitglied seit", "account.languages": "Ausgewählte Sprachen ändern", "account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt", "account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.", @@ -534,7 +534,7 @@ "notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.", "notification.relationships_severance_event.learn_more": "Mehr erfahren", "notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.", - "notification.status": "{name} hat gerade etwas gepostet", + "notification.status": "{name} veröffentlichte gerade", "notification.update": "{name} bearbeitete einen Beitrag", "notification_requests.accept": "Genehmigen", "notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1c31574deaffe4..71523b37d8e73c 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -504,13 +504,13 @@ "notification.admin.report_statuses": "{name} rapporteerde {target} voor {category}", "notification.admin.report_statuses_other": "{name} rapporteerde {target}", "notification.admin.sign_up": "{name} heeft zich geregistreerd", - "notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben zich geregistreerd", + "notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben zich geregistreerd", "notification.favourite": "{name} markeerde jouw bericht als favoriet", - "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben jouw bericht als favoriet gemarkeerd", + "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht als favoriet gemarkeerd", "notification.follow": "{name} volgt jou nu", - "notification.follow.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je gevolgd", + "notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben je gevolgd", "notification.follow_request": "{name} wil jou graag volgen", - "notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben gevraagd om je te volgen", + "notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben gevraagd om je te volgen", "notification.label.mention": "Vermelding", "notification.label.private_mention": "Privébericht", "notification.label.private_reply": "Privéreactie", @@ -528,7 +528,7 @@ "notification.own_poll": "Jouw peiling is beëindigd", "notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw bericht", - "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben jouw bericht geboost", + "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht geboost", "notification.relationships_severance_event": "Verloren verbindingen met {name}", "notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.", "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt.", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index bb7d062b95e31b..227a7483a72ae4 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.unexpected.message": "Ddoe est istada una faddina.", "alert.unexpected.title": "Oh!", + "alt_text_badge.title": "Testu alternativu", "announcement.announcement": "Annùntziu", "attachments_list.unprocessed": "(non protzessadu)", "audio.hide": "Cua s'àudio", @@ -97,6 +98,8 @@ "block_modal.title": "Boles blocare s'utente?", "block_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent custa persone.", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", + "boost_modal.reblog": "Boles potentziare sa publicatzione?", + "boost_modal.undo_reblog": "Boles tzessare de potentziare sa publicatzione?", "bundle_column_error.copy_stacktrace": "Còpia s'informe de faddina", "bundle_column_error.error.body": "Sa pàgina pedida non faghiat a dda renderizare. Diat pòdere èssere pro neghe de una faddina in su còdighe nostru, o de unu problema de cumpatibilidade de su navigadore.", "bundle_column_error.error.title": "Oh, no!", @@ -104,11 +107,15 @@ "bundle_column_error.network.title": "Faddina de connessione", "bundle_column_error.retry": "Torra·bi a proare", "bundle_column_error.return": "Torra a sa pàgina printzipale", + "bundle_column_error.routing.body": "Impossìbile agatare sa pàgina rechesta. Seguru chi s'URL in sa barra de indiritzos est curretu?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Serra", "bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.", "bundle_modal_error.retry": "Torra·bi a proare", + "closed_registrations.other_server_instructions": "Dae chi Mastodon est detzentralizadu, podes creare unu contu in un'àteru serbidore e interagire cun custu.", + "closed_registrations_modal.description": "Sa creatzione de contos in {domain} no est possìbile in custu momentu, però tene in cunsideru chi non tenes bisòngiu de unu contu ispetzìficu in {domain} pro impreare Mastodon.", "closed_registrations_modal.find_another_server": "Agata un'àteru serbidore", + "closed_registrations_modal.title": "Su registru a Mastodon", "column.about": "Informatziones", "column.blocks": "Persones blocadas", "column.bookmarks": "Sinnalibros", @@ -142,6 +149,7 @@ "compose.published.open": "Aberi", "compose.saved.body": "Publicatzione sarvada.", "compose_form.direct_message_warning_learn_more": "Àteras informatziones", + "compose_form.encryption_warning": "Is publicatziones a Mastodon no sunt critografados a nodu terminale. Non cumpartzas informatziones delicadas in Mastodon.", "compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est pùblica. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.", "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.", "compose_form.lock_disclaimer.lock": "blocadu", @@ -171,15 +179,23 @@ "confirmations.discard_edit_media.confirm": "Iscarta", "confirmations.discard_edit_media.message": "Tenes modìficas non sarvadas a is descritziones o a is anteprimas de is cuntenutos, ddas boles iscartare su matessi?", "confirmations.edit.confirm": "Modìfica", + "confirmations.edit.message": "Modifichende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", + "confirmations.edit.title": "Boles subraiscrìere sa publicatzione?", "confirmations.logout.confirm": "Essi·nche", "confirmations.logout.message": "Seguru chi boles essire?", + "confirmations.logout.title": "Boles serrare sa sessione?", "confirmations.mute.confirm": "A sa muda", "confirmations.redraft.confirm": "Cantzella e torra a fàghere", "confirmations.redraft.message": "Seguru chi boles cantzellare e torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", + "confirmations.redraft.title": "Boles cantzellare e torrare a iscrìere sa publicatzione?", "confirmations.reply.confirm": "Risponde", "confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", + "confirmations.reply.title": "Boles subraiscrìere sa publicatzione?", "confirmations.unfollow.confirm": "Non sigas prus", "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?", + "confirmations.unfollow.title": "Boles tzessare de sighire s'utente?", + "content_warning.hide": "Cua sa publicatzione", + "content_warning.show": "Ammustra·dda su pròpiu", "conversation.delete": "Cantzella arresonada", "conversation.mark_as_read": "Signala comente lèghidu", "conversation.open": "Ammustra arresonada", @@ -193,7 +209,10 @@ "directory.recently_active": "Cun atividade dae pagu", "disabled_account_banner.account_settings": "Cunfiguratziones de su contu", "disabled_account_banner.text": "Su contu tuo {disabledAccount} no est ativu.", + "dismissable_banner.community_timeline": "Custas sunt is publicatziones pùblicas prus reghentes dae gente cun contu in {domain}.", "dismissable_banner.dismiss": "Iscarta", + "dismissable_banner.explore_links": "Custas sunt is istòrias de noas prus cumpartzidas in sa rete oe. Is istòrias prus noas publicadas dae gente prus diversa ant a èssere priorizadas.", + "dismissable_banner.explore_statuses": "Custas sunt publicatziones dae sa rete detzentralizada chi sunt retzende atentzione oe. Is publicatziones prus noas cun prus cumpartziduras e preferèntzias ant a èssere priorizadas.", "domain_block_modal.block": "Bloca su serbidore", "domain_block_modal.block_account_instead": "Bloca imbetzes a @{name}", "domain_block_modal.they_can_interact_with_old_posts": "Is persones de custu serbidore podent ancora interagire cun is publicatziones betzas tuas.", @@ -207,6 +226,7 @@ "domain_pill.their_handle": "S'identificadore suo:", "domain_pill.their_server": "Sa domo digitale sua, in ue istant totu is publicatziones suas.", "domain_pill.username": "Nòmine de utente", + "domain_pill.whats_in_a_handle": "Ite est un'identificadore?", "domain_pill.your_handle": "S'identificadore tuo:", "domain_pill.your_server": "Sa domo digitale tua, in ue istant totu is publicatziones tuas. Custa non t'agradat? Tràmuda serbidore in cale si siat momentu e bati·ti fintzas in fatu is sighidores tuos.", "domain_pill.your_username": "S'identificadore ùnicu tuo in custu serbidore. Si podent agatare utentes cun su matessi nòmine de utente in àteros serbidores.", @@ -254,6 +274,7 @@ "explore.trending_links": "Noas", "explore.trending_statuses": "Publicatziones", "explore.trending_tags": "Etichetas", + "filter_modal.added.context_mismatch_title": "Su cuntestu non currispondet.", "filter_modal.added.expired_title": "Filtru iscadidu.", "filter_modal.added.review_and_configure_title": "Cunfiguratziones de filtru", "filter_modal.added.settings_link": "pàgina de cunfiguratzione", @@ -277,7 +298,13 @@ "follow_suggestions.featured_longer": "Seberadu a manu dae s'iscuadra de {domain}", "follow_suggestions.friends_of_friends_longer": "Populare intre persones chi sighis", "follow_suggestions.hints.featured": "Custu profilu est istadu seberadu a manu dae s'iscuadra {domain}.", + "follow_suggestions.personalized_suggestion": "Cussìgiu personalizadu", + "follow_suggestions.popular_suggestion": "Cussìgiu populare", + "follow_suggestions.popular_suggestion_longer": "Populare a {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Profilos sìmiles a is chi as sighidu de reghente", "follow_suggestions.view_all": "Ammustra totu", + "follow_suggestions.who_to_follow": "Chie sighire", + "followed_tags": "Etichetas sighidas", "footer.about": "Informatziones", "footer.directory": "Diretòriu de profilos", "footer.get_app": "Otene s'aplicatzione", @@ -302,6 +329,11 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}} oe", "hashtag.follow": "Sighi su hashtag", "hashtag.unfollow": "Non sigas prus s'eticheta", + "hashtags.and_other": "… e {count, plural, one {un'àteru} other {àteros #}}", + "hints.profiles.posts_may_be_missing": "Podet èssere chi ammanchent tzertas publicatziones de custu profilu.", + "hints.profiles.see_more_posts": "Bide prus publicatziones a {domain}", + "hints.threads.replies_may_be_missing": "Podet èssere chi ammanchent rispostas dae àteros serbidores.", + "hints.threads.see_more": "Bide prus rispostas a {domain}", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", @@ -309,7 +341,14 @@ "home.pending_critical_update.link": "Ammustra is atualizatziones", "home.pending_critical_update.title": "Atualizatzione de seguresa crìtica a disponimentu.", "home.show_announcements": "Ammustra annùntzios", + "ignore_notifications_modal.disclaimer": "Mastodon non podet informare is utentes chi as innioradu is notìficas issoro. Inniorare notìficas no at a evitare chi s'imbient is messàgios.", + "ignore_notifications_modal.filter_instead": "Opuru filtra", + "ignore_notifications_modal.filter_to_act_users": "As a pòdere ancora atzetare, refudare o sinnalare a utentes", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrare agiudat a evitare possìbiles confusiones", "interaction_modal.description.reply": "Podes rispòndere a custa publicatzione cun unu contu de Mastodon.", + "interaction_modal.login.action": "Torra a sa pàgina printzipale", + "interaction_modal.login.prompt": "Su domìniu de su serbidore domèsticu tuo, pro esempru mastodon.social", + "interaction_modal.no_account_yet": "Non ses in Mastodon?", "interaction_modal.on_this_server": "In custu serbidore", "interaction_modal.title.follow": "Sighi a {name}", "interaction_modal.title.reply": "Risponde a sa publicatzione de {name}", @@ -353,11 +392,13 @@ "lightbox.next": "Imbeniente", "lightbox.previous": "Pretzedente", "limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.", + "link_preview.shares": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}", "lists.account.add": "Agiunghe a sa lista", "lists.account.remove": "Boga dae sa lista", "lists.delete": "Cantzella sa lista", "lists.edit": "Modìfica sa lista", "lists.edit.submit": "Muda su tìtulu", + "lists.exclusive": "Cua custas publicatziones dae sa pàgina printzipale", "lists.new.create": "Agiunghe lista", "lists.new.title_placeholder": "Tìtulu de sa lista noa", "lists.replies_policy.followed": "Cale si siat persone chi sighis", @@ -368,7 +409,20 @@ "lists.subheading": "Is listas tuas", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", "loading_indicator.label": "Carrighende…", + "media_gallery.hide": "Cua", + "moved_to_account_banner.text": "Su contu tuo {disabledAccount} est disativadu in custu momentu ca est istadu tramudadu a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Cua dae is notìficas", + "mute_modal.hide_options": "Cua is optziones", + "mute_modal.indefinite": "Fintzas a cando no apo a torrare a ativare is notìficas", + "mute_modal.show_options": "Ammustra is optziones", + "mute_modal.they_can_mention_and_follow": "Ti podent mentovare e sighire, però no ddos as a bìdere.", + "mute_modal.they_wont_know": "No ant a ischire chi ddos as postu a sa muda.", + "mute_modal.title": "Boles pònnere a custu contu a sa muda?", + "mute_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent a custa persone.", + "mute_modal.you_wont_see_posts": "At a pòdere bìdere is publicatziones tuas, però tue no as a bìdere cussas suas.", "navigation_bar.about": "Informatziones", + "navigation_bar.administration": "Amministratzione", + "navigation_bar.advanced_interface": "Aberi s'interfache web avantzada", "navigation_bar.blocks": "Persones blocadas", "navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.community_timeline": "Lìnia de tempus locale", @@ -380,10 +434,13 @@ "navigation_bar.favourites": "Preferidos", "navigation_bar.filters": "Faeddos a sa muda", "navigation_bar.follow_requests": "Rechestas de sighidura", + "navigation_bar.followed_tags": "Etichetas sighidas", "navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Essi", + "navigation_bar.moderation": "Moderatzione", "navigation_bar.mutes": "Persones a sa muda", + "navigation_bar.opened_in_classic_interface": "Publicatziones, contos e àteras pàginas ispetzìficas sunt abertas in manera predefinida in s'interfache web clàssica.", "navigation_bar.personal": "Informatziones personales", "navigation_bar.pins": "Publicatziones apicadas", "navigation_bar.preferences": "Preferèntzias", @@ -391,10 +448,24 @@ "navigation_bar.search": "Chirca", "navigation_bar.security": "Seguresa", "not_signed_in_indicator.not_signed_in": "Ti depes identificare pro atzèdere a custa resursa.", + "notification.admin.report": "{name} at sinnaladu a {target}", + "notification.admin.report_account": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target} pro {category}", + "notification.admin.report_account_other": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target}", + "notification.admin.report_statuses": "{name} at sinnaladu a {target} pro {category}", + "notification.admin.report_statuses_other": "{name} at sinnaladu a {target}", "notification.admin.sign_up": "{name} at aderidu", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} si sunt registradas", "notification.favourite": "{name} at marcadu comente a preferidu s'istadu tuo", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant marcadu sa publicatzione tua comente preferida", "notification.follow": "{name} ti sighit", + "notification.follow.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ti sighint", "notification.follow_request": "{name} at dimandadu de ti sighire", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant pedidu de ti sighire", + "notification.label.mention": "Mèntovu", + "notification.label.private_mention": "Mèntovu privadu", + "notification.label.private_reply": "Risposta privada", + "notification.label.reply": "Risposta", + "notification.mention": "Mèntovu", "notification.moderation-warning.learn_more": "Àteras informatziones", "notification.moderation_warning": "T'ant imbiadu un'avisu de moderatzione", "notification.moderation_warning.action_delete_statuses": "Unas cantas de is publicatziones tuas sunt istadas cantzelladas.", @@ -407,12 +478,30 @@ "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", "notification.reblog": "{name} at cumpartzidu sa publicatzione tua", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant potentziadu sa publicatzione tua", "notification.relationships_severance_event": "Connessiones pèrdidas cun {name}", + "notification.relationships_severance_event.account_suspension": "S'amministratzione de {from} at suspèndidu a {target}; custu bolet nàrrere chi non podes prus retzire atualizatziones dae in cue o interagire cun cussos contos.", + "notification.relationships_severance_event.domain_block": "S'amministratzione de {from} at blocadu a {target}, incluende {followersCount} sighiduras tuas e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.", "notification.relationships_severance_event.learn_more": "Àteras informatziones", + "notification.relationships_severance_event.user_domain_block": "As blocadu a {target}, bogadu a {followersCount} contos chi ti sighint e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.", "notification.status": "{name} at publicadu cosa", "notification.update": "{name} at modificadu una publicatzione", "notification_requests.accept": "Atzeta", + "notification_requests.accept_multiple": "{count, plural, one {Atzeta una rechesta…} other {Atzeta # rechestas…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Atzeta sa rechesta} other {Atzeta is rechestas}}", + "notification_requests.confirm_accept_multiple.message": "Ses atzetende {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. Seguru chi boles sighire?", + "notification_requests.confirm_accept_multiple.title": "Boles atzetare is rechestas de notìfica?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Iscarta sa rechesta} other {Iscarta is rechestas}}", + "notification_requests.confirm_dismiss_multiple.message": "Ses acanta de iscartare {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. No nche {count, plural, one {} other {}} as a pòdere prus atzèdere in manera sèmplitze. Seguru chi boles sighire?", + "notification_requests.confirm_dismiss_multiple.title": "Boles iscartare is rechestas de notìfica?", "notification_requests.dismiss": "Iscarta", + "notification_requests.dismiss_multiple": "{count, plural, one {Iscarta una rechesta…} other {Iscarta # rechestas…}}", + "notification_requests.edit_selection": "Modifica", + "notification_requests.exit_selection": "Fatu", + "notification_requests.explainer_for_limited_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu est istadu limitadu dae sa moderatzione.", + "notification_requests.explainer_for_limited_remote_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu o su serbidore suo est istadu limitadu dae sa moderatzione.", + "notification_requests.maximize": "Ismànnia", + "notification_requests.minimize_banner": "Mìnima su bànner de notìficas filtradas", "notification_requests.notifications_from": "Notìficas dae {name}", "notification_requests.title": "Notìficas filtradas", "notifications.clear": "Lìmpia notìficas", @@ -472,6 +561,11 @@ "poll_button.add_poll": "Agiunghe unu sondàgiu", "poll_button.remove_poll": "Cantzella su sondàgiu", "privacy.change": "Modìfica s'istadu de riservadesa", + "privacy.direct.long": "Totu is utentes mentovados in sa publicatzione", + "privacy.direct.short": "Persones ispetzìficas", + "privacy.private.long": "Isceti chie ti sighit", + "privacy.private.short": "Sighiduras", + "privacy.public.long": "Cale si siat persone a intro o a foras de Mastodon", "privacy.public.short": "Pùblicu", "privacy_policy.last_updated": "Ùrtima atualizatzione: {date}", "privacy_policy.title": "Polìtica de riservadesa", @@ -497,34 +591,64 @@ "report.categories.legal": "Giurìdicu", "report.categories.other": "Àteru", "report.categories.spam": "Àliga", + "report.category.subtitle": "Sèbera sa currispondèntzia prus arta", + "report.category.title": "Nara·nos ite sutzedet cun custu {type}", "report.category.title_account": "profilu", "report.category.title_status": "publicatzione", "report.close": "Fatu", + "report.comment.title": "Nch'at àteru chi depamus ischire?", "report.forward": "Torra a imbiare a {target}", "report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?", "report.mute": "A sa muda", + "report.mute_explanation": "No as a bìdere is publicatziones suas. Ti podet ancora sighire e bìdere is publicatziones, ma no at a ischire chi dd'as postu a sa muda.", "report.next": "Imbeniente", "report.placeholder": "Cummentos additzionales", "report.reasons.dislike": "Non mi praghet", "report.reasons.dislike_description": "Est una cosa chi non boles bìdere", "report.reasons.legal": "Illegale", "report.reasons.other": "Un'àtera cosa", + "report.reasons.other_description": "Su problema non currispondet a is àteras categorias", "report.reasons.spam": "Est àliga", + "report.rules.subtitle": "Seletziona totu is chi àplichent", + "report.statuses.subtitle": "Seletziona totu is chi àplichent", "report.submit": "Imbia", "report.target": "Informende de {target}", + "report.thanks.title": "Non boles bìdere custu?", + "report.thanks.title_actionable": "Gràtzias de sa sinnalatzione, dd'amus a averiguare.", "report.unfollow": "Non sigas prus a @{name}", + "report.unfollow_explanation": "Ses sighende custu contu. Si non boles bìdere is publicatziones suas in sa pàgina printzipale tua, no ddu sigas prus.", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Giurìdicu", "report_notification.categories.legal_sentence": "cuntenutu illegale", "report_notification.categories.other": "Àteru", "report_notification.categories.other_sentence": "àteru", "report_notification.categories.spam": "Àliga", + "report_notification.categories.spam_sentence": "àliga", + "report_notification.open": "Aberi una sinnalatzione", + "search.no_recent_searches": "Nissuna chirca reghente", "search.placeholder": "Chirca", + "search.quick_action.account_search": "Profilos chi currispondent cun {x}", + "search.quick_action.go_to_account": "Bae a su profilu {x}", + "search.quick_action.go_to_hashtag": "Bae a s'eticheta {x}", + "search.quick_action.open_url": "Aberi s'URL in Mastodon", + "search.quick_action.status_search": "Publicatziones chi currispondent cun {x}", + "search.search_or_paste": "Chirca o incolla un'URL", + "search_popout.full_text_search_disabled_message": "No a disponimentu a {domain}.", + "search_popout.full_text_search_logged_out_message": "Isceti a disponimentu cun sa sessione aberta.", + "search_popout.language_code": "Còdighe de limba ISO", + "search_popout.options": "Optziones de chirca", + "search_popout.quick_actions": "Atziones lestras", + "search_popout.recent": "Chircas reghentes", + "search_popout.specific_date": "data ispetzìfica", "search_popout.user": "utente", "search_results.accounts": "Profilos", "search_results.all": "Totus", "search_results.hashtags": "Etichetas", + "search_results.nothing_found": "Impossìbile agatare currispondèntzias pro custos tèrmines de chirca", + "search_results.see_all": "Bide totu", "search_results.statuses": "Publicatziones", + "search_results.title": "Chirca {q}", + "server_banner.about_active_users": "Gente chi at impreadu custu serbidore is ùrtimas 30 dies (Utentes cun Atividade a su Mese)", "server_banner.active_users": "utentes ativos", "server_banner.administered_by": "Amministradu dae:", "server_banner.server_stats": "Istatìsticas de su serbidore:", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 2d9c7321d033e0..36c0b68f00c075 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -124,7 +124,7 @@ "column.direct": "Özel değinmeler", "column.directory": "Profillere göz at", "column.domain_blocks": "Engellenen alan adları", - "column.favourites": "Favorilerin", + "column.favourites": "Gözdelerin", "column.firehose": "Anlık Akışlar", "column.follow_requests": "Takip istekleri", "column.home": "Anasayfa", @@ -812,7 +812,7 @@ "status.reblogged_by": "{name} yeniden paylaştı", "status.reblogs": "{count, plural, one {yeniden paylaşım} other {yeniden paylaşım}}", "status.reblogs.empty": "Henüz hiç kimse bu gönderiyi yeniden paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.", - "status.redraft": "Sil,Düzenle ve Yeniden paylaş", + "status.redraft": "Sil,Düzenle ve yeniden-paylaş", "status.remove_bookmark": "Yer işaretini kaldır", "status.replied_in_thread": "Akışta yanıtlandı", "status.replied_to": "{name} kullanıcısına yanıt verdi", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 1753d0bebe44df..a48b071f54f481 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -852,6 +852,11 @@ "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.audio_description": "Опишіть для людей із вадами слуху", "upload_form.description": "Опишіть для людей з вадами зору", + "upload_form.drag_and_drop.instructions": "Щоб вибрати медіавкладення, натисніть пробіл або Enter. Під час перетягування, використайте клавіші зі стрілками для переміщення вкладення в будь-якому напрямку. Натисніть пробіл або Enter знову, щоб залишити медіавкладення в новому положенні, або натисніть клавішу Escape, щоб скасувати.", + "upload_form.drag_and_drop.on_drag_cancel": "Перетягування скасовано. Медіавкладення {item} прибрано.", + "upload_form.drag_and_drop.on_drag_end": "Медіавкладення {item} прибрано.", + "upload_form.drag_and_drop.on_drag_over": "Медіавкладення {item} переміщено.", + "upload_form.drag_and_drop.on_drag_start": "Медіавкладення {item} вибрано.", "upload_form.edit": "Змінити", "upload_form.thumbnail": "Змінити мініатюру", "upload_form.video_description": "Опишіть для людей із вадами слуху або зору", diff --git a/config/locales/de.yml b/config/locales/de.yml index c82e65282ffe3e..7a8469df614887 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -79,7 +79,7 @@ de: invite_request_text: Begründung für das Beitreten invited_by: Eingeladen von ip: IP-Adresse - joined: Beigetreten + joined: Mitglied seit location: all: Alle local: Lokal diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 306e670b7182ca..9ab62cea71e56b 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -30,17 +30,25 @@ sc: created_msg: As creadu una nota de moderatzione. destroyed_msg: As cantzelladu una nota de moderatzione. accounts: + add_email_domain_block: Bloca domìniu de posta eletrònica approve: Aprova approved_msg: Sa dimanda de registru de %{username} est istada aprovada are_you_sure: Seguru? avatar: Immàgine de profilu by_domain: Domìniu change_email: + changed_msg: Indiritzu eletrònicu de su contu modificadu! current_email: Indiritzu eletrònicu atuale label: Muda s'indiritzu eletrònicu new_email: Indiritzu eletrònicu nou submit: Muda s'indiritzu eletrònicu title: Muda s'indiritzu eletrònicu de %{username} + change_role: + changed_msg: Ruolu modificadu. + edit_roles: Gesti is ruolos de utente + label: Modifica su ruolu + no_role: Nissunu ruolu + title: Modifica su ruolu de %{username} confirm: Cunfirma confirmed: Cunfirmadu confirming: Cunfirmende @@ -91,6 +99,7 @@ sc: most_recent_ip: IP prus reghente no_account_selected: Perunu contu est istadu mudadu, dae chi non nd'as seletzionadu no_limits_imposed: Sena lìmites + no_role_assigned: Nissunu ruolu assignadu not_subscribed: Sena sutiscritzione pending: De revisionare perform_full_suspension: Suspèndidu @@ -108,12 +117,19 @@ sc: removed_header_msg: S'immàgine de intestatzione de %{username} est istada bogada resend_confirmation: already_confirmed: Custa persone est giai cunfirmada + send: Torra a imbiare su ligòngiu de cunfirmatzione + success: Ligòngiu de cunfirmatzione imbiadu. reset: Reseta reset_password: Reseta sa crae resubscribe: Torra a sutascrìere + role: Ruolu search: Chirca + search_same_email_domain: Àteras persones cun su pròpiu domìniu de posta search_same_ip: Àteras persones cun sa pròpiu IP security: Seguresa + security_measures: + only_password: Crae isceti + password_and_2fa: Crae e 2FA sensitive: Sensìbile sensitized: Marcadu comente sensìbile shared_inbox_url: URL de intrada cumpartzida @@ -129,6 +145,8 @@ sc: suspension_irreversible: Is datos de custu contu sunt istados cantzellados in manera irreversìbile. Podes bogare sa suspensione a su contu pro chi si potzat impreare, ma no at a recuperare datu perunu de is chi teniat in antis. suspension_reversible_hint_html: Su contu est istadu suspèndidu, e is datos ant a èssere cantzelladu de su totu su %{date}. Finas a tando, su contu si podet ripristinare sena efetu malu perunu. Si boles cantzellare totu is datos de su contu immediatamente ddu podes fàghere inoghe in bassu. title: Contos + unblock_email: Isbloca s'indiritzu de posta eletrònica + unblocked_email_msg: Posta eletrònica de %{username} isblocada unconfirmed_email: Posta eletrònica sena cunfirmare undo_sensitized: Boga sa marcadura comente sensìbile undo_silenced: Non pòngias a sa muda @@ -143,21 +161,31 @@ sc: whitelisted: Federatzione permìtida action_logs: action_types: + approve_user: Aprova s'utente assigned_to_self_report: Assigna s'informe + change_email_user: Muda s'indiritzu eletrònicu pro s'utente + change_role_user: Muda su ruolu de s'utente confirm_user: Cunfirma s'utente create_account_warning: Crea un'avisu create_announcement: Crea un'annùntziu + create_canonical_email_block: Crea unu blocu de posta eletrònica create_custom_emoji: Crea un'emoji personalizadu create_domain_allow: Crea unu domìniu permìtidu create_domain_block: Crea unu blocu de domìniu + create_email_domain_block: Crea unu blocu de domìniu de posta eletrònica create_ip_block: Crea una règula IP + create_unavailable_domain: Crea unu domìniu no a disponimentu + create_user_role: Crea unu ruolu demote_user: Degrada s'utente destroy_announcement: Cantzella s'annùntziu + destroy_canonical_email_block: Cantzella su blocu de posta eletrònica destroy_custom_emoji: Cantzella s'emoji personalizadu destroy_domain_allow: Cantzella su domìniu permìtidu destroy_domain_block: Cantzella su blocu de domìniu + destroy_email_domain_block: Cantzella su blocu de domìniu de posta eletrònica destroy_ip_block: Cantzella sa règula IP destroy_status: Cantzella s'istadu + destroy_unavailable_domain: Cantzella su domìniu no a disponimentu disable_2fa_user: Disativa 2FA disable_custom_emoji: Disativa s'emoji personalizadu disable_user: Disativa utente @@ -165,23 +193,33 @@ sc: enable_user: Ativa utente memorialize_account: Torra in unu contu de regordu promote_user: Promove utente + reject_user: Refuda s'utente remove_avatar_user: Cantzella immàgine de profilu reopen_report: Torra a abèrrere s'informe + resend_user: Torra a imbiare messàgiu eletrònicu de cunfirmatzione reset_password_user: Reseta sa crae resolve_report: Isorve s'informe sensitive_account: Marca is cuntenutos multimediales in su contu tuo comente sensìbiles silence_account: Pone custu contu a sa muda suspend_account: Suspende custu contu unassigned_report: Boga s'assignatzione de custu informe + unblock_email_account: Isbloca s'indiritzu de posta eletrònica unsensitive_account: Boga sa marcadura "sensìbiles" a is elementos multimediales in su contu tuo unsilence_account: Boga custu contu de is contos a sa muda unsuspend_account: Boga custu contu de is contos suspèndidos update_announcement: Atualiza s'annùntziu update_custom_emoji: Atualiza s'emoji personalizadu update_domain_block: Atualiza blocu de domìniu + update_ip_block: Atualiza sa règula IP + update_report: Atualiza s'informe update_status: Atualiza s'istadu + update_user_role: Atualiza su ruolu actions: + approve_user_html: "%{name} at aprovadu su registru de %{target}" assigned_to_self_report_html: "%{name} s'est auto-assignadu s'informe %{target}" + change_email_user_html: "%{name} at mudadu s'indiritzu de posta eletrònica de s'utente %{target}" + change_role_user_html: "%{name} at mudadu su ruolu de %{target}" + confirm_user_html: "%{name} at cunfirmadu s'indiritzu de posta eletrònica de s'utente %{target}" create_account_warning_html: "%{name} at imbiadu un'avisu a %{target}" create_announcement_html: "%{name} at creadu un'annùntziu nou %{target}" create_custom_emoji_html: "%{name} at carrigadu un'emoji nou %{target}" @@ -291,6 +329,8 @@ sc: confirm_suspension: cancel: Annulla confirm: Suspende + remove_all_data: Custu at a cantzellare totu su cuntenutu, elementos multimediales e datos de profilu pro is contos de custu domìniu dae su serbidore tuo. + stop_communication: Su serbidore tuo at a tzessare sa comunicatzione cun custos serbidores. title: Cunfirma su blocu de domìniu de %{domain} created_msg: Protzessende su blocu de domìniu destroyed_msg: Su blocu de domìniu est istadu iscontzadu @@ -361,9 +401,12 @@ sc: dashboard: instance_accounts_dimension: Contos prus sighidos instance_accounts_measure: contos sarvados + instance_languages_dimension: Limbas printzipales instance_reports_measure: informes a subra de àtere + instance_statuses_measure: publicatziones sarvadas delivery: all: Totus + unavailable: No a disponimentu delivery_available: Sa cunsigna est a disponimentu empty: Perunu domìniu agatadu. known_accounts: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 738263191150de..f1e09837054afc 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,7 +1,7 @@ --- tr: about: - about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. + about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezi olmayan yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir! contact_missing: Ayarlanmadı contact_unavailable: Bulunamadı hosted_on: Mastodon %{domain} üzerinde barındırılıyor From 1db91ab8d9b26ba0103bdc51bc9c79411a3cf6dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:34:04 +0200 Subject: [PATCH 209/467] Update dependency typescript to v5.6.2 (#32165) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0a7f89990cb2c6..9aeb2b02a88541 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17382,22 +17382,22 @@ __metadata: linkType: hard "typescript@npm:5, typescript@npm:^5.0.4": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" + version: 5.6.2 + resolution: "typescript@npm:5.6.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/422be60f89e661eab29ac488c974b6cc0a660fb2228003b297c3d10c32c90f3bcffc1009b43876a082515a3c376b1eefcce823d6e78982e6878408b9a923199c + checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 languageName: node linkType: hard "typescript@patch:typescript@npm%3A5#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" + version: 5.6.2 + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/73409d7b9196a5a1217b3aaad929bf76294d3ce7d6e9766dd880ece296ee91cf7d7db6b16c6c6c630ee5096eccde726c0ef17c7dfa52b01a243e57ae1f09ef07 + checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f languageName: node linkType: hard From 52afa94f1c277f7387c5bb3d1eb85fb555126a2a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 3 Oct 2024 08:13:54 -0400 Subject: [PATCH 210/467] Use `print_table` to wrap storage output CLI (#32230) --- lib/mastodon/cli/media.rb | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 70c11ee1a15b94..37f110d898d453 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -278,14 +278,10 @@ def refresh desc 'usage', 'Calculate disk space consumed by Mastodon' def usage - say("Attachments:\t#{number_to_human_size(media_attachment_storage_size)} (#{number_to_human_size(local_media_attachment_storage_size)} local)") - say("Custom emoji:\t#{number_to_human_size(CustomEmoji.sum(:image_file_size))} (#{number_to_human_size(CustomEmoji.local.sum(:image_file_size))} local)") - say("Preview cards:\t#{number_to_human_size(PreviewCard.sum(:image_file_size))}") - say("Avatars:\t#{number_to_human_size(Account.sum(:avatar_file_size))} (#{number_to_human_size(Account.local.sum(:avatar_file_size))} local)") - say("Headers:\t#{number_to_human_size(Account.sum(:header_file_size))} (#{number_to_human_size(Account.local.sum(:header_file_size))} local)") - say("Backups:\t#{number_to_human_size(Backup.sum(:dump_file_size))}") - say("Imports:\t#{number_to_human_size(Import.sum(:data_file_size))}") - say("Settings:\t#{number_to_human_size(SiteUpload.sum(:file_file_size))}") + print_table [ + %w(Object Total Local), + *object_storage_summary, + ] end desc 'lookup URL', 'Lookup where media is displayed by passing a media URL' @@ -318,20 +314,23 @@ def lookup(url) private - def media_attachment_storage_size - MediaAttachment.sum(file_and_thumbnail_size_sql) + def object_storage_summary + [ + [:attachments, MediaAttachment.sum(combined_media_sum), MediaAttachment.where(account: Account.local).sum(combined_media_sum)], + [:custom_emoji, CustomEmoji.sum(:image_file_size), CustomEmoji.local.sum(:image_file_size)], + [:avatars, Account.sum(:avatar_file_size), Account.local.sum(:avatar_file_size)], + [:headers, Account.sum(:header_file_size), Account.local.sum(:header_file_size)], + [:preview_cards, PreviewCard.sum(:image_file_size), nil], + [:backups, Backup.sum(:dump_file_size), nil], + [:imports, Import.sum(:data_file_size), nil], + [:settings, SiteUpload.sum(:file_file_size), nil], + ].map { |label, total, local| [label.to_s.titleize, number_to_human_size(total), local.present? ? number_to_human_size(local) : nil] } end - def local_media_attachment_storage_size - MediaAttachment.where(account: Account.local).sum(file_and_thumbnail_size_sql) - end - - def file_and_thumbnail_size_sql - Arel.sql( - <<~SQL.squish - COALESCE(file_file_size, 0) + COALESCE(thumbnail_file_size, 0) - SQL - ) + def combined_media_sum + Arel.sql(<<~SQL.squish) + COALESCE(file_file_size, 0) + COALESCE(thumbnail_file_size, 0) + SQL end PRELOAD_MODEL_WHITELIST = %w( From d95f6f4410c28b2f7b9f736c9477936587bd700b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 3 Oct 2024 09:09:58 -0400 Subject: [PATCH 211/467] Extract `ExportSummary` class for account object counts (#32227) --- .../settings/exports_controller.rb | 13 ++- app/models/export.rb | 36 -------- app/presenters/export_summary.rb | 70 +++++++++++++++ app/views/settings/exports/show.html.haml | 18 ++-- spec/models/export_spec.rb | 71 --------------- spec/presenters/export_summary_spec.rb | 86 +++++++++++++++++++ 6 files changed, 177 insertions(+), 117 deletions(-) create mode 100644 app/presenters/export_summary.rb create mode 100644 spec/presenters/export_summary_spec.rb diff --git a/app/controllers/settings/exports_controller.rb b/app/controllers/settings/exports_controller.rb index 076ed5dadb178f..263d20eaeae683 100644 --- a/app/controllers/settings/exports_controller.rb +++ b/app/controllers/settings/exports_controller.rb @@ -9,7 +9,7 @@ class Settings::ExportsController < Settings::BaseController skip_before_action :require_functional! def show - @export = Export.new(current_account) + @export_summary = ExportSummary.new(preloaded_account) @backups = current_user.backups end @@ -25,4 +25,15 @@ def create redirect_to settings_export_path end + + private + + def preloaded_account + current_account.tap do |account| + ActiveRecord::Associations::Preloader.new( + records: [account], + associations: :account_stat + ).call + end + end end diff --git a/app/models/export.rb b/app/models/export.rb index 2457dcc1565ad4..6ed9f60c7c8cf4 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -55,42 +55,6 @@ def to_blocked_domains_csv end end - def total_storage - account.media_attachments.sum(:file_file_size) - end - - def total_statuses - account.statuses_count - end - - def total_bookmarks - account.bookmarks.count - end - - def total_follows - account.following_count - end - - def total_lists - account.owned_lists.count - end - - def total_followers - account.followers_count - end - - def total_blocks - account.blocking.count - end - - def total_mutes - account.muting.count - end - - def total_domain_blocks - account.domain_blocks.count - end - private def to_csv(accounts) diff --git a/app/presenters/export_summary.rb b/app/presenters/export_summary.rb new file mode 100644 index 00000000000000..8e45aadf67dd49 --- /dev/null +++ b/app/presenters/export_summary.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +class ExportSummary + attr_reader :account, :counts + + delegate( + :blocking, + :bookmarks, + :domain_blocks, + :owned_lists, + :media_attachments, + :muting, + to: :account, + prefix: true + ) + + def initialize(account) + @account = account + @counts = populate_counts + end + + def total_blocks + counts[:blocks].value + end + + def total_bookmarks + counts[:bookmarks].value + end + + def total_domain_blocks + counts[:domain_blocks].value + end + + def total_followers + account.followers_count + end + + def total_follows + account.following_count + end + + def total_lists + counts[:owned_lists].value + end + + def total_mutes + counts[:muting].value + end + + def total_statuses + account.statuses_count + end + + def total_storage + counts[:storage].value + end + + private + + def populate_counts + { + blocks: account_blocking.async_count, + bookmarks: account_bookmarks.async_count, + domain_blocks: account_domain_blocks.async_count, + owned_lists: account_owned_lists.async_count, + muting: account_muting.async_count, + storage: account_media_attachments.async_sum(:file_file_size), + } + end +end diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 61d55350c253ed..b36e395e35abe4 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -6,39 +6,39 @@ %tbody %tr %th= t('exports.storage') - %td= number_to_human_size @export.total_storage + %td= number_to_human_size @export_summary.total_storage %td %tr %th= t('accounts.posts_tab_heading') - %td= number_with_delimiter @export.total_statuses + %td= number_with_delimiter @export_summary.total_statuses %td %tr %th= t('admin.accounts.follows') - %td= number_with_delimiter @export.total_follows + %td= number_with_delimiter @export_summary.total_follows %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv) %tr %th= t('exports.lists') - %td= number_with_delimiter @export.total_lists + %td= number_with_delimiter @export_summary.total_lists %td= table_link_to 'download', t('exports.csv'), settings_exports_lists_path(format: :csv) %tr %th= t('admin.accounts.followers') - %td= number_with_delimiter @export.total_followers + %td= number_with_delimiter @export_summary.total_followers %td %tr %th= t('exports.mutes') - %td= number_with_delimiter @export.total_mutes + %td= number_with_delimiter @export_summary.total_mutes %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv) %tr %th= t('exports.blocks') - %td= number_with_delimiter @export.total_blocks + %td= number_with_delimiter @export_summary.total_blocks %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv) %tr %th= t('exports.domain_blocks') - %td= number_with_delimiter @export.total_domain_blocks + %td= number_with_delimiter @export_summary.total_domain_blocks %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv) %tr %th= t('exports.bookmarks') - %td= number_with_delimiter @export.total_bookmarks + %td= number_with_delimiter @export_summary.total_bookmarks %td= table_link_to 'download', t('exports.csv'), settings_exports_bookmarks_path(format: :csv) %hr.spacer/ diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 48e78830dd15dd..81aaf8858556fe 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -103,75 +103,4 @@ ) end end - - describe '#total_storage' do - it 'returns the total size of the media attachments' do - media_attachment = Fabricate(:media_attachment, account: account) - expect(subject.total_storage).to eq media_attachment.file_file_size || 0 - end - end - - describe '#total_statuses' do - before { Fabricate.times(2, :status, account: account) } - - it 'returns the total number of statuses' do - expect(subject.total_statuses).to eq(2) - end - end - - describe '#total_bookmarks' do - before { Fabricate.times(2, :bookmark, account: account) } - - it 'returns the total number of bookmarks' do - expect(subject.total_bookmarks).to eq(2) - end - end - - describe '#total_follows' do - before { target_accounts.each { |target_account| account.follow!(target_account) } } - - it 'returns the total number of the followed accounts' do - expect(subject.total_follows).to eq(2) - end - end - - describe '#total_lists' do - before { Fabricate.times(2, :list, account: account) } - - it 'returns the total number of lists' do - expect(subject.total_lists).to eq(2) - end - end - - describe '#total_followers' do - before { target_accounts.each { |target_account| target_account.follow!(account) } } - - it 'returns the total number of the follower accounts' do - expect(subject.total_followers).to eq(2) - end - end - - describe '#total_blocks' do - before { target_accounts.each { |target_account| account.block!(target_account) } } - - it 'returns the total number of the blocked accounts' do - expect(subject.total_blocks).to eq(2) - end - end - - describe '#total_mutes' do - before { target_accounts.each { |target_account| account.mute!(target_account) } } - - it 'returns the total number of the muted accounts' do - expect(subject.total_mutes).to eq(2) - end - end - - describe '#total_domain_blocks' do - before { Fabricate.times(2, :account_domain_block, account: account) } - - it 'returns the total number of account domain blocks' do - expect(subject.total_domain_blocks).to eq(2) - end - end end diff --git a/spec/presenters/export_summary_spec.rb b/spec/presenters/export_summary_spec.rb new file mode 100644 index 00000000000000..0ed46c857d5fee --- /dev/null +++ b/spec/presenters/export_summary_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ExportSummary do + subject { described_class.new(account) } + + let(:account) { Fabricate(:account) } + let(:target_accounts) do + [ + Fabricate(:account), + Fabricate(:account, username: 'one', domain: 'local.host'), + ] + end + + describe '#total_storage' do + it 'returns the total size of the media attachments' do + media_attachment = Fabricate(:media_attachment, account: account) + expect(subject.total_storage).to eq media_attachment.file_file_size || 0 + end + end + + describe '#total_statuses' do + before { Fabricate.times(2, :status, account: account) } + + it 'returns the total number of statuses' do + expect(subject.total_statuses).to eq(2) + end + end + + describe '#total_bookmarks' do + before { Fabricate.times(2, :bookmark, account: account) } + + it 'returns the total number of bookmarks' do + expect(subject.total_bookmarks).to eq(2) + end + end + + describe '#total_follows' do + before { target_accounts.each { |target_account| account.follow!(target_account) } } + + it 'returns the total number of the followed accounts' do + expect(subject.total_follows).to eq(2) + end + end + + describe '#total_lists' do + before { Fabricate.times(2, :list, account: account) } + + it 'returns the total number of lists' do + expect(subject.total_lists).to eq(2) + end + end + + describe '#total_followers' do + before { target_accounts.each { |target_account| target_account.follow!(account) } } + + it 'returns the total number of the follower accounts' do + expect(subject.total_followers).to eq(2) + end + end + + describe '#total_blocks' do + before { target_accounts.each { |target_account| account.block!(target_account) } } + + it 'returns the total number of the blocked accounts' do + expect(subject.total_blocks).to eq(2) + end + end + + describe '#total_mutes' do + before { target_accounts.each { |target_account| account.mute!(target_account) } } + + it 'returns the total number of the muted accounts' do + expect(subject.total_mutes).to eq(2) + end + end + + describe '#total_domain_blocks' do + before { Fabricate.times(2, :account_domain_block, account: account) } + + it 'returns the total number of account domain blocks' do + expect(subject.total_domain_blocks).to eq(2) + end + end +end From cc8d723e7111b7e2e3d6685e0632c38813d27df0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 3 Oct 2024 09:10:27 -0400 Subject: [PATCH 212/467] Register an XML encoder for response tests (#32220) --- spec/requests/well_known/host_meta_spec.rb | 87 +++++++++++++--------- spec/support/response_encoders.rb | 4 + 2 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 spec/support/response_encoders.rb diff --git a/spec/requests/well_known/host_meta_spec.rb b/spec/requests/well_known/host_meta_spec.rb index 726911dda1964f..8d8e38f5217243 100644 --- a/spec/requests/well_known/host_meta_spec.rb +++ b/spec/requests/well_known/host_meta_spec.rb @@ -3,45 +3,62 @@ require 'rails_helper' RSpec.describe 'The /.well-known/host-meta request' do - it 'returns http success with valid XML response' do - get '/.well-known/host-meta' - - expect(response) - .to have_http_status(200) - .and have_attributes( - media_type: 'application/xrd+xml' - ) - - doc = Nokogiri::XML(response.parsed_body) - expect(doc.at_xpath('/xrd:XRD/xrd:Link[@rel="lrdd"]/@template', 'xrd' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0').value) - .to eq 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}' + context 'without extension format or accept header' do + it 'returns http success with expected XML' do + get '/.well-known/host-meta' + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/xrd+xml' + ) + + expect(xrd_link_template_value) + .to eq 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}' + end + + def xrd_link_template_value + response + .parsed_body + .at_xpath('/xrd:XRD/xrd:Link[@rel="lrdd"]/@template', 'xrd' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0') + .value + end end - it 'returns http success with valid JSON response with .json extension' do - get '/.well-known/host-meta.json' - - expect(response) - .to have_http_status(200) - .and have_attributes( - media_type: 'application/json' - ) - - expect(response.parsed_body) - .to include( - links: [ - 'rel' => 'lrdd', - 'template' => 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}', - ] - ) + context 'with a .json format extension' do + it 'returns http success with expected JSON' do + get '/.well-known/host-meta.json' + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) + expect(response.parsed_body) + .to include(expected_json_template) + end end - it 'returns http success with valid JSON response with Accept header' do - get '/.well-known/host-meta', headers: { 'Accept' => 'application/json' } + context 'with a JSON `Accept` header' do + it 'returns http success with expected JSON' do + get '/.well-known/host-meta', headers: { 'Accept' => 'application/json' } + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) + expect(response.parsed_body) + .to include(expected_json_template) + end + end - expect(response) - .to have_http_status(200) - .and have_attributes( - media_type: 'application/json' - ) + def expected_json_template + { + links: [ + 'rel' => 'lrdd', + 'template' => 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}', + ], + } end end diff --git a/spec/support/response_encoders.rb b/spec/support/response_encoders.rb new file mode 100644 index 00000000000000..548dba7132486f --- /dev/null +++ b/spec/support/response_encoders.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +ActionDispatch::IntegrationTest + .register_encoder :xml, response_parser: ->(body) { Nokogiri::XML(body) } From 4c0e44ebbe244b32117ef0e2624ca3e7087c34ad Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 3 Oct 2024 18:12:15 +0200 Subject: [PATCH 213/467] Fix recently-broken admin interface buttons (#32240) --- app/javascript/styles/mastodon/forms.scss | 4 ---- app/views/admin/accounts/_buttons.html.haml | 20 +++++++++---------- app/views/admin/accounts/show.html.haml | 2 +- app/views/admin/instances/show.html.haml | 12 +++++------ app/views/admin/invites/index.html.haml | 2 +- app/views/admin/reports/_actions.html.haml | 2 +- app/views/admin/reports/show.html.haml | 4 ++-- app/views/disputes/strikes/show.html.haml | 4 ++-- app/views/settings/exports/show.html.haml | 2 +- .../otp_authentication/show.html.haml | 2 +- .../index.html.haml | 4 ++-- 11 files changed, 27 insertions(+), 31 deletions(-) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 4f974ea585ee5a..957a28352267e4 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -19,10 +19,6 @@ code { margin-bottom: 24px; } -form.button_to { - display: inline-block; -} - .fade-out-top { position: relative; overflow: hidden; diff --git a/app/views/admin/accounts/_buttons.html.haml b/app/views/admin/accounts/_buttons.html.haml index eb1a7c3a4fe3d2..2aaca8962c10e0 100644 --- a/app/views/admin/accounts/_buttons.html.haml +++ b/app/views/admin/accounts/_buttons.html.haml @@ -4,8 +4,8 @@ %p.muted-hint= deletion_request.present? ? t('admin.accounts.remote_suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.remote_suspension_irreversible') - else %p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible') - = button_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), class: :button if can?(:unsuspend, account) - = button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button if can?(:redownload, account) && account.suspension_origin_remote? + = link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account) + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote? - if deletion_request.present? && can?(:destroy, account) = link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } - else @@ -14,28 +14,28 @@ - if account.local? && account.user_approved? = link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account) - if account.user_disabled? - = button_to t('admin.accounts.enable'), enable_admin_account_path(account.id), class: :button if can?(:enable, account.user) + = link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user) - elsif can?(:disable, account.user) = link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' - if account.sensitized? - = button_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), class: :button if can?(:unsensitive, account) + = link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account) - elsif !account.local? || account.user_approved? = link_to t('admin.accounts.sensitive'), new_admin_account_action_path(account.id, type: 'sensitive'), class: 'button' if can?(:sensitive, account) - if account.silenced? - = button_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), class: :button if can?(:unsilence, account) + = link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsilence, account) - elsif !account.local? || account.user_approved? = link_to t('admin.accounts.silence'), new_admin_account_action_path(account.id, type: 'silence'), class: 'button' if can?(:silence, account) - if account.local? - if account.user_pending? - = button_to t('admin.accounts.approve'), approve_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: :button if can?(:approve, account.user) - = button_to t('admin.accounts.reject'), reject_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) + = link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user) + = link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user) - if !account.user_confirmed? && can?(:confirm, account.user) - = button_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), class: :button + = link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' - if (!account.local? || account.user_approved?) && can?(:suspend, account) = link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' %div - if account.local? - if !account.memorial? && account.user_approved? && can?(:memorialize, account) - = button_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + = link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' - elsif can?(:redownload, account) - = button_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), class: :button + = link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 2d9e30e368054c..f148b9a0822193 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -30,7 +30,7 @@ = render 'admin/accounts/counters', account: @account - if @account.local? && @account.user.nil? - = button_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), class: :button if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) + = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) - else .table-wrapper %table.table.inline-table diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index dd4c50549cdb31..812a9c8870b0eb 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -21,7 +21,7 @@ - if @instance.domain_allow = link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@instance.domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } - else - = button_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: :button + = link_to t('admin.domain_allows.add_new'), admin_domain_allows_path(domain_allow: { domain: @instance.domain }), class: 'button', method: :post - else %p= t('admin.instances.content_policies.description_html') @@ -40,7 +40,7 @@ %td= @instance.domain_block.policies.map { |policy| t(policy, scope: 'admin.instances.content_policies.policies') }.join(' · ') = link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@instance.domain_block), class: 'button' - = button_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: :button, data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } + = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@instance.domain_block), class: 'button', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button' @@ -70,16 +70,16 @@ - if @instance.unavailable? %span.negative-hint = t('admin.instances.availability.failure_threshold_reached', date: l(@instance.unavailable_domain.created_at.to_date)) - = button_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } + = link_to t('admin.instances.delivery.restart'), restart_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } - elsif @instance.exhausted_deliveries_days.empty? %span.positive-hint = t('admin.instances.availability.no_failures_recorded') - = button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } + = link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } - else %span.negative-hint = t('admin.instances.availability.failures_recorded', count: @instance.delivery_failure_tracker.days) - %span= button_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } unless @instance.exhausted_deliveries_days.empty? - %span= button_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure') } + %span= link_to t('admin.instances.delivery.clear'), clear_delivery_errors_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } unless @instance.exhausted_deliveries_days.empty? + %span= link_to t('admin.instances.delivery.stop'), stop_delivery_admin_instance_path(@instance), data: { confirm: t('admin.accounts.are_you_sure'), method: :post } - if @instance.purgeable? %p= t('admin.instances.purge_description_html') diff --git a/app/views/admin/invites/index.html.haml b/app/views/admin/invites/index.html.haml index bbccca31470e72..964deaba8f3da1 100644 --- a/app/views/admin/invites/index.html.haml +++ b/app/views/admin/invites/index.html.haml @@ -34,4 +34,4 @@ = paginate @invites - if policy(:invite).deactivate_all? - = button_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, data: { confirm: t('admin.accounts.are_you_sure') }, class: :button + = link_to t('admin.invites.deactivate_all'), deactivate_all_admin_invites_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' diff --git a/app/views/admin/reports/_actions.html.haml b/app/views/admin/reports/_actions.html.haml index c25f45e169fd42..ef016e949bddf0 100644 --- a/app/views/admin/reports/_actions.html.haml +++ b/app/views/admin/reports/_actions.html.haml @@ -2,7 +2,7 @@ .report-actions .report-actions__item .report-actions__item__button - = button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), class: :button + = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(report), method: :post, class: 'button' .report-actions__item__description = t('admin.reports.actions.resolve_description_html') - if statuses.any? { |status| (status.with_media? || status.with_preview_card?) && !status.discarded? } diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index 32b6b3be8d7b8e..69e9c02921ea51 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -3,9 +3,9 @@ - content_for :heading_actions do - if @report.unresolved? - = button_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), class: :button + = link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button' - else - = button_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), class: :button + = link_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), method: :post, class: 'button' - unless @report.account.local? || @report.target_account.local? .flash-message= t('admin.reports.forwarded_replies_explanation') diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 1d71e0ddd1cac9..150dc06759188d 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -3,8 +3,8 @@ - content_for :heading_actions do - if @appeal.persisted? - = button_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), class: :button if can?(:approve, @appeal) - = button_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), class: 'button button--destructive' if can?(:reject, @appeal) + = link_to t('disputes.strikes.approve_appeal'), approve_admin_disputes_appeal_path(@appeal), method: :post, class: 'button' if can?(:approve, @appeal) + = link_to t('disputes.strikes.reject_appeal'), reject_admin_disputes_appeal_path(@appeal), method: :post, class: 'button button--destructive' if can?(:reject, @appeal) - if @strike.overruled? %p.hint diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index b36e395e35abe4..5a151be73becce 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -46,7 +46,7 @@ %p.muted-hint= t('exports.archive_takeout.hint_html') - if policy(:backup).create? - %p= button_to t('exports.archive_takeout.request'), settings_export_path, class: :button + %p= link_to t('exports.archive_takeout.request'), settings_export_path, class: 'button', method: :post - unless @backups.empty? %hr.spacer/ diff --git a/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml b/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml index 01f385dbea6431..d069ba12a96bc1 100644 --- a/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml +++ b/app/views/settings/two_factor_authentication/otp_authentication/show.html.haml @@ -6,4 +6,4 @@ %hr.spacer/ - = button_to t('otp_authentication.setup'), settings_otp_authentication_path, class: 'block-button' + = link_to t('otp_authentication.setup'), settings_otp_authentication_path, data: { method: :post }, class: 'block-button' diff --git a/app/views/settings/two_factor_authentication_methods/index.html.haml b/app/views/settings/two_factor_authentication_methods/index.html.haml index e3a211a3d7b915..8b670283b9e089 100644 --- a/app/views/settings/two_factor_authentication_methods/index.html.haml +++ b/app/views/settings/two_factor_authentication_methods/index.html.haml @@ -2,7 +2,7 @@ = t('settings.two_factor_authentication') - content_for :heading_actions do - = button_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive' + = link_to t('two_factor_authentication.disable'), disable_settings_two_factor_authentication_methods_path, class: 'button button--destructive', method: :post %p.hint %span.positive-hint @@ -38,4 +38,4 @@ %hr.spacer/ .simple_form - = button_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, class: 'block-button' + = link_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, data: { method: :post }, class: 'block-button' From aba888c4a6c3be008bb708c0871f145cb0356052 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:18:38 +0200 Subject: [PATCH 214/467] Update dependency ffmpeg to v7.1 (#32239) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0452e5d0621c82..a5e35025ae2f6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -214,7 +214,7 @@ FROM build AS ffmpeg # ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"] # renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg -ARG FFMPEG_VERSION=7.0.2 +ARG FFMPEG_VERSION=7.1 # ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"] ARG FFMPEG_URL=https://ffmpeg.org/releases From 1b247a1dc21bbaf20bd03be073f65e8dfc286dba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:29:53 +0200 Subject: [PATCH 215/467] New Crowdin Translations (automated) (#32249) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/kab.json | 8 +++++--- app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/sk.json | 3 ++- app/javascript/mastodon/locales/sq.json | 5 +++++ config/locales/ca.yml | 6 ++++++ config/locales/lv.yml | 7 +++++++ config/locales/simple_form.lv.yml | 1 + config/locales/sk.yml | 6 +++--- 8 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 07236bb73ecd83..35e9be816e3a64 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -278,6 +278,8 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa", "hashtag.follow": "Ḍfeṛ ahacṭag", "hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}", + "hints.threads.replies_may_be_missing": "Tiririyin d-yusan deg iqeddacen nniḍen, yezmer ur d-ddant ara.", + "hints.threads.see_more": "Wali ugar n tririt deg {domain}", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", @@ -585,7 +587,7 @@ "status.bookmark": "Creḍ", "status.cancel_reblog_private": "Sefsex beṭṭu", "status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen", - "status.continued_thread": "Asentel yettkemmil", + "status.continued_thread": "Asqerdec yettkemmil", "status.copy": "Nɣel assaɣ ɣer tasuffeɣt", "status.delete": "Kkes", "status.direct": "Bder-d @{name} weḥd-s", @@ -617,10 +619,10 @@ "status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.", "status.redraft": "Kkes tɛiwdeḍ tira", "status.remove_bookmark": "Kkes tacreḍt", - "status.replied_in_thread": "Y·t·erra-d deg usentel", + "status.replied_in_thread": "Y·t·erra-d deg usqerdec", "status.replied_to": "Y·terra-yas i {name}", "status.reply": "Err", - "status.replyAll": "Err i lxiḍ", + "status.replyAll": "Err i wesqerdec", "status.report": "Cetki ɣef @{name}", "status.sensitive_warning": "Agbur amḥulfu", "status.share": "Bḍu", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 2054dfc0ff7ff1..e5e7dc2c17ff1e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -317,7 +317,7 @@ "follow_suggestions.curated_suggestion": "스태프의 추천", "follow_suggestions.dismiss": "다시 보지 않기", "follow_suggestions.featured_longer": "{domain} 팀이 손수 고름", - "follow_suggestions.friends_of_friends_longer": "내가 팔로우 하는 사람들 사이에서 인기", + "follow_suggestions.friends_of_friends_longer": "내가 팔로우한 사람들 사이에서 인기", "follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.", "follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.", "follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index ddf341584c0d85..da3b1eaefd5b32 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -33,7 +33,7 @@ "account.follow": "Sledovať", "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", - "account.followers.empty": "Tento účet ešte nikto nesleduje.", + "account.followers.empty": "Ešte nikto nesleduje tohto užívateľa.", "account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}", "account.following": "Sledovaný účet", "account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}", @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Priveľa žiadostí", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alternatívny popis", "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skryť zvuk", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 084ac9945fae18..15101be4718b3f 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -852,6 +852,11 @@ "upload_error.poll": "Me pyetësorët s’lejohet ngarkim kartelash.", "upload_form.audio_description": "Përshkruajeni për persona me dëgjim të kufizuar", "upload_form.description": "Përshkruajeni për persona me probleme shikimi", + "upload_form.drag_and_drop.instructions": "Që të merrni një bashkëngjitje media, shtypni tastin Space ose Enter. Teksa bëhet tërheqje, përdorni tastet shigjetë për ta shpënë bashkëngjitjen media në cilëndo drejtori që doni. Shtypni sërish Space ose Enter që të lihet bashkëngjitja media në pozicionin e vet të ri, ose shtypni Esc, që të anulohet veprimi.", + "upload_form.drag_and_drop.on_drag_cancel": "Tërheqja u anulua. Bashkëngjitja media {item} u la.", + "upload_form.drag_and_drop.on_drag_end": "Bashkëngjitja media {item} u la.", + "upload_form.drag_and_drop.on_drag_over": "Bashkëngjitja media {item} u lëviz.", + "upload_form.drag_and_drop.on_drag_start": "U mor bashkëngjitja media {item}.", "upload_form.edit": "Përpunoni", "upload_form.thumbnail": "Ndryshoni miniaturën", "upload_form.video_description": "Përshkruajeni për persona me dëgjim të kufizuar ose probleme shikimi", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 965f354a35f82c..ced8de4ef28a76 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -446,6 +446,7 @@ ca: title: Blocar el nou domini de correu-e no_email_domain_block_selected: No s'han canviat els bloqueigs de domini perquè no se n'ha seleccionat cap not_permitted: No permés + resolved_dns_records_hint_html: El nom del domini resol als següents dominis MX, que són els responsables finals per a acceptar els correus. Blocar un domini MX blocarà els registres des de qualsevol adreça de correu que utilitzi el mateix domini MX, encara que el nom visible sigui diferent. Vigileu de no blocar els grans proveïdors de correu. resolved_through_html: Resolt mitjançant %{domain} title: Dominis de correu-e blocats export_domain_allows: @@ -800,6 +801,7 @@ ca: destroyed_msg: La càrrega al lloc s'ha suprimit correctament! software_updates: critical_update: Crítica - si us plau, actualitza ràpidament + description: Es recomana de mantenir actualizada la instal·lació de Mastodon per a beneficiar-se de les darreres correccions i característiques. A més, de vegades és fonamental actualitzar-la per a evitar problemes de seguretat. Per això Mastodon comprova si hi ha actualitzacions cada 30 minuts i us notificarà d'acord amb les preferències de notificacions de correu electrònic. documentation_link: Més informació release_notes: Notes de llançament title: Actualitzacions disponibles @@ -1155,6 +1157,7 @@ ca: account_status: Estat del compte confirming: Esperant que es completi la confirmació del correu-e. functional: El teu compte està completament operatiu. + pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan s'aprovi. redirecting_to: El teu compte és inactiu perquè actualment està redirigint a %{acct}. self_destruct: Com que %{domain} tanca, només tindreu accés limitat al vostre compte. view_strikes: Veure accions del passat contra el teu compte @@ -1202,6 +1205,9 @@ ca: before: 'Abans de procedir, llegiu amb cura aquestes notes:' caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir data_removal: Els teus tuts i altres dades seran permanentment eliminades + email_change_html: Podeu canviar l'adreça de correu sense eliminar el vostre compte + email_contact_html: Si encara no arriba, podeu enviar un correu-e a %{email} per a demanar ajuda + email_reconfirmation_html: Si no rebeu el correu electrònic de confirmació , podeu tornar-lo a demanar irreversible: No seràs capaç de restaurar o reactivar el teu compte more_details_html: Per a més detalls, llegeix la política de privadesa. username_available: El teu nom d'usuari esdevindrà altre cop disponible diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 16844a95c2bd4c..2cc8ff6a497b72 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -34,6 +34,7 @@ lv: created_msg: Moderācijas piezīme ir veiksmīgi izveidota! destroyed_msg: Moderācijas piezīme ir veiksmīgi iznīcināta! accounts: + add_email_domain_block: Liegt e-pasta domēnu approve: Apstiprināt approved_msg: Veiksmīgi apstiprināts %{username} reģistrēšanās pieteikums are_you_sure: Vai esi pārliecināts? @@ -61,6 +62,7 @@ lv: demote: Pazemināt destroyed_msg: Lietotāja %{username} dati tagad ievietoti rindā, lai tos nekavējoties izdzēstu disable: Iesaldēt + disable_sign_in_token_auth: Atspējot autentificēšanos ar e-pasta pilnvaru disable_two_factor_authentication: Atspējot 2FA disabled: Iesaldēts display_name: Parādāmais vārds @@ -69,6 +71,7 @@ lv: email: E-pasts email_status: E-pasta statuss enable: Atsaldēt + enable_sign_in_token_auth: Iespējot autentificēšanos ar e-pasta pilnvaru enabled: Iespējots enabled_msg: Veiksmīgi atsaldēts %{username} konts followers: Sekotāji @@ -180,17 +183,21 @@ lv: confirm_user: Apstiprināt lietotāju create_account_warning: Izveidot Brīdinājumu create_announcement: Izveidot Paziņojumu + create_canonical_email_block: Izveidot e-pasta liegumu create_custom_emoji: Izveidot pielāgotu emocijzīmi create_domain_allow: Izveidot Domēna Atļauju create_domain_block: Izveidot Domēna Bloku + create_email_domain_block: Izveidot e-pasta domēna liegumu create_ip_block: Izveidot IP noteikumu create_unavailable_domain: Izveidot Nepieejamu Domēnu create_user_role: Izveidot lomu demote_user: Pazemināt Lietotāju destroy_announcement: Dzēst Paziņojumu + destroy_canonical_email_block: Izdzēst e-pasta liegumu destroy_custom_emoji: Dzēst pielāgoto emocijzīmi destroy_domain_allow: Dzēst Domēna Atļauju destroy_domain_block: Dzēst Domēna Bloku + destroy_email_domain_block: Izdzēst e-pasta domēna liegumu destroy_instance: Attīrīt domēnu destroy_ip_block: Dzēst IP noteikumu destroy_status: Izdzēst Rakstu diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 9cc32457f7465f..523e9a5fccd3ad 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -86,6 +86,7 @@ lv: custom_css: Vari lietot pielāgotus stilus Mastodon tīmekļa versijā. favicon: WEBP, PNG, GIF vai JPG. Aizstāj noklusējuma Mastodon favikonu ar pielāgotu. mascot: Ignorē ilustrāciju uzlabotajā tīmekļa saskarnē. + media_cache_retention_period: Informācijas nesēju datnes no ierakstiem, kurus ir veikuši attālie lietotāji, tiek kešoti šajā serverī. Kad ir iestatīta apstiprinoša vērtība, informācijas nesēji tiks izdzēsti pēc norādītā dienu skaita. Ja informācijas nesēju dati tiks pieprasīti pēc tam, kad tie tika izdzēsti, tie tiks atkārtoti lejupielādēti, ja avota saturs joprojām būs pieejams. Saišu priekšskatījuma karšu vaicājumu biežuma ierobežojumu dēļ ir ieteicams iestatīt šo vērtību vismaz 14 dienas vai saišu priekšskatījuma kartes netiks atjauninātas pēc pieprasījuma pirms tā laika. peers_api_enabled: Domēna vārdu saraksts, ar kuriem šis serveris ir saskāries fediversā. Šeit nav iekļauti dati par to, vai tu veic federāciju ar noteiktu serveri, tikai tavs serveris par to zina. To izmanto dienesti, kas apkopo statistiku par federāciju vispārīgā nozīmē. profile_directory: Profilu direktorijā ir uzskaitīti visi lietotāji, kuri ir izvēlējušies būt atklājami. require_invite_text: 'Ja pierakstīšanai nepieciešama manuāla apstiprināšana, izdari tā, lai teksta: “Kāpēc vēlaties pievienoties?” ievade ir obligāta, nevis opcionāla' diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8076682ed46e12..399ecc061af0db 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -8,10 +8,10 @@ sk: title: Ohľadom accounts: followers: - few: Sledovateľov + few: Sledujúcich many: Sledovateľov one: Sledujúci - other: Sledovatelia + other: Sledujúci following: Nasledujem instance_actor_flash: Toto konto je virtuálny aktér, ktorý predstavuje samotný server, a nie konkrétneho používateľa. Používa sa na účely federácie a nemal by byť pozastavený. last_active: naposledy aktívny @@ -1167,7 +1167,7 @@ sk: dormant: Spiace follow_failure: Nemožno nasledovať niektoré z vybraných účtov. follow_selected_followers: Následuj označených sledovatelov - followers: Následovatelia + followers: Sledovatelia following: Nasledovaní invited: Pozvaný/á last_active: Naposledy aktívny From 12a8ac1f8514f002a9d2c830e8981fde80b1cba9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:57:41 +0200 Subject: [PATCH 216/467] Update dependency node to 20.18 (#32244) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 65da8ce3917325..10fef252a9f178 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.17 +20.18 From 63a959099b854af62b88d6097895d5a7c1443cb3 Mon Sep 17 00:00:00 2001 From: forsamori Date: Fri, 4 Oct 2024 09:02:14 +0100 Subject: [PATCH 217/467] Add margin-bottom to error.dialog to reduce whitespace (#25708) Co-authored-by: Claire --- app/javascript/styles/mastodon/basics.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index 1f961cb9e1279d..1a74d8d52d3c24 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -141,6 +141,7 @@ body { width: 100%; height: auto; margin-top: -120px; + margin-bottom: -45px; } } From 160917e71814168ce3aac776907dbe23a8c1c178 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Fri, 4 Oct 2024 09:19:01 +0100 Subject: [PATCH 218/467] Pluralize csv imports (#27094) Co-authored-by: Claire --- app/views/settings/imports/show.html.haml | 4 +- config/i18n-tasks.yml | 4 +- config/locales/en.yml | 48 +++++++++++++++++------ 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/app/views/settings/imports/show.html.haml b/app/views/settings/imports/show.html.haml index 4d50049d3d3da5..dd18ac2168c8c7 100644 --- a/app/views/settings/imports/show.html.haml +++ b/app/views/settings/imports/show.html.haml @@ -5,9 +5,9 @@ .flash-message.warning= t('imports.mismatched_types_warning') - if @bulk_import.overwrite? - %p.hint= t("imports.overwrite_preambles.#{@bulk_import.type}_html", filename: @bulk_import.original_filename, total_items: @bulk_import.total_items) + %p.hint= t("imports.overwrite_preambles.#{@bulk_import.type}_html", filename: @bulk_import.original_filename, count: @bulk_import.total_items) - else - %p.hint= t("imports.preambles.#{@bulk_import.type}_html", filename: @bulk_import.original_filename, total_items: @bulk_import.total_items) + %p.hint= t("imports.preambles.#{@bulk_import.type}_html", filename: @bulk_import.original_filename, count: @bulk_import.total_items) .simple_form .actions diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index 8463d4297d5853..fc043c4223efa7 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -66,8 +66,8 @@ ignore_unused: - 'admin_mailer.*.subject' - 'user_mailer.*.subject' - 'notification_mailer.*' - - 'imports.overwrite_preambles.{following,blocking,muting,domain_blocking,bookmarks,lists}_html' - - 'imports.preambles.{following,blocking,muting,domain_blocking,bookmarks,lists}_html' + - 'imports.overwrite_preambles.{following,blocking,muting,domain_blocking,bookmarks,lists}_html.*' + - 'imports.preambles.{following,blocking,muting,domain_blocking,bookmarks,lists}_html.*' - 'mail_subscriptions.unsubscribe.emails.*' - 'preferences.other' # some locales are missing other keys, therefore leading i18n-tasks to detect `preferences` as plural and not finding use - 'edit_profile.other' # some locales are missing other keys, therefore leading i18n-tasks to detect `preferences` as plural and not finding use diff --git a/config/locales/en.yml b/config/locales/en.yml index bf45dff33af855..42327ae183af0a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1366,19 +1366,43 @@ en: overwrite: Overwrite overwrite_long: Replace current records with the new ones overwrite_preambles: - blocking_html: You are about to replace your block list with up to %{total_items} accounts from %{filename}. - bookmarks_html: You are about to replace your bookmarks with up to %{total_items} posts from %{filename}. - domain_blocking_html: You are about to replace your domain block list with up to %{total_items} domains from %{filename}. - following_html: You are about to follow up to %{total_items} accounts from %{filename} and stop following anyone else. - lists_html: You are about to replace your lists with contents of %{filename}. Up to %{total_items} accounts will be added to new lists. - muting_html: You are about to replace your list of muted accounts with up to %{total_items} accounts from %{filename}. + blocking_html: + one: You are about to replace your block list with up to %{count} account from %{filename}. + other: You are about to replace your block list with up to %{count} accounts from %{filename}. + bookmarks_html: + one: You are about to replace your bookmarks with up to %{count} post from %{filename}. + other: You are about to replace your bookmarks with up to %{count} posts from %{filename}. + domain_blocking_html: + one: You are about to replace your domain block list with up to %{count} domain from %{filename}. + other: You are about to replace your domain block list with up to %{count} domains from %{filename}. + following_html: + one: You are about to follow up to %{count} account from %{filename} and stop following anyone else. + other: You are about to follow up to %{count} accounts from %{filename} and stop following anyone else. + lists_html: + one: You are about to replace your lists with contents of %{filename}. Up to %{count} account will be added to new lists. + other: You are about to replace your lists with contents of %{filename}. Up to %{count} accounts will be added to new lists. + muting_html: + one: You are about to replace your list of muted account with up to %{count} account from %{filename}. + other: You are about to replace your list of muted accounts with up to %{count} accounts from %{filename}. preambles: - blocking_html: You are about to block up to %{total_items} accounts from %{filename}. - bookmarks_html: You are about to add up to %{total_items} posts from %{filename} to your bookmarks. - domain_blocking_html: You are about to block up to %{total_items} domains from %{filename}. - following_html: You are about to follow up to %{total_items} accounts from %{filename}. - lists_html: You are about to add up to %{total_items} accounts from %{filename} to your lists. New lists will be created if there is no list to add to. - muting_html: You are about to mute up to %{total_items} accounts from %{filename}. + blocking_html: + one: You are about to block up to %{count} account from %{filename}. + other: You are about to block up to %{count} accounts from %{filename}. + bookmarks_html: + one: You are about to add up to %{count} post from %{filename} to your bookmarks. + other: You are about to add up to %{count} posts from %{filename} to your bookmarks. + domain_blocking_html: + one: You are about to block up to %{count} domain from %{filename}. + other: You are about to block up to %{count} domains from %{filename}. + following_html: + one: You are about to follow up to %{count} account from %{filename}. + other: You are about to follow up to %{count} accounts from %{filename}. + lists_html: + one: You are about to add up to %{count} account from %{filename} to your lists. New lists will be created if there is no list to add to. + other: You are about to add up to %{count} accounts from %{filename} to your lists. New lists will be created if there is no list to add to. + muting_html: + one: You are about to mute up to %{count} account from %{filename}. + other: You are about to mute up to %{count} accounts from %{filename}. preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking. recent_imports: Recent imports states: From 82e7d53d54143ca69c7b0a0cebacee3f3ddd7b3c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 04:29:23 -0400 Subject: [PATCH 219/467] Rename transformer constant in sanitizer (#30532) --- lib/sanitize_ext/sanitize_config.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb index f0a7b657834a46..7387807e479c25 100644 --- a/lib/sanitize_ext/sanitize_config.rb +++ b/lib/sanitize_ext/sanitize_config.rb @@ -21,7 +21,7 @@ module Config gemini ).freeze - CLASS_WHITELIST_TRANSFORMER = lambda do |env| + ALLOWED_CLASS_TRANSFORMER = lambda do |env| node = env[:node] class_list = node['class']&.split(/[\t\n\f\r ]/) @@ -84,7 +84,7 @@ module Config protocols: {}, transformers: [ - CLASS_WHITELIST_TRANSFORMER, + ALLOWED_CLASS_TRANSFORMER, TRANSLATE_TRANSFORMER, UNSUPPORTED_ELEMENTS_TRANSFORMER, UNSUPPORTED_HREF_TRANSFORMER, From cf28104317642d647d77efe872bdabe3ea0c0624 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 04:30:08 -0400 Subject: [PATCH 220/467] Rename preloaded models constant in cli media (#30531) --- lib/mastodon/cli/media.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 37f110d898d453..996b7fd92ca3b6 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -177,7 +177,7 @@ def remove_orphans attachment_name = path_segments[1].singularize file_name = path_segments.last - next unless PRELOAD_MODEL_WHITELIST.include?(model_name) + next unless PRELOADED_MODELS.include?(model_name) record = model_name.constantize.find_by(id: record_id) attachment = record&.public_send(attachment_name) @@ -296,7 +296,7 @@ def lookup(url) model_name = path_segments.first.classify record_id = path_segments[2...-2].join.to_i - fail_with_message "Cannot find corresponding model: #{model_name}" unless PRELOAD_MODEL_WHITELIST.include?(model_name) + fail_with_message "Cannot find corresponding model: #{model_name}" unless PRELOADED_MODELS.include?(model_name) record = model_name.constantize.find_by(id: record_id) record = record.status if record.respond_to?(:status) @@ -333,7 +333,7 @@ def combined_media_sum SQL end - PRELOAD_MODEL_WHITELIST = %w( + PRELOADED_MODELS = %w( Account Backup CustomEmoji @@ -355,7 +355,7 @@ def preload_records_from_mixed_objects(objects) model_name = segments.first.classify record_id = segments[2...-2].join.to_i - next unless PRELOAD_MODEL_WHITELIST.include?(model_name) + next unless PRELOADED_MODELS.include?(model_name) preload_map[model_name] << record_id end From 49407e7623c52dd9e6e21bcb7a014cb116e081d3 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Oct 2024 10:50:36 +0200 Subject: [PATCH 221/467] Fix Content-Security-Policy when using sso-redirect (#32241) --- app/controllers/concerns/web_app_controller_concern.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index ebbdba59af0293..9485ecda4941cc 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -13,7 +13,7 @@ module WebAppControllerConcern policy = ContentSecurityPolicy.new if policy.sso_host.present? - p.form_action policy.sso_host + p.form_action policy.sso_host, -> { "https://#{request.host}/auth/auth/" } else p.form_action :none end From 463f9197d822e3b040834b4dab1c5334c7c8b968 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 08:21:55 -0400 Subject: [PATCH 222/467] Add regression coverage for admin reports resolution button within form (#32248) --- spec/system/report_interface_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/system/report_interface_spec.rb b/spec/system/report_interface_spec.rb index 257a1cd6fd371c..6a90aa5bc66655 100644 --- a/spec/system/report_interface_spec.rb +++ b/spec/system/report_interface_spec.rb @@ -28,4 +28,17 @@ page.scroll_to(page.find('.batch-table__row')) expect(page).to have_css('.spoiler-button__overlay__label') end + + it 'marks a report resolved from the show page actions area' do + visit admin_report_path(report) + + expect { resolve_report } + .to change { report.reload.action_taken_at }.to(be_present).from(nil) + end + + def resolve_report + within '.report-actions' do + click_on I18n.t('admin.reports.mark_as_resolved') + end + end end From 77f5b127fadc02ba84fd1d5deccc7b70e68aba59 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Oct 2024 14:23:30 +0200 Subject: [PATCH 223/467] Fix unsupported grouped notifications from streaming causing duplicate IDs (#32243) --- .../mastodon/reducers/notification_groups.ts | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index 375e64387633da..8b033f0fc78b7c 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -206,50 +206,53 @@ function processNewNotification( groups: NotificationGroupsState['groups'], notification: ApiNotificationJSON, ) { - if (shouldGroupNotificationType(notification.type)) { - const existingGroupIndex = groups.findIndex( - (group) => - group.type !== 'gap' && group.group_key === notification.group_key, - ); + if (!shouldGroupNotificationType(notification.type)) { + notification = { + ...notification, + group_key: `ungrouped-${notification.id}`, + }; + } - // In any case, we are going to add a group at the top - // If there is currently a gap at the top, now is the time to update it - if (groups.length > 0 && groups[0]?.type === 'gap') { - groups[0].maxId = notification.id; - } + const existingGroupIndex = groups.findIndex( + (group) => + group.type !== 'gap' && group.group_key === notification.group_key, + ); - if (existingGroupIndex > -1) { - const existingGroup = groups[existingGroupIndex]; + // In any case, we are going to add a group at the top + // If there is currently a gap at the top, now is the time to update it + if (groups.length > 0 && groups[0]?.type === 'gap') { + groups[0].maxId = notification.id; + } - if ( - existingGroup && - existingGroup.type !== 'gap' && - !existingGroup.sampleAccountIds.includes(notification.account.id) // This can happen for example if you like, then unlike, then like again the same post - ) { - // Update the existing group - if ( - existingGroup.sampleAccountIds.unshift(notification.account.id) > - NOTIFICATIONS_GROUP_MAX_AVATARS - ) - existingGroup.sampleAccountIds.pop(); + if (existingGroupIndex > -1) { + const existingGroup = groups[existingGroupIndex]; - existingGroup.most_recent_notification_id = notification.id; - existingGroup.page_max_id = notification.id; - existingGroup.latest_page_notification_at = notification.created_at; - existingGroup.notifications_count += 1; + if ( + existingGroup && + existingGroup.type !== 'gap' && + !existingGroup.sampleAccountIds.includes(notification.account.id) // This can happen for example if you like, then unlike, then like again the same post + ) { + // Update the existing group + if ( + existingGroup.sampleAccountIds.unshift(notification.account.id) > + NOTIFICATIONS_GROUP_MAX_AVATARS + ) + existingGroup.sampleAccountIds.pop(); - groups.splice(existingGroupIndex, 1); - mergeGapsAround(groups, existingGroupIndex); + existingGroup.most_recent_notification_id = notification.id; + existingGroup.page_max_id = notification.id; + existingGroup.latest_page_notification_at = notification.created_at; + existingGroup.notifications_count += 1; - groups.unshift(existingGroup); + groups.splice(existingGroupIndex, 1); + mergeGapsAround(groups, existingGroupIndex); - return; - } + groups.unshift(existingGroup); } + } else { + // We have not found an existing group, create a new one + groups.unshift(createNotificationGroupFromNotificationJSON(notification)); } - - // We have not found an existing group, create a new one - groups.unshift(createNotificationGroupFromNotificationJSON(notification)); } function trimNotifications(state: NotificationGroupsState) { From 4fe7f213a64e22a2912f13a8e5d6ac415125b0a1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 08:29:43 -0400 Subject: [PATCH 224/467] Use `async_count` in more view locations (#32086) --- app/controllers/admin/announcements_controller.rb | 1 + app/controllers/admin/disputes/appeals_controller.rb | 1 + .../admin/trends/links/preview_card_providers_controller.rb | 1 + app/controllers/admin/trends/tags_controller.rb | 1 + app/views/admin/announcements/index.html.haml | 2 +- app/views/admin/disputes/appeals/index.html.haml | 2 +- .../admin/trends/links/preview_card_providers/index.html.haml | 2 +- app/views/admin/trends/tags/index.html.haml | 2 +- 8 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 8f9708183a81cf..12230a6506d929 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -6,6 +6,7 @@ class Admin::AnnouncementsController < Admin::BaseController def index authorize :announcement, :index? + @published_announcements_count = Announcement.published.async_count end def new diff --git a/app/controllers/admin/disputes/appeals_controller.rb b/app/controllers/admin/disputes/appeals_controller.rb index 5e342409b021cb..0c41553676735a 100644 --- a/app/controllers/admin/disputes/appeals_controller.rb +++ b/app/controllers/admin/disputes/appeals_controller.rb @@ -6,6 +6,7 @@ class Admin::Disputes::AppealsController < Admin::BaseController def index authorize :appeal, :index? + @pending_appeals_count = Appeal.pending.async_count @appeals = filtered_appeals.page(params[:page]) end diff --git a/app/controllers/admin/trends/links/preview_card_providers_controller.rb b/app/controllers/admin/trends/links/preview_card_providers_controller.rb index 768b79f8dbce45..5e4b4084f808d2 100644 --- a/app/controllers/admin/trends/links/preview_card_providers_controller.rb +++ b/app/controllers/admin/trends/links/preview_card_providers_controller.rb @@ -4,6 +4,7 @@ class Admin::Trends::Links::PreviewCardProvidersController < Admin::BaseControll def index authorize :preview_card_provider, :review? + @pending_preview_card_providers_count = PreviewCardProvider.unreviewed.async_count @preview_card_providers = filtered_preview_card_providers.page(params[:page]) @form = Trends::PreviewCardProviderBatch.new end diff --git a/app/controllers/admin/trends/tags_controller.rb b/app/controllers/admin/trends/tags_controller.rb index f5946448ae1f71..fcd23fbf66b676 100644 --- a/app/controllers/admin/trends/tags_controller.rb +++ b/app/controllers/admin/trends/tags_controller.rb @@ -4,6 +4,7 @@ class Admin::Trends::TagsController < Admin::BaseController def index authorize :tag, :review? + @pending_tags_count = Tag.pending_review.async_count @tags = filtered_tags.page(params[:page]) @form = Trends::TagBatch.new end diff --git a/app/views/admin/announcements/index.html.haml b/app/views/admin/announcements/index.html.haml index 72227b04577a04..6a76c187766a5c 100644 --- a/app/views/admin/announcements/index.html.haml +++ b/app/views/admin/announcements/index.html.haml @@ -9,7 +9,7 @@ %strong= t('admin.relays.status') %ul %li= filter_link_to t('generic.all'), published: nil, unpublished: nil - %li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(Announcement.published.count)})"], ' '), published: '1', unpublished: nil + %li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(@published_announcements_count.value)})"], ' '), published: '1', unpublished: nil - if @announcements.empty? .muted-hint.center-text diff --git a/app/views/admin/disputes/appeals/index.html.haml b/app/views/admin/disputes/appeals/index.html.haml index 7f04dd40fb5f91..e09e275e5d5c3e 100644 --- a/app/views/admin/disputes/appeals/index.html.haml +++ b/app/views/admin/disputes/appeals/index.html.haml @@ -5,7 +5,7 @@ .filter-subset %strong= t('admin.tags.review') %ul - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{Appeal.pending.count})"], ' '), status: 'pending' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_appeals_count.value})"], ' '), status: 'pending' %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' diff --git a/app/views/admin/trends/links/preview_card_providers/index.html.haml b/app/views/admin/trends/links/preview_card_providers/index.html.haml index 93daf25f31a74d..0770ac4b810bfb 100644 --- a/app/views/admin/trends/links/preview_card_providers/index.html.haml +++ b/app/views/admin/trends/links/preview_card_providers/index.html.haml @@ -12,7 +12,7 @@ %li= filter_link_to t('generic.all'), status: nil %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.unreviewed.count})"], ' '), status: 'pending_review' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_preview_card_providers_count.value})"], ' '), status: 'pending_review' .back-link = link_to admin_trends_links_path do = material_symbol 'chevron_left' diff --git a/app/views/admin/trends/tags/index.html.haml b/app/views/admin/trends/tags/index.html.haml index 480877456f5f96..21f6c2947aca37 100644 --- a/app/views/admin/trends/tags/index.html.haml +++ b/app/views/admin/trends/tags/index.html.haml @@ -12,7 +12,7 @@ %li= filter_link_to t('generic.all'), status: nil %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{Tag.pending_review.count})"], ' '), status: 'pending_review' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_tags_count.value})"], ' '), status: 'pending_review' = form_with model: @form, url: batch_admin_trends_tags_path do |f| = hidden_field_tag :page, params[:page] || 1 From e4e07b1c34858dc6b7070f1b5d81f40ec63ebf4c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 10:11:15 -0400 Subject: [PATCH 225/467] Reduce factory usage across `spec/services` area (#32098) --- .../account_statuses_cleanup_service_spec.rb | 81 +++--- .../process_status_update_service_spec.rb | 70 +++-- .../services/authorize_follow_service_spec.rb | 30 +-- .../batched_remove_status_service_spec.rb | 42 +-- spec/services/block_service_spec.rb | 13 +- spec/services/bulk_import_service_spec.rb | 253 +++++++----------- spec/services/favourite_service_spec.rb | 17 +- spec/services/follow_service_spec.rb | 13 +- .../services/process_mentions_service_spec.rb | 38 ++- spec/services/reject_follow_service_spec.rb | 34 ++- .../remove_from_followers_service_spec.rb | 23 +- spec/services/remove_status_service_spec.rb | 44 ++- spec/services/report_service_spec.rb | 35 ++- spec/services/resolve_account_service_spec.rb | 128 +++++---- spec/services/resolve_url_service_spec.rb | 44 ++- .../services/translate_status_service_spec.rb | 52 ++-- spec/services/unblock_domain_service_spec.rb | 40 +-- spec/services/unblock_service_spec.rb | 22 +- spec/services/unfollow_service_spec.rb | 34 +-- spec/services/update_account_service_spec.rb | 20 +- spec/services/update_status_service_spec.rb | 131 ++++----- 21 files changed, 545 insertions(+), 619 deletions(-) diff --git a/spec/services/account_statuses_cleanup_service_spec.rb b/spec/services/account_statuses_cleanup_service_spec.rb index 857bd4fda499af..553d20029a6624 100644 --- a/spec/services/account_statuses_cleanup_service_spec.rb +++ b/spec/services/account_statuses_cleanup_service_spec.rb @@ -27,39 +27,35 @@ end context 'when given a normal budget of 10' do - it 'reports 3 deleted statuses' do - expect(subject.call(account_policy, 10)).to eq 3 - end - - it 'records the last deleted id' do - subject.call(account_policy, 10) - expect(account_policy.last_inspected).to eq [old_status.id, another_old_status.id].max - end - - it 'actually deletes the statuses' do - subject.call(account_policy, 10) - expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil - expect { recent_status.reload }.to_not raise_error - end - - it 'preserves recent and unrelated statuses' do - subject.call(account_policy, 10) - expect { unrelated_status.reload }.to_not raise_error - expect { recent_status.reload }.to_not raise_error + it 'reports 3 deleted statuses and records last deleted id, deletes statuses, preserves recent unrelated statuses' do + expect(subject.call(account_policy, 10)) + .to eq(3) + + expect(account_policy.last_inspected) + .to eq [old_status.id, another_old_status.id].max + + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])) + .to be_nil + expect { recent_status.reload } + .to_not raise_error + expect { unrelated_status.reload } + .to_not raise_error + expect { recent_status.reload } + .to_not raise_error end end context 'when called repeatedly with a budget of 2' do - it 'reports 2 then 1 deleted statuses' do - expect(subject.call(account_policy, 2)).to eq 2 - expect(subject.call(account_policy, 2)).to eq 1 - end - - it 'actually deletes the statuses in the expected order' do - subject.call(account_policy, 2) - expect(Status.find_by(id: very_old_status.id)).to be_nil - subject.call(account_policy, 2) - expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil + it 'reports 2 then 1 deleted statuses and deletes in expected order' do + expect(subject.call(account_policy, 2)) + .to eq(2) + expect(Status.find_by(id: very_old_status.id)) + .to be_nil + + expect(subject.call(account_policy, 2)) + .to eq(1) + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])) + .to be_nil end end @@ -90,19 +86,24 @@ end end - it 'reports 0 deleted statuses then 0 then 3 then 0 again' do - expect(subject.call(account_policy, 10)).to eq 0 - expect(subject.call(account_policy, 10)).to eq 0 - expect(subject.call(account_policy, 10)).to eq 3 - expect(subject.call(account_policy, 10)).to eq 0 + it 'reports 0 deleted statuses then 0 then 3 then 0 again, and keeps id under oldest deletable record' do + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(subject.call(account_policy, 10)) + .to eq(3) + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(account_policy.last_inspected) + .to be < oldest_deletable_record_id end - it 'never causes the recorded id to get higher than oldest deletable toot' do - subject.call(account_policy, 10) - subject.call(account_policy, 10) - subject.call(account_policy, 10) - subject.call(account_policy, 10) - expect(account_policy.last_inspected).to be < Mastodon::Snowflake.id_at(account_policy.min_status_age.seconds.ago, with_random: false) + def oldest_deletable_record_id + Mastodon::Snowflake.id_at( + account_policy.min_status_age.seconds.ago, + with_random: false + ) end end end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index a97e8408026b7c..b6ceba374f7825 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -2,10 +2,6 @@ require 'rails_helper' -def poll_option_json(name, votes) - { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } } -end - RSpec.describe ActivityPub::ProcessStatusUpdateService do subject { described_class.new } @@ -294,7 +290,6 @@ def poll_option_json(name, votes) context 'when originally without media attachments' do before do stub_request(:get, 'https://example.com/foo.png').to_return(body: attachment_fixture('emojo.png')) - subject.call(status, json, json) end let(:payload) do @@ -310,19 +305,18 @@ def poll_option_json(name, votes) } end - it 'updates media attachments' do - media_attachment = status.reload.ordered_media_attachments.first + it 'updates media attachments, fetches attachment, records media change in edit' do + subject.call(status, json, json) - expect(media_attachment).to_not be_nil - expect(media_attachment.remote_url).to eq 'https://example.com/foo.png' - end + expect(status.reload.ordered_media_attachments.first) + .to be_present + .and(have_attributes(remote_url: 'https://example.com/foo.png')) - it 'fetches the attachment' do - expect(a_request(:get, 'https://example.com/foo.png')).to have_been_made - end + expect(a_request(:get, 'https://example.com/foo.png')) + .to have_been_made - it 'records media change in edit' do - expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty + expect(status.edits.reload.last.ordered_media_attachment_ids) + .to_not be_empty end end @@ -344,27 +338,26 @@ def poll_option_json(name, votes) before do allow(RedownloadMediaWorker).to receive(:perform_async) - subject.call(status, json, json) end - it 'updates the existing media attachment in-place' do - media_attachment = status.media_attachments.ordered.reload.first + it 'updates the existing media attachment in-place, does not queue redownload, updates media, records media change' do + subject.call(status, json, json) - expect(media_attachment).to_not be_nil - expect(media_attachment.remote_url).to eq 'https://example.com/foo.png' - expect(media_attachment.description).to eq 'A picture' - end + expect(status.media_attachments.ordered.reload.first) + .to be_present + .and have_attributes( + remote_url: 'https://example.com/foo.png', + description: 'A picture' + ) - it 'does not queue redownload for the existing media attachment' do - expect(RedownloadMediaWorker).to_not have_received(:perform_async) - end + expect(RedownloadMediaWorker) + .to_not have_received(:perform_async) - it 'updates media attachments' do - expect(status.ordered_media_attachments.map(&:remote_url)).to eq %w(https://example.com/foo.png) - end + expect(status.ordered_media_attachments.map(&:remote_url)) + .to eq %w(https://example.com/foo.png) - it 'records media change in edit' do - expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty + expect(status.edits.reload.last.ordered_media_attachment_ids) + .to_not be_empty end end @@ -372,10 +365,11 @@ def poll_option_json(name, votes) before do poll = Fabricate(:poll, status: status) status.update(preloadable_poll: poll) - subject.call(status, json, json) end it 'removes poll and records media change in edit' do + subject.call(status, json, json) + expect(status.reload.poll).to be_nil expect(status.edits.reload.last.poll_options).to be_nil end @@ -398,15 +392,13 @@ def poll_option_json(name, votes) } end - before do + it 'creates a poll and records media change in edit' do subject.call(status, json, json) - end - it 'creates a poll and records media change in edit' do - poll = status.reload.poll + expect(status.reload.poll) + .to be_present + .and have_attributes(options: %w(Foo Bar Baz)) - expect(poll).to_not be_nil - expect(poll.options).to eq %w(Foo Bar Baz) expect(status.edits.reload.last.poll_options).to eq %w(Foo Bar Baz) end end @@ -419,4 +411,8 @@ def poll_option_json(name, votes) .to eq '2021-09-08 22:39:25 UTC' end end + + def poll_option_json(name, votes) + { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } } + end end diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb index 533b791fb7f6e7..de2857280249cb 100644 --- a/spec/services/authorize_follow_service_spec.rb +++ b/spec/services/authorize_follow_service_spec.rb @@ -12,15 +12,15 @@ before do FollowRequest.create(account: bob, target_account: sender) - subject.call(bob, sender) end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end + it 'removes follow request and creates follow relation' do + subject.call(bob, sender) - it 'creates follow relation' do - expect(bob.following?(sender)).to be true + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to be_following(sender) end end @@ -30,19 +30,17 @@ before do FollowRequest.create(account: bob, target_account: sender) stub_request(:post, bob.inbox_url).to_return(status: 200) - subject.call(bob, sender) end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end - - it 'creates follow relation' do - expect(bob.following?(sender)).to be true - end + it 'removes follow request, creates follow relation, send accept activity', :inline_jobs do + subject.call(bob, sender) - it 'sends an accept activity', :inline_jobs do - expect(a_request(:post, bob.inbox_url)).to have_been_made.once + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to be_following(sender) + expect(a_request(:post, bob.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index 628bb198ef06f3..1ff73a633b1002 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -24,32 +24,38 @@ status_alice_hello status_alice_other + end + it 'removes status records, removes from author and local follower feeds, notifies stream, sends delete' do subject.call([status_alice_hello, status_alice_other]) - end - it 'removes statuses' do - expect { Status.find(status_alice_hello.id) }.to raise_error ActiveRecord::RecordNotFound - expect { Status.find(status_alice_other.id) }.to raise_error ActiveRecord::RecordNotFound - end + expect { Status.find(status_alice_hello.id) } + .to raise_error ActiveRecord::RecordNotFound + expect { Status.find(status_alice_other.id) } + .to raise_error ActiveRecord::RecordNotFound - it 'removes statuses from author\'s home feed' do - expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id) - end + expect(feed_ids_for(alice)) + .to_not include(status_alice_hello.id, status_alice_other.id) - it 'removes statuses from local follower\'s home feed' do - expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id) - end + expect(feed_ids_for(jeff)) + .to_not include(status_alice_hello.id, status_alice_other.id) - it 'notifies streaming API of followers' do - expect(redis).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once) - end + expect(redis) + .to have_received(:publish) + .with("timeline:#{jeff.id}", any_args).at_least(:once) + + expect(redis) + .to have_received(:publish) + .with('timeline:public', any_args).at_least(:once) - it 'notifies streaming API of public timeline' do - expect(redis).to have_received(:publish).with('timeline:public', any_args).at_least(:once) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.at_least_once end - it 'sends delete activity to followers' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.at_least_once + def feed_ids_for(account) + HomeFeed + .new(account) + .get(10) + .pluck(:id) end end diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index 46dd69198699a4..d9687a5404dc0a 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -26,15 +26,16 @@ before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200) - subject.call(sender, bob) end - it 'creates a blocking relation' do - expect(sender.blocking?(bob)).to be true - end + it 'creates a blocking relation and send block activity', :inline_jobs do + subject.call(sender, bob) + + expect(sender) + .to be_blocking(bob) - it 'sends a block activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/bulk_import_service_spec.rb b/spec/services/bulk_import_service_spec.rb index 0197f81a448dd7..f52fc4d7d5e83a 100644 --- a/spec/services/bulk_import_service_spec.rb +++ b/spec/services/bulk_import_service_spec.rb @@ -24,30 +24,19 @@ ].map { |data| import.rows.create!(data: data) } end - before do - account.follow!(Fabricate(:account)) - end - - it 'does not immediately change who the account follows' do - expect { subject.call(import) }.to_not(change { account.reload.active_relationships.to_a }) - end + before { account.follow!(Fabricate(:account)) } - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end - - it 'requests to follow all the listed users once the workers have run' do - subject.call(import) + it 'does not immediately change who the account follows, enqueues workers, sends follow requests after worker run' do + expect { subject.call(import) } + .to_not(change { account.reload.active_relationships.to_a }) - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar') + expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }) + .to contain_exactly('user@foo.bar', 'unknown@unknown.bar') end end @@ -71,31 +60,20 @@ account.follow!(to_be_unfollowed) end - it 'unfollows user not present on list' do - subject.call(import) - expect(account.following?(to_be_unfollowed)).to be false - end - - it 'updates the existing follow relationship as expected' do - expect { subject.call(import) }.to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']]) - end + it 'updates the existing follow relationship as expected and unfollows user not on list, enqueues workers, sends follow reqs after worker run' do + expect { subject.call(import) } + .to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']]) - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end - - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) + expect(account) + .to_not be_following(to_be_unfollowed) - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar') + expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }) + .to contain_exactly('user@foo.bar', 'unknown@unknown.bar') end end @@ -110,30 +88,19 @@ ].map { |data| import.rows.create!(data: data) } end - before do - account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org')) - end - - it 'does not immediately change who the account blocks' do - expect { subject.call(import) }.to_not(change { account.reload.blocking.to_a }) - end + before { account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org')) } - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end - - it 'blocks all the listed users once the workers have run' do - subject.call(import) + it 'does not immediately change who the account blocks, enqueues worker, blocks after run' do + expect { subject.call(import) } + .to_not(change { account.reload.blocking.to_a }) - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(account.blocking.map(&:acct)).to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.reload.blocking.map(&:acct)) + .to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -157,27 +124,18 @@ account.block!(to_be_unblocked) end - it 'unblocks user not present on list' do + it 'unblocks user not present on list, enqueues worker, requests follow after run' do subject.call(import) - expect(account.blocking?(to_be_unblocked)).to be false - end - - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) + expect(account.blocking?(to_be_unblocked)).to be false - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(account.blocking.map(&:acct)).to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.blocking.map(&:acct)) + .to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -192,30 +150,19 @@ ].map { |data| import.rows.create!(data: data) } end - before do - account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org')) - end - - it 'does not immediately change who the account blocks' do - expect { subject.call(import) }.to_not(change { account.reload.muting.to_a }) - end - - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end + before { account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org')) } - it 'mutes all the listed users once the workers have run' do - subject.call(import) + it 'does not immediately change who the account blocks, enqueures worker, mutes users after worker run' do + expect { subject.call(import) } + .to_not(change { account.reload.muting.to_a }) - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(account.muting.map(&:acct)).to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.reload.muting.map(&:acct)) + .to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -239,31 +186,19 @@ account.mute!(to_be_unmuted) end - it 'updates the existing mute as expected' do - expect { subject.call(import) }.to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true) - end + it 'updates the existing mute as expected and unblocks user not on list, and enqueues worker, and requests follow after worker run' do + expect { subject.call(import) } + .to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true) - it 'unblocks user not present on list' do - subject.call(import) expect(account.muting?(to_be_unmuted)).to be false - end - - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end - - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - Import::RowWorker.drain + stub_resolve_account_and_drain_workers - expect(account.muting.map(&:acct)).to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.muting.map(&:acct)) + .to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -284,13 +219,11 @@ account.block_domain!('blocked.com') end - it 'blocks all the new domains' do + it 'blocks all the new domains and marks import finished' do subject.call(import) - expect(account.domain_blocks.pluck(:domain)).to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com') - end - it 'marks the import as finished' do - subject.call(import) + expect(account.domain_blocks.pluck(:domain)) + .to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com') expect(import.reload.state_finished?).to be true end end @@ -312,14 +245,13 @@ account.block_domain!('blocked.com') end - it 'blocks all the new domains' do + it 'blocks all the new domains and marks import finished' do subject.call(import) - expect(account.domain_blocks.pluck(:domain)).to contain_exactly('blocked.com', 'to-block.com') - end - it 'marks the import as finished' do - subject.call(import) - expect(import.reload.state_finished?).to be true + expect(account.domain_blocks.pluck(:domain)) + .to contain_exactly('blocked.com', 'to-block.com') + expect(import.reload.state_finished?) + .to be true end end @@ -347,22 +279,16 @@ account.bookmarks.create!(status: bookmarked) end - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end - - it 'updates the bookmarks as expected once the workers have run' do + it 'enqueues workers for the expected rows and updates bookmarks after worker run' do subject.call(import) - service_double = instance_double(ActivityPub::FetchRemoteStatusService) - allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) - allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } - allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_fetch_remote_and_drain_workers - expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo') + expect(account.bookmarks.map { |bookmark| bookmark.status.uri }) + .to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo') end end @@ -390,23 +316,48 @@ account.bookmarks.create!(status: bookmarked) end - it 'enqueues workers for the expected rows' do + it 'enqueues workers for the expected rows and updates bookmarks' do subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) + + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) + + stub_fetch_remote_and_drain_workers + + expect(account.bookmarks.map { |bookmark| bookmark.status.uri }) + .to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo') end + end - it 'updates the bookmarks as expected once the workers have run' do - subject.call(import) + def row_worker_job_args + Import::RowWorker + .jobs + .pluck('args') + .flatten + end - service_double = instance_double(ActivityPub::FetchRemoteStatusService) - allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) - allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } - allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } + def stub_resolve_account_and_drain_workers + resolve_account_service_double = instance_double(ResolveAccountService) + allow(ResolveAccountService) + .to receive(:new) + .and_return(resolve_account_service_double) + allow(resolve_account_service_double) + .to receive(:call) + .with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } + allow(resolve_account_service_double) + .to receive(:call) + .with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + + Import::RowWorker.drain + end - Import::RowWorker.drain + def stub_fetch_remote_and_drain_workers + service_double = instance_double(ActivityPub::FetchRemoteStatusService) + allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) + allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } + allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } - expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo') - end + Import::RowWorker.drain end end end diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb index c39362def2f7f3..123e8699c7668f 100644 --- a/spec/services/favourite_service_spec.rb +++ b/spec/services/favourite_service_spec.rb @@ -11,11 +11,9 @@ let(:bob) { Fabricate(:account) } let(:status) { Fabricate(:status, account: bob) } - before do + it 'creates a favourite' do subject.call(sender, status) - end - it 'creates a favourite' do expect(status.favourites.first).to_not be_nil end end @@ -26,15 +24,16 @@ before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {}) - subject.call(sender, status) end - it 'creates a favourite' do - expect(status.favourites.first).to_not be_nil - end + it 'creates a favourite and sends like activity', :inline_jobs do + subject.call(sender, status) + + expect(status.favourites.first) + .to_not be_nil - it 'sends a like activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index 0c4cd600460922..bbd8a6f997ff60 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -143,15 +143,16 @@ before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {}) - subject.call(sender, bob) end - it 'creates follow request' do - expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil - end + it 'creates follow request and sends an activity to inbox', :inline_jobs do + subject.call(sender, bob) + + expect(FollowRequest.find_by(account: sender, target_account: bob)) + .to_not be_nil - it 'sends a follow activity to the inbox', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb index 2c202d3e57af18..3cc83d82f3cb08 100644 --- a/spec/services/process_mentions_service_spec.rb +++ b/spec/services/process_mentions_service_spec.rb @@ -16,20 +16,25 @@ before do account.block!(individually_blocked_account) account.domain_blocks.create!(domain: domain_blocked_account.domain) + end - subject.call(status) + it 'creates a mention to the non-blocked account but not the individually or domain blocked accounts' do + expect { subject.call(status) } + .to create_mention_for_non_blocked + .and skip_mention_for_individual + .and skip_mention_for_domain_blocked end - it 'creates a mention to the non-blocked account' do - expect(non_blocked_account.mentions.where(status: status).count).to eq 1 + def create_mention_for_non_blocked + change { non_blocked_account.mentions.where(status: status).count }.to(1) end - it 'does not create a mention to the individually blocked account' do - expect(individually_blocked_account.mentions.where(status: status).count).to eq 0 + def skip_mention_for_individual + not_change { individually_blocked_account.mentions.where(status: status).count }.from(0) end - it 'does not create a mention to the domain-blocked account' do - expect(domain_blocked_account.mentions.where(status: status).count).to eq 0 + def skip_mention_for_domain_blocked + not_change { domain_blocked_account.mentions.where(status: status).count }.from(0) end end @@ -40,11 +45,9 @@ context 'with a valid remote user' do let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } - before do + it 'creates a mention' do subject.call(status) - end - it 'creates a mention' do expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -53,11 +56,9 @@ let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct} @#{remote_user.acct} @#{remote_user.acct}", visibility: :public) } - before do + it 'creates exactly one mention' do subject.call(status, save_records: false) - end - it 'creates exactly one mention' do expect(status.mentions.size).to eq 1 end end @@ -66,11 +67,9 @@ let!(:remote_user) { Fabricate(:account, username: 'sneak', protocol: :activitypub, domain: 'xn--hresiar-mxa.ch', inbox_url: 'http://example.com/inbox') } let!(:status) { Fabricate(:status, account: account, text: 'Hello @sneak@hæresiar.ch') } - before do + it 'creates a mention' do subject.call(status) - end - it 'creates a mention' do expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -79,11 +78,9 @@ let!(:remote_user) { Fabricate(:account, username: 'foo', protocol: :activitypub, domain: 'xn--y9a3aq.xn--y9a3aq', inbox_url: 'http://example.com/inbox') } let!(:status) { Fabricate(:status, account: account, text: 'Hello @foo@հայ.հայ') } - before do + it 'creates a mention' do subject.call(status) - end - it 'creates a mention' do expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -95,10 +92,11 @@ before do stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(status: 404) stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:remote_user@example.com').to_return(status: 500) - subject.call(status) end it 'creates a mention' do + subject.call(status) + expect(remote_user.mentions.where(status: status).count).to eq 1 end end diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb index d2c7a00206210b..eec0d6c1e05f93 100644 --- a/spec/services/reject_follow_service_spec.rb +++ b/spec/services/reject_follow_service_spec.rb @@ -10,17 +10,15 @@ describe 'local' do let(:bob) { Fabricate(:account) } - before do - FollowRequest.create(account: bob, target_account: sender) - subject.call(bob, sender) - end + before { FollowRequest.create(account: bob, target_account: sender) } - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end + it 'removes follow request and does not create relation' do + subject.call(bob, sender) - it 'does not create follow relation' do - expect(bob.following?(sender)).to be false + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to_not be_following(sender) end end @@ -30,19 +28,17 @@ before do FollowRequest.create(account: bob, target_account: sender) stub_request(:post, bob.inbox_url).to_return(status: 200) - subject.call(bob, sender) - end - - it 'removes follow request' do - expect(bob.requested?(sender)).to be false end - it 'does not create follow relation' do - expect(bob.following?(sender)).to be false - end + it 'removes follow request, does not create relation, sends reject activity', :inline_jobs do + subject.call(bob, sender) - it 'sends a reject activity', :inline_jobs do - expect(a_request(:post, bob.inbox_url)).to have_been_made.once + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to_not be_following(sender) + expect(a_request(:post, bob.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/remove_from_followers_service_spec.rb b/spec/services/remove_from_followers_service_spec.rb index 515600096cfc04..381daf1a5913b1 100644 --- a/spec/services/remove_from_followers_service_spec.rb +++ b/spec/services/remove_from_followers_service_spec.rb @@ -10,13 +10,13 @@ describe 'local' do let(:sender) { Fabricate(:account, username: 'alice') } - before do - Follow.create(account: sender, target_account: bob) - subject.call(bob, sender) - end + before { Follow.create(account: sender, target_account: bob) } it 'does not create follow relation' do - expect(bob.followed_by?(sender)).to be false + subject.call(bob, sender) + + expect(bob) + .to_not be_followed_by(sender) end end @@ -26,15 +26,16 @@ before do Follow.create(account: sender, target_account: bob) stub_request(:post, sender.inbox_url).to_return(status: 200) - subject.call(bob, sender) end - it 'does not create follow relation' do - expect(bob.followed_by?(sender)).to be false - end + it 'does not create follow relation and sends reject activity', :inline_jobs do + subject.call(bob, sender) + + expect(bob) + .to_not be_followed_by(sender) - it 'sends a reject activity', :inline_jobs do - expect(a_request(:post, sender.inbox_url)).to have_been_made.once + expect(a_request(:post, sender.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index 08f519b5360d99..f2b46f05b002ba 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -28,42 +28,38 @@ Fabricate(:status, account: bill, reblog: status, uri: 'hoge') end - it 'removes status from author\'s home feed' do - subject.call(status) - expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status.id) - end - - it 'removes status from local follower\'s home feed' do - subject.call(status) - expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status.id) - end - - it 'publishes to public media timeline' do + it 'removes status from notifications and from author and local follower home feeds, publishes to media timeline, sends delete activities' do allow(redis).to receive(:publish).with(any_args) - subject.call(status) + expect { subject.call(status) } + .to remove_status_from_notifications - expect(redis).to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s)) - end + expect(home_feed_ids(alice)) + .to_not include(status.id) + expect(home_feed_ids(jeff)) + .to_not include(status.id) - it 'sends Delete activity to followers' do - subject.call(status) + expect(redis) + .to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s)) expect(delete_delivery(hank, status)) .to have_been_made.once - end - - it 'sends Delete activity to rebloggers' do - subject.call(status) expect(delete_delivery(bill, status)) .to have_been_made.once end - it 'remove status from notifications' do - expect { subject.call(status) }.to change { - Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count - }.from(1).to(0) + def home_feed_ids(personage) + HomeFeed + .new(personage) + .get(10) + .pluck(:id) + end + + def remove_status_from_notifications + change { Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count } + .from(1) + .to(0) end def delete_delivery(target, status) diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb index 6518c5c27ad3a0..4659e1c7a13ed5 100644 --- a/spec/services/report_service_spec.rb +++ b/spec/services/report_service_spec.rb @@ -31,14 +31,13 @@ context 'when forward is true', :inline_jobs do let(:forward) { true } - it 'sends ActivityPub payload when forward is true' do - subject.call(source_account, remote_account, forward: forward) - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made - end - - it 'has an uri' do + it 'has a URI and sends ActivityPub payload' do report = subject.call(source_account, remote_account, forward: forward) - expect(report.uri).to_not be_nil + + expect(report.uri) + .to_not be_nil + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made end context 'when reporting a reply on a different remote server' do @@ -122,13 +121,12 @@ status.mentions.create(account: source_account) end - it 'creates a report' do - expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) - end + it 'creates a report and attaches the DM to the report' do + expect { subject.call } + .to change { target_account.targeted_reports.count }.from(0).to(1) - it 'attaches the DM to the report' do - subject.call - expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] + expect(target_account.targeted_reports.pluck(:status_ids)) + .to eq [[status.id]] end end @@ -146,13 +144,12 @@ status.mentions.create(account: source_account) end - it 'creates a report' do - expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) - end + it 'creates a report and attaches DM to report' do + expect { subject.call } + .to change { target_account.targeted_reports.count }.from(0).to(1) - it 'attaches the DM to the report' do - subject.call - expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] + expect(target_account.targeted_reports.pluck(:status_ids)) + .to eq [[status.id]] end end diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index a856e019a7fe2f..1bd4e9a8e3bfcc 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -22,37 +22,38 @@ context 'when domain is banned' do before { Fabricate(:domain_block, domain: 'ap.example.com', severity: :suspend) } - it 'does not return an account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil - end - - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made + it 'does not return an account or make a webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to be_nil + expect(webfinger_discovery_request) + .to_not have_been_made end end context 'when domain is not banned' do - it 'returns the expected account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to eq remote_account - end - - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made + it 'returns the expected account and does not make a webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to eq remote_account + expect(webfinger_discovery_request) + .to_not have_been_made end end end context 'when account is not known' do - it 'does not return an account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil + it 'does not return an account and does not make webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to be_nil + expect(webfinger_discovery_request) + .to_not have_been_made end + end - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made - end + def webfinger_discovery_request + a_request( + :get, + 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com' + ) end end @@ -84,13 +85,11 @@ allow(AccountDeletionWorker).to receive(:perform_async) end - it 'returns nil' do - expect(subject.call('hoge@example.com')).to be_nil - end - - it 'queues account deletion worker' do - subject.call('hoge@example.com') - expect(AccountDeletionWorker).to have_received(:perform_async) + it 'returns nil and queues deletion worker' do + expect(subject.call('hoge@example.com')) + .to be_nil + expect(AccountDeletionWorker) + .to have_received(:perform_async) end end @@ -110,9 +109,12 @@ it 'returns new remote account' do account = subject.call('Foo@redirected.example.com') - expect(account.activitypub?).to be true - expect(account.acct).to eq 'foo@ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + acct: 'foo@ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end end @@ -125,9 +127,12 @@ it 'returns new remote account' do account = subject.call('Foo@redirected.example.com') - expect(account.activitypub?).to be true - expect(account.acct).to eq 'foo@ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + acct: 'foo@ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end end @@ -161,9 +166,12 @@ it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end context 'with multiple types' do @@ -174,10 +182,13 @@ it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.actor_type).to eq 'Person' + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + actor_type: 'Person' + ) end end end @@ -186,20 +197,21 @@ let!(:duplicate) { Fabricate(:account, username: 'foo', domain: 'old.example.com', uri: 'https://ap.example.com/users/foo') } let!(:status) { Fabricate(:status, account: duplicate, text: 'foo') } - it 'returns new remote account' do + it 'returns new remote account and merges accounts', :inline_jobs do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.uri).to eq 'https://ap.example.com/users/foo' - end - - it 'merges accounts', :inline_jobs do - account = subject.call('foo@ap.example.com') + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + uri: 'https://ap.example.com/users/foo' + ) - expect(status.reload.account_id).to eq account.id - expect(Account.where(uri: account.uri).count).to eq 1 + expect(status.reload.account_id) + .to eq account.id + expect(Account.where(uri: account.uri).count) + .to eq 1 end end @@ -210,11 +222,15 @@ it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.uri).to eq 'https://ap.example.com/users/foo' - expect(status.reload.account).to eq(account) + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + uri: 'https://ap.example.com/users/foo' + ) + expect(status.reload.account) + .to eq(account) end end diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb index 80f2a5a4baf55d..eaf00c1ed84cd2 100644 --- a/spec/services/resolve_url_service_spec.rb +++ b/spec/services/resolve_url_service_spec.rb @@ -51,12 +51,11 @@ let(:url) { 'https://example.com/@foo/42' } let(:uri) { 'https://example.com/users/foo/statuses/42' } - it 'returns status by url' do - expect(subject.call(url, on_behalf_of: account)).to eq(status) - end - - it 'returns status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to eq(status) + it 'returns status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to eq(status) + expect(subject.call(uri, on_behalf_of: account)) + .to eq(status) end end @@ -75,12 +74,11 @@ let(:url) { 'https://example.com/@foo/42' } let(:uri) { 'https://example.com/users/foo/statuses/42' } - it 'does not return the status by url' do - expect(subject.call(url, on_behalf_of: account)).to be_nil - end - - it 'does not return the status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to be_nil + it 'does not return the status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to be_nil + expect(subject.call(uri, on_behalf_of: account)) + .to be_nil end end @@ -107,22 +105,20 @@ account.follow!(poster) end - it 'returns status by url' do - expect(subject.call(url, on_behalf_of: account)).to eq(status) - end - - it 'returns status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to eq(status) + it 'returns status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to eq(status) + expect(subject.call(uri, on_behalf_of: account)) + .to eq(status) end end context 'when the account does not follow the poster' do - it 'does not return the status by url' do - expect(subject.call(url, on_behalf_of: account)).to be_nil - end - - it 'does not return the status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to be_nil + it 'does not return the status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to be_nil + expect(subject.call(uri, on_behalf_of: account)) + .to be_nil end end end diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index 0779fbbe6c52bc..cd92fb8d1025ab 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -32,20 +32,14 @@ allow(TranslationService).to receive_messages(configured?: true, configured: translation_service) end - it 'returns translated status content' do - expect(service.call(status, 'es').content).to eq '

Hola

' - end - - it 'returns source language' do - expect(service.call(status, 'es').detected_source_language).to eq 'en' - end - - it 'returns translation provider' do - expect(service.call(status, 'es').provider).to eq 'Dummy' - end - - it 'returns original status' do - expect(service.call(status, 'es').status).to eq status + it 'returns translated status content and source language and provider and original status' do + expect(service.call(status, 'es')) + .to have_attributes( + content: '

Hola

', + detected_source_language: 'en', + provider: 'Dummy', + status: status + ) end describe 'status has content with custom emoji' do @@ -155,26 +149,16 @@ let!(:source_texts) { service.send(:source_texts) } it 'returns formatted poll options' do - expect(source_texts.size).to eq 3 - expect(source_texts.values).to eq %w(

Hello

Blue Green) - end - - it 'has a first key with content' do - expect(source_texts.keys.first).to eq :content - end - - it 'has the first option in the second key with correct options' do - option1 = source_texts.keys.second - expect(option1).to be_a Poll::Option - expect(option1.id).to eq '0' - expect(option1.title).to eq 'Blue' - end - - it 'has the second option in the third key with correct options' do - option2 = source_texts.keys.third - expect(option2).to be_a Poll::Option - expect(option2.id).to eq '1' - expect(option2.title).to eq 'Green' + expect(source_texts) + .to have_attributes( + size: 3, + values: %w(

Hello

Blue Green), + keys: contain_exactly( + eq(:content), + be_a(Poll::Option).and(have_attributes(id: '0', title: 'Blue')), + be_a(Poll::Option).and(have_attributes(id: '1', title: 'Green')) + ) + ) end end end diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb index 405fe1cfd2f8a3..daa1d480a6bc9d 100644 --- a/spec/services/unblock_domain_service_spec.rb +++ b/spec/services/unblock_domain_service_spec.rb @@ -12,26 +12,32 @@ let!(:silenced) { Fabricate(:account, domain: 'example.com', silenced_at: domain_block.created_at) } let!(:suspended) { Fabricate(:account, domain: 'example.com', suspended_at: domain_block.created_at) } - it 'unsilences accounts and removes block' do - domain_block.update(severity: :silence) - - subject.call(domain_block) - expect_deleted_domain_block - expect(silenced.reload.silenced?).to be false - expect(suspended.reload.suspended?).to be true - expect(independently_suspended.reload.suspended?).to be true - expect(independently_silenced.reload.silenced?).to be true + context 'with severity of silence' do + before { domain_block.update(severity: :silence) } + + it 'unsilences accounts and removes block' do + subject.call(domain_block) + + expect_deleted_domain_block + expect(silenced.reload.silenced?).to be false + expect(suspended.reload.suspended?).to be true + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true + end end - it 'unsuspends accounts and removes block' do - domain_block.update(severity: :suspend) + context 'with severity of suspend' do + before { domain_block.update(severity: :suspend) } - subject.call(domain_block) - expect_deleted_domain_block - expect(suspended.reload.suspended?).to be false - expect(silenced.reload.silenced?).to be false - expect(independently_suspended.reload.suspended?).to be true - expect(independently_silenced.reload.silenced?).to be true + it 'unsuspends accounts and removes block' do + subject.call(domain_block) + + expect_deleted_domain_block + expect(suspended.reload.suspended?).to be false + expect(silenced.reload.silenced?).to be false + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true + end end end diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb index 6132e74415ecd6..a2c5188f06335a 100644 --- a/spec/services/unblock_service_spec.rb +++ b/spec/services/unblock_service_spec.rb @@ -10,13 +10,13 @@ describe 'local' do let(:bob) { Fabricate(:account) } - before do - sender.block!(bob) - subject.call(sender, bob) - end + before { sender.block!(bob) } it 'destroys the blocking relation' do - expect(sender.blocking?(bob)).to be false + subject.call(sender, bob) + + expect(sender) + .to_not be_blocking(bob) end end @@ -26,15 +26,15 @@ before do sender.block!(bob) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) - subject.call(sender, bob) end - it 'destroys the blocking relation' do - expect(sender.blocking?(bob)).to be false - end + it 'destroys the blocking relation and sends unblock activity', :inline_jobs do + subject.call(sender, bob) - it 'sends an unblock activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_blocking(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb index 0c206c4b983215..6cf24ca5e1ce65 100644 --- a/spec/services/unfollow_service_spec.rb +++ b/spec/services/unfollow_service_spec.rb @@ -10,13 +10,13 @@ describe 'local' do let(:bob) { Fabricate(:account, username: 'bob') } - before do - sender.follow!(bob) - subject.call(sender, bob) - end + before { sender.follow!(bob) } it 'destroys the following relation' do - expect(sender.following?(bob)).to be false + subject.call(sender, bob) + + expect(sender) + .to_not be_following(bob) end end @@ -26,15 +26,15 @@ before do sender.follow!(bob) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) - subject.call(sender, bob) end - it 'destroys the following relation' do - expect(sender.following?(bob)).to be false - end + it 'destroys the following relation and sends unfollow activity' do + subject.call(sender, bob) - it 'sends an unfollow activity' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_following(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end @@ -44,15 +44,15 @@ before do bob.follow!(sender) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) - subject.call(bob, sender) end - it 'destroys the following relation' do - expect(bob.following?(sender)).to be false - end + it 'destroys the following relation and sends a reject activity' do + subject.call(bob, sender) - it 'sends a reject activity' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_following(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb index d066db481e5568..f9059af07f5ab3 100644 --- a/spec/services/update_account_service_spec.rb +++ b/spec/services/update_account_service_spec.rb @@ -18,23 +18,19 @@ FollowService.new.call(alice, account) FollowService.new.call(bob, account) FollowService.new.call(eve, account) + end + it 'auto accepts pending follow requests from appropriate accounts' do subject.call(account, { locked: false }) - end - it 'auto-accepts pending follow requests' do - expect(alice.following?(account)).to be true - expect(alice.requested?(account)).to be false - end + expect(alice).to be_following(account) + expect(alice).to_not be_requested(account) - it 'does not auto-accept pending follow requests from silenced users' do - expect(bob.following?(account)).to be false - expect(bob.requested?(account)).to be true - end + expect(bob).to_not be_following(account) + expect(bob).to be_requested(account) - it 'auto-accepts pending follow requests from muted users so as to not leak mute' do - expect(eve.following?(account)).to be true - expect(eve.requested?(account)).to be false + expect(eve).to be_following(account) + expect(eve).to_not be_requested(account) end end end diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index de06fb13c63ad5..7c92adeffd2335 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -10,15 +10,15 @@ before do allow(ActivityPub::DistributionWorker).to receive(:perform_async) - subject.call(status, status.account_id, text: 'Foo') end - it 'does not create an edit' do - expect(status.reload.edits).to be_empty - end + it 'does not create an edit or notify anyone' do + subject.call(status, status.account_id, text: 'Foo') - it 'does not notify anyone' do - expect(ActivityPub::DistributionWorker).to_not have_received(:perform_async) + expect(status.reload.edits) + .to be_empty + expect(ActivityPub::DistributionWorker) + .to_not have_received(:perform_async) end end @@ -28,18 +28,16 @@ before do PreviewCardsStatus.create(status: status, preview_card: preview_card) - subject.call(status, status.account_id, text: 'Bar') - end - - it 'updates text' do - expect(status.reload.text).to eq 'Bar' end - it 'resets preview card' do - expect(status.reload.preview_card).to be_nil - end + it 'updates text, resets card, saves edit history' do + subject.call(status, status.account_id, text: 'Bar') - it 'saves edit history' do + expect(status.reload) + .to have_attributes( + text: 'Bar', + preview_card: be_nil + ) expect(status.edits.ordered.pluck(:text)).to eq %w(Foo Bar) end end @@ -50,15 +48,15 @@ before do PreviewCardsStatus.create(status: status, preview_card: preview_card) - subject.call(status, status.account_id, text: 'Foo', spoiler_text: 'Bar') end - it 'updates content warning' do - expect(status.reload.spoiler_text).to eq 'Bar' - end + it 'updates content warning and saves history' do + subject.call(status, status.account_id, text: 'Foo', spoiler_text: 'Bar') - it 'saves edit history' do - expect(status.edits.ordered.pluck(:text, :spoiler_text)).to eq [['Foo', ''], ['Foo', 'Bar']] + expect(status.reload.spoiler_text) + .to eq 'Bar' + expect(status.edits.ordered.pluck(:text, :spoiler_text)) + .to eq [['Foo', ''], ['Foo', 'Bar']] end end @@ -69,23 +67,19 @@ before do status.media_attachments << detached_media_attachment - subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s]) - end - - it 'updates media attachments' do - expect(status.ordered_media_attachments).to eq [attached_media_attachment] - end - - it 'does not detach detached media attachments' do - expect(detached_media_attachment.reload.status_id).to eq status.id end - it 'attaches attached media attachments' do - expect(attached_media_attachment.reload.status_id).to eq status.id - end + it 'updates media attachments, handles attachments, saves history' do + subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s]) - it 'saves edit history' do - expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)).to eq [[detached_media_attachment.id], [attached_media_attachment.id]] + expect(status.ordered_media_attachments) + .to eq [attached_media_attachment] + expect(detached_media_attachment.reload.status_id) + .to eq status.id + expect(attached_media_attachment.reload.status_id) + .to eq status.id + expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)) + .to eq [[detached_media_attachment.id], [attached_media_attachment.id]] end end @@ -95,19 +89,18 @@ before do status.media_attachments << media_attachment - subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }]) end - it 'does not detach media attachment' do - expect(media_attachment.reload.status_id).to eq status.id - end - - it 'updates the media attachment description' do - expect(media_attachment.reload.description).to eq 'New description' - end + it 'does not detach media attachment, updates description, and saves history' do + subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }]) - it 'saves edit history' do - expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }).to eq [['Old description'], ['New description']] + expect(media_attachment.reload) + .to have_attributes( + status_id: status.id, + description: 'New description' + ) + expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }) + .to eq [['Old description'], ['New description']] end end @@ -120,28 +113,27 @@ before do status.update(poll: poll) VoteService.new.call(voter, poll, [0]) - subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i }) end - it 'updates poll' do - poll = status.poll.reload - expect(poll.options).to eq %w(Bar Baz Foo) - end + it 'updates poll, resets votes, saves history, requeues notifications' do + subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i }) - it 'resets votes' do poll = status.poll.reload - expect(poll.votes_count).to eq 0 - expect(poll.votes.count).to eq 0 - expect(poll.cached_tallies).to eq [0, 0, 0] - end - it 'saves edit history' do - expect(status.edits.ordered.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)] - end + expect(poll) + .to have_attributes( + options: %w(Bar Baz Foo), + votes_count: 0, + cached_tallies: [0, 0, 0] + ) + expect(poll.votes.count) + .to eq(0) - it 'requeues expiration notification' do - poll = status.poll.reload - expect(PollExpirationNotifyWorker).to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes) + expect(status.edits.ordered.pluck(:poll_options)) + .to eq [%w(Foo Bar), %w(Bar Baz Foo)] + + expect(PollExpirationNotifyWorker) + .to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes) end end @@ -151,16 +143,13 @@ let!(:bob) { Fabricate(:account, username: 'bob') } let!(:status) { PostStatusService.new.call(account, text: 'Hello @alice') } - before do + it 'changes mentions and keeps old as silent' do subject.call(status, status.account_id, text: 'Hello @bob') - end - - it 'changes mentions' do - expect(status.active_mentions.pluck(:account_id)).to eq [bob.id] - end - it 'keeps old mentions as silent mentions' do - expect(status.mentions.pluck(:account_id)).to contain_exactly(alice.id, bob.id) + expect(status.active_mentions.pluck(:account_id)) + .to eq [bob.id] + expect(status.mentions.pluck(:account_id)) + .to contain_exactly(alice.id, bob.id) end end @@ -168,11 +157,9 @@ let!(:account) { Fabricate(:account) } let!(:status) { PostStatusService.new.call(account, text: 'Hello #foo') } - before do + it 'changes tags' do subject.call(status, status.account_id, text: 'Hello #bar') - end - it 'changes tags' do expect(status.tags.pluck(:name)).to eq %w(bar) end end From ebdeac0731c31b73438aaa369a234d9ac5798b43 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Oct 2024 10:15:14 -0400 Subject: [PATCH 226/467] Add coverage for missing status scenario in NotificationMailer (#32256) --- app/mailers/notification_mailer.rb | 2 +- spec/mailers/notification_mailer_spec.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 4c374f5d57fde1..a20992dcb56f19 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -86,7 +86,7 @@ def set_list_headers! end def thread_by_conversation! - return if @status.conversation.nil? + return if @status&.conversation.nil? conversation_message_id = "" diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 4c6107d9f76fce..d97c01858da6b9 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -14,6 +14,17 @@ end end + shared_examples 'delivery without status' do + context 'when notification target_status is missing' do + before { allow(notification).to receive(:target_status).and_return(nil) } + + it 'does not deliver mail' do + emails = capture_emails { mail.deliver_now } + expect(emails).to be_empty + end + end + end + let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) } let(:sender) { Fabricate(:account, username: 'bob') } let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } @@ -37,6 +48,7 @@ end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'follow' do @@ -75,6 +87,7 @@ end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'reblog' do @@ -95,6 +108,7 @@ end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'follow_request' do From 1f720366e94c175f171156a86d65787d6f0d7ba6 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Oct 2024 16:29:23 +0200 Subject: [PATCH 227/467] Fix notification push notifications not including the author's username (#32254) --- app/javascript/mastodon/locales/en.json | 1 + .../mastodon/service_worker/web_push_locales.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 1e78745359aa28..7f8dc74779824f 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Private reply", "notification.label.reply": "Reply", "notification.mention": "Mention", + "notification.mentioned_you": "{name} mentioned you", "notification.moderation-warning.learn_more": "Learn more", "notification.moderation_warning": "You have received a moderation warning", "notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.", diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js index 89ae20007bba39..3e39c9a4edf890 100644 --- a/app/javascript/mastodon/service_worker/web_push_locales.js +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -6,6 +6,12 @@ const fs = require('fs'); const path = require('path'); +const { defineMessages } = require('react-intl'); + +const messages = defineMessages({ + mentioned_you: { id: 'notification.mentioned_you', defaultMessage: '{name} mentioned you' }, +}); + const filtered = {}; const filenames = fs.readdirSync(path.resolve(__dirname, '../locales')); @@ -20,7 +26,7 @@ filenames.forEach(filename => { 'notification.favourite': full['notification.favourite'] || '', 'notification.follow': full['notification.follow'] || '', 'notification.follow_request': full['notification.follow_request'] || '', - 'notification.mention': full['notification.mention'] || '', + 'notification.mention': full[messages.mentioned_you.id] || '', 'notification.reblog': full['notification.reblog'] || '', 'notification.poll': full['notification.poll'] || '', 'notification.status': full['notification.status'] || '', From 51769e06708f79a485c444d139cbdbdd7249b0cb Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 4 Oct 2024 16:55:44 +0200 Subject: [PATCH 228/467] Fix media gallery items having incorrect borders when hidden (#32257) --- app/javascript/mastodon/components/media_gallery.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 1380d244ad9a92..e059978442a131 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -336,14 +336,14 @@ class MediaGallery extends PureComponent { return (
+ {children} + {(!visible || uncached) && (
{spoilerButton}
)} - {children} - {(visible && !uncached) && (
From c40ab43dc703be988c277d4ba6b7987a3a80e16c Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 4 Oct 2024 18:23:05 +0200 Subject: [PATCH 229/467] Remove redundant title attribute (#32258) --- .../mastodon/features/ui/components/column_link.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/column_link.jsx b/app/javascript/mastodon/features/ui/components/column_link.jsx index 3386c17f071f5e..f27ed50675a789 100644 --- a/app/javascript/mastodon/features/ui/components/column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/column_link.jsx @@ -15,7 +15,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text if (href) { return ( - + {active ? activeIconElement : iconElement} {text} {badgeElement} @@ -23,7 +23,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text ); } else { return ( - + {active ? activeIconElement : iconElement} {text} {badgeElement} From 2c54b91dd1a0f0a622ea88628d15c8b1bdda70f7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Oct 2024 08:53:29 +0200 Subject: [PATCH 230/467] Fix wrong width on logo in detailed link card in web UI (#32271) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 5f410ead931066..f2573683901042 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -10628,6 +10628,7 @@ noscript { gap: 8px; .logo { + width: 16px; height: 16px; color: $darker-text-color; } From 498024558ae8d4111b4c263901dfc105b3563ddc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 09:06:43 +0200 Subject: [PATCH 231/467] New Crowdin Translations (automated) (#32262) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 1 + app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/de.json | 3 +- app/javascript/mastodon/locales/en-GB.json | 5 ++ app/javascript/mastodon/locales/eo.json | 1 + app/javascript/mastodon/locales/es-AR.json | 1 + app/javascript/mastodon/locales/es-MX.json | 11 ++-- app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fo.json | 1 + app/javascript/mastodon/locales/fy.json | 15 +++++ app/javascript/mastodon/locales/gl.json | 1 + app/javascript/mastodon/locales/he.json | 19 +++--- app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/is.json | 4 ++ app/javascript/mastodon/locales/it.json | 6 ++ app/javascript/mastodon/locales/ja.json | 1 + app/javascript/mastodon/locales/ko.json | 1 + app/javascript/mastodon/locales/nl.json | 9 +-- app/javascript/mastodon/locales/nn.json | 1 + app/javascript/mastodon/locales/pl.json | 1 + app/javascript/mastodon/locales/pt-BR.json | 1 + app/javascript/mastodon/locales/sq.json | 1 + app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/th.json | 1 + app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/vi.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 1 + config/locales/activerecord.fy.yml | 6 ++ config/locales/ar.yml | 14 ----- config/locales/be.yml | 14 ----- config/locales/bg.yml | 14 ----- config/locales/ca.yml | 14 ----- config/locales/cs.yml | 14 ----- config/locales/cy.yml | 14 ----- config/locales/da.yml | 48 +++++++++++---- config/locales/de.yml | 48 +++++++++++---- config/locales/devise.eo.yml | 2 + config/locales/doorkeeper.fy.yml | 1 + config/locales/el.yml | 14 ----- config/locales/en-GB.yml | 51 +++++++++++---- config/locales/es-AR.yml | 48 +++++++++++---- config/locales/es-MX.yml | 64 +++++++++++++------ config/locales/es.yml | 48 +++++++++++---- config/locales/et.yml | 14 ----- config/locales/eu.yml | 14 ----- config/locales/fi.yml | 48 +++++++++++---- config/locales/fo.yml | 14 ----- config/locales/fr-CA.yml | 14 ----- config/locales/fr.yml | 14 ----- config/locales/fy.yml | 63 +++++++++++++++---- config/locales/ga.yml | 14 ----- config/locales/gd.yml | 14 ----- config/locales/gl.yml | 48 +++++++++++---- config/locales/he.yml | 72 ++++++++++++++++++---- config/locales/hu.yml | 48 +++++++++++---- config/locales/ia.yml | 14 ----- config/locales/ie.yml | 14 ----- config/locales/io.yml | 14 ----- config/locales/is.yml | 18 ++---- config/locales/it.yml | 48 +++++++++++---- config/locales/ja.yml | 19 ++---- config/locales/ko.yml | 36 +++++++---- config/locales/lad.yml | 14 ----- config/locales/lv.yml | 14 ----- config/locales/ms.yml | 14 ----- config/locales/my.yml | 14 ----- config/locales/nl.yml | 52 +++++++++++----- config/locales/nn.yml | 16 +---- config/locales/no.yml | 14 ----- config/locales/pl.yml | 14 ----- config/locales/pt-BR.yml | 14 ----- config/locales/pt-PT.yml | 14 ----- config/locales/ru.yml | 14 ----- config/locales/simple_form.fy.yml | 3 + config/locales/simple_form.nl.yml | 2 +- config/locales/sl.yml | 14 ----- config/locales/sq.yml | 48 +++++++++++---- config/locales/sr-Latn.yml | 14 ----- config/locales/sr.yml | 14 ----- config/locales/sv.yml | 14 ----- config/locales/th.yml | 14 ----- config/locales/tr.yml | 48 +++++++++++---- config/locales/uk.yml | 14 ----- config/locales/vi.yml | 36 +++++++---- config/locales/zh-CN.yml | 36 +++++++---- config/locales/zh-HK.yml | 14 ----- config/locales/zh-TW.yml | 36 +++++++---- 90 files changed, 788 insertions(+), 761 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index b79ac156e229ac..1b583b32044622 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Resposta en privat", "notification.label.reply": "Resposta", "notification.mention": "Menció", + "notification.mentioned_you": "{name} us ha mencionat", "notification.moderation-warning.learn_more": "Per a saber-ne més", "notification.moderation_warning": "Heu rebut un avís de moderació", "notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 659f807d050c59..e225bb30aefce1 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Privat svar", "notification.label.reply": "Besvar", "notification.mention": "Omtale", + "notification.mentioned_you": "{name} nævnte dig", "notification.moderation-warning.learn_more": "Læs mere", "notification.moderation_warning": "Du er tildelt en moderationsadvarsel", "notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 0b541b2e4804f3..3d8b57db4a654e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -62,7 +62,7 @@ "account.requested_follow": "{name} möchte dir folgen", "account.share": "Profil von @{name} teilen", "account.show_reblogs": "Geteilte Beiträge von @{name} anzeigen", - "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", + "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} posts}}", "account.unblock": "Blockierung von @{name} aufheben", "account.unblock_domain": "Blockierung von {domain} aufheben", "account.unblock_short": "Blockierung aufheben", @@ -516,6 +516,7 @@ "notification.label.private_reply": "Private Antwort", "notification.label.reply": "Antwort", "notification.mention": "Erwähnung", + "notification.mentioned_you": "{name} erwähnte dich", "notification.moderation-warning.learn_more": "Mehr erfahren", "notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt", "notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index b1d61ddd3dc746..da4c005203bc3f 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -852,6 +852,11 @@ "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people who are deaf or hard of hearing", "upload_form.description": "Describe for people who are blind or have low vision", + "upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.", + "upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.", + "upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.", "upload_form.edit": "Edit", "upload_form.thumbnail": "Change thumbnail", "upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 35c2a5c7448e46..5f6582fb68d123 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Privata respondo", "notification.label.reply": "Respondi", "notification.mention": "Mencii", + "notification.mentioned_you": "{name} menciis vin", "notification.moderation-warning.learn_more": "Lerni pli", "notification.moderation_warning": "Vi ricevis moderigan averton", "notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 609175d94f7460..7fec88a96e16ed 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te mencionó", "notification.moderation-warning.learn_more": "Aprendé más", "notification.moderation_warning": "Recibiste una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 7c2e4003380f9b..ddfdf6960b8daa 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te ha mencionado", "notification.moderation-warning.learn_more": "Saber más", "notification.moderation_warning": "Has recibido una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", @@ -852,11 +853,11 @@ "upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_form.audio_description": "Describir para personas con problemas auditivos", "upload_form.description": "Describir para los usuarios con dificultad visual", - "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.", - "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", - "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", - "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.", - "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", + "upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.", + "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", + "upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b8414893382ace..2aeb7d47eaf3a7 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te ha mencionado", "notification.moderation-warning.learn_more": "Saber más", "notification.moderation_warning": "Has recibido una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2e4cd661d5049c..ac7ab097fa33b0 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Yksityinen vastaus", "notification.label.reply": "Vastaus", "notification.mention": "Maininta", + "notification.mentioned_you": "{name} mainitsi sinut", "notification.moderation-warning.learn_more": "Lue lisää", "notification.moderation_warning": "Olet saanut moderointivaroituksen", "notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index c7e752d3783823..5ad8ba557b6858 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Privat svar", "notification.label.reply": "Svara", "notification.mention": "Umrøð", + "notification.mentioned_you": "{name} nevndi teg", "notification.moderation-warning.learn_more": "Lær meira", "notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring", "notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 1d71ef36c69d77..9fa2300fbc2d83 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Dataferkear beheind", "alert.unexpected.message": "Der is in ûnferwachte flater bard.", "alert.unexpected.title": "Oepsy!", + "alt_text_badge.title": "Alternative tekst", "announcement.announcement": "Oankundiging", "attachments_list.unprocessed": "(net ferwurke)", "audio.hide": "Audio ferstopje", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.", "domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.", "domain_block_modal.title": "Domein blokkearje?", + "domain_block_modal.you_will_lose_num_followers": "Jo ferlieze {followersCount, plural, one {{followersCountDisplay} folger} other {{followersCountDisplay} folgers}} en {followingCount, plural, one {{followingCountDisplay} persoan dy’t jo folgje} other {{followingCountDisplay} persoanen dy’t jo folgje}}.", + "domain_block_modal.you_will_lose_relationships": "Jo ferlieze alle folgers en minsken dy’t jo folgje fan dizze server.", "domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.", "domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.", @@ -433,6 +436,8 @@ "lightbox.close": "Slute", "lightbox.next": "Folgjende", "lightbox.previous": "Foarige", + "lightbox.zoom_in": "Oarspronklike grutte toane", + "lightbox.zoom_out": "Passend toane", "limited_account_hint.action": "Profyl dochs besjen", "limited_account_hint.title": "Dit profyl is troch de behearders fan {domain} ferstoppe.", "link_preview.author": "Troch {name}", @@ -454,6 +459,7 @@ "lists.subheading": "Jo listen", "load_pending": "{count, plural, one {# nij item} other {# nije items}}", "loading_indicator.label": "Lade…", + "media_gallery.hide": "Ferstopje", "moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.", "mute_modal.hide_from_notifications": "Meldingen ferstopje", "mute_modal.hide_options": "Opsjes ferstopje", @@ -510,6 +516,7 @@ "notification.label.private_reply": "Priveereaksje", "notification.label.reply": "Beäntwurdzje", "notification.mention": "Fermelding", + "notification.mentioned_you": "{name} hat dy fermeld", "notification.moderation-warning.learn_more": "Mear ynfo", "notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen", "notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.", @@ -774,6 +781,7 @@ "status.bookmark": "Blêdwizer tafoegje", "status.cancel_reblog_private": "Net langer booste", "status.cannot_reblog": "Dit berjocht kin net boost wurde", + "status.continued_thread": "Ferfolgje it petear", "status.copy": "Copy link to status", "status.delete": "Fuortsmite", "status.detailed_status": "Detaillearre petearoersjoch", @@ -782,6 +790,7 @@ "status.edit": "Bewurkje", "status.edited": "Lêst bywurke op {date}", "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke", + "status.embed": "Koade om op te nimmen", "status.favourite": "Favoryt", "status.favourites": "{count, plural, one {favoryt} other {favoriten}}", "status.filter": "Dit berjocht filterje", @@ -806,6 +815,7 @@ "status.reblogs.empty": "Net ien hat dit berjocht noch boost. Wannear’t ien dit docht, falt dat hjir te sjen.", "status.redraft": "Fuortsmite en opnij opstelle", "status.remove_bookmark": "Blêdwizer fuortsmite", + "status.replied_in_thread": "Antwurde yn petear", "status.replied_to": "Antwurde op {name}", "status.reply": "Beäntwurdzje", "status.replyAll": "Alle beäntwurdzje", @@ -843,6 +853,11 @@ "upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.", "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Describe for the visually impaired", + "upload_form.drag_and_drop.instructions": "Druk op spaasje of Enter om in mediabylage op te pakken. Bruk de pylktoetsen om de bylage yn in bepaalde rjochting te ferpleatsen. Druk opnij op de spaasjebalke of Enter om de mediabylage op de nije posysje te pleatsen, of druk op Esc om te annulearjen.", + "upload_form.drag_and_drop.on_drag_cancel": "Slepen is annulearre. Mediabylage {item} is net ferpleatst.", + "upload_form.drag_and_drop.on_drag_end": "Mediabylage {item} is net ferpleatst.", + "upload_form.drag_and_drop.on_drag_over": "Mediabylage {item} is ferpleatst.", + "upload_form.drag_and_drop.on_drag_start": "Mediabylage {item} is oppakt.", "upload_form.edit": "Bewurkje", "upload_form.thumbnail": "Miniatuerôfbylding wizigje", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 2a31bfa4638d79..27b4ad24607b81 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Resposta privada", "notification.label.reply": "Resposta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} mencionoute", "notification.moderation-warning.learn_more": "Saber máis", "notification.moderation_warning": "Recibiches unha advertencia da moderación", "notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 16f558e543e5a7..d9b0382f4ae8b8 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -1,5 +1,5 @@ { - "about.blocks": "שרתים שנחסמו על ידי המנהלים", + "about.blocks": "שרתים מוגבלים", "about.contact": "יצירת קשר:", "about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "הסיבה אינה זמינה", @@ -34,9 +34,9 @@ "account.follow_back": "לעקוב בחזרה", "account.followers": "עוקבים", "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", - "account.followers_counter": "{count, plural,one {עוקב אחד} other {{count} עוקבים}}", + "account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}", "account.following": "נעקבים", - "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {count}}}", + "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {counter}}}", "account.follows.empty": "משתמש זה עדיין לא עוקב אחרי אף אחד.", "account.go_to_profile": "מעבר לפרופיל", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", @@ -62,7 +62,7 @@ "account.requested_follow": "{name} ביקשו לעקוב אחריך", "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", - "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", + "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "account.unblock": "להסיר חסימה ל- @{name}", "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", "account.unblock_short": "הסר חסימה", @@ -349,9 +349,9 @@ "hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה", "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", - "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}", - "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", - "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום", + "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{counter} משתתפיםות}}", + "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", + "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום", "hashtag.follow": "לעקוב אחרי תגית", "hashtag.unfollow": "להפסיק לעקוב אחרי תגית", "hashtags.and_other": "…{count, plural,other {ועוד #}}", @@ -442,7 +442,7 @@ "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.", "link_preview.author": "מאת {name}", "link_preview.more_from_author": "עוד מאת {name}", - "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", + "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "lists.account.add": "הוסף לרשימה", "lists.account.remove": "הסר מרשימה", "lists.delete": "מחיקת רשימה", @@ -516,6 +516,7 @@ "notification.label.private_reply": "תשובה בפרטי", "notification.label.reply": "תשובה", "notification.mention": "אזכור", + "notification.mentioned_you": "אוזכרת על ידי {name}", "notification.moderation-warning.learn_more": "למידע נוסף", "notification.moderation_warning": "קיבלת אזהרה מצוות ניהול התוכן", "notification.moderation_warning.action_delete_statuses": "חלק מהודעותיך הוסרו.", @@ -840,7 +841,7 @@ "time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}", "time_remaining.moments": "רגעים נותרו", "time_remaining.seconds": "נותרו {number, plural, one {# שניה} other {# שניות}}", - "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{count} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}", + "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{counter} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}", "trends.trending_now": "נושאים חמים", "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.", "units.short.billion": "{count} מליארד", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index f9f403177c96dd..0fee79f8b502b4 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Privát válasz", "notification.label.reply": "Válasz", "notification.mention": "Említés", + "notification.mentioned_you": "{name} megemlített", "notification.moderation-warning.learn_more": "További információ", "notification.moderation_warning": "Moderációs figyelmeztetést kaptál", "notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index c78c5d78428216..bbd3a7a358ebd8 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Með takmörkum", "alert.unexpected.message": "Upp kom óvænt villa.", "alert.unexpected.title": "Úbbs!", + "alt_text_badge.title": "Hjálpartexti mynda", "announcement.announcement": "Auglýsing", "attachments_list.unprocessed": "(óunnið)", "audio.hide": "Fela hljóð", @@ -433,6 +434,8 @@ "lightbox.close": "Loka", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", + "lightbox.zoom_in": "Renna að raunstærð", + "lightbox.zoom_out": "Renna að svo passi", "limited_account_hint.action": "Birta notandasniðið samt", "limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.", "link_preview.author": "Frá {name}", @@ -511,6 +514,7 @@ "notification.label.private_reply": "Einkasvar", "notification.label.reply": "Svara", "notification.mention": "Minnst á", + "notification.mentioned_you": "{name} minntist á þig", "notification.moderation-warning.learn_more": "Kanna nánar", "notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni", "notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ef709516c23bee..885be73c62fd86 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Rispondi in privato", "notification.label.reply": "Rispondi", "notification.mention": "Menziona", + "notification.mentioned_you": "{name} ti ha menzionato", "notification.moderation-warning.learn_more": "Scopri di più", "notification.moderation_warning": "Hai ricevuto un avviso di moderazione", "notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.", @@ -852,6 +853,11 @@ "upload_error.poll": "Caricamento del file non consentito con i sondaggi.", "upload_form.audio_description": "Descrizione per persone con deficit uditivi", "upload_form.description": "Descrizione per ipovedenti", + "upload_form.drag_and_drop.instructions": "Per selezionare un allegato multimediale, premi Spazio o Invio. Mentre trascini, usa i tasti con le frecce per spostare l'allegato multimediale in una qualsiasi direzione. Premi di nuovo Spazio o Invio per rilasciare l'allegato multimediale nella sua nuova posizione, oppure premi Esc per annullare.", + "upload_form.drag_and_drop.on_drag_cancel": "Il trascinamento è stato annullato. L'allegato multimediale {item} è stato eliminato.", + "upload_form.drag_and_drop.on_drag_end": "L'allegato multimediale {item} è stato eliminato.", + "upload_form.drag_and_drop.on_drag_over": "L'allegato multimediale {item} è stato spostato.", + "upload_form.drag_and_drop.on_drag_start": "L'allegato multimediale {item} è stato ricevuto.", "upload_form.edit": "Modifica", "upload_form.thumbnail": "Cambia la miniatura", "upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 46444863acea18..1810314c8415c1 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -514,6 +514,7 @@ "notification.label.private_reply": "非公開の返信", "notification.label.reply": "返信", "notification.mention": "メンション", + "notification.mentioned_you": "{name} さんがあなたに返信しました", "notification.moderation-warning.learn_more": "さらに詳しく", "notification.moderation_warning": "管理者から警告が来ています", "notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e5e7dc2c17ff1e..edcbadd12d7a88 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "개인 답글", "notification.label.reply": "답글", "notification.mention": "멘션", + "notification.mentioned_you": "{name} 님의 멘션", "notification.moderation-warning.learn_more": "더 알아보기", "notification.moderation_warning": "중재 경고를 받았습니다", "notification.moderation_warning.action_delete_statuses": "게시물 몇 개가 삭제되었습니다.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 71523b37d8e73c..c0ca8f17665f82 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -516,10 +516,11 @@ "notification.label.private_reply": "Privéreactie", "notification.label.reply": "Reactie", "notification.mention": "Vermelding", + "notification.mentioned_you": "Je bent vermeld door {name}", "notification.moderation-warning.learn_more": "Meer informatie", "notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen", "notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.", - "notification.moderation_warning.action_disable": "Je account is uitgeschakeld.", + "notification.moderation_warning.action_disable": "Jouw account is uitgeschakeld.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.", "notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.", "notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.", @@ -531,11 +532,11 @@ "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht geboost", "notification.relationships_severance_event": "Verloren verbindingen met {name}", "notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.", - "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt.", + "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt.", "notification.relationships_severance_event.learn_more": "Meer informatie", - "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt, bent verloren.", + "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt, bent verloren.", "notification.status": "{name} heeft zojuist een bericht geplaatst", - "notification.update": "{name} heeft een bericht bewerkt", + "notification.update": "{name} bewerkte een bericht", "notification_requests.accept": "Accepteren", "notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren…} other {# verzoeken accepteren…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Verzoek accepteren} other {Verzoeken accepteren}}", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 69883a54953084..58ed018ba0d26f 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Privat svar", "notification.label.reply": "Svar", "notification.mention": "Omtale", + "notification.mentioned_you": "{name} nemnde deg", "notification.moderation-warning.learn_more": "Lær meir", "notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring", "notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 4dc74db8cbed73..c6555ebb76706b 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Odpowiedź prywatna", "notification.label.reply": "Odpowiedź", "notification.mention": "Wzmianka", + "notification.mentioned_you": "{name} wspomniał(a) o Tobie", "notification.moderation-warning.learn_more": "Dowiedz się więcej", "notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne", "notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index ab5701cde0c0a7..b6d2fe112eb3cc 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Resposta privada", "notification.label.reply": "Resposta", "notification.mention": "Menção", + "notification.mentioned_you": "{name} te mencionou", "notification.moderation-warning.learn_more": "Aprender mais", "notification.moderation_warning": "Você recebeu um aviso de moderação", "notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 15101be4718b3f..182f018873ed03 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Përgjigje private", "notification.label.reply": "Përgjigje", "notification.mention": "Përmendje", + "notification.mentioned_you": "{name} ju ka përmendur", "notification.moderation-warning.learn_more": "Mësoni më tepër", "notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi", "notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index b1e5a95edf55a2..298852100ca0d2 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -506,6 +506,7 @@ "notification.label.private_reply": "Privata svar", "notification.label.reply": "Svar", "notification.mention": "Nämn", + "notification.mentioned_you": "{name} nämnde dig", "notification.moderation-warning.learn_more": "Läs mer", "notification.moderation_warning": "Du har fått en moderationsvarning", "notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 160b6ec4e69be0..88c48bfb400758 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -512,6 +512,7 @@ "notification.label.private_reply": "การตอบกลับแบบส่วนตัว", "notification.label.reply": "การตอบกลับ", "notification.mention": "การกล่าวถึง", + "notification.mentioned_you": "{name} ได้กล่าวถึงคุณ", "notification.moderation-warning.learn_more": "เรียนรู้เพิ่มเติม", "notification.moderation_warning": "คุณได้รับคำเตือนการกลั่นกรอง", "notification.moderation_warning.action_delete_statuses": "เอาโพสต์บางส่วนของคุณออกแล้ว", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 36c0b68f00c075..937b3e8e19bde5 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Özel yanıt", "notification.label.reply": "Yanıt", "notification.mention": "Bahsetme", + "notification.mentioned_you": "{name} sizden söz etti", "notification.moderation-warning.learn_more": "Daha fazlası", "notification.moderation_warning": "Hesabınız bir denetim uyarısı aldı", "notification.moderation_warning.action_delete_statuses": "Bazı gönderileriniz kaldırıldı.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index a48b071f54f481..5a9d388f0bb3e6 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Приватна відповідь", "notification.label.reply": "Відповідь", "notification.mention": "Згадка", + "notification.mentioned_you": "{name} згадує вас", "notification.moderation-warning.learn_more": "Докладніше", "notification.moderation_warning": "Ви отримали попередження модерації", "notification.moderation_warning.action_delete_statuses": "Деякі з ваших дописів було вилучено.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 770dcbaef55bde..cf33a15d3236e3 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Trả lời riêng", "notification.label.reply": "Trả lời", "notification.mention": "Lượt nhắc", + "notification.mentioned_you": "{name} nhắc đến bạn", "notification.moderation-warning.learn_more": "Tìm hiểu", "notification.moderation_warning": "Bạn vừa nhận một cảnh báo kiểm duyệt", "notification.moderation_warning.action_delete_statuses": "Một vài tút của bạn bị gỡ.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 0a4505d4ee5482..74702e51276481 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "私人回复", "notification.label.reply": "回复", "notification.mention": "提及", + "notification.mentioned_you": "{name} 提到了你", "notification.moderation-warning.learn_more": "了解更多", "notification.moderation_warning": "你收到了一条管理警告", "notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 2047a69f44b8af..e93f7d5180ba62 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "私訊回嘟", "notification.label.reply": "回嘟", "notification.mention": "提及", + "notification.mentioned_you": "{name} 已提及您", "notification.moderation-warning.learn_more": "了解更多", "notification.moderation_warning": "您已收到管理員警告", "notification.moderation_warning.action_delete_statuses": "某些您的嘟文已被刪除。", diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml index b571ab60dc93df..69139eba1d47a4 100644 --- a/config/locales/activerecord.fy.yml +++ b/config/locales/activerecord.fy.yml @@ -15,6 +15,12 @@ fy: user/invite_request: text: Reden errors: + attributes: + domain: + invalid: is in ûnjildige domeinnamme + messages: + invalid_domain_on_line: "%{value} is in ûnjildige domeinnamme" + too_many_lines: giet oer de limyt fan %{limit} rigels models: account: attributes: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 829855776d9afa..1a6f0da8c669bb 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1394,20 +1394,6 @@ ar: merge_long: الإبقاء علي التسجيلات الحالية وإضافة الجديدة overwrite: إعادة الكتابة overwrite_long: استبدال التسجيلات الحالية بالجديدة - overwrite_preambles: - blocking_html: أنت على وشك استبدال قائمة الحظر بما يصل إلى %{total_items} من الحسابات من %{filename}. - bookmarks_html: أنت على وشك استبدال إشاراتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}. - domain_blocking_html: أنت على وشك إرشاداتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}. - following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename} والتوقف عن متابعة أي شخص آخر. - lists_html: إنّك بصدد استبدال قوائمك بمحتوى مِلَفّ %{filename}. ما يُقارِب %{total_items} حسابًا سوف تُضاف إلى قوائم جديدة. - muting_html: أنت على وشك استبدال قائمة الحسابات الصامتة بما يصل إلى %{total_items} من الحسابات من %{filename}. - preambles: - blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من الحسابات من %{filename}. - bookmarks_html: أنت على وشك إضافة ما يصل إلى %{total_items} من المشاركات من %{filename} إلى إشاراتك المرجعية. - domain_blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من النطاقات من %{filename}. - following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename}. - lists_html: أنت على وشك إضافة ما يصل إلى %{total_items} حسابات من %{filename} إلى قوائمك. سيتم إنشاء قوائم جديدة في حالة عدم وجود قائمة للإضافة إليها. - muting_html: أنت على وشك تجاهل ما يصل إلى %{total_items} من الحسابات من %{filename}. preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم. recent_imports: الاستيرادات الحديثة states: diff --git a/config/locales/be.yml b/config/locales/be.yml index d1d3e17679f2d6..b627672b2d12c9 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1391,20 +1391,6 @@ be: merge_long: Захаваць існуючыя запісы і дадаць новыя overwrite: Перазапісаць overwrite_long: Замяніць бягучыя запісы на новыя - overwrite_preambles: - blocking_html: Вы збіраецеся замяніць свой спіс блакіровак на %{total_items} уліковых запісаў з файла %{filename}. - bookmarks_html: Вы збіраецеся замяніць свае закладкі на %{total_items} допісаў з файла %{filename}. - domain_blocking_html: Вы збіраецеся замяніць свой спіс блакіроўкі даменаў на %{total_items} даменаў з файла %{filename}. - following_html: Вы збіраецеся падпісацца на %{total_items} уліковых запісаў з файла %{filename} і адпісацца ад усіх іншых карыстальнікаў. - lists_html: Вы збіраецеся замяніць свае спісы змесцівам з %{filename}. Да %{total_items} уліковых запісаў будуць дададзены ў новыя спісы. - muting_html: Вы збіраецеся замяніць свой спіс ігнараваных уліковых запісаў на %{total_items} уліковых запісаў з файла %{filename}. - preambles: - blocking_html: Вы збіраецеся заблакіраваць да %{total_items} уліковых запісаў з файла%{filename}. - bookmarks_html: Вы збіраецеся дадаць да %{total_items} паведамленняў з файла %{filename} у вашы закладкі. - domain_blocking_html: Вы збіраецеся заблакіраваць да %{total_items} даменаў з файла %{filename}. - following_html: Вы збіраецеся падпісацца на%{total_items} уліковых запісаў з файла %{filename}. - lists_html: Вы збіраецеся дадаць да %{total_items} уліковых запісаў з %{filename} у вашы спісы. Новыя спісы будуць створаны, калі іх няма. - muting_html: Вы збіраецеся ігнараваць да %{total_items} уліковых запісаў з файла %{filename}. preface: Вы можаце імпартаваць даныя, экспартаваныя вамі з іншага сервера, напрыклад, спіс людзей, на якіх вы падпісаны або якіх блакуеце. recent_imports: Нядаўнія імпарты states: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 00b3a41167cec1..1fdd0e3533bcde 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1300,20 +1300,6 @@ bg: merge_long: Пази текущите записи и добавя нови overwrite: Презаписване overwrite_long: Заменя текущите записи с новите - overwrite_preambles: - blocking_html: На път сте да замените списъка си с блокирани с до %{total_items} акаунта от %{filename}. - bookmarks_html: На път сте да замените списъка си с отметки с до %{total_items} публикации от %{filename}. - domain_blocking_html: На път сте да замените списъка си с блокирани домейни с до %{total_items} домейна от %{filename}. - following_html: На път сте да последвате до %{total_items} акаунта от %{filename} и да спрете да следвате някой друг. - lists_html: На път сте да замените списъците си със съдържание от %{filename}. До %{total_items} акаунта ще се добавят към новите списъци. - muting_html: На път сте да замените списъка си със заглушени акаунти с до %{total_items} акаунта от %{filename}. - preambles: - blocking_html: На път сте да блокирате до %{total_items} акаунта от %{filename}. - bookmarks_html: На път сте да добавите до %{total_items} публикации от %{filename} в отметките си. - domain_blocking_html: На път сте да блокирате до %{total_items} домейна от %{filename}. - following_html: На път сте да последвате до %{total_items} акаунта от %{filename}. - lists_html: На път сте да добавите до %{total_items} акаунта от %{filename} към вашите списъци. Нови списъци ще се сътворят, ако няма списъци за добавяне. - muting_html: На път сте да заглушите до %{total_items} акаунта от %{filename}. preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция. recent_imports: Скорошни внасяния states: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index ced8de4ef28a76..bb81aaa59c50fc 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1365,20 +1365,6 @@ ca: merge_long: Mantenir els registres existents i afegir-ne de nous overwrite: Sobreescriu overwrite_long: Reemplaça els registres actuals amb els nous - overwrite_preambles: - blocking_html: Ets a punt per a reemplaçar la teva llista de bloquejos de fins a %{total_items} comptes des de %{filename}. - bookmarks_html: Ets a punt de reemplaçar els teus marcadors de fins a %{total_items} tuts des de %{filename}. - domain_blocking_html: Ets a punt de reemplaçar la teva llista de dominis bloquejats de fins a %{total_items} dominis des de %{filename}. - following_html: Ets a punt de seguir fins a %{total_items} comptes des de %{filename} i deixar de seguir a la resta. - lists_html: Estàs a punt de reemplaçar les teves llistes amb contactes de %{filename}. S'afegiran fins a %{total_items} comptes a les noves llistes. - muting_html: Ets a punt de reemplaçar la teva llista de comptes silenciats de fins a %{total_items} comptes des de %{filename}. - preambles: - blocking_html: Ets a punt de bloquejar fins a %{total_items} comptes des de %{filename}. - bookmarks_html: Ets a punt d'afegir fins a %{total_items} tuts des de %{filename} als teus marcadors. - domain_blocking_html: Ets a punt de bloquejar fins a %{total_items} dominis des de %{filename}. - following_html: Ets a punt de seguir fins a %{total_items} comptes des de %{filename}. - lists_html: Estàs a punt d'afegir %{total_items} comptes de %{filename} a les teves llistes. Es crearan noves llistes si no hi ha cap llista on afegir-los. - muting_html: Ets a punt de silenciar fins a %{total_items} comptes des de %{filename}. preface: Pots importar algunes les dades que has exportat des d'un altre servidor, com ara el llistat de les persones que estàs seguint o bloquejant. recent_imports: Importacions recents states: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 91fa517944d17c..15211b928a433e 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1348,20 +1348,6 @@ cs: merge_long: Ponechat existující záznamy a přidat nové overwrite: Přepsat overwrite_long: Nahradit aktuální záznamy novými - overwrite_preambles: - blocking_html: Chystáte se nahradit váš seznam bloků s %{total_items} účtami od %{filename}. - bookmarks_html: Chystáte se nahradit své záložky s %{total_items} příspěvků z %{filename}. - domain_blocking_html: Chystáte se nahradit seznam stránek s %{total_items} stránek z %{filename}. - following_html: Chystáte se sledovat%{total_items} účtů z %{filename} a přestanete sledovat všechny ostatní. - lists_html: Chystáte se nahradit své seznamy obsahem %{filename}. Až %{total_items} účtů budou přidány do nových seznamů. - muting_html: Chystáte se nahradit seznam skrytých účtů s %{total_items} účtami z %{filename}. - preambles: - blocking_html: Chystáte se blokovat%{total_items} účtů z %{filename}. - bookmarks_html: Chystáte se přidat až %{total_items} příspěvků z %{filename} do vašich záložek. - domain_blocking_html: Chystáte se blokovat%{total_items} stránek z %{filename}. - following_html: Chystáte se sledovat%{total_items} účtů z %{filename}. - lists_html: Chystáte se přidat %{total_items} účtů z %{filename} do vaších seznamů. Nové seznamy budou vytvořeny, pokud neexistuje žádný seznam, do kterého by bylo možné přidat. - muting_html: Chystáte se skrýt%{total_items} účtů z %{filename}. preface: Můžete importovat data, která jste exportovali z jiného serveru, jako například seznam lidí, které sledujete či blokujete. recent_imports: Nedávné importy states: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index a70d08ed8e5ef0..d57ef38696f48a 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1465,20 +1465,6 @@ cy: merge_long: Cadw'r cofnodion presennol ac ychwanegu rhai newydd overwrite: Trosysgrifio overwrite_long: Amnewid y cofnodion cyfredol gyda'r rhai newydd - overwrite_preambles: - blocking_html: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{total_items} o gyfrifon o %{filename} . - bookmarks_html: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{total_items} o bostiadau gan %{filename} . - domain_blocking_html: Rydych ar fin amnewid eich rhestr rhwystro parth gyda hyd at %{total_items} parth o %{filename} . - following_html: Rydych ar fin dilyn hyd at %{total_items} o gyfrifon o %{filename} a pheidio a ddilyn unrhyw un arall . - lists_html: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename} . Bydd hyd at %{total_items} o gyfrifon yn cael eu hychwanegu at restrau newydd. - muting_html: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{total_items} o gyfrifon o %{filename} . - preambles: - blocking_html: Rydych ar fin rhwystro hyd at %{total_items} o gyfrifon o %{filename} . - bookmarks_html: Rydych ar fin ychwanegu hyd at %{total_items} o bostiadau o %{filename} at eich nodau tudalen . - domain_blocking_html: Rydych ar fin rhwystro hyd at %{total_items} parth o %{filename} . - following_html: Rydych ar fin dilyn hyd at %{total_items} cyfrif gan %{filename} . - lists_html: Rydych ar fin ychwanegu hyd at %{total_items} o gyfrifon o %{filename} at eich rhestrau . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. - muting_html: Rydych ar fin anwybyddu hyd at %{total_items} cyfrif o %{filename}. preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio. recent_imports: Mewnforion diweddar states: diff --git a/config/locales/da.yml b/config/locales/da.yml index 0da901d4a8c48c..1f80503e91784e 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1366,19 +1366,43 @@ da: overwrite: Overskriv overwrite_long: Erstat aktuelle poster med de nye overwrite_preambles: - blocking_html: Du er ved at erstatte bloklisten med op til %{total_items} konti fra %{filename}. - bookmarks_html: Du er ved at erstatte bogmærkelisten med op til %{total_items} emner fra %{filename}. - domain_blocking_html: Du er ved at erstatte domæneblokeringslisten med op til %{total_items} domæner fra %{filename}. - following_html: Du er ved at følge op til %{total_items} konti fra %{filename} og stoppe med at følge alle andre. - lists_html: Du er ved at erstatte dine lister med indholdet af %{filename}. Op til %{total_items} konti tilføjes nye lister. - muting_html: Du er ved at erstatte listen over tavsgjorte konti med op til %{total_items} konti fra %{filename}. + blocking_html: + one: Man er ved at erstatte sin sortliste med %{count} konto fra %{filename}. + other: Man er ved at erstatte sin sortliste med optil %{count} konti fra %{filename}. + bookmarks_html: + one: Man er ved at erstatte sine bogmærker med %{count} post fra %{filename}. + other: Man er ved at erstatte sine bogmærker med op til %{count} poster fra %{filename}. + domain_blocking_html: + one: Man er ved at erstatte sin domænesortliste med %{count} domæne fra %{filename}. + other: Man er ved at erstatte sin domænesortliste med op til %{count} domæner fra %{filename}. + following_html: + one: Man er ved at følge %{count} konto fra %{filename} og stoppe med at følge andre. + other: Man er ved at følge %{count} konti fra %{filename} og stoppe med at følge andre. + lists_html: + one: Man er ved at erstatte sine lister med indhold fra %{filename}. %{count} konto føjes til nye lister. + other: Man er ved at erstatte sine lister med indhold fra %{filename}. Op til %{count} konti føjes til nye lister. + muting_html: + one: Man er ved at sin liste over en tavsgjort konto med %{count} konto fra %{filename}. + other: Man er ved at sin liste over tavsgjorte konti med op til %{count} konti fra %{filename}. preambles: - blocking_html: Du er ved at blokere op til %{total_items} konti fra %{filename}. - bookmarks_html: Du er ved at føje op til %{total_items} indlæg fra %{filename} til bogmærkelisten. - domain_blocking_html: Du er ved at blokere op til %{total_items} domæner fra %{filename}. - following_html: Du er ved at følge op til %{total_items} konti fra %{filename}. - lists_html: Du er ved at tilføje op til %{total_items} konti fra %{filename} til dine lister. Nye lister oprettes, hvis der ikke er nogen liste at føje konti til. - muting_html: Du er ved at tavsgøre op til %{total_items} konti fra %{filename}. + blocking_html: + one: Man er ved at blokere %{count} konto fra %{filename}. + other: Man er ved at blokere op til %{count} konti fra %{filename}. + bookmarks_html: + one: Man er ved at tilføje %{count} post fra %{filename} til sine bogmærker. + other: Man er ved at tilføje %{count} poster fra %{filename} til sine bogmærker. + domain_blocking_html: + one: Man er ved at blokere %{count} domæne fra %{filename}. + other: Man er ved at blokere op til %{count} domæner fra %{filename}. + following_html: + one: Man er ved at følge %{count} konto fra %{filename}. + other: Man er ved at følge op til%{count} konti fra %{filename}. + lists_html: + one: Man er ved at tilføje %{count} konto fra %{filename} til sine lister. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til. + other: Man er ved at tilføje %{count} konti fra %{filename} til sine lister. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til. + muting_html: + one: Man er ved at tavsgøre %{count} konto fra %{filename}. + other: Man er ved at tavsgøre op til %{count} konto fra %{filename}. preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer. recent_imports: Seneste importer states: diff --git a/config/locales/de.yml b/config/locales/de.yml index 7a8469df614887..5f0b4ae353d9a9 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1366,19 +1366,43 @@ de: overwrite: Überschreiben overwrite_long: Bestehende Datensätze durch neue ersetzen overwrite_preambles: - blocking_html: Du bist dabei, deine Liste blockierter Konten durch bis zu %{total_items} Konten aus %{filename} zu ersetzen. - bookmarks_html: Du bist dabei, deine Lesezeichen durch bis zu %{total_items} Beiträge aus %{filename} zu ersetzen. - domain_blocking_html: Du bist dabei, deine Liste blockierter Domains durch bis zu %{total_items} Domains aus %{filename} zu ersetzen. - following_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu folgen und niemand anderes zu folgen. - lists_html: Du bist dabei, deine Listen durch den Inhalt aus %{filename} zu ersetzen. Es werden bis zu %{total_items} Konten zu neuen Listen hinzugefügt. - muting_html: Du bist dabei, deine Liste stummgeschalteter Konten durch bis zu %{total_items} Konten aus %{filename} zu ersetzen. + blocking_html: + one: Du bist dabei, deine Liste blockierter Konten aus %{filename} durch bis zu %{count} Konto zu ersetzen. + other: Du bist dabei, deine Liste blockierter Konten aus %{filename} durch bis zu %{count} Konten zu ersetzen. + bookmarks_html: + one: Du bist dabei, deine Lesezeichen aus %{filename} durch bis zu %{count} Beitrag zu ersetzen. + other: Du bist dabei, deine Lesezeichen aus %{filename} durch bis zu %{count} Beiträge zu ersetzen. + domain_blocking_html: + one: Du bist dabei, deine Liste blockierter Domains aus %{filename} durch bis zu %{count} Domain zu ersetzen. + other: Du bist dabei, deine Liste blockierter Domains aus %{filename} durch bis zu %{count} Domains zu ersetzen. + following_html: + one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu folgen und allen anderen zu entfolgen. + other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu folgen und allen anderen zu entfolgen. + lists_html: + one: Du bist dabei, deine Listen mit dem Inhalt aus %{filename} zu ersetzen. Bis zu %{count} Konto wird zu neuen Listen hinzugefügt. + other: Du bist dabei, deine Listen mit dem Inhalt aus %{filename} zu ersetzen. Bis zu %{count} Konten wird zu neuen Listen hinzugefügt. + muting_html: + one: Du bist dabei, deine Liste mit einem stummgeschalteten Konto aus %{filename} durch bis zu %{count} Konto zu ersetzen. + other: Du bist dabei, deine Liste stummgeschalteter Konten aus %{filename} durch bis zu %{count} Konten zu ersetzen. preambles: - blocking_html: Du bist dabei, bis zu %{total_items}%{total_items} Konten aus %{filename} zu blockieren. - bookmarks_html: Du bist dabei, bis zu %{total_items} Beiträge aus %{filename} zu deinen Lesezeichen hinzuzufügen. - domain_blocking_html: Du bist dabei, bis zu %{total_items} Domains aus %{filename} zu blockieren. - following_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu folgen. - lists_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Liste gibt, zu der etwas hinzugefügt werden kann, dann werden neue Listen erstellt. - muting_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} stummzuschalten. + blocking_html: + one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu blockieren. + other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu blockieren. + bookmarks_html: + one: Du bist dabei, bis zu %{count} Beitrag aus %{filename} zu deinen Lesezeichen hinzuzufügen. + other: Du bist dabei, bis zu %{count} Beiträge aus %{filename} zu deinen Lesezeichen hinzuzufügen. + domain_blocking_html: + one: Du bist dabei, bis zu %{count} Domain aus %{filename} zu blockieren. + other: Du bist dabei, bis zu %{count} Domains aus %{filename} zu blockieren. + following_html: + one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu folgen. + other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu folgen. + lists_html: + one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Listen gibt, zu denen etwas hinzugefügt werden kann, dann werden neue Listen erstellt. + other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Listen gibt, zu denen etwas hinzugefügt werden kann, dann werden neue Listen erstellt. + muting_html: + one: Du bist dabei, bis zu %{count} Konto aus %{filename} stummzuschalten. + other: Du bist dabei, bis zu %{count} Konten aus %{filename} stummzuschalten. preface: Daten, die du von einem Mastodon-Server exportiert hast, kannst du hierher importieren. Das betrifft beispielsweise die Listen von Profilen, denen du folgst oder die du blockiert hast. recent_imports: Zuletzt importiert states: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 9d946967e9cba9..43aef271f9ba14 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -73,9 +73,11 @@ eo: title: Unu el viaj sekurecaj ŝlosiloj estis forigita webauthn_disabled: explanation: Aŭtentigo per sekurecaj ŝlosiloj estas malŝaltita por via konto. + extra: Ensaluto nun eblas uzante nur la ĵetonon generitan de la parigita tempbazita unufoja pasvorta aplikaĵo. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita' title: Sekurecaj ŝlosiloj malaktivigitaj webauthn_enabled: + explanation: Sekurecŝlosila aŭtentigo estas ebligita por via konto. extra: Via sekureca ŝlosilo nun povas esti uzata por ensaluto. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita' title: Sekurecaj ŝlosiloj aktivigitaj diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml index 94e67d17a60763..180c7e733f119b 100644 --- a/config/locales/doorkeeper.fy.yml +++ b/config/locales/doorkeeper.fy.yml @@ -60,6 +60,7 @@ fy: error: title: Der is in flater bard new: + prompt_html: "%{client_name} freget om tagong ta jo account. Keur dit fersyk allinnich goed as jo dizze boarne werkenne en fertrouwe." review_permissions: Tastimmingen beoardiele title: Autorisaasje fereaske show: diff --git a/config/locales/el.yml b/config/locales/el.yml index 4496ec51a67f8a..0df31b246f9d7e 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1322,20 +1322,6 @@ el: merge_long: Διατήρηση των εγγράφων που υπάρχουν και προσθήκη των νέων overwrite: Αντικατάσταση overwrite_long: Αντικατάσταση των υπαρχόντων εγγράφων με τις καινούργιες - overwrite_preambles: - blocking_html: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών με έως και %{total_items} λογαριασμούς από το %{filename}. - bookmarks_html: Πρόκειται να αντικαταστήσεις τους σελιδοδείκτες σου με έως και %{total_items} αναρτήσεις από το %{filename}. - domain_blocking_html: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών τομέων με έως και %{total_items} τομείς από το %{filename}. - following_html: Πρόκειται να ακολουθήσεις μέχρι %{total_items} λογαριασμούς από το %{filename} και να σταματήσεις να ακολουθείς οποιονδήποτε άλλο. - lists_html: Πρόκειται να αντικαταστήσεις τις λίστες σου με περιεχόμενο του %{filename}. Μέχρι %{total_items} λογαριασμοί θα προστεθούν σε νέες λίστες. - muting_html: Πρόκειται να αντικαταστήσεις τη λίστα λογαριασμών σε σίγαση με έως και %{total_items} λογαριασμούς από το %{filename}. - preambles: - blocking_html: Πρόκειται να αποκλείσεις έως και %{total_items} λογαριασμούς από το %{filename}. - bookmarks_html: Πρόκειται να προσθέσεις μέχρι και %{total_items} αναρτήσεις από το %{filename} στους σελιδοδείκτες σου. - domain_blocking_html: Πρόκειται να αποκλείσεις έως και %{total_items} τομείς από το %{filename}. - following_html: Πρόκειται να ακολουθήσεις έως και %{total_items} λογαριασμούς από το %{filename}. - lists_html: Πρόκειται να προσθέσεις μέχρι και %{total_items} λογαριασμούς από το %{filename} στις λίστες σου. Θα δημιουργηθούν νέες λίστες αν δεν υπάρχει λίστα για προσθήκη. - muting_html: Πρόκειται να κάνεις σίγαση σε έως και %{total_items} λογαριασμούς από το %{filename}. preface: Μπορείς να εισάγεις τα δεδομένα που έχεις εξάγει από άλλο διακομιστή, όπως τη λίστα των ατόμων που ακολουθείς ή έχεις αποκλείσει. recent_imports: Πρόσφατες Εισαγωγές states: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index fbd48d1c316097..65b2e6f71a01ee 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -875,6 +875,9 @@ en-GB: message_html: You haven't defined any server rules. sidekiq_process_check: message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration + software_version_check: + action: See available updates + message_html: A Mastodon update is available. software_version_critical_check: action: See available updates message_html: A critical Mastodon update is available, please update as quickly as possible. @@ -1363,19 +1366,43 @@ en-GB: overwrite: Overwrite overwrite_long: Replace current records with the new ones overwrite_preambles: - blocking_html: You are about to replace your block list with up to %{total_items} accounts from %{filename}. - bookmarks_html: You are about to replace your bookmarks with up to %{total_items} posts from %{filename}. - domain_blocking_html: You are about to replace your domain block list with up to %{total_items} domains from %{filename}. - following_html: You are about to follow up to %{total_items} accounts from %{filename} and stop following anyone else. - lists_html: You are about to replace your lists with contents of %{filename}. Up to %{total_items} accounts will be added to new lists. - muting_html: You are about to replace your list of muted accounts with up to %{total_items} accounts from %{filename}. + blocking_html: + one: You are about to replace your block list with up to %{count} account from %{filename}. + other: You are about to replace your block list with up to %{count} accounts from %{filename}. + bookmarks_html: + one: You are about to replace your bookmarks with up to %{count} post from %{filename}. + other: You are about to replace your bookmarks with up to %{count} posts from %{filename}. + domain_blocking_html: + one: You are about to replace your domain block list with up to %{count} domain from %{filename}. + other: You are about to replace your domain block list with up to %{count} domains from %{filename}. + following_html: + one: You are about to follow up to %{count} account from %{filename} and stop following anyone else. + other: You are about to follow up to %{count} accounts from %{filename} and stop following anyone else. + lists_html: + one: You are about to replace your lists with contents of %{filename}. Up to %{count} account will be added to new lists. + other: You are about to replace your lists with contents of %{filename}. Up to %{count} accounts will be added to new lists. + muting_html: + one: You are about to replace your list of muted account with up to %{count} account from %{filename}. + other: You are about to replace your list of muted accounts with up to %{count} accounts from %{filename}. preambles: - blocking_html: You are about to block up to %{total_items} accounts from %{filename}. - bookmarks_html: You are about to add up to %{total_items} posts from %{filename} to your bookmarks. - domain_blocking_html: You are about to block up to %{total_items} domains from %{filename}. - following_html: You are about to follow up to %{total_items} accounts from %{filename}. - lists_html: You are about to add up to %{total_items} accounts from %{filename} to your lists. New lists will be created if there is no list to add to. - muting_html: You are about to mute up to %{total_items} accounts from %{filename}. + blocking_html: + one: You are about to block up to %{count} account from %{filename}. + other: You are about to block up to %{count} accounts from %{filename}. + bookmarks_html: + one: You are about to add up to %{count} post from %{filename} to your bookmarks. + other: You are about to add up to %{count} posts from %{filename} to your bookmarks. + domain_blocking_html: + one: You are about to block up to %{count} domain from %{filename}. + other: You are about to block up to %{count} domains from %{filename}. + following_html: + one: You are about to follow up to %{count} account from %{filename}. + other: You are about to follow up to %{count} accounts from %{filename}. + lists_html: + one: You are about to add up to %{count} account from %{filename} to your lists. New lists will be created if there is no list to add to. + other: You are about to add up to %{count} accounts from %{filename} to your lists. New lists will be created if there is no list to add to. + muting_html: + one: You are about to mute up to %{count} account from %{filename}. + other: You are about to mute up to %{count} accounts from %{filename}. preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking. recent_imports: Recent imports states: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 49b8f288fa0436..cfc24ce270ca28 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1366,19 +1366,43 @@ es-AR: overwrite: Sobrescribir overwrite_long: Reemplazar registros actuales con los nuevos overwrite_preambles: - blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}. - bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} mensajes provenientes de %{filename}. - domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. - lists_html: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{total_items} cuentas a listas nuevas. - muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas provenientes de %{filename}. + blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuenta provenientes de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Estás a punto de reemplazar tus marcadores por hasta %{count} mensaje provenientes de %{filename}. + other: Estás a punto de reemplazar tus marcadores por hasta %{count} mensajes provenientes de %{filename}. + domain_blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominio provenientes de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir hasta %{count} cuenta provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + lists_html: + one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{count} cuenta a listas nuevas. + other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{count} cuentas a listas nuevas. + muting_html: + one: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuenta provenientes de %{filename}. + other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}. preambles: - blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas provenientes de %{filename}. - bookmarks_html: Está a punto de agregar hasta %{total_items} mensajes provenientes de %{filename} a tus marcadores. - domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}. - lists_html: Estás a punto de agregar hasta %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cual agregar. - muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}. + blocking_html: + one: Estás a punto de bloquear hasta %{count} cuenta provenientes de %{filename}. + other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Está a punto de agregar hasta %{count} mensaje provenientes de %{filename} a tus marcadores. + other: Está a punto de agregar hasta %{count} mensajes provenientes de %{filename} a tus marcadores. + domain_blocking_html: + one: Estás a punto de bloquear hasta %{count} dominio provenientes de %{filename}. + other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir hasta %{count} cuenta provenientes de %{filename}. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}. + lists_html: + one: Estás a punto de agregar hasta %{count} cuenta desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cuál agregar. + other: Estás a punto de agregar hasta %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cuál agregar. + muting_html: + one: Estás a punto de silenciar hasta %{count} cuenta provenientes de %{filename}. + other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}. preface: Podés importar ciertos datos que exportaste desde otro servidor, como una lista de las cuentas que estás siguiendo o bloqueando. recent_imports: Importaciones recientes states: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 0f4c8452c007dc..4e7ee657e60b60 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -180,21 +180,21 @@ es-MX: confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia create_announcement: Crear Anuncio - create_canonical_email_block: Crear Bloqueo de Correo Electrónico + create_canonical_email_block: Crear bloqueo de correo electrónico create_custom_emoji: Crear Emoji Personalizado create_domain_allow: Crear Permiso de Dominio create_domain_block: Crear Bloqueo de Dominio - create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico + create_email_domain_block: Crear bloqueo de dominio de correo electrónico create_ip_block: Crear regla IP create_unavailable_domain: Crear Dominio No Disponible create_user_role: Crear rol demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio - destroy_canonical_email_block: Eliminar Bloqueo de Correo Electrónico + destroy_canonical_email_block: Eliminar bloqueo de correo electrónico destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permiso de Dominio destroy_domain_block: Eliminar Bloqueo de Dominio - destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico + destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico destroy_instance: Purgar dominio destroy_ip_block: Eliminar regla IP destroy_status: Eliminar Estado @@ -876,8 +876,8 @@ es-MX: sidekiq_process_check: message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq software_version_check: - action: Ver actualizaciones disponibles - message_html: Hay disponible una actualización de Mastodon. + action: Ver las actualizaciones disponibles + message_html: Ya está disponible una actualización de Mastodon. software_version_critical_check: action: Ver actualizaciones disponibles message_html: Una actualización crítica de Mastodon está disponible, por favor actualice lo antes posible. @@ -1366,19 +1366,43 @@ es-MX: overwrite: Sobrescribir overwrite_long: Reemplazar registros actuales con los nuevos overwrite_preambles: - blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}. - bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}. - domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. - lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. %{total_items} cuentas se añadirán a listas nuevas. - muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}. + blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos por %{count} cuenta proveniente de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Estás a punto de reemplazar tus marcadores por %{count} publicación proveniente de %{filename}. + other: Estás a punto de reemplazar tus marcadores por hasta %{count} publicaciones provenientes de %{filename}. + domain_blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos de dominio por %{count} dominio proveniente de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename} y dejar de seguir a cualquier otra cuenta. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + lists_html: + one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirá %{count} cuenta a una nueva lista. + other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirán %{count} cuentas a nuevas listas. + muting_html: + one: Estás a punto de reemplazar tu lista de cuentas silenciadas con %{count} cuenta proveninete de %{filename}. + other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}. preambles: - blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}. - bookmarks_html: Estás a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores. - domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}. - lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas. - muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}. + blocking_html: + one: Estás a punto de bloquear a %{count} cuenta proveninete de %{filename}. + other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Está a punto de añadir %{count} publicación proveniente de %{filename} a tus marcadores. + other: Está a punto de añadir hasta %{count} publicaciones provenientes de %{filename} a tus marcadores. + domain_blocking_html: + one: Estás a punto de bloquear %{count} dominio proveniente de %{filename}. + other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename}. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}. + lists_html: + one: Estás a punto de añadir %{count} cuenta desde %{filename} a tus listas. Se creará una nueva listas si no hay listas donde añadirla. + other: Estás a punto de añadir %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas donde añadirlas. + muting_html: + one: Estás a punto de silenciar a %{count} cuenta proveniente de %{filename}. + other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}. preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia. recent_imports: Importaciones recientes states: @@ -1453,8 +1477,8 @@ es-MX: emails: notification_emails: favourite: correos de notificación de favoritos - follow: correos de notificación de nuevos seguidores - follow_request: correos de notificación de solicitud de seguidor + follow: correos electrónicos de notificación de seguimiento + follow_request: correos electrónicos de solicitud de seguimiento mention: correos de notificación de menciones reblog: correos de notificación de impulsos resubscribe_html: Si te has dado de baja por error, puedes volver a darte de alta desde tus ajustes de notificaciones por correo. diff --git a/config/locales/es.yml b/config/locales/es.yml index aa18e7b52eb916..bb9e5daff5b496 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1366,19 +1366,43 @@ es: overwrite: Sobrescribir overwrite_long: Reemplazar registros actuales con los nuevos overwrite_preambles: - blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}. - bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}. - domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. - lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. Se añadirán %{total_items} cuentas a nuevas listas. - muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}. + blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos por %{count} cuenta proveniente de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Estás a punto de reemplazar tus marcadores por %{count} publicación proveniente de %{filename}. + other: Estás a punto de reemplazar tus marcadores por hasta %{count} publicaciones provenientes de %{filename}. + domain_blocking_html: + one: Estás a punto de reemplazar tu lista de bloqueos de dominio por %{count} dominio proveniente de %{filename}. + other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename} y dejar de seguir a cualquier otra cuenta. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta. + lists_html: + one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirá %{count} cuenta a una nueva lista. + other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirán %{count} cuentas a nuevas listas. + muting_html: + one: Estás a punto de reemplazar tu lista de cuentas silenciadas con %{count} cuenta proveninete de %{filename}. + other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}. preambles: - blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}. - bookmarks_html: Está a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores. - domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}. - following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}. - lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas. - muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}. + blocking_html: + one: Estás a punto de bloquear a %{count} cuenta proveninete de %{filename}. + other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}. + bookmarks_html: + one: Está a punto de añadir %{count} publicación proveniente de %{filename} a tus marcadores. + other: Está a punto de añadir hasta %{count} publicaciones provenientes de %{filename} a tus marcadores. + domain_blocking_html: + one: Estás a punto de bloquear %{count} dominio proveniente de %{filename}. + other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}. + following_html: + one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename}. + other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}. + lists_html: + one: Estás a punto de añadir %{count} cuenta desde %{filename} a tus listas. Se creará una nueva listas si no hay listas donde añadirla. + other: Estás a punto de añadir %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas donde añadirlas. + muting_html: + one: Estás a punto de silenciar a %{count} cuenta proveniente de %{filename}. + other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}. preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia. recent_imports: Importaciones recientes states: diff --git a/config/locales/et.yml b/config/locales/et.yml index b71e3ccb6878a9..4372a92843161a 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1362,20 +1362,6 @@ et: merge_long: Hoia olemasolevad andmed ja lisa uusi overwrite: Kirjuta üle overwrite_long: Vaheta praegused andmed uute vastu - overwrite_preambles: - blocking_html: Oled asendamas oma blokeeringute loetelu kuni %{total_items} kontoga kohast %{filename}. - bookmarks_html: Oled asendamas oma järjehoidjaid kuni %{total_items} postitusega kohast %{filename}. - domain_blocking_html: Oled asendamas oma domeenide blokeeringute loetelu kuni %{total_items} domeeniga kohast %{filename}. - following_html: Oled jälgima hakkamas kuni %{total_items} kontot kohast %{filename} ja lõpetad kõigi teiste jälgimise. - lists_html: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{total_items} kontot. - muting_html: Oled asendamas oma vaigistatud kontode loetelu kuni %{total_items} kontoga kohast %{filename}. - preambles: - blocking_html: Oled blokeerimas kuni %{total_items} kontoga kohast %{filename}. - bookmarks_html: Oled lisamas kuni %{total_items} postitust kohast %{filename} to your bookmarks. - domain_blocking_html: Oled blokeerimas kuni %{total_items} domeeni kohast %{filename}. - following_html: Oled jälgima hakkamas kuni %{total_items} kontot kohast %{filename}. - lists_html: Oled lisamas oma loeteludesse failist %{filename} kuni %{total_items} kontot. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud. - muting_html: Oled vaigistamas kuni %{total_items} kontot kohast %{filename}. preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid. recent_imports: Viimati imporditud states: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index e80207d46fc945..e9c3be2d24a492 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1276,20 +1276,6 @@ eu: merge_long: Mantendu dauden erregistroak eta gehitu berriak overwrite: Gainidatzi overwrite_long: Ordeztu oraingo erregistroak berriekin - overwrite_preambles: - blocking_html: "Blokeatutakoen zerrenda %{filename} fitxategiak dituen %{total_items} kontuekin ordeztear zaude." - bookmarks_html: "Laster-markak %{filename} fitxategiak dituen %{total_items} argitalpenekin ordeztear zaude." - domain_blocking_html: "Blokeatutako domeinuen zerrenda %{filename} fitxategiak dituen %{total_items} domeinuekin ordeztear zaude." - following_html: "%{filename} fitxategiak dituen %{total_items} kontuei jarraitzear zaude; gainontzekoak jarraitzeari utziko diozu." - lists_html: "Zerrendak %{filename} fitxategiak duen edukiarekin ordeztear zaude. %{total_items} kontu gehituko dira zerrenda berrietara." - muting_html: "Mutututako kontuen zerrenda %{filename} fitxategiak dituen %{total_items} kontuekin ordeztear zaude." - preambles: - blocking_html: "%{filename} fitxategiak dituen %{total_items} kontuak blokeatzear zaude." - bookmarks_html: "%{filename} fitxategiak dituen %{total_items} argitalpenei laster-marka jartzear zaude." - domain_blocking_html: "%{filename} fitxategiak dituen %{total_items} domeinuak blokeatzear zaude." - following_html: "%{filename} fitxategiak dituen %{total_items} konturi jarraitzear zaude." - lists_html: "%{filename} fitxategiak dituen %{total_items} kontu zerrendetan gehitzear zaude. Zerrenda berriak sortuko dira zerrendarik ez badago." - muting_html: "%{filename} fitxategiak dituen %{total_items} kontuak mututzear zaude." preface: Beste zerbitzari bateko datuak inportatu ditzakezu, esaterako jarraitzen duzun edo blokeatu duzun jendearen zerrenda. recent_imports: Azken inportazioak states: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 22ccc711612746..1767f9e63e2c56 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1366,19 +1366,43 @@ fi: overwrite: Korvaa overwrite_long: Korvaa nykyiset tietueet uusilla overwrite_preambles: - blocking_html: Olet aikeissa korvata estoluettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. - bookmarks_html: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. - domain_blocking_html: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{total_items} verkkotunnuksella tiedostosta %{filename}. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. - lists_html: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. - muting_html: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. + blocking_html: + one: Olet aikeissa korvata estoluettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}. + other: Olet aikeissa korvata estoluettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}. + bookmarks_html: + one: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{count} julkaisulla tiedostosta %{filename}. + other: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{count} julkaisulla tiedostosta %{filename}. + domain_blocking_html: + one: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{count} verkkotunnuksella tiedostosta %{filename}. + other: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{count} verkkotunnuksella tiedostosta %{filename}. + following_html: + one: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. + other: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. + lists_html: + one: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{count} tili. + other: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{count} tiliä. + muting_html: + one: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}. + other: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}. preambles: - blocking_html: Olet aikeissa estää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. - bookmarks_html: Olet aikeissa lisätä kaikkiaan %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. - domain_blocking_html: Olet aikeissa estää kaikkiaan %{total_items} verkkotunnusta tiedostosta %{filename}. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename}. - lists_html: Olet aikeissa lisätä listoihisi kaikkiaan %{total_items} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. - muting_html: Olet aikeissa mykistää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + blocking_html: + one: Olet aikeissa estää kaikkiaan %{count} tilin tiedostosta %{filename}. + other: Olet aikeissa estää kaikkiaan %{count} tiliä tiedostosta %{filename}. + bookmarks_html: + one: Olet aikeissa lisätä kaikkiaan %{count} julkaisun tiedostosta %{filename}kirjanmerkkeihisi. + other: Olet aikeissa lisätä kaikkiaan %{count} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. + domain_blocking_html: + one: Olet aikeissa estää kaikkiaan %{count} verkkotunnuksen tiedostosta %{filename}. + other: Olet aikeissa estää kaikkiaan %{count} verkkotunnusta tiedostosta %{filename}. + following_html: + one: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename}. + other: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename}. + lists_html: + one: Olet aikeissa lisätä listoihisi kaikkiaan %{count} tilin tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. + other: Olet aikeissa lisätä listoihisi kaikkiaan %{count} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. + muting_html: + one: Olet aikeissa mykistää kaikkiaan %{count} tilin tiedostosta %{filename}. + other: Olet aikeissa mykistää kaikkiaan %{count} tiliä tiedostosta %{filename}. preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi käyttäjien luettelon. recent_imports: Viimeksi tuotu states: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 31eb67b3b099af..55104eb6ff219d 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1365,20 +1365,6 @@ fo: merge_long: Varðveit verandi teigarøð og legg nýggjar afturat overwrite: Skriva omaná overwrite_long: Legg nýggj teigarøð inn fyri tey verandi - overwrite_preambles: - blocking_html: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{total_items} kontum frá %{filename}. - bookmarks_html: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{total_items} postum frá %{filename}. - domain_blocking_html: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{total_items} navnaøkjum frá %{filename}. - following_html: Tú ert í ferð við at fylgja upp til %{total_items} kontum frá %{filename} og at gevast at fylgja øðrum. - lists_html: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{total_items} kontur verða lagdar afturat nýggjum listum. - muting_html: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{total_items} kontum frá %{filename}. - preambles: - blocking_html: Tú ert í ferð við at blokera upp til %{total_items} kontur frá %{filename}. - bookmarks_html: Tú ert í ferð við at leggja upp til %{total_items} postar frá %{filename} afturat tínum bókamerkjum. - domain_blocking_html: Tú ert í ferð við at blokera upp til %{total_items} navnaøki frá %{filename}. - following_html: Tú ert í ferð við at fylgja upp til %{total_items} kontur frá %{filename}. - lists_html: Tú ert í ferð við at leggja upp til %{total_items} kontur frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat. - muting_html: Tú ert í ferð við at doyva upp til %{total_items} kontur frá %{filename}. preface: Tú kanst innlesa dátur, sum tú hevur útlisið frá einum øðrum ambætara, so sum listar av fólki, sum tú fylgir ella blokerar. recent_imports: Feskar innflytingar states: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 16cdb79317cc5b..01463edacb4603 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1368,20 +1368,6 @@ fr-CA: merge_long: Garder les enregistrements existants et ajouter les nouveaux overwrite: Écraser overwrite_long: Remplacer les enregistrements actuels par les nouveaux - overwrite_preambles: - blocking_html: Vous allez remplacer votre liste de blocages par jusqu'à %{total_items} comptes tirés de %{filename}. - bookmarks_html: Vous allez remplacer vos signets par jusqu'à %{total_items} posts tirés de %{filename}. - domain_blocking_html: Vous allez remplacer votre liste de blocages de domaines par jusqu'à %{total_items} domaines tirés de %{filename}. - following_html: Vous allez suivre jusqu’à %{total_items} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre. - lists_html: Vous allez remplacer vos listes par le contenu de %{filename}. Jusqu'à %{total_items} comptes seront ajoutés à de nouvelles listes. - muting_html: Vous allez remplacer votre liste de comptes masqués par jusqu'à %{total_items} comptes tirés de %{filename}. - preambles: - blocking_html: Vous allez bloquer jusqu'à %{total_items} comptes tirés de %{filename}. - bookmarks_html: Vous allez ajouter jusqu'à %{total_items} messages de %{filename} à vos signets. - domain_blocking_html: Vous allez bloquer jusqu'à %{total_items} domaines tirés de %{filename}. - following_html: Vous allez suivre jusqu'à %{total_items} comptes tirés de %{filename}. - lists_html: Vous allez ajouter jusqu'à %{total_items} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées s'il n'y a aucune liste à laquelle les ajouter. - muting_html: Vous allez masquer jusqu'à %{total_items} comptes tirés de %{filename}. preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte. recent_imports: Importations récentes states: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index bc57d00e658f37..c3ce66c3976817 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1368,20 +1368,6 @@ fr: merge_long: Garder les enregistrements existants et ajouter les nouveaux overwrite: Écraser overwrite_long: Remplacer les enregistrements actuels par les nouveaux - overwrite_preambles: - blocking_html: Vous allez remplacer votre liste de blocage par près de %{total_items} comptes tirés de %{filename}. - bookmarks_html: Vous allez remplacer vos signets par près de %{total_items} posts tirés de %{filename}. - domain_blocking_html: Vous allez remplacer votre liste de blocage de domaines par près de %{total_items} domaines tirés de %{filename}. - following_html: Vous allez suivre jusqu’à %{total_items} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre. - lists_html: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{total_items} comptes seront ajoutés à de nouvelles listes. - muting_html: Vous allez remplacer votre liste de comptes masqués par près de %{total_items} comptes tirés de %{filename}. - preambles: - blocking_html: Vous allez bloquer près de %{total_items} comptes tirés de %{filename}. - bookmarks_html: Vous allez ajouter près de %{total_items} messages de %{filename} à vos signets. - domain_blocking_html: Vous allez bloquer près de %{total_items} domaines tirés de %{filename}. - following_html: Vous allez suivre près de %{total_items} comptes tirés de %{filename}. - lists_html: Vous allez ajouter près de %{total_items} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin. - muting_html: Vous allez masquer près de %{total_items} comptes tirés de %{filename}. preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte. recent_imports: Récents imports states: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 0379af34e9afc9..d63d2ac2aacdc0 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -24,6 +24,8 @@ fy: admin: account_actions: action: Aksje útfiere + already_silenced: Dizze account is al beheind. + already_suspended: Dizze account is al opskort. title: Moderaasjemaatregelen tsjin %{acct} nimme account_moderation_notes: create: Lit in opmerking efter @@ -45,6 +47,7 @@ fy: title: E-mailadres foar %{username} wizigje change_role: changed_msg: Rol mei sukses wizige! + edit_roles: Brûkersrollen beheare label: Rol wizigje no_role: Gjin rol title: Rol fan %{username} wizigje @@ -601,6 +604,7 @@ fy: suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account. actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wannear’t jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wannear’t de spam-kategory keazen is. actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoe’t jo server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld. + actions_no_posts: Dit rapport hat gjin byhearrende berjochten om fuort te smiten add_to_report: Mear oan de rapportaazje tafoegje already_suspended_badges: local: Al opskoarte op dizze server @@ -871,6 +875,9 @@ fy: message_html: Jo hawwe foar dizze server gjin regels opsteld. sidekiq_process_check: message_html: Der draait gjin Sidekiq-proses foar de wachtrige(n) %{value}. Kontrolearje jo Sidekiq-konfiguraasje + software_version_check: + action: Beskikbere fernijingen besjen + message_html: Der is in Mastodon-fernijing beskikber. software_version_critical_check: action: Beskikbere fernijingen besjen message_html: Der is in kritike fernijing foar Mastodon beskikber. Wurkje sa gau as mooglik by. @@ -1156,6 +1163,12 @@ fy: view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dy’t jo makke hawwe too_fast: Formulier is te fluch yntsjinne. Probearje it nochris. use_security_key: Befeiligingskaai brûke + author_attribution: + example_title: Faorbyldtekst + hint_html: Bepaal hoe’t wy jo fermelde, wannear’t jo keppelingen op Mastodon dield wurde. + more_from_html: Mear fan %{name} + s_blog: Weblog fan %{name} + title: Auteur-attribúsje challenge: confirm: Trochgean hint_html: "Tip: Wy freegje jo it kommende oere net mear nei jo wachtwurd." @@ -1353,19 +1366,43 @@ fy: overwrite: Oerskriuwe overwrite_long: Aktuele gegevens mei de nije gegevens ferfange overwrite_preambles: - blocking_html: Jo steane op it punt om jo blokkearlist mei mear as %{total_items} accounts fan %{filename} te ferfangen. - bookmarks_html: Jo steane op it punt om jo blêdwizers mei mear as %{total_items} artikelen fan %{filename} te ferfangen. - domain_blocking_html: Jo steane op it punt om jo domeinblokkearlist mei mear as %{total_items} domeinen fan %{filename} te ferfangen. - following_html: Jo steane op it punt om %{total_items} accounts út %{filename} te folgjen en te stopjen mei folgjen fan alle oaren. - lists_html: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{total_items} accounts sille oan nije listen tafoege wurde. - muting_html: Jo steane op it punt om jo list mei negearre accounts mei mear as %{total_items} accounts fan %{filename} út te ferfangen. + blocking_html: + one: Jo steane op it punt om jo blokkearlist mei mear as %{count} account fan %{filename} te ferfangen. + other: Jo steane op it punt om jo blokkearlist mei mear as %{count} accounts fan %{filename} te ferfangen. + bookmarks_html: + one: Jo steane op it punt om jo blêdwizers mei mear as %{count} artikel fan %{filename} te ferfangen. + other: Jo steane op it punt om jo blêdwizers mei mear as %{count} artikelen fan %{filename} te ferfangen. + domain_blocking_html: + one: Jo steane op it punt om jo domeinblokkearlist mei mear as %{count} domein fan %{filename} te ferfangen. + other: Jo steane op it punt om jo domeinblokkearlist mei mear as %{count} domeinen fan %{filename} te ferfangen. + following_html: + one: Jo steane op it punt om %{count} account út %{filename} te folgjen en te stopjen mei folgjen fan alle oaren. + other: Jo steane op it punt om %{count} accounts út %{filename} te folgjen en te stopjen mei folgjen fan alle oaren. + lists_html: + one: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{count} account sille oan nije listen tafoege wurde. + other: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{count} accounts sille oan nije listen tafoege wurde. + muting_html: + one: Jo steane op it punt om jo list mei negearre accounts mei mear as %{count} account fan %{filename} út te ferfangen. + other: Jo steane op it punt om jo list mei negearre accounts mei mear as %{count} accounts fan %{filename} út te ferfangen. preambles: - blocking_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te blokkearjen. - bookmarks_html: Jo steane op it punt om %{total_items} berjochten fan %{filename} út oan jo blêdwizers ta te foegjen. - domain_blocking_html: Jo steane op it punt om %{total_items} domeinen fan %{filename} út te blokkearjen. - following_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te folgjen. - lists_html: Jo steane op it punt om oant %{total_items} accounts fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen. - muting_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te negearjen. + blocking_html: + one: Jo steane op it punt om %{count} account fan %{filename} út te blokkearjen. + other: Jo steane op it punt om %{count} accounts fan %{filename} út te blokkearjen. + bookmarks_html: + one: Jo steane op it punt om %{count} berjocht fan %{filename} út oan jo blêdwizers ta te foegjen. + other: Jo steane op it punt om %{count} berjochten fan %{filename} út oan jo blêdwizers ta te foegjen. + domain_blocking_html: + one: Jo steane op it punt om %{count} domein fan %{filename} út te blokkearjen. + other: Jo steane op it punt om %{count} domeinen fan %{filename} út te blokkearjen. + following_html: + one: Jo steane op it punt om %{count} account fan %{filename} út te folgjen. + other: Jo steane op it punt om %{count} accounts fan %{filename} út te folgjen. + lists_html: + one: Jo steane op it punt om oant %{count} account fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen. + other: Jo steane op it punt om oant %{count} accounts fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen. + muting_html: + one: Jo steane op it punt om %{count} account fan %{filename} út te negearjen. + other: Jo steane op it punt om %{count} accounts fan %{filename} út te negearjen. preface: Jo kinne bepaalde gegevens, lykas de minsken dy’t jo folgje of blokkearre hawwe, nei jo account op dizze server ymportearje. Jo moatte dizze gegevens wol earst op de oarspronklike server eksportearje. recent_imports: Resinte ymports states: @@ -1682,6 +1719,7 @@ fy: delete: Account fuortsmite development: Untwikkelers edit_profile: Profyl bewurkje + export: Eksportearje featured_tags: Utljochte hashtags import: Ymportearje import_and_export: Ymportearje en eksportearje @@ -1931,6 +1969,7 @@ fy: instructions_html: Kopiearje en plak de ûndersteande koade yn de HTML fan jo website. Foegje dernei it adres fan jo website ta oan ien fan de ekstra fjilden op jo profyl op it ljepblêd ‘Profyl bewurkje’ en bewarje de wizigingen. verification: Ferifikaasje verified_links: Jo ferifiearre keppelingen + website_verification: Website-ferifikaasje webauthn_credentials: add: Nije befeiligingskaai tafoegje create: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index e25865903ea365..a201b733258f47 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1440,20 +1440,6 @@ ga: merge_long: Coinnigh taifid atá ann cheana féin agus cuir cinn nua leis overwrite: Forscríobh overwrite_long: Cuir na cinn nua in ionad na dtaifead reatha - overwrite_preambles: - blocking_html: Tá tú ar tí do liosta bloc a chur in ionad suas le %{total_items} cuntas ó %{filename}. - bookmarks_html: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{total_items} postáil ó %{filename}. - domain_blocking_html: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{total_items} fearainn ó %{filename}. - following_html: Tá tú ar tí leanúint suas go dtí %{total_items} cuntas ó %{filename} agus stop a leanúint aon duine eile. - lists_html: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{total_items} cuntas le liostaí nua. - muting_html: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{total_items} cuntas ó %{filename}. - preambles: - blocking_html: Tá tú ar tí bloc suas le %{total_items} cuntas ó %{filename}. - bookmarks_html: Tá tú ar tí %{total_items} postáil ó %{filename} a chur le do leabharmharcanna. - domain_blocking_html: Tá tú ar tí bloc suas le %{total_items} fearainn ó %{filename}. - following_html: Tá tú ar tí leanúint suas go dtí %{total_items} cuntas ó %{filename}. - lists_html: Tá tú ar tí %{total_items} cuntas ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. - muting_html: Tá tú ar tí balbhú suas le %{total_items} cuntas ó %{filename}. preface: Is féidir leat sonraí a d’easpórtáil tú a allmhairiú ó fhreastalaí eile, mar shampla liosta de na daoine a bhfuil tú ag leanúint nó ag cur bac orthu. recent_imports: Allmhairí le déanaí states: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index a030b0d18584e1..cb7c6254bc3e45 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1415,20 +1415,6 @@ gd: merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris overwrite: Sgrìobh thairis air overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann - overwrite_preambles: - blocking_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur an àite liosta nam bacaidhean agad. - bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur an àite nan comharra-lìn agad. - domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. - following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. - lists_html: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{total_items}cunntas(an) a chur ri liostaichean ùra. - muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur an àite liosta nan cunntasan mùchte agad. - preambles: - blocking_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a bhacadh. - bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur ris na h-annsachdan agad. - domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a bhacadh. - following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a leantainn. - lists_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. - muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a mhùchadh. preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh." recent_imports: Ion-phortaidhean o chionn goirid states: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index e396761f7eb5d5..8460902a68d555 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1366,19 +1366,43 @@ gl: overwrite: Sobreescribir overwrite_long: Sustituír rexistros actuais cos novos overwrite_preambles: - blocking_html: Vas substituír a lista de bloqueos por %{total_items} contas desde %{filename}. - bookmarks_html: Vas substituír os marcadores por %{total_items} publicacións desde %{filename}. - domain_blocking_html: Vas substituír a lista de dominios bloqueados por %{total_items} dominios desde %{filename}. - following_html: Vas seguir estas %{total_items} contas desde %{filename} e deixar de seguir a todas as outras contas. - lists_html: Vas substituír as túas listas co contido de %{filename}. Vanse engadir %{total_items} contas ás novas listas. - muting_html: Vas substituír a lista de contas acaladas por %{total_items} contas desde %{filename}. + blocking_html: + one: Vas substituír a lista de bloqueos por %{count} conta desde %{filename}. + other: Vas substituír a lista de bloqueos por %{count} contas desde %{filename}. + bookmarks_html: + one: Vas substituír os marcadores por %{count} publicación desde %{filename}. + other: Vas substituír os marcadores por %{count} publicacións desde %{filename}. + domain_blocking_html: + one: Vas substituír a lista de dominios bloqueados por %{count} dominio desde %{filename}. + other: Vas substituír a lista de dominios bloqueados por %{count} dominios desde %{filename}. + following_html: + one: Vas seguir a %{count} conta desde %{filename} e deixar de seguir a todas as outras contas. + other: Vas seguir a %{count} contas desde %{filename} e deixar de seguir a todas as outras contas. + lists_html: + one: Vas substituír as túas listas co contido de %{filename}. Vaise engadir %{count} conta ás novas listas. + other: Vas substituír as túas listas co contido de %{filename}. Vanse engadir %{count} contas ás novas listas. + muting_html: + one: Vas substituír a lista de contas acaladas por %{count} conta desde %{filename}. + other: Vas substituír a lista de contas acaladas por %{count} contas desde %{filename}. preambles: - blocking_html: Vas bloquear estas %{total_items} contas desde %{filename}. - bookmarks_html: Vas engadir %{total_items} publicacións desde %{filename} aos teus marcadores. - domain_blocking_html: Vas bloquear estes %{total_items} dominios desde %{filename}. - following_html: Vas seguir estas %{total_items} contas desde %{filename}. - lists_html: Vas engadir %{total_items} contas desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas. - muting_html: Vas acalar estas %{total_items} contas desde %{filename}. + blocking_html: + one: Vas bloquear a %{count} conta desde %{filename}. + other: Vas bloquear a %{count} contas desde %{filename}. + bookmarks_html: + one: Vas engadir %{count} publicación desde %{filename} aos teus marcadores. + other: Vas engadir %{count} publicacións desde %{filename} aos teus marcadores. + domain_blocking_html: + one: Vas bloquear a %{count} dominio desde %{filename}. + other: Vas bloquear a %{count} dominios desde %{filename}. + following_html: + one: Vas seguir a %{count} conta desde %{filename}. + other: Vas seguir a %{count} contas desde %{filename}. + lists_html: + one: Vas engadir %{count} conta desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas. + other: Vas engadir %{count} contas desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas. + muting_html: + one: Vas acalar a %{count} conta desde %{filename}. + other: Vas acalar a %{count} contas desde %{filename}. preface: Podes importar os datos que exportaches doutro servidor, tales como a lista de usuarias que estás a seguir ou bloquear. recent_imports: Importacións recentes states: diff --git a/config/locales/he.yml b/config/locales/he.yml index 846b0d14af94aa..f2732678b5be1f 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1416,19 +1416,67 @@ he: overwrite: דריסה overwrite_long: החלף רשומות נוכחיות בחדשות overwrite_preambles: - blocking_html: אתם עומדים להחליף את רשימת החסימות עד כדי %{total_items} חשבונות מהקובץ %{filename}. - bookmarks_html: אתם עומדים להחליף את רשימת הסימניות עד כדי %{total_items} הודעות מהקובץ %{filename}. - domain_blocking_html: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{total_items} שרתים מהקובץ %{filename}. - following_html: אתם עומדים לעקוב עד כדי %{total_items} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר. - lists_html: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{total_items} חשבונות יתווספו לרשימות חדשות. - muting_html: אתם עומדים להחליף את רשימת ההשתקות עד כדי %{total_items} חשבונות מהקובץ %{filename}. + blocking_html: + many: אתם עומדים להחליף את רשימת החסימות עד כדי %{count} חשבונות מהקובץ %{filename}. + one: אתם עומדים להחליף את רשימת החסימות %{count} בחשבון אחד מהקובץ %{filename}. + other: אתם עומדים להחליף את רשימת החסימות עד כדי %{count} חשבונות מהקובץ %{filename}. + two: אתם עומדים להחליף את רשימת החסימות בעד שני חשבונות מהקובץ %{filename}. + bookmarks_html: + many: אתם עומדים להחליף את רשימת הסימניות עד כדי %{count} הודעות מהקובץ %{filename}. + one: אתם עומדים להחליף את רשימת הסימניות בהודעה אחת מהקובץ %{filename}. + other: אתם עומדים להחליף את רשימת הסימניות עד כדי %{count} הודעות מהקובץ %{filename}. + two: אתם עומדים להחליף את רשימת הסימניות עד כדי שתי הודעות מהקובץ %{filename}. + domain_blocking_html: + many: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{count} שרתים מהקובץ %{filename}. + one: אתם עומדים להחליף את רשימת חסימות השרתים בשרת אחד מהקובץ %{filename}. + other: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{count} שרתים מהקובץ %{filename}. + two: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי שני שרתים מהקובץ %{filename}. + following_html: + many: אתם עומדים לעקוב אחרי עד כדי %{count} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר. + one: אתם עומדים לעקוב אחרי חשבון אחד מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר. + other: אתם עומדים לעקוב אחרי עד כדי %{count} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר. + two: אתם עומדים לעקוב אחרי עד כדי שני חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר. + lists_html: + many: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{count} חשבונות יתווספו לרשימות חדשות. + one: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד חשבון אחד יתווסף לרשימות חדשות. + other: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{count} חשבונות יתווספו לרשימות חדשות. + two: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד שני חשבונות יתווספו לרשימות חדשות. + muting_html: + many: אתם עומדים להחליף את רשימת ההשתקות בעד כדי %{count} חשבונות מהקובץ %{filename}. + one: אתם עומדים להחליף את רשימת ההשתקות בחשבון אחד מהקובץ %{filename}. + other: אתם עומדים להחליף את רשימת ההשתקות בעד כדי %{count} חשבונות מהקובץ %{filename}. + two: אתם עומדים להחליף את רשימת ההשתקות בעד כדי שני חשבונות מהקובץ %{filename}. preambles: - blocking_html: אתם עומדים לחסום עד %{total_items} חשבונות מהקובץ %{filename}. - bookmarks_html: אתם עומדים להוסיף עד %{total_items} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם. - domain_blocking_html: אתם עומדים לחסום עד כדי %{total_items} שרתים מהקובץ %{filename}. - following_html: אתם עומדים לעקוב אחרי עד %{total_items} חשבונות מהקובץ %{filename}. - lists_html: הפעולה הבאה תוסיף עד %{total_items} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה. - muting_html: אתם עומדים להשתיק עד %{total_items} חשבונות מהקובץ %{filename}. + blocking_html: + many: אתם עומדים לחסום עד %{count} חשבונות מהקובץ %{filename}. + one: אתם עומדים לחסוםחשבון אחד מהקובץ %{filename}. + other: אתם עומדים לחסום עד %{count} חשבונות מהקובץ %{filename}. + two: אתם עומדים לחסום עד שני חשבונות מהקובץ %{filename}. + bookmarks_html: + many: אתם עומדים להוסיף עד %{count} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם. + one: אתם עומדים להוסיףהודעה אחת מהקובץ %{filename} לרשימת הסימניות שלכם. + other: אתם עומדים להוסיף עד %{count} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם. + two: אתם עומדים להוסיף עד שתי הודעות מהקובץ %{filename} לרשימת הסימניות שלכם. + domain_blocking_html: + many: אתם עומדים לחסום עד כדי %{count} שרתים מהקובץ %{filename}. + one: אתם עומדים לחסום עד שרת אחד מהקובץ %{filename}. + other: אתם עומדים לחסום עד כדי %{count} שרתים מהקובץ %{filename}. + two: אתם עומדים לחסום עד כדי שני שרתים מהקובץ %{filename}. + following_html: + many: אתם עומדים לעקוב אחרי עד %{count} חשבונות מהקובץ %{filename}. + one: אתם עומדים לעקוב אחרי עד חשבון אחד מהקובץ %{filename}. + other: אתם עומדים לעקוב אחרי עד %{count} חשבונות מהקובץ %{filename}. + two: אתם עומדים לעקוב אחרי עד שני חשבונות מהקובץ %{filename}. + lists_html: + many: הפעולה הבאה תוסיף עד %{count} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה. + one: הפעולה הבאה תוסיף עד חשבון אחד מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה. + other: הפעולה הבאה תוסיף עד %{count} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה. + two: הפעולה הבאה תוסיף עד שני חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה. + muting_html: + many: אתם עומדים להשתיק עד %{count} חשבונות מהקובץ %{filename}. + one: אתם עומדים להשתיק עד חשבון אחד מהקובץ %{filename}. + other: אתם עומדים להשתיק עד %{count} חשבונות מהקובץ %{filename}. + two: אתם עומדים להשתיק עד שני חשבונות מהקובץ %{filename}. preface: ניתן ליבא מידע מסויים כגון כל הנעקבים או המשתמשים החסומים לתוך חשבונך על שרת זה, מתוך קבצים שנוצרו על ידי יצוא משרת אחר כגון רשימת הנעקבים והחסומים שלך. recent_imports: ייבואים אחרונים states: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 5a00db954813e8..15c632adc9c685 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1366,19 +1366,43 @@ hu: overwrite: Felülírás overwrite_long: Lecseréljük újakkal a jelenlegi bejegyzéseket overwrite_preambles: - blocking_html: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{total_items} fiókra a következőből: %{filename}.' - bookmarks_html: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{total_items} bejegyzésre a következőből: %{filename}.' - domain_blocking_html: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{total_items} domainre a következőből: %{filename}.' - following_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókot kövess a következőből: %{filename}, és abbahagyd mindenki más követését.' - lists_html: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{total_items} fiók kerül fel az új listákra. - muting_html: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{total_items} fiókra a következőből: %{filename}.' + blocking_html: + one: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{count} fiókra a következőből: %{filename}.' + other: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{count} fiókra a következőből: %{filename}.' + bookmarks_html: + one: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{count} bejegyzésre a következőből: %{filename}.' + other: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{count} bejegyzésre a következőből: %{filename}.' + domain_blocking_html: + one: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{count} domainre a következőből: %{filename}.' + other: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{count} domainre a következőből: %{filename}.' + following_html: + one: 'Arra készülsz, hogy legfeljebb %{count} fiókot kövess a következőből: %{filename}, és abbahagyd mindenki más követését.' + other: 'Arra készülsz, hogy legfeljebb %{count} fiókot kövess a következőből: %{filename}, és abbahagyd mindenki más követését.' + lists_html: + one: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{count} fiók kerül fel az új listákra. + other: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{count} fiók kerül fel az új listákra. + muting_html: + one: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{count} fiókra a következőből: %{filename}.' + other: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{count} fiókra a következőből: %{filename}.' preambles: - blocking_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókot letilts a következőből: %{filename}.' - bookmarks_html: 'Arra készülsz, hogy legfeljebb %{total_items} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.' - domain_blocking_html: 'Arra készülsz, hogy legfeljebb %{total_items} domaint letilts a következőből: %{filename}.' - following_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókot kövess a következőből: %{filename}.' - lists_html: Arra készülsz, hogy legfeljebb %{total_items} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista. - muting_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókot némíts a következőből: %{filename}.' + blocking_html: + one: 'Arra készülsz, hogy legfeljebb %{count} fiókot letilts a következőből: %{filename}.' + other: 'Arra készülsz, hogy legfeljebb %{count} fiókot letilts a következőből: %{filename}.' + bookmarks_html: + one: 'Arra készülsz, hogy legfeljebb %{count} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.' + other: 'Arra készülsz, hogy legfeljebb %{count} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.' + domain_blocking_html: + one: 'Arra készülsz, hogy legfeljebb %{count} domaint letilts a következőből: %{filename}.' + other: 'Arra készülsz, hogy legfeljebb %{count} domaint letilts a következőből: %{filename}.' + following_html: + one: 'Arra készülsz, hogy legfeljebb %{count} fiókot kövess a következőből: %{filename}.' + other: 'Arra készülsz, hogy legfeljebb %{count} fiókot kövess a következőből: %{filename}.' + lists_html: + one: Arra készülsz, hogy legfeljebb %{count} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista. + other: Arra készülsz, hogy legfeljebb %{count} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista. + muting_html: + one: 'Arra készülsz, hogy legfeljebb %{count} fiókot némíts a következőből: %{filename}.' + other: 'Arra készülsz, hogy legfeljebb %{count} fiókot némíts a következőből: %{filename}.' preface: Itt importálhatod egy másik kiszolgálóról lementett adataidat, például követettjeid és letiltott felhasználóid listáját. recent_imports: Legutóbbi importálások states: diff --git a/config/locales/ia.yml b/config/locales/ia.yml index a8bc48b306a4b3..4d9148674d9d97 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1346,20 +1346,6 @@ ia: merge_long: Conservar le registros existente e adder noves overwrite: Superscriber overwrite_long: Reimplaciar registros actual con le noves - overwrite_preambles: - blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas per usque a %{total_items} contos proveniente de %{filename}. - bookmarks_html: Tu es sur le puncto de reimplaciar tu marcapaginas per usque a %{total_items} messages desde %{filename}. - domain_blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas de dominio per usque a %{total_items} dominios proveniente de %{filename}. - following_html: Tu es sur le puncto de sequer usque a %{total_items} contos de %{filename} e cessar de sequer tote le alteres. - lists_html: Tu es sur le puncto de reimplaciar tu listas per le contento de %{filename}. Usque a %{total_items} contos essera addite a nove listas. - muting_html: Tu es sur le puncto de reimplaciar tu lista de contos silentiate con usque a %{total_items} contos desde %{filename}. - preambles: - blocking_html: Tu es sur le puncto de blocar usque a %{total_items} contos a partir de %{filename}. - bookmarks_html: Tu es sur le puncto de adder usque a %{total_items} messages desde %{filename} a tu marcapaginas. - domain_blocking_html: Tu es sur le puncto de blocar usque a %{total_items} dominios a partir de %{filename}. - following_html: Tu es sur le puncto de sequer usque a %{total_items} contos desde %{filename}. - lists_html: Tu es sur le puncto de adder usque %{total_items} contos desde %{filename} a tu listas. Nove listas essera create si il non ha un lista al qual adder los. - muting_html: Tu es sur le puncto de silentiar usque a %{total_items} contos desde %{filename}. preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca. recent_imports: Importationes recente states: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 7e8140a374daff..94c4b7f4f0a940 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1274,20 +1274,6 @@ ie: merge_long: Conservar existent registres e adjunter li novis overwrite: Remplazzar overwrite_long: Remplazzar existent registres per li novis - overwrite_preambles: - blocking_html: Tu va remplazzar tui liste de bloccat contos per til %{total_items} contos de %{filename}. - bookmarks_html: Tu va remplazzar tui marcatores per til %{total_items} postas de %{filename}. - domain_blocking_html: Tu va remplazzar tui liste de bloccat dominias per til %{total_items} dominias de %{filename}. - following_html: Tu va sequer til %{total_items} contos de %{filename} e dessequer omni altri contos. - lists_html: Tu va remplazzar tui listes per li contenete de %{filename}. Til %{total_items} contos va esser adjuntet a nov listes. - muting_html: Tu va remplazzar tui liste de silentiat contos per til %{total_items} contos de %{filename}. - preambles: - blocking_html: Tu va bloccar til %{total_items} contos de %{filename}. - bookmarks_html: Tu va adjunter til %{total_items} postas de %{filename} a tui marcatores. - domain_blocking_html: Tu va bloccar til %{total_items} dominias de %{filename}. - following_html: Tu va sequer til %{total_items} contos de %{filename}. - lists_html: Tu va adjunter til %{total_items} contos de %{filename} a tui listes. Nov listes va esser creat si ne hay un liste a quel adjunter. - muting_html: Tu va silentiar til %{total_items} contos de %{filename}. preface: Tu posse importar data quel tu ha exportat de un altri servitor, quam un liste del gente quem tu seque o blocca. recent_imports: Recent importationes states: diff --git a/config/locales/io.yml b/config/locales/io.yml index dfb583450a6b88..8ce5f3403bd6d3 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1247,20 +1247,6 @@ io: merge_long: Retenez displonebla rekordi e insertez novi overwrite: Remplasez overwrite_long: Remplasez nuna rekordi per novi - overwrite_preambles: - blocking_html: Vu substitucos vua blokusolisto per til %{total_items} konti de %{filename}. - bookmarks_html: Vu substitucos vua libromarki per til %{total_items} posti de %{filename}. - domain_blocking_html: Vu substitucos vua domenoblokusolisto per til %{total_items} domeni de %{filename}. - following_html: Vu sequos til %{total_items} konti de %{filename} e haltar sequar irga altra konto. - lists_html: Vu substitucos vua listi kun la kontenaji di %{filename}. Til %{total_items} konti adjuntesos a nova listi. - muting_html: Vu substitucos vua listo di konti silencigita per til %{total_items} konti de %{filename}. - preambles: - blocking_html: Vu blokusos til %{total_items} konti de %{filename}. - bookmarks_html: Vu adjuntos %{total_items} posti de %{filename} a vua libromarki. - domain_blocking_html: Vu blokusos til %{total_items} domeni de %{filename}. - following_html: Vu sequos til %{total_items} konti de %{filename}. - lists_html: Vu adjuntos til %{total_items} konti de %{filename} a vua listi. Nova listi kreesos se ne existas listo a quo adjuntar. - muting_html: Vu silencigos til %{total_items} konti en %{filename}. preface: Tu povas importacar kelka datumi, tal quala listi de omna homi quin tu sequas o blokusas, a tua konto di ca instaluro, per dosiero exportacita de altra instaluro. recent_imports: Importacaji recenta states: diff --git a/config/locales/is.yml b/config/locales/is.yml index 4af26eea0b0cf6..6eefaf1b0e983b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -877,6 +877,9 @@ is: message_html: Þú hefur ekki skilgreint neinar reglur fyrir netþjón. sidekiq_process_check: message_html: Ekkert Sidekiq-ferli er í gangi fyrir %{value} biðröð/biðraðir. Endilega athugaðu Sidekiq-uppsetninguna þína + software_version_check: + action: Skoða tiltækar uppfærslur + message_html: Uppfærsla er tiltæk fyrir Mastodon. software_version_critical_check: action: Skoða tiltækar uppfærslur message_html: Áríðandi uppfærsla Mastodon er tiltæk, uppfærðu eins fljótt og auðið er. @@ -1366,20 +1369,6 @@ is: merge_long: Halda fyrirliggjandi færslum og bæta við nýjum overwrite: Skrifa yfir overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju - overwrite_preambles: - blocking_html: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{total_items} aðgöngum úr %{filename}. - bookmarks_html: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{total_items} færslum úr %{filename}. - domain_blocking_html: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{total_items} lénum úr %{filename}. - following_html: Þú er í þann mund að fara að fylgjast með allt að %{total_items} aðgöngum úr %{filename} og hætta að fylgjast með öllum öðrum. - lists_html: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{total_items} aðgöngum verður bætt við nýju listana. - muting_html: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{total_items} aðgöngum úr %{filename}. - preambles: - blocking_html: Þú er í þann mund að fara að útiloka allt að %{total_items} aðganga úr %{filename}. - bookmarks_html: Þú er í þann mund að fara að bæta við allt að %{total_items} færslum úr %{filename} við bókamerkin þín. - domain_blocking_html: Þú er í þann mund að fara að útiloka allt að %{total_items} lén úr %{filename}. - following_html: Þú er í þann mund að fara að fylgjast með allt að %{total_items} aðgöngum úr %{filename}. - lists_html: Þú ert í þann mund að fara að bæta við allt að %{total_items} aðgöngum úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í. - muting_html: Þú er í þann mund að fara að þagga allt að %{total_items} aðganga úr %{filename}. preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar. recent_imports: Nýlega flutt inn states: @@ -1696,6 +1685,7 @@ is: delete: Eyðing notandaaðgangs development: Þróun edit_profile: Breyta notandasniði + export: Flytja út featured_tags: Myllumerki með aukið vægi import: Flytja inn import_and_export: Inn- og útflutningur diff --git a/config/locales/it.yml b/config/locales/it.yml index a89fa0a53e444e..91b67c2b4d65bf 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1368,19 +1368,43 @@ it: overwrite: Sovrascrivi overwrite_long: Sostituisci record attuali con quelli nuovi overwrite_preambles: - blocking_html: Stai per sostituire la tua lista di blocchi con un massimo di %{total_items} account da %{filename}. - bookmarks_html: Stai per sostituire i tuoi segnalibri con un massimo di %{total_items} post da %{filename}. - domain_blocking_html: Stai per sostituire la tua lista di domini bloccati con un massimo di %{total_items} domini da %{filename}. - following_html: Stai per seguire fino a %{total_items} account da %{filename} e smettere di seguire chiunque altro. - lists_html: Stai per sostituire le tue liste con i contenuti di %{filename}. Fino a %{total_items} profili verranno aggiunti a nuove liste. - muting_html: Stai per sostituire la tua lista di account silenziati con un massimo di %{total_items} account da %{filename}. + blocking_html: + one: Stai per sostituire la tua lista di blocchi con %{count} account da %{filename}. + other: Stai per sostituire la tua lista di blocchi con %{count} account da %{filename}. + bookmarks_html: + one: Stai per sostituire i tuoi segnalibri con %{count} post da %{filename}. + other: Stai per sostituire i tuoi segnalibri con %{count} post da %{filename}. + domain_blocking_html: + one: Stai per sostituire la tua lista di domini bloccati con %{count} dominio da %{filename}. + other: Stai per sostituire la tua lista di domini bloccati con %{count} domini da %{filename}. + following_html: + one: Stai per seguire %{count} account da %{filename} e smettere di seguire chiunque altro. + other: Stai per seguire %{count} account da %{filename} e smettere di seguire chiunque altro. + lists_html: + one: Stai per sostituire le tue liste con il contenuto di %{filename}. Verrà aggiunto %{count} account alle nuove liste. + other: Stai per sostituire le tue liste con il contenuto di %{filename}. Verranno aggiunti %{count} account alle nuove liste. + muting_html: + one: Stai per sostituire la lista degli account silenziati con %{count} account da %{filename}. + other: Stai per sostituire la lista degli account silenziati con %{count} account da %{filename}. preambles: - blocking_html: Stai per bloccare fino a %{total_items} account da %{filename}. - bookmarks_html: Stai per aggiungere fino a %{total_items} post da %{filename} ai tuoi segnalibri. - domain_blocking_html: Stai per bloccare fino a %{total_items} domini da %{filename}. - following_html: Stai per seguire fino a %{total_items} account da %{filename}. - lists_html: Stai per aggiungere fino a %{total_items} profili da %{filename} alla tue liste. Le nuove liste saranno create se non c'è una lista a cui aggiungere. - muting_html: Stai per silenziare fino a %{total_items} account da %{filename}. + blocking_html: + one: Stai per bloccare %{count} account da %{filename}. + other: Stai per bloccare %{count} account da %{filename}. + bookmarks_html: + one: Stai per aggiungere %{count} post da %{filename} ai tuoi segnalibri. + other: Stai per aggiungere %{count} post da %{filename} ai tuoi segnalibri. + domain_blocking_html: + one: Stai per bloccare %{count} dominio da %{filename}. + other: Stai per bloccare %{count} domini da %{filename}. + following_html: + one: Stai per seguire %{count} account da %{filename}. + other: Stai per seguire %{count} account da %{filename}. + lists_html: + one: Stai per aggiungere %{count} account da %{filename} alle tue liste. Saranno create nuove liste, se non ce ne sono altre da aggiungere. + other: Stai per aggiungere %{count} account da %{filename} alle tue liste. Saranno create nuove liste, se non ce ne sono altre da aggiungere. + muting_html: + one: Stai per silenziare %{count} account da %{filename}. + other: Stai per silenziare %{count} account da %{filename}. preface: Puoi importare alcune informazioni, come le persone che segui o hai bloccato su questo server, da file creati da un'esportazione su un altro server. recent_imports: Importazioni recenti states: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 41f93397da990f..54b7fb54128b18 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1141,6 +1141,9 @@ ja: view_strikes: 過去のストライクを表示 too_fast: フォームの送信が速すぎます。もう一度やり直してください。 use_security_key: セキュリティキーを使用 + author_attribution: + example_title: サンプルテキスト + s_blog: "%{name} のブログ" challenge: confirm: 続ける hint_html: 以後1時間はパスワードの再入力を求めません @@ -1330,20 +1333,6 @@ ja: merge_long: 現在のレコードを保持したまま新しいものを追加します overwrite: 上書き overwrite_long: 現在のレコードを新しいもので置き換えます - overwrite_preambles: - blocking_html: "%{filename}%{total_items}個のアカウントブロックしたアカウントリストを置き換えます。" - bookmarks_html: "%{filename}%{total_items}件の投稿ブックマークの一覧を置き換えます。" - domain_blocking_html: "%{filename}%{total_items}個のドメイン非表示にしたドメインリストを置き換えます。" - following_html: "%{filename}%{total_items}個のアカウントフォローします。また、この中に含まれていないアカウントのフォローを解除します。" - lists_html: "作成済みのリスト%{filename}の内容で置き換えます%{total_items}個のアカウントが新しいリストに追加されます。" - muting_html: "%{filename}%{total_items}個のアカウントミュートしたアカウントリストを置き換えます。" - preambles: - blocking_html: "%{filename}%{total_items}個のアカウントブロックします。" - bookmarks_html: "%{filename}%{total_items}件の投稿ブックマークに追加します。" - domain_blocking_html: "%{filename}%{total_items}個のドメイン非表示にします。" - following_html: "%{filename}%{total_items}個のアカウントフォローします。" - lists_html: "%{filename}%{total_items}個のアカウントリストに追加します。追加先のリストがない場合は新しく作成されます。" - muting_html: "%{filename}%{total_items}個のアカウントミュートします。" preface: 他のサーバーでエクスポートされたファイルから、フォロー/ブロックした情報をこのサーバー上のアカウントにインポートできます。 recent_imports: 最近のインポート states: @@ -1659,6 +1648,7 @@ ja: delete: アカウントの削除 development: 開発 edit_profile: プロフィールを編集 + export: エクスポート featured_tags: 注目のハッシュタグ import: データのインポート import_and_export: インポート・エクスポート @@ -1903,6 +1893,7 @@ ja: instructions_html: 以下のコードをコピーしてwebサイトのHTMLに貼り付けます。次に「プロフィールを編集」タブから、「プロフィール補足情報」のいずれかの欄にwebサイトのURLを記入し、「変更を保存」をクリックしてください。 verification: 認証 verified_links: 確認済みリンク + website_verification: ウェブサイトの認証 webauthn_credentials: add: セキュリティキーを追加 create: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 3f6c4b39b8b646..d20d67e4c31297 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1343,19 +1343,31 @@ ko: overwrite: 덮어쓰기 overwrite_long: 기존 것을 모두 지우고 새로 추가 overwrite_preambles: - blocking_html: 나의 차단 목록%{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다. - bookmarks_html: 나의 북마크%{filename}에서 가져온 %{total_items} 개의 게시물로 덮어 씌우려고 합니다. - domain_blocking_html: 나의 도메인 차단 목록%{filename}에서 가져온 %{total_items} 개의 도메인으로 덮어 씌우려고 합니다. - following_html: "%{filename}에서 가져온 %{total_items} 개의 계정팔로우하고 나머지 계정을 팔로우 해제하려고 합니다." - lists_html: 나의 리스트%{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다. - muting_html: 나의 뮤트한 계정 목록%{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다. + blocking_html: + other: 나의 차단 목록%{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다. + bookmarks_html: + other: 나의 북마크%{filename}에서 가져온 %{count} 개의 게시물로 덮어 씌우려고 합니다. + domain_blocking_html: + other: 나의 도메인 차단 목록%{filename}에서 가져온 %{count} 개의 도메인으로 덮어 씌우려고 합니다. + following_html: + other: "%{filename}에서 가져온 %{count} 개의 계정팔로우하고 나머지 계정을 팔로우 해제하려고 합니다." + lists_html: + other: 나의 리스트%{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다. + muting_html: + other: 나의 뮤트한 계정 목록%{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다. preambles: - blocking_html: "%{filename}에서 가져온 %{total_items}개의 계정을 차단하려고 합니다." - bookmarks_html: "%{filename}에서 가져온 %{total_items}개의 게시물을 북마크에 추가하려고 합니다." - domain_blocking_html: "%{filename}에서 가져온 %{total_items}개의 도메인을 차단하려고 합니다." - following_html: "%{filename}에서 가져온 %{total_items}개의 계정을 팔로우하려고 합니다." - lists_html: "%{filename}에서 가져온 %{total_items}개의 계정을 내 리스트에 추가하려고 합니다. 추가할 리스트가 존재하지 않으면 새로 생성될 것입니다." - muting_html: "%{filename}에서 가져온 %{total_items}개의 계정을 뮤트하려고 합니다." + blocking_html: + other: "%{filename}에서 가져온 %{count}개의 계정을 차단하려고 합니다." + bookmarks_html: + other: "%{filename}에서 가져온 %{count}개의 게시물을 북마크에 추가하려고 합니다." + domain_blocking_html: + other: "%{filename}에서 가져온 %{count}개의 도메인을 차단하려고 합니다." + following_html: + other: "%{filename}에서 가져온 %{count}개의 계정을 팔로우하려고 합니다." + lists_html: + other: "%{filename}에서 가져온 %{count}개의 계정을 내 리스트에 추가하려고 합니다. 추가할 리스트가 존재하지 않으면 새로 생성될 것입니다." + muting_html: + other: "%{filename}에서 가져온 %{count}개의 계정을 뮤트하려고 합니다." preface: 다른 서버에서 내보내기 한 파일에서 팔로우 / 차단 정보를 이 계정으로 불러올 수 있습니다. recent_imports: 최근의 가져오기 states: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 275bdab86100c7..97fcf751802067 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1323,20 +1323,6 @@ lad: merge_long: Manten rejistros egzistentes i adjusta muevos overwrite: Sobreskrive overwrite_long: Mete muevos rejistros en vez de los aktuales - overwrite_preambles: - blocking_html: Estas a punto de substituyir tu lista de blokos por asta %{total_items} kuentos de %{filename}. - bookmarks_html: Estas a punto de substituyir tus markadores por asta %{total_items} publikasyones ke vinyeron de %{filename}. - domain_blocking_html: Estas a punto de substituyir tu lista de blokos de domeno por asta %{total_items} domenos de %{filename}. - following_html: Estas a punto de segir asta %{total_items} kuentos de %{filename} i deshar de segir todos los otros kuentos. - lists_html: Estas a punto de sustituyir tus listas con el kontenido de %{filename}. Asta %{total_items} kuentos seran adjustados a muevas listas. - muting_html: Estas a punto de substituyir tu lista de kuentos silensyados por asta %{total_items} kuentos de %{filename}. - preambles: - blocking_html: Estas a punto de blokar asta %{total_items} kuentos de %{filename}. - bookmarks_html: Estas a punto de adjustar asta %{total_items} publikasyones de %{filename} a tus markadores. - domain_blocking_html: Estas a punto de blokar asta %{total_items} domenos de %{filename}. - following_html: Estas a punto de segir asta %{total_items} kuentos de %{filename}. - lists_html: Estas a punto de adjustar %{total_items} kuentos dizde %{filename} a tus listas. Se kriyaran muevas listas si no ay listas para adjustarlas. - muting_html: Estas a punto de silensyar asta %{total_items} kuentos de %{filename}. preface: Puedes importar siertos datos, komo todas las personas a las kualas estas sigiendo o blokando en tu kuento en esta instansya, dizde dosyas eksportadas de otra instansya. recent_imports: Importasyones resyentes states: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 2cc8ff6a497b72..5f90b575e777d0 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1344,20 +1344,6 @@ lv: merge_long: Saglabāt esošos ierakstus un pievienot jaunus overwrite: Pārrakstīt overwrite_long: Nomainīt pašreizējos ierakstus ar jauniem - overwrite_preambles: - blocking_html: Tu gatavojies aizstāt savu bloķēto sarakstu ar līdz pat %{total_items} kontiem no %{filename}. - bookmarks_html: Tu gatavojies aizstāt savas bloķētās izlases ar līdz pat %{total_items} ziņām no %{filename}. - domain_blocking_html: Tu gatavojies aizstāt savu bloķēto domēnu sarakstu ar līdz pat %{total_items} domēniem no %{filename}. - following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename} un pārtrauksi sekot citiem. - lists_html: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{total_items} kontiem tiks pievienoti jauni saraksti. - muting_html: Tu gatavojies aizstāt savu noklusināto kontu sarakstu ar līdz pat %{total_items} kontiem no %{filename}. - preambles: - blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} kontiem no %{filename}. - bookmarks_html: Tu gatavojies pievienot līdz pat %{total_items} ziņām no %{filename} savām grāmatzīmēm. - domain_blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} domēniem no %{filename}. - following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename}. - lists_html: Tu gatavojies pievienot līdz pat %{total_items} kontiem no %{filename} saviem sarakstiem. Jauni saraksti tiks izveidoti, ja nav saraksta, ko pievienot. - muting_html: Tu gatavojies noklusināt līdz pat %{total_items} kontiem no %{filename}. preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē. recent_imports: Nesen importēts states: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 9994a34bb5eac5..90493a30b685c6 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1223,20 +1223,6 @@ ms: merge_long: Simpan rekod sedia ada dan tambah rekod baharu overwrite: Tulis ganti overwrite_long: Gantikan rekod semasa dengan yang baharu - overwrite_preambles: - blocking_html: Anda akan menggantikan senarai blok anda dengan sehingga %{total_items} akaun daripada %{filename}. - bookmarks_html: Anda akan menggantikan penanda halaman anda dengan sehingga %{total_items} siaran daripada %{filename}. - domain_blocking_html: Anda akan menggantikan senarai blok domain anda dengan sehingga %{total_items} domain daripada %{filename}. - following_html: Anda akan mengikuti sehingga %{total_items} akaun daripada %{filename} dan berhenti mengikuti orang lain. - lists_html: Anda akan menggantikan senarai anda dengan kandungan %{filename}. Sehingga %{total_items} akaun akan ditambahkan pada senarai baharu. - muting_html: Anda akan menggantikan senarai akaun yang diredamkan dengan sehingga %{total_items} akaun daripada %{filename}. - preambles: - blocking_html: Anda akan menyekat sehingga %{total_items} akaun daripada %{filename}. - bookmarks_html: Anda akan menambah sehingga %{total_items} pos daripada %{filename} ke penanda halaman anda. - domain_blocking_html: Anda akan menyekat sehingga %{total_items} domain daripada %{filename}. - following_html: Anda akan mengikuti sehingga %{total_items} akaun daripada %{filename}. - lists_html: Anda akan menambah sehingga %{total_items} akaun daripada %{filename} ke senarai anda. Senarai baharu akan dibuat jika tiada senarai untuk ditambah. - muting_html: Anda akan membisukan sehingga %{total_items} akaun daripada %{filename}. preface: Anda boleh mengimport data yang telah anda eksport dari server lain, seperti senarai orang yang anda ikuti atau sekat. recent_imports: Import terkini states: diff --git a/config/locales/my.yml b/config/locales/my.yml index 598915fad9019b..6a330a16c7f75a 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1222,20 +1222,6 @@ my: merge_long: ရှိပြီးသားမှတ်တမ်းများ သိမ်းဆည်းပြီး အသစ်များ ထပ်ထည့်ပါ overwrite: ထပ်ရေးရန် overwrite_long: လက်ရှိမှတ်တမ်းများကို အသစ်များဖြင့် အစားထိုးပါ - overwrite_preambles: - blocking_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ သင့်ပိတ်ဆို့စာရင်းကို အစားထိုးပါတော့မည်။ - bookmarks_html: သင်သည် %{filename} မှ %{total_items} ပို့စ်များ အထိ သင့် bookmark များကို အစားထိုးပါတော့မည်။ - domain_blocking_html: သင်သည် %{filename} မှ %{total_items} ဒိုမိန်းများ ဖြင့် သင်၏ ဒိုမိန်းပိတ်ဆို့စာရင်းကို အစားထိုးပါတော့မည်။ - following_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ စောင့်ကြည့် ပြီး အခြားမည်သူ့ကိုမျှ စောင့်မကြည့်တော့ပါ ။ - lists_html: သင်သည် %{filename} ၏ အကြောင်းအရာများဖြင့် သင့်စာရင်းများကို အစားထိုး ပါတော့မည်။ %{total_items} အကောင့်များအထိ စာရင်းအသစ်များသို့ ပေါင်းထည့်ပါမည်။ - muting_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ ဖြင့် အသံပိတ်ထားသော သင့်အကောင့်များစာရင်းကို အစားထိုးပါတော့မည်။ - preambles: - blocking_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ ပိတ်ဆို့ပါတော့မည်။ - bookmarks_html: သင်သည် %{filename} မှ %{total_items} ပို့စ်များ အထိ သင့် Bookmark များ သို့ ပေါင်းထည့်တော့မည်။ - domain_blocking_html: သင်သည် %{filename} မှ %{total_items} ဒိုမိန်းများ အထိ ပိတ်ဆို့ပါတော့မည်။ - following_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ စောင့်ကြည့် ပါတော့မည်။ - lists_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ ကို သင့် စာရင်းများ သို့ ပေါင်းထည့်ပါတော့မည်။ ထည့်ရန်စာရင်းမရှိပါက စာရင်းအသစ်များကို ဖန်တီးပါမည်။ - muting_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ အသံတိတ်ပါတော့မည်။ preface: သင်စောင့်ကြည့်နေသည့်လူများစာရင်း သို့မဟုတ် ပိတ်ပင်ထားသည့်စာရင်းကဲ့သို့သော အခြားဆာဗာတစ်ခုမှ သင်ထုတ်ယူထားသည့်အချက်အလက်များကို ပြန်လည်ထည့်သွင်းနိုင်သည်။ recent_imports: လတ်တလောထည့်သွင်းမှုများ states: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 7681a04eaecdfa..52ec4c89ce2b26 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1366,19 +1366,43 @@ nl: overwrite: Overschrijven overwrite_long: Huidige gegevens met de nieuwe gegevens vervangen overwrite_preambles: - blocking_html: Je staat op het punt jouw lijst met geblokkeerde accounts te vervangen door %{total_items} accounts vanuit %{filename}. - bookmarks_html: Je staat op het punt jouw bladwijzers te vervangen door %{total_items} berichten vanuit %{filename}. - domain_blocking_html: Je staat op het punt jouw lijst met geblokkeerde domeinen te vervangen door %{total_items} domeinen vanuit %{filename}. - following_html: Je staat op het punt om %{total_items} accounts te volgen vanuit %{filename} en te stoppen met het volgen van alle andere accounts. - lists_html: Je staat op het punt je lijsten te vervangen door inhoud van %{filename}. Er worden totaal %{total_items} accounts aan nieuwe lijsten toegevoegd. - muting_html: Je staat op het punt jouw lijst met genegeerde accounts te vervangen door %{total_items} accounts vanuit %{filename}. + blocking_html: + one: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} account. + other: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} accounts. + bookmarks_html: + one: Je staat op het punt om vanuit %{filename} je bladwijzers te vervangen met in het totaal %{count} bericht. + other: Je staat op het punt om vanuit %{filename} je bladwijzers te vervangen met in het totaal %{count} berichten. + domain_blocking_html: + one: Je staat op het punt om vanuit %{filename} je lijst met geblokkeerde domeinen te vervangen met in het totaal %{count} domein. + other: Je staat op het punt om vanuit %{filename} je lijst met geblokkeerde domeinen te vervangen met in het totaal %{count} domeinen. + following_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te volgen en de rest te ontvolgen. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te volgen en de rest te ontvolgen. + lists_html: + one: Je staat op het punt om met de inhoud van %{filename} je lijsten te vervangen. In het totaal wordt %{count} account aan de nieuwe lijst(en) toegevoegd. + other: Je staat op het punt om met de inhoud van %{filename} je lijsten te vervangen. In het totaal worden %{count} accounts aan de nieuwe lijst(en) toegevoegd. + muting_html: + one: Je staat op het punt om vanuit %{filename} je negeerlijst te vervangen met in het totaal %{count} account. + other: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} accounts. preambles: - blocking_html: Je staat op het punt om %{total_items} accounts te blokkeren vanuit %{filename}. - bookmarks_html: Je staat op het punt om %{total_items} berichten aan je bladwijzers toe te voegen vanuit %{filename}. - domain_blocking_html: Je staat op het punt om %{total_items} accounts te negeren vanuit %{filename}. - following_html: Je staat op het punt om %{total_items} accounts te volgen vanuit %{filename}. - lists_html: Je staat op het punt om tot %{total_items} accounts van %{filename} toe te voegen aan je lijsten. Nieuwe lijsten worden aangemaakt als er geen lijst is om aan toe te voegen. - muting_html: Je staat op het punt om %{total_items} accounts te negeren vanuit %{filename}. + blocking_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te blokkeren. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te blokkeren. + bookmarks_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} bericht aan je bladwijzers toe te voegen. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} berichten aan je bladwijzers toe te voegen. + domain_blocking_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} domein te blokkeren. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} domeinen te blokkeren. + following_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te volgen. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te volgen. + lists_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account aan je lijsten toe te voegen. Er wordt een nieuwe lijst aangemaakt wanneer er geen lijst is om het aan toe te voegen. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts aan je lijsten toe te voegen. Er worden nieuwe lijsten aangemaakt wanneer er geen lijsten zijn om ze aan toe te voegen. + muting_html: + one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te negeren. + other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te negeren. preface: Je kunt bepaalde gegevens, zoals de mensen die jij volgt of hebt geblokkeerd, naar jouw account op deze server importeren. Je moet deze gegevens wel eerst op de oorspronkelijke server exporteren. recent_imports: Recent geïmporteerd states: @@ -1526,8 +1550,8 @@ nl: title: Nieuw volgverzoek mention: action: Reageren - body: 'Jij bent door %{name} vermeld in:' - subject: Jij bent vermeld door %{name} + body: 'Je bent door %{name} vermeld in:' + subject: Je bent vermeld door %{name} title: Nieuwe vermelding poll: subject: Een peiling van %{name} is beëindigd diff --git a/config/locales/nn.yml b/config/locales/nn.yml index ca5e34ee55d80d..ec3db6520fdc0c 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1366,19 +1366,9 @@ nn: overwrite: Skriv over overwrite_long: Byt ut dei noverande oppføringane med dei nye overwrite_preambles: - blocking_html: Du skal til å byta ut blokkeringslista di med opp til %{total_items} brukarkontoar frå %{filename}. - bookmarks_html: Du skal til å byta ut bokmerka dine med opp til %{total_items} innlegg frå %{filename}. - domain_blocking_html: Du skal til å byta ut domeneblokkeringslista di med opp til %{total_items} domene frå %{filename}. - following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename} og slutta å fylgja alle andre. - lists_html: Du er i ferd med å erstatta listene dine med innhaldet i %{filename}. Opptil %{total_items} kontoar vil bli lagt til i nye lister. - muting_html: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{total_items} brukarkontoar frå %{filename}. - preambles: - blocking_html: Du skal til å blokkera opp til %{total_items} brukarkontoar frå %{filename}. - bookmarks_html: Du skal til å leggja til opp til %{total_items} innlegg frå %{filename} til bokmerka dine. - domain_blocking_html: Du skal til å blokkera opp til %{total_items} domene frå %{filename}. - following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename}. - lists_html: Du er i ferd med å leggja til opptil %{total_items} kontoar frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før. - muting_html: Du skal til å dempa opp til %{total_items} brukarkontoar frå %{filename}. + blocking_html: + one: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkonto frå %{filename}. + other: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkontoar frå %{filename}. preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer. recent_imports: Siste importar states: diff --git a/config/locales/no.yml b/config/locales/no.yml index ec0b14d5a3bfff..94986f4cae9d2d 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1268,20 +1268,6 @@ merge_long: Behold eksisterende og legg til nye overwrite: Overskriv overwrite_long: Erstatt gjeldende med de nye - overwrite_preambles: - blocking_html: Du er i ferd med å erstatte din blokkeringsliste med inntil %{total_items} kontoer fra %{filename}. - bookmarks_html: Du er i ferd med å erstatte dine bokmerker med inntil %{total_items} innlegg fra %{filename}. - domain_blocking_html: Du er i ferd med å erstatte din domene-blokkeringsliste med inntil %{total_items} domener fra %{filename}. - following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename} og slutte å følge alle andre. - lists_html: Du er i ferd med å erstatte dine lister med innholdet i %{filename}. Inntil %{total_items} kontoer legges til i nye lister. - muting_html: Du er i ferd med å erstatte listen over dempede kontoer med inntil %{total_items} kontoer fra %{filename}. - preambles: - blocking_html: Du er i ferd med å blokkere inntil %{total_items} kontoer fra %{filename}. - bookmarks_html: Du er i ferd med å legge til inntil %{total_items} innlegg fra %{filename} til dine bokmerker. - domain_blocking_html: Du er i ferd med å blokkere inntil %{total_items} domener fra %{filename}. - following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename}. - lists_html: Du er i ferd med å legge inntil %{total_items} kontoer fra %{filename} til dine lister. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til. - muting_html: Du er i ferd med å dempe inntil %{total_items} kontoer fra %{filename}. preface: Du kan importere data om brukere du følger eller blokkerer til kontoen din på denne instansen med eksportfiler fra andre instanser. recent_imports: Siste importer states: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 3aaf7a5a57a2a4..aaf8a9e722dda2 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1415,20 +1415,6 @@ pl: merge_long: Zachowaj obecne wpisy i dodaj nowe overwrite: Nadpisz overwrite_long: Zastąp obecne wpisy nowymi - overwrite_preambles: - blocking_html: Zamierzasz zastąpić swoją listę bloków maksymalnie %{total_items} kont z %{filename}. - bookmarks_html: Zamierzasz zastąpić swoje zakładki maksymalnie %{total_items} wpisami z %{filename}. - domain_blocking_html: Zamierzasz zastąpić swoją listę bloków domen maksymalnie %{total_items} domenami z %{filename}. - following_html: Zamierzasz zaobserwować maksymalnie %{total_items} kont z %{filename} i przestać obserwować kogokolwiek innego. - lists_html: Zamierzasz zastąpić swoje listy maksymalnie %{total_items} kontami z %{filename}. - muting_html: Zamierzasz zastąpić swoją wyciszonych maksymalnie %{total_items} kontami z %{filename}. - preambles: - blocking_html: Zamierzasz zablokować maksymalnie %{total_items} kont z %{filename}. - bookmarks_html: Zamierzasz dodać maksymalnie %{total_items} wpisów do twoich zakładek z %{filename}. - domain_blocking_html: Zamierzasz zablokować maksymalnie %{total_items} domen z %{filename}. - following_html: Zamierzasz zaobserwować maksymalnie %{total_items} kont z %{filename}. - lists_html: Zamierzasz dodać maksymalnie %{total_items} kont do twoich list z %{filename}. Jeżeli nie ma list, nowe zostaną utworzone. - muting_html: Zamierzasz wyciszyć maksymalnie %{total_items} kont z %{filename}. preface: Możesz zaimportować pewne dane (np. lista kont, które obserwujesz lub blokujesz) do swojego konta na tym serwerze, korzystając z danych wyeksportowanych z innego serwera. recent_imports: Ostatnie importy states: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 6451e7c601ace5..427703f57e7c27 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1365,20 +1365,6 @@ pt-BR: merge_long: Manter os registros existentes e adicionar novos overwrite: Sobrescrever overwrite_long: Substituir os registros atuais com os novos - overwrite_preambles: - blocking_html: Você está prestes a substituir sua lista de bloqueios com até contas%{total_items} de %{filename}. - bookmarks_html: Você está prestes a substituir seus favoritos por até %{total_items} posts de %{filename}. - domain_blocking_html: Você está prestes a substituir sua lista de bloqueio de domínio com até domínios%{total_items} de %{filename}. - following_html: Você está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir todos os outros. - lists_html: Você está prestes a substituir sua lista pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas. - muting_html: Você está prestes a substituir sua lista de contas silenciadas com até %{total_items} contas de %{filename}. - preambles: - blocking_html: Você está prestes a bloquear até %{total_items} contas de %{filename}. - bookmarks_html: Você está prestes a adicionar até %{total_items} posts de %{filename} para seus favoritos. - domain_blocking_html: Você está prestes a bloquear até %{total_items} domínios de %{filename}. - following_html: Você está prestes a seguir até %{total_items} contas de %{filename}. - lists_html: Você está prestes a adicionar até %{total_items} contas a partir de %{filename} para suas listas. Novas listas serão criadas se não houver uma para a qual adicionar. - muting_html: Você está prestes a silenciar até contas%{total_items} de %{filename}. preface: Você pode importar dados que você exportou de outro servidor, como a lista de pessoas que você segue ou bloqueou. recent_imports: Importações recentes states: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 6b48e8de26b48e..68217113d27166 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1362,20 +1362,6 @@ pt-PT: merge_long: Manter os registos existentes e adicionar novos registos overwrite: Escrever por cima overwrite_long: Substituir os registos atuais pelos novos - overwrite_preambles: - blocking_html: Está prestes a substituir a sua lista de bloqueios com até %{total_items} contas de %{filename}. - bookmarks_html: Está prestes a substituir os seus marcadores com até %{total_items} publicações de %{filename}. - domain_blocking_html: Está prestes a substituir a sua lista de bloqueios de domínio com até %{total_items} domínios de %{filename}. - following_html: Está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir quaisquer outras contas. - lists_html: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas. - muting_html: Está prestes a substituir a sua lista de contas silenciadas com até %{total_items} contas de %{filename}. - preambles: - blocking_html: Está prestes a bloquear até %{total_items} contas de %{filename}. - bookmarks_html: Está prestes a adicionar até %{total_items} publicações de %{filename} aos seus marcadores. - domain_blocking_html: Está prestes a bloquear até %{total_items} domínios de %{filename}. - following_html: Está prestes a seguir até %{total_items} contas de %{filename}. - lists_html: Está prestes a adicionar até %{total_items} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar. - muting_html: Está prestes a silenciar até %{total_items} contas de %{filename}. preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas. recent_imports: Importações recentes states: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index c61c7f459fcf3e..25ca703732aafa 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1410,20 +1410,6 @@ ru: merge_long: Сохранить имеющиеся данные и добавить новые. overwrite: Перезаписать overwrite_long: Перезаписать имеющиеся данные новыми. - overwrite_preambles: - blocking_html: Вы собираетесь заменить свой блок-лист на %{total_items} аккаунтов из %{filename}. - bookmarks_html: Вы собираетесь заменить свои закладки на %{total_items} постов из %{filename}. - domain_blocking_html: Вы собираетесь заменить ваш список блокировки доменов на %{total_items} доменов из %{filename}. - following_html: Вы собираетесь следить за %{total_items} аккаунтами из %{filename} и прекратить следить за всеми остальными. - lists_html: Вы собираетесь заменить ваши списки содержимым %{filename}. До %{total_items} аккаунты будут добавлены в новые списки. - muting_html: Вы собираетесь заменить список отключенных аккаунтов на %{total_items} аккаунтов из %{filename}. - preambles: - blocking_html: Вы собираетесь заблокировать до %{total_items} аккаунтов из %{filename}. - bookmarks_html: Вы собираетесь добавить до %{total_items} постов из %{filename} в свои закладки. - domain_blocking_html: Вы собираетесь блокировать до %{total_items} доменов от %{filename}. - following_html: Вы собираетесь следовать за %{total_items} аккаунтами из %{filename}. - lists_html: Вы собираетесь добавить до %{total_items} аккаунтов от %{filename} к вашим спискам. Новые списки будут созданы, если нет списка для добавления. - muting_html: Вы собираетесь отключить до %{total_items} аккаунтов из %{filename}. preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла. recent_imports: Недавно импортированное states: diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index e7deca9460c98f..11b56bd50dfbae 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -3,6 +3,7 @@ fy: simple_form: hints: account: + attribution_domains_as_text: Beskermet tsjin net korrekte attribúsjes. discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers. display_name: Jo folsleine namme of in aardige bynamme. fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle. @@ -130,6 +131,7 @@ fy: name: Jo kinne elk wurd mei in haadletter begjinne, om sa bygelyks de tekst mear lêsber te meitsjen user: chosen_languages: Allinnich berjochten yn de selektearre talen wurde op de iepenbiere tiidline toand + role: De rol bepaalt hokker rjochten in brûker hat. user_role: color: Kleur dy’t brûkt wurdt foar de rol yn de UI, as RGB yn heksadesimaal formaat highlighted: Dit makket de rol iepenbier sichtber @@ -142,6 +144,7 @@ fy: url: Wêr’t eveneminten nei ta stjoerd wurde labels: account: + attribution_domains_as_text: Allinnich bepaalde websites tastean discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte fields: name: Label diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 7f8aaa01d6fd05..bf30cdb1bffccd 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -295,7 +295,7 @@ nl: favourite: Wanneer iemand jouw bericht als favoriet markeert follow: Wanneer iemand jou is gaan volgen follow_request: Wanneer iemand jou wil volgen - mention: Wanneer iemand jou heeft vermeld + mention: Je bent door iemand vermeld pending_account: Wanneer een nieuw account moet worden beoordeeld reblog: Wanneer iemand jouw bericht heeft geboost report: Nieuwe rapportage is ingediend diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 286bece8778bd1..e9c06bcaa65674 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1398,20 +1398,6 @@ sl: merge_long: Ohrani obstoječe zapise in dodaj nove overwrite: Prepiši overwrite_long: Zamenjaj trenutne zapise z novimi - overwrite_preambles: - blocking_html: Svoj seznam blokiranih računov boste nadomestili z največ %{total_items} računi iz %{filename}. - bookmarks_html: Svoje zaznamke boste nadomestili z največ %{total_items} objavami iz %{filename}. - domain_blocking_html: Svoj seznam blokiranih domen boste nadomestili z največ %{total_items} domenami iz %{filename}. - following_html: "Začeli boste slediti največ %{total_items} računom iz %{filename} in prenehali slediti vsem ostalim." - lists_html: Svoje sezname boste nadomestili z vsebino datoteke %{filename}. Največ %{total_items} računov bo dodanih na nove sezname. - muting_html: Svoj seznam utišanih računov boste nadomestili z največ %{total_items} računi iz %{filename}. - preambles: - blocking_html: "Blokirali boste največ %{total_items} računov iz %{filename}." - bookmarks_html: "Med zaznamke boste dodali boste največ %{total_items} objav iz %{filename}." - domain_blocking_html: "Blokirali boste največ %{total_items} domen iz %{filename}." - following_html: "Začeli boste slediti največ %{total_items} računom iz %{filename}." - lists_html: Dodali boste največ %{total_items} računov iz %{filename} na svoje sezname. Po potrebi bodo ustvarjeni novi seznami. - muting_html: "Utišali boste največ %{total_items} računov iz %{filename}." preface: Podatke, ki ste jih izvozili iz drugega strežnika, lahko uvozite. Na primer seznam oseb, ki jih spremljate ali blokirate. recent_imports: Nedavni uvozi states: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 2f05d7860cb3cd..0b276393a670a3 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1359,19 +1359,43 @@ sq: overwrite: Mbishkruaje overwrite_long: Zëvendësoji zërat ekzistues me të rinjtë overwrite_preambles: - blocking_html: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve me %{total_items} llogari nga %{filename}. - bookmarks_html: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj me %{total_items} postime nga %{filename}. - domain_blocking_html: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimit të përkatësive me %{total_items} përkatësi nga %{filename}. - following_html: Ju ndan një hap nga ndjekja e %{total_items} llogarive nga %{filename} dhe reshtja së ndjekuri këdo tjetër. - lists_html: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndë nga %{filename}. Te listat e reja do të shtohen deri në %{total_items} llogari. - muting_html: Ju ndan një hpa nga zëvendësimi i listës suaj të llogarive të heshtuara me %{total_items} llogari nga %{filename}. + blocking_html: + one: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve, me %{count} llogari nga %{filename}. + other: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve, me %{count} llogari nga %{filename}. + bookmarks_html: + one: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj, me %{count} postim nga %{filename}. + other: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj, me %{count} postime nga %{filename}. + domain_blocking_html: + one: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve të përkatësive, me %{count} përkatësi nga %{filename}. + other: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve të përkatësive, me %{count} përkatësi nga %{filename}. + following_html: + one: Ju ndan një hap nga ndjekja e %{count} llogarie nga %{filename} dhe reshtja e ndjekjes së gjithkujt tjetër. + other: Ju ndan një hap nga ndjekja e deri %{count} llogarish nga %{filename} dhe reshtja e ndjekjes së gjithkujt tjetër. + lists_html: + one: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndën e %{filename}. Te listat e reja do të shtohet deri %{count} llogari. + other: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndën e %{filename}. Te listat e reja do të shtohet deri %{count} llogari. + muting_html: + one: Ju ndan një hap nga zëvendësimi i listës tuaj të llogarisë së heshtuar me %{count} llogari nga from %{filename}. + other: Ju ndan një hap nga zëvendësimi i listës tuaj të llogarive të heshtuara me %{count} llogari nga from %{filename}. preambles: - blocking_html: Ju ndan një hap nga bllokimi i %{total_items} llogarive nga %{filename}. - bookmarks_html: Ju ndan një hap nga shtimi te faqerojtësit tuaj i %{total_items} postimeve nga %{filename}. - domain_blocking_html: Ju ndan një hap nga bllokimi i %{total_items} përkatësive nga %{filename}. - following_html: Ju ndan një hap nga ndjekja e %{total_items} llogarive nga %{filename}. - lists_html: Jui nda një hap nga shtimi te listat tuaja i deri %{total_items} llogarive nga %{filename}. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja. - muting_html: Ju ndan një hap nga heshtimi i %{total_items} llogarive nga %{filename}. + blocking_html: + one: Ju ndan një hap nga bllokimi i deri %{count} llogarie nga %{filename}. + other: Ju ndan një hap nga bllokimi i deri %{count} llogarive nga %{filename}. + bookmarks_html: + one: Ju ndan një hap nga shtimi te faqerojtësit tuaj i deri %{count} postimi nga %{filename}. + other: Ju ndan një hap nga shtimi te faqerojtësit tuaj i deri %{count} postimeve nga %{filename}. + domain_blocking_html: + one: Ju ndan një hap nga bllokimi i deri %{count} përkatësie nga %{filename}. + other: Ju ndan një hap nga bllokimi i deri %{count} përkatësive nga %{filename}. + following_html: + one: Ju ndan një hap nga ndjekja e deri %{count} llogarie nga %{filename}. + other: Ju ndan një hap nga ndjekja e deri %{count} llogarive nga %{filename}. + lists_html: + one: Ju ndan një hap nga shtimi i deri %{count} llogarie nga %{filename} te listat tuaja. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja. + other: Ju ndan një hap nga shtimi i deri %{count} llogarive nga %{filename} te listat tuaja. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja. + muting_html: + one: Ju ndan një hap nga heshtimi i deri %{count} llogarie nga %{filename}. + other: Ju ndan një hap nga heshtimi i deri %{count} llogarive nga %{filename}. preface: Mund të importoni të dhëna që keni eksportuar nga një shërbyes tjetër, bie fjala, një listë të personave që ndiqni ose bllokoni. recent_imports: Importime së fundi states: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index ad14d9d131f57f..f56cdb9cb5e26f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1302,20 +1302,6 @@ sr-Latn: merge_long: Zadržite postojeće zapise i dodajte nove overwrite: Zameni overwrite_long: Zameni trenutne zapise novima - overwrite_preambles: - blocking_html: Upravo ćete zameniti svoju listu blokiranih sa do %{total_items} naloga iz %{filename}. - bookmarks_html: Upravo ćete zameniti svoje obeleživače sa do %{total_items} objava iz %{filename}. - domain_blocking_html: Upravo ćete zameniti svoju listu blokiranih domena sa do %{total_items} domena iz %{filename}. - following_html: Upravo ćete pratiti do %{total_items} naloga iz %{filename} and i prestati sa praćenjem bilo koga drugog. - lists_html: Spremate se da zamenite svoje liste sadržajem od %{filename}. Do %{total_items} naloga će biti dodato na nove liste. - muting_html: Upravo ćete zameniti svoju listu ignorisanih naloga sa do %{total_items} naloga iz %{filename}. - preambles: - blocking_html: Upravo ćete blokirati do %{total_items} naloga iz %{filename}. - bookmarks_html: Upravo ćete dodati do %{total_items} objava iz %{filename} u vaše obeleživače. - domain_blocking_html: Upravo ćete blokirati do %{total_items} domena iz %{filename}. - following_html: Upravo ćete pratiti do %{total_items} naloga iz %{filename}. - lists_html: Spremate se da dodate do %{total_items} naloga od %{filename} na svoje liste. Nove liste će biti kreirane ako ne postoji lista za dodavanje. - muting_html: Upravo ćete ignorisati do %{total_items} naloga iz %{filename}. preface: Možete uvesti podatke koje ste izvezli sa druge instance, kao što su liste ljudi koje ste pratili ili blokirali. recent_imports: Nedavni uvozi states: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index fc92b98176186e..45feb0b5fca073 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1332,20 +1332,6 @@ sr: merge_long: Задржите постојеће записе и додајте нове overwrite: Замени overwrite_long: Замени тренутне записе новима - overwrite_preambles: - blocking_html: Управо ћете заменити своју листу блокираних са до %{total_items} налога из %{filename}. - bookmarks_html: Управо ћете заменити своје обележиваче са до %{total_items} објава из %{filename}. - domain_blocking_html: Управо ћете заменити своју листу блокираних домена са до %{total_items} домена из %{filename}. - following_html: Управо ћете пратити до %{total_items} налога из %{filename} and и престати са праћењем било кога другог. - lists_html: Спремате се да замените своје листе садржајем од %{filename}. До %{total_items} налога ће бити додато на нове листе. - muting_html: Управо ћете заменити своју листу игнорисаних налога са до %{total_items} налога из %{filename}. - preambles: - blocking_html: Управо ћете блокирати до %{total_items} налога из %{filename}. - bookmarks_html: Управо ћете додати до %{total_items} објава из %{filename} у ваше обележиваче. - domain_blocking_html: Управо ћете блокирати до %{total_items} домена из %{filename}. - following_html: Управо ћете пратити до %{total_items} налога из %{filename}. - lists_html: Спремате се да додате до %{total_items} налога од %{filename} на своје листе. Нове листе ће бити креиране ако не постоји листа за додавање. - muting_html: Управо ћете игнорисати до %{total_items} налога из %{filename}. preface: Можете увести податке које сте извезли са друге инстанце, као што су листе људи које сте пратили или блокирали. recent_imports: Недавни увози states: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index dadd5f160030dd..0d19d17c3b1935 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1318,20 +1318,6 @@ sv: merge_long: Behåll befintliga uppgifter och lägg till nya overwrite: Skriv över overwrite_long: Ersätt de nuvarande uppgifterna med de nya - overwrite_preambles: - blocking_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} konton från %{filename}. - bookmarks_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} inlägg från %{filename}. - domain_blocking_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} domäner från %{filename}. - following_html: Du är på väg till följ upp till %{total_items} konton från %{filename} och sluta följa någon annan. - lists_html: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{total_items} konton kommer att läggas till i nya listor. - muting_html: Du är på väg att ersätta din lista med tystade konton med upp till %{total_items} konton från %{filename}. - preambles: - blocking_html: Du är på väg att blockera med upp till %{total_items} konton från %{filename}. - bookmarks_html: Du håller på att lägga upp till %{total_items} inlägg från %{filename} till dina bokmärken. - domain_blocking_html: Du är på väg att blockera upp till %{total_items} domäner från %{filename}. - following_html: Du är på väg att följa upp till %{total_items} konton från %{filename}. - lists_html: Du håller på att lägga upp till %{total_items} konton från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till. - muting_html: Du är på väg att tysta upp till %{total_items} konton från %{filename}. preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. recent_imports: Nyligen importerade states: diff --git a/config/locales/th.yml b/config/locales/th.yml index 3cb802afe3e981..c6ba60736d8f4f 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1340,20 +1340,6 @@ th: merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่ overwrite: เขียนทับ overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่ - overwrite_preambles: - blocking_html: คุณกำลังจะ แทนที่รายการการปิดกั้นของคุณ ด้วยมากถึง %{total_items} บัญชี จาก %{filename} - bookmarks_html: คุณกำลังจะ แทนที่ที่คั่นหน้าของคุณ ด้วยมากถึง %{total_items} โพสต์ จาก %{filename} - domain_blocking_html: คุณกำลังจะ แทนที่รายการการปิดกั้นโดเมนของคุณ ด้วยมากถึง %{total_items} โดเมน จาก %{filename} - following_html: คุณกำลังจะ ติดตาม มากถึง %{total_items} บัญชี จาก %{filename} และ หยุดการติดตามคนอื่นใด - lists_html: คุณกำลังจะ แทนที่รายการของคุณ ด้วยเนื้อหาของ %{filename} จะเพิ่มมากถึง %{total_items} บัญชี ไปยังรายการใหม่ - muting_html: คุณกำลังจะ แทนที่รายการบัญชีที่ซ่อนอยู่ของคุณ ด้วยมากถึง %{total_items} บัญชี จาก %{filename} - preambles: - blocking_html: คุณกำลังจะ ปิดกั้น มากถึง %{total_items} บัญชี จาก %{filename} - bookmarks_html: คุณกำลังจะเพิ่มมากถึง %{total_items} โพสต์ จาก %{filename} ไปยัง ที่คั่นหน้า ของคุณ - domain_blocking_html: คุณกำลังจะ ปิดกั้น มากถึง %{total_items} โดเมน จาก %{filename} - following_html: คุณกำลังจะ ติดตาม มากถึง %{total_items} บัญชี จาก %{filename} - lists_html: คุณกำลังจะเพิ่มมากถึง %{total_items} บัญชี จาก %{filename} ไปยัง รายการ ของคุณ จะสร้างรายการใหม่หากไม่มีรายการที่จะเพิ่มไปยัง - muting_html: คุณกำลังจะ ซ่อน มากถึง %{total_items} บัญชี จาก %{filename} preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น recent_imports: การนำเข้าล่าสุด states: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index f1e09837054afc..df55aa5a29a871 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1366,19 +1366,43 @@ tr: overwrite: Üzerine yaz overwrite_long: Mevcut kayıtları yenileriyle değiştir overwrite_preambles: - blocking_html: "Engel listenizi, %{filename} dosyasından, %{total_items} hesapla değiştirmek üzeresiniz." - bookmarks_html: "Yerimlerinizi, %{filename} dosyasından, %{total_items} gönderiyle değiştirmek üzeresiniz." - domain_blocking_html: "Alan adı engel listenizi, %{filename} dosyasından, %{total_items} alan adıyla değiştirmek üzeresiniz." - following_html: "%{filename} dosyasından %{total_items} hesabı takip etmeye başlamak ve diğer herkesi takipten çıkmak üzeresiniz." - lists_html: Listelerinizi %{filename} içeriğiyle değiştirmek üzeresiniz. Yeni listelere en fazla %{total_items} hesap eklenecek. - muting_html: "Sessize alınmış hesaplar listenizi, %{filename} dosyasından, %{total_items} hesapla değiştirmek üzeresiniz." + blocking_html: + one: "Engelleme listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz." + other: "Engelleme listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz." + bookmarks_html: + one: "Yerimlerinizi, %{filename} dosyasından %{count} gönderi ile değiştirmek üzeresiniz." + other: "Yerimlerinizi, %{filename} dosyasından %{count} gönderi ile değiştirmek üzeresiniz." + domain_blocking_html: + one: "Alan adı engelleme listenizi, %{filename} dosyasından %{count} alan adı ile değiştirmek üzeresiniz." + other: "Alan adı engelleme listenizi, %{filename} dosyasından %{count} alan adı ile değiştirmek üzeresiniz." + following_html: + one: "%{filename} dosyasından %{count} hesabı takip etmek ve diğer herkesin takibini bırakmak üzeresiniz." + other: "%{filename} dosyasından %{count} hesabı takip etmek ve diğer herkesin takibini bırakmak üzeresiniz." + lists_html: + one: "Listelerinizi, %{filename} dosya içeriğiyle değiştirmek üzeresiniz. %{count} hesap yeni listelere eklenecektir." + other: "Listelerinizi, %{filename} dosya içeriğiyle değiştirmek üzeresiniz. %{count} hesap yeni listelere eklenecektir." + muting_html: + one: "Sessize alınmış hesap listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz." + other: "Sessize alınmış hesap listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz." preambles: - blocking_html: "%{filename} dosyasından %{total_items} hesabı engellemek üzeresiniz." - bookmarks_html: "%{filename} dosyasından %{total_items} gönderiyi yerimlerinize eklemek üzeresiniz." - domain_blocking_html: "%{filename} dosyasından %{total_items} alan adını engellemek üzeresiniz." - following_html: "%{filename} dosyasından %{total_items} hesabı takip etmek üzeresiniz." - lists_html: "Listelerinize %{filename} dosyasından en fazla %{total_items} hesap eklemek üzeresiniz. Eklenecek bir liste olmaması durumunda yeni listeler oluşturulacaktır." - muting_html: "%{filename} dosyasından %{total_items} hesabı sessize almak üzeresiniz." + blocking_html: + one: "%{filename} dosyasından %{count} hesap engellemek üzeresiniz." + other: "%{filename} dosyasından %{count} hesap engellemek üzeresiniz." + bookmarks_html: + one: "Yerimlerinize, %{filename} dosyasından %{count} gönderi eklemek üzeresiniz." + other: "Yerimlerinize, %{filename} dosyasından %{count} gönderi eklemek üzeresiniz." + domain_blocking_html: + one: "%{filename} dosyasından %{count} alan adı engellemek üzeresiniz." + other: "%{filename} dosyasından %{count} alan adı engellemek üzeresiniz." + following_html: + one: "%{filename} dosyasından %{count} hesap takip etmek üzeresiniz." + other: "%{filename} dosyasından %{count} hesap takip etmek üzeresiniz." + lists_html: + one: "Listelerinize, %{filename} %{count} hesap eklemek üzeresiniz. Eklenecek liste yoksa yeni listeler oluşturulacaktır." + other: "Listelerinize, %{filename} %{count} hesap eklemek üzeresiniz. Eklenecek liste yoksa yeni listeler oluşturulacaktır." + muting_html: + one: "%{filename} dosyasından %{count} hesabı sessize almak üzeresiniz." + other: "%{filename} dosyasından %{count} hesabı sessize almak üzeresiniz." preface: Diğer sunucudan alarak oluşturduğunuz dosyalar sayesinde, bu sunucudaki hesabınıza takipçilerinizi aktarabilir veya istemediğiniz kişileri otomatik olarak engelleyebilirsiniz. recent_imports: Son içe aktarmalar states: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index de1847a745aa05..47732198f10092 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1415,20 +1415,6 @@ uk: merge_long: Зберегти наявні записи та додати нові overwrite: Перезаписувати overwrite_long: Замінити наявні записи новими - overwrite_preambles: - blocking_html: Ви збираєтеся замінити ваш список блокування з %{total_items} обліковими записами з %{filename}. - bookmarks_html: Ви збираєтеся замінити ваші закладки з %{total_items} дописами з %{filename}. - domain_blocking_html: Ви збираєтеся замінити ваш список блокування доменів з %{total_items} доменами з %{filename}. - following_html: Ви збираєтеся слідкувати за %{total_items} обліковими записами з %{filename} і перестати слідкувати за всіма іншими. - lists_html: Ви збираєтеся замінити ваші списки вмістом з %{filename}. До нових списків буде додано до %{total_items} облікових записів. - muting_html: Ви збираєтеся замінити ваш список ігнорованих облікових записів з %{total_items} обліковими записами з %{filename}. - preambles: - blocking_html: Ви збираєтеся заблокувати %{total_items} облікових записів з %{filename}. - bookmarks_html: Ви збираєтеся додати %{total_items} дописів з %{filename} до ваших закладок. - domain_blocking_html: Ви збираєтеся заблокувати %{total_items} доменів з %{filename}. - following_html: Ви збираєтеся слідкувати за %{total_items} обліковими записами з %{filename}. - lists_html: Ви збираєтеся додати до %{total_items} облікових записів з %{filename} до ваших списків. Нові списки будуть створені, якщо немає списку для додавання. - muting_html: Ви збираєтеся ігнорувати %{total_items} облікових записів з %{filename}. preface: Ви можете імпортувати дані, які ви експортували з іншого сервера, наприклад, список людей, яких ви відстежуєте або блокуєте. recent_imports: Останні імпорти states: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 7e44e76e44e762..17edfba70a540a 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1341,19 +1341,31 @@ vi: overwrite: Ghi đè overwrite_long: Thay thế các bản ghi hiện tại bằng các bản ghi mới overwrite_preambles: - blocking_html: Bạn sắp thay thế danh sách chặn với %{total_items} tài khoản từ %{filename}. - bookmarks_html: Bạn sắp thay thế lượt lưu với %{total_items} tút từ %{filename}. - domain_blocking_html: Bạn sắp thay thế danh sách máy chủ chặn với %{total_items} máy chủ từ %{filename}. - following_html: Bạn sắp theo dõi với %{total_items} người từ %{filename}ngừng theo dõi bất kỳ ai. - lists_html: Bạn sắp thay thế các danh sách bằng nội dung từ %{filename}. Hơn %{total_items} tài khoản sẽ được thêm vào những danh sách mới. - muting_html: Bạn sắp thay thế danh sách ẩn với %{total_items} người từ %{filename}. + blocking_html: + other: Bạn sắp thay thế danh sách chặn với %{count} người từ %{filename}. + bookmarks_html: + other: Bạn sắp thay thế danh sách tút đã lưu với %{count} tút từ %{filename}. + domain_blocking_html: + other: Bạn sắp thay thế danh sách máy chủ chặn với %{count} máy chủ từ %{filename}. + following_html: + other: Bạn sắp theo dõi tới %{count} người từ %{filename}ngừng theo dõi mọi người khác. + lists_html: + other: Bạn sắp thay thế danh sách với nội dung của %{filename}. Có %{count} người sẽ được thêm vào những danh sách mới. + muting_html: + other: Bạn sắp they thế danh sách người bạn chặn với %{count} người từ %{filename}. preambles: - blocking_html: Bạn sắp chặn tới %{total_items} người từ %{filename}. - bookmarks_html: Bạn sắp thêm vào %{total_items} tút từ %{filename} vào lượt lưu. - domain_blocking_html: Bạn sắp chặn tới %{total_items} máy chủ từ %{filename}. - following_html: Bạn sắp theo dõi tới %{total_items} người từ %{filename}. - lists_html: Bạn sắp thêm %{total_items} tài khoản từ %{filename} vào danh sách của bạn. Những danh sách mới sẽ được tạo nếu bạn chưa có danh sách nào. - muting_html: Bạn sắp ẩn lên tới %{total_items} người từ %{filename}. + blocking_html: + other: Bạn sắp chặn tới %{count} người từ %{filename}. + bookmarks_html: + other: Bạn sắp thêm tới %{count} tút từ %{filename} vào danh sách tút đã lưu. + domain_blocking_html: + other: Bạn sắp chặn tới %{count} máy chủ từ %{filename}. + following_html: + other: Bạn sắp theo dõi tới %{count} người từ %{filename}. + lists_html: + other: Bạn sắp thêm tới %{count} người từ %{filename} vào danh sách của bạn. Những danh sách mới sẽ được tạo nếu không có danh sách để thêm. + muting_html: + other: Bạn sắp ẩn tới %{count} người từ %{filename}. preface: Bạn có thể nhập dữ liệu mà bạn đã xuất từ một máy chủ khác, chẳng hạn danh sách những người đang theo dõi hoặc chặn. recent_imports: Đã nhập gần đây states: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a73871115b3a72..7be8fb5a5842bf 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1341,19 +1341,31 @@ zh-CN: overwrite: 覆盖 overwrite_long: 将当前记录替换为新记录 overwrite_preambles: - blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你的屏蔽列表。 - bookmarks_html: 你即将使用来自 %{filename} %{total_items} 篇嘟文替换你的书签。 - domain_blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个域名替换你的域名屏蔽列表。 - following_html: 你即将从 %{filename} 关注 %{total_items} 个账户,并停止关注其他任何人。 - lists_html: 你即将用 %{filename} 的内容替换你的列表。新列表中将添加 %{total_items} 个账户。 - muting_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你已隐藏的账户列表。 + blocking_html: + other: 你即将使用来自 %{filename} 的最多 %{count} 个帐户替换你的屏蔽列表。 + bookmarks_html: + other: 你即将使用来自 %{filename} 的最多 %{count} 条嘟文替换你的书签。 + domain_blocking_html: + other: 你即将使用来自 %{filename} 的最多 %{count} 个域名替换你的域名屏蔽列表。 + following_html: + other: 你即将关注来自 %{filename} 的最多 %{count} 个账户,并停止关注其他所有人。 + lists_html: + other: 你即将使用来自 %{filename} 的内容替换你的列表。最多将会有 %{count} 个账户 被添加到新列表。 + muting_html: + other: 你即将使用来自 %{filename} 的最多 %{count} 个帐户替换你的已隐藏账户列表。 preambles: - blocking_html: 你即将从 %{filename} 封锁多达 %{total_items} 个账户。 - bookmarks_html: 你即将把来自 %{filename} %{total_items} 篇嘟文添加到你的书签中。 - domain_blocking_html: 你即将从 %{filename} 屏蔽 %{total_items} 个域名。 - following_html: 你即将从 %{filename} 关注最多 %{total_items} 个账户。 - lists_html: 你即将从 %{filename} 中添加最多 %{total_items} 个账户到你的列表中。如果没有可用列表,将创建新的列表。 - muting_html: 你即将从 %{filename} 隐藏 %{total_items} 个账户。 + blocking_html: + other: 你即将屏蔽来自 %{filename} 的最多 %{count} 个账号。 + bookmarks_html: + other: 你即将把来自 %{filename} %{count} 篇嘟文添加到你的书签中。 + domain_blocking_html: + other: 你即将屏蔽来自 %{filename} 的最多 %{count} 个域名。 + following_html: + other: 你即将关注来自 %{filename} 的最多 %{count} 个账号。 + lists_html: + other: 你即将从 %{filename} 中添加最多 %{count} 个账户到你的列表中。如果没有可用列表,将创建新的列表。 + muting_html: + other: 你即将隐藏来自 %{filename} 的最多 %{count} 个账号。 preface: 你可以在此导入你在其他实例导出的数据,比如你所关注或屏蔽的用户列表。 recent_imports: 最近导入 states: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index c0726fc2f7d04e..e33ebeadb4c096 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1249,20 +1249,6 @@ zh-HK: merge_long: 留下舊有記錄並添加新的資訊 overwrite: 覆蓋 overwrite_long: 用新記錄覆蓋當前記錄 - overwrite_preambles: - blocking_html: 你將以%{filename}的最多%{total_items}個帳號,來取代你現有的封鎖列表。 - bookmarks_html: 你將以%{filename}的最多%{total_items}個帳號,來取代你現有的書籤。 - domain_blocking_html: 你將以%{filename}的最多%{total_items} 個帳號,來取代你現有的網域封鎖列表。 - following_html: 你將從%{filename}追蹤最多%{total_items} 個帳號,並取消追蹤其他人。 - lists_html: 你將根據%{filename}的內容取代的你列表。最多新增 %{total_items} 個帳號 到新列表。 - muting_html: 你將根據%{filename}中最多 %{total_items} 個帳號取代你的靜音帳號列表。 - preambles: - blocking_html: 你將根據%{filename}封鎖最多 %{total_items} 個帳號。 - bookmarks_html: 你將加入 %{filename} 中最多 %{total_items} 篇帖文到你的書籤中。 - domain_blocking_html: 你將封鎖來自%{filename}的最多 %{total_items} 個網域。 - following_html: 你將追蹤 來自 %{filename} 最多 %{total_items} 個帳號。 - lists_html: 你將加入來自%{filename}最多 %{total_items} 個帳號到你的列表中。如果現時沒有列表,將會建立新列表。 - muting_html: 你將靜音來自%{filename}的最多 %{total_items} 個帳號。 preface: 你可以在此匯入你在其他服務站所匯出的資料檔,包括︰你所關注的用戶,被你封鎖的用戶。 recent_imports: 最近的匯入 states: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 4079f68a50c38e..96aedf0a1ce244 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1343,19 +1343,31 @@ zh-TW: overwrite: 覆蓋 overwrite_long: 以新的紀錄覆蓋目前紀錄 overwrite_preambles: - blocking_html: 您將要自 %{filename} 中之 %{total_items} 個帳號取代您的封鎖帳號列表。 - bookmarks_html: 您將要自 %{filename} 中之 %{total_items} 個嘟文取代您的書籤。 - domain_blocking_html: 您將要自 %{filename} 中之 %{total_items} 個網域取代您的封鎖網域列表。 - following_html: 您將要 跟隨%{filename} 中之 %{total_items} 個帳號 並且 取消跟隨其他所有人。 - lists_html: 您將以 %{filename} 之內容取代您的列表。這將會新增 %{total_items} 個帳號至新列表。 - muting_html: 您將要自 %{filename} 中之 %{total_items} 個帳號取代您的靜音帳號列表。 + blocking_html: + other: 您將要自 %{filename} 中之 %{count} 個帳號取代您的封鎖帳號列表。 + bookmarks_html: + other: 您將要自 %{filename} 中之 %{count} 個嘟文取代您的書籤。 + domain_blocking_html: + other: 您將要自 %{filename} 中之 %{count} 個網域取代您的封鎖網域列表。 + following_html: + other: 您將要 跟隨%{filename} 中之 %{count} 個帳號 並且 取消跟隨其他所有人。 + lists_html: + other: 您將以 %{filename} 之內容取代您的列表。這將會新增 %{count} 個帳號至新列表。 + muting_html: + other: 您將要自 %{filename} 中之 %{count} 個帳號取代您的靜音帳號列表。 preambles: - blocking_html: 您將要 封鎖%{filename} 中之 %{total_items} 個帳號。 - bookmarks_html: 您將要自 %{filename} 中之 %{total_items} 個嘟文加入至您的書籤。 - domain_blocking_html: 您將要 封鎖%{filename} 中之 %{total_items} 個網域。 - following_html: 您將要 跟隨%{filename} 中之 %{total_items} 個帳號。 - lists_html: 您將自 %{filename} 新增 %{total_items} 個帳號至您的列表。若不存在列表用以新增帳號,則會建立新列表。 - muting_html: 您將要 靜音%{filename} 中之 %{total_items} 個帳號。 + blocking_html: + other: 您將要 封鎖%{filename} 中之 %{count} 個帳號。 + bookmarks_html: + other: 您將要自 %{filename} 中之 %{count} 個嘟文加入至您的書籤。 + domain_blocking_html: + other: 您將要 封鎖%{filename} 中之 %{count} 個網域。 + following_html: + other: 您將要 跟隨%{filename} 中之 %{count} 個帳號。 + lists_html: + other: 您將自 %{filename} 新增 %{count} 個帳號至您的列表。若不存在列表用以新增帳號,則會建立新列表。 + muting_html: + other: 您將要 靜音%{filename} 中之 %{count} 個帳號。 preface: 您能於此匯入您於其他伺服器所匯出的資料檔,包括跟隨中的使用者、封鎖的使用者名單等。 recent_imports: 最近匯入的 states: From 0ce2db4f7d3dad317803a41d33409dd83165bfc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 09:07:07 +0200 Subject: [PATCH 232/467] Update dependency postcss-preset-env to v10.0.6 (#32260) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9aeb2b02a88541..35fca2f8ad41fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13417,9 +13417,9 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.1": - version: 11.0.1 - resolution: "postcss-custom-media@npm:11.0.1" +"postcss-custom-media@npm:^11.0.2": + version: 11.0.2 + resolution: "postcss-custom-media@npm:11.0.2" dependencies: "@csstools/cascade-layer-name-parser": "npm:^2.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.1" @@ -13427,7 +13427,7 @@ __metadata: "@csstools/media-query-list-parser": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/771b281a28f105370ede7c4a86f9e3dd8d9ec3bf2d2883d4f2cfe9c42b5ec1bf88f713458b356870315d0ba3a285fbeb7bb514a1203d1c4fb113bd9044369bf2 + checksum: 10c0/7bec2b1e0b5d786c33c5715b611ffc8b9737252ee6bf77ca59255ac16f91ce614406923f43250e5c88b04f1bb050f155dc5ed4d9350dbd704c45fbd72e5a9a04 languageName: node linkType: hard @@ -13906,8 +13906,8 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.5 - resolution: "postcss-preset-env@npm:10.0.5" + version: 10.0.6 + resolution: "postcss-preset-env@npm:10.0.6" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" "@csstools/postcss-color-function": "npm:^4.0.2" @@ -13950,7 +13950,7 @@ __metadata: postcss-color-functional-notation: "npm:^7.0.2" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.1" + postcss-custom-media: "npm:^11.0.2" postcss-custom-properties: "npm:^14.0.1" postcss-custom-selectors: "npm:^8.0.1" postcss-dir-pseudo-class: "npm:^9.0.0" @@ -13972,7 +13972,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05 + checksum: 10c0/01660acf3b9ddf4d612a31819e9a5de9fe5383e9eddd2c130180f66ae90c5a881eb408e73454fd50e1839eae71678d738bf72073de08f9013c183b0bd9950fe5 languageName: node linkType: hard From a59160cf01142a49a15b3237d76a19dcfd9de100 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 7 Oct 2024 09:46:03 +0200 Subject: [PATCH 233/467] Add missing `on_delete: :cascade` on `notification_permissions` (#32281) --- ...ix_notification_permission_foreign_keys.rb | 39 +++++++++++++++++++ db/schema.rb | 6 +-- 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb diff --git a/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb new file mode 100644 index 00000000000000..11b82de8a62bb7 --- /dev/null +++ b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class FixNotificationPermissionForeignKeys < ActiveRecord::Migration[7.1] + def up + safety_assured do + execute <<~SQL.squish + ALTER TABLE notification_permissions + DROP CONSTRAINT fk_rails_7c0bed08df, + ADD CONSTRAINT fk_rails_7c0bed08df + FOREIGN KEY (account_id) + REFERENCES accounts(id) + ON DELETE CASCADE, + + DROP CONSTRAINT fk_rails_e3e0aaad70, + ADD CONSTRAINT fk_rails_e3e0aaad70 + FOREIGN KEY (from_account_id) + REFERENCES accounts(id) + ON DELETE CASCADE + SQL + end + end + + def down + safety_assured do + execute <<~SQL.squish + ALTER TABLE notification_permissions + DROP CONSTRAINT fk_rails_7c0bed08df, + ADD CONSTRAINT fk_rails_7c0bed08df + FOREIGN KEY (account_id) + REFERENCES accounts(id), + + DROP CONSTRAINT fk_rails_e3e0aaad70, + ADD CONSTRAINT fk_rails_e3e0aaad70 + FOREIGN KEY (from_account_id) + REFERENCES accounts(id) + SQL + end + end +end diff --git a/db/schema.rb b/db/schema.rb index f9f2d9739593b4..68067841e03c66 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_09_16_190140) do +ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1291,8 +1291,8 @@ add_foreign_key "mentions", "statuses", on_delete: :cascade add_foreign_key "mutes", "accounts", column: "target_account_id", name: "fk_eecff219ea", on_delete: :cascade add_foreign_key "mutes", "accounts", name: "fk_b8d8daf315", on_delete: :cascade - add_foreign_key "notification_permissions", "accounts" - add_foreign_key "notification_permissions", "accounts", column: "from_account_id" + add_foreign_key "notification_permissions", "accounts", column: "from_account_id", on_delete: :cascade + add_foreign_key "notification_permissions", "accounts", on_delete: :cascade add_foreign_key "notification_policies", "accounts", on_delete: :cascade add_foreign_key "notification_requests", "accounts", column: "from_account_id", on_delete: :cascade add_foreign_key "notification_requests", "accounts", on_delete: :cascade From 1f5bd571cd26ddb44228b8e6a9498e765037e639 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Oct 2024 11:35:42 +0200 Subject: [PATCH 234/467] Fix missing avatar fallback interfering with transparency in web UI (#32270) --- .../__snapshots__/avatar-test.jsx.snap | 8 ++++-- app/javascript/mastodon/components/avatar.tsx | 25 +++++++++++++++---- .../styles/mastodon/components.scss | 7 ++++-- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap index 2f0a2de324b551..124b50d8c78c0e 100644 --- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap +++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap @@ -2,7 +2,7 @@ exports[` Autoplay renders a animated avatar 1`] = `
Autoplay renders a animated avatar 1`] = ` >
@@ -21,7 +23,7 @@ exports[` Autoplay renders a animated avatar 1`] = ` exports[` Still renders a still avatar 1`] = `
Still renders a still avatar 1`] = ` >
diff --git a/app/javascript/mastodon/components/avatar.tsx b/app/javascript/mastodon/components/avatar.tsx index 8b16296c2c0403..f61d9676de50b5 100644 --- a/app/javascript/mastodon/components/avatar.tsx +++ b/app/javascript/mastodon/components/avatar.tsx @@ -1,10 +1,11 @@ +import { useState, useCallback } from 'react'; + import classNames from 'classnames'; +import { useHovering } from 'mastodon/../hooks/useHovering'; +import { autoPlayGif } from 'mastodon/initial_state'; import type { Account } from 'mastodon/models/account'; -import { useHovering } from '../../hooks/useHovering'; -import { autoPlayGif } from '../initial_state'; - interface Props { account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there size: number; @@ -25,6 +26,8 @@ export const Avatar: React.FC = ({ counterBorderColor, }) => { const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(false); const style = { ...styleFromParent, @@ -37,16 +40,28 @@ export const Avatar: React.FC = ({ ? account?.get('avatar') : account?.get('avatar_static'); + const handleLoad = useCallback(() => { + setLoading(false); + }, [setLoading]); + + const handleError = useCallback(() => { + setError(true); + }, [setError]); + return (
- {src && } + {src && !error && ( + + )} + {counter && (
[data-popper-placement] { display: block; position: relative; border-radius: var(--avatar-border-radius); - background-color: var(--surface-background-color); img { width: 100%; @@ -2087,7 +2086,11 @@ body > [data-popper-placement] { display: inline-block; // to not show broken images } - &-inline { + &--loading { + background-color: var(--surface-background-color); + } + + &--inline { display: inline-block; vertical-align: middle; margin-inline-end: 5px; From bfabd6a2b882c4eca186e8fe47ce98a47f74662f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 7 Oct 2024 08:02:04 -0400 Subject: [PATCH 235/467] Move account suspension-related methods to concern (#28351) --- app/models/account.rb | 38 +------------------ app/models/concerns/account/suspensions.rb | 44 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 37 deletions(-) create mode 100644 app/models/concerns/account/suspensions.rb diff --git a/app/models/account.rb b/app/models/account.rb index 3b841e7c77622e..708415b6eef1ab 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -89,6 +89,7 @@ class Account < ApplicationRecord include Account::Merging include Account::Search include Account::StatusesSearch + include Account::Suspensions include Account::AttributionDomains include DomainMaterializable include DomainNormalizable @@ -127,9 +128,7 @@ class Account < ApplicationRecord scope :local, -> { where(domain: nil) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } scope :silenced, -> { where.not(silenced_at: nil) } - scope :suspended, -> { where.not(suspended_at: nil) } scope :sensitized, -> { where.not(sensitized_at: nil) } - scope :without_suspended, -> { where(suspended_at: nil) } scope :without_silenced, -> { where(silenced_at: nil) } scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) } scope :recent, -> { reorder(id: :desc) } @@ -255,41 +254,6 @@ def unsilence! update!(silenced_at: nil) end - def suspended? - suspended_at.present? && !instance_actor? - end - - def suspended_locally? - suspended? && suspension_origin_local? - end - - def suspended_permanently? - suspended? && deletion_request.nil? - end - - def suspended_temporarily? - suspended? && deletion_request.present? - end - - alias unavailable? suspended? - alias permanently_unavailable? suspended_permanently? - - def suspend!(date: Time.now.utc, origin: :local, block_email: true) - transaction do - create_deletion_request! - update!(suspended_at: date, suspension_origin: origin) - create_canonical_email_block! if block_email - end - end - - def unsuspend! - transaction do - deletion_request&.destroy! - update!(suspended_at: nil, suspension_origin: nil) - destroy_canonical_email_block! - end - end - def sensitized? sensitized_at.present? end diff --git a/app/models/concerns/account/suspensions.rb b/app/models/concerns/account/suspensions.rb new file mode 100644 index 00000000000000..c981fb5a2954cf --- /dev/null +++ b/app/models/concerns/account/suspensions.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Account::Suspensions + extend ActiveSupport::Concern + + included do + scope :suspended, -> { where.not(suspended_at: nil) } + scope :without_suspended, -> { where(suspended_at: nil) } + end + + def suspended? + suspended_at.present? && !instance_actor? + end + alias unavailable? suspended? + + def suspended_locally? + suspended? && suspension_origin_local? + end + + def suspended_permanently? + suspended? && deletion_request.nil? + end + alias permanently_unavailable? suspended_permanently? + + def suspended_temporarily? + suspended? && deletion_request.present? + end + + def suspend!(date: Time.now.utc, origin: :local, block_email: true) + transaction do + create_deletion_request! + update!(suspended_at: date, suspension_origin: origin) + create_canonical_email_block! if block_email + end + end + + def unsuspend! + transaction do + deletion_request&.destroy! + update!(suspended_at: nil, suspension_origin: nil) + destroy_canonical_email_block! + end + end +end From 4238da6ee3c93dfd5752e9133cbec958f8ebb18a Mon Sep 17 00:00:00 2001 From: Leni Kadali <52788034+lenikadali@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:05:46 +0300 Subject: [PATCH 236/467] Add error message when user tries to follow their own account (#31910) --- app/controllers/api/v1/accounts_controller.rb | 5 +++++ config/locales/en.yml | 1 + spec/requests/api/v1/accounts_spec.rb | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 84b604b305e7a7..28acaeea051834 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -16,6 +16,7 @@ class Api::V1::AccountsController < Api::BaseController before_action :check_account_confirmation, except: [:index, :create] before_action :check_enabled_registrations, only: [:create] before_action :check_accounts_limit, only: [:index] + before_action :check_following_self, only: [:follow] skip_before_action :require_authenticated_user!, only: :create @@ -101,6 +102,10 @@ def check_accounts_limit raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT end + def check_following_self + render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id + end + def relationships(**options) AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 42327ae183af0a..c88ef3fa201b3e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -21,6 +21,7 @@ en: one: Post other: Posts posts_tab_heading: Posts + self_follow_error: Following your own account is not allowed admin: account_actions: action: Perform action diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb index 45e66f07445d8d..16010ae2e780ea 100644 --- a/spec/requests/api/v1/accounts_spec.rb +++ b/spec/requests/api/v1/accounts_spec.rb @@ -163,6 +163,26 @@ end end + context 'when user tries to follow their own account' do + subject do + post "/api/v1/accounts/#{other_account.id}/follow", headers: headers + end + + let(:locked) { false } + let(:other_account) { user.account } + + it 'returns http forbidden and error message' do + subject + + error_msg = I18n.t('accounts.self_follow_error') + + expect(response).to have_http_status(403) + expect(response.parsed_body[:error]).to eq(error_msg) + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + end + context 'when modifying follow options' do let(:locked) { false } From 0c163659913f1d9d02cd8b5e45913846f2039c96 Mon Sep 17 00:00:00 2001 From: Jake Anto <64896514+jake-anto@users.noreply.github.com> Date: Tue, 8 Oct 2024 02:03:14 +0530 Subject: [PATCH 237/467] Prefer native apps over PWA (#27254) --- app/serializers/manifest_serializer.rb | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index cf0164c24a34b8..3496f329f82241 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -8,7 +8,8 @@ class ManifestSerializer < ActiveModel::Serializer attributes :id, :name, :short_name, :icons, :theme_color, :background_color, :display, :start_url, :scope, - :share_target, :shortcuts + :share_target, :shortcuts, + :prefer_related_applications, :related_applications def id # This is set to `/home` because that was the old value of `start_url` and @@ -89,4 +90,28 @@ def shortcuts }, ] end + + def prefer_related_applications + true + end + + def related_applications + [ + { + platform: 'play', + url: 'https://play.google.com/store/apps/details?id=org.joinmastodon.android', + id: 'org.joinmastodon.android', + }, + { + platform: 'itunes', + url: 'https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974', + id: 'id1571998974', + }, + { + platform: 'f-droid', + url: 'https://f-droid.org/en/packages/org.joinmastodon.android/', + id: 'org.joinmastodon.android', + }, + ] + end end From c60d4ecc82ce3dd2f2a00eaccf5231f03f24c31d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:38:43 +0200 Subject: [PATCH 238/467] Update dependency @reduxjs/toolkit to v2.2.8 (#32296) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 35fca2f8ad41fc..5fc15f27e0be6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3110,8 +3110,8 @@ __metadata: linkType: hard "@reduxjs/toolkit@npm:^2.0.1": - version: 2.2.7 - resolution: "@reduxjs/toolkit@npm:2.2.7" + version: 2.2.8 + resolution: "@reduxjs/toolkit@npm:2.2.8" dependencies: immer: "npm:^10.0.3" redux: "npm:^5.0.1" @@ -3125,7 +3125,7 @@ __metadata: optional: true react-redux: optional: true - checksum: 10c0/7761a91adac2b5e1d50a8163ba5441480bb86a3a80b7583037c27a88463394b132dd7592862fc2be03aa7ab98a6e1710549889986dc0d3f033c169a3ba2cb02e + checksum: 10c0/bf1356d71bfb82e5a181692c79c19b7bc19355260a9966f6562604c995f0cd0ce1154177ccd14095e8b319e73f64cfe86a4e46a83d24edba7876d4ae71fd5ae0 languageName: node linkType: hard From 562105c69a9166d3a7f8eb09f2221e3571697ba0 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Oct 2024 10:00:05 +0200 Subject: [PATCH 239/467] Fix source strings being uploaded to crowdin in merge groups (#32298) --- .github/workflows/crowdin-upload.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml index 62ad1150bca414..4f4d917d15ab70 100644 --- a/.github/workflows/crowdin-upload.yml +++ b/.github/workflows/crowdin-upload.yml @@ -1,7 +1,6 @@ name: Crowdin / Upload translations on: - merge_group: push: branches: - 'main' From ff3e2c9cfa857b5091a9119337728bf972763856 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:10:39 +0000 Subject: [PATCH 240/467] New Crowdin Translations (automated) (#32295) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 1 + app/javascript/mastodon/locales/de.json | 2 +- config/locales/ca.yml | 1 + config/locales/da.yml | 1 + config/locales/de.yml | 1 + config/locales/eo.yml | 1 + config/locales/es-AR.yml | 1 + config/locales/es-MX.yml | 1 + config/locales/es.yml | 1 + config/locales/fi.yml | 1 + config/locales/fo.yml | 1 + config/locales/gl.yml | 1 + config/locales/he.yml | 1 + config/locales/is.yml | 1 + config/locales/ja.yml | 1 + config/locales/ko.yml | 1 + config/locales/nl.yml | 1 + config/locales/nn.yml | 1 + config/locales/pl.yml | 1 + config/locales/pt-BR.yml | 1 + config/locales/tr.yml | 1 + config/locales/uk.yml | 1 + config/locales/vi.yml | 1 + config/locales/zh-CN.yml | 1 + config/locales/zh-TW.yml | 1 + 25 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 797d8cc22e578d..d3a29eae408821 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Ліміт перавышаны", "alert.unexpected.message": "Узнікла нечаканая памылка.", "alert.unexpected.title": "Вой!", + "alt_text_badge.title": "Альтернативный текст", "announcement.announcement": "Аб'ява", "attachments_list.unprocessed": "(неапрацаваны)", "audio.hide": "Схаваць аўдыя", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 3d8b57db4a654e..b807d93ab3d720 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -62,7 +62,7 @@ "account.requested_follow": "{name} möchte dir folgen", "account.share": "Profil von @{name} teilen", "account.show_reblogs": "Geteilte Beiträge von @{name} anzeigen", - "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} posts}}", + "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "account.unblock": "Blockierung von @{name} aufheben", "account.unblock_domain": "Blockierung von {domain} aufheben", "account.unblock_short": "Blockierung aufheben", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index bb81aaa59c50fc..cc2da496a67cf3 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -21,6 +21,7 @@ ca: one: Tut other: Tuts posts_tab_heading: Tuts + self_follow_error: No es permet seguir el compte propi admin: account_actions: action: Realitza l'acció diff --git a/config/locales/da.yml b/config/locales/da.yml index 1f80503e91784e..923102c11f12a1 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -21,6 +21,7 @@ da: one: Indlæg other: Indlæg posts_tab_heading: Indlæg + self_follow_error: Det er ikke tilladt at følge sin egen konto admin: account_actions: action: Udfør handling diff --git a/config/locales/de.yml b/config/locales/de.yml index 5f0b4ae353d9a9..cfd0d6510ee07c 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -21,6 +21,7 @@ de: one: Beitrag other: Beiträge posts_tab_heading: Beiträge + self_follow_error: Es ist nicht erlaubt, deinem eigenen Konto zu folgen admin: account_actions: action: Aktion ausführen diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 10b297f1a8b70c..1e683b1725087c 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -21,6 +21,7 @@ eo: one: Afiŝo other: Mesaĝoj posts_tab_heading: Afiŝoj + self_follow_error: Sekvi vian propran konton ne estas permesita admin: account_actions: action: Plenumi agon diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index cfc24ce270ca28..04ff7880a1b804 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -21,6 +21,7 @@ es-AR: one: Mensaje other: Mensajes posts_tab_heading: Mensajes + self_follow_error: No está permitido seguir tu propia cuenta admin: account_actions: action: Ejecutar acción diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 4e7ee657e60b60..2c18465a26af53 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -21,6 +21,7 @@ es-MX: one: Toot other: Toots posts_tab_heading: Toots + self_follow_error: No se permite seguir tu propia cuenta admin: account_actions: action: Realizar acción diff --git a/config/locales/es.yml b/config/locales/es.yml index bb9e5daff5b496..47d32c62c8ce5c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -21,6 +21,7 @@ es: one: Publicación other: Publicaciones posts_tab_heading: Publicaciones + self_follow_error: No está permitido seguir tu propia cuenta admin: account_actions: action: Realizar acción diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 1767f9e63e2c56..52ea0b374c8141 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -21,6 +21,7 @@ fi: one: Julkaisu other: viestiä posts_tab_heading: Julkaisut + self_follow_error: Oman tilisi seuraaminen ei ole sallittua admin: account_actions: action: Suorita toimi diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 55104eb6ff219d..fcf3eb031ec8fd 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -21,6 +21,7 @@ fo: one: Uppslag other: Uppsløg posts_tab_heading: Uppsløg + self_follow_error: Tað er ikki loyvt at fylgja tíni egnu kontu admin: account_actions: action: Frem atgerð diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 8460902a68d555..cdc94213248df7 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -21,6 +21,7 @@ gl: one: Publicación other: Publicacións posts_tab_heading: Publicacións + self_follow_error: Non está permitido seguir a túa propia conta admin: account_actions: action: Executar acción diff --git a/config/locales/he.yml b/config/locales/he.yml index f2732678b5be1f..54b6b6f38dad08 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -25,6 +25,7 @@ he: other: הודעות two: הודעותיים posts_tab_heading: הודעות + self_follow_error: בלתי אפשרי לך לעקוב אחרי חשבונך admin: account_actions: action: בצע/י פעולה diff --git a/config/locales/is.yml b/config/locales/is.yml index 6eefaf1b0e983b..f181470e495211 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -21,6 +21,7 @@ is: one: Færsla other: Færslur posts_tab_heading: Færslur + self_follow_error: Ekki er leyft að fylgjast með eigin aðgangi admin: account_actions: action: Framkvæma aðgerð diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 54b7fb54128b18..bda5b2d8f66476 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -19,6 +19,7 @@ ja: posts: other: 投稿 posts_tab_heading: 投稿 + self_follow_error: 自分のアカウントをフォローすることはできません admin: account_actions: action: アクションを実行 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index d20d67e4c31297..615783738abb4b 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -19,6 +19,7 @@ ko: posts: other: 게시물 posts_tab_heading: 게시물 + self_follow_error: 본인의 계정을 팔로우할 수는 없습니다 admin: account_actions: action: 조치 취하기 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 52ec4c89ce2b26..968dcc3e7cb86f 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -21,6 +21,7 @@ nl: one: Toot other: Berichten posts_tab_heading: Berichten + self_follow_error: Het volgen van je eigen account is niet toegestaan admin: account_actions: action: Actie uitvoeren diff --git a/config/locales/nn.yml b/config/locales/nn.yml index ec3db6520fdc0c..b28cf30162a363 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -21,6 +21,7 @@ nn: one: Tut other: Tut posts_tab_heading: Tut + self_follow_error: Det er ikkje tillate å følgje din eigen konto admin: account_actions: action: Utfør diff --git a/config/locales/pl.yml b/config/locales/pl.yml index aaf8a9e722dda2..ba1f4812e96297 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -25,6 +25,7 @@ pl: one: wpis other: Wpisów posts_tab_heading: Wpisy + self_follow_error: Nie możesz obserwować swojego konta admin: account_actions: action: Wykonaj działanie diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 427703f57e7c27..8e806f670c1810 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -21,6 +21,7 @@ pt-BR: one: Publicação other: Publicações posts_tab_heading: Publicações + self_follow_error: Seguir sua conta não é permitido admin: account_actions: action: Tomar uma atitude diff --git a/config/locales/tr.yml b/config/locales/tr.yml index df55aa5a29a871..ee74f237ee4266 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -21,6 +21,7 @@ tr: one: Gönderi other: Gönderiler posts_tab_heading: Gönderiler + self_follow_error: Kendi hesabınızı takip etmenize izin yok admin: account_actions: action: Eylemi gerçekleştir diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 47732198f10092..dec4299fb9fbc7 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -25,6 +25,7 @@ uk: one: Допис other: Дописів posts_tab_heading: Дописів + self_follow_error: Ви не можете стежити за власним обліковим записом admin: account_actions: action: Виконати дію diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 17edfba70a540a..7c30c5b127b043 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -19,6 +19,7 @@ vi: posts: other: Tút posts_tab_heading: Tút + self_follow_error: Bạn không thể tự theo dõi chính bạn admin: account_actions: action: Thực hiện hành động diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 7be8fb5a5842bf..26548046974a6b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -19,6 +19,7 @@ zh-CN: posts: other: 嘟文 posts_tab_heading: 嘟文 + self_follow_error: 不可以关注自己 admin: account_actions: action: 执行操作 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 96aedf0a1ce244..c461aabcdc787e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -19,6 +19,7 @@ zh-TW: posts: other: 嘟文 posts_tab_heading: 嘟文 + self_follow_error: 無法跟隨您自己的帳號 admin: account_actions: action: 執行動作 From c3a38c7d8c123f5bf736e20e0417fb3d70022391 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Oct 2024 14:24:59 +0200 Subject: [PATCH 241/467] Update changelog and security policy (#32300) --- CHANGELOG.md | 26 ++++++++++++++++---------- SECURITY.md | 11 ++++++----- docker-compose.yml | 6 +++--- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eef082cccd83d..566c474356d10d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. -## [4.3.0] - UNRELEASED +## [4.3.0] - 2024-10-08 The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski. @@ -11,12 +11,12 @@ The following changelog entries focus on changes visible to users, administrator - **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\ This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared. - Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx)) -- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire) +- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 and #32241 by @ClearlyClaire) - Update dependencies ### Added -- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089 and #32085 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ +- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089, #32085, #32243, #32179 and #32254 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\ This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\ As part of this, the visual design of the entire notifications feature has been revamped.\ @@ -28,7 +28,7 @@ The following changelog entries focus on changes visible to users, administrator - `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts - `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group - `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count -- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723 and #32062 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ +- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\ You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\ Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\ @@ -61,7 +61,7 @@ The following changelog entries focus on changes visible to users, administrator - **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\ You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\ This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link -- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, and #31900 by @Gargron and @oneiros)\ +- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, #31900 and #32188 by @Gargron, @mjankowski and @oneiros)\ This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\ Articles hosted outside the fediverse can indicate a fediverse author with a meta tag: ```html @@ -150,10 +150,12 @@ The following changelog entries focus on changes visible to users, administrator - Add groundwork for annual reports for accounts (#28693 by @Gargron)\ This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use. - Add notification email on invalid second authenticator (#28822 by @ClearlyClaire) +- Add date of account deletion in list of accounts in the admin interface (#25640 by @tribela) - Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem) - Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\ This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3). - Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm) +- Add support for serving JRD `/.well-known/host-meta.json` in addition to XRD host-meta (#32206 by @c960657) - Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543) - Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus) - Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire) @@ -168,7 +170,7 @@ The following changelog entries focus on changes visible to users, administrator ### Changed -- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ +- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, #31525, #32153, and #32201 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\ In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state. - **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ @@ -192,9 +194,9 @@ The following changelog entries focus on changes visible to users, administrator Administrators may need to update their setup accordingly. - Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron) - Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros) -- Change embedded posts to use web UI (#31766 and #32135 by @Gargron) +- Change embedded posts to use web UI (#31766, #32135 and #32271 by @Gargron) - Change inner borders in media galleries in web UI (#31852 by @Gargron) -- Change design of media attachments and profile media tab in web UI (#31807, #32048, and #31967 by @Gargron) +- Change design of media attachments and profile media tab in web UI (#31807, #32048, #31967, #32217, #32224 and #32257 by @ClearlyClaire and @Gargron) - Change labels on thread indicators in web UI (#31806 by @Gargron) - Change label of "Data export" menu item in settings interface (#32099 by @c960657) - Change responsive break points on navigation panel in web UI (#32034 by @Gargron) @@ -284,9 +286,10 @@ The following changelog entries focus on changes visible to users, administrator - Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire) - Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire) - Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron) +- Fix unresolvable mentions sometimes preventing processing incoming posts (#29215 by @tribela and @ClearlyClaire) - Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron) - Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire) -- Fix the appearance of avatars when they do not load (#31966 by @renchap) +- Fix the appearance of avatars when they do not load (#31966 and #32270 by @Gargron and @renchap) - Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657) - Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil) - Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire) @@ -309,10 +312,12 @@ The following changelog entries focus on changes visible to users, administrator - Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm) - Fix right-to-left text in preview cards (#30930 by @ClearlyClaire) - Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski) -- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445 and #32091 by @ClearlyClaire, @valtlai and @vmstan) +- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445, #32091, #32147 and #32137 by @ClearlyClaire, @mjankowski, @valtlai and @vmstan) +- Fix editing description of media uploads with custom thumbnails (#32221 by @ClearlyClaire) - Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire) - Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire) - Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers) +- Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161 by @ClearlyClaire) - Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire) - Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire) - Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski) @@ -322,6 +327,7 @@ The following changelog entries focus on changes visible to users, administrator - Fix full date display not respecting the locale 12/24h format (#29448 by @renchap) - Fix filters title and keywords overflow (#29396 by @GeopJr) - Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon) +- Fix navigation item active highlight for some paths (#32159 by @mjankowski) - Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen) - Fix modal container bounds (#29185 by @nico3333fr) - Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire) diff --git a/SECURITY.md b/SECURITY.md index 156954ce02352e..43ab4454c456f0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,8 +13,9 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through ## Supported Versions -| Version | Supported | -| ------- | --------- | -| 4.2.x | Yes | -| 4.1.x | Yes | -| < 4.1 | No | +| Version | Supported | +| ------- | ---------------- | +| 4.3.x | Yes | +| 4.2.x | Yes | +| 4.1.x | Until 2025-04-08 | +| < 4.1 | No | diff --git a/docker-compose.yml b/docker-compose.yml index 41876d26f99e23..37cb16497fbfb9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 + image: ghcr.io/mastodon/mastodon:v4.3.0 restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -83,7 +83,7 @@ services: # build: # dockerfile: ./streaming/Dockerfile # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-rc.1 + image: ghcr.io/mastodon/mastodon-streaming:v4.3.0 restart: always env_file: .env.production command: node ./streaming/index.js @@ -101,7 +101,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 + image: ghcr.io/mastodon/mastodon:v4.3.0 restart: always env_file: .env.production command: bundle exec sidekiq From 022c1ae6f2911db8c479e0b6b88cff1e3a79c47e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 08:52:52 -0400 Subject: [PATCH 242/467] Remove unused deprecator configuration (#32288) --- config/application.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config/application.rb b/config/application.rb index 0013c788583035..5e2f44453d4d9c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -96,10 +96,6 @@ class Application < Rails::Application config.middleware.use Rack::Attack config.middleware.use Mastodon::RackMiddleware - initializer :deprecator do |app| - app.deprecators[:mastodon] = ActiveSupport::Deprecation.new('4.3', 'mastodon/mastodon') - end - config.before_configuration do require 'mastodon/redis_configuration' ::REDIS_CONFIGURATION = Mastodon::RedisConfiguration.new From d20a899bb90c78c2290a947e36f19fff6654ad47 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 09:21:36 -0400 Subject: [PATCH 243/467] Bring icon vertical middle to applications list style (#32293) --- app/javascript/styles/mastodon/admin.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 0712a0d3f4934e..c7b32a9c9eea44 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1029,6 +1029,12 @@ a.name-tag, color: var(--user-role-accent); } +.applications-list { + .icon { + vertical-align: middle; + } +} + .announcements-list, .filters-list { border: 1px solid var(--background-border-color); From 3cf2d35c4947cb8fb12cb33c22b2832f823cb3a4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 09:23:30 -0400 Subject: [PATCH 244/467] Reference `IpBlock.severities` keys from CLI option check (#32291) --- lib/mastodon/cli/ip_blocks.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb index 3c5fdb275c5105..ef24f2e047e30c 100644 --- a/lib/mastodon/cli/ip_blocks.rb +++ b/lib/mastodon/cli/ip_blocks.rb @@ -5,7 +5,7 @@ module Mastodon::CLI class IpBlocks < Base - option :severity, required: true, enum: %w(no_access sign_up_requires_approval sign_up_block), desc: 'Severity of the block' + option :severity, required: true, enum: IpBlock.severities.keys, desc: 'Severity of the block' option :comment, aliases: [:c], desc: 'Optional comment' option :duration, aliases: [:d], type: :numeric, desc: 'Duration of the block in seconds' option :force, type: :boolean, aliases: [:f], desc: 'Overwrite existing blocks' From f49161ab1d57969b105bd115af8c827fc817db61 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 09:30:54 -0400 Subject: [PATCH 245/467] Oauth system spec cleanup / helper method extraction (#32287) --- spec/system/oauth_spec.rb | 96 +++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/spec/system/oauth_spec.rb b/spec/system/oauth_spec.rb index 64ac75879e666d..14ffc163f0a3f1 100644 --- a/spec/system/oauth_spec.rb +++ b/spec/system/oauth_spec.rb @@ -24,28 +24,28 @@ subject # It presents the user with an authorization page - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) - - # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_authorize_text) # It grants the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true + expect { click_on oauth_authorize_text } + .to change { user_has_grant_with_client_app? }.to(true) + + # Upon authorizing, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end it 'when rejecting the authorization request' do subject # It presents the user with an authorization page - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.deny')) - - # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_deny_text) # It does not grant the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false + expect { click_on oauth_deny_text } + .to_not change { user_has_grant_with_client_app? }.from(false) + + # Upon denying, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end # The tests in this context ensures that requests without PKCE parameters @@ -133,7 +133,6 @@ end it 'when accepting the authorization request' do - params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page @@ -145,18 +144,17 @@ # Logging in redirects to an authorization page fill_in_auth_details(email, password) - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) - - # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_authorize_text) # It grants the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true + expect { click_on oauth_authorize_text } + .to change { user_has_grant_with_client_app? }.to(true) + + # Upon authorizing, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end it 'when rejecting the authorization request' do - params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page @@ -168,21 +166,20 @@ # Logging in redirects to an authorization page fill_in_auth_details(email, password) - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) - - # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_authorize_text) # It does not grant the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false + expect { click_on oauth_deny_text } + .to_not change { user_has_grant_with_client_app? }.from(false) + + # Upon denying, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end context 'when the user has set up TOTP' do let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret) } it 'when accepting the authorization request' do - params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page @@ -202,18 +199,17 @@ # Filling in the correct TOTP code redirects to an app authorization page fill_in_otp_details(user.current_otp) - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) - - # Upon authorizing, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.authorize') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_authorize_text) # It grants the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true + expect { click_on oauth_authorize_text } + .to change { user_has_grant_with_client_app? }.to(true) + + # Upon authorizing, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end it 'when rejecting the authorization request' do - params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } visit "/oauth/authorize?#{params.to_query}" # It presents the user with a log-in page @@ -233,14 +229,14 @@ # Filling in the correct TOTP code redirects to an app authorization page fill_in_otp_details(user.current_otp) - expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize')) - - # Upon denying, it redirects to the apps' callback URL - click_on I18n.t('doorkeeper.authorizations.buttons.deny') - expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true) + expect(page).to have_content(oauth_authorize_text) # It does not grant the app access to the account - expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false + expect { click_on oauth_deny_text } + .to_not change { user_has_grant_with_client_app? }.from(false) + + # Upon denying, it redirects to the apps' callback URL + expect(page).to redirect_to_callback_url end end # TODO: external auth @@ -252,4 +248,24 @@ def fill_in_otp_details(value) fill_in 'user_otp_attempt', with: value click_on I18n.t('auth.login') end + + def oauth_authorize_text + I18n.t('doorkeeper.authorizations.buttons.authorize') + end + + def oauth_deny_text + I18n.t('doorkeeper.authorizations.buttons.deny') + end + + def redirect_to_callback_url + have_current_path(/\A#{client_app.redirect_uri}/, url: true) + end + + def user_has_grant_with_client_app? + Doorkeeper::AccessGrant + .exists?( + application: client_app, + resource_owner_id: user.id + ) + end end From e8ec6667bd24028422abb68525db5b8f6a44c801 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 09:53:35 -0400 Subject: [PATCH 246/467] Extract wrapper constant for `HTTP::*` error classes (#32285) --- app/controllers/application_controller.rb | 2 +- app/controllers/concerns/api/error_handling.rb | 2 +- app/controllers/concerns/signature_verification.rb | 2 +- app/controllers/media_proxy_controller.rb | 2 +- app/lib/activitypub/activity/create.rb | 4 ++-- app/models/account_alias.rb | 2 +- app/models/account_migration.rb | 2 +- app/models/concerns/remotable.rb | 2 +- app/models/form/redirect.rb | 2 +- app/models/remote_follow.rb | 2 +- app/services/activitypub/process_account_service.rb | 6 +++--- app/services/activitypub/process_status_update_service.rb | 2 +- app/services/fetch_link_card_service.rb | 2 +- app/services/fetch_resource_service.rb | 2 +- app/services/import_service.rb | 2 +- app/services/process_mentions_service.rb | 2 +- app/services/software_update_check_service.rb | 2 +- app/services/verify_link_service.rb | 2 +- app/workers/refollow_worker.rb | 2 +- lib/exceptions.rb | 6 ++++++ lib/mastodon/cli/accounts.rb | 2 +- 21 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 62e3355ae62bd1..40cae15b48acb3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -32,7 +32,7 @@ class ApplicationController < ActionController::Base rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests - rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error + rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, with: :internal_server_error) rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable rescue_from Seahorse::Client::NetworkingError do |e| diff --git a/app/controllers/concerns/api/error_handling.rb b/app/controllers/concerns/api/error_handling.rb index ad559fe2d713e1..9ce4795b02bcac 100644 --- a/app/controllers/concerns/api/error_handling.rb +++ b/app/controllers/concerns/api/error_handling.rb @@ -20,7 +20,7 @@ module Api::ErrorHandling render json: { error: 'Record not found' }, status: 404 end - rescue_from HTTP::Error, Mastodon::UnexpectedResponseError do + rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError) do render json: { error: 'Remote data could not be fetched' }, status: 503 end diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 68f09ee0238eb2..6773c110991407 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -80,7 +80,7 @@ def signed_request_actor fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature'] rescue SignatureVerificationError => e fail_with! e.message - rescue HTTP::Error, OpenSSL::SSL::SSLError => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError => e fail_with! "Failed to fetch remote data: #{e.message}" rescue Mastodon::UnexpectedResponseError fail_with! 'Failed to fetch remote data (got unexpected reply from server)' diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb index c4230d62c38479..09a28c7e373146 100644 --- a/app/controllers/media_proxy_controller.rb +++ b/app/controllers/media_proxy_controller.rb @@ -13,7 +13,7 @@ class MediaProxyController < ApplicationController rescue_from ActiveRecord::RecordInvalid, with: :not_found rescue_from Mastodon::UnexpectedResponseError, with: :not_found rescue_from Mastodon::NotPermittedError, with: :not_found - rescue_from HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, with: :internal_server_error + rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, with: :internal_server_error) def show with_redis_lock("media_download:#{params[:id]}") do diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 928803cd645655..fd836f23050ed9 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -199,7 +199,7 @@ def process_mention(tag) return if account.nil? @mentions << Mention.new(account: account, silent: false) - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError @unresolved_mentions << tag['href'] end @@ -250,7 +250,7 @@ def process_attachments media_attachment.download_file! media_attachment.download_thumbnail! media_attachment.save - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb index 3b75919afe2969..a4a7427e24b7ee 100644 --- a/app/models/account_alias.rb +++ b/app/models/account_alias.rb @@ -35,7 +35,7 @@ def pretty_acct def set_uri target_account = ResolveAccountService.new.call(acct) self.uri = ActivityPub::TagManager.instance.uri_for(target_account) unless target_account.nil? - rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error # Validation will take care of it end diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb index 7a01e250e2c213..5df857e3ba25b3 100644 --- a/app/models/account_migration.rb +++ b/app/models/account_migration.rb @@ -61,7 +61,7 @@ def cooldown_at def set_target_account self.target_account = ResolveAccountService.new.call(acct, skip_cache: true) - rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError # Validation will take care of it end diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index 8382c9159968d8..80a99b35dfd317 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -26,7 +26,7 @@ def remotable_attachment(attachment_name, limit, suppress_errors: true, download public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit)) end - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? raise e unless suppress_errors diff --git a/app/models/form/redirect.rb b/app/models/form/redirect.rb index 3cd5731e6d6e25..ecacaa4d94b8ec 100644 --- a/app/models/form/redirect.rb +++ b/app/models/form/redirect.rb @@ -32,7 +32,7 @@ def acct=(val) def set_target_account @target_account = ResolveAccountService.new.call(acct, skip_cache: true) - rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError # Validation will take care of it end diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb index fa0586f57eb4c9..f9719b86707be7 100644 --- a/app/models/remote_follow.rb +++ b/app/models/remote_follow.rb @@ -66,7 +66,7 @@ def redirect_uri_template def acct_resource @acct_resource ||= Webfinger.new("acct:#{acct}").perform - rescue Webfinger::Error, HTTP::ConnectionError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS nil end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index a7422b5d02af7b..d9482efac15091 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -127,13 +127,13 @@ def set_fetchable_attributes! begin @account.avatar_remote_url = image_url('icon') || '' unless skip_download? @account.avatar = nil if @account.avatar_remote_url.blank? - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError RedownloadAvatarWorker.perform_in(rand(30..600).seconds, @account.id) end begin @account.header_remote_url = image_url('image') || '' unless skip_download? @account.header = nil if @account.header_remote_url.blank? - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError RedownloadHeaderWorker.perform_in(rand(30..600).seconds, @account.id) end @account.statuses_count = outbox_total_items if outbox_total_items.present? @@ -276,7 +276,7 @@ def collection_info(type) total_items = collection.is_a?(Hash) && collection['totalItems'].present? && collection['totalItems'].is_a?(Numeric) ? collection['totalItems'] : nil has_first_page = collection.is_a?(Hash) && collection['first'].present? @collections[type] = [total_items, has_first_page] - rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::LengthValidationError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::LengthValidationError @collections[type] = [nil, nil] end diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 1dbed27f28db3e..9ec3f2b430ec86 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -109,7 +109,7 @@ def download_media_files! media_attachment.download_file! if media_attachment.remote_url_previously_changed? media_attachment.download_thumbnail! if media_attachment.thumbnail_remote_url_previously_changed? media_attachment.save - rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index 7662fc1f297e03..bb526099d6a5e9 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -29,7 +29,7 @@ def call(status) end attach_card if @card&.persisted? - rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" } nil end diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb index b69015a5e9aa6e..949c289b6acdba 100644 --- a/app/services/fetch_resource_service.rb +++ b/app/services/fetch_resource_service.rb @@ -12,7 +12,7 @@ def call(url) return if url.blank? process(url) - rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e Rails.logger.debug { "Error fetching resource #{@url}: #{e}" } nil end diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 6dafb5a0bb1920..26fabacb96b7d1 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -115,7 +115,7 @@ def import_bookmarks! next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri) status || ActivityPub::FetchRemoteStatusService.new.call(uri) - rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError nil rescue => e Rails.logger.warn "Unexpected error when importing bookmark: #{e}" diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 1c4c7805f1423e..2d3c76630470d6 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -44,7 +44,7 @@ def scan_text! if mention_undeliverable?(mentioned_account) begin mentioned_account = ResolveAccountService.new.call(Regexp.last_match(1)) - rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError mentioned_account = nil end end diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index c8ce1753f5f6c6..b9818c81997723 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -22,7 +22,7 @@ def fetch_update_notices Request.new(:get, "#{api_url}?version=#{version}").add_headers('Accept' => 'application/json', 'User-Agent' => 'Mastodon update checker').perform do |res| return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200 end - rescue HTTP::Error, OpenSSL::SSL::SSLError, Oj::ParseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Oj::ParseError nil end diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb index c4f4191e1f3bab..af5a5e4a954cad 100644 --- a/app/services/verify_link_service.rb +++ b/app/services/verify_link_service.rb @@ -10,7 +10,7 @@ def call(field) return unless link_back_present? field.mark_verified! - rescue OpenSSL::SSL::SSLError, HTTP::Error, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e + rescue OpenSSL::SSL::SSLError, *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e Rails.logger.debug { "Error fetching link #{@url}: #{e}" } nil end diff --git a/app/workers/refollow_worker.rb b/app/workers/refollow_worker.rb index 4b712d3aaeb625..078c8502d8e430 100644 --- a/app/workers/refollow_worker.rb +++ b/app/workers/refollow_worker.rb @@ -21,7 +21,7 @@ def perform(target_account_id) # Schedule re-follow begin FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, languages: languages, bypass_limit: true) - rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError + rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError next end end diff --git a/lib/exceptions.rb b/lib/exceptions.rb index c2ff162a6e0881..9c32cb6dda3c41 100644 --- a/lib/exceptions.rb +++ b/lib/exceptions.rb @@ -36,4 +36,10 @@ def initialize(host) super() end end + + HTTP_CONNECTION_ERRORS = [ + HTTP::ConnectionError, + HTTP::Error, + HTTP::TimeoutError, + ].freeze end diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 08a28e5f5c0c8b..6f0de0fd6a4f0c 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -305,7 +305,7 @@ def cull(*domains) begin code = Request.new(:head, account.uri).perform(&:code) - rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, Mastodon::PrivateNetworkAddressError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::PrivateNetworkAddressError skip_domains << account.domain end From 258dce125668ccac45d6d0958da1c841ab7cfcee Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 8 Oct 2024 10:59:51 -0400 Subject: [PATCH 247/467] Add `OpenSSL::SSL::SSLError` to http connection errors wrapper (#32307) --- app/controllers/application_controller.rb | 2 +- app/controllers/concerns/signature_verification.rb | 2 +- app/controllers/media_proxy_controller.rb | 2 +- app/lib/activitypub/activity/create.rb | 4 ++-- app/models/account_alias.rb | 2 +- app/models/account_migration.rb | 2 +- app/models/concerns/remotable.rb | 2 +- app/models/form/redirect.rb | 2 +- app/services/activitypub/process_account_service.rb | 6 +++--- app/services/activitypub/process_status_update_service.rb | 2 +- app/services/fetch_link_card_service.rb | 2 +- app/services/fetch_resource_service.rb | 2 +- app/services/import_service.rb | 2 +- app/services/process_mentions_service.rb | 2 +- app/services/software_update_check_service.rb | 2 +- app/services/verify_link_service.rb | 2 +- app/workers/refollow_worker.rb | 2 +- lib/exceptions.rb | 1 + lib/mastodon/cli/accounts.rb | 2 +- 19 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 40cae15b48acb3..d493bd43bf9beb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -32,7 +32,7 @@ class ApplicationController < ActionController::Base rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests - rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, with: :internal_server_error) + rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error) rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable rescue_from Seahorse::Client::NetworkingError do |e| diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 6773c110991407..4ae63632c0cf0d 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -80,7 +80,7 @@ def signed_request_actor fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature'] rescue SignatureVerificationError => e fail_with! e.message - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS => e fail_with! "Failed to fetch remote data: #{e.message}" rescue Mastodon::UnexpectedResponseError fail_with! 'Failed to fetch remote data (got unexpected reply from server)' diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb index 09a28c7e373146..f68d85e44e2fdd 100644 --- a/app/controllers/media_proxy_controller.rb +++ b/app/controllers/media_proxy_controller.rb @@ -13,7 +13,7 @@ class MediaProxyController < ApplicationController rescue_from ActiveRecord::RecordInvalid, with: :not_found rescue_from Mastodon::UnexpectedResponseError, with: :not_found rescue_from Mastodon::NotPermittedError, with: :not_found - rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, with: :internal_server_error) + rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error) def show with_redis_lock("media_download:#{params[:id]}") do diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index fd836f23050ed9..d04f7226a0d2e4 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -199,7 +199,7 @@ def process_mention(tag) return if account.nil? @mentions << Mention.new(account: account, silent: false) - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS @unresolved_mentions << tag['href'] end @@ -250,7 +250,7 @@ def process_attachments media_attachment.download_file! media_attachment.download_thumbnail! media_attachment.save - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb index a4a7427e24b7ee..41623ddedb8a1f 100644 --- a/app/models/account_alias.rb +++ b/app/models/account_alias.rb @@ -35,7 +35,7 @@ def pretty_acct def set_uri target_account = ResolveAccountService.new.call(acct) self.uri = ActivityPub::TagManager.instance.uri_for(target_account) unless target_account.nil? - rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error # Validation will take care of it end diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb index 5df857e3ba25b3..7bda388f2a81a3 100644 --- a/app/models/account_migration.rb +++ b/app/models/account_migration.rb @@ -61,7 +61,7 @@ def cooldown_at def set_target_account self.target_account = ResolveAccountService.new.call(acct, skip_cache: true) - rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error, Addressable::URI::InvalidURIError # Validation will take care of it end diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index 80a99b35dfd317..15133e7bde9eec 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -26,7 +26,7 @@ def remotable_attachment(attachment_name, limit, suppress_errors: true, download public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit)) end - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError => e + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS => e Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" } public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present? raise e unless suppress_errors diff --git a/app/models/form/redirect.rb b/app/models/form/redirect.rb index ecacaa4d94b8ec..c5b3c1f8f3906c 100644 --- a/app/models/form/redirect.rb +++ b/app/models/form/redirect.rb @@ -32,7 +32,7 @@ def acct=(val) def set_target_account @target_account = ResolveAccountService.new.call(acct, skip_cache: true) - rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error, Addressable::URI::InvalidURIError # Validation will take care of it end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index d9482efac15091..df6f23c0216caf 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -127,13 +127,13 @@ def set_fetchable_attributes! begin @account.avatar_remote_url = image_url('icon') || '' unless skip_download? @account.avatar = nil if @account.avatar_remote_url.blank? - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS RedownloadAvatarWorker.perform_in(rand(30..600).seconds, @account.id) end begin @account.header_remote_url = image_url('image') || '' unless skip_download? @account.header = nil if @account.header_remote_url.blank? - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS RedownloadHeaderWorker.perform_in(rand(30..600).seconds, @account.id) end @account.statuses_count = outbox_total_items if outbox_total_items.present? @@ -276,7 +276,7 @@ def collection_info(type) total_items = collection.is_a?(Hash) && collection['totalItems'].present? && collection['totalItems'].is_a?(Numeric) ? collection['totalItems'] : nil has_first_page = collection.is_a?(Hash) && collection['first'].present? @collections[type] = [total_items, has_first_page] - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::LengthValidationError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::LengthValidationError @collections[type] = [nil, nil] end diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 9ec3f2b430ec86..141ad24e92716a 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -109,7 +109,7 @@ def download_media_files! media_attachment.download_file! if media_attachment.remote_url_previously_changed? media_attachment.download_thumbnail! if media_attachment.thumbnail_remote_url_previously_changed? media_attachment.save - rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing media attachment: #{e}" diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index bb526099d6a5e9..4141fb43df5f34 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -29,7 +29,7 @@ def call(status) end attach_card if @card&.persisted? - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" } nil end diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb index 949c289b6acdba..911950cccae2ed 100644 --- a/app/services/fetch_resource_service.rb +++ b/app/services/fetch_resource_service.rb @@ -12,7 +12,7 @@ def call(url) return if url.blank? process(url) - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e Rails.logger.debug { "Error fetching resource #{@url}: #{e}" } nil end diff --git a/app/services/import_service.rb b/app/services/import_service.rb index 26fabacb96b7d1..a695df2fc92746 100644 --- a/app/services/import_service.rb +++ b/app/services/import_service.rb @@ -115,7 +115,7 @@ def import_bookmarks! next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri) status || ActivityPub::FetchRemoteStatusService.new.call(uri) - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError nil rescue => e Rails.logger.warn "Unexpected error when importing bookmark: #{e}" diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 2d3c76630470d6..3839eb4df4aa3f 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -44,7 +44,7 @@ def scan_text! if mention_undeliverable?(mentioned_account) begin mentioned_account = ResolveAccountService.new.call(Regexp.last_match(1)) - rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError + rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError mentioned_account = nil end end diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index b9818c81997723..24a6955b8859ac 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -22,7 +22,7 @@ def fetch_update_notices Request.new(:get, "#{api_url}?version=#{version}").add_headers('Accept' => 'application/json', 'User-Agent' => 'Mastodon update checker').perform do |res| return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200 end - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Oj::ParseError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError nil end diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb index af5a5e4a954cad..17c86426be7855 100644 --- a/app/services/verify_link_service.rb +++ b/app/services/verify_link_service.rb @@ -10,7 +10,7 @@ def call(field) return unless link_back_present? field.mark_verified! - rescue OpenSSL::SSL::SSLError, *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e Rails.logger.debug { "Error fetching link #{@url}: #{e}" } nil end diff --git a/app/workers/refollow_worker.rb b/app/workers/refollow_worker.rb index 078c8502d8e430..7b26e4a0623ad4 100644 --- a/app/workers/refollow_worker.rb +++ b/app/workers/refollow_worker.rb @@ -21,7 +21,7 @@ def perform(target_account_id) # Schedule re-follow begin FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, languages: languages, bypass_limit: true) - rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError + rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS next end end diff --git a/lib/exceptions.rb b/lib/exceptions.rb index 9c32cb6dda3c41..1910d37a13ceee 100644 --- a/lib/exceptions.rb +++ b/lib/exceptions.rb @@ -41,5 +41,6 @@ def initialize(host) HTTP::ConnectionError, HTTP::Error, HTTP::TimeoutError, + OpenSSL::SSL::SSLError, ].freeze end diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 6f0de0fd6a4f0c..e76735298f20f5 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -305,7 +305,7 @@ def cull(*domains) begin code = Request.new(:head, account.uri).perform(&:code) - rescue *Mastodon::HTTP_CONNECTION_ERRORS, OpenSSL::SSL::SSLError, Mastodon::PrivateNetworkAddressError + rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::PrivateNetworkAddressError skip_domains << account.domain end From 0d91db3d77b0376cd4e17cbdb62585dfa2847fbd Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Oct 2024 14:13:32 +0200 Subject: [PATCH 248/467] Fix `latest` tag for 4.3 docker image builds (#32350) --- .github/workflows/build-releases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-releases.yml b/.github/workflows/build-releases.yml index 3f0bef32ac471c..da9a45828257bd 100644 --- a/.github/workflows/build-releases.yml +++ b/.github/workflows/build-releases.yml @@ -23,7 +23,7 @@ jobs: # Only tag with latest when ran against the latest stable branch # This needs to be updated after each minor version release flavor: | - latest=${{ startsWith(github.ref, 'refs/tags/v4.2.') }} + latest=${{ startsWith(github.ref, 'refs/tags/v4.3.') }} tags: | type=pep440,pattern={{raw}} type=pep440,pattern=v{{major}}.{{minor}} From 6d6565eee720c961bfe1ef56f289f0b0a0c0fbb4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:24:24 +0200 Subject: [PATCH 249/467] Update dependency express to v4.21.1 (#32336) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5fc15f27e0be6d..0c62c70f923b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6392,10 +6392,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.6.0": - version: 0.6.0 - resolution: "cookie@npm:0.6.0" - checksum: 10c0/f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: 10c0/5de60c67a410e7c8dc8a46a4b72eb0fe925871d057c9a5d2c0e8145c4270a4f81076de83410c4d397179744b478e33cd80ccbcc457abf40a9409ad27dcd21dde languageName: node linkType: hard @@ -8396,15 +8396,15 @@ __metadata: linkType: hard "express@npm:^4.17.1, express@npm:^4.18.2": - version: 4.21.0 - resolution: "express@npm:4.21.0" + version: 4.21.1 + resolution: "express@npm:4.21.1" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" body-parser: "npm:1.20.3" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.6.0" + cookie: "npm:0.7.1" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" @@ -8430,7 +8430,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/4cf7ca328f3fdeb720f30ccb2ea7708bfa7d345f9cc460b64a82bf1b2c91e5b5852ba15a9a11b2a165d6089acf83457fc477dc904d59cd71ed34c7a91762c6cc + checksum: 10c0/0c287867e5f6129d3def1edd9b63103a53c40d4dc8628839d4b6827e35eb8f0de5a4656f9d85f4457eba584f9871ebb2ad26c750b36bd75d9bbb8bcebdc4892c languageName: node linkType: hard From fda52b2a521af9b743d97ae35964ec6fc0e97879 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Oct 2024 19:16:57 +0200 Subject: [PATCH 250/467] Fix 4 columns barely not fitting on 1920px screen (#32361) --- app/javascript/styles/mastodon/components.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 4ed05ead3f6e5d..6e386ff687dd86 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2863,7 +2863,7 @@ $ui-header-logo-wordmark-width: 99px; } .column { - width: 400px; + width: clamp(380px, calc((100% - 350px) / 4), 400px); position: relative; box-sizing: border-box; display: flex; From 03dbebdfef47eda19b1b86e56004119f723e667e Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Oct 2024 19:24:22 +0200 Subject: [PATCH 251/467] Fix list edition modal styling (#32358) --- .../styles/mastodon/components.scss | 83 ++++++++----------- 1 file changed, 36 insertions(+), 47 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 6e386ff687dd86..78e52901396983 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7961,7 +7961,6 @@ noscript { justify-content: flex-start; gap: 15px; align-items: center; - border: 1px solid var(--background-border-color); border-top: 0; label { @@ -7988,18 +7987,50 @@ noscript { background: rgba($base-overlay-background, 0.5); } +.list-adder, .list-editor { - background: $ui-base-color; + backdrop-filter: var(--background-filter); + background: var(--modal-background-color); + border: 1px solid var(--modal-border-color); flex-direction: column; border-radius: 8px; - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); width: 380px; overflow: hidden; @media screen and (width <= 420px) { width: 90%; } +} + +.list-adder { + &__lists { + height: 50vh; + border-radius: 0 0 8px 8px; + overflow-y: auto; + } + + .list { + padding: 10px; + border-bottom: 1px solid var(--background-border-color); + } + + .list__wrapper { + display: flex; + } + + .list__display-name { + flex: 1 1 auto; + overflow: hidden; + text-decoration: none; + font-size: 16px; + padding: 10px; + display: flex; + align-items: center; + gap: 4px; + } +} +.list-editor { h4 { padding: 15px 0; background: lighten($ui-base-color, 13%); @@ -8011,12 +8042,10 @@ noscript { .drawer__pager { height: 50vh; - border-radius: 4px; + border: 0; } .drawer__inner { - border-radius: 0 0 8px 8px; - &.backdrop { width: calc(100% - 60px); box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); @@ -8025,6 +8054,7 @@ noscript { } &__accounts { + background: unset; overflow-y: auto; } @@ -8043,47 +8073,6 @@ noscript { } } -.list-adder { - background: $ui-base-color; - flex-direction: column; - border-radius: 8px; - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); - width: 380px; - overflow: hidden; - - @media screen and (width <= 420px) { - width: 90%; - } - - &__account { - background: lighten($ui-base-color, 13%); - } - - &__lists { - background: lighten($ui-base-color, 13%); - height: 50vh; - border-radius: 0 0 8px 8px; - overflow-y: auto; - } - - .list { - padding: 10px; - border-bottom: 1px solid var(--background-border-color); - } - - .list__wrapper { - display: flex; - } - - .list__display-name { - flex: 1 1 auto; - overflow: hidden; - text-decoration: none; - font-size: 16px; - padding: 10px; - } -} - .focal-point { position: relative; cursor: move; From d9fbb071da1904f3a4da90d055368f47b174224c Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 9 Oct 2024 19:29:02 +0200 Subject: [PATCH 252/467] Fix notification requests from suspended accounts still being listed (#32354) --- .../v1/notifications/requests_controller.rb | 2 +- app/models/notification_policy.rb | 2 +- app/models/notification_request.rb | 2 ++ spec/models/notification_policy_spec.rb | 18 ++++++++++++------ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb index 36ee073b9cef27..3c90f13ce24ec9 100644 --- a/app/controllers/api/v1/notifications/requests_controller.rb +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -52,7 +52,7 @@ def dismiss_bulk private def load_requests - requests = NotificationRequest.where(account: current_account).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + requests = NotificationRequest.where(account: current_account).without_suspended.includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), params_slice(:max_id, :since_id, :min_id) ) diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb index 3b16f33d88155a..d22f871a37b7bb 100644 --- a/app/models/notification_policy.rb +++ b/app/models/notification_policy.rb @@ -62,6 +62,6 @@ def filter_private_mentions=(value) private def pending_notification_requests - @pending_notification_requests ||= notification_requests.limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) + @pending_notification_requests ||= notification_requests.without_suspended.limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) end end diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index f0778b3af32919..eb9ff93ab7223f 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -26,6 +26,8 @@ class NotificationRequest < ApplicationRecord before_save :prepare_notifications_count + scope :without_suspended, -> { joins(:from_account).merge(Account.without_suspended) } + def self.preload_cache_collection(requests) cached_statuses_by_id = yield(requests.filter_map(&:last_status)).index_by(&:id) # Call cache_collection in block diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb index 02a582bb0860c1..7d1b494dd533f0 100644 --- a/spec/models/notification_policy_spec.rb +++ b/spec/models/notification_policy_spec.rb @@ -7,19 +7,25 @@ subject { Fabricate(:notification_policy) } let(:sender) { Fabricate(:account) } + let(:suspended_sender) { Fabricate(:account) } before do Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender), filtered: true, type: :mention) Fabricate(:notification_request, account: subject.account, from_account: sender) - subject.summarize! - end - it 'sets pending_requests_count' do - expect(subject.pending_requests_count).to eq 1 + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: suspended_sender), filtered: true, type: :mention) + Fabricate(:notification_request, account: subject.account, from_account: suspended_sender) + + suspended_sender.suspend! + + subject.summarize! end - it 'sets pending_notifications_count' do - expect(subject.pending_notifications_count).to eq 2 + it 'sets pending_requests_count and pending_notifications_count' do + expect(subject).to have_attributes( + pending_requests_count: 1, + pending_notifications_count: 2 + ) end end end From cdf603239e8bc78b4f7c06e3df96da6e6d7c7a57 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Wed, 9 Oct 2024 14:33:28 -0500 Subject: [PATCH 253/467] Restore list column border (#32367) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 78e52901396983..1f69dab7be7a32 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7961,6 +7961,7 @@ noscript { justify-content: flex-start; gap: 15px; align-items: center; + border: 1px solid var(--background-border-color); border-top: 0; label { From a5a3733c9772424c29735b2ae1542e270186d24c Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 10 Oct 2024 13:04:38 +0200 Subject: [PATCH 254/467] =?UTF-8?q?Fix=20=E2=80=9CMention=E2=80=9D=20appea?= =?UTF-8?q?ring=20for=20otherwise=20filtered=20posts=20(#32356)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/notification_with_status.tsx | 9 +++- app/javascript/mastodon/selectors/filters.ts | 50 +++++++++++++++++++ app/javascript/mastodon/selectors/index.js | 15 +----- 3 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 app/javascript/mastodon/selectors/filters.ts diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx index a1c275a1f39309..3e6428287d822f 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx @@ -13,6 +13,7 @@ import { import type { IconProp } from 'mastodon/components/icon'; import { Icon } from 'mastodon/components/icon'; import Status from 'mastodon/containers/status_container'; +import { getStatusHidden } from 'mastodon/selectors/filters'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; import { DisplayedName } from './displayed_name'; @@ -48,6 +49,12 @@ export const NotificationWithStatus: React.FC<{ (state) => state.statuses.getIn([statusId, 'visibility']) === 'direct', ); + const isFiltered = useAppSelector( + (state) => + statusId && + getStatusHidden(state, { id: statusId, contextType: 'notifications' }), + ); + const handlers = useMemo( () => ({ open: () => { @@ -73,7 +80,7 @@ export const NotificationWithStatus: React.FC<{ [dispatch, statusId], ); - if (!statusId) return null; + if (!statusId || isFiltered) return null; return ( diff --git a/app/javascript/mastodon/selectors/filters.ts b/app/javascript/mastodon/selectors/filters.ts new file mode 100644 index 00000000000000..f84d01216adf97 --- /dev/null +++ b/app/javascript/mastodon/selectors/filters.ts @@ -0,0 +1,50 @@ +import { createSelector } from '@reduxjs/toolkit'; + +import type { RootState } from 'mastodon/store'; +import { toServerSideType } from 'mastodon/utils/filters'; + +// TODO: move to `app/javascript/mastodon/models` and use more globally +type Filter = Immutable.Map; + +// TODO: move to `app/javascript/mastodon/models` and use more globally +type FilterResult = Immutable.Map; + +export const getFilters = createSelector( + [ + (state: RootState) => state.filters as Immutable.Map, + (_, { contextType }: { contextType: string }) => contextType, + ], + (filters, contextType) => { + if (!contextType) { + return null; + } + + const now = new Date(); + const serverSideType = toServerSideType(contextType); + + return filters.filter((filter) => { + const context = filter.get('context') as Immutable.List; + const expiration = filter.get('expires_at') as Date | null; + return ( + context.includes(serverSideType) && + (expiration === null || expiration > now) + ); + }); + }, +); + +export const getStatusHidden = ( + state: RootState, + { id, contextType }: { id: string; contextType: string }, +) => { + const filters = getFilters(state, { contextType }); + if (filters === null) return false; + + const filtered = state.statuses.getIn([id, 'filtered']) as + | Immutable.List + | undefined; + return filtered?.some( + (result) => + filters.getIn([result.get('filter'), 'filter_action']) === 'hide', + ); +}; diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 10e1b167cacee1..345ceac49a665c 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,22 +1,11 @@ import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; -import { toServerSideType } from 'mastodon/utils/filters'; - import { me } from '../initial_state'; -export { makeGetAccount } from "./accounts"; - -const getFilters = createSelector([state => state.get('filters'), (_, { contextType }) => contextType], (filters, contextType) => { - if (!contextType) { - return null; - } +import { getFilters } from './filters'; - const now = new Date(); - const serverSideType = toServerSideType(contextType); - - return filters.filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || filter.get('expires_at') > now)); -}); +export { makeGetAccount } from "./accounts"; export const makeGetStatus = () => { return createSelector( From 9350cd31d74486c0b6a523f497a353350792b955 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:21:48 +0000 Subject: [PATCH 255/467] Update dependency postcss-preset-env to v10.0.7 (#32389) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 388 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 199 insertions(+), 189 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0c62c70f923b8a..548d94fc2e78cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1533,13 +1533,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.1" +"@csstools/cascade-layer-name-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10c0/e1f9030285d1a16ca0424018289e5288e58dee2d6f6cc392e27d9e8eca0deeea4ced9b749eef09a8322746cb15b6304bc7e2d04bb9dc7405c29b3717ec80e736 + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10c0/2cc840445328400bb3e1e4186e6081e6519a23d9abde36a16c95892b6ad75155b3af3410d79fdda1c53a068384f970cabff4b5f5ba6867578168cbd3419016c8 languageName: node linkType: hard @@ -1550,42 +1550,42 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/css-calc@npm:2.0.1" +"@csstools/css-calc@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/css-calc@npm:2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10c0/84c0ba3dac51466c9ac22c3540360f6058cf351a3676d71d4412584b165a91abc7c69a4ddf5a5dacc6e6082806d2317cf50ddbc0a0562275b2aedaee41cb87a9 + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10c0/b36e655b4abc8ea39b300725e33cd43b1875d759dd60bee8155bf7841065615a7f24cf53199382e30aa10bb137f64021043e4af7e11b7199b674a6e6cf3ccd01 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-color-parser@npm:3.0.2" +"@csstools/css-color-parser@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-color-parser@npm:3.0.3" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-calc": "npm:^2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10c0/31f42cc22426c937f5c6999889f72b40aec8504189a6badf3319552f27a5af73dd5f46be9ebc54eb87e526468eb2546ffbd60a6879fe599efa6c98e51d6cfa3d + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10c0/02367ffc222254132c47f9cbc856f65fe0b81ee4a5e7381251b95c4064138b5ed99a5e5a79c0c8689f9e75e3d900f94773258a161a97f467c3f0420838c10e04 languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/css-parser-algorithms@npm:3.0.1" +"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/css-parser-algorithms@npm:3.0.2" peerDependencies: - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10c0/064c6d519197b5af43bbf5efe8f4cdbd361b006113aa82160d637e925b50c643a52d33d512ca01c63042d952d723a2a10798231a714668356b76668fb11294e3 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10c0/246afbf518ee9eaa24ed7f083360eb66884f1172fd4f8c663bff8c6099de2a8abd1e2a31d5b6fe42e010277d238469d780cff62bc7fdc6a52e7a90626b8924dc languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/css-tokenizer@npm:3.0.1" - checksum: 10c0/c9ed4373e5731b5375ea9791590081019c04e95f08b46b272977e5e7b8c3d560affc62e82263cb8def1df1e57f0673140e7e16a14a5e7be04e6a234be088d1d3 +"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/css-tokenizer@npm:3.0.2" + checksum: 10c0/a74e5829420ed35982fd33be272c2a19cb2380179d357abe750aa848be6d6699d0437008f47a57eb7c6ff64a34b0c8f91a97dd63dbddd08249b7cf7983767e5e languageName: node linkType: hard @@ -1599,6 +1599,16 @@ __metadata: languageName: node linkType: hard +"@csstools/media-query-list-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/media-query-list-parser@npm:4.0.0" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10c0/416417bcfd84c18a2df8dc77f31c87830e151dc20530fe7f0d8f13a0848b1a9090858abdf7792d82bf2edb41ddedb7b57b34eb78b68b5c10755ae02c019e496a + languageName: node + linkType: hard + "@csstools/postcss-cascade-layers@npm:^5.0.0": version: 5.0.0 resolution: "@csstools/postcss-cascade-layers@npm:5.0.0" @@ -1611,60 +1621,60 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-color-function@npm:4.0.2" +"@csstools/postcss-color-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-color-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c987ccc7ab326668895396d3fe69c05087cf6e245be6f70e8c33da0cdeb56f8ac3d117cfad984191ec57be9691ab56d427aaa28c61c4a7446521972993dd5039 + checksum: 10c0/c994660ca0e2652755d9ad181c8cb46a07220c972086c97c843fa9bacf690be10c642770f898aeec4acc47c2b718dfc7372107285a678361f34d84d9e9c11e0c languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.2" +"@csstools/postcss-color-mix-function@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/cfdc641f504f9d02b9a7b53d6bd933d4e767ecaee5f3d2df45d897f69b8a38b5b79b538d307b16fb56dcb7c19dc7e107518c356772e89771e28e04fd846d9035 + checksum: 10c0/4ba358eb9030fc485bfe2922d897eeb712725762cc399eaba60ba665c84dc3e56a4d5a52dfb320093c0b217d32fedb9b5197fa45738cade53d9afcbefdadf04f languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.1" +"@csstools/postcss-content-alt-text@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/693e4cfa9a30a9c384120bd24846a7cd5ba1e1ebf975eb81b0e0131a21ac28a0301c7dcfa13706bc7d8b5343536fb43a46de636c3257d0fd05041c7255366e87 + checksum: 10c0/e52d40f6567b9b23b32a6c40f9b2a74d57f99a9921b4cae015f51f72453474236c760bb13120682f8815698a615e0ad7bed22314c29dca89c34b5480d83a7a6d languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.1" +"@csstools/postcss-exponential-functions@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/ddcaedfa48cc0cf93611c8d2ed5a75d56c1d196a97015db644b45881adabb47f3255242acaef6ea869a1e5ba66328725d254bf6d29eb5e988cde8b040bc5f55d + checksum: 10c0/034ff89089872f63a6b00bda670c5ff11361babd221ed3e441dde969a718059e5d44ab0ed331868f137bb205331b808ecbcc4cb641d5c945238ebca28aa3ed59 languageName: node linkType: hard @@ -1680,46 +1690,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.2" +"@csstools/postcss-gamut-mapping@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/8b6504f81c5036e3c2a9f9516c371f48a283112469b746546c8c7f6f0da2467c915d4dac6dfe8bb05d7dab3a7503911391eb9e666cb7632e09a032e801c029f5 + checksum: 10c0/21f5708f63e9c3b7603f8b72b5f288e0a021e9710a6abf4aaa713ff4d04bae057d1861e1f28d7670ea39ba463ac04f1507876d4a11178934e7cc7a1c6a780084 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.2": - version: 5.0.2 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.2" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.3": + version: 5.0.3 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/4fa27437ad9861b1457c28228f2503c17bcc2f77dcb38da1314a4a5d38fd010e7e5d11b5f9d69e0a2cb2999bbfeca1e99ce2f59422bda5b382658dcb03f7326e + checksum: 10c0/062d27148438309c940a1973bfc7d42a06caa9397bf2382c7a61979f5be3d6f3fae1bc8ddf94d2dd8e6c807e0530a9e76179510266aaddc439677bf79447a765 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-hwb-function@npm:4.0.2" +"@csstools/postcss-hwb-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-hwb-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/46dc9596e37830de4c38f70764d6da9f2fc7bc339217b4291eced75daa8998c4e05fb743c271701e44818df4ac111c285019b7bb3a728e8b61d86899bbeb74eb + checksum: 10c0/faf2bfbafeec765391e37c7a5cbc7b4647d9ab1ffa51e922c7dfffa545c3d436d15604dfdfb9d7684e760042e62bb42e0243dd4ebd8c3c14694a9f7be4e57b30 languageName: node linkType: hard @@ -1757,17 +1767,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.4": - version: 2.0.4 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.4" +"@csstools/postcss-light-dark-function@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.5" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0176422ad9747953964b1ceff002df1ecb1952ebc481db6192070d68777135b582ea6fd32ae819b9c64c96cb9170bd6907c647c85b48daa4984b7ed3d7f9bccb + checksum: 10c0/80635ee312d2a8f42aa5ce6792f1dc4a71199c384c66a3270d37e998d96db55beaa6836d689cda3b7e4828227960582fae04659ba5e4e0f64fd4543cbf15c6ab languageName: node linkType: hard @@ -1809,42 +1819,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.1" +"@csstools/postcss-logical-viewport-units@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.2" dependencies: - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f54f91ec4d308562371576e82131c3cc1ff461a951c9a38f0b42b783c26f37a93cc846fcd025d3c4a8437b55a4fff1192ebfac8ccf84abb6478b2c515d232552 + checksum: 10c0/31f525e774bc053f545a159eb53bb21465ea2930118e87c40207ad90fa97d3151e6de83efd02f84803fb0e93ed4a4b42a3904b734423410e73ac4c6ce9666ab4 languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-media-minmax@npm:2.0.1" +"@csstools/postcss-media-minmax@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-media-minmax@npm:2.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/23c1fb0c3ed8bf82f3223f161d0d65ba62045b917bc19624581f64aaa5d678485d22c23af2591a3f634ba02030ccb419c2b30209aa22f9fd2baa1a6474af810a + checksum: 10c0/83cf10742884fca3baa7ae26e2cb34123ce5a022622390566c139b4587ea8583fab00acbb85545786b36398e2201d2a94301e0fae805e55f375f1b5c38f67ce8 languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.1" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/e491cb149fb4fff85b2f03191511e43654ae00716e3c1ea9f1dc22ec4e7042c35f034d372082a69d3621c86cafbe46e8f419872fa36f4a534f145f584d655768 + checksum: 10c0/3ac4073d2e958bfb24ae45f673070dd805f0fcf07bc8d00a9a98f596d1096e7be282c8d8e87df3abde90f33fcbe2c7705e972b8c1a58e43ec44729f470b76096 languageName: node linkType: hard @@ -1871,18 +1881,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-oklab-function@npm:4.0.2" +"@csstools/postcss-oklab-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-oklab-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/3209a7cec6d3577544a7ef41f2d5cca25f77891d4ec0d7f39d32f9a79a6c9a9b0ee6b54b2937a2d995548ad11c39966b07d4b9f58e907ffbe1a4b454f2d277f3 + checksum: 10c0/650bcb4f664308972588a8f789f806d63c4069e2e008cfc3b5c80bf9df992c62972dce279b8f434c7f78823e97095942ee4f0e37bc549258887213e72acb7ef8 languageName: node linkType: hard @@ -1897,18 +1907,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.2" +"@csstools/postcss-relative-color-syntax@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/34a8c999e08c6e7833484ee2fb91e7fcc25235d6c361712fed581e44a5a29f1ceb95415b6f4260de53809ac13f5da5415d1905c2971477cf5d45e5196081c663 + checksum: 10c0/c241fe6b725d775f6d2085be1dff3868d189b176fa91ab1eb1133e30e30c8151bded4e50d17a845edd0bdd0a7adf9e8883cb2634fea3394872591fe9ad2a7e86 languageName: node linkType: hard @@ -1923,16 +1933,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.1" +"@csstools/postcss-stepped-value-functions@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/7e65969b124fce603675ca17c2ffa2bb456677866e54bc9fbdc4da0945be1593fde2abb0730d3d03190776ad2022b394a1f9d4834c5b1f4c7ec497929fd35f8f + checksum: 10c0/444a27d725bc7a8e1554469e8ac69e248ff525b728fbe058523b0f1aefcff80ca707f543d21fead0a22d51603b1669190fb01f0f2dcd599a01768a37e0d62bc3 languageName: node linkType: hard @@ -1948,16 +1958,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.1" +"@csstools/postcss-trigonometric-functions@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/59e017ebb9f4f8f027e134024e3322b5e202cc96073e0bb0d45733a829c8eadc7f4f7ce57ce8360a748a677595af9ea95da1779684699b48b911b73b4017ac8b + checksum: 10c0/eaecb2ea891162e4fcbbccf4f660c99e9e59f21937b70fe6aec3b51441eff2a12c1a2dc13fff426722629a7929919fd866311eaa68d74ee9d1f5387a23502fe2 languageName: node linkType: hard @@ -13352,18 +13362,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-color-functional-notation@npm:7.0.2" +"postcss-color-functional-notation@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-color-functional-notation@npm:7.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/e89c0bff94558b0c978ac36f7e02f7f516291f90fd43169d39c63ad2bb0415e3b1c4b3c2469280d578727e850fdf15a557230cb28275f3f0676f0f73187f2867 + checksum: 10c0/5e04c81002512c960784043c096bc91ebc76b8fddb9259a2418b0e121eb65042944cc0f78946f6b7e5774ff1fee087849019655e4848af1f88879e3ab9ff7c17 languageName: node linkType: hard @@ -13417,46 +13427,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.2": - version: 11.0.2 - resolution: "postcss-custom-media@npm:11.0.2" +"postcss-custom-media@npm:^11.0.3": + version: 11.0.3 + resolution: "postcss-custom-media@npm:11.0.3" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/7bec2b1e0b5d786c33c5715b611ffc8b9737252ee6bf77ca59255ac16f91ce614406923f43250e5c88b04f1bb050f155dc5ed4d9350dbd704c45fbd72e5a9a04 + checksum: 10c0/bd3f0cf17d7422385d26afed510dc2acebb1d8c25fce13e2bbee1c49cdc7fe95ebe7f50b89ef0a88ebdd5f6826e89d99e26b905881ceff788df655670dba93d8 languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.1": - version: 14.0.1 - resolution: "postcss-custom-properties@npm:14.0.1" +"postcss-custom-properties@npm:^14.0.2": + version: 14.0.2 + resolution: "postcss-custom-properties@npm:14.0.2" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/12180a7f4a4fe2d528387346a1810b82ed870081756dcf6be226c839716ab3f6f4d6ca4c7208a07d7d84bf2c986beef6473e29964e7c2572066fca5d3b000ed5 + checksum: 10c0/ea2e0cb60c558bb1afb4e601dcc64a38e1b28e5df3e47b83b858fc12d909d0e3453013e6b368fc05a7db7098ffcdc702a30a92f1a3c0ef67dfb97bf089021f1a languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.1": - version: 8.0.1 - resolution: "postcss-custom-selectors@npm:8.0.1" +"postcss-custom-selectors@npm:^8.0.2": + version: 8.0.2 + resolution: "postcss-custom-selectors@npm:8.0.2" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" postcss-selector-parser: "npm:^6.1.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b867233b3d68fbab90afca8a776eb74196ebc3fac8988175d95118a47993c793138fec6cc580272bb35d9bd31086acbdd33ff86da0cab83ef2f08bfc1c23ecd6 + checksum: 10c0/81673ffb0874f63c0f5e14315a5808259ec80ae8452aaf10d28112d30a9aaabbf61d13edb02f8be2965f44b943968c7eda051a1693da436ef157e77fcff0d752 languageName: node linkType: hard @@ -13574,18 +13584,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-lab-function@npm:7.0.2" +"postcss-lab-function@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-lab-function@npm:7.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/6b2be7e762b4ccb58ea9051723d390f6732ad78bb30bfef9499139cf5e2ac160c3de31b2b005fcc30e9fced4abe1685df6cb76c99d548896bae6746105ac8520 + checksum: 10c0/c50a73a9ed54b4194998c4627599d1f42074235f572edbbcdb0e00717f3ae2121dc8378d917792b281860c5650a617d923823da6f395515f610b5760d115354d languageName: node linkType: hard @@ -13906,38 +13916,38 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.6 - resolution: "postcss-preset-env@npm:10.0.6" + version: 10.0.7 + resolution: "postcss-preset-env@npm:10.0.7" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.2" - "@csstools/postcss-color-mix-function": "npm:^3.0.2" - "@csstools/postcss-content-alt-text": "npm:^2.0.1" - "@csstools/postcss-exponential-functions": "npm:^2.0.1" + "@csstools/postcss-color-function": "npm:^4.0.3" + "@csstools/postcss-color-mix-function": "npm:^3.0.3" + "@csstools/postcss-content-alt-text": "npm:^2.0.2" + "@csstools/postcss-exponential-functions": "npm:^2.0.2" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.2" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.2" - "@csstools/postcss-hwb-function": "npm:^4.0.2" + "@csstools/postcss-gamut-mapping": "npm:^2.0.3" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.3" + "@csstools/postcss-hwb-function": "npm:^4.0.3" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.4" + "@csstools/postcss-light-dark-function": "npm:^2.0.5" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" - "@csstools/postcss-logical-viewport-units": "npm:^3.0.1" - "@csstools/postcss-media-minmax": "npm:^2.0.1" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.1" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.2" + "@csstools/postcss-media-minmax": "npm:^2.0.2" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.2" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.2" + "@csstools/postcss-oklab-function": "npm:^4.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.2" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.3" "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.1" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.2" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.1" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.2" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" @@ -13947,12 +13957,12 @@ __metadata: cssdb: "npm:^8.1.1" postcss-attribute-case-insensitive: "npm:^7.0.0" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.2" + postcss-color-functional-notation: "npm:^7.0.3" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.2" - postcss-custom-properties: "npm:^14.0.1" - postcss-custom-selectors: "npm:^8.0.1" + postcss-custom-media: "npm:^11.0.3" + postcss-custom-properties: "npm:^14.0.2" + postcss-custom-selectors: "npm:^8.0.2" postcss-dir-pseudo-class: "npm:^9.0.0" postcss-double-position-gradients: "npm:^6.0.0" postcss-focus-visible: "npm:^10.0.0" @@ -13960,7 +13970,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.2" + postcss-lab-function: "npm:^7.0.3" postcss-logical: "npm:^8.0.0" postcss-nesting: "npm:^13.0.0" postcss-opacity-percentage: "npm:^3.0.0" @@ -13972,7 +13982,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/01660acf3b9ddf4d612a31819e9a5de9fe5383e9eddd2c130180f66ae90c5a881eb408e73454fd50e1839eae71678d738bf72073de08f9013c183b0bd9950fe5 + checksum: 10c0/f789000e0504fd827e854bb0feb8b4c218d381314e4d863c5a36df925df412d0844c912952fe27892a320433640aeaff03ee94a3057b42011bf5d32b3963f333 languageName: node linkType: hard From 3b07fe1bba713fb10f5c873dccb38f6875180c77 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 10 Oct 2024 15:42:08 +0200 Subject: [PATCH 256/467] =?UTF-8?q?Fix=20=E2=80=9CMark=20every=20notificat?= =?UTF-8?q?ion=20as=20read=E2=80=9D=20not=20updating=20the=20read=20marker?= =?UTF-8?q?=20if=20scrolled=20down=20(#32385)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/reducers/notification_groups.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index 8b033f0fc78b7c..91e91d754937c6 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -559,7 +559,10 @@ export const notificationGroupsReducer = createReducer( compareId(state.lastReadId, mostRecentGroup.page_max_id) < 0 ) state.lastReadId = mostRecentGroup.page_max_id; - commitLastReadId(state); + + // We don't call `commitLastReadId`, because that is conditional + // and we want to unconditionally update the state instead. + state.readMarkerId = state.lastReadId; }) .addCase(fetchMarkers.fulfilled, (state, action) => { if ( From 22fd767425a02eb1b39d18a54053603772777b86 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 10 Oct 2024 16:53:12 +0200 Subject: [PATCH 257/467] Fix mute duration not being shown in list of muted accounts in web UI (#32388) --- app/javascript/mastodon/api_types/accounts.ts | 11 ++++++++++- app/javascript/mastodon/models/account.ts | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/api_types/accounts.ts b/app/javascript/mastodon/api_types/accounts.ts index 5bf3e64288c76e..fdbd7523fc15cd 100644 --- a/app/javascript/mastodon/api_types/accounts.ts +++ b/app/javascript/mastodon/api_types/accounts.ts @@ -13,7 +13,7 @@ export interface ApiAccountRoleJSON { } // See app/serializers/rest/account_serializer.rb -export interface ApiAccountJSON { +export interface BaseApiAccountJSON { acct: string; avatar: string; avatar_static: string; @@ -45,3 +45,12 @@ export interface ApiAccountJSON { memorial?: boolean; hide_collections: boolean; } + +// See app/serializers/rest/muted_account_serializer.rb +export interface ApiMutedAccountJSON extends BaseApiAccountJSON { + mute_expires_at?: string | null; +} + +// For now, we have the same type representing both `Account` and `MutedAccount` +// objects, but we should refactor this in the future. +export type ApiAccountJSON = ApiMutedAccountJSON; diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts index a04ebe62915803..8e8e3b0e8dffe8 100644 --- a/app/javascript/mastodon/models/account.ts +++ b/app/javascript/mastodon/models/account.ts @@ -95,6 +95,9 @@ export const accountDefaultValues: AccountShape = { limited: false, moved: null, hide_collections: false, + // This comes from `ApiMutedAccountJSON`, but we should eventually + // store that in a different object. + mute_expires_at: null, }; const AccountFactory = ImmutableRecord(accountDefaultValues); From bb0cf04d71783214aab0a65f410f76ba6989513c Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Oct 2024 11:19:48 +0200 Subject: [PATCH 258/467] Add note about not changing ActiveRecord encryption secrets once they are set (#32413) --- lib/tasks/db.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index d8bc927bc495ba..79599bd91768f4 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -8,7 +8,7 @@ namespace :db do desc 'Generate a set of keys for configuring Active Record encryption in a given environment' task :init do # rubocop:disable Rails/RakeEnvironment puts <<~MSG - Add these secret environment variables to your Mastodon environment (e.g. .env.production):#{' '} + Add the following secret environment variables to your Mastodon environment (e.g. .env.production), ensure they are shared across all your nodes and do not change them after they are set:#{' '} ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=#{SecureRandom.alphanumeric(32)} ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=#{SecureRandom.alphanumeric(32)} From 10ea6da09ffc46a402800d22c81bad6dfa0beecb Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Oct 2024 12:24:03 +0200 Subject: [PATCH 259/467] Fix language of push notifications (#32415) --- app/workers/web/push_notification_worker.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index 104503f130fc2d..e771928ef31fa7 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -55,12 +55,8 @@ def web_push_request end def push_notification_json - Oj.dump(serialized_notification_in_subscription_locale.as_json) - end - - def serialized_notification_in_subscription_locale I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do - serialized_notification + Oj.dump(serialized_notification.as_json) end end From e15befebbd288faeec55ef6ad323d106f4ec57e1 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Oct 2024 16:16:37 +0200 Subject: [PATCH 260/467] Add tag with commit hash to PR image builds (#32418) --- .github/workflows/build-push-pr.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-push-pr.yml b/.github/workflows/build-push-pr.yml index 72baed5121aa00..d3bc8e5df89553 100644 --- a/.github/workflows/build-push-pr.yml +++ b/.github/workflows/build-push-pr.yml @@ -21,9 +21,11 @@ jobs: uses: actions/checkout@v4 - id: version_vars run: | - echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short HEAD) >> $GITHUB_OUTPUT + echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT + echo mastodon_short_sha=$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT outputs: metadata: ${{ steps.version_vars.outputs.mastodon_version_metadata }} + short_sha: ${{ steps.version_vars.outputs.mastodon_short_sha }} build-image: needs: compute-suffix @@ -39,6 +41,7 @@ jobs: latest=auto tags: | type=ref,event=pr + type=ref,event=pr,suffix=-${{ needs.compute-suffix.outputs.short_sha }} secrets: inherit build-image-streaming: @@ -55,4 +58,5 @@ jobs: latest=auto tags: | type=ref,event=pr + type=ref,event=pr,suffix=-${{ needs.compute-suffix.outputs.short_sha }} secrets: inherit From b0dd38433beda1e72ed74e80b6523805fa0a9d56 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Oct 2024 10:18:25 +0200 Subject: [PATCH 261/467] Fix follow recommendation suppressions not applying immediately (#32392) --- app/models/follow_recommendation.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 7ac9e6dfb95743..0435437a814baf 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -18,5 +18,6 @@ class FollowRecommendation < ApplicationRecord belongs_to :account_summary, foreign_key: :account_id, inverse_of: false belongs_to :account - scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } + scope :unsupressed, -> { where.not(FollowRecommendationSuppression.where(FollowRecommendationSuppression.arel_table[:account_id].eq(arel_table[:account_id])).select(1).arel.exists) } + scope :localized, ->(locale) { unsupressed.joins(:account_summary).merge(AccountSummary.localized(locale)) } end From de422a37e8092768a6e8bef45479c43da8681d5d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:22:46 +0200 Subject: [PATCH 262/467] Update dependency fuzzysort to v3.1.0 (#32460) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 548d94fc2e78cd..cd4ac5ce96542c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8934,9 +8934,9 @@ __metadata: linkType: hard "fuzzysort@npm:^3.0.0": - version: 3.0.2 - resolution: "fuzzysort@npm:3.0.2" - checksum: 10c0/c6cdbd092a8e91ed822aeac6d4fb95559759c10602cb29f27307c1cabd01fdd384fa399f7757722435b595244efb000cd63f144104c41b8551b2faff123279cb + version: 3.1.0 + resolution: "fuzzysort@npm:3.1.0" + checksum: 10c0/da9bb32de16f2a5c2c000b99031d9f4f8a01380c12d5d3b67296443a1152c55987ce3c4ddbfe97481b0e9b6f2fb77d61dceba29a93ad36ee23ef5bab6a31afb8 languageName: node linkType: hard From e9eac648964b1c3cdbbc49022bdf44483dba6b34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 08:23:20 +0000 Subject: [PATCH 263/467] Update devDependencies (non-major) (#32457) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 98 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 57 insertions(+), 41 deletions(-) diff --git a/yarn.lock b/yarn.lock index cd4ac5ce96542c..8c8c98bbc7125f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2267,8 +2267,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.12 - resolution: "@formatjs/cli@npm:6.2.12" + version: 6.2.15 + resolution: "@formatjs/cli@npm:6.2.15" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2297,7 +2297,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/3bd05a9fad6c837e22988e6638f426c128efa46ab80ff88cf2ad81fb3bc10cf4f228907577fc01e24c2d7d505cfabfaa69f0496d2ec8f0ab2d6b5eaccb5e475c + checksum: 10c0/e947aa7f3994251392fe15673752a8d8e3c8a30733bb49de5e617d45a327a3e1d16419e2d6b01f7ef2cbe86e2946024342d5b3301e6a8f17de3de9e2e7aedb29 languageName: node linkType: hard @@ -6622,10 +6622,10 @@ __metadata: languageName: node linkType: hard -"css-functions-list@npm:^3.2.2": - version: 3.2.2 - resolution: "css-functions-list@npm:3.2.2" - checksum: 10c0/8638a63d0cf1bdc50d4a752ec1c94a57e9953c3b03eace4f5526db20bec3c061e95089f905dbb4999c44b9780ce777ba856967560f6d15119a303f6030901c10 +"css-functions-list@npm:^3.2.3": + version: 3.2.3 + resolution: "css-functions-list@npm:3.2.3" + checksum: 10c0/03f9ed34eeed310d2b1cf0e524eea02bc5f87854a4de85f8957ea432ab1036841a3fb00879590519f7bb8fda40d992ce7a72fa9b61696ca1dc53b90064858f96 languageName: node linkType: hard @@ -6733,6 +6733,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^3.0.0": + version: 3.0.0 + resolution: "css-tree@npm:3.0.0" + dependencies: + mdn-data: "npm:2.10.0" + source-map-js: "npm:^1.0.1" + checksum: 10c0/43d44fdf7004ae91d73d486f17894fef77efa33747a6752b9241cf0f5fb47fabc16ec34a96a993651d9014dfdeee803d7c5fcd3548214252ee19f4e5c98999b2 + languageName: node + linkType: hard + "css-tree@npm:~2.2.0": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -6982,15 +6992,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6": - version: 4.3.6 - resolution: "debug@npm:4.3.6" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.3.6": + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -8577,12 +8587,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^9.0.0": - version: 9.0.0 - resolution: "file-entry-cache@npm:9.0.0" +"file-entry-cache@npm:^9.1.0": + version: 9.1.0 + resolution: "file-entry-cache@npm:9.1.0" dependencies: flat-cache: "npm:^5.0.0" - checksum: 10c0/07b0a4f062dc0aa258f3e1b06ac083ea25313f5e289943e146fafdaf3315dcc031635545eea7fe98fe5598b91d6c7f48dba7a251dd7ac20108a6ebf7d00b0b1c + checksum: 10c0/4b4dbc1e972f50202b1a4430d30fd99378ef6e2a64857176abdc65c5e4730a948fb37e274478520a7bacbc70f3abba455a4b9d2c1915c53f30d11dc85d3fef5e languageName: node linkType: hard @@ -9656,13 +9666,20 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.3.1, ignore@npm:^5.3.2": +"ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard +"ignore@npm:^6.0.2": + version: 6.0.2 + resolution: "ignore@npm:6.0.2" + checksum: 10c0/9a38feac1861906a78ba0f03e8ef3cd6b0526dce2a1a84e1009324b557763afeb9c3ebcc04666b21f7bbf71adda45e76781bb9e2eaa0903d45dcaded634454f5 + languageName: node + linkType: hard + "immer@npm:^10.0.3": version: 10.0.3 resolution: "immer@npm:10.0.3" @@ -11828,6 +11845,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.10.0": + version: 2.10.0 + resolution: "mdn-data@npm:2.10.0" + checksum: 10c0/f6f1a6a6eb092bab250d06f6f6c7cb1733a77a17e7119aac829ad67d4322bbf6a30df3c6d88686e71942e66bd49274b2ddfede22a1d3df0d6c49a56fbd09eb7c + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -12207,14 +12231,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -14036,12 +14053,12 @@ __metadata: languageName: node linkType: hard -"postcss-safe-parser@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-safe-parser@npm:7.0.0" +"postcss-safe-parser@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-safe-parser@npm:7.0.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/4217afd8ce2809e959dc365e4675f499303cc6b91f94db06c8164422822db2d3b3124df701ee2234db4127ad05619b016bfb9c2bccae9bf9cf898a396f1632c9 + checksum: 10c0/6957b10b818bd8d4664ec0e548af967f7549abedfb37f844d389571d36af681340f41f9477b9ccf34bcc7599bdef222d1d72e79c64373001fae77089fba6d965 languageName: node linkType: hard @@ -14105,7 +14122,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.41": +"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.47": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -16703,8 +16720,8 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.9.0 - resolution: "stylelint@npm:16.9.0" + version: 16.10.0 + resolution: "stylelint@npm:16.10.0" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -16714,17 +16731,17 @@ __metadata: balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" cosmiconfig: "npm:^9.0.0" - css-functions-list: "npm:^3.2.2" - css-tree: "npm:^2.3.1" - debug: "npm:^4.3.6" + css-functions-list: "npm:^3.2.3" + css-tree: "npm:^3.0.0" + debug: "npm:^4.3.7" fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^9.0.0" + file-entry-cache: "npm:^9.1.0" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.3.2" + ignore: "npm:^6.0.2" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.34.0" @@ -16733,21 +16750,20 @@ __metadata: micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.1" - postcss: "npm:^8.4.41" + postcss: "npm:^8.4.47" postcss-resolve-nested-selector: "npm:^0.1.6" - postcss-safe-parser: "npm:^7.0.0" + postcss-safe-parser: "npm:^7.0.1" postcss-selector-parser: "npm:^6.1.2" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^7.1.0" supports-hyperlinks: "npm:^3.1.0" svg-tags: "npm:^1.0.0" table: "npm:^6.8.2" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/d3ff9c8945c56b04a2fa16ec33d163325496d5db94b6fcb5adf74c76f7f794ac992888273f9a3317652ba8b6195168b2ffff382ca2a667a241e2ace8c9505ae2 + checksum: 10c0/d07dd156c225d16c740995daacd78090f7fc317602e87bda2fca323a4ae427a8526d724f3089df3b2185df4520f987547668ceea9b30985988ccbc514034aa21 languageName: node linkType: hard From 05bc82e1ab7fab0beae7dc300d2dd369faf0504a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 08:24:10 +0000 Subject: [PATCH 264/467] Update dependency use-debounce to v10.0.4 (#32452) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8c8c98bbc7125f..30317f9a1f37b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17662,11 +17662,11 @@ __metadata: linkType: hard "use-debounce@npm:^10.0.0": - version: 10.0.3 - resolution: "use-debounce@npm:10.0.3" + version: 10.0.4 + resolution: "use-debounce@npm:10.0.4" peerDependencies: react: "*" - checksum: 10c0/351b62c565d6dce5a21ecc21fe3e1f8db74f70c81c8f7d9dbdfc2da1cb82d883578589f6146e684d91dac534bc3c8b145ab1a36fbf4d44cbb4113827508b39aa + checksum: 10c0/73494fc44b2bd58a7ec799a528fc20077c45fe2e94fedff6dcd88d136f7a39f417d77f584d5613aac615ed32aeb2ea393797ae1f7d5b2645eab57cb497a6d0cb languageName: node linkType: hard From 555fb98cbb1f6e951d8ee0401bd95215ed8dd58c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:28:15 +0200 Subject: [PATCH 265/467] Update dependency typescript to v5.6.3 (#32456) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 30317f9a1f37b9..fe975f3a750080 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17408,22 +17408,22 @@ __metadata: linkType: hard "typescript@npm:5, typescript@npm:^5.0.4": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" + version: 5.6.3 + resolution: "typescript@npm:5.6.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 languageName: node linkType: hard "typescript@patch:typescript@npm%3A5#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": - version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 languageName: node linkType: hard From 2343ce4441c2304da1e20adcb7d9262d71890abd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 08:28:47 +0000 Subject: [PATCH 266/467] Update dependency rack to v2.2.10 (#32455) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1c2bb8df083089..4c9cfe828e2d2e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -615,7 +615,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.9) + rack (2.2.10) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (2.0.2) From 06d6b35e884dbfa10ba7cb0069b5dd8c25c76399 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 14 Oct 2024 04:31:12 -0400 Subject: [PATCH 267/467] Convert `admin/tags` controller specs to system specs (#32447) --- .../controllers/admin/tags_controller_spec.rb | 82 ------------------- spec/system/admin/tags_spec.rb | 38 +++++++++ 2 files changed, 38 insertions(+), 82 deletions(-) delete mode 100644 spec/controllers/admin/tags_controller_spec.rb create mode 100644 spec/system/admin/tags_spec.rb diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb deleted file mode 100644 index 1df2bc400309a0..00000000000000 --- a/spec/controllers/admin/tags_controller_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::TagsController do - render_views - - before do - sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) - end - - describe 'GET #index' do - before do - Fabricate(:tag) - - tag_filter = instance_double(Admin::TagFilter, results: Tag.all) - allow(Admin::TagFilter).to receive(:new).and_return(tag_filter) - end - - let(:params) { { order: 'newest' } } - - it 'returns http success' do - get :index - - expect(response).to have_http_status(200) - expect(response).to render_template(:index) - - expect(Admin::TagFilter) - .to have_received(:new) - .with(hash_including(params)) - end - - describe 'with filters' do - let(:params) { { order: 'newest', name: 'test' } } - - it 'returns http success' do - get :index, params: { name: 'test' } - - expect(response).to have_http_status(200) - expect(response).to render_template(:index) - - expect(Admin::TagFilter) - .to have_received(:new) - .with(hash_including(params)) - end - end - end - - describe 'GET #show' do - let!(:tag) { Fabricate(:tag) } - - before do - get :show, params: { id: tag.id } - end - - it 'returns status 200' do - expect(response).to have_http_status(200) - end - end - - describe 'PUT #update' do - let!(:tag) { Fabricate(:tag, listable: false) } - - context 'with valid params' do - it 'updates the tag' do - put :update, params: { id: tag.id, tag: { listable: '1' } } - - expect(response).to redirect_to(admin_tag_path(tag.id)) - expect(tag.reload).to be_listable - end - end - - context 'with invalid params' do - it 'does not update the tag' do - put :update, params: { id: tag.id, tag: { name: 'cant-change-name' } } - - expect(response).to have_http_status(200) - expect(response).to render_template(:show) - end - end - end -end diff --git a/spec/system/admin/tags_spec.rb b/spec/system/admin/tags_spec.rb new file mode 100644 index 00000000000000..a3eca80d13614a --- /dev/null +++ b/spec/system/admin/tags_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Tags' do + describe 'Tag interaction' do + let!(:tag) { Fabricate(:tag, name: 'test') } + + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'allows tags listing and editing' do + visit admin_tags_path + + expect(page) + .to have_title(I18n.t('admin.tags.title')) + + click_on '#test' + + fill_in display_name_field, with: 'NewTagName' + expect { click_on submit_button } + .to_not(change { tag.reload.display_name }) + expect(page) + .to have_content(match_error_text) + + fill_in display_name_field, with: 'TEST' + expect { click_on submit_button } + .to(change { tag.reload.display_name }.to('TEST')) + end + + def display_name_field + I18n.t('simple_form.labels.defaults.display_name') + end + + def match_error_text + I18n.t('tags.does_not_match_previous_name') + end + end +end From 2404d6d1a13d1e59f026c14403b89a328decabe3 Mon Sep 17 00:00:00 2001 From: Florian Kohler <13822756+FlohEinstein@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:57:34 +0200 Subject: [PATCH 268/467] Added Swiss German to languages dropdown (#29281) Co-authored-by: David Roetzel --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index b6c09b7314722e..394202e39ad78a 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -193,6 +193,7 @@ module LanguagesHelper ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze, cnr: ['Montenegrin', 'crnogorski'].freeze, csb: ['Kashubian', 'Kaszëbsczi'].freeze, + gsw: ['Swiss German', 'Schwiizertütsch'].freeze, jbo: ['Lojban', 'la .lojban.'].freeze, kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, From d8eab3d81f1ab46026801d4698380110e25f7b44 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 14 Oct 2024 08:51:01 -0400 Subject: [PATCH 269/467] Reinforce coverage for `DomainBlock` model (#32473) --- app/models/domain_block.rb | 4 +++- spec/models/domain_block_spec.rb | 33 ++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index b5d1f2e0796645..2853f6457a9b44 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -40,7 +40,9 @@ def policies if suspend? [:suspend] else - [severity.to_sym, reject_media? ? :reject_media : nil, reject_reports? ? :reject_reports : nil].reject { |policy| policy == :noop || policy.nil? } + [severity.to_sym, reject_media? ? :reject_media : nil, reject_reports? ? :reject_reports : nil] + .reject { |policy| policy == :noop } + .compact end end diff --git a/spec/models/domain_block_spec.rb b/spec/models/domain_block_spec.rb index 8278454cd7811a..14f904ea7fa6a5 100644 --- a/spec/models/domain_block_spec.rb +++ b/spec/models/domain_block_spec.rb @@ -3,14 +3,13 @@ require 'rails_helper' RSpec.describe DomainBlock do - describe 'validations' do + describe 'Validations' do it { is_expected.to validate_presence_of(:domain) } - it 'is invalid if the same normalized domain already exists' do - _domain_block = Fabricate(:domain_block, domain: 'にゃん') - domain_block_with_normalized_value = Fabricate.build(:domain_block, domain: 'xn--r9j5b5b') - domain_block_with_normalized_value.valid? - expect(domain_block_with_normalized_value).to model_have_error_on_field(:domain) + context 'when a normalized domain exists' do + before { Fabricate(:domain_block, domain: 'にゃん') } + + it { is_expected.to_not allow_value('xn--r9j5b5b').for(:domain) } end end @@ -105,4 +104,26 @@ end end end + + describe '#policies' do + subject { domain_block.policies } + + context 'when severity is suspend' do + let(:domain_block) { Fabricate.build :domain_block, severity: :suspend } + + it { is_expected.to eq(%i(suspend)) } + end + + context 'when severity is noop' do + let(:domain_block) { Fabricate.build :domain_block, severity: :noop, reject_media: true } + + it { is_expected.to eq(%i(reject_media)) } + end + + context 'when severity is silence' do + let(:domain_block) { Fabricate.build :domain_block, severity: :silence, reject_reports: true } + + it { is_expected.to eq(%i(silence reject_reports)) } + end + end end From cc70acc11cf488660ebd4a207633380e56cbf417 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 14 Oct 2024 08:52:47 -0400 Subject: [PATCH 270/467] Augment coverage for `Status` model (#32468) --- spec/models/status_spec.rb | 52 ++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index df67c365eb34a0..90f5968438644f 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -472,11 +472,53 @@ end end - describe 'validation' do - it 'disallow empty uri for remote status' do - alice.update(domain: 'example.com') - status = Fabricate.build(:status, uri: '', account: alice) - expect(status).to model_have_error_on_field(:uri) + describe 'Validations' do + context 'with a remote account' do + subject { Fabricate.build :status, account: remote_account } + + let(:remote_account) { Fabricate :account, domain: 'example.com' } + + it { is_expected.to_not allow_value('').for(:uri) } + end + end + + describe 'Callbacks' do + describe 'Stripping content when required' do + context 'with a remote account' do + subject { Fabricate.build :status, local: false, account:, text: ' text ', spoiler_text: ' spoiler ' } + + let(:account) { Fabricate.build :account, domain: 'host.example' } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :text) + .and not_change(subject, :spoiler_text) + end + end + + context 'with a local account' do + let(:account) { Fabricate.build :account, domain: nil } + + context 'with populated fields' do + subject { Fabricate.build :status, local: true, account:, text: ' text ', spoiler_text: ' spoiler ' } + + it 'strips content' do + expect { subject.valid? } + .to change(subject, :text).to('text') + .and change(subject, :spoiler_text).to('spoiler') + end + end + + context 'with empty fields' do + subject { Fabricate.build :status, local: true, account:, text: nil, spoiler_text: nil } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :text) + .and not_change(subject, :spoiler_text) + end + end + end end end From ffa10323814b3ea0f15ac9cd2238164e42a873ad Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Oct 2024 15:00:20 +0200 Subject: [PATCH 271/467] Add further warnings about encryption secrets (#32476) --- config/initializers/active_record_encryption.rb | 1 + lib/tasks/db.rake | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/config/initializers/active_record_encryption.rb b/config/initializers/active_record_encryption.rb index b7a874e4046f2d..c53f16d4d14da1 100644 --- a/config/initializers/active_record_encryption.rb +++ b/config/initializers/active_record_encryption.rb @@ -20,6 +20,7 @@ - ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY Run `bin/rails db:encryption:init` to generate new secrets and then assign the environment variables. + Do not change the secrets once they are set, as doing so may cause data loss and other issues that will be difficult or impossible to recover from. MESSAGE end diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index 79599bd91768f4..73de0c120faa09 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -7,6 +7,17 @@ namespace :db do namespace :encryption do desc 'Generate a set of keys for configuring Active Record encryption in a given environment' task :init do # rubocop:disable Rails/RakeEnvironment + if %w( + ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY + ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT + ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY + ).any? { |key| ENV.key?(key) } + pastel = Pastel.new + puts pastel.red(<<~MSG) + WARNING: It looks like encryption secrets have already been set. Please ensure you are not changing secrets for a Mastodon installation that already uses them, as this will cause data loss and other issues that are difficult to recover from. + MSG + end + puts <<~MSG Add the following secret environment variables to your Mastodon environment (e.g. .env.production), ensure they are shared across all your nodes and do not change them after they are set:#{' '} From 7c10b0fb7a078661558fef86399d86831423260c Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 14 Oct 2024 17:25:32 +0200 Subject: [PATCH 272/467] Fix follow recommendation carrousel scrolling on RTL layouts (#32462) --- .../components/inline_follow_suggestions.jsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx index 1b8040e55bb00b..14ea6bd99688cc 100644 --- a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx +++ b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx @@ -129,8 +129,13 @@ export const InlineFollowSuggestions = ({ hidden }) => { return; } - setCanScrollLeft(bodyRef.current.scrollLeft > 0); - setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + if (getComputedStyle(bodyRef.current).direction === 'rtl') { + setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth); + setCanScrollRight(bodyRef.current.scrollLeft < 0); + } else { + setCanScrollLeft(bodyRef.current.scrollLeft > 0); + setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + } }, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]); const handleLeftNav = useCallback(() => { From 6d99f848a2b7b1b89ca165b5f6a69d1c04f9e469 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 15 Oct 2024 09:40:18 +0200 Subject: [PATCH 273/467] Fix: Use consistent REDIS_USER environment variable in streaming (#32493) --- streaming/redis.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/streaming/redis.js b/streaming/redis.js index 2a36b89dc553a3..0b582ef2f5eb04 100644 --- a/streaming/redis.js +++ b/streaming/redis.js @@ -50,9 +50,9 @@ function getSentinelConfiguration(env, commonOptions) { return { db: redisDatabase, name: env.REDIS_SENTINEL_MASTER, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, - sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USERNAME, + sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USER, sentinelPassword: env.REDIS_SENTINEL_PASSWORD ?? env.REDIS_PASSWORD, sentinels, ...commonOptions, @@ -104,7 +104,7 @@ export function configFromEnv(env) { host: env.REDIS_HOST ?? '127.0.0.1', port: redisPort, db: redisDatabase, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, ...commonOptions, }; From 51345e5133a7f7b84044b9aeebdf99fd769ddf40 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 15 Oct 2024 11:15:25 +0200 Subject: [PATCH 274/467] Fix back arrow pointing to the incorrect direction in RTL languages (#32485) --- app/javascript/styles/mastodon/rtl.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index e4e299ff82d9c2..0a05ce7c62d72a 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -35,6 +35,10 @@ body.rtl { direction: rtl; } + .column-back-button__icon { + transform: scale(-1, 1); + } + .simple_form select { background: $ui-base-color url("data:image/svg+xml;utf8,") From b5e8bc4dad663644a88e7bf78fa5365615a05736 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:16:14 +0000 Subject: [PATCH 275/467] Update dependency strong_migrations to v2.0.1 (#32503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4c9cfe828e2d2e..dab581703179fe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -822,7 +822,7 @@ GEM stoplight (4.1.0) redlock (~> 1.0) stringio (3.1.1) - strong_migrations (2.0.0) + strong_migrations (2.0.1) activerecord (>= 6.1) swd (1.3.0) activesupport (>= 3) From 5ac64153d9921df6c0a751cb97fb666c6fe902af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:16:29 +0000 Subject: [PATCH 276/467] Update dependency pghero to v3.6.1 (#32502) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index dab581703179fe..0de74c5ed61d14 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -591,7 +591,7 @@ GEM pastel (0.8.0) tty-color (~> 0.5) pg (1.5.8) - pghero (3.6.0) + pghero (3.6.1) activerecord (>= 6.1) premailer (1.27.0) addressable From 7d89cea0ea0fb25657864b3f442639de14966137 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:26:28 +0000 Subject: [PATCH 277/467] New Crowdin Translations (automated) (#32339) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ast.json | 14 +-- app/javascript/mastodon/locales/cy.json | 2 + app/javascript/mastodon/locales/en-GB.json | 2 +- app/javascript/mastodon/locales/eo.json | 92 ++++++++-------- app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/et.json | 11 ++ app/javascript/mastodon/locales/eu.json | 4 +- app/javascript/mastodon/locales/fa.json | 9 +- app/javascript/mastodon/locales/fil.json | 33 +++++- app/javascript/mastodon/locales/fr-CA.json | 6 +- app/javascript/mastodon/locales/fr.json | 6 +- app/javascript/mastodon/locales/ga.json | 1 + app/javascript/mastodon/locales/gd.json | 1 + app/javascript/mastodon/locales/ia.json | 41 +++++++ app/javascript/mastodon/locales/is.json | 7 ++ app/javascript/mastodon/locales/ja.json | 9 ++ app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/lad.json | 2 + app/javascript/mastodon/locales/ml.json | 26 ++++- app/javascript/mastodon/locales/ms.json | 2 + app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/oc.json | 9 ++ app/javascript/mastodon/locales/ru.json | 13 ++- app/javascript/mastodon/locales/sv.json | 17 +++ app/javascript/mastodon/locales/th.json | 4 + app/javascript/mastodon/locales/vi.json | 4 +- app/javascript/mastodon/locales/zh-CN.json | 54 +++++----- config/locales/activerecord.eo.yml | 2 +- config/locales/activerecord.ia.yml | 1 + config/locales/activerecord.ja.yml | 6 ++ config/locales/activerecord.ml.yml | 18 +++- config/locales/activerecord.zh-TW.yml | 2 +- config/locales/ast.yml | 5 +- config/locales/cy.yml | 101 ++++++++++++++++-- config/locales/devise.eo.yml | 2 +- config/locales/doorkeeper.ast.yml | 2 + config/locales/doorkeeper.es-MX.yml | 2 +- config/locales/doorkeeper.et.yml | 1 + config/locales/doorkeeper.fa.yml | 2 +- config/locales/doorkeeper.is.yml | 1 + config/locales/doorkeeper.ja.yml | 1 + config/locales/doorkeeper.sv.yml | 2 +- config/locales/doorkeeper.vi.yml | 24 ++--- config/locales/doorkeeper.zh-CN.yml | 2 +- config/locales/eo.yml | 29 ++++- config/locales/es-MX.yml | 8 +- config/locales/et.yml | 43 ++++++++ config/locales/fa.yml | 16 +++ config/locales/fr-CA.yml | 39 +++++++ config/locales/fr.yml | 39 +++++++ config/locales/ga.yml | 75 +++++++++++++ config/locales/gd.yml | 63 +++++++++++ config/locales/gl.yml | 4 +- config/locales/ia.yml | 60 +++++++++++ config/locales/is.yml | 38 +++++++ config/locales/it.yml | 3 +- config/locales/ja.yml | 47 ++++++-- config/locales/ko.yml | 6 +- config/locales/lad.yml | 9 ++ config/locales/lv.yml | 3 + config/locales/simple_form.ast.yml | 22 ++-- config/locales/simple_form.eo.yml | 2 + config/locales/simple_form.fa.yml | 4 + config/locales/simple_form.ja.yml | 3 + config/locales/simple_form.sv.yml | 2 + config/locales/simple_form.vi.yml | 4 +- config/locales/sq.yml | 1 + config/locales/sv.yml | 24 ++++- config/locales/th.yml | 1 + config/locales/vi.yml | 118 ++++++++++----------- config/locales/zh-CN.yml | 20 ++-- 72 files changed, 1004 insertions(+), 230 deletions(-) diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 219ea0d17cf1c4..a7f44aeadeb83a 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -29,7 +29,7 @@ "account.followers": "Siguidores", "account.followers.empty": "Naide sigue a esti perfil.", "account.follows.empty": "Esti perfil nun sigue a naide.", - "account.hide_reblogs": "Anubrir los artículos compartíos de @{name}", + "account.hide_reblogs": "Esconder los artículos compartíos de @{name}", "account.in_memoriam": "N'alcordanza.", "account.joined_short": "Data de xunión", "account.link_verified_on": "La propiedá d'esti enllaz comprobóse'l {date}", @@ -122,6 +122,7 @@ "conversation.open": "Ver la conversación", "conversation.with": "Con {names}", "copypaste.copied": "Copióse", + "copypaste.copy_to_clipboard": "Copiar nel cartafueyu", "directory.federated": "Del fediversu conocíu", "directory.local": "De «{domain}» namás", "directory.new_arrivals": "Cuentes nueves", @@ -130,7 +131,7 @@ "dismissable_banner.dismiss": "Escartar", "dismissable_banner.explore_tags": "Esta seición contién les etiquetes del fediversu que tán ganando popularidá güei. Les etiquetes más usaes polos perfiles apaecen no cimero.", "dismissable_banner.public_timeline": "Esta seición contién los artículos más nuevos de les persones na web social que les persones de {domain} siguen.", - "embed.instructions": "Empotra esti artículu nel to sitiu web pente la copia del códigu d'abaxo.", + "embed.instructions": "Empotra esti artículu nel to sitiu web copiando'l códigu d'abaxo.", "embed.preview": "Va apaecer asina:", "emoji_button.activity": "Actividá", "emoji_button.flags": "Banderes", @@ -251,7 +252,7 @@ "keyboard_shortcuts.requests": "Abrir la llista de solicitúes de siguimientu", "keyboard_shortcuts.search": "Enfocar la barra de busca", "keyboard_shortcuts.start": "Abrir la columna «Entamar»", - "keyboard_shortcuts.toggle_sensitivity": "Amosar/anubrir el conteníu multimedia", + "keyboard_shortcuts.toggle_sensitivity": "Amosar/esconder el conteníu multimedia", "keyboard_shortcuts.toot": "Comenzar un artículu nuevu", "keyboard_shortcuts.unfocus": "Desenfocar l'área de composición/busca", "keyboard_shortcuts.up": "Xubir na llista", @@ -418,11 +419,12 @@ "status.direct": "Mentar a @{name} per privao", "status.direct_indicator": "Mención privada", "status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}", + "status.embed": "Consiguir el códigu pa empotrar", "status.filter": "Peñerar esti artículu", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editó {date}", "status.load_more": "Cargar más", - "status.media_hidden": "Conteníu multimedia anubríu", + "status.media_hidden": "Conteníu multimedia escondíu", "status.mention": "Mentar a @{name}", "status.more": "Más", "status.mute": "Desactivar los avisos de @{name}", @@ -468,14 +470,14 @@ "upload_modal.applying": "Aplicando…", "upload_modal.detect_text": "Detectar el testu de la semeya", "upload_modal.edit_media": "Edición", - "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que siempres va tar a la vista en toles miniatures.", + "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que siempre va tar a la vista en toles miniatures.", "upload_progress.label": "Xubiendo…", "upload_progress.processing": "Procesando…", "video.close": "Zarrar el videu", "video.download": "Baxar el ficheru", "video.expand": "Espander el videu", "video.fullscreen": "Pantalla completa", - "video.hide": "Anubrir el videu", + "video.hide": "Esconder el videu", "video.mute": "Desactivar el soníu", "video.pause": "Posar", "video.play": "Reproducir", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 52dc6a49e2f2fe..43446f31e0eafe 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -222,6 +222,7 @@ "domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.", "domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.", "domain_block_modal.title": "Blocio parth?", + "domain_block_modal.you_will_lose_num_followers": "Byddwch yn colli {followersCount, plural, one {{followersCountDisplay} dilynwr} other {{followersCountDisplay} dilynwyr}} a {followingCount, plural, one {{followingCountDisplay} person rydych yn dilyn} other {{followingCountDisplay} o bobl rydych yn eu dilyn}}.", "domain_block_modal.you_will_lose_relationships": "Byddwch yn colli'r holl ddilynwyr a phobl rydych chi'n eu dilyn o'r gweinydd hwn.", "domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.", "domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.", @@ -515,6 +516,7 @@ "notification.label.private_reply": "Ateb preifat", "notification.label.reply": "Ateb", "notification.mention": "Crybwyll", + "notification.mentioned_you": "Rydych wedi'ch crybwyll gan {name}", "notification.moderation-warning.learn_more": "Dysgu mwy", "notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr", "notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index da4c005203bc3f..d0b93d8bb8a1de 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -791,7 +791,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Get embed code", "status.favourite": "Favourite", - "status.favourites": "{count, plural, one {favorite} other {favorites}}", + "status.favourites": "{count, plural, one {favourite} other {favourites}}", "status.filter": "Filter this post", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 5f6582fb68d123..a6f6e0e85ebf09 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -13,7 +13,7 @@ "about.rules": "Regularo de la servilo", "account.account_note_header": "Personaj notoj", "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", - "account.badges.bot": "Roboto", + "account.badges.bot": "Aŭtomata", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", "account.block_domain": "Bloki la domajnon {domain}", @@ -86,7 +86,7 @@ "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Aj!", "alt_text_badge.title": "Alt-teksto", - "announcement.announcement": "Anoncoj", + "announcement.announcement": "Anonco", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", "block_modal.remote_users_caveat": "Ni petos al la servilo {domain} respekti vian elekton. Tamen, plenumo ne estas garantiita ĉar iuj serviloj eble manipulas blokojn malsame. Publikaj afiŝoj eble ankoraŭ estas videbla por ne-ensalutintaj uzantoj.", @@ -105,13 +105,13 @@ "bundle_column_error.error.title": "Ho, ve!", "bundle_column_error.network.body": "Okazis eraro dum ŝarĝado de ĉi tiu paĝo. Tion povas kaŭzi portempa problemo pri via retkonektado aŭ pri ĉi tiu servilo.", "bundle_column_error.network.title": "Eraro de reto", - "bundle_column_error.retry": "Provu refoje", + "bundle_column_error.retry": "Provu denove", "bundle_column_error.return": "Reiri hejmen", "bundle_column_error.routing.body": "La celita paĝo ne troveblas. Ĉu vi certas, ke la retadreso (URL) en via retfoliumilo estas ĝusta?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Fermi", "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", - "bundle_modal_error.retry": "Bonvolu reprovi", + "bundle_modal_error.retry": "Provu denove", "closed_registrations.other_server_instructions": "Ĉar Mastodon estas malcentraliza, vi povas krei konton ĉe alia servilo kaj ankoraŭ komuniki kun ĉi tiu.", "closed_registrations_modal.description": "Krei konton ĉe {domain} aktuale ne eblas, tamen bonvole rimarku, ke vi ne bezonas konton specife ĉe {domain} por uzi Mastodon.", "closed_registrations_modal.find_another_server": "Trovi alian servilon", @@ -182,8 +182,8 @@ "confirmations.edit.confirm": "Redakti", "confirmations.edit.message": "Redakti nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.edit.title": "Ĉu superskribi afiŝon?", - "confirmations.logout.confirm": "Adiaŭi", - "confirmations.logout.message": "Ĉu vi certas ke vi volas adiaŭi?", + "confirmations.logout.confirm": "Elsaluti", + "confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?", "confirmations.logout.title": "Ĉu elsaluti?", "confirmations.mute.confirm": "Silentigi", "confirmations.redraft.confirm": "Forigi kaj reskribi", @@ -198,7 +198,7 @@ "content_warning.hide": "Kaŝi afiŝon", "content_warning.show": "Montri ĉiukaze", "conversation.delete": "Forigi konversacion", - "conversation.mark_as_read": "Marki legita", + "conversation.mark_as_read": "Marku kiel legita", "conversation.open": "Vidi konversacion", "conversation.with": "Kun {names}", "copy_icon_button.copied": "Kopiis al kliptabulo", @@ -247,18 +247,18 @@ "emoji_button.food": "Manĝi kaj trinki", "emoji_button.label": "Enmeti emoĝion", "emoji_button.nature": "Naturo", - "emoji_button.not_found": "Neniu emoĝio!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Neniuj kongruaj emoĝioj trovitaj", "emoji_button.objects": "Aĵoj", "emoji_button.people": "Homoj", "emoji_button.recent": "Ofte uzataj", - "emoji_button.search": "Serĉo…", + "emoji_button.search": "Serĉo...", "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", "empty_column.account_hides_collections": "Ĉi tiu uzanto elektis ne disponebligi ĉi tiu informon", "empty_column.account_suspended": "Konto suspendita", - "empty_column.account_timeline": "Neniu afiŝo ĉi tie!", - "empty_column.account_unavailable": "Profilo ne disponebla", + "empty_column.account_timeline": "Neniuj afiŝoj ĉi tie!", + "empty_column.account_unavailable": "Profilo nedisponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", "empty_column.bookmarked_statuses": "Vi ankoraŭ ne aldonis afiŝon al viaj legosignoj. Kiam vi aldonos iun, tiu aperos ĉi tie.", "empty_column.community": "La loka templinio estas malplena. Skribu ion por plenigi ĝin!", @@ -343,7 +343,7 @@ "hashtag.column_header.tag_mode.all": "kaj {additional}", "hashtag.column_header.tag_mode.any": "aŭ {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", - "hashtag.column_settings.select.no_options_message": "Neniu sugesto trovita", + "hashtag.column_settings.select.no_options_message": "Neniuj sugestoj trovitaj", "hashtag.column_settings.select.placeholder": "Enmeti kradvortojn…", "hashtag.column_settings.tag_mode.all": "Ĉiuj", "hashtag.column_settings.tag_mode.any": "Iu ajn", @@ -399,40 +399,40 @@ "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", - "keyboard_shortcuts.back": "reveni", + "keyboard_shortcuts.back": "Reiru reen", "keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj", "keyboard_shortcuts.boost": "Diskonigi la mesaĝon", "keyboard_shortcuts.column": "Fokusi kolumnon", - "keyboard_shortcuts.compose": "enfokusigi la tekstujon", + "keyboard_shortcuts.compose": "Enfokusigi la tekstaron", "keyboard_shortcuts.description": "Priskribo", "keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj", - "keyboard_shortcuts.down": "iri suben en la listo", + "keyboard_shortcuts.down": "Movu malsupren en la listo", "keyboard_shortcuts.enter": "Malfermi afiŝon", "keyboard_shortcuts.favourite": "Stelumi afiŝon", "keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj", "keyboard_shortcuts.federated": "Malfermi la frataran templinion", - "keyboard_shortcuts.heading": "Klavaraj mallongigoj", + "keyboard_shortcuts.heading": "Fulmoklavoj", "keyboard_shortcuts.home": "Malfermi la hejman templinion", "keyboard_shortcuts.hotkey": "Rapidklavo", - "keyboard_shortcuts.legend": "montri ĉi tiun noton", - "keyboard_shortcuts.local": "Malfermi la lokan templinion", - "keyboard_shortcuts.mention": "mencii la aŭtoron", - "keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj", - "keyboard_shortcuts.my_profile": "malfermi vian profilon", - "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", - "keyboard_shortcuts.open_media": "Malfermi plurmedion", + "keyboard_shortcuts.legend": "Montru ĉi tiun legendon", + "keyboard_shortcuts.local": "Malfermu la lokan templinion", + "keyboard_shortcuts.mention": "Menciu aŭtoron", + "keyboard_shortcuts.muted": "Malfermu la liston de silentigitaj uzantoj", + "keyboard_shortcuts.my_profile": "Malfermu vian profilon", + "keyboard_shortcuts.notifications": "Malfermu la sciigajn kolumnon", + "keyboard_shortcuts.open_media": "Malfermu plurmedion", "keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston", - "keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro", + "keyboard_shortcuts.profile": "Malfermu la profilon de aŭtoro", "keyboard_shortcuts.reply": "Respondu al afiŝo", "keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado", - "keyboard_shortcuts.search": "enfokusigi la serĉilon", - "keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")", - "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", - "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")", + "keyboard_shortcuts.search": "Enfokusigi la serĉbreton", + "keyboard_shortcuts.spoilers": "Montri/kaŝi CW-kampon", + "keyboard_shortcuts.start": "Malfermu \"por komenci\" kolumnon", + "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ CW", "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion", "keyboard_shortcuts.toot": "Komencu novan afiŝon", - "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", - "keyboard_shortcuts.up": "iri supren en la listo", + "keyboard_shortcuts.unfocus": "Senfokusigi verki tekstareon/serĉon", + "keyboard_shortcuts.up": "Movu supren en la listo", "lightbox.close": "Fermi", "lightbox.next": "Antaŭen", "lightbox.previous": "Malantaŭen", @@ -612,8 +612,8 @@ "notifications_permission_banner.title": "Neniam preterlasas iun ajn", "onboarding.action.back": "Prenu min reen", "onboarding.actions.back": "Prenu min reen", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_explore": "Konduku min al tendenco", + "onboarding.actions.go_to_home": "Konduku min al mia hejma fluo", "onboarding.compose.template": "Saluton #Mastodon!", "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.", "onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:", @@ -633,17 +633,17 @@ "onboarding.share.message": "Mi estas {username} en #Mastodon! Sekvu min ĉe {url}", "onboarding.share.next_steps": "Eblaj malantauaj paŝoj:", "onboarding.share.title": "Disvastigi vian profilon", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.lead": "Vi nun estas parto de Mastodon, unika, malcentralizita socia amaskomunikilara platformo, kie vi—ne algoritmo—zorgas vian propran sperton. Ni komencu vin sur ĉi tiu nova socia limo:", + "onboarding.start.skip": "Ĉu vi ne bezonas helpon por komenci?", "onboarding.start.title": "Vi atingas ĝin!", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", + "onboarding.steps.follow_people.body": "Sekvi interesajn homojn estas pri kio Mastodonto temas.", + "onboarding.steps.follow_people.title": "Agordu vian hejman fluon", "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}", "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.steps.setup_profile.body": "Diskonigu viajn interagojn havante ampleksan profilon.", + "onboarding.steps.setup_profile.title": "Agordu vian profilon", + "onboarding.steps.share_profile.body": "Sciigu viajn amikojn kiel trovi vin sur Mastodon", + "onboarding.steps.share_profile.title": "Kunhavigu vian Mastodon-profilon", "onboarding.tips.2fa": "Ĉu vi scias? Vi povas sekurigi vian konton per efektivigi dufaktora autentigo en via kontoagordoj.", "onboarding.tips.accounts_from_other_servers": "Ĉu vi scias? Ĉar Mastodon estas sencentra, kelkaj profiloj kiujn vi trovi estas gastigitaj ĉe aliaj serviloj kiuj ne estas via.", "onboarding.tips.migration": "Ĉu vi scias? Se vi sentas ke {domain} ne estas bona servilelekto por vi en la estonteco, vi povas translokiĝi al alia servilo de Mastodon sen malgajni viajn sekvantojn.", @@ -825,7 +825,7 @@ "status.show_less_all": "Montri malpli ĉiun", "status.show_more_all": "Montri pli ĉiun", "status.show_original": "Montru originalon", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} afiŝis {attachmentCount, plural, one {aldonaĵon} other {{attachmentCount} aldonaĵojn}}", "status.translate": "Traduki", "status.translated_from_with": "Tradukita el {lang} per {provider}", "status.uncached_media_warning": "Antaŭrigardo ne disponebla", @@ -848,7 +848,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Altreni kaj lasi por alŝuti", - "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Aldonu bildojn, filmeton aŭ sondosieron", "upload_error.limit": "Limo de dosiera alŝutado transpasita.", "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.", "upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi", @@ -871,17 +871,17 @@ "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", "upload_modal.preparing_ocr": "Preparante OSR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", - "upload_progress.label": "Alŝutado…", + "upload_progress.label": "Alŝutante...", "upload_progress.processing": "Traktante…", "username.taken": "La uzantnomo estas jam posedita. Provu alion", - "video.close": "Fermi la videon", + "video.close": "Fermu la filmeton", "video.download": "Elŝuti dosieron", "video.exit_fullscreen": "Eksigi plenekrana", "video.expand": "Pligrandigi la videon", "video.fullscreen": "Igi plenekrana", - "video.hide": "Kaŝi la videon", + "video.hide": "Kaŝu la filmeton", "video.mute": "Silentigi", - "video.pause": "Paŭzi", + "video.pause": "Paŭzigi", "video.play": "Ekigi", "video.unmute": "Malsilentigi" } diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 7fec88a96e16ed..af0a03299198a0 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -249,7 +249,7 @@ "emoji_button.nature": "Naturaleza", "emoji_button.not_found": "No se encontraron emojis coincidentes", "emoji_button.objects": "Objetos", - "emoji_button.people": "Cuentas", + "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index ddfdf6960b8daa..d101d3bc81f6d6 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -516,7 +516,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", - "notification.mentioned_you": "{name} te ha mencionado", + "notification.mentioned_you": "{name} te mencionó", "notification.moderation-warning.learn_more": "Saber más", "notification.moderation_warning": "Has recibido una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 69df3c4140ebc5..82e7e6d67c8001 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Kiiruspiirang", "alert.unexpected.message": "Tekkis ootamatu viga.", "alert.unexpected.title": "Oih!", + "alt_text_badge.title": "Alternatiivtekst", "announcement.announcement": "Teadaanne", "attachments_list.unprocessed": "(töötlemata)", "audio.hide": "Peida audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Sellest serverist ei saa keegi sind jälgida.", "domain_block_modal.they_wont_know": "Nad ei tea, et nad on blokeeritud.", "domain_block_modal.title": "Blokeerida domeen?", + "domain_block_modal.you_will_lose_num_followers": "Sult kaob {followersCount, plural, one {{followersCountDisplay} jälgija} other {{followersCountDisplay} jälgijat}} ja {followingCount, plural, one {{followingCountDisplay} inimene} other {{followingCountDisplay} inimest}}, keda sa ise jälgid.", + "domain_block_modal.you_will_lose_relationships": "Sa kaotad kõik oma jälgijad ja inimesed, kes sind jälgivad sellest serverist.", "domain_block_modal.you_wont_see_posts": "Sa ei näe selle serveri kasutajate postitusi ega teavitusi.", "domain_pill.activitypub_lets_connect": "See võimaldab sul ühenduda inimestega ja nendega suhelda mitte ainult Mastodonis, vaid ka teistes suhtlusrakendustes.", "domain_pill.activitypub_like_language": "ActivityPub on nagu keel, mida Mastodon räägib teiste suhtlusvõrgustikega.", @@ -433,6 +436,8 @@ "lightbox.close": "Sulge", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", + "lightbox.zoom_in": "Näita algsuuruses", + "lightbox.zoom_out": "Näita kõik", "limited_account_hint.action": "Näita profilli sellegipoolest", "limited_account_hint.title": "See profiil on peidetud {domain} moderaatorite poolt.", "link_preview.author": "{name} poolt", @@ -511,6 +516,7 @@ "notification.label.private_reply": "Privaatne vastus", "notification.label.reply": "Vastus", "notification.mention": "Mainimine", + "notification.mentioned_you": "{name} mainis sind", "notification.moderation-warning.learn_more": "Vaata lisa", "notification.moderation_warning": "Said modereerimise hoiatuse", "notification.moderation_warning.action_delete_statuses": "Mõni su postitus on eemaldatud.", @@ -847,6 +853,11 @@ "upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.", "upload_form.audio_description": "Kirjelda kuulmispuudega inimeste jaoks", "upload_form.description": "Kirjelda vaegnägijatele", + "upload_form.drag_and_drop.instructions": "Vajuta tühikut või enterit, et tõsta manus. Lohistamise ajal kasuta nooleklahve, et manust liigutada teatud suunas. Vajuta tühikut või enterit uuesti, et paigutada manus oma uuele kohale, või escape tühistamiseks.", + "upload_form.drag_and_drop.on_drag_cancel": "Lohistamine tühistati. Manus {item} on asetatud.", + "upload_form.drag_and_drop.on_drag_end": "Manus {item} on asetatud.", + "upload_form.drag_and_drop.on_drag_over": "Manus {item} on liigutatud.", + "upload_form.drag_and_drop.on_drag_start": "Tõstetud on manus {item}.", "upload_form.edit": "Muuda", "upload_form.thumbnail": "Muuda pisipilti", "upload_form.video_description": "Kirjelda kuulmis- või nägemispuudega inimeste jaoks", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 63449e934210ee..70ea7601fe2e3e 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -268,7 +268,7 @@ "empty_column.follow_requests": "Ez duzu jarraitzeko eskaerarik oraindik. Baten bat jasotzen duzunean, hemen agertuko da.", "empty_column.followed_tags": "Oraindik ez duzu traolik jarraitzen. Egiterakoan, hemen agertuko dira.", "empty_column.hashtag": "Ez dago ezer traola honetan oraindik.", - "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.", + "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Jarraitu jende gehiago betetzeko.", "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek bidalketa berriak argitaratzean, hemen agertuko dira.", "empty_column.lists": "Ez duzu zerrendarik oraindik. Baten bat sortzen duzunean hemen agertuko da.", "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.", @@ -597,7 +597,7 @@ "notifications.policy.filter_not_following_title": "Jarraitzen ez duzun jendea", "notifications.policy.filter_private_mentions_hint": "Iragazita, baldin eta zure aipamenaren erantzuna bada edo bidaltzailea jarraitzen baduzu", "notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak", - "notifications.policy.title": "Kudeatu honen jakinarazpaenak…", + "notifications.policy.title": "Kudeatu honen jakinarazpenak…", "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index d510c2a6a455c9..ef8136da61379a 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -373,6 +373,7 @@ "ignore_notifications_modal.new_accounts_title": "چشم‌پوشی از آگاهی‌های حساب‌های جدید؟", "ignore_notifications_modal.not_followers_title": "چشم‌پوشی از آگاهی‌های افرادی که پیتان نمی‌گیرند؟", "ignore_notifications_modal.not_following_title": "چشم‌پوشی از آگاهی‌های افرادی که پیشان نمی‌گیرید؟", + "ignore_notifications_modal.private_mentions_title": "چشم‌پوشی از نام‌بری‌های خصوصی ناخواسته؟", "interaction_modal.description.favourite": "با حسابی روی ماستودون می‌توانید این فرسته را برگزیده تا نگارنده بداند قدردانش هستید و برای آینده ذخیره‌اش می‌کنید.", "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", "interaction_modal.description.reblog": "با حسابی روی ماستودون می‌توانید این فرسته را با پی‌گیران خودتان هم‌رسانی کنید.", @@ -554,7 +555,7 @@ "notifications.filter.all": "همه", "notifications.filter.boosts": "تقویت‌ها", "notifications.filter.favourites": "برگزیده‌ها", - "notifications.filter.follows": "پی‌گرفتگان", + "notifications.filter.follows": "پی‌گرفتن‌ها", "notifications.filter.mentions": "اشاره‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", @@ -572,10 +573,14 @@ "notifications.policy.filter_hint": "فرستادن به صندوق آگاهی‌های پالوده", "notifications.policy.filter_limited_accounts_hint": "محدود شده به دست ناظم‌های کارساز", "notifications.policy.filter_limited_accounts_title": "حساب‌های مدیریت شده", + "notifications.policy.filter_new_accounts.hint": "ساخته شده در {days, plural, one {یک} other {#}} روز اخیر", "notifications.policy.filter_new_accounts_title": "حساب‌های جدید", + "notifications.policy.filter_not_followers_hint": "از جمله کسانی که کم‌تر از {days, plural, one {یک} other {#}} روز است پی‌تان می‌گیرند", "notifications.policy.filter_not_followers_title": "کسانی که شما را دنبال میکنند", - "notifications.policy.filter_not_following_hint": "", + "notifications.policy.filter_not_following_hint": "تا به صورت دستی تأییدشان کنید", "notifications.policy.filter_not_following_title": "کسانی که پی نمی‌گیرید", + "notifications.policy.filter_private_mentions_hint": "پالوده مگر این که به نام‌بری خودتان پاسخ داده یا پی‌گیر فرستنده باشید", + "notifications.policy.filter_private_mentions_title": "نام‌بری‌های خصوصی ناخواسته", "notifications.policy.title": "مدیریت آگاهی‌ها از…", "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار", "notifications_permission_banner.how_to_control": "برای دریافت آگاهی‌ها هنگام باز نبودن ماستودون، آگاهی‌های میزکار را به کار بیندازید. پس از به کار افتادنشان می‌توانید گونه‌های دقیق برهم‌کنش‌هایی که آگاهی‌های میزکار تولید می‌کنند را از {icon} بالا واپایید.", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 40292c269126e9..a2009d8ba3907b 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -46,9 +46,11 @@ "account.media": "Medya", "account.mention": "Banggitin si @{name}", "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "account.no_bio": "Walang nakalaan na paglalarawan.", "account.open_original_page": "Buksan ang pinagmulang pahina", "account.report": "I-ulat si/ang @{name}", "account.requested_follow": "Hinihiling ni {name} na sundan ka", + "account.share": "Ibahagi ang profile ni @{name}", "account.show_reblogs": "Ipakita ang mga pagpapalakas mula sa/kay {name}", "account.unendorse": "Huwag itampok sa profile", "admin.dashboard.retention.cohort_size": "Mga bagong tagagamit", @@ -56,7 +58,11 @@ "audio.hide": "Itago ang tunog", "block_modal.show_less": "Magpakita ng mas kaunti", "block_modal.show_more": "Magpakita ng higit pa", + "block_modal.they_cant_mention": "Hindi sila makakabanggit sa iyo o sundan ka.", + "block_modal.they_will_know": "Makita nila na hinarangan sila.", "block_modal.title": "Harangan ang tagagamit?", + "block_modal.you_wont_see_mentions": "Hindi ka makakakita ng mga post na nagbanggit sa kanila.", + "boost_modal.combo": "Maari mong pindutin ang {combo} upang laktawan ito sa susunod na oras", "bundle_column_error.error.title": "Naku!", "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", "bundle_column_error.network.title": "Kamaliang network", @@ -107,6 +113,8 @@ "compose_form.direct_message_warning_learn_more": "Matuto pa", "compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.", "compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.", + "compose_form.lock_disclaimer": "Hindi {locked} ang iyong account. Maaaring susundan ka ng sinuman upang tingnan ang iyong mga post na para sa mga tagasunod lamang.", + "compose_form.lock_disclaimer.lock": "nakakandado", "compose_form.placeholder": "Anong nangyari?", "compose_form.poll.duration": "Tagal ng botohan", "compose_form.poll.multiple": "Maraming pagpipilian", @@ -123,6 +131,7 @@ "confirmations.edit.confirm": "Baguhin", "confirmations.reply.confirm": "Tumugon", "conversation.mark_as_read": "Markahan bilang nabasa na", + "conversation.open": "Tingnan ang pag-uusap", "copy_icon_button.copied": "Sinipi sa clipboard", "copypaste.copied": "Sinipi", "copypaste.copy_to_clipboard": "I-sipi sa clipboard", @@ -176,6 +185,7 @@ "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito.", + "errors.unexpected_crash.report_issue": "Iulat ang isyu", "explore.search_results": "Mga resulta ng paghahanap", "explore.suggested_follows": "Mga tao", "explore.title": "Tuklasin", @@ -187,6 +197,7 @@ "follow_request.authorize": "Tanggapin", "follow_request.reject": "Tanggihan", "follow_suggestions.dismiss": "Huwag nang ipakita muli", + "follow_suggestions.popular_suggestion": "Sikat na mungkahi", "follow_suggestions.popular_suggestion_longer": "Sikat sa {domain}", "follow_suggestions.view_all": "Tingnan lahat", "follow_suggestions.who_to_follow": "Sinong maaaring sundan", @@ -196,6 +207,7 @@ "generic.saved": "Nakaimbak", "hashtag.column_header.tag_mode.all": "at {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_settings.select.no_options_message": "Walang mungkahing nakita", "hashtag.column_settings.tag_mode.all": "Lahat ng nandito", "hashtag.column_settings.tag_mode.any": "Ilan dito", "hashtag.column_settings.tag_mode.none": "Wala dito", @@ -223,11 +235,14 @@ "lists.account.add": "Idagdag sa talaan", "lists.account.remove": "Tanggalin mula sa talaan", "lists.delete": "Burahin ang listahan", + "lists.edit.submit": "Baguhin ang pamagat", "lists.new.create": "Idagdag sa talaan", "lists.new.title_placeholder": "Bagong pangalan ng talaan", + "lists.replies_policy.none": "Walang simuman", "lists.replies_policy.title": "Ipakita ang mga tugon sa:", "lists.subheading": "Iyong mga talaan", "loading_indicator.label": "Kumakarga…", + "media_gallery.hide": "Itago", "mute_modal.hide_from_notifications": "Itago mula sa mga abiso", "navigation_bar.about": "Tungkol dito", "navigation_bar.blocks": "Nakaharang na mga tagagamit", @@ -243,11 +258,15 @@ "notification.admin.report": "Iniulat ni {name} si {target}", "notification.follow": "Sinundan ka ni {name}", "notification.follow_request": "Hinihiling ni {name} na sundan ka", + "notification.label.private_mention": "Palihim na banggit", + "notification.mentioned_you": "Binanggit ka ni {name}", + "notification.moderation-warning.learn_more": "Matuto nang higit pa", "notification.moderation_warning": "Mayroong kang natanggap na babala sa pagtitimpi", "notification.relationships_severance_event.learn_more": "Matuto nang higit pa", "notification_requests.accept": "Tanggapin", "notification_requests.notifications_from": "Mga abiso mula kay/sa {name}", "notifications.clear": "Burahin mga abiso", + "notifications.clear_title": "Linisin ang mga abiso?", "notifications.column_settings.admin.report": "Mga bagong ulat:", "notifications.column_settings.alert": "Mga abiso sa Desktop", "notifications.column_settings.favourite": "Mga paborito:", @@ -259,6 +278,8 @@ "notifications.filter.favourites": "Mga paborito", "notifications.filter.polls": "Resulta ng botohan", "notifications.mark_as_read": "Markahan lahat ng abiso bilang nabasa na", + "notifications.policy.accept": "Tanggapin", + "notifications.policy.accept_hint": "Ipakita sa mga abiso", "notifications.policy.filter_not_followers_title": "Mga taong hindi ka susundan", "notifications.policy.filter_not_following_title": "Mga taong hindi mo sinusundan", "onboarding.action.back": "Ibalik mo ako", @@ -275,6 +296,10 @@ "privacy.private.long": "Mga tagasunod mo lamang", "privacy.private.short": "Mga tagasunod", "privacy.public.long": "Sinumang nasa loob at labas ng Mastodon", + "privacy.public.short": "Pampubliko", + "privacy.unlisted.short": "Hindi nakalista", + "privacy_policy.last_updated": "Huling nabago noong {date}", + "recommended": "Inirekomenda", "regeneration_indicator.label": "Kumakarga…", "relative_time.days": "{number}a", "relative_time.full.days": "{number, plural, one {# araw} other {# na araw}} ang nakalipas", @@ -286,6 +311,7 @@ "relative_time.just_now": "ngayon", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", + "relative_time.today": "ngayon", "reply_indicator.cancel": "Ipagpaliban", "report.block": "Harangan", "report.categories.other": "Iba pa", @@ -293,9 +319,11 @@ "report.category.subtitle": "Piliin ang pinakamahusay na tugma", "report.category.title": "Sabihin mo sa amin kung anong nangyari sa {type} na ito", "report.close": "Tapos na", + "report.comment.title": "Mayroon pa bang dapat naming malaman?", "report.next": "Sunod", "report.placeholder": "Mga Karagdagang Puna", "report.reasons.dislike": "Hindi ko gusto ito", + "report.reasons.legal": "Labag ito sa batas", "report.reasons.violation": "Lumalabag ito sa mga panuntunan ng serbiro", "report.reasons.violation_description": "Alam mo na lumalabag ito sa mga partikular na panuntunan", "report.rules.title": "Aling mga patakaran ang nilabag?", @@ -342,5 +370,8 @@ "time_remaining.days": "{number, plural, one {# araw} other {# na araw}} ang natitira", "time_remaining.hours": "{number, plural, one {# oras} other {# na oras}} ang natitira", "time_remaining.minutes": "{number, plural, one {# minuto} other {# na minuto}} ang natitira", - "time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira" + "time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira", + "upload_modal.apply": "Ilapat", + "upload_modal.applying": "Nilalapat…", + "upload_modal.choose_image": "Pumili ng larawan" } diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 3349be4fad1612..f5ab605e3a4435 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Répondre en privé", "notification.label.reply": "Réponse", "notification.mention": "Mention", + "notification.mentioned_you": "{name} vous a mentionné·e", "notification.moderation-warning.learn_more": "En savoir plus", "notification.moderation_warning": "Vous avez reçu un avertissement de modération", "notification.moderation_warning.action_delete_statuses": "Certains de vos messages ont été supprimés.", @@ -542,12 +543,12 @@ "notification_requests.confirm_accept_multiple.message": "Vous êtes sur le point d'accepter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Êtes-vous sûr de vouloir continuer ?", "notification_requests.confirm_accept_multiple.title": "Accepter les requêtes de notification ?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorer la requête} other {Ignorer les requêtes}}", - "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne serez plus en mesure d’{count, plural, one {y} other {y}} accéder facilement, ultérieurement. Êtes-vous sûr de vouloir continuer ?", + "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne pourrez plus {count, plural, one {y} other {y}} accéder facilement plus tard. Voulez-vous vraiment continuer ?", "notification_requests.confirm_dismiss_multiple.title": "Rejeter les requêtes de notification ?", "notification_requests.dismiss": "Rejeter", "notification_requests.dismiss_multiple": "{count, plural, one {Rejeter # requête …} other {Rejeter # requêtes …}}", "notification_requests.edit_selection": "Modifier", - "notification_requests.exit_selection": "Fait", + "notification_requests.exit_selection": "Terminé", "notification_requests.explainer_for_limited_account": "Les notifications en provenance de ce compte ont été filtrées car le compte a été limité par un modérateur.", "notification_requests.explainer_for_limited_remote_account": "Les notifications en provenance de ce compte ont été filtrées car le compte ou le serveur dont il est issu a été limité par un modérateur.", "notification_requests.maximize": "Agrandir", @@ -853,6 +854,7 @@ "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyants", "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", + "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5c4e582a87da4c..1c773d0e39961e 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Répondre en privé", "notification.label.reply": "Réponse", "notification.mention": "Mention", + "notification.mentioned_you": "{name} vous a mentionné·e", "notification.moderation-warning.learn_more": "En savoir plus", "notification.moderation_warning": "Vous avez reçu un avertissement de modération", "notification.moderation_warning.action_delete_statuses": "Certains de vos messages ont été supprimés.", @@ -542,12 +543,12 @@ "notification_requests.confirm_accept_multiple.message": "Vous êtes sur le point d'accepter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Êtes-vous sûr de vouloir continuer ?", "notification_requests.confirm_accept_multiple.title": "Accepter les requêtes de notification ?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorer la requête} other {Ignorer les requêtes}}", - "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne serez plus en mesure d’{count, plural, one {y} other {y}} accéder facilement, ultérieurement. Êtes-vous sûr de vouloir continuer ?", + "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne pourrez plus {count, plural, one {y} other {y}} accéder facilement plus tard. Voulez-vous vraiment continuer ?", "notification_requests.confirm_dismiss_multiple.title": "Rejeter les requêtes de notification ?", "notification_requests.dismiss": "Rejeter", "notification_requests.dismiss_multiple": "{count, plural, one {Rejeter # requête …} other {Rejeter # requêtes …}}", "notification_requests.edit_selection": "Modifier", - "notification_requests.exit_selection": "Fait", + "notification_requests.exit_selection": "Terminé", "notification_requests.explainer_for_limited_account": "Les notifications en provenance de ce compte ont été filtrées car le compte a été limité par un modérateur.", "notification_requests.explainer_for_limited_remote_account": "Les notifications en provenance de ce compte ont été filtrées car le compte ou le serveur dont il est issu a été limité par un modérateur.", "notification_requests.maximize": "Agrandir", @@ -853,6 +854,7 @@ "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", + "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 84c76478d1b6c6..61b42e60f26f3d 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Freagra príobháideach", "notification.label.reply": "Freagra", "notification.mention": "Luaigh", + "notification.mentioned_you": "Luaigh {name} tú", "notification.moderation-warning.learn_more": "Foghlaim níos mó", "notification.moderation_warning": "Tá rabhadh modhnóireachta faighte agat", "notification.moderation_warning.action_delete_statuses": "Baineadh cuid de do phostálacha.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index f6d3f172ca1399..52dc7b2998ee3e 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -516,6 +516,7 @@ "notification.label.private_reply": "Freagairt phrìobhaideach", "notification.label.reply": "Freagairt", "notification.mention": "Iomradh", + "notification.mentioned_you": "Thug {name} iomradh ort", "notification.moderation-warning.learn_more": "Barrachd fiosrachaidh", "notification.moderation_warning": "Fhuair thu rabhadh on mhaorsainneachd", "notification.moderation_warning.action_delete_statuses": "Chaidh cuid dhe na postaichean agad a thoirt air falbh.", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 35482297f03b07..f5598247385c9a 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Excesso de requestas", "alert.unexpected.message": "Un error inexpectate ha occurrite.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Texto alt", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non processate)", "audio.hide": "Celar audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.", "domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.", "domain_block_modal.title": "Blocar dominio?", + "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequace} other {{followersCountDisplay} sequaces}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.", + "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequaces e le personas que tu seque ab iste servitor.", "domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.", "domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.", "domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.", @@ -303,6 +306,7 @@ "filter_modal.select_filter.title": "Filtrar iste message", "filter_modal.title.status": "Filtrar un message", "filter_warning.matches_filter": "Corresponde al filtro “{title}”", + "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nemo} one {un persona} other {# personas}} que tu pote cognoscer", "filtered_notifications_banner.title": "Notificationes filtrate", "firehose.all": "Toto", "firehose.local": "Iste servitor", @@ -351,6 +355,9 @@ "hashtag.follow": "Sequer hashtag", "hashtag.unfollow": "Non sequer plus le hashtag", "hashtags.and_other": "…e {count, plural, one {}other {# plus}}", + "hints.profiles.followers_may_be_missing": "Le sequaces pro iste profilo pote mancar.", + "hints.profiles.follows_may_be_missing": "Sequites pro iste profilo pote mancar.", + "hints.profiles.posts_may_be_missing": "Alcun messages ab iste profilo pote mancar.", "hints.profiles.see_more_followers": "Vider plus de sequitores sur {domain}", "hints.profiles.see_more_follows": "Vider plus de sequites sur {domain}", "hints.profiles.see_more_posts": "Vider plus de messages sur {domain}", @@ -363,6 +370,11 @@ "home.pending_critical_update.link": "Vider actualisationes", "home.pending_critical_update.title": "Actualisation de securitate critic disponibile!", "home.show_announcements": "Monstrar annuncios", + "ignore_notifications_modal.disclaimer": "Mastodon non pote informar le usatores que tu ha ignorate lor avisos. Ignorar avisos non stoppara le messages mesme de esser inviate.", + "ignore_notifications_modal.filter_instead": "Filtrar in vice", + "ignore_notifications_modal.filter_to_act_users": "Tu ancora potera acceptar, rejectar, o reportar usatores", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta evitar confusion potential", + "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider avisos filtrate separatemente", "ignore_notifications_modal.ignore": "Ignorar le notificationes", "ignore_notifications_modal.limited_accounts_title": "Ignorar le notificationes de contos moderate?", "ignore_notifications_modal.new_accounts_title": "Ignorar le notificationes de nove contos?", @@ -424,6 +436,8 @@ "lightbox.close": "Clauder", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", + "lightbox.zoom_in": "Aggrandir a dimension actual", + "lightbox.zoom_out": "Aggrandir pro adaptar", "limited_account_hint.action": "Monstrar profilo in omne caso", "limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.", "link_preview.author": "Per {name}", @@ -490,14 +504,19 @@ "notification.admin.report_statuses": "{name} ha reportate {target} pro {category}", "notification.admin.report_statuses_other": "{name} ha reportate {target}", "notification.admin.sign_up": "{name} se ha inscribite", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere usator} other {altere # usatores}} se inscribeva", "notification.favourite": "{name} ha marcate tu message como favorite", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} favoriva tu message", "notification.follow": "{name} te ha sequite", + "notification.follow.name_and_others": "{name} e {count, plural, one {# altere} other {# alteres}} te sequeva", "notification.follow_request": "{name} ha requestate de sequer te", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altere} other {# alteres}} ha demandate de sequer te", "notification.label.mention": "Mention", "notification.label.private_mention": "Mention private", "notification.label.private_reply": "Responsa private", "notification.label.reply": "Responder", "notification.mention": "Mention", + "notification.mentioned_you": "{name} te mentionava", "notification.moderation-warning.learn_more": "Apprender plus", "notification.moderation_warning": "Tu ha recipite un advertimento de moderation", "notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.", @@ -510,6 +529,7 @@ "notification.own_poll": "Tu sondage ha finite", "notification.poll": "Un sondage in le qual tu ha votate ha finite", "notification.reblog": "{name} ha impulsate tu message", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} promoveva tu message", "notification.relationships_severance_event": "Connexiones perdite con {name}", "notification.relationships_severance_event.account_suspension": "Un administrator de {from} ha suspendiute {target}. Isto significa que tu non pote plus reciper actualisationes de iste persona o interager con ille.", "notification.relationships_severance_event.domain_block": "Un administrator de {from} ha blocate {target}, includente {followersCount} de tu sequitores e {followingCount, plural, one {# conto} other {# contos}} que tu seque.", @@ -518,11 +538,21 @@ "notification.status": "{name} ha justo ora publicate", "notification.update": "{name} ha modificate un message", "notification_requests.accept": "Acceptar", + "notification_requests.accept_multiple": "{count, plural, one {Accepta # requesta…} other {Accepta # requestas…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accepta requesta} other {Accepta requestas}}", + "notification_requests.confirm_accept_multiple.message": "Tu acceptara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Desira tu vermente continuar?", "notification_requests.confirm_accept_multiple.title": "Acceptar petitiones de notification?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar requesta} other {Rejectar requestas}}", + "notification_requests.confirm_dismiss_multiple.message": "Tu rejectara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Tu non potera facilemente acceder {count, plural, one {lo} other {los}} ancora. Desira tu vermente continuar?", "notification_requests.confirm_dismiss_multiple.title": "Dimitter petitiones de notification?", "notification_requests.dismiss": "Clauder", + "notification_requests.dismiss_multiple": "{count, plural, one {Rejectar # requesta…} other {Rejectar # requestas…}}", "notification_requests.edit_selection": "Modificar", "notification_requests.exit_selection": "Facite", + "notification_requests.explainer_for_limited_account": "Le avisos ab iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.", + "notification_requests.explainer_for_limited_remote_account": "Le avisos ab iste conto ha essite filtrate perque le conto o su servitor ha essite limitate per un moderator.", + "notification_requests.maximize": "Maximisar", + "notification_requests.minimize_banner": "Minimisar le bandiera del avisos filtrate", "notification_requests.notifications_from": "Notificationes de {name}", "notification_requests.title": "Notificationes filtrate", "notification_requests.view": "Vider notificationes", @@ -562,8 +592,11 @@ "notifications.permission_required": "Le notificationes de scriptorio es indisponibile perque le permission necessari non ha essite concedite.", "notifications.policy.accept": "Acceptar", "notifications.policy.accept_hint": "Monstrar in le notificationes", + "notifications.policy.drop": "Ignorar", + "notifications.policy.drop_hint": "Inviar al nihil, pro jammais esser vidite ancora", "notifications.policy.filter": "Filtrar", "notifications.policy.filter_hint": "Inviar al cassa de notificationes filtrate", + "notifications.policy.filter_limited_accounts_hint": "Limitate per moderatores de servitor", "notifications.policy.filter_limited_accounts_title": "Contos moderate", "notifications.policy.filter_new_accounts.hint": "Create in le ultime {days, plural, one {die} other {# dies}}", "notifications.policy.filter_new_accounts_title": "Nove contos", @@ -700,6 +733,7 @@ "report.unfollow_explanation": "Tu seque iste conto. Pro non plus vider su messages in tu fluxo de initio, cessa de sequer lo.", "report_notification.attached_statuses": "{count, plural, one {{count} message} other {{count} messages}} annexate", "report_notification.categories.legal": "Juridic", + "report_notification.categories.legal_sentence": "contento illegal", "report_notification.categories.other": "Alteres", "report_notification.categories.other_sentence": "alteres", "report_notification.categories.spam": "Spam", @@ -747,6 +781,7 @@ "status.bookmark": "Adder al marcapaginas", "status.cancel_reblog_private": "Disfacer impulso", "status.cannot_reblog": "Iste message non pote esser impulsate", + "status.continued_thread": "Argumento continuitate", "status.copy": "Copiar ligamine a message", "status.delete": "Deler", "status.detailed_status": "Vista detaliate del conversation", @@ -755,6 +790,7 @@ "status.edit": "Modificar", "status.edited": "Ultime modification le {date}", "status.edited_x_times": "Modificate {count, plural, one {{count} vice} other {{count} vices}}", + "status.embed": "Obtener codice incorporate", "status.favourite": "Adder al favorites", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filtrar iste message", @@ -817,6 +853,11 @@ "upload_error.poll": "Incargamento de files non permittite con sondages.", "upload_form.audio_description": "Describe lo pro le gente con difficultates auditive", "upload_form.description": "Describe lo pro le gente con difficultates visual", + "upload_form.drag_and_drop.instructions": "Pro colliger un annexo de medios, pressar Spatio o Inviar. Trahente lo, usar le claves flecha pro mover le annexo de medios in ulle direction date. De novo pressar Spatio o Inviar pro deponer le annexo de medios in su nove position, o pressar Escappar pro cancellar.", + "upload_form.drag_and_drop.on_drag_cancel": "Le extraction era cancellate. Le annexo de medios {item} era deponite.", + "upload_form.drag_and_drop.on_drag_end": "Le annexo de medios {item} era deponite.", + "upload_form.drag_and_drop.on_drag_over": "Le annexo de medios {item} era movite.", + "upload_form.drag_and_drop.on_drag_start": "Annexo de medios {item} colligite.", "upload_form.edit": "Modificar", "upload_form.thumbnail": "Cambiar le miniatura", "upload_form.video_description": "Describe lo pro le gente con difficultates auditive o visual", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index bbd3a7a358ebd8..19d17eaf45b515 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -222,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Enginn frá þessum netþjóni getur fylgst með þér.", "domain_block_modal.they_wont_know": "Viðkomandi mun ekki vita að hann hafi verið útilokaður.", "domain_block_modal.title": "Útiloka lén?", + "domain_block_modal.you_will_lose_num_followers": "Þú munt missa {followersCount, plural, one {{followersCountDisplay} fylgjanda} other {{followersCountDisplay} fylgjendur}} og {followingCount, plural, one {{followingCountDisplay} aðila sem þú fylgist með} other {{followingCountDisplay} aðila sem þú fylgist með}}.", + "domain_block_modal.you_will_lose_relationships": "Þú munt missa alla fylgjendur og þá sem þú fylgist með á þessum netþjóni.", "domain_block_modal.you_wont_see_posts": "Þú munt ekki sjá neinar færslur eða tilkynningar frá notendum á þessum netþjóni.", "domain_pill.activitypub_lets_connect": "Það gerir þér kleift að tengjast og eiga í samskiptum við fólk, ekki bara á Mastodon, heldur einnig á mörgum öðrum mismunandi samfélagsmiðlum.", "domain_pill.activitypub_like_language": "ActivityPub er eins og tungumál sem Mastodon notar til að tala við önnur samfélagsnet.", @@ -851,6 +853,11 @@ "upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.", "upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta", "upload_form.description": "Lýstu þessu fyrir sjónskerta", + "upload_form.drag_and_drop.instructions": "Til að taka í myndefnisviðhengi skaltu ýta á bilslána eða Enter. Til að draga geturðu notað örvalyklana til að færa viðhengið í samsvarandi áttir. Ýttu aftur á bilslána eða Enter til að sleppa viðhenginu á nýja staðinn, eða ýttu á Escape til að hætta við.", + "upload_form.drag_and_drop.on_drag_cancel": "Hætt var við að draga. Myndefnisviðhenginu {item} var sleppt.", + "upload_form.drag_and_drop.on_drag_end": "Myndefnisviðhenginu {item} var sleppt.", + "upload_form.drag_and_drop.on_drag_over": "Myndefnisviðhengið {item} var fært.", + "upload_form.drag_and_drop.on_drag_start": "Tók í myndefnisviðhengið {item}.", "upload_form.edit": "Breyta", "upload_form.thumbnail": "Skipta um smámynd", "upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 1810314c8415c1..edab7abef9d837 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -222,6 +222,8 @@ "domain_block_modal.they_cant_follow": "このサーバーのユーザーはあなたをフォローできなくなります。", "domain_block_modal.they_wont_know": "ドメインブロックは相手からはわかりません。", "domain_block_modal.title": "ドメインをブロックしますか?", + "domain_block_modal.you_will_lose_num_followers": "「{followingCount, plural, other {{followingCountDisplay}フォロー}}」、「{followersCount, plural, other {{followersCountDisplay}フォロワー}}」を失うことになります。", + "domain_block_modal.you_will_lose_relationships": "このサーバーにいるすべてのフォローとフォロワーを失うことになります。", "domain_block_modal.you_wont_see_posts": "このサーバーのユーザーからの投稿や通知が閲覧できなくなります。", "domain_pill.activitypub_lets_connect": "Mastodonからほかのソーシャルアプリのユーザーへ、そのまた別のアプリのユーザーへと、それぞれが互いにつながり関わり合うことをこのActivityPubの仕組みが実現しています。", "domain_pill.activitypub_like_language": "ActivityPubとは、Mastodonがほかのサーバーと会話をするときにしゃべる「言葉」のようなものです。", @@ -779,6 +781,7 @@ "status.bookmark": "ブックマーク", "status.cancel_reblog_private": "ブースト解除", "status.cannot_reblog": "この投稿はブーストできません", + "status.continued_thread": "つり下げ投稿", "status.copy": "投稿へのリンクをコピー", "status.delete": "削除", "status.detailed_status": "詳細な会話ビュー", @@ -812,6 +815,7 @@ "status.reblogs.empty": "まだ誰もブーストしていません。ブーストされるとここに表示されます。", "status.redraft": "削除して下書きに戻す", "status.remove_bookmark": "ブックマークを削除", + "status.replied_in_thread": "ほかのユーザーへ", "status.replied_to": "{name}さんへの返信", "status.reply": "返信", "status.replyAll": "全員に返信", @@ -849,6 +853,11 @@ "upload_error.poll": "アンケートではファイルをアップロードできません。", "upload_form.audio_description": "聴き取りが難しいユーザーへの説明", "upload_form.description": "視覚的に閲覧が難しいユーザーへの説明", + "upload_form.drag_and_drop.instructions": "メディア添付ファイルを選択するには、スペースキーまたはエンターキーを押してください。ドラッグ中は、矢印キーを使ってメディア添付ファイルを任意の方向に移動できます。再度スペースキーまたはエンターキーを押すと新しい位置にメディア添付ファイルをドロップできます。キャンセルするにはエスケープキーを押してください。", + "upload_form.drag_and_drop.on_drag_cancel": "ドラッグがキャンセルされました。メディア添付ファイル {item} がドロップされました。", + "upload_form.drag_and_drop.on_drag_end": "メディア添付ファイル {item} がドロップされました。", + "upload_form.drag_and_drop.on_drag_over": "メディア添付ファイル {item} が移動されました。", + "upload_form.drag_and_drop.on_drag_start": "メディア添付ファイル {item} を選択しました。", "upload_form.edit": "編集", "upload_form.thumbnail": "サムネイルを変更", "upload_form.video_description": "聴き取りや視覚的に閲覧が難しいユーザーへの説明", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index edcbadd12d7a88..04e099d8bc26be 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -499,7 +499,7 @@ "navigation_bar.security": "보안", "not_signed_in_indicator.not_signed_in": "이 정보에 접근하려면 로그인을 해야 합니다.", "notification.admin.report": "{name} 님이 {target}를 신고했습니다", - "notification.admin.report_account": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 {category}로 신고했습니다", + "notification.admin.report_account": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 {category} 사유로 신고했습니다", "notification.admin.report_account_other": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 신고했습니다", "notification.admin.report_statuses": "{name} 님이 {target}을 {category}로 신고했습니다", "notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index c5026fa33b7738..e5ff3cead05507 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -342,6 +342,7 @@ "home.pending_critical_update.title": "Aktualizasyon de seguridad kritika esta desponivle!", "home.show_announcements": "Amostra pregones", "ignore_notifications_modal.ignore": "Inyora avizos", + "ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?", "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", "interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.", @@ -465,6 +466,7 @@ "notification.label.private_mention": "Enmentadura privada", "notification.label.reply": "Arisponde", "notification.mention": "Enmenta", + "notification.mentioned_you": "{name} te enmento", "notification.moderation-warning.learn_more": "Ambezate mas", "notification.moderation_warning.action_disable": "Tu kuento tiene sido inkapasitado.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Algunas de tus publikasyones tienen sido markadas komo sensivles.", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 5ed6f219db5ae0..35dc70cc98ac4a 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -5,19 +5,24 @@ "about.domain_blocks.silenced.title": "പരിമിതമായത്", "about.domain_blocks.suspended.title": "താൽക്കാലികമായി നിർത്തിവെച്ചിരിക്കുന്നു", "about.rules": "സെർവ്വർ നിയമങ്ങൾ", + "account.account_note_header": "സ്വകാര്യ കുറിപ്പു്", "account.add_or_remove_from_list": "പട്ടികയിൽ ചേർക്കുകയോ/മാറ്റുകയോ ചെയ്യുക", "account.badges.bot": "റോബോട്ട്", "account.badges.group": "ഗ്രൂപ്പ്", "account.block": "@{name} -നെ തടയുക", "account.block_domain": "{domain} എന്ന മേഖല തടയുക", + "account.block_short": "തടസ്സപെടുത്തുക", "account.blocked": "തടഞ്ഞു", "account.cancel_follow_request": "Withdraw follow request", + "account.copy": "രൂപരേഖയിന്റെ വിലാസം പകർത്തുക", "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക", "account.domain_blocked": "മേഖല തടഞ്ഞു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", "account.enable_notifications": "@{name} പോസ്റ്റ് ചെയ്യുമ്പോൾ എന്നെ അറിയിക്കുക", "account.endorse": "പ്രൊഫൈലിൽ പ്രകടമാക്കുക", + "account.featured_tags.last_status_never": "എഴുത്തുകളില്ല", "account.follow": "പിന്തുടരുക", + "account.follow_back": "തിരിച്ചു പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.following": "പിന്തുടരുന്നു", @@ -52,10 +57,16 @@ "alert.rate_limited.title": "തോത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു", "alert.unexpected.message": "അപ്രതീക്ഷിതമായി എന്തോ സംഭവിച്ചു.", "alert.unexpected.title": "ശ്ശോ!", + "alt_text_badge.title": "പകരമായ വരി", "announcement.announcement": "അറിയിപ്പ്", "attachments_list.unprocessed": "(പ്രോസസ്സ് ചെയ്യാത്തത്)", "audio.hide": "ശബ്ദം ഒഴിവാക്കുക", + "block_modal.show_less": "കുറച്ചു് കാണിക്കുക", + "block_modal.show_more": "ഇനിയും കാണിക്കുക", + "block_modal.title": "ഉപയോക്താവിനു് തടസ്സപെടുത്തുക?", "boost_modal.combo": "അടുത്ത തവണ ഇത് ഒഴിവാക്കുവാൻ {combo} ഞെക്കാവുന്നതാണ്", + "bundle_column_error.copy_stacktrace": "പിഴരേഖ പകർത്തുക", + "bundle_column_error.error.title": "അയ്യോ!", "bundle_column_error.network.title": "നെറ്റ്‍വർക്ക് പിശക്", "bundle_column_error.retry": "വീണ്ടും ശ്രമിക്കുക", "bundle_column_error.return": "ഹോം പേജിലേക്ക് മടങ്ങാം", @@ -73,7 +84,7 @@ "column.directory": "പ്രൊഫൈലുകൾ മറിച്ചുനോക്കുക", "column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ", "column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", - "column.home": "ഹോം", + "column.home": "ആമുഖം", "column.lists": "പട്ടികകൾ", "column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "column.notifications": "അറിയിപ്പുകൾ", @@ -99,7 +110,9 @@ "compose_form.poll.duration": "തിരഞ്ഞെടുപ്പിന്റെ സമയദൈർഖ്യം", "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്‌സുകൾ ഉൾപ്പെടുതുക", "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്‌സ്‌ മാത്രം ആക്കുക", + "compose_form.publish": "അയക്കുക", "compose_form.publish_form": "Publish", + "compose_form.reply": "മറുപടി", "compose_form.spoiler.marked": "എഴുത്ത് മുന്നറിയിപ്പിനാൽ മറച്ചിരിക്കുന്നു", "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "confirmation_modal.cancel": "റദ്ദാക്കുക", @@ -108,6 +121,8 @@ "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "confirmations.delete_list.confirm": "മായ്ക്കുക", "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", + "confirmations.delete_list.title": "പട്ടിക കളയുണോ?", + "confirmations.discard_edit_media.confirm": "കളയുക", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", "confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?", "confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക", @@ -128,6 +143,7 @@ "disabled_account_banner.text": "നിങ്ങളുടെ {disabledAccount} എന്ന അക്കൗണ്ട് ഇപ്പോൾ പ്രവർത്തനരഹിതമാണ്.", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "domain_pill.username": "ഉപയോക്തൃപേരു്", "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.", "embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:", "emoji_button.activity": "പ്രവര്‍ത്തനം", @@ -158,10 +174,15 @@ "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", + "explore.suggested_follows": "ആൾക്കാർ", "explore.title": "പര്യവേക്ഷണം നടത്തുക", + "explore.trending_links": "വാര്‍ത്ത", "filter_modal.select_filter.prompt_new": "പുതിയ വിഭാഗം: {name}", + "firehose.all": "എല്ലാം", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", "follow_request.reject": "നിരസിക്കുക", + "follow_suggestions.dismiss": "വീണ്ടും കാണിക്കരുതു്", + "follow_suggestions.view_all": "എല്ലാം കാണുക", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.heading": "തുടക്കം കുറിക്കുക", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", @@ -177,6 +198,7 @@ "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", + "interaction_modal.login.action": "ആമുഖം വരെ എടുത്തോണ്ടു് പോവുക", "interaction_modal.on_this_server": "ഈ സെർവറീൽ", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", @@ -327,7 +349,7 @@ "status.share": "പങ്കിടുക", "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", - "tabs_bar.home": "ഹോം", + "tabs_bar.home": "ആമുഖം", "tabs_bar.notifications": "അറിയിപ്പുകൾ", "time_remaining.days": "{number, plural, one {# ദിവസം} other {# ദിവസങ്ങൾ}} ബാക്കി", "time_remaining.hours": "{number, plural, one {# മണിക്കൂർ} other {# മണിക്കൂർ}} ശേഷിക്കുന്നു", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index cbd57ab356994d..749461d1a86ddc 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -36,6 +36,7 @@ "account.followers.empty": "Belum ada yang mengikuti pengguna ini.", "account.followers_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}", "account.following": "Mengikuti", + "account.following_counter": "{count, plural, other {{counter} following}}", "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", "account.go_to_profile": "Pergi ke profil", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", @@ -61,6 +62,7 @@ "account.requested_follow": "{name} has requested to follow you", "account.share": "Kongsi profil @{name}", "account.show_reblogs": "Tunjukkan galakan daripada @{name}", + "account.statuses_counter": "{count, plural, other {{counter} siaran}}", "account.unblock": "Nyahsekat @{name}", "account.unblock_domain": "Nyahsekat domain {domain}", "account.unblock_short": "Nyahsekat", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index c0ca8f17665f82..9ad646b82ce9fe 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -459,7 +459,7 @@ "lists.subheading": "Jouw lijsten", "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", "loading_indicator.label": "Laden…", - "media_gallery.hide": "Verbergen", + "media_gallery.hide": "Verberg", "moved_to_account_banner.text": "Omdat je naar {movedToAccount} bent verhuisd is jouw account {disabledAccount} momenteel uitgeschakeld.", "mute_modal.hide_from_notifications": "Onder meldingen verbergen", "mute_modal.hide_options": "Opties verbergen", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 9dbd123c9be92a..37687bc8444c9c 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -8,6 +8,7 @@ "about.not_available": "Aquesta informacion foguèt pas renduda disponibla sus aqueste servidor.", "about.powered_by": "Malhum social descentralizat propulsat per {mastodon}", "about.rules": "Règlas del servidor", + "account.account_note_header": "Nòta personala", "account.add_or_remove_from_list": "Ajustar o tirar de las listas", "account.badges.bot": "Robòt", "account.badges.group": "Grop", @@ -72,9 +73,12 @@ "alert.rate_limited.title": "Taus limitat", "alert.unexpected.message": "Una error s’es producha.", "alert.unexpected.title": "Ops !", + "alt_text_badge.title": "Tèxt alternatiu", "announcement.announcement": "Anóncia", "attachments_list.unprocessed": "(pas tractat)", "audio.hide": "Amagar àudio", + "block_modal.show_less": "Ne veire mens", + "block_modal.show_more": "Ne veire mai", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "bundle_column_error.copy_stacktrace": "Copiar senhalament d’avaria", "bundle_column_error.error.title": "Oh non !", @@ -128,9 +132,14 @@ "compose_form.poll.duration": "Durada del sondatge", "compose_form.poll.switch_to_multiple": "Cambiar lo sondatge per permetre de causidas multiplas", "compose_form.poll.switch_to_single": "Cambiar lo sondatge per permetre una sola causida", + "compose_form.poll.type": "Estil", + "compose_form.publish": "Publicar", "compose_form.publish_form": "Publicar", + "compose_form.reply": "Respondre", + "compose_form.save_changes": "Actualizar", "compose_form.spoiler.marked": "Lo tèxte es rescondut jos l’avertiment", "compose_form.spoiler.unmarked": "Lo tèxte es pas rescondut", + "compose_form.spoiler_placeholder": "Avertiment de contengut (opcional)", "confirmation_modal.cancel": "Anullar", "confirmations.block.confirm": "Blocar", "confirmations.delete.confirm": "Escafar", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 9bd2ed5b4e7be7..de1f4e08853177 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -84,6 +84,7 @@ "alert.rate_limited.title": "Ограничение количества запросов", "alert.unexpected.message": "Произошла непредвиденная ошибка.", "alert.unexpected.title": "Упс!", + "alt_text_badge.title": "Альтернативный текст", "announcement.announcement": "Объявление", "attachments_list.unprocessed": "(не обработан)", "audio.hide": "Скрыть аудио", @@ -220,6 +221,7 @@ "domain_block_modal.they_cant_follow": "Никто из этого сервера не может подписываться на вас.", "domain_block_modal.they_wont_know": "Он не будет знать, что его заблокировали.", "domain_block_modal.title": "Заблокировать домен?", + "domain_block_modal.you_will_lose_relationships": "Вы потеряете всех подписчиков и людей, на которых вы подписаны, на этом сервере.", "domain_block_modal.you_wont_see_posts": "Вы не будете видеть записи или уведомления от пользователей на этом сервере.", "domain_pill.activitypub_lets_connect": "Это позволяет вам общаться и взаимодействовать с людьми не только на Mastodon, но и в различных социальных приложениях.", "domain_pill.activitypub_like_language": "ActivityPub как язык Mastodon говорит с другими социальными сетями.", @@ -432,6 +434,8 @@ "lightbox.close": "Закрыть", "lightbox.next": "Далее", "lightbox.previous": "Назад", + "lightbox.zoom_in": "Масштаб до фактического размера", + "lightbox.zoom_out": "Масштаб по размеру экрана", "limited_account_hint.action": "Все равно показать профиль", "limited_account_hint.title": "Этот профиль был скрыт модераторами {domain}.", "link_preview.author": "Автор: {name}", @@ -502,6 +506,7 @@ "notification.favourite": "{name} добавил(а) ваш пост в избранное", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", "notification.follow": "{name} подписался (-лась) на вас", + "notification.follow.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", "notification.follow_request.name_and_others": "{name} и {count, plural, one {# другие} other {# другие}} последовали за тобой", "notification.label.mention": "Упоминание", @@ -509,6 +514,7 @@ "notification.label.private_reply": "Частный ответ", "notification.label.reply": "Ответить", "notification.mention": "Упоминание", + "notification.mentioned_you": "{name} упомянул(а) вас", "notification.moderation-warning.learn_more": "Узнать больше", "notification.moderation_warning": "Вы получили предупреждение от модерации", "notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.", @@ -725,6 +731,7 @@ "report_notification.categories.spam": "Спам", "report_notification.categories.spam_sentence": "спам", "report_notification.categories.violation": "Нарушение правил", + "report_notification.categories.violation_sentence": "нарушение правила", "report_notification.open": "Открыть жалобу", "search.no_recent_searches": "Недавние запросы отсутствуют", "search.placeholder": "Поиск", @@ -754,7 +761,7 @@ "server_banner.administered_by": "Управляется:", "server_banner.is_one_of_many": "{domain} - это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в fediverse.", "server_banner.server_stats": "Статистика сервера:", - "sign_in_banner.create_account": "Создать учётную запись", + "sign_in_banner.create_account": "Зарегистрироваться", "sign_in_banner.follow_anyone": "Следите за любым человеком в федеральной вселенной и смотрите все в хронологическом порядке. Никаких алгоритмов, рекламы или клик бейта.", "sign_in_banner.mastodon_is": "Mastodon - лучший способ быть в курсе всего происходящего.", "sign_in_banner.sign_in": "Войти", @@ -836,6 +843,10 @@ "upload_error.poll": "К опросам нельзя прикреплять файлы.", "upload_form.audio_description": "Опишите аудиофайл для людей с нарушением слуха", "upload_form.description": "Добавьте описание для людей с нарушениями зрения:", + "upload_form.drag_and_drop.instructions": "Чтобы подобрать прикрепленный файл, нажмите \"Пробел\" (Space) или \"Ввод\" (Enter). При перетаскивании используйте клавиши со стрелками, чтобы переместить прикрепленные файлы в любом направлении. Нажмите \"Пробел\" (Space) или \"Ввод\" (Enter) еще раз, чтобы переместить вложение в новое место, или нажмите кнопку \"Выйти\" (Escape), чтобы отменить.", + "upload_form.drag_and_drop.on_drag_cancel": "Перетаскивание было отменено. Вложение медиа {item} было удалено.", + "upload_form.drag_and_drop.on_drag_end": "Медиа вложение {item} было удалено.", + "upload_form.drag_and_drop.on_drag_over": "Медиа вложение {item} было перемещено.", "upload_form.edit": "Изменить", "upload_form.thumbnail": "Изменить обложку", "upload_form.video_description": "Опишите видео для людей с нарушением слуха или зрения", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 298852100ca0d2..31ded957b56803 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", + "alt_text_badge.title": "Alt-Text", "announcement.announcement": "Meddelande", "attachments_list.unprocessed": "(obehandlad)", "audio.hide": "Dölj audio", @@ -97,6 +98,8 @@ "block_modal.title": "Blockera användare?", "block_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "boost_modal.combo": "Du kan trycka på {combo} för att hoppa över detta nästa gång", + "boost_modal.reblog": "Boosta inlägg?", + "boost_modal.undo_reblog": "Avboosta inlägg?", "bundle_column_error.copy_stacktrace": "Kopiera felrapport", "bundle_column_error.error.body": "Den begärda sidan kunde inte visas. Det kan bero på ett fel i vår kod eller ett problem med webbläsarens kompatibilitet.", "bundle_column_error.error.title": "Åh nej!", @@ -219,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.", "domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.", "domain_block_modal.title": "Blockera domän?", + "domain_block_modal.you_will_lose_num_followers": "Du kommer att förlora {followersCount, plural, other {{followersCountDisplay} följare}} och {followingCount, plural, one {{followingCountDisplay} person du följer} other {{followingCountDisplay} personer du följer}}.", + "domain_block_modal.you_will_lose_relationships": "Du kommer att förlora alla följare och personer du följer från denna server.", "domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.", "domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.", "domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.", @@ -300,6 +305,7 @@ "filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny", "filter_modal.select_filter.title": "Filtrera detta inlägg", "filter_modal.title.status": "Filtrera ett inlägg", + "filter_warning.matches_filter": "Matchar filtret \"{title}\"", "filtered_notifications_banner.pending_requests": "Från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner", "filtered_notifications_banner.title": "Filtrerade aviseringar", "firehose.all": "Allt", @@ -430,6 +436,8 @@ "lightbox.close": "Stäng", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", + "lightbox.zoom_in": "Zooma till faktisk storlek", + "lightbox.zoom_out": "Zooma för att passa", "limited_account_hint.action": "Visa profil ändå", "limited_account_hint.title": "Denna profil har dolts av {domain}s moderatorer.", "link_preview.author": "Av {name}", @@ -463,6 +471,7 @@ "mute_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "mute_modal.you_wont_see_posts": "De kan fortfarande se dina inlägg, men du kan inte se deras.", "navigation_bar.about": "Om", + "navigation_bar.administration": "Administration", "navigation_bar.advanced_interface": "Öppna i avancerat webbgränssnitt", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.bookmarks": "Bokmärken", @@ -479,6 +488,7 @@ "navigation_bar.follows_and_followers": "Följer och följare", "navigation_bar.lists": "Listor", "navigation_bar.logout": "Logga ut", + "navigation_bar.moderation": "Moderering", "navigation_bar.mutes": "Tystade användare", "navigation_bar.opened_in_classic_interface": "Inlägg, konton och andra specifika sidor öppnas som standard i det klassiska webbgränssnittet.", "navigation_bar.personal": "Personligt", @@ -771,6 +781,7 @@ "status.bookmark": "Bokmärk", "status.cancel_reblog_private": "Sluta boosta", "status.cannot_reblog": "Detta inlägg kan inte boostas", + "status.continued_thread": "Fortsatt tråd", "status.copy": "Kopiera inläggslänk", "status.delete": "Radera", "status.detailed_status": "Detaljerad samtalsvy", @@ -804,6 +815,7 @@ "status.reblogs.empty": "Ingen har boostat detta inlägg än. När någon gör det kommer de synas här.", "status.redraft": "Radera & gör om", "status.remove_bookmark": "Ta bort bokmärke", + "status.replied_in_thread": "Svarade i tråden", "status.replied_to": "Svarade på {name}", "status.reply": "Svara", "status.replyAll": "Svara på tråden", @@ -841,6 +853,11 @@ "upload_error.poll": "Filuppladdning tillåts inte med omröstningar.", "upload_form.audio_description": "Beskriv för personer med hörselnedsättning", "upload_form.description": "Beskriv för synskadade", + "upload_form.drag_and_drop.instructions": "För att plocka upp en mediebilaga, tryck på mellanslag eller enter. Använd piltangenterna för att flytta mediebilagan. Tryck på mellanslag eller enter igen för att släppa mediebilagan i sin nya position, eller tryck på escape för att avbryta.", + "upload_form.drag_and_drop.on_drag_cancel": "Flytten avbröts. Mediebilagan {item} släpptes.", + "upload_form.drag_and_drop.on_drag_end": "Mediebilagan {item} släpptes.", + "upload_form.drag_and_drop.on_drag_over": "Mediebilagan {item} flyttades.", + "upload_form.drag_and_drop.on_drag_start": "Mediebilagan {item} plockades upp.", "upload_form.edit": "Redigera", "upload_form.thumbnail": "Ändra miniatyr", "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 88c48bfb400758..ab93358f6f776a 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -222,6 +222,8 @@ "domain_block_modal.they_cant_follow": "ไม่มีใครจากเซิร์ฟเวอร์นี้สามารถติดตามคุณ", "domain_block_modal.they_wont_know": "เขาจะไม่ทราบว่ามีการปิดกั้นเขา", "domain_block_modal.title": "ปิดกั้นโดเมน?", + "domain_block_modal.you_will_lose_num_followers": "คุณจะสูญเสีย {followersCount, plural, other {{followersCountDisplay} ผู้ติดตาม}}และ {followingCount, plural, other {{followingCountDisplay} คนที่คุณติดตาม}}", + "domain_block_modal.you_will_lose_relationships": "คุณจะสูญเสียผู้ติดตามและผู้คนที่คุณติดตามทั้งหมดจากเซิร์ฟเวอร์นี้", "domain_block_modal.you_wont_see_posts": "คุณจะไม่เห็นโพสต์หรือการแจ้งเตือนจากผู้ใช้ในเซิร์ฟเวอร์นี้", "domain_pill.activitypub_lets_connect": "โปรโตคอลช่วยให้คุณเชื่อมต่อและโต้ตอบกับผู้คนไม่ใช่แค่ใน Mastodon แต่ทั่วทั้งแอปสังคมต่าง ๆ เช่นกัน", "domain_pill.activitypub_like_language": "ActivityPub เป็นเหมือนภาษาที่ Mastodon พูดกับเครือข่ายสังคมอื่น ๆ", @@ -434,6 +436,8 @@ "lightbox.close": "ปิด", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", + "lightbox.zoom_in": "ซูมเป็นขนาดจริง", + "lightbox.zoom_out": "ซูมให้พอดี", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", "limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้กลั่นกรองของ {domain}", "link_preview.author": "โดย {name}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index cf33a15d3236e3..9c886790b00177 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -441,7 +441,7 @@ "limited_account_hint.action": "Vẫn cứ xem", "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên {domain}.", "link_preview.author": "Bởi {name}", - "link_preview.more_from_author": "Thêm từ {name}", + "link_preview.more_from_author": "Viết bởi {name}", "link_preview.shares": "{count, plural, other {{counter} lượt chia sẻ}}", "lists.account.add": "Thêm vào danh sách", "lists.account.remove": "Xóa khỏi danh sách", @@ -527,7 +527,7 @@ "notification.moderation_warning.action_silence": "Tài khoản của bạn đã bị hạn chế.", "notification.moderation_warning.action_suspend": "Tài khoản của bạn đã bị vô hiệu hóa.", "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", - "notification.poll": "Cuộc bình chọn có bạn tham gia đã kết thúc", + "notification.poll": "Cuộc bình chọn mà bạn tham gia đã kết thúc", "notification.reblog": "{name} đăng lại tút của bạn", "notification.reblog.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã đăng lại tút của bạn", "notification.relationships_severance_event": "Mất kết nối với {name}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 74702e51276481..df237fa2396641 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -36,7 +36,7 @@ "account.followers.empty": "目前无人关注此用户。", "account.followers_counter": "{count, plural, other {{counter} 关注者}}", "account.following": "正在关注", - "account.following_counter": "{count, plural, other {{counter} 关注}}", + "account.following_counter": "正在关注 {count, plural, other {{counter} 人}}", "account.follows.empty": "此用户目前未关注任何人。", "account.go_to_profile": "前往个人资料页", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", @@ -59,7 +59,7 @@ "account.posts_with_replies": "嘟文和回复", "account.report": "举报 @{name}", "account.requested": "正在等待对方同意。点击取消发送关注请求", - "account.requested_follow": "{name} 已经向你发送了关注请求", + "account.requested_follow": "{name} 向你发送了关注请求", "account.share": "分享 @{name} 的个人资料页", "account.show_reblogs": "显示来自 @{name} 的转嘟", "account.statuses_counter": "{count, plural, other {{counter} 条嘟文}}", @@ -94,8 +94,8 @@ "block_modal.show_more": "显示更多", "block_modal.they_cant_mention": "他们不能提及或关注你。", "block_modal.they_cant_see_posts": "他们看不到你的嘟文,你也看不到他们的嘟文。", - "block_modal.they_will_know": "他们将能看到他们被屏蔽。", - "block_modal.title": "是否屏蔽该用户?", + "block_modal.they_will_know": "对方将能看到自己被屏蔽。", + "block_modal.title": "屏蔽该用户?", "block_modal.you_wont_see_mentions": "你将不会看到提及他们的嘟文。", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "boost_modal.reblog": "是否转嘟?", @@ -204,7 +204,7 @@ "copy_icon_button.copied": "已复制到剪贴板", "copypaste.copied": "已复制", "copypaste.copy_to_clipboard": "复制到剪贴板", - "directory.federated": "来自已知的联邦宇宙", + "directory.federated": "来自已知联邦宇宙", "directory.local": "仅来自 {domain}", "directory.new_arrivals": "新来者", "directory.recently_active": "最近活跃", @@ -220,24 +220,24 @@ "domain_block_modal.block_account_instead": "改为屏蔽 @{name}", "domain_block_modal.they_can_interact_with_old_posts": "来自该服务器的人可以与你之前的嘟文交互。", "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", - "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", + "domain_block_modal.they_wont_know": "对方不会知道自己被屏蔽。", "domain_block_modal.title": "屏蔽该域名?", "domain_block_modal.you_will_lose_num_followers": "你将失去 {followersCount, plural, other {{followersCountDisplay} 名关注者}}和 {followingCount, plural, other {{followingCountDisplay} 名关注}}。", "domain_block_modal.you_will_lose_relationships": "你将失去在此实例上的所有关注和关注者。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", - "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", - "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", + "domain_pill.activitypub_lets_connect": "它让你不仅能与 Mastodon 上的人交流互动,还能与其它不同社交应用上的人联系。", + "domain_pill.activitypub_like_language": "ActivityPub 好比 Mastodon 与其它社交网络交流时使用的语言。", "domain_pill.server": "服务器", - "domain_pill.their_handle": "它们的代号:", - "domain_pill.their_server": "它们的数字家园,它们的所有嘟文都存放在那里。", - "domain_pill.their_username": "它们在它们的服务器上的唯一标识符。在不同的服务器上可能会找到相同用户名的用户。", + "domain_pill.their_handle": "对方代号:", + "domain_pill.their_server": "对方的数字家园,对方的所有嘟文都存放在那里。", + "domain_pill.their_username": "对方在其服务器上的唯一标识符。不同服务器上可能会存在相同用户名的用户。", "domain_pill.username": "用户名", "domain_pill.whats_in_a_handle": "代号里都有什么?", - "domain_pill.who_they_are": "代号可以告诉你一个人是谁和在哪里,所以你可以在社交网络上与的人们互动。", - "domain_pill.who_you_are": "你的代号可以告诉别人你是谁和你在哪里,这样社交网络上来自的人们就可以与你互动。", + "domain_pill.who_they_are": "代号可以表明用户和其所在站点,你可以在社交网络上与的人们互动。", + "domain_pill.who_you_are": "代号可以表明你自己和你所在站点,社交网络上来自的人们因此可以与你互动。", "domain_pill.your_handle": "你的代号:", "domain_pill.your_server": "你的数字家园,你的所有嘟文都存放在这里。不喜欢这个服务器吗?随时带上你的关注者一起迁移到其它服务器。", - "domain_pill.your_username": "你在这个服务器上的唯一标识符。在不同的服务器上可能会找到相同用户名的用户。", + "domain_pill.your_username": "你在这个服务器上的唯一标识符。不同服务器上可能会存在相同用户名的用户。", "embed.instructions": "复制下列代码以在你的网站中嵌入此嘟文。", "embed.preview": "它会像这样显示出来:", "emoji_button.activity": "活动", @@ -465,11 +465,11 @@ "mute_modal.hide_options": "隐藏选项", "mute_modal.indefinite": "直到我取消隐藏他们", "mute_modal.show_options": "显示选项", - "mute_modal.they_can_mention_and_follow": "他们可以提及和关注你,但是你看不到他们。", - "mute_modal.they_wont_know": "它们不会知道自己已被隐藏。", - "mute_modal.title": "隐藏用户?", - "mute_modal.you_wont_see_mentions": "你看不到提及他们的嘟文。", - "mute_modal.you_wont_see_posts": "他们可以看到你的嘟文,但是你看不到他们的。", + "mute_modal.they_can_mention_and_follow": "对方可以提及和关注你,但是你看不到对方。", + "mute_modal.they_wont_know": "对方不会知道自己被隐藏。", + "mute_modal.title": "隐藏该用户?", + "mute_modal.you_wont_see_mentions": "你看不到提及对方的嘟文。", + "mute_modal.you_wont_see_posts": "对方可以看到你的嘟文,但是你看不到对方的。", "navigation_bar.about": "关于", "navigation_bar.administration": "管理", "navigation_bar.advanced_interface": "在高级网页界面中打开", @@ -524,15 +524,15 @@ "notification.moderation_warning.action_mark_statuses_as_sensitive": "你的一些嘟文已被标记为敏感内容。", "notification.moderation_warning.action_none": "你的账号收到了管理警告。", "notification.moderation_warning.action_sensitive": "今后你的嘟文都会被标记为敏感内容。", - "notification.moderation_warning.action_silence": "你的账号已被限制。", - "notification.moderation_warning.action_suspend": "你的账号已被封禁.", + "notification.moderation_warning.action_silence": "你的账号已被隐藏。", + "notification.moderation_warning.action_suspend": "你的账号已被封禁。", "notification.own_poll": "你的投票已经结束", "notification.poll": "你参与的一项投票已结束", "notification.reblog": "{name} 转发了你的嘟文", "notification.reblog.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 转嘟了你的嘟文", "notification.relationships_severance_event": "与 {name} 的联系已断开", - "notification.relationships_severance_event.account_suspension": "一名来自 {from} 的管理员已经封禁了{target},这意味着你将无法再收到他们的更新或与他们互动。", - "notification.relationships_severance_event.domain_block": "一名来自 {from} 的管理员已经屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", + "notification.relationships_severance_event.account_suspension": "来自 {from} 的管理员封禁了 {target},这意味着你将无法再收到对方的更新或与其互动。", + "notification.relationships_severance_event.domain_block": "来自 {from} 的管理员屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", "notification.relationships_severance_event.learn_more": "了解更多", "notification.relationships_severance_event.user_domain_block": "你已经屏蔽了 {target},移除了你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", "notification.status": "{name} 刚刚发布嘟文", @@ -781,14 +781,14 @@ "status.bookmark": "添加到书签", "status.cancel_reblog_private": "取消转贴", "status.cannot_reblog": "这条嘟文不允许被转嘟", - "status.continued_thread": "继续线程", + "status.continued_thread": "上接嘟文串", "status.copy": "复制嘟文链接", "status.delete": "删除", "status.detailed_status": "详细的对话视图", "status.direct": "私下提及 @{name}", "status.direct_indicator": "私下提及", "status.edit": "编辑", - "status.edited": "最近编辑于 {date}", + "status.edited": "最后编辑于 {date}", "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "获取嵌入代码", "status.favourite": "喜欢", @@ -815,10 +815,10 @@ "status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。", "status.redraft": "删除并重新编辑", "status.remove_bookmark": "移除书签", - "status.replied_in_thread": "已在线程中回复", + "status.replied_in_thread": "回复给嘟文串", "status.replied_to": "回复给 {name}", "status.reply": "回复", - "status.replyAll": "回复所有人", + "status.replyAll": "回复此嘟文串", "status.report": "举报 @{name}", "status.sensitive_warning": "敏感内容", "status.share": "分享", diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml index f99f726e231d84..45149cd1173b95 100644 --- a/config/locales/activerecord.eo.yml +++ b/config/locales/activerecord.eo.yml @@ -25,7 +25,7 @@ eo: account: attributes: username: - invalid: nur literoj, ciferoj kaj substrekoj + invalid: devas enhavi nur literojn, ciferojn kaj substrekojn reserved: rezervita admin/webhook: attributes: diff --git a/config/locales/activerecord.ia.yml b/config/locales/activerecord.ia.yml index bccfb96602b7f5..809b8fd5821343 100644 --- a/config/locales/activerecord.ia.yml +++ b/config/locales/activerecord.ia.yml @@ -20,6 +20,7 @@ ia: invalid: non es un nomine de dominio valide messages: invalid_domain_on_line: "%{value} non es un nomine de dominio valide" + too_many_lines: il es ultra le limite de %{limit} lineas models: account: attributes: diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 468df9b12b0ea7..21be8aa3451d08 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -15,6 +15,12 @@ ja: user/invite_request: text: 理由 errors: + attributes: + domain: + invalid: 有効なドメイン名ではありません + messages: + invalid_domain_on_line: "%{value} は有効なドメイン名ではありません" + too_many_lines: "%{limit} 行の制限を超えています。" models: account: attributes: diff --git a/config/locales/activerecord.ml.yml b/config/locales/activerecord.ml.yml index 8b20ee34b32e3b..90c5b38ad5ab86 100644 --- a/config/locales/activerecord.ml.yml +++ b/config/locales/activerecord.ml.yml @@ -4,23 +4,37 @@ ml: attributes: poll: expires_at: സമയപരിധി - options: ചോയ്‌സുകൾ + options: തിരഞ്ഞെടുപ്പുകൾ user: agreement: സേവന ഉടമ്പടി email: ഇ-മെയിൽ വിലാസം locale: ഭാഷ - password: രഹസ്യവാചകം + password: രഹസ്യവാക്കു് user/account: username: ഉപയോക്തൃനാമം user/invite_request: text: കാരണം errors: + attributes: + domain: + invalid: ഇതൊരു തെറ്റിയ മേഖലപേരാണു് + messages: + invalid_domain_on_line: "%{value} ഒരു തെറ്റിയ മേഖലപേരാണു്" + too_many_lines: ഇതു് %{limit} വരിയതിരിന്റെ മേലെയാണു് models: account: attributes: username: invalid: അക്ഷരങ്ങളും, അക്കങ്ങളും, പിന്നെ അടിവരയും മാത്രം reserved: കരുതിവച്ചു + admin/webhook: + attributes: + url: + invalid: ഇതൊരു തെറ്റിയ വിലാസമാണു് + doorkeeper/application: + attributes: + website: + invalid: ഇതൊരു തെറ്റിയ വിലാസമാണു് status: attributes: reblog: diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index 7422550660217b..113d881ae59c1d 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -46,7 +46,7 @@ zh-TW: user: attributes: email: - blocked: 使用不被允許的電子郵件供應商 + blocked: 使用不被允許的電子郵件提供商 unreachable: 該電子郵件地址似乎無法使用 role_id: elevated: 不能高於您目前的角色 diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 72c5d9d75254ce..a3310f0d4631f3 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -449,7 +449,7 @@ ast: your_token: El pase d'accesu auth: delete_account: Desaniciu de la cuenta - delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Va pidísete que confirmes l'aición. + delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Vamos pidite que confirmes l'aición. description: prefix_sign_up: "¡Rexístrate güei en Mastodon!" didnt_get_confirmation: "¿Nun recibiesti l'enllaz de confirmación?" @@ -645,6 +645,7 @@ ast: errors: missing_also_known_as: nun ye un nomatu d'esta cuenta move_to_self: nun pue ser la cuenta actual + incoming_migrations: Migración d'otra cuenta incoming_migrations_html: Pa migrar d'otra cuenta a esta, primero tienes de crear un nomatu de cuenta. warning: followers: Esta aición va mover tolos siguidores de la cuenta actual a la nueva @@ -726,6 +727,7 @@ ast: over_daily_limit: Superesti la llende de %{limit} artículos programaos pa güei over_total_limit: Superesti la llende de %{limit} artículos programaos sessions: + activity: Última actividá browser: Restolador browsers: alipay: Alipay @@ -778,6 +780,7 @@ ast: import: Importación import_and_export: Importación y esportación migrate: Migración de la cuenta + notifications: Avisos per corréu electrónicu preferences: Preferencies profile: Perfil públicu relationships: Perfiles que sigues y te siguen diff --git a/config/locales/cy.yml b/config/locales/cy.yml index d57ef38696f48a..85136004ea7219 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -29,6 +29,7 @@ cy: two: Postiadau zero: Postiadau posts_tab_heading: Postiadau + self_follow_error: Chewch chi ddim dilyn eich cyfrif eich hun admin: account_actions: action: Cyflawni gweithred @@ -918,7 +919,7 @@ cy: message_html: Mae gan eich clwstwr Elasticsearch fwy nag un nod, ond nid yw Mastodon wedi'i ffurfweddu i'w defnyddio. elasticsearch_preset_single_node: action: Darllenwch y ddogfennaeth - message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET i single_node_cluster . + message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET i single_node_cluster. elasticsearch_reset_chewy: message_html: Mae eich mynegai system Elasticsearch wedi dyddio oherwydd newid gosodiad. Rhedwch chwiliad tootctl search deploy --reset-chewy i'w ddiweddaru. elasticsearch_running_check: @@ -1062,7 +1063,7 @@ cy: webhooks: add_new: Ychwanegu diweddbwynt delete: Dileu - description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig . + description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig. disable: Analluogi disabled: Wedi'i analluogi edit: Golygu diweddbwynt @@ -1126,7 +1127,7 @@ cy: created_msg: Wedi creu enw arall yn llwyddiannus. Gallwch nawr ddechrau symud o'r hen gyfrif. deleted_msg: Wedi tynnu enw arall yn llwyddiannus. Ni fydd symud o'r cyfrif hynny i'r cyfrif hon yn bosib. empty: Nid oes gennych enwau eraill. - hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif . + hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif. remove: Dadgysylltu'r enw arall appearance: advanced_web_interface: Rhyngwyneb gwe uwch @@ -1367,7 +1368,7 @@ cy: add_keyword: Ychwanegu allweddair keywords: Allweddeiriau statuses: Postiadau unigol - statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd . + statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd. title: Golygu hidlydd errors: deprecated_api_multiple_keywords: Nid oes modd newid y paramedrau hyn o'r cais hwn oherwydd eu bod yn berthnasol i fwy nag un allweddair hidlo. Defnyddiwch raglen fwy diweddar neu'r rhyngwyneb gwe. @@ -1465,6 +1466,92 @@ cy: merge_long: Cadw'r cofnodion presennol ac ychwanegu rhai newydd overwrite: Trosysgrifio overwrite_long: Amnewid y cofnodion cyfredol gyda'r rhai newydd + overwrite_preambles: + blocking_html: + few: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + many: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + one: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + other: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + two: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + zero: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}. + bookmarks_html: + few: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}. + many: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}. + one: Rydych ar fin disodli eich nodau tudalen gyda hyd at %{count} postiad o %{filename}. + other: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}. + two: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}. + zero: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}. + domain_blocking_html: + few: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}. + many: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}. + one: Rydych ar fin disodli eich rhestr blociau parth gyda hyd at %{count} parth o %{filename}. + other: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}. + two: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}. + following_html: + few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall. + many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall. + one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename} a rhoi'r gorau i ddilyn unrhyw un arall. + other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall. + two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall. + zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall. + lists_html: + few: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + many: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + one: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + other: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + two: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + zero: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd. + muting_html: + few: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}. + many: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}. + one: Rydych ar fin disodli eich rhestr o gyfrifon wedi'u tewi am hyd at %{count} gyfrif o %{filename}. + other: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}. + two: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}. + zero: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}. + preambles: + blocking_html: + few: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + many: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + one: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + other: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + two: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + zero: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}. + bookmarks_html: + few: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + many: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + one: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + other: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + two: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + zero: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen. + domain_blocking_html: + few: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + many: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + one: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + other: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + two: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + zero: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}. + following_html: + few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}. + many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}. + one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename}. + other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}. + two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}. + zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}. + lists_html: + few: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + many: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + one: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + other: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + two: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + zero: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati. + muting_html: + few: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. + many: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. + one: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. + other: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. + two: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. + zero: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}. preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio. recent_imports: Mewnforion diweddar states: @@ -1547,7 +1634,7 @@ cy: follow_request: e-byst ceisiadau dilyn mention: e-byst hysbysu crybwylliadau reblog: e-byst hysbysiadau hybu - resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost . + resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost. success_html: Ni fyddwch bellach yn derbyn %{type} ar gyfer Mastodon ar %{domain} i'ch e-bost am %{email}. title: Dad-danysgrifio media_attachments: @@ -1569,7 +1656,7 @@ cy: on_cooldown: Rydych ar amser allan followers_count: Dilynwyr ar adeg y symud incoming_migrations: Symud o gyfrif wahanol - incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif . + incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif. moved_msg: Mae eich cyfrif bellach yn ailgyfeirio i %{acct} ac mae eich dilynwyr yn cael eu symud drosodd. not_redirecting: Nid yw eich cyfrif yn ailgyfeirio i unrhyw gyfrif arall ar hyn o bryd. on_cooldown: Rydych chi wedi mudo'ch cyfrif yn ddiweddar. Bydd y swyddogaeth hon ar gael eto ymhen %{count} diwrnod. @@ -1584,7 +1671,7 @@ cy: cooldown: Ar ôl symud, bydd yna cyfnod aros na fydd modd i chi symud eto disabled_account: Ni fydd modd defnyddio'ch cyfrif cyfredol yn llawn wedyn. Fodd bynnag, bydd gennych fynediad i allforio data yn ogystal ag ail agor. followers: Bydd y weithred hon yn symud yr holl ddilynwyr o'r cyfrif cyfredol i'r cyfrif newydd - only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil . + only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil. other_data: Ni fydd unrhyw data arall yn cael ei symud yn awtomatig redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau moderation: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 43aef271f9ba14..88514ab5e2824f 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -6,7 +6,7 @@ eo: send_instructions: Vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon. send_paranoid_instructions: Se via retadreso ekzistas en nia datumbazo, vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon. failure: - already_authenticated: Vi jam salutis. + already_authenticated: Vi jam ensalutis. inactive: Via konto ankoraŭ ne estas konfirmita. invalid: Nevalida %{authentication_keys} aŭ pasvorto. last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita. diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml index c9c831f7f5bf77..3df18d6f7a4978 100644 --- a/config/locales/doorkeeper.ast.yml +++ b/config/locales/doorkeeper.ast.yml @@ -50,7 +50,9 @@ ast: confirmations: revoke: "¿De xuru que quies facer esta aición?" index: + authorized_at: 'Data d''autorización: %{date}' description_html: Estes son les aplicaciones que puen acceder a la cuenta cola API. Si equí hai aplicaciones que nun conoces o hai dalguna aplicación que nun funciona correutamente, pues revocar el so accesu. + last_used_at: 'Últimu usu: %{date}' never_used: Enxamás s'usó scopes: Permisos title: Les aplicaciones qu'autoricesti diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index e119d71f4e7028..eaf1bf69fb7673 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -60,7 +60,7 @@ es-MX: error: title: Ha ocurrido un error new: - prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente. + prompt_html: "%{client_name} desea obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solamente si reconoces y confías en esta fuente." review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml index ebfaf5c710d509..fb135b1f96cf3b 100644 --- a/config/locales/doorkeeper.et.yml +++ b/config/locales/doorkeeper.et.yml @@ -60,6 +60,7 @@ et: error: title: Ilmnes viga new: + prompt_html: "%{client_name} soovib saada ligipääsu su kontole. Kinnita see taotlus ainult siis, kui sa tunned ja usaldad seda allikat." review_permissions: Lubade ülevaade title: Autoriseerimine vajalik show: diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 4ff03950b55f80..8e2bc864a27cd2 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -130,7 +130,7 @@ fa: favourites: برگزیده‌ها filters: پالایه‌ها follow: پی‌گیری، خموشی و مسدودی‌ها - follows: پی‌گرفتگان + follows: پی‌گرفتن‌ها lists: سیاهه‌ها media: پیوست‌های رسانه‌ای mutes: خموش‌ها diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml index 05f2415eea537a..1fabd1b55f3f13 100644 --- a/config/locales/doorkeeper.is.yml +++ b/config/locales/doorkeeper.is.yml @@ -60,6 +60,7 @@ is: error: title: Villa kom upp new: + prompt_html: "%{client_name} vill fá heimild til að skoða aðganginn þinn. Ekki samþykkja þessa beiðni nema þú þekkir og treystir viðkomandi." review_permissions: Yfirfara heimildir title: Auðkenning er nauðsynleg show: diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 7cfddf50a16c65..d44451c74630ce 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -60,6 +60,7 @@ ja: error: title: エラーが発生しました new: + prompt_html: "%{client_name} があなたのアカウントにアクセスするための許可を求めています。このリクエストを承認するのは、信頼できる相手であると認識している場合のみです。" review_permissions: アクセス許可を確認 title: 認証が必要です show: diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 9f646fd3e4b454..2a22edf673b80e 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -132,7 +132,7 @@ sv: follow: Följare, mjutade och blockerade follows: Följer lists: Listor - media: Mediabilagor + media: Mediebilagor mutes: Tystade användare notifications: Aviseringar profile: Din Mastodon-profil diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 6687c0339d3388..2219599c57653d 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -150,30 +150,30 @@ vi: title: Đăng nhập bằng OAuth scopes: admin:read: đọc mọi dữ liệu trên máy chủ - admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản - admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả khối email chuẩn - admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép - admin:read:domain_blocks: đọc thông tin nhạy cảm của tất cả các tên miền chặn - admin:read:email_domain_blocks: đọc thông tin nhạy cảm của tất cả các miền email chặn - admin:read:ip_blocks: đọc thông tin nhạy cảm của tất cả các IP chặn + admin:read:accounts: đọc thông tin nhạy cảm của mọi tài khoản + admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của mọi khối email biến thể + admin:read:domain_allows: đọc thông tin nhạy cảm của mọi máy chủ liên hợp + admin:read:domain_blocks: đọc thông tin nhạy cảm của mọi máy chủ chặn + admin:read:email_domain_blocks: đọc thông tin nhạy cảm của mọi tên miền email chặn + admin:read:ip_blocks: đọc thông tin nhạy cảm của mọi IP chặn admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo admin:write: sửa đổi tất cả dữ liệu trên máy chủ admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản - admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email + admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email biến thể admin:write:domain_allows: áp đặt kiểm duyệt đối với các email cho phép admin:write:domain_blocks: áp đặt kiểm duyệt đối với các tên miền chặn admin:write:email_domain_blocks: áp đặt kiểm duyệt đối với các tên miền email chặn admin:write:ip_blocks: áp đặt kiểm duyệt với các IP chặn admin:write:reports: áp đặt kiểm duyệt với các báo cáo crypto: dùng mã hóa đầu cuối - follow: sửa đổi các mối quan hệ tài khoản - profile: chỉ đọc thông tin tài khoản cơ bản + follow: sửa đổi các mối quan hệ + profile: chỉ xem thông tin tài khoản cơ bản push: nhận thông báo đẩy read: đọc mọi dữ liệu tài khoản read:accounts: xem thông tin tài khoản read:blocks: xem những người đã chặn read:bookmarks: xem tút đã lưu - read:favourites: xem lượt thích + read:favourites: xem tút đã thích read:filters: xem bộ lọc read:follows: xem những người theo dõi read:lists: xem danh sách @@ -182,7 +182,7 @@ vi: read:reports: xem báo cáo của bạn read:search: tìm kiếm read:statuses: xem toàn bộ tút - write: sửa đổi mọi dữ liệu tài khoản của bạn + write: sửa đổi mọi dữ liệu tài khoản write:accounts: sửa đổi trang hồ sơ write:blocks: chặn người và máy chủ write:bookmarks: sửa đổi những tút lưu @@ -194,5 +194,5 @@ vi: write:media: tải lên tập tin write:mutes: ẩn người và thảo luận write:notifications: xóa thông báo - write:reports: báo cáo người khác + write:reports: báo cáo write:statuses: đăng tút diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 46253d01b3f57c..08f9885894d0d3 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -167,7 +167,7 @@ zh-CN: admin:write:reports: 对举报执行管理操作 crypto: 使用端到端加密 follow: 关注或屏蔽用户 - profile: 仅读取你账户中的个人资料信息 + profile: 仅读取你账号的个人资料信息 push: 接收你的账户的推送通知 read: 读取你的账户数据 read:accounts: 查看账号信息 diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 1e683b1725087c..629edd9380fffb 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -19,7 +19,7 @@ eo: following: Vi devas sekvi la homon, kiun vi volas proponi posts: one: Afiŝo - other: Mesaĝoj + other: Afiŝoj posts_tab_heading: Afiŝoj self_follow_error: Sekvi vian propran konton ne estas permesita admin: @@ -81,8 +81,8 @@ eo: joined: Aliĝis location: all: Ĉiuj - local: Lokaj - remote: Foraj + local: Loka + remote: Fora title: Loko login_status: Ensaluta stato media_attachments: Plurmediaj aldonaĵoj @@ -133,6 +133,7 @@ eo: resubscribe: Reaboni role: Rolo search: Serĉi + search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno search_same_ip: Aliaj uzantoj kun la sama IP security: Sekureco security_measures: @@ -173,6 +174,7 @@ eo: approve_appeal: Aprobis Apelacion approve_user: Aprobi Uzanton assigned_to_self_report: Atribui Raporton + change_email_user: Ŝanĝu retpoŝton por uzanto change_role_user: Ŝanĝi Rolon de Uzanton confirm_user: Konfirmi uzanton create_account_warning: Krei averton @@ -731,6 +733,7 @@ eo: desc_html: Ĉi tio dependas de eksteraj hCaptcha-skriptoj, kiuj povas esti problemo pri sekureco kaj privateco. Ankaŭ, ĝi povas igi la registran procezon multe malpli alirebla por iuj homoj (precipe homoj kun handikapoj). Pro ĉi tiuj kialoj, bonvolu konsideri alternativajn rimedojn kiel registradon per aprobo aŭ per invito. title: Postuli novajn uzantojn solvi CAPTCHA por konfirmi sian konton content_retention: + danger_zone: Danĝera zono preamble: Regi kiel uzantogenerita enhavo konservitis en Mastodon. title: Enhavkonservo default_noindex: @@ -828,9 +831,11 @@ eo: sidekiq_process_check: message_html: Neniu Sidekiq-procezo por la %{value} vico software_version_check: + action: Vidi disponeblajn ĝisdatigojn message_html: Mastodon-ĝisdatigo disponeblas. software_version_critical_check: action: Vidi disponeblajn ĝisdatigojn + message_html: Grava ĝisdatigo de Mastodon disponeblas, bonvolu ĝisdatigi kiel eble plej rapide. software_version_patch_check: action: Vidi disponeblajn ĝisdatigojn upload_check_privacy_error: @@ -845,6 +850,7 @@ eo: name: Nomo newest: Plej novaj oldest: Plej malnovaj + reset: Restartigi review: La statuso de la recenzo search: Serĉi title: Kradvortoj @@ -860,7 +866,9 @@ eo: allow: Permesi ligilon allow_provider: Permesi publikiganto confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn? + confirm_allow_provider: Ĉu vi certas, ke vi volas permesi elektitajn provizantojn? confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn? + confirm_disallow_provider: Ĉu vi certas, ke vi volas malpermesi elektitajn provizantojn? description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton. disallow: Malpermesi ligilon disallow_provider: Malpermesi publikiganton @@ -918,6 +926,7 @@ eo: used_by_over_week: one: Uzita de 1 persono ekde lasta semajno other: Uzita de %{count} personoj ekde lasta semajno + title: Rekomendoj kaj Tendencoj trending: Popularaĵoj warning_presets: add_new: Aldoni novan @@ -1281,6 +1290,7 @@ eo: states: finished: Finita in_progress: Farata + scheduled: Planitaj unconfirmed: Nekonfirmita status: Stato success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite @@ -1476,6 +1486,8 @@ eo: errors: limit_reached: Limito de malsamaj reagoj atinginta unrecognized_emoji: ne estas rekonita emoĝio + redirects: + prompt: Se vi fidas ĉi tiun ligon, alklaku ĝin por daŭrigi. relationships: activity: Konta aktiveco confirm_follow_selected_followers: Ĉu vi certas ke vi volas sekvi la elektitajn sekvantojn? @@ -1570,10 +1582,12 @@ eo: delete: Konta forigo development: Evoluigado edit_profile: Redakti profilon + export: Eksporti featured_tags: Elstarigitaj kradvortoj import: Enporti import_and_export: Importi kaj eksporti migrate: Konta migrado + notifications: Retpoŝtaj sciigoj preferences: Preferoj profile: Profilo relationships: Sekvatoj kaj sekvantoj @@ -1582,6 +1596,9 @@ eo: two_factor_authentication: Dufaktora aŭtentigo webauthn_authentication: Sekurecaj ŝlosiloj severed_relationships: + download: Elŝuti (%{count}) + event_type: + user_domain_block: Vi blokis %{target_name} lost_followers: Perditaj sekvantoj type: Evento statuses: @@ -1750,11 +1767,17 @@ eo: explanation: Jen kelkaj konsiloj por helpi vin komenci feature_action: Lerni pli follow_action: Sekvi + hashtags_recent_count: + one: "%{people} homo en la pasintaj 2 tagoj" + other: "%{people} homoj en la pasintaj 2 tagoj" hashtags_title: Popularaj kradvortoj hashtags_view_more: Vidi pli da popularaj kradvortoj + post_action: Redakti post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj. post_title: Faru vian unuan afiŝon + share_action: Kundividi share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon. + share_title: Kunhavigu vian Mastodon-profilon sign_in_action: Ensaluti subject: Bonvenon en Mastodon title: Bonvenon, %{name}! diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 2c18465a26af53..097c5c81521ef4 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -241,7 +241,7 @@ es-MX: confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}" - create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}" + create_canonical_email_block_html: "%{name} ha bloqueado el correo electrónico con el hash %{target}" create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}" create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}" create_domain_block_html: "%{name} bloqueó el dominio %{target}" @@ -251,7 +251,7 @@ es-MX: create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} degradó al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" - destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}" + destroy_canonical_email_block_html: "%{name} ha desbloqueado el correo electrónico con el hash %{target}" destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" @@ -605,7 +605,7 @@ es-MX: suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. - actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar + actions_no_posts: Este informe no tiene ninguna publicación asociada para eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -802,7 +802,7 @@ es-MX: destroyed_msg: "¡Carga del sitio eliminada con éxito!" software_updates: critical_update: Crítico — por favor actualiza rápidamente - description: Se recomienda mantener actualizada tu instalación de Mastodon para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon de manera oportuna para evitar problemas de seguridad. Por estas razones, Mastodon comprueba si hay actualizaciones cada 30 minutos, y te notificará de acuerdo a tus preferencias de notificación por correo electrónico. + description: Se recomienda mantener tu instalación de Mastodon actualizada para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon a tiempo para evitar problemas de seguridad. Por estas razones, Mastodon busca actualizaciones cada 30 minutos, y le notificará de acuerdo a sus preferencias de notificación por correo electrónico. documentation_link: Saber más release_notes: Notas de la versión title: Actualizaciones disponibles diff --git a/config/locales/et.yml b/config/locales/et.yml index 4372a92843161a..4d231ae764e63c 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -21,6 +21,7 @@ et: one: Postitus other: Postitused posts_tab_heading: Postitused + self_follow_error: Omaenda konto jälgimine ei ole lubatud admin: account_actions: action: Täida tegevus @@ -875,6 +876,9 @@ et: message_html: Serverireegleid pole defineeritud. sidekiq_process_check: message_html: Ühtegi Sidekiq protsessi pole %{value} järjekorra jaoks. Sidekiq seadistus vajab üle vaatamist + software_version_check: + action: Vaata saadaval uuendusi + message_html: Mastodoni uuendus on saadaval. software_version_critical_check: action: Vaata saadaolevaid uuendusi message_html: Saadaval on Mastodoni kriitiline uuendus, uuenda nii kiiresti kui võimalik. @@ -1362,6 +1366,44 @@ et: merge_long: Hoia olemasolevad andmed ja lisa uusi overwrite: Kirjuta üle overwrite_long: Vaheta praegused andmed uute vastu + overwrite_preambles: + blocking_html: + one: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} konto. + other: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} kontot. + bookmarks_html: + one: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitus. + other: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitust. + domain_blocking_html: + one: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen. + other: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen. + following_html: + one: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise. + other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise. + lists_html: + one: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} konto. + other: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} kontot. + muting_html: + one: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} konto. + other: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} kontot. + preambles: + blocking_html: + one: Oled blokeerimas kuni %{count} konto failist %{filename}. + other: Oled blokeerimas kuni %{count} kontot failist %{filename}. + bookmarks_html: + one: Oled lisamas kuni %{count} postituse failist %{filename} oma järjehoidjatesse. + other: Oled lisamas kuni %{count} postitust failist %{filename} oma järjehoidjatesse. + domain_blocking_html: + one: Oled blokeerimas kuni %{count} domeeni failist %{filename}. + other: Oled blokeerimas kuni %{count} domeeni failist %{filename}. + following_html: + one: Oled jälgima hakkamas kuni %{count} konto failist %{filename}. + other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename}. + lists_html: + one: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} konto. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud. + other: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} kontot. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud. + muting_html: + one: Oled vaigistamas kuni %{count} konto failist %{filename}. + other: Oled vaigistamas kuni %{count} kontot failist %{filename}. preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid. recent_imports: Viimati imporditud states: @@ -1678,6 +1720,7 @@ et: delete: Konto kustutamine development: Arendus edit_profile: Muuda profiili + export: Eksport featured_tags: Esile toodud sildid import: Impordi import_and_export: Import / eksport diff --git a/config/locales/fa.yml b/config/locales/fa.yml index e7d932de113a84..fbfd78b6d4261d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -961,8 +961,10 @@ fa: use_security_key: استفاده از کلید امنیتی author_attribution: example_title: متن نمونه + hint_html: واپایش چگونگی اعتبار دادن به شما هنگام هم‌رسانی پیوندها روی ماستودون. more_from_html: بیش‌تر از %{name} s_blog: بلاگ %{name} + title: اعتباردهی به نگارنده challenge: confirm: ادامه hint_html: "نکته: ما در یک ساعت آینده گذرواژه‌تان را از شما نخواهیم پرسید." @@ -1294,6 +1296,7 @@ fa: update: subject: "%{name} فرسته‌ای را ویرایست" notifications: + email_events: رویدادها برای آگاهی‌های رایانامه‌ای email_events_hint: 'گزینش رویدادهایی که می‌خواهید برایشان آگاهی دریافت کنید:' number: human: @@ -1338,6 +1341,7 @@ fa: privacy: hint_html: "شخصی‌سازی چگونگی پیدا شدن فرسته‌ها و نمایه‌تان. ویژگی‌های متعدّدی در ماستودون می‌توانند هنگام به کار افتادن در رسیدن به مخاطبینی گسترده‌تر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند." privacy: محرمانگی + privacy_hint_html: واپایش میزان باز شدن به نفع دیگران. افراد نمایه‌های جالب و کاره‌های باحال را با مرور پی‌گرفتگان دیگران و دیدن کاره‌هایی که از آن‌ها می‌فرستند پیدا می‌کنند. با این حال شاید بخواهید پنهان نگهشان دارید. reach: دسترسی reach_hint_html: واپایش این که می‌خواهید به دست افراد جدید قابل کشف و پی‌گیری باشید یا نه. می‌خواهید فرسته‌هایتان روی صفحهٔ کشف ظاهر شوند؟ می‌خواهید دیگر افراد در پیشنهادهای پی‌گیریشان ببینندتان؟ می‌خواهید پی‌گیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟ search: جست‌وجو @@ -1438,6 +1442,7 @@ fa: delete: پاک‌کردن حساب development: فرابری edit_profile: ویرایش نمایه + export: برون‌ریزی featured_tags: برچسب‌های برگزیده import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری @@ -1446,12 +1451,21 @@ fa: preferences: ترجیحات profile: نمایه relationships: پیگیری‌ها و پیگیران + severed_relationships: ارتباط‌های قطع شده statuses_cleanup: حذف فرستهٔ خودکار strikes: شکایت‌های مدیریتی two_factor_authentication: ورود دومرحله‌ای webauthn_authentication: کلیدهای امنیتی severed_relationships: download: بارگیری (%{count}) + event_type: + account_suspension: تعلیق حساب (%{target_name}) + domain_block: تعلیق کارساز (%{target_name}) + user_domain_block: "%{target_name} را مسدود کردید" + lost_followers: پی‌گیرندگان از دست رفته + lost_follows: پی‌گرفته‌ّای از دست رفته + preamble: وقتی دامنه‌ای را مسدود کرده یا ناظرانتان تصمیم به تعلیق کارسازی دوردست می‌گیرند، ممکن است پی‌گیران و پی‌گرفته‌هایتان را از دست بدهید. با این حال قادرید سیاهه‌هایی از ارتباط‌های قطع شده را برای بررسی و درون‌ریزی احتمالی روی کارسازی دیگر بار بگیرید. + purged: اطّلاعات دربارهٔ این کارساز به دست مدیران کارسازتان پاک سازی شده. type: رویداد statuses: attached: @@ -1535,6 +1549,7 @@ fa: contrast: ماستودون (سایه‌روشن بالا) default: ماستودون (تیره) mastodon-light: ماستودون (روشن) + system: خودکار (استفاده از زمینهٔ سامانه) time: formats: default: "%d %b %Y, %H:%M" @@ -1616,6 +1631,7 @@ fa: instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینه‌های اضافی روی نمایه‌تان افزوده و تغییرات را ذخیره کنید. verification: تأیید verified_links: "‏پیوندهای تأییدشده‌ شما" + website_verification: تأیید پایگاه وب webauthn_credentials: add: افزودن کلید امنیتی create: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 01463edacb4603..eea31e9fbfb862 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -21,6 +21,7 @@ fr-CA: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Il n'est pas possible de suivre votre propre compte admin: account_actions: action: Effectuer l'action @@ -1368,6 +1369,44 @@ fr-CA: merge_long: Garder les enregistrements existants et ajouter les nouveaux overwrite: Écraser overwrite_long: Remplacer les enregistrements actuels par les nouveaux + overwrite_preambles: + blocking_html: + one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}. + other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}. + bookmarks_html: + one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}. + other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}. + domain_blocking_html: + one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}. + other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}. + following_html: + one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre. + other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre. + lists_html: + one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes. + other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes. + muting_html: + one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}. + other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}. + preambles: + blocking_html: + one: Vous allez bloquer près de %{count} compte tiré de %{filename}. + other: Vous allez bloquer près de %{count} comptes tirés de %{filename}. + bookmarks_html: + one: Vous allez ajouter près de %{count} message de %{filename} à vos signets. + other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets. + domain_blocking_html: + one: Vous allez bloquer près de %{count} domaine tiré de %{filename}. + other: Vous allez bloquer près de %{count} domaines tirés de %{filename}. + following_html: + one: Vous allez suivre près de %{count} compte tiré de %{filename}. + other: Vous allez suivre près de %{count} comptes tirés de %{filename}. + lists_html: + one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin. + other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin. + muting_html: + one: Vous allez masquer près de %{count} compte tiré de %{filename}. + other: Vous allez masquer près de %{count} comptes tirés de %{filename}. preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte. recent_imports: Importations récentes states: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index c3ce66c3976817..cbe0ae040778c3 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -21,6 +21,7 @@ fr: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Il n'est pas possible de suivre votre propre compte admin: account_actions: action: Effectuer l'action @@ -1368,6 +1369,44 @@ fr: merge_long: Garder les enregistrements existants et ajouter les nouveaux overwrite: Écraser overwrite_long: Remplacer les enregistrements actuels par les nouveaux + overwrite_preambles: + blocking_html: + one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}. + other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}. + bookmarks_html: + one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}. + other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}. + domain_blocking_html: + one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}. + other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}. + following_html: + one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre. + other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre. + lists_html: + one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes. + other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes. + muting_html: + one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}. + other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}. + preambles: + blocking_html: + one: Vous allez bloquer près de %{count} compte tiré de %{filename}. + other: Vous allez bloquer près de %{count} comptes tirés de %{filename}. + bookmarks_html: + one: Vous allez ajouter près de %{count} message de %{filename} à vos signets. + other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets. + domain_blocking_html: + one: Vous allez bloquer près de %{count} domaine tiré de %{filename}. + other: Vous allez bloquer près de %{count} domaines tirés de %{filename}. + following_html: + one: Vous allez suivre près de %{count} compte tiré de %{filename}. + other: Vous allez suivre près de %{count} comptes tirés de %{filename}. + lists_html: + one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin. + other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin. + muting_html: + one: Vous allez masquer près de %{count} compte tiré de %{filename}. + other: Vous allez masquer près de %{count} comptes tirés de %{filename}. preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte. recent_imports: Récents imports states: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index a201b733258f47..83ac6ce910f78c 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -27,6 +27,7 @@ ga: other: Postálacha two: Postálacha posts_tab_heading: Postálacha + self_follow_error: Ní cheadaítear do chuntas féin a leanúint admin: account_actions: action: Déan gníomh @@ -1440,6 +1441,80 @@ ga: merge_long: Coinnigh taifid atá ann cheana féin agus cuir cinn nua leis overwrite: Forscríobh overwrite_long: Cuir na cinn nua in ionad na dtaifead reatha + overwrite_preambles: + blocking_html: + few: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}. + many: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}. + one: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntas ó %{filename}. + other: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}. + two: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}. + bookmarks_html: + few: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}. + many: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}. + one: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}. + other: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}. + two: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}. + domain_blocking_html: + few: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}. + many: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}. + one: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}. + other: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}. + two: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}. + following_html: + few: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile. + many: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile. + one: Tá tú ar tí leanúint suas go dtí %{count} chuntais ó %{filename} agus stop a leanúint aon duine eile. + other: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile. + two: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile. + lists_html: + few: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua. + many: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua. + one: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntas le liostaí nua. + other: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua. + two: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua. + muting_html: + few: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}. + many: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}. + one: Tá tú ar tí do liosta cuntais balbhaithe a chur in ionad suas le %{count} cuntas ó %{filename}. + other: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}. + two: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}. + preambles: + blocking_html: + few: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}. + many: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}. + one: Tá tú ar tí bac suas go dtí %{count} cuntas ó %{filename}. + other: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}. + two: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}. + bookmarks_html: + few: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna. + many: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna. + one: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna. + other: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna. + two: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna. + domain_blocking_html: + few: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}. + many: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}. + one: Tá tú ar tí bac suas go dtí %{count} fearann ó %{filename}. + other: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}. + two: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}. + following_html: + few: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}. + many: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}. + one: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename}. + other: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}. + two: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}. + lists_html: + few: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. + many: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. + one: Tá tú ar tí cuntas %{count} ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. + other: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. + two: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis. + muting_html: + few: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}. + many: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}. + one: Tá tú ar tí balbhú suas go dtí %{count} cuntas ó %{filename}. + other: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}. + two: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}. preface: Is féidir leat sonraí a d’easpórtáil tú a allmhairiú ó fhreastalaí eile, mar shampla liosta de na daoine a bhfuil tú ag leanúint nó ag cur bac orthu. recent_imports: Allmhairí le déanaí states: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index cb7c6254bc3e45..32aa3e23478406 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -25,6 +25,7 @@ gd: other: Postaichean two: Postaichean posts_tab_heading: Postaichean + self_follow_error: Chan fhaod thu an cunntas agad fhèn a leantainn admin: account_actions: action: Gabh an gnìomh @@ -1415,6 +1416,68 @@ gd: merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris overwrite: Sgrìobh thairis air overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann + overwrite_preambles: + blocking_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nam bacaidhean agad. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nam bacaidhean agad. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad. + bookmarks_html: + few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur an àite nan comharra-lìn agad. + one: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad. + other: Tha thu an impis suas ri %{count} post o %{filename} a chur an àite nan comharra-lìn agad. + two: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad. + domain_blocking_html: + few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. + one: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. + other: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. + two: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad. + following_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile. + lists_html: + few: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntasan a chur ri liostaichean ùra. + one: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra. + other: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntas a chur ri liostaichean ùra. + two: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra. + muting_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nan cunntasan mùchte agad. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad. + preambles: + blocking_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a bhacadh. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a bhacadh. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh. + bookmarks_html: + few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur ris na h-annsachdan agad. + one: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad. + other: Tha thu an impis suas ri %{count} post o %{filename} a chur ris na h-annsachdan agad. + two: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad. + domain_blocking_html: + few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a bhacadh. + one: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh. + other: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh. + two: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh. + following_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn. + lists_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris. + muting_html: + few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a mhùchadh. + one: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh. + other: Tha thu an impis suas ri %{count} cunntas o %{filename} a mhùchadh. + two: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh. preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh." recent_imports: Ion-phortaidhean o chionn goirid states: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index cdc94213248df7..3ee93bf7318bd7 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1785,11 +1785,11 @@ gl: enabled: Borrar automáticamente publicacións antigas enabled_hint: Borra automáticamente as túas publicacións unha vez acadan certa lonxevidade, a menos que cumpran algunha destas excepcións exceptions: Excepcións - explanation: Como o borrado de publicacións consume moitos recursos, esta faise aos poucos cando o servidor non ten moita carga de traballo. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por idade. + explanation: O borrado de publicacións vaise facendo aos poucos cando o servidor non ten moito traballo, é unha tarefa que consume moitos recursos. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por antigüidade. ignore_favs: Ignorar favoritas ignore_reblogs: Ignorar promocións interaction_exceptions: Excepcións baseadas en interaccións - interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións e favorecementos se nalgún momento o superaron. + interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións ou favorecementos se nalgún momento o tivese superado. keep_direct: Manter mensaxes directas keep_direct_hint: Non borrar ningunha das túas mensaxes directas keep_media: Manter publicacións que conteñen multimedia diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 4d9148674d9d97..70dfa658b2d06a 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -21,6 +21,7 @@ ia: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Sequer tu proprie conto non es permittite admin: account_actions: action: Exequer action @@ -473,6 +474,9 @@ ia: title: Recommendationes de contos a sequer unsuppress: Restaurar recommendation de sequimento instances: + audit_log: + title: Registros de controlo recente + view_all: Vider registros de controlo integre availability: description_html: one: Si le livration al dominio falle %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio. @@ -599,7 +603,9 @@ ia: resolve_description_html: Necun mesura essera prendite contra le conto denunciate, necun sanction registrate, e le reporto essera claudite. silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le reportos contra iste conto. suspend_description_html: Le conto e tote su contento essera inaccessibile e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le reportos contra iste conto. + actions_description_html: Decider que mesuras prender pro resolver iste reporto. Si tu prende un mesura punitive contra le conto reportate, un aviso email les sera inviate, salvo quando le categoria Spam es seligite. actions_description_remote_html: Decide qual mesura prender pro resolver iste reporto. Isto affectara solmente le maniera in que tu servitor communica con iste conto remote e gere su contento. + actions_no_posts: Iste reporto non ha alcun message associate a deler add_to_report: Adder plus al reporto already_suspended_badges: local: Ja suspendite sur iste servitor @@ -870,6 +876,9 @@ ia: message_html: Tu non ha definite alcun regula de servitor. sidekiq_process_check: message_html: Necun processo Sidekiq es active pro le cauda(s) %{value}. Per favor verifica tu configuration de Sidekiq + software_version_check: + action: Vider le actualisationes disponibile + message_html: Un actualisation de Mastodon es disponibile. software_version_critical_check: action: Vider le actualisationes disponibile message_html: Un actualisation critic de Mastodon es disponibile. Per favor actualisa lo le plus tosto possibile. @@ -885,11 +894,18 @@ ia: tags: moderation: not_trendable: Non pro tendentia + not_usable: Non usabile pending_review: Attende revision + review_requested: Revision demandate + reviewed: Revidite title: Stato + trendable: De tendentia + unreviewed: Non revidite + usable: Usabile name: Nomine newest: Le plus nove oldest: Le plus ancian + open: Vider publicamente reset: Reinitialisar review: Revide le stato search: Cercar @@ -932,7 +948,9 @@ ia: statuses: allow: Permitter message allow_account: Permitter autor + confirm_allow: Desira tu vermente permitter le statos seligite? confirm_allow_account: Es tu secur que tu vole permitter le contos seligite? + confirm_disallow: Desira tu vermente impedir le statos seligite? confirm_disallow_account: Es tu secur que tu vole cessar de permitter le contos seligite? description_html: Istes es le messages cognoscite sur tu servitor que al momento es multo compartite e marcate como favorite. Illos pote adjutar tu usatores nove e reveniente a trovar plus personas a sequer. Necun message es monstrate publicamente usque tu approba le autor, a condition que le autor permitte que su conto es suggerite a alteres. Tu pote tamben permitter o rejectar messages singule. disallow: Non permitter message @@ -1148,8 +1166,10 @@ ia: use_security_key: Usar clave de securitate author_attribution: example_title: Texto de exemplo + hint_html: Controlar como tu es accreditate quando ligamines es compartite sur Mastodon. more_from_html: Plus de %{name} s_blog: Blog de %{name} + title: Attribution de autor challenge: confirm: Continuar hint_html: "Consilio: Nos non te demandara tu contrasigno de novo in le proxime hora." @@ -1346,6 +1366,44 @@ ia: merge_long: Conservar le registros existente e adder noves overwrite: Superscriber overwrite_long: Reimplaciar registros actual con le noves + overwrite_preambles: + blocking_html: + one: Tu va reimplaciar tu lista de blocada con usque %{count} conto ab %{filename}. + other: Tu va reimplaciar tu lista de blocada con usque %{count} contos ab %{filename}. + bookmarks_html: + one: Tu va reimplaciar tu marcapaginas con usque %{count} message ab %{filename}. + other: Tu va reimplaciar tu marcapaginas con usque %{count} messages ab %{filename}. + domain_blocking_html: + one: Tu va reimplaciar tu blocada lista de dominios blocate con usque %{count} dominio ab %{filename}. + other: Tu va reimplaciar tu lista de dominios blocate con usque %{count} dominios ab %{filename}. + following_html: + one: Tu va sequer usque %{count} conto ab %{filename} e cessar de sequer ulle altere. + other: Tu va sequer usque %{count} contos ab %{filename} e cessar de sequer ulle altere. + lists_html: + one: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} conto sera addite al nove listas. + other: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} contos sera addite a nove listas. + muting_html: + one: Tu va reimplaciar tu lista de conto silentiate con usque %{count} conto ab %{filename}. + other: Tu va reimplaciar tu lista de contos silentiate con usque %{count} contos ab %{filename}. + preambles: + blocking_html: + one: Tu va blocar usque %{count} conto ab %{filename}. + other: Tu va blocar usque %{count} contos de %{filename}. + bookmarks_html: + one: Tu va adder usque %{count} message ab %{filename} a tu marcapaginas. + other: Tu va adder usque %{count} messages ab %{filename} a tu marcapaginas. + domain_blocking_html: + one: Tu va blocar usque %{count} dominio ab %{filename}. + other: Tu va blocar usque %{count} dominios ab %{filename}. + following_html: + one: Tu va sequer usque %{count} conto ab %{filename}. + other: Tu va sequer usque %{count} contos de %{filename}. + lists_html: + one: Tu va adder usque %{count} conto ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder. + other: Tu va adder usque %{count} contos ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder. + muting_html: + one: Tu va silentiar usque %{count} conto ab %{filename}. + other: Tu va silentiar usque %{count} contos ab %{filename}. preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca. recent_imports: Importationes recente states: @@ -1430,6 +1488,7 @@ ia: media_attachments: validations: images_and_video: Impossibile annexar un video a un message que jam contine imagines + not_found: Medios %{ids} non trovate o jam attachate a un altere message not_ready: Impossibile annexar files que non ha ancora essite processate. Retenta post un momento! too_many: Impossibile annexar plus de 4 files migrations: @@ -1661,6 +1720,7 @@ ia: delete: Deletion de conto development: Disveloppamento edit_profile: Modificar profilo + export: Exportar featured_tags: Hashtags in evidentia import: Importar import_and_export: Importar e exportar diff --git a/config/locales/is.yml b/config/locales/is.yml index f181470e495211..ed08663b5a3739 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1370,6 +1370,44 @@ is: merge_long: Halda fyrirliggjandi færslum og bæta við nýjum overwrite: Skrifa yfir overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju + overwrite_preambles: + blocking_html: + one: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgangi úr %{filename}. + other: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgöngum úr %{filename}. + bookmarks_html: + one: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslu úr %{filename}. + other: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslum úr %{filename}. + domain_blocking_html: + one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} léni úr %{filename}. + other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} lénum úr %{filename}. + following_html: + one: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgangi úr %{filename} og hætta að fylgjast með öllum öðrum. + other: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgöngum úr %{filename} og hætta að fylgjast með öllum öðrum. + lists_html: + one: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgangi verður bætt við nýju listana. + other: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgöngum verður bætt við nýju listana. + muting_html: + one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgangi úr %{filename}. + other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgöngum úr %{filename}. + preambles: + blocking_html: + one: Þú ert í þann mund að útiloka allt að %{count} aðgang úr %{filename}. + other: Þú ert í þann mund að útiloka allt að %{count} aðganga úr %{filename}. + bookmarks_html: + one: Þú er í þann mund að fara að bæta við allt að %{count} færslu úr %{filename} við bókamerkin þín. + other: Þú er í þann mund að fara að bæta við allt að %{count} færslum úr %{filename} við bókamerkin þín. + domain_blocking_html: + one: Þú ert í þann mund að útiloka allt að %{count} lén úr %{filename}. + other: Þú er í þann mund að fara að útiloka allt að %{count} lén úr %{filename}. + following_html: + one: Þú ert að fara að fylgjast með allt að %{count} aðgangi úr %{filename}. + other: Þú er að fara að fylgjast með allt að %{count} aðgöngum úr %{filename}. + lists_html: + one: Þú ert í þann mund að fara að bæta við allt að %{count} aðgangi úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í. + other: Þú ert í þann mund að fara að bæta við allt að %{count} aðgöngum úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í. + muting_html: + one: Þú ert að fara að þagga niður í allt að %{count} aðgangi úr %{filename}. + other: Þú ert að fara að þagga niður í allt að %{count} aðgöngum úr %{filename}. preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar. recent_imports: Nýlega flutt inn states: diff --git a/config/locales/it.yml b/config/locales/it.yml index 91b67c2b4d65bf..22bfd7df24113b 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1,7 +1,7 @@ --- it: about: - about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza azienale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodon!' + about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza aziendale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodonte!' contact_missing: Non impostato contact_unavailable: N/D hosted_on: Mastodon ospitato su %{domain} @@ -21,6 +21,7 @@ it: one: Toot other: Toot posts_tab_heading: Toot + self_follow_error: Seguire il tuo stesso profilo non è consentito admin: account_actions: action: Esegui azione diff --git a/config/locales/ja.yml b/config/locales/ja.yml index bda5b2d8f66476..8bd8b46f30c4ce 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -46,6 +46,7 @@ ja: title: "%{username}さんのメールアドレスを変更" change_role: changed_msg: ロールを変更しました! + edit_roles: ユーザーのロールを管理 label: ロールを変更 no_role: ロールがありません title: "%{username}さんのロールを変更" @@ -232,22 +233,22 @@ ja: approve_appeal_html: "%{name}さんが%{target}さんからの抗議を承認しました" approve_user_html: "%{name}さんが%{target}さんからの登録を承認しました" assigned_to_self_report_html: "%{name}さんが通報 %{target}を自身の担当に割り当てました" - change_email_user_html: "%{name}さんが%{target}さんのメールアドレスを変更しました" + change_email_user_html: "%{name} さんが %{target} さんのメールアドレスを変更しました" change_role_user_html: "%{name}さんが%{target}さんのロールを変更しました" - confirm_user_html: "%{name}さんが%{target}さんのメールアドレスを確認済みにしました" + confirm_user_html: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました" create_account_warning_html: "%{name}さんが%{target}さんに警告メールを送信しました" create_announcement_html: "%{name}さんが新しいお知らせ %{target}を作成しました" - create_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) をブロックしました" + create_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} をブロックしました" create_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を追加しました" create_domain_allow_html: "%{name}さんが%{target}の連合を許可しました" create_domain_block_html: "%{name}さんがドメイン %{target}をブロックしました" - create_email_domain_block_html: "%{name}さんがメールドメイン %{target} をブロックしました" + create_email_domain_block_html: "%{name} さんがメールドメイン %{target} をブロックしました" create_ip_block_html: "%{name}さんがIP %{target}のルールを作成しました" create_unavailable_domain_html: "%{name}がドメイン %{target}への配送を停止しました" create_user_role_html: "%{name}さんがロール『%{target}』を作成しました" demote_user_html: "%{name}さんが%{target}さんを降格しました" destroy_announcement_html: "%{name}さんがお知らせ %{target}を削除しました" - destroy_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) のブロックを外しました" + destroy_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} のブロックを外しました" destroy_custom_emoji_html: "%{name}さんがカスタム絵文字『%{target}』を削除しました" destroy_domain_allow_html: "%{name}さんが%{target}の連合許可を外しました" destroy_domain_block_html: "%{name}さんがドメイン %{target}のブロックを外しました" @@ -270,7 +271,7 @@ ja: reject_user_html: "%{name}さんが%{target}さんからの登録を拒否しました" remove_avatar_user_html: "%{name}さんが%{target}さんのアイコンを削除しました" reopen_report_html: "%{name}さんが通報 %{target}を未解決に戻しました" - resend_user_html: "%{name}さんが %{target} の確認メールを再送信しました" + resend_user_html: "%{name} さんが %{target} の確認メールを再送信しました" reset_password_user_html: "%{name}さんが%{target}さんのパスワードをリセットしました" resolve_report_html: "%{name}さんが通報 %{target}を解決済みにしました" sensitive_account_html: "%{name}さんが%{target}さんのメディアを閲覧注意にマークしました" @@ -285,7 +286,7 @@ ja: update_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を更新しました" update_domain_block_html: "%{name}さんが%{target}のドメインブロックを更新しました" update_ip_block_html: "%{name} さんがIP %{target} のルールを更新しました" - update_report_html: "%{name}さんが通報 %{target} を更新しました" + update_report_html: "%{name} さんが通報 %{target} を更新しました" update_status_html: "%{name}さんが%{target}さんの投稿を更新しました" update_user_role_html: "%{name}さんがロール『%{target}』を変更しました" deleted_account: 削除されたアカウント @@ -861,6 +862,9 @@ ja: message_html: サーバーのルールを定義していません。 sidekiq_process_check: message_html: "%{value}キューに対応するSidekiqプロセスがありません。Sidekiqの設定を確認してください。" + software_version_check: + action: 利用可能な更新を確認 + message_html: Mastodonの更新が利用可能です。 software_version_critical_check: action: 利用可能な更新を見る message_html: 緊急のMastodonアップデートがあります。速やかに適用してください。 @@ -1144,7 +1148,10 @@ ja: use_security_key: セキュリティキーを使用 author_attribution: example_title: サンプルテキスト + hint_html: Mastodonでリンクが共有されたときのクレジットの表示方法を管理する。 + more_from_html: "%{name} のその他の情報" s_blog: "%{name} のブログ" + title: 著者の帰属 challenge: confirm: 続ける hint_html: 以後1時間はパスワードの再入力を求めません @@ -1334,6 +1341,32 @@ ja: merge_long: 現在のレコードを保持したまま新しいものを追加します overwrite: 上書き overwrite_long: 現在のレコードを新しいもので置き換えます + overwrite_preambles: + blocking_html: + other: あなたは%{filename}から最大%{count}のアカウントブロックリストを置き換えようとしています。 + bookmarks_html: + other: あなたは%{filename}から最大%{count}の投稿ブックマークを置き換えようとしています。 + domain_blocking_html: + other: あなたは%{filename}から最大%{count}のドメインドメインブロックリストを置き換えようとしています。 + following_html: + other: あなたは%{filename}から最大%{count}のアカウントフォローし他のすべてのユーザーのフォローを解除します。 + lists_html: + other: あなたは%{filename}の内容でリストを置き換えようとしています。最大%{count}のアカウントが新しいリストに追加されます。 + muting_html: + other: あなたは%{filename}から最大%{count}のアカウントミュートアカウントのリストを置き換えようとしています。 + preambles: + blocking_html: + other: あなたは%{filename}から最大%{count}のアカウントブロックしようとしています。 + bookmarks_html: + other: あなたは%{filename}から最大%{count}の投稿ブックマークに追加しようとしています。 + domain_blocking_html: + other: あなたは%{filename}から最大%{count}のドメインブロックしようとしています。 + following_html: + other: あなたは%{filename}から最大%{count}のアカウントフォローしようとしています。 + lists_html: + other: あなたは%{filename}から最大%{count}のアカウントリストに追加しようとしています。追加するリストがない場合は新しいリストが作成されます。 + muting_html: + other: あなたは%{filename}から最大%{count}のアカウントミュートしようとしています。 preface: 他のサーバーでエクスポートされたファイルから、フォロー/ブロックした情報をこのサーバー上のアカウントにインポートできます。 recent_imports: 最近のインポート states: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 615783738abb4b..4a39cce4ce336c 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -193,7 +193,7 @@ ko: destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 destroy_email_domain_block: 이메일 도메인 차단 삭제 - destroy_instance: 도메인 제거 + destroy_instance: 도메인 퍼지하기 destroy_ip_block: IP 규칙 삭제 destroy_status: 게시물 삭제 destroy_unavailable_domain: 사용 불가능한 도메인 제거 @@ -526,7 +526,7 @@ ko: title: 중재 private_comment: 비공개 주석 public_comment: 공개 주석 - purge: 제거 + purge: 퍼지 purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. title: 연합 total_blocked_by_us: 우리에게 차단 됨 @@ -1707,7 +1707,7 @@ ko: lost_followers: 잃은 팔로워 lost_follows: 잃은 팔로우 preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다. - purged: 이 서버에 대한 정보는 관리자에 의해 삭제되었습니다. + purged: 이 서버의 정보는 관리자가 퍼지하였습니다. type: 이벤트 statuses: attached: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 97fcf751802067..5a015b21924977 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -595,6 +595,7 @@ lad: resolve_description_html: No se tomaran aksyones kontra el kuento denunsiado, no se enrejistrara el amonestamiento, i se serrara el raporto. silence_description_html: El profil sera vizivle solo para akeyos ke ya lo sigan o lo bushken manualmente, limitando seriamente su alkanse. Siempre puede ser revertido. suspend_description_html: El profil i todos sus kontenidos seran inaksesivles asta ke sean enfin supremidos. La enteraksion kon el kuento sera emposivle. Reversivle durante un tiempo de 30 diyas. + actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam. actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido. add_to_report: Adjusta mas al raporto already_suspended_badges: @@ -697,6 +698,7 @@ lad: manage_appeals: Administra apelasiones manage_appeals_description: Permete a los utilizadores revizar apelasiones kontra aksyones de moderasyon manage_blocks: Administra blokos + manage_blocks_description: Permete a los utilizadores blokar los prokuradores de posta elektronika i los adresos IP manage_custom_emojis: Administra emojis personalizados manage_custom_emojis_description: Permete a los utilizadores editar emojis personalizados en el sirvidor manage_federation: Administra federasyon @@ -714,6 +716,7 @@ lad: manage_taxonomies: Administra etiketas manage_taxonomies_description: Permete a los utilizadores revizar el kontenido en trend i aktualizar la konfigurasyon de las etiketas manage_user_access: Administra akseso de utilizadores + manage_user_access_description: Permete a los utilizadores dezaktivar la autentifikasyon en dos pasos de otros utilizadores, trokar sus adreso de posta elektronika i restableser sus kod manage_users: Administra utilizadores manage_users_description: Permete a los utilizadores ver los peratim de otros utilizadores i realizar aksyones de moderasyon kontra eyos manage_webhooks: Administrar webhooks @@ -787,6 +790,7 @@ lad: destroyed_msg: Dosya supremida kon sukseso! software_updates: critical_update: Kritiko – por favor aktualiza pishin + description: Rekomendamos ke mantengas aktualizada tu enstalasyon de Mastodon para benefisyar de las muevas koreksyones y funksyones. Ademas, a vezes es kritiko aktualizar Mastodon punktualmente para evitar problemas de sigurita. Por estas razones, Mastodon komprova si ay aktualizasyones kada 30 minutos, i te avizara de akodro a tus preferensyas de avizos por posta elektronika. documentation_link: Ambezate mas release_notes: Notas sovre la versyon title: Aktualizasyones desponivles @@ -860,6 +864,9 @@ lad: message_html: No tienes definido dinguna regla del sirvidor. sidekiq_process_check: message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq + software_version_check: + action: Amostra aktualizasyones desponivles + message_html: Una aktualizasyon de Mastodon esta desponivle. software_version_critical_check: action: Amostra aktualizasyones desponivles message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin. @@ -1118,6 +1125,7 @@ lad: title: Kriya kuento de Mastodon en %{domain}. status: account_status: Estado del kuento + confirming: Bekleando konfirmasyon de posta elektronika. functional: Tu kuento esta kompletamente funksyonal. pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada. redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}. @@ -1638,6 +1646,7 @@ lad: delete: Efasa kuento development: Dezvelopamiento edit_profile: Edita profil + export: Eksporto featured_tags: Etiketas avaliadas import: Importo import_and_export: Importo i eksporto diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 5f90b575e777d0..908b15e851bc09 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -23,6 +23,7 @@ lv: other: Ziņas zero: Ziņu posts_tab_heading: Ziņas + self_follow_error: Nav ļauts sekot savam kontam admin: account_actions: action: Veikt darbību @@ -205,8 +206,10 @@ lv: destroy_user_role: Iznīcināt lomu disable_2fa_user: Atspējot 2FA disable_custom_emoji: Atspējot pielāgotu emocijzīmi + disable_sign_in_token_auth_user: Atspējot autentificēšanos ar e-pasta pilnvaru lietotājam disable_user: Atspējot Lietotāju enable_custom_emoji: Iespējot pielāgotu emocijzīmi + enable_sign_in_token_auth_user: Iespējot autentificēšanos ar e-pasta pilnvaru lietotājam enable_user: Ieslēgt Lietotāju memorialize_account: Saglabāt Kontu Piemiņai promote_user: Izceltt Lietotāju diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 5e3f1af89a5299..00617c4e3cc072 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -25,11 +25,11 @@ ast: password: Usa polo menos 8 caráuteres setting_aggregate_reblogs: Nun amuesa los artículos compartíos nuevos que yá se compartieren de recién (namás afeuta a los artículos compartíos d'agora) setting_always_send_emails: Los avisos nun se suelen unviar per corréu electrónicu si uses activamente Mastodon - setting_default_sensitive: El conteníu multimedia sensible anúbrese por defeutu y pue amosase al calcar nelli - setting_display_media_default: Anubrilu cuando se marque como sensible - setting_display_media_hide_all: Anubrilu siempres - setting_display_media_show_all: Amosalu siempres - setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia anubríu mas desenfonca los detalles + setting_default_sensitive: El conteníu multimedia sensible escuéndrese por defeutu y pue amosase al calcar nelli + setting_display_media_default: Escondelu cuando se marque como sensible + setting_display_media_hide_all: Escondelu siempre + setting_display_media_show_all: Amosalu siempre + setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia escondíu mas desenfonca los detalles featured_tag: name: 'Equí tán dalgunes de les etiquetes qu''usesti apocayá:' form_admin_settings: @@ -93,7 +93,7 @@ ast: expires_in: Caduca dempués de fields: Campos adicionales header: Semeya de la testera - irreversible: Escartar en cuentes d'anubrir + irreversible: Escartar en cuentes d'esconder locale: Llingua de la interfaz max_uses: Númberu máximu d'usos new_password: Contraseña nueva @@ -103,24 +103,24 @@ ast: phrase: Pallabra clave o fras setting_advanced_layout: Activar la interfaz web avanzada setting_aggregate_reblogs: Agrupar los artículos compartíos nes llinies de tiempu - setting_always_send_emails: Unviar siempres los avisos per corréu electrónicu + setting_always_send_emails: Unviar siempre los avisos per corréu electrónicu setting_auto_play_gif: Reproducir automáticamente los GIFs setting_boost_modal: Amosar el diálogu de confirmación enantes de compartir un artículu setting_default_language: Llingua de los artículos setting_default_privacy: Privacidá de los artículos - setting_default_sensitive: Marcar siempres tol conteníu como sensible + setting_default_sensitive: Marcar siempre tol conteníu como sensible setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar un artículu setting_disable_hover_cards: Desactivar la previsualización de perfiles al pasar el mur penriba setting_disable_swiping: Desactivar el movimientu de desplazamientu setting_display_media: Conteníu multimedia - setting_expand_spoilers: Espander siempres los artículos marcaos con alvertencies de conteníu - setting_hide_network: Anubrir les cuentes que sigas y te sigan + setting_expand_spoilers: Espander siempre los artículos marcaos con alvertencies de conteníu + setting_hide_network: Esconder les cuentes que sigas y te sigan setting_reduce_motion: Amenorgar el movimientu de les animaciones setting_system_font_ui: Usar la fonte predeterminada del sistema setting_theme: Estilu del sitiu setting_trends: Amosar les tendencies de güei setting_unfollow_modal: Amosar el diálogu de confirmación enantes de dexar de siguir a daquién - setting_use_blurhash: Facer que'l conteníu multimedia anubríu tenga dilíos coloríos + setting_use_blurhash: Facer que'l conteníu multimedia escondíu tenga dilíos coloríos setting_use_pending_items: Mou lentu severity: Gravedá sign_in_token_attempt: Códigu de seguranza diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index cb4a9041e81eb6..0d02969b4dbed7 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -76,6 +76,7 @@ eo: warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro form_admin_settings: activity_api_enabled: Nombroj de loke publikigitaj afiŝoj, aktivaj uzantoj kaj novaj registradoj en semajnaj siteloj + backups_retention_period: Uzantoj havas la kapablon generi arkivojn de siaj afiŝoj por elŝuti poste. Kiam estas agordita al pozitiva valoro, ĉi tiuj arkivoj estos aŭtomate forigitaj de via stokado post la specifita nombro da tagoj. bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj. closed_registrations_message: Montrita kiam registroj fermitas custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon. @@ -243,6 +244,7 @@ eo: backups_retention_period: Uzantoarkivretendauro bootstrap_timeline_accounts: Ĉiam rekomendi ĉi tiujn kontojn al novaj uzantoj closed_registrations_message: Kutima mesaĝo kiam registroj ne estas disponeblaj + content_cache_retention_period: Retenperiodo de fora enhavo custom_css: Propa CSS favicon: Favorikono mascot: Propa maskoto diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index bbb0523b174738..fdaa156e5d6265 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -3,6 +3,7 @@ fa: simple_form: hints: account: + attribution_domains_as_text: محافظت از اعتباردهی‌های اشتباه. discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. display_name: نام کامل یا باحالتان. fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. @@ -39,12 +40,14 @@ fa: text: فقط یک بار می‌توانید برای اخطار درخواست تجدیدنظر کنید defaults: autofollow: کسانی که از راه دعوت‌نامه عضو می‌شوند به طور خودکار پیگیر شما خواهند شد + avatar: یکی از قالب‌های WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد bot: این حساب بیشتر به طور خودکار فعالیت می‌کند و نظارت پیوسته‌ای روی آن وجود ندارد context: یک یا چند زمینه که پالایه باید در آن‌ها اعمال شود current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد email: به شما ایمیل تأییدی فرستاده خواهد شد + header: یکی از قالب‌های WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد inbox_url: نشانی صفحهٔ اصلی رله‌ای را که می‌خواهید به کار ببرید کپی کنید irreversible: فرسته‌های پالوده به طور برگشت‌ناپذیری ناپدید می‌شوند، حتا اگر بعدها پالایه برداشته شود locale: زبان واسط کاربری، رایانامه‌ها و آگاهی‌های ارسالی @@ -120,6 +123,7 @@ fa: url: جایی که رویدادها فرستاده می‌شوند labels: account: + attribution_domains_as_text: اجازه فقط به پایگاه‌های وب خاص discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف fields: name: برچسب diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 2c1bd6a08404ad..809d2eaa9a3acc 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -3,6 +3,7 @@ ja: simple_form: hints: account: + attribution_domains_as_text: 誤った帰属から保護します。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 display_name: フルネーム、ハンドルネームなど fields: ホームページ、代名詞、年齢など何でも構いません。 @@ -130,6 +131,7 @@ ja: name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます user: chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります + role: そのロールは、ユーザーが持つ権限を制御します。 user_role: color: UI 全体でロールの表示に使用される色(16進数RGB形式) highlighted: これによりロールが公開されます。 @@ -142,6 +144,7 @@ ja: url: イベントの送信先 labels: account: + attribution_domains_as_text: 特定のウェブサイトのみを許可します discoverable: アカウントを見つけやすくする fields: name: ラベル diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 297e96a2bdf125..c588c9c0718996 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -3,6 +3,7 @@ sv: simple_form: hints: account: + attribution_domains_as_text: Skyddar mot falska attributioner. discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare. display_name: Ditt fullständiga namn eller ditt roliga namn. fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill. @@ -143,6 +144,7 @@ sv: url: Dit händelser kommer skickas labels: account: + attribution_domains_as_text: Tillåt endast specifika webbplatser discoverable: Presentera profil och inlägg med upptäcktsalgoritmer fields: name: Etikett diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 010bb262adcd27..8330ec3de452a6 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -43,7 +43,7 @@ vi: avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật context: Chọn những nơi mà bộ lọc sẽ áp dụng - current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại + current_password: Để bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) email: Bạn sẽ được gửi một email xác minh @@ -290,7 +290,7 @@ vi: sign_up_requires_approval: Giới hạn đăng ký severity: Mức độ notification_emails: - appeal: Ai đó kháng cáo kiểm duyệt + appeal: Ai đó khiếu nại kiểm duyệt digest: Gửi email định kỳ favourite: Ai đó thích tút của bạn follow: Ai đó theo dõi bạn diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 0b276393a670a3..fdeb959f88db8f 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -21,6 +21,7 @@ sq: one: Mesazh other: Mesazhe posts_tab_heading: Mesazhe + self_follow_error: Ndjekja e llogarisë personale nuk lejohet admin: account_actions: action: Kryeje veprimin diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 0d19d17c3b1935..0823e658a8f852 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -21,10 +21,12 @@ sv: one: Inlägg other: Inlägg posts_tab_heading: Inlägg + self_follow_error: Det är inte tillåtet att följa ditt eget konto admin: account_actions: action: Utför åtgärd already_silenced: Detta konto är redan begränsat. + already_suspended: Detta konto är redan avstängt. title: Utför aktivitet för moderering på %{acct} account_moderation_notes: create: Lämna kommentar @@ -85,7 +87,7 @@ sv: remote: Avlägsen title: Plats login_status: Inloggningsstatus - media_attachments: Media bifogade filer + media_attachments: Mediebilagor memorialize: Förvandla till ett memoriam memorialized: Memorialiserad memorialized_msg: Omvandlingen av %{username} till ett minneskonto lyckades @@ -861,6 +863,7 @@ sv: sidekiq_process_check: message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration software_version_check: + action: Se tillgängliga uppdateringar message_html: En Mastodon-uppdatering är tillgänglig. software_version_critical_check: action: Se tillgängliga uppdateringar @@ -876,13 +879,21 @@ sv: message_html: "Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen." tags: moderation: + not_usable: Inte användbar + pending_review: Väntar på granskning + review_requested: Granskning begärd reviewed: Granskat title: Status trendable: + unreviewed: Ogranskad + usable: Användbar name: Namn + newest: Nyaste + oldest: Äldsta reset: Återställ review: Granskningsstatus search: Sök + title: Hashtaggar updated_msg: Hashtagg-inställningarna har uppdaterats title: Administration trends: @@ -1034,6 +1045,7 @@ sv: application_mailer: notification_preferences: Ändra e-postpreferenser salutation: "%{name}," + settings: 'Ändra e-postinställningar: %{link}' unsubscribe: Avprenumerera view: 'Granska:' view_profile: Visa profil @@ -1053,6 +1065,7 @@ sv: hint_html: En sista sak till! Vi måste bekräfta att du är en människa (för att hålla borta skräpinlägg!). Lös CAPTCHA nedan och klicka på "Fortsätt". title: Säkerhetskontroll confirmations: + awaiting_review: Din e-postadress är bekräftad! %{domain} personalen granskar nu din registrering. Du kommer att få ett e-postmeddelande om de godkänner ditt konto! awaiting_review_title: Din registrering är under granskning clicking_this_link: klicka på denna länk login_link: logga in @@ -1060,6 +1073,7 @@ sv: redirect_to_app_html: Du borde ha omdirigerats till appen %{app_name}. Om det inte hände, försök att %{clicking_this_link} eller återgå manuellt till appen. registration_complete: Din registrering på %{domain} är nu slutförd! welcome_title: Välkommen %{name}! + wrong_email_hint: Om e-postadressen inte är rätt, kan du ändra den i kontoinställningarna. delete_account: Radera konto delete_account_html: Om du vill radera ditt konto kan du fortsätta här. Du kommer att bli ombedd att bekräfta. description: @@ -1080,6 +1094,7 @@ sv: or_log_in_with: Eller logga in med privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn progress: + confirm: Bekräfta e-postadress details: Dina uppgifter review: Vår recension rules: Acceptera regler @@ -1101,8 +1116,10 @@ sv: security: Säkerhet set_new_password: Skriv in nytt lösenord setup: + email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel. email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här. link_not_received: Fick du ingen länk? + new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter! title: Kolla din inkorg sign_in: preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här. @@ -1122,6 +1139,9 @@ sv: use_security_key: Använd säkerhetsnyckel author_attribution: example_title: Exempeltext + more_from_html: Mer från %{name} + s_blog: "%{name}s blogg" + title: Författarattribution challenge: confirm: Fortsätt hint_html: "Tips: Vi frågar dig inte efter ditt lösenord igen under nästkommande timme." @@ -1402,6 +1422,7 @@ sv: media_attachments: validations: images_and_video: Det går inte att bifoga en video till ett inlägg som redan innehåller bilder + not_found: Media %{ids} hittades inte eller är redan anslutet till ett annat inlägg not_ready: Kan inte bifoga filer som inte har behandlats färdigt. Försök igen om ett ögonblick! too_many: Det går inte att bifoga mer än 4 filer migrations: @@ -1883,6 +1904,7 @@ sv: instructions_html: Kopiera och klistra in koden nedan in i HTML-koden på din webbplats. Lägg sedan till adressen till din webbplats i ett av de extra fälten på din profil från fliken "Redigera profil" och spara ändringar. verification: Bekräftelse verified_links: Dina verifierade länkar + website_verification: Webbplats verifiering webauthn_credentials: add: Lägg till ny säkerhetsnyckel create: diff --git a/config/locales/th.yml b/config/locales/th.yml index c6ba60736d8f4f..dd57a8df7f5ee2 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -19,6 +19,7 @@ th: posts: other: โพสต์ posts_tab_heading: โพสต์ + self_follow_error: ไม่อนุญาตการติดตามบัญชีของคุณเอง admin: account_actions: action: ทำการกระทำ diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 7c30c5b127b043..097e573efaa584 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -33,7 +33,7 @@ vi: accounts: add_email_domain_block: Chặn tên miền email approve: Phê duyệt - approved_msg: Đã phê duyệt đăng ký %{username} + approved_msg: Đã chấp nhận đăng ký %{username} are_you_sure: Bạn có chắc không? avatar: Ảnh đại diện by_domain: Máy chủ @@ -132,7 +132,7 @@ vi: resubscribe: Đăng ký lại role: Vai trò search: Tìm kiếm - search_same_email_domain: Những người khác với cùng tên miền email + search_same_email_domain: Những người có cùng tên miền email search_same_ip: Tra cứu IP security: Bảo mật security_measures: @@ -165,49 +165,49 @@ vi: unsuspended_msg: Đã kích hoạt lại %{username} thành công username: Tài khoản view_domain: Xem mô tả tài khoản này - warn: Nhắc + warn: Cảnh cáo web: Web whitelisted: Danh sách trắng action_logs: action_types: - approve_appeal: Chấp nhận kháng cáo - approve_user: Duyệt đăng ký + approve_appeal: Chấp nhận khiếu nại + approve_user: Chấp nhận đăng ký assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email người dùng change_role_user: Đổi vai trò confirm_user: Xác minh create_account_warning: Cảnh cáo create_announcement: Tạo thông báo mới - create_canonical_email_block: Chặn địa chỉ email + create_canonical_email_block: Chặn địa chỉ email biến thể create_custom_emoji: Tạo emoji create_domain_allow: Cho phép máy chủ create_domain_block: Chặn máy chủ - create_email_domain_block: Tạo chặn tên miền email + create_email_domain_block: Chặn tên miền email create_ip_block: Chặn IP - create_unavailable_domain: Ngừng liên hợp + create_unavailable_domain: Bỏ liên hợp create_user_role: Tạo vai trò demote_user: Hạ vai trò destroy_announcement: Xóa thông báo - destroy_canonical_email_block: Bỏ chặn địa chỉ email + destroy_canonical_email_block: Bỏ chặn địa chỉ email biến thể destroy_custom_emoji: Xóa emoji - destroy_domain_allow: Bỏ thanh trừng máy chủ + destroy_domain_allow: Bỏ máy chủ cho phép destroy_domain_block: Bỏ chặn máy chủ destroy_email_domain_block: Bỏ chặn tên miền email destroy_instance: Thanh trừng máy chủ destroy_ip_block: Bỏ chặn IP destroy_status: Xóa tút - destroy_unavailable_domain: Tái liên hợp + destroy_unavailable_domain: Cho phép liên hợp destroy_user_role: Xóa vai trò disable_2fa_user: Vô hiệu hóa 2FA disable_custom_emoji: Vô hiệu hóa emoji disable_sign_in_token_auth_user: Tắt xác minh bằng email cho người dùng disable_user: Vô hiệu hóa đăng nhập - enable_custom_emoji: Duyệt emoji + enable_custom_emoji: Cho phép emoji enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng enable_user: Cho phép đăng nhập - memorialize_account: Đánh dấu tưởng niệm + memorialize_account: Gán tưởng niệm promote_user: Nâng vai trò - reject_appeal: Từ chối kháng cáo + reject_appeal: Từ chối khiếu nại reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo @@ -217,7 +217,7 @@ vi: sensitive_account: Gán nhạy cảm silence_account: Gán ẩn suspend_account: Gán vô hiệu hóa - unassigned_report: Báo cáo chưa xử lý + unassigned_report: Bỏ xử lý báo cáo unblock_email_account: Bỏ chặn địa chỉ email unsensitive_account: Bỏ nhạy cảm unsilence_account: Bỏ ẩn @@ -230,64 +230,64 @@ vi: update_status: Cập nhật tút update_user_role: Cập nhật vai trò actions: - approve_appeal_html: "%{name} đã duyệt kháng cáo của %{target}" + approve_appeal_html: "%{name} đã chấp nhận khiếu nại từ %{target}" approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}" - assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}" + assigned_to_self_report_html: "%{name} đã tự xử lý báo cáo %{target}" change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}" - change_role_user_html: "%{name} đã thay đổi vai trò %{target}" + change_role_user_html: "%{name} đã thay đổi vai trò của %{target}" confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}" create_account_warning_html: "%{name} đã cảnh cáo %{target}" - create_announcement_html: "%{name} tạo thông báo mới %{target}" - create_canonical_email_block_html: "%{name} đã chặn địa chỉ email với hash %{target}" + create_announcement_html: "%{name} đã tạo thông báo %{target}" + create_canonical_email_block_html: "%{name} đã chặn địa chỉ email biến thể %{target}" create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" - create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}" - create_domain_block_html: "%{name} chặn máy chủ %{target}" + create_domain_allow_html: "%{name} đã bật liên hợp với %{target}" + create_domain_block_html: "%{name} đã chặn máy chủ %{target}" create_email_domain_block_html: "%{name} đã chặn tên miền email %{target}" create_ip_block_html: "%{name} đã chặn IP %{target}" - create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}" + create_unavailable_domain_html: "%{name} đã bỏ liên hợp với máy chủ %{target}" create_user_role_html: "%{name} đã tạo vai trò %{target}" demote_user_html: "%{name} đã hạ vai trò của %{target}" - destroy_announcement_html: "%{name} xóa thông báo %{target}" - destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email với hash %{target}" + destroy_announcement_html: "%{name} đã xóa thông báo %{target}" + destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email biến thể %{target}" destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}" destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}" - destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}" + destroy_domain_block_html: "%{name} đã bỏ chặn máy chủ %{target}" destroy_email_domain_block_html: "%{name} đã bỏ chặn email %{target}" - destroy_instance_html: "%{name} thanh trừng máy chủ %{target}" - destroy_ip_block_html: "%{name} bỏ chặn IP %{target}" + destroy_instance_html: "%{name} đã thanh trừng máy chủ %{target}" + destroy_ip_block_html: "%{name} đã bỏ chặn IP %{target}" destroy_status_html: "%{name} đã xóa tút của %{target}" - destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}" + destroy_unavailable_domain_html: "%{name} tiếp tục liên hợp với máy chủ %{target}" destroy_user_role_html: "%{name} đã xóa vai trò %{target}" disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}" disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} đã tắt xác minh email của %{target}" - disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}" - enable_custom_emoji_html: "%{name} cho phép emoji %{target}" + disable_user_html: "%{name} đã vô hiệu hóa đăng nhập %{target}" + enable_custom_emoji_html: "%{name} đã cho phép emoji %{target}" enable_sign_in_token_auth_user_html: "%{name} đã bật xác minh email của %{target}" - enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}" + enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}" memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" promote_user_html: "%{name} đã nâng vai trò của %{target}" - reject_appeal_html: "%{name} đã từ chối kháng cáo của %{target}" + reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}" reject_user_html: "%{name} đã từ chối đăng ký từ %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" - reopen_report_html: "%{name} mở lại báo cáo %{target}" + reopen_report_html: "%{name} đã mở lại báo cáo %{target}" resend_user_html: "%{name} đã gửi lại email xác minh cho %{target}" reset_password_user_html: "%{name} đã đặt lại mật khẩu của %{target}" resolve_report_html: "%{name} đã xử lý báo cáo %{target}" - sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm" + sensitive_account_html: "%{name} đã gán nội dung của %{target} là nhạy cảm" silence_account_html: "%{name} đã ẩn %{target}" suspend_account_html: "%{name} đã vô hiệu hóa %{target}" - unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí" - unblock_email_account_html: "%{name} bỏ chặn địa chỉ email của %{target}" - unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường" + unassigned_report_html: "%{name} đã thôi xử lý báo cáo %{target}" + unblock_email_account_html: "%{name} đã bỏ chặn địa chỉ email của %{target}" + unsensitive_account_html: "%{name} đã gán nội dung của %{target} là bình thường" unsilence_account_html: "%{name} đã bỏ ẩn %{target}" unsuspend_account_html: "%{name} đã bỏ vô hiệu hóa %{target}" - update_announcement_html: "%{name} cập nhật thông báo %{target}" + update_announcement_html: "%{name} đã cập nhật thông báo %{target}" update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}" - update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}" - update_ip_block_html: "%{name} cập nhật chặn IP %{target}" - update_report_html: "%{name} cập nhật báo cáo %{target}" - update_status_html: "%{name} cập nhật tút của %{target}" + update_domain_block_html: "%{name} đã cập nhật chặn máy chủ %{target}" + update_ip_block_html: "%{name} đã cập nhật chặn IP %{target}" + update_report_html: "%{name} đã cập nhật báo cáo %{target}" + update_status_html: "%{name} đã cập nhật tút của %{target}" update_user_role_html: "%{name} đã cập nhật vai trò %{target}" deleted_account: tài khoản đã xóa empty: Không tìm thấy bản ghi. @@ -354,7 +354,7 @@ vi: new_users: người mới opened_reports: báo cáo pending_appeals_html: - other: "%{count} kháng cáo đang chờ" + other: "%{count} khiếu nại đang chờ" pending_reports_html: other: "%{count} báo cáo đang chờ" pending_tags_html: @@ -372,7 +372,7 @@ vi: disputes: appeals: empty: Không tìm thấy. - title: Kháng cáo + title: Khiếu nại domain_allows: add_new: Cho phép liên hợp với máy chủ created_msg: Máy chủ đã được kích hoạt liên hợp thành công @@ -692,8 +692,8 @@ vi: invite_users_description: Cho phép mời những người mới vào máy chủ manage_announcements: Quản lý thông báo manage_announcements_description: Cho phép quản lý thông báo trên máy chủ - manage_appeals: Quản lý kháng cáo - manage_appeals_description: Cho phép thành viên kháng cáo đối với các hành động kiểm duyệt + manage_appeals: Quản lý khiếu nại + manage_appeals_description: Cho phép thành viên khiếu nại đối với các hành động kiểm duyệt manage_blocks: Quản lý chặn manage_blocks_description: Cho phép người dùng tự chặn các nhà cung cấp email và địa chỉ IP manage_custom_emojis: Quản lý emoji @@ -819,7 +819,7 @@ vi: original_status: Tút gốc reblogs: Lượt đăng lại status_changed: Tút đã sửa - title: Toàn bộ tút + title: Tất cả tút trending: Xu hướng visibility: Hiển thị with_media: Có media @@ -1008,7 +1008,7 @@ vi: silence: hạn chế tài khoản của họ suspend: vô hiệu hóa tài khoản của họ body: "%{target} đã khiếu nại vì bị %{action_taken_by} %{type} vào %{date}. Họ cho biết:" - next_steps: Bạn có thể duyệt kháng cáo để hủy kiểm duyệt hoặc bỏ qua. + next_steps: Bạn có thể chấp nhận khiếu nại để bỏ kiểm duyệt, hoặc không. subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}" new_critical_software_updates: body: Các phiên bản quan trọng mới của Mastodon đã được phát hành, bạn nên cập nhật càng sớm càng tốt! @@ -1149,7 +1149,7 @@ vi: author_attribution: example_title: Văn bản mẫu hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon. - more_from_html: Thêm từ %{name} + more_from_html: Viết bởi %{name} s_blog: "%{name}'s Blog" title: Ghi nhận người đăng challenge: @@ -1205,12 +1205,12 @@ vi: appealed_msg: Khiếu nại của bạn đã được gửi đi. Nếu nó được chấp nhận, bạn sẽ nhận được thông báo. appeals: submit: Gửi khiếu nại - approve_appeal: Duyệt kháng cáo + approve_appeal: Chấp nhận khiếu nại associated_report: Báo cáo đính kèm created_at: Ngày description_html: Đây là những cảnh cáo và áp đặt kiểm duyệt đối với bạn bởi đội ngũ %{instance}. recipient: Người nhận - reject_appeal: Từ chối kháng cáo + reject_appeal: Từ chối khiếu nại status: 'Tút #%{id}' status_removed: Tút này đã được xóa khỏi hệ thống title: "%{action} từ %{date}" @@ -1386,10 +1386,10 @@ vi: muting: Đang nhập người đã ẩn type: Kiểu nhập type_groups: - constructive: Lượt theo dõi và những thứ đã lưu - destructive: Lượt chặn và ẩn + constructive: Theo dõi và lưu + destructive: Chặn và ẩn types: - blocking: Danh sách chặn + blocking: Danh sách người đã chặn bookmarks: Tút đã lưu domain_blocking: Danh sách máy chủ đã chặn following: Danh sách người theo dõi @@ -1747,7 +1747,7 @@ vi: ignore_favs: Bỏ qua số lượt thích ignore_reblogs: Bỏ qua lượt đăng lại interaction_exceptions: Ngoại lệ dựa trên tương tác - interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt. + interaction_exceptions_explanation: Lưu ý là không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng bị giảm lượt thích hoặc đăng lại, dù đã từng đạt. keep_direct: Giữ lại tin nhắn keep_direct_hint: Không xóa tin nhắn của bạn keep_media: Giữ lại những tút có đính kèm media @@ -1778,7 +1778,7 @@ vi: sensitive_content: NSFW strikes: errors: - too_late: Đã quá trễ để kháng cáo + too_late: Đã quá trễ để khiếu nại tags: does_not_match_previous_name: không khớp với tên trước themes: @@ -1852,8 +1852,8 @@ vi: disable: Bạn không còn có thể sử dụng tài khoản của mình, nhưng hồ sơ của bạn và dữ liệu khác vẫn còn nguyên. Bạn có thể yêu cầu sao lưu dữ liệu của mình, thay đổi cài đặt tài khoản hoặc xóa tài khoản của bạn. mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm. sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột. - silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn. - suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa. + silence: Bạn vẫn có thể sử dụng tài khoản của mình và người khác vẫn có thể theo dõi bạn, nhưng chỉ những người đã theo dõi bạn mới thấy tút của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. + suspend: Tài khoản của bạn, hồ sơ và các dữ liệu khác sẽ không thể truy cập được nữa. Bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn trong vòng 30 ngày, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để phòng khi bạn được bỏ vô hiệu hóa. reason: 'Lý do:' statuses: 'Tút vi phạm:' subject: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 26548046974a6b..025bc2b6dd100d 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -596,7 +596,7 @@ zh-CN: actions_no_posts: 该举报没有相关嘟文可供删除 add_to_report: 增加更多举报内容 already_suspended_badges: - local: 已经在此服务器上暂停 + local: 已在此服务器上被封禁 remote: 已在其所属服务器被封禁 are_you_sure: 你确定吗? assign_to_self: 接管 @@ -1699,8 +1699,8 @@ zh-CN: severed_relationships: download: 下载 (%{count}) event_type: - account_suspension: 账户被封禁 (%{target_name}) - domain_block: 服务器被封禁 (%{target_name}) + account_suspension: 封禁账户 (%{target_name}) + domain_block: 封禁服务器 (%{target_name}) user_domain_block: 你屏蔽了 %{target_name} lost_followers: 失去的关注者 lost_follows: 失去的关注 @@ -1876,7 +1876,7 @@ zh-CN: apps_android_action: 从 Google Play 下载 apps_ios_action: 从 App Store 下载 apps_step: 下载我们的官方应用。 - apps_title: Mastodon应用 + apps_title: Mastodon 应用 checklist_subtitle: 让我们带你开启这片社交新天地: checklist_title: 欢迎清单 edit_profile_action: 个性化 @@ -1884,16 +1884,16 @@ zh-CN: edit_profile_title: 个性化你的个人资料 explanation: 下面是几个小贴士,希望它们能帮到你 feature_action: 了解更多 - feature_audience: Mastodon为你提供了无需中间商即可管理受众的独特可能。Mastodon可被部署在你自己的基础设施上,允许你关注其它任何Mastodon在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。 + feature_audience: Mastodon 为你提供了无需中间商即可管理受众的独特可能。Mastodon 可被部署在你自己的基础设施上,允许你关注其它任何 Mastodon 在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。 feature_audience_title: 放手去建立起你的受众 feature_control: 你最清楚你想在你自己的主页中看到什么动态。没有算法或广告浪费你的时间。你可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让你的互联网的角落更合自己的心意。 feature_control_title: 掌控自己的时间线 - feature_creativity: Mastodon支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。 + feature_creativity: Mastodon 支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。 feature_creativity_title: 无与伦比的创造力 - feature_moderation: Mastodon将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。 + feature_moderation: Mastodon 将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。 feature_moderation_title: 管理,本应如此 follow_action: 关注 - follow_step: 关注有趣的人,这就是Mastodon的意义所在。 + follow_step: 关注有趣的人,这就是 Mastodon 的意义所在。 follow_title: 个性化你的首页动态 follows_subtitle: 关注知名账户 follows_title: 推荐关注 @@ -1907,8 +1907,8 @@ zh-CN: post_step: 向世界打个招呼吧。 post_title: 发布你的第一条嘟文 share_action: 分享 - share_step: 让你的朋友知道如何在Mastodon找到你。 - share_title: 分享你的Mastodon个人资料 + share_step: 让你的朋友知道如何在 Mastodon 找到你。 + share_title: 分享你的 Mastodon 个人资料 sign_in_action: 登录 subject: 欢迎来到 Mastodon title: "%{name},欢迎你的加入!" From f2378aca4001198f60d52feb8d24a281a705a88a Mon Sep 17 00:00:00 2001 From: kenkiku1021 Date: Tue, 15 Oct 2024 18:28:07 +0900 Subject: [PATCH 278/467] add SWIFT object storage uri to CSP media hosts (#32439) Co-authored-by: Claire --- app/lib/content_security_policy.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/lib/content_security_policy.rb b/app/lib/content_security_policy.rb index 0b60b0d98c9ef1..c764d1856d3319 100644 --- a/app/lib/content_security_policy.rb +++ b/app/lib/content_security_policy.rb @@ -36,7 +36,7 @@ def url_from_configured_asset_host end def cdn_host_value - s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host + s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host || swift_object_url end def paperclip_root_url @@ -72,6 +72,14 @@ def s3_hostname_host host_to_url ENV.fetch('S3_HOSTNAME', nil) end + def swift_object_url + url = ENV.fetch('SWIFT_OBJECT_URL', nil) + return if url.blank? || !url.start_with?('https://') + + url += '/' unless url.end_with?('/') + url + end + def uri_from_configuration_and_string(host_string) Addressable::URI.parse("#{host_protocol}://#{host_string}").tap do |uri| uri.path += '/' unless uri.path.blank? || uri.path.end_with?('/') From 5e4cc1a39c86d75995dc0a86a021085adc3a8c63 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 15 Oct 2024 11:38:04 +0200 Subject: [PATCH 279/467] Fix follow recommendation carrousel scrolling on RTL layouts, for real (#32505) --- .../components/inline_follow_suggestions.jsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx index 14ea6bd99688cc..3269b5a497fb60 100644 --- a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx +++ b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx @@ -151,8 +151,13 @@ export const InlineFollowSuggestions = ({ hidden }) => { return; } - setCanScrollLeft(bodyRef.current.scrollLeft > 0); - setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + if (getComputedStyle(bodyRef.current).direction === 'rtl') { + setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth); + setCanScrollRight(bodyRef.current.scrollLeft < 0); + } else { + setCanScrollLeft(bodyRef.current.scrollLeft > 0); + setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + } }, [setCanScrollRight, setCanScrollLeft, bodyRef]); const handleDismiss = useCallback(() => { From 5afdb81b366ed423588e0a29c146539978180de0 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 15 Oct 2024 06:01:21 -0400 Subject: [PATCH 280/467] Fix reblog icons on account media view (#32506) --- .../features/picture_in_picture/components/footer.jsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx index 300c8dd5b3ef05..5c83f99b54f55d 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx @@ -14,6 +14,8 @@ import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react'; +import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react'; import { replyCompose } from 'mastodon/actions/compose'; import { toggleReblog, toggleFavourite } from 'mastodon/actions/interactions'; import { openModal } from 'mastodon/actions/modal'; @@ -159,22 +161,26 @@ class Footer extends ImmutablePureComponent { replyTitle = intl.formatMessage(messages.replyAll); } - let reblogTitle = ''; + let reblogTitle, reblogIconComponent; if (status.get('reblogged')) { reblogTitle = intl.formatMessage(messages.cancel_reblog_private); + reblogIconComponent = publicStatus ? RepeatIcon : RepeatPrivateIcon; } else if (publicStatus) { reblogTitle = intl.formatMessage(messages.reblog); + reblogIconComponent = RepeatIcon; } else if (reblogPrivate) { reblogTitle = intl.formatMessage(messages.reblog_private); + reblogIconComponent = RepeatPrivateIcon; } else { reblogTitle = intl.formatMessage(messages.cannot_reblog); + reblogIconComponent = RepeatDisabledIcon; } return (
- + {withOpenButton && }
From a1eb1a964277ce72a4063de1738ef4b6eda3a796 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 15 Oct 2024 13:49:15 +0200 Subject: [PATCH 281/467] Update issue templates ot use the new GH Types, and add Troubleshooting template (#32484) Co-authored-by: Matt Jankowski --- .github/ISSUE_TEMPLATE/1.web_bug_report.yml | 13 ++-- .../ISSUE_TEMPLATE/2.server_bug_report.yml | 13 ++-- .github/ISSUE_TEMPLATE/3.troubleshooting.yml | 74 +++++++++++++++++++ ...ture_request.yml => 4.feature_request.yml} | 2 +- 4 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/3.troubleshooting.yml rename .github/ISSUE_TEMPLATE/{3.feature_request.yml => 4.feature_request.yml} (96%) diff --git a/.github/ISSUE_TEMPLATE/1.web_bug_report.yml b/.github/ISSUE_TEMPLATE/1.web_bug_report.yml index 20e27d103cdb07..f897a7d7da434e 100644 --- a/.github/ISSUE_TEMPLATE/1.web_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1.web_bug_report.yml @@ -1,6 +1,7 @@ name: Bug Report (Web Interface) -description: If you are using Mastodon's web interface and something is not working as expected -labels: [bug, 'status/to triage', 'area/web interface'] +description: There is a problem using Mastodon's web interface. +labels: ['status/to triage', 'area/web interface'] +type: Bug body: - type: markdown attributes: @@ -47,8 +48,8 @@ body: attributes: label: Mastodon version description: | - This is displayed at the bottom of the About page, eg. `v4.1.2+nightly-20230627` - placeholder: v4.1.2 + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 validations: required: true - type: input @@ -56,7 +57,7 @@ body: label: Browser name and version description: | What browser are you using when getting this bug? Please specify the version as well. - placeholder: Firefox 105.0.3 + placeholder: Firefox 131.0.0 validations: required: true - type: input @@ -64,7 +65,7 @@ body: label: Operating system description: | What OS are you running? Please specify the version as well. - placeholder: macOS 13.4.1 + placeholder: macOS 15.0.1 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml index 49d5f57209fd80..a66f5c1076d504 100644 --- a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml @@ -1,7 +1,8 @@ name: Bug Report (server / API) description: | - If something is not working as expected, but is not from using the web interface. -labels: [bug, 'status/to triage'] + There is a problem with the HTTP server, REST API, ActivityPub interaction, etc. +labels: ['status/to triage'] +type: 'Bug' body: - type: markdown attributes: @@ -48,8 +49,8 @@ body: attributes: label: Mastodon version description: | - This is displayed at the bottom of the About page, eg. `v4.1.2+nightly-20230627` - placeholder: v4.1.2 + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 validations: required: false - type: textarea @@ -59,7 +60,7 @@ body: Any additional technical details you may have, like logs or error traces value: | If this is happening on your own Mastodon server, please fill out those: - - Ruby version: (from `ruby --version`, eg. v3.1.2) - - Node.js version: (from `node --version`, eg. v18.16.0) + - Ruby version: (from `ruby --version`, eg. v3.3.5) + - Node.js version: (from `node --version`, eg. v20.18.0) validations: required: false diff --git a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml new file mode 100644 index 00000000000000..eeb74b160b1040 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml @@ -0,0 +1,74 @@ +name: Deployment troubleshooting +description: | + You are a server administrator and you are encountering a technical issue during installation, upgrade or operations of Mastodon. +labels: ['status/to triage'] +type: 'Troubleshooting' +body: + - type: markdown + attributes: + value: | + Make sure that you are submitting a new bug that was not previously reported or already fixed. + + Please use a concise and distinct title for the issue. + - type: textarea + attributes: + label: Steps to reproduce the problem + description: What were you trying to do? + value: | + 1. + 2. + 3. + ... + validations: + required: true + - type: input + attributes: + label: Expected behaviour + description: What should have happened? + validations: + required: true + - type: input + attributes: + label: Actual behaviour + description: What happened? + validations: + required: true + - type: textarea + attributes: + label: Detailed description + validations: + required: false + - type: input + attributes: + label: Mastodon instance + description: The address of the Mastodon instance where you experienced the issue + placeholder: mastodon.social + validations: + required: true + - type: input + attributes: + label: Mastodon version + description: | + This is displayed at the bottom of the About page, eg. `v4.4.0-alpha.1` + placeholder: v4.3.0 + validations: + required: false + - type: textarea + attributes: + label: Environment + description: | + Details about your environment, like how Mastodon is deployed, if containers are used, version numbers, etc. + value: | + Please at least include those informations: + - Operating system: (eg. Ubuntu 22.04) + - Ruby version: (from `ruby --version`, eg. v3.3.5) + - Node.js version: (from `node --version`, eg. v20.18.0) + validations: + required: false + - type: textarea + attributes: + label: Technical details + description: | + Any additional technical details you may have, like logs or error traces + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/3.feature_request.yml b/.github/ISSUE_TEMPLATE/4.feature_request.yml similarity index 96% rename from .github/ISSUE_TEMPLATE/3.feature_request.yml rename to .github/ISSUE_TEMPLATE/4.feature_request.yml index 2cabcf61e08ecc..7146b4f8a3e436 100644 --- a/.github/ISSUE_TEMPLATE/3.feature_request.yml +++ b/.github/ISSUE_TEMPLATE/4.feature_request.yml @@ -1,6 +1,6 @@ name: Feature Request description: I have a suggestion -labels: [suggestion] +type: Suggestion body: - type: markdown attributes: From d74c2c583a0bee57c042bf957ee864e17b53472a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 08:48:10 -0400 Subject: [PATCH 282/467] Extend spec coverage for `Poll` model (#32500) --- spec/models/poll_spec.rb | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 736f3615d0d3c8..66f521ab3f64f5 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Poll do - describe 'scopes' do + describe 'Scopes' do let(:status) { Fabricate(:status) } let(:attached_poll) { Fabricate(:poll, status: status) } let(:not_attached_poll) do @@ -13,7 +13,7 @@ end end - describe 'attached' do + describe '.attached' do it 'finds the correct records' do results = described_class.attached @@ -21,7 +21,7 @@ end end - describe 'unattached' do + describe '.unattached' do it 'finds the correct records' do results = described_class.unattached @@ -30,11 +30,23 @@ end end - describe 'validations' do - context 'when not valid' do - subject { Fabricate.build(:poll) } - - it { is_expected.to validate_presence_of(:expires_at) } + describe '#reset_votes!' do + let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 } + let!(:vote) { Fabricate :poll_vote, poll: } + + it 'resets vote data and deletes votes' do + expect { poll.reset_votes! } + .to change(poll, :cached_tallies).to([0, 0]) + .and change(poll, :votes_count).to(0) + .and(change(poll, :voters_count).to(0)) + expect { vote.reload } + .to raise_error(ActiveRecord::RecordNotFound) end end + + describe 'Validations' do + subject { Fabricate.build(:poll) } + + it { is_expected.to validate_presence_of(:expires_at) } + end end From 0cc21f1dedf36111ac59842b1db5355d70c316e8 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 08:54:56 -0400 Subject: [PATCH 283/467] Reduce factory creation (132 -> 40) in lib/vacuum/* specs (#32498) --- spec/lib/vacuum/access_tokens_vacuum_spec.rb | 34 +++++++------------ spec/lib/vacuum/backups_vacuum_spec.rb | 13 +++---- spec/lib/vacuum/feeds_vacuum_spec.rb | 4 +-- .../vacuum/media_attachments_vacuum_spec.rb | 4 +-- spec/lib/vacuum/preview_cards_vacuum_spec.rb | 22 ++++++------ spec/lib/vacuum/statuses_vacuum_spec.rb | 22 +++++------- 6 files changed, 41 insertions(+), 58 deletions(-) diff --git a/spec/lib/vacuum/access_tokens_vacuum_spec.rb b/spec/lib/vacuum/access_tokens_vacuum_spec.rb index 54760c41bd4531..8768f6b2dc170c 100644 --- a/spec/lib/vacuum/access_tokens_vacuum_spec.rb +++ b/spec/lib/vacuum/access_tokens_vacuum_spec.rb @@ -14,32 +14,24 @@ let!(:expired_access_grant) { Fabricate(:access_grant, expires_in: 59.minutes.to_i, created_at: 1.hour.ago) } let!(:active_access_grant) { Fabricate(:access_grant) } - before do + it 'deletes revoked/expired access tokens and revoked/expired grants, but preserves active tokens/grants' do subject.perform - end - - it 'deletes revoked access tokens' do - expect { revoked_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'deletes expired access tokens' do - expect { expired_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end - it 'deletes revoked access grants' do - expect { revoked_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes expired access grants' do - expect { expired_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete active access tokens' do - expect { active_access_token.reload }.to_not raise_error - end + expect { active_access_token.reload } + .to_not raise_error - it 'does not delete active access grants' do - expect { active_access_grant.reload }.to_not raise_error + expect { active_access_grant.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/backups_vacuum_spec.rb b/spec/lib/vacuum/backups_vacuum_spec.rb index 867dbe4020c1f0..4a025352cbf7b7 100644 --- a/spec/lib/vacuum/backups_vacuum_spec.rb +++ b/spec/lib/vacuum/backups_vacuum_spec.rb @@ -11,16 +11,13 @@ let!(:expired_backup) { Fabricate(:backup, created_at: (retention_period + 1.day).ago) } let!(:current_backup) { Fabricate(:backup) } - before do + it 'deletes backups past the retention period but preserves those within the period' do subject.perform - end - - it 'deletes backups past the retention period' do - expect { expired_backup.reload }.to raise_error ActiveRecord::RecordNotFound - end - it 'does not delete backups within the retention period' do - expect { current_backup.reload }.to_not raise_error + expect { expired_backup.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { current_backup.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/feeds_vacuum_spec.rb b/spec/lib/vacuum/feeds_vacuum_spec.rb index ede1e3c36097e6..38459a558fbab1 100644 --- a/spec/lib/vacuum/feeds_vacuum_spec.rb +++ b/spec/lib/vacuum/feeds_vacuum_spec.rb @@ -14,11 +14,11 @@ redis.zadd(feed_key_for(active_user), 1, 1) redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2) redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) - - subject.perform end it 'clears feeds of inactive users and lists' do + subject.perform + expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 expect(redis.zcard(feed_key_for(active_user))).to eq 1 expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false diff --git a/spec/lib/vacuum/media_attachments_vacuum_spec.rb b/spec/lib/vacuum/media_attachments_vacuum_spec.rb index 1039c36cea6ff2..f7749038cb432e 100644 --- a/spec/lib/vacuum/media_attachments_vacuum_spec.rb +++ b/spec/lib/vacuum/media_attachments_vacuum_spec.rb @@ -17,9 +17,9 @@ let!(:old_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } let!(:new_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } - before { subject.perform } - it 'handles attachments based on metadata details' do + subject.perform + expect(old_remote_media.reload.file) # Remote and past retention period .to be_blank expect(old_local_media.reload.file) # Local and past retention diff --git a/spec/lib/vacuum/preview_cards_vacuum_spec.rb b/spec/lib/vacuum/preview_cards_vacuum_spec.rb index 9dbdf0bc2fe70c..caeedd3269b5db 100644 --- a/spec/lib/vacuum/preview_cards_vacuum_spec.rb +++ b/spec/lib/vacuum/preview_cards_vacuum_spec.rb @@ -15,24 +15,22 @@ before do old_preview_card.statuses << Fabricate(:status) new_preview_card.statuses << Fabricate(:status) + end + it 'handles preview card cleanup' do subject.perform - end - it 'deletes cache of preview cards last updated before the retention period' do - expect(old_preview_card.reload.image).to be_blank - end + expect(old_preview_card.reload.image) # last updated before retention period + .to be_blank - it 'does not delete cache of preview cards last updated within the retention period' do - expect(new_preview_card.reload.image).to_not be_blank - end + expect(new_preview_card.reload.image) # last updated within the retention period + .to_not be_blank - it 'does not delete attached preview cards' do - expect(new_preview_card.reload).to be_persisted - end + expect(new_preview_card.reload) # Keep attached preview cards + .to be_persisted - it 'does not delete orphaned preview cards in the retention period' do - expect(orphaned_preview_card.reload).to be_persisted + expect(orphaned_preview_card.reload) # keep orphaned cards in the retention period + .to be_persisted end end end diff --git a/spec/lib/vacuum/statuses_vacuum_spec.rb b/spec/lib/vacuum/statuses_vacuum_spec.rb index d5c01395064e16..1fff8648797a8e 100644 --- a/spec/lib/vacuum/statuses_vacuum_spec.rb +++ b/spec/lib/vacuum/statuses_vacuum_spec.rb @@ -15,24 +15,20 @@ let!(:local_status_old) { Fabricate(:status, created_at: (retention_period + 2.days).ago) } let!(:local_status_recent) { Fabricate(:status, created_at: (retention_period - 2.days).ago) } - before do + it 'deletes remote statuses past the retention period and keeps others' do subject.perform - end - it 'deletes remote statuses past the retention period' do - expect { remote_status_old.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { remote_status_old.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete local statuses past the retention period' do - expect { local_status_old.reload }.to_not raise_error - end + expect { local_status_old.reload } + .to_not raise_error - it 'does not delete remote statuses within the retention period' do - expect { remote_status_recent.reload }.to_not raise_error - end + expect { remote_status_recent.reload } + .to_not raise_error - it 'does not delete local statuses within the retention period' do - expect { local_status_recent.reload }.to_not raise_error + expect { local_status_recent.reload } + .to_not raise_error end end end From a11b599fface2a4fcd39d3c54ec9ed0aa4b5c8f7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:09:25 -0400 Subject: [PATCH 284/467] Expand coverage for `Scheduler::IpCleanupScheduler` worker (#32499) --- spec/fabricators/ip_block_fabricator.rb | 6 +++ .../scheduler/ip_cleanup_scheduler_spec.rb | 47 +++++++++++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 spec/fabricators/ip_block_fabricator.rb diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb new file mode 100644 index 00000000000000..30c48b90c6f4b4 --- /dev/null +++ b/spec/fabricators/ip_block_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:ip_block) do + severity { :sign_up_requires_approval } + ip { sequence(:ip) { |n| "10.0.0.#{n}" } } +end diff --git a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb index 7071fa6e984e2f..98150aa5efd3bf 100644 --- a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb +++ b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb @@ -5,9 +5,50 @@ RSpec.describe Scheduler::IpCleanupScheduler do let(:worker) { described_class.new } - describe 'perform' do - it 'runs without error' do - expect { worker.perform }.to_not raise_error + describe '#perform' do + context 'with IP-related data past retention times' do + let!(:future_ip_block) { Fabricate :ip_block, expires_at: 1.week.from_now } + let!(:old_ip_block) { Fabricate :ip_block, expires_at: 1.week.ago } + let!(:session_past_retention) { Fabricate :session_activation, ip: '10.0.0.0', updated_at: 18.months.ago } + let!(:inactive_user) { Fabricate :user, current_sign_in_at: 18.months.ago, sign_up_ip: '10.0.0.0' } + let!(:old_login_activity) { Fabricate :login_activity, created_at: 18.months.ago } + let!(:old_token) { Fabricate :access_token, last_used_at: 18.months.ago, last_used_ip: '10.0.0.0' } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.years.to_i.seconds } + + it 'deletes the expired block' do + expect { worker.perform } + .to_not raise_error + expect { old_ip_block.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { old_login_activity.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(session_past_retention.reload.ip) + .to be_nil + expect(inactive_user.reload.sign_up_ip) + .to be_nil + expect(old_token.reload.last_used_ip) + .to be_nil + expect(future_ip_block.reload) + .to be_present + end + end + + context 'with old session data' do + let!(:new_activation) { Fabricate :session_activation, updated_at: 1.week.ago } + let!(:old_activation) { Fabricate :session_activation, updated_at: 1.month.ago } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.days.to_i.seconds } + + it 'clears old sessions' do + expect { worker.perform } + .to_not raise_error + + expect { old_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(new_activation.reload) + .to be_present + end end end end From b1c10969ac2cfad52a6ee6dbcc34087f86cd87c6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:10:03 -0400 Subject: [PATCH 285/467] Reduce factory creation (48 -> 8) in `AP::Note` serializer spec (#32492) --- .../activitypub/note_serializer_spec.rb | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 285b241ee237e3..a6976193b20ec1 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -14,7 +14,7 @@ let!(:reply_by_account_third) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_visibility_direct) { Fabricate(:status, account: account, thread: parent, visibility: :direct) } - it 'has the expected shape' do + it 'has the expected shape and replies collection' do expect(subject).to include({ '@context' => include('https://www.w3.org/ns/activitystreams'), 'type' => 'Note', @@ -22,26 +22,23 @@ 'contentMap' => include({ 'zh-TW' => a_kind_of(String), }), + 'replies' => replies_collection_values, }) end - it 'has a replies collection' do - expect(subject['replies']['type']).to eql('Collection') + def replies_collection_values + include( + 'type' => eql('Collection'), + 'first' => include( + 'type' => eql('CollectionPage'), + 'items' => reply_items + ) + ) end - it 'has a replies collection with a first Page' do - expect(subject['replies']['first']['type']).to eql('CollectionPage') - end - - it 'includes public self-replies in its replies collection' do - expect(subject['replies']['first']['items']).to include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) - end - - it 'does not include replies from others in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_other_first.uri) - end - - it 'does not include replies with direct visibility in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) + def reply_items + include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) # Public self replies + .and(not_include(reply_by_other_first.uri)) # Replies from others + .and(not_include(reply_by_account_visibility_direct.uri)) # Replies with direct visibility end end From d1d2278e7007daac2dd658041ec29151fb09b0ed Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:10:29 -0400 Subject: [PATCH 286/467] Reduce factory creation (73 -> 64) in `PublicFeed` spec (#32491) --- spec/models/public_feed_spec.rb | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 20fcdb0024f1c0..5ea58cd16f1f7f 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -54,24 +54,20 @@ context 'without a viewer' do let(:viewer) { nil } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end end context 'with a viewer' do let(:viewer) { Fabricate(:account, username: 'viewer') } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end end end From 92bb19773a19ca7bae8687dd1b3606455db8a2ca Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:12:58 -0400 Subject: [PATCH 287/467] Use `context` for repeated scenarios in `AccountStatusCleanupPolicy` spec (#32489) --- .../account_statuses_cleanup_policy_spec.rb | 82 ++++++++++--------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index a08fd723a4d8f4..c142a0359ac6fe 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -16,6 +16,8 @@ describe 'save hooks' do context 'when widening a policy' do + subject { account_statuses_cleanup_policy.last_inspected } + let!(:account_statuses_cleanup_policy) do Fabricate(:account_statuses_cleanup_policy, account: account, @@ -33,64 +35,64 @@ account_statuses_cleanup_policy.record_last_inspected(42) end - it 'invalidates last_inspected when widened because of keep_direct' do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_direct' do + before { account_statuses_cleanup_policy.update(keep_direct: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_pinned' do - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_pinned' do + before { account_statuses_cleanup_policy.update(keep_pinned: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_polls' do - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_polls' do + before { account_statuses_cleanup_policy.update(keep_polls: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_media' do - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_media' do + before { account_statuses_cleanup_policy.update(keep_media: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_fav' do - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_fav' do + before { account_statuses_cleanup_policy.update(keep_self_fav: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_bookmark' do - account_statuses_cleanup_policy.keep_self_bookmark = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_bookmark' do + before { account_statuses_cleanup_policy.update(keep_self_bookmark: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_favs' do - account_statuses_cleanup_policy.min_favs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disabled min_favs' do - account_statuses_cleanup_policy.min_favs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disabled min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: nil) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disable min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disable min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: nil) } + + it { is_expected.to be_nil } end end From 6a39212b0213072e7e77627165ac503887ae8a6b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:18:57 -0400 Subject: [PATCH 288/467] Reduce factories (36 > 12) in `AccountReachFinder` spec (#32482) --- spec/lib/account_reach_finder_spec.rb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/spec/lib/account_reach_finder_spec.rb b/spec/lib/account_reach_finder_spec.rb index e5d85656a200c4..0c1d92b2da59af 100644 --- a/spec/lib/account_reach_finder_spec.rb +++ b/spec/lib/account_reach_finder_spec.rb @@ -38,16 +38,23 @@ end describe '#inboxes' do - it 'includes the preferred inbox URL of followers' do - expect(described_class.new(account).inboxes).to include(*[ap_follower_example_com, ap_follower_example_org, ap_follower_with_shared].map(&:preferred_inbox_url)) + subject { described_class.new(account).inboxes } + + it 'includes the preferred inbox URL of followers and recently mentioned accounts but not unrelated users' do + expect(subject) + .to include(*follower_inbox_urls) + .and include(*mentioned_account_inbox_urls) + .and not_include(unrelated_account.preferred_inbox_url) end - it 'includes the preferred inbox URL of recently-mentioned accounts' do - expect(described_class.new(account).inboxes).to include(*[ap_mentioned_with_shared, ap_mentioned_example_com, ap_mentioned_example_org].map(&:preferred_inbox_url)) + def follower_inbox_urls + [ap_follower_example_com, ap_follower_example_org, ap_follower_with_shared] + .map(&:preferred_inbox_url) end - it 'does not include the inbox of unrelated users' do - expect(described_class.new(account).inboxes).to_not include(unrelated_account.preferred_inbox_url) + def mentioned_account_inbox_urls + [ap_mentioned_with_shared, ap_mentioned_example_com, ap_mentioned_example_org] + .map(&:preferred_inbox_url) end end end From 227d46883f59dbf3aeef7cbe63cf0909dc74c160 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Tue, 15 Oct 2024 14:26:20 +0100 Subject: [PATCH 289/467] Translate to regional language variant (e.g. pt-BR) (#32428) --- .../api/v1/statuses/translations_controller.rb | 2 +- app/services/translate_status_service.rb | 10 ++++++++-- spec/services/translate_status_service_spec.rb | 13 ++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/controllers/api/v1/statuses/translations_controller.rb b/app/controllers/api/v1/statuses/translations_controller.rb index 8cf495f78ac95d..bd5cd9bb07febc 100644 --- a/app/controllers/api/v1/statuses/translations_controller.rb +++ b/app/controllers/api/v1/statuses/translations_controller.rb @@ -23,6 +23,6 @@ def create private def set_translation - @translation = TranslateStatusService.new.call(@status, content_locale) + @translation = TranslateStatusService.new.call(@status, I18n.locale.to_s) end end diff --git a/app/services/translate_status_service.rb b/app/services/translate_status_service.rb index e2e076e21b9bbe..bcd4703beb0004 100644 --- a/app/services/translate_status_service.rb +++ b/app/services/translate_status_service.rb @@ -9,6 +9,8 @@ class TranslateStatusService < BaseService def call(status, target_language) @status = status @source_texts = source_texts + + target_language = target_language.split(/[_-]/).first unless target_languages.include?(target_language) @target_language = target_language raise Mastodon::NotPermittedError unless permitted? @@ -32,11 +34,15 @@ def translation_backend def permitted? return false unless @status.distributable? && TranslationService.configured? - languages[@status.language]&.include?(@target_language) + target_languages.include?(@target_language) end def languages - Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { TranslationService.configured.languages } + Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { translation_backend.languages } + end + + def target_languages + languages[@status.language] || [] end def content_hash diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index cd92fb8d1025ab..ac7a43ff2af4f4 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -18,7 +18,7 @@ describe '#call' do before do translation_service = TranslationService.new - allow(translation_service).to receive(:languages).and_return({ 'en' => ['es'] }) + allow(translation_service).to receive(:languages).and_return({ 'en' => ['es', 'es-MX'] }) allow(translation_service).to receive(:translate) do |texts| texts.map do |text| TranslationService::Translation.new( @@ -37,6 +37,7 @@ .to have_attributes( content: '

Hola

', detected_source_language: 'en', + language: 'es', provider: 'Dummy', status: status ) @@ -101,6 +102,16 @@ expect(media_attachment.description).to eq 'Hola & :highfive:' end end + + describe 'target language is regional' do + it 'uses regional variant' do + expect(service.call(status, 'es-MX').language).to eq 'es-MX' + end + + it 'uses parent locale for unsupported regional variant' do + expect(service.call(status, 'es-XX').language).to eq 'es' + end + end end describe '#source_texts' do From bfb41e61a34ad7d1f245e69131332cdb5542af26 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:30:17 -0400 Subject: [PATCH 290/467] Expand coverage for `Block` model (#32480) --- spec/models/block_spec.rb | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb index 84f0f318f42583..62d7e40e28cef7 100644 --- a/spec/models/block_spec.rb +++ b/spec/models/block_spec.rb @@ -3,11 +3,37 @@ require 'rails_helper' RSpec.describe Block do - describe 'validations' do + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } end + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :block, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + end + it 'removes blocking cache after creation' do account = Fabricate(:account) target_account = Fabricate(:account) From c19397b94aed94340dd179f1b659b3e2b9205c10 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:38:02 +0200 Subject: [PATCH 291/467] Update formatjs monorepo (#32304) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 272 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 171 insertions(+), 101 deletions(-) diff --git a/yarn.lock b/yarn.lock index fe975f3a750080..7afd8827e4ca64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,9 +59,9 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4": - version: 7.25.7 - resolution: "@babel/core@npm:7.25.7" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": + version: 7.25.8 + resolution: "@babel/core@npm:7.25.8" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.25.7" @@ -69,16 +69,16 @@ __metadata: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-module-transforms": "npm:^7.25.7" "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.8" "@babel/template": "npm:^7.25.7" "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.8" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/dad20af39624086afc3a0910bd97ae712c9ad0e9dda09fc5da93876e8ea1802b63ddd81c44f4aa8a9834db46de801eaab1ce9b81ab54b4fe907ae052c24de136 + checksum: 10c0/8411ea506e6f7c8a39ab5c1524b00589fa3b087edb47389708f7fe07170929192171734666e3ea10b95a951643a531a6d09eedfe071572c9ea28516646265086 languageName: node linkType: hard @@ -224,7 +224,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.25.7 resolution: "@babel/helper-plugin-utils@npm:7.25.7" checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf @@ -331,14 +331,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/parser@npm:7.25.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/parser@npm:7.25.8" dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.8" bin: parser: ./bin/babel-parser.js - checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf + checksum: 10c0/a1a13845b7e8dda4c970791814a4bbf60004969882f18f470e260ad822d2e1f8941948f851e9335895563610f240fa6c98481ce8019865e469502bbf21daafa4 languageName: node linkType: hard @@ -520,7 +520,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.25.0, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.25.7 resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" dependencies: @@ -1500,7 +1500,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.25.7": +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.7": version: 7.25.7 resolution: "@babel/traverse@npm:7.25.7" dependencies: @@ -1515,14 +1515,14 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.7 - resolution: "@babel/types@npm:7.25.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.25.8 + resolution: "@babel/types@npm:7.25.8" dependencies: "@babel/helper-string-parser": "npm:^7.25.7" "@babel/helper-validator-identifier": "npm:^7.25.7" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 + checksum: 10c0/55ca2d6df6426c98db2769ce884ce5e9de83a512ea2dd7bcf56c811984dc14351cacf42932a723630c5afcff2455809323decd645820762182f10b7b5252b59f languageName: node linkType: hard @@ -2311,12 +2311,34 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.0": +"@formatjs/ecma402-abstract@npm:2.2.0": version: 2.2.0 - resolution: "@formatjs/fast-memoize@npm:2.2.0" + resolution: "@formatjs/ecma402-abstract@npm:2.2.0" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/ae88c5a93b96235aba4bd9b947d0310d2ec013687a99133413361b24122b5cdea8c9bf2e04a4a2a8b61f1f4ee5419ef6416ca4796554226b5050e05a9ce6ef49 + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/3f8e5c1680ab3babf44a6324ae36d6355674562df61e0f0ce3bcec35c3b31d77f9c3b28596af79a9f52641aee834a11673dc4cf30093bbf27c4a96e18c8cc74b + languageName: node + linkType: hard + +"@formatjs/fast-memoize@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/fast-memoize@npm:2.2.1" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/cb8cbf1aba907d395d1fe405f67a8da26686b2fc26eefde7541d49d748d2d9b939f2bc428b7d40d2c31366a6ce42cf16724c966965701186986c5882fdba3c8b + languageName: node + linkType: hard + +"@formatjs/icu-messageformat-parser@npm:2.7.10": + version: 2.7.10 + resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-skeleton-parser": "npm:1.8.4" + tslib: "npm:^2.7.0" + checksum: 10c0/7f2b9bb31c64d2b45584a77e2e6a7c4185f247eea22c0d8e2257ac95feff36894a0936d31778d17874cd249c39058fcb894c27e13a6cadb056996e7232957655 languageName: node linkType: hard @@ -2341,25 +2363,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.8": - version: 6.6.8 - resolution: "@formatjs/intl-displaynames@npm:6.6.8" +"@formatjs/icu-skeleton-parser@npm:1.8.4": + version: 1.8.4 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/1a03e7644022741c1bcf10fcd07da88c434416a13603ace693a038114010463307b4130d3a3f53ad5665bd27fca9a6b19ac8e5bf58e17598b1ea84db173fdfbb + "@formatjs/ecma402-abstract": "npm:2.2.0" + tslib: "npm:^2.7.0" + checksum: 10c0/a6cd90e89b994e6fa2b66f83a80250d17fdddaeb755cd1f38be1d51a737a6f8a9b123912943d3dcad278833e3a04683a9081b187300f1a481791527954e63e82 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.7": - version: 7.5.7 - resolution: "@formatjs/intl-listformat@npm:7.5.7" +"@formatjs/intl-displaynames@npm:6.6.10": + version: 6.6.10 + resolution: "@formatjs/intl-displaynames@npm:6.6.10" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/5d0478752d669d87c82aa80880df464d64a1c8974fcb6136bc854567f570a1696e5468005ffa266cfcb623adb7c7299b839c06ea33897f55d35dab6a7575cc84 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/e4158f67fc0d6c2345d05b85183aef480fc86c68b60643abdd143ddc66a2203acfcf1b3dc4619658479e54c971c878a2548db34e08f3b035348686f088bf03c4 + languageName: node + linkType: hard + +"@formatjs/intl-listformat@npm:7.5.9": + version: 7.5.9 + resolution: "@formatjs/intl-listformat@npm:7.5.9" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/b5041de4d6e011f36ba4b54406aae9aef763f8bc8b22364bdc8447d0b8b3e553111d117b02f801c31f2ab2c0d3abc086bd90db1b83c000babb99316cd15be5e2 languageName: node linkType: hard @@ -2372,34 +2404,43 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.5.5": + version: 0.5.5 + resolution: "@formatjs/intl-localematcher@npm:0.5.5" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/a6bf466bae29ca838ab06ffa2ce2cc9d5dd98e096ec73986b45ca4354b6adc0ca9078d9fd3aa30dbf27677940cfb3fb050ca0bce3018cd6f3f4d7e4bdad91035 + languageName: node + linkType: hard + "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.14 - resolution: "@formatjs/intl-pluralrules@npm:5.2.14" + version: 5.2.16 + resolution: "@formatjs/intl-pluralrules@npm:5.2.16" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/3c00109c8d4c8b221c2b9af38a38d31cd6293a0a412a1f2cdae2b8ef81bd71626c9ff4a647389682cb27ae5c223bd6f64ef54d03e3f6f19c372e0c6194b76b38 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/2250a96a74a153a5f1e771233c366c42005efd71ac5ff665891a308ce78a68f85709f8c892d28a1e334f974252bfb3407f6a64da616c3adbeb158310ef73d71b languageName: node linkType: hard -"@formatjs/intl@npm:2.10.5": - version: 2.10.5 - resolution: "@formatjs/intl@npm:2.10.5" +"@formatjs/intl@npm:2.10.8": + version: 2.10.8 + resolution: "@formatjs/intl@npm:2.10.8" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/d00ef00e41200947ed22895b73a0863283de4762ec238b4a81e2252e642e30a309cd9c73174e4917b6c675ab6f148eda5a4e3345c3caeef64e090fc8374d27c4 + checksum: 10c0/e35a4421f445ef4f7ce362144dde143ad895391b03380fbf896fe261a445fa6b5d886989e07bf9b49e52e83f0a3f9b667cfecbc2684a9ea898c6d25daf07b392 languageName: node linkType: hard @@ -2423,6 +2464,26 @@ __metadata: languageName: node linkType: hard +"@formatjs/ts-transformer@npm:3.13.16": + version: 3.13.16 + resolution: "@formatjs/ts-transformer@npm:3.13.16" + dependencies: + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@types/json-stable-stringify": "npm:^1.0.32" + "@types/node": "npm:14 || 16 || 17 || 18" + chalk: "npm:^4.0.0" + json-stable-stringify: "npm:^1.0.1" + tslib: "npm:^2.7.0" + typescript: "npm:5" + peerDependencies: + ts-jest: ">=27" + peerDependenciesMeta: + ts-jest: + optional: true + checksum: 10c0/de03e8bc8c730f2e122970d5843762e0c5183181ba58c9759db2f1ed45fcbfbb8046dbb3318f906574f89026481b9205f5bd6fbf3f410a5e5e1754f575baa489 + languageName: node + linkType: hard + "@gamestdio/websocket@npm:^0.3.2": version: 0.3.2 resolution: "@gamestdio/websocket@npm:0.3.2" @@ -3490,7 +3551,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.20.1": +"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.1, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -3512,12 +3573,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__helper-plugin-utils@npm:^7.10.0": - version: 7.10.2 - resolution: "@types/babel__helper-plugin-utils@npm:7.10.2" +"@types/babel__helper-plugin-utils@npm:^7.10.3": + version: 7.10.3 + resolution: "@types/babel__helper-plugin-utils@npm:7.10.3" dependencies: "@types/babel__core": "npm:*" - checksum: 10c0/1c544e33b30ccfc02254b9fe090c52880c8bb05e5406f525bfdce71ce34e93677276f788b93e9fa5e1a16f6317b97e59a07d8a92bf4726d8f4639a0045ebb590 + checksum: 10c0/c22f68e8019c1e75e42fccc6eaca94a269fa177c4544599aa084b216b879b626f63f89755a4ac2dc9054b6e9ed4e0fab1e3460d36ce20767c99aef4a3c81fce3 languageName: node linkType: hard @@ -3531,12 +3592,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.1.7": - version: 7.20.3 - resolution: "@types/babel__traverse@npm:7.20.3" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.20.6": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" dependencies: "@babel/types": "npm:^7.20.7" - checksum: 10c0/295ed9b837e62e17ee43be0df45d90fff5208986bd43af593c9020d152d3b2c55328e038c2f8585926b63cc22f887f28bf3f4c805aa881e2dd0bdd5ead92ece0 + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 languageName: node linkType: hard @@ -3809,6 +3870,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:14 || 16 || 17 || 18": + version: 18.19.55 + resolution: "@types/node@npm:18.19.55" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/19ffeca0086b45cba08d4585623cd0d80fbacb659debde82a4baa008fc0c25ba6c21cd721f3a9f0be74f70940694b00458cac61c89f8b2a1e55ca4322a9aad2b + languageName: node + linkType: hard + "@types/object-assign@npm:^4.0.30": version: 4.0.33 resolution: "@types/object-assign@npm:4.0.33" @@ -3986,13 +4056,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.10 - resolution: "@types/react@npm:18.3.10" +"@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7, @types/react@npm:^18.3.11": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/f5be1de1b0331c1fdb33d577f4cf7f1b949d4bded5347b2351a537f03c51dade5be115e21b161dcf1b37061954d320f6a0bdf8d7b70e24eda51071fdd614383d + checksum: 10c0/ce80512246ca5bda69db85b9f4f1835189334acfb6b2c4f3eda8cabff1ff1a3ea9ce4f3b895bdbc18c94140aa45592331aa3fdeb557f525c1b048de7ce84fc0e languageName: node linkType: hard @@ -5240,21 +5310,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.16 - resolution: "babel-plugin-formatjs@npm:10.5.16" + version: 10.5.18 + resolution: "babel-plugin-formatjs@npm:10.5.18" dependencies: - "@babel/core": "npm:^7.10.4" - "@babel/helper-plugin-utils": "npm:^7.10.4" - "@babel/plugin-syntax-jsx": "npm:7" - "@babel/traverse": "npm:7" - "@babel/types": "npm:^7.12.11" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/ts-transformer": "npm:3.13.14" - "@types/babel__core": "npm:^7.1.7" - "@types/babel__helper-plugin-utils": "npm:^7.10.0" - "@types/babel__traverse": "npm:^7.1.7" - tslib: "npm:^2.4.0" - checksum: 10c0/03d9d2b0b9cdc05c011bfb417a43e5c0f557868ed84d83acbc3cb9072b7fa98f5219473d0bd61f02741c151d6f2162da363bd337522c80af14721ae37f6da86b + "@babel/core": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.0" + "@babel/plugin-syntax-jsx": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/ts-transformer": "npm:3.13.16" + "@types/babel__core": "npm:^7.20.5" + "@types/babel__helper-plugin-utils": "npm:^7.10.3" + "@types/babel__traverse": "npm:^7.20.6" + tslib: "npm:^2.7.0" + checksum: 10c0/3e7753cb1837ea300f7b0d574751758330f4fe56e4f686a1ceb7acc612c0ac1353ed2a918b5af6e4dcaf579c623d56f714159a265d64b71897471a69f15910b8 languageName: node linkType: hard @@ -9843,15 +9913,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.14, intl-messageformat@npm:^10.3.5": - version: 10.5.14 - resolution: "intl-messageformat@npm:10.5.14" +"intl-messageformat@npm:10.7.0, intl-messageformat@npm:^10.3.5": + version: 10.7.0 + resolution: "intl-messageformat@npm:10.7.0" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - tslib: "npm:^2.4.0" - checksum: 10c0/8ec0a60539f67039356e211bcc8d81cf1bd9d62190a72ab0e94504da92f0242fe2f94ffb512b97cc6f63782b7891874d4038536ce04631e59d762c3441c60b4b + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + tslib: "npm:^2.7.0" + checksum: 10c0/772469599fa8ab43dc933d03c75c6290220565c97afdc60cb67d036f2c51f1b3a825b2345933ee7616ecdf018b95ea7704f5ec80ded5a8efc2ce7f4b2962cae3 languageName: node linkType: hard @@ -14573,26 +14643,26 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.7.0 - resolution: "react-intl@npm:6.7.0" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.5" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" + version: 6.8.0 + resolution: "react-intl@npm:6.8.0" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl": "npm:2.10.8" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" "@types/hoist-non-react-statics": "npm:^3.3.1" - "@types/react": "npm:16 || 17 || 18" + "@types/react": "npm:^18.3.11" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/210088bf0e934ad5f09d8e7c6d7d72682bb806583645fb333d4efd8ae55585b675ea8e47bb240140d5143ca15ecc0457c3ddc3e8ca45e9b576bce1fa2f9886b3 + checksum: 10c0/e110d8cbfc227cbed3b72b162fe8a75e824aef47eeb5a7879a5a2d9fa5dd35d2d25149ef57460fa06bca7ae106184c729e410c22bcdb349d29bb1ee35f3c5cf0 languageName: node linkType: hard @@ -17275,7 +17345,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": version: 2.7.0 resolution: "tslib@npm:2.7.0" checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 From c772b41c36ed9adc5650f9ce18047104e5aae444 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:38:48 +0000 Subject: [PATCH 292/467] Update dependency react-textarea-autosize to v8.5.4 (#32401) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7afd8827e4ca64..8be263d1a3f7c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14928,15 +14928,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.4.1": - version: 8.5.3 - resolution: "react-textarea-autosize@npm:8.5.3" + version: 8.5.4 + resolution: "react-textarea-autosize@npm:8.5.4" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/33d38a6d96cf584842695b50c341980944ece23a42155bf0bd1958f02396adb185c7720b88678dc677817fe111783059c0ebcdf7761644006892583b10e258ee + checksum: 10c0/ea92fda2128983c1a8e84c74706ffb4b8bfa1a19c803d210868ec031c1ac3b8ceee8028766ef5d91017265da2bdccf6a85e5b6e5d553005e839f0c47e5758b43 languageName: node linkType: hard From 27f05e9016294f18c4aa2999288884cc6e42d735 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:43:08 -0400 Subject: [PATCH 293/467] Expand coverage for `User#token_for_app` (#32434) --- spec/models/user_spec.rb | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index d28e6658f1f6c2..4393be5a4efd54 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -387,23 +387,43 @@ def within_duration_window_days end end - describe 'token_for_app' do + describe '#token_for_app' do let(:user) { Fabricate(:user) } - let(:app) { Fabricate(:application, owner: user) } - it 'returns a token' do - expect(user.token_for_app(app)).to be_a(Doorkeeper::AccessToken) + context 'when user owns app but does not have tokens' do + let(:app) { Fabricate(:application, owner: user) } + + it 'creates and returns a persisted token' do + expect { user.token_for_app(app) } + .to change(Doorkeeper::AccessToken.where(resource_owner_id: user.id, application: app), :count).by(1) + end end - it 'persists a token' do - t = user.token_for_app(app) - expect(user.token_for_app(app)).to eql(t) + context 'when user owns app and already has tokens' do + let(:app) { Fabricate(:application, owner: user) } + let!(:token) { Fabricate :access_token, application: app, resource_owner_id: user.id } + + it 'returns a persisted token' do + expect(user.token_for_app(app)) + .to be_a(Doorkeeper::AccessToken) + .and eq(token) + end end - it 'is nil if user does not own app' do - app.update!(owner: nil) + context 'when user does not own app' do + let(:app) { Fabricate(:application) } - expect(user.token_for_app(app)).to be_nil + it 'returns nil' do + expect(user.token_for_app(app)) + .to be_nil + end + end + + context 'when app is nil' do + it 'returns nil' do + expect(user.token_for_app(nil)) + .to be_nil + end end end From e9b27852bea0472c9736f48604cba0ad46cc372a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:51:52 -0400 Subject: [PATCH 294/467] Reduce factory creation (14 -> 8) in `ActivityPub::Activity::Block` spec (#32488) --- spec/lib/activitypub/activity/block_spec.rb | 104 ++++++++------------ 1 file changed, 39 insertions(+), 65 deletions(-) diff --git a/spec/lib/activitypub/activity/block_spec.rb b/spec/lib/activitypub/activity/block_spec.rb index 6f68984018c1d2..385628852b714d 100644 --- a/spec/lib/activitypub/activity/block_spec.rb +++ b/spec/lib/activitypub/activity/block_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' RSpec.describe ActivityPub::Activity::Block do + subject { described_class.new(json, sender) } + let(:sender) { Fabricate(:account) } let(:recipient) { Fabricate(:account) } @@ -16,93 +18,65 @@ }.with_indifferent_access end - context 'when the recipient does not follow the sender' do - describe '#perform' do - subject { described_class.new(json, sender) } - - before do + describe '#perform' do + context 'when the recipient does not follow the sender' do + it 'creates a block from sender to recipient' do subject.perform - end - it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true + expect(sender) + .to be_blocking(recipient) end end - end - - context 'when the recipient is already blocked' do - before do - sender.block!(recipient, uri: 'old') - end - describe '#perform' do - subject { described_class.new(json, sender) } + context 'when the recipient is already blocked' do + before { sender.block!(recipient, uri: 'old') } - before do + it 'creates a block from sender to recipient and sets uri to last received block activity' do subject.perform - end - - it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true - end - it 'sets the uri to that of last received block activity' do - expect(sender.block_relationships.find_by(target_account: recipient).uri).to eq 'foo' + expect(sender) + .to be_blocking(recipient) + expect(sender.block_relationships.find_by(target_account: recipient).uri) + .to eq 'foo' end end - end - context 'when the recipient follows the sender' do - before do - recipient.follow!(sender) - end + context 'when the recipient follows the sender' do + before { recipient.follow!(sender) } - describe '#perform' do - subject { described_class.new(json, sender) } - - before do + it 'creates a block from sender to recipient and ensures recipient not following sender' do subject.perform - end - - it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true - end - it 'ensures recipient is not following sender' do - expect(recipient.following?(sender)).to be false + expect(sender) + .to be_blocking(recipient) + expect(recipient) + .to_not be_following(sender) end end - end - context 'when a matching undo has been received first' do - let(:undo_json) do - { - '@context': 'https://www.w3.org/ns/activitystreams', - id: 'bar', - type: 'Undo', - actor: ActivityPub::TagManager.instance.uri_for(sender), - object: json, - }.with_indifferent_access - end - - before do - recipient.follow!(sender) - ActivityPub::Activity::Undo.new(undo_json, sender).perform - end - - describe '#perform' do - subject { described_class.new(json, sender) } + context 'when a matching undo has been received first' do + let(:undo_json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'bar', + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: json, + }.with_indifferent_access + end before do - subject.perform + recipient.follow!(sender) + ActivityPub::Activity::Undo.new(undo_json, sender).perform end - it 'does not create a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be false - end + it 'does not create a block from sender to recipient and ensures recipient not following sender' do + subject.perform - it 'ensures recipient is not following sender' do - expect(recipient.following?(sender)).to be false + expect(sender) + .to_not be_blocking(recipient) + expect(recipient) + .to_not be_following(sender) end end end From 0e58dc90d967746d551d360dd56cb0f533090253 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:56:29 -0400 Subject: [PATCH 295/467] Use array compact style for classes in `nothing_here` helper (#32403) --- app/helpers/statuses_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/statuses_helper.rb b/app/helpers/statuses_helper.rb index bba6d64a4783a3..9bbb03fd820230 100644 --- a/app/helpers/statuses_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -12,7 +12,7 @@ module StatusesHelper }.freeze def nothing_here(extra_classes = '') - content_tag(:div, class: "nothing-here #{extra_classes}") do + tag.div(class: ['nothing-here', extra_classes]) do t('accounts.nothing_here') end end From 92c886045179f470dbba196e653d019acfdc899a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:58:33 +0000 Subject: [PATCH 296/467] Update babel monorepo to v7.25.8 (#32391) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 219 ++++++++++++++++++------------------------------------ 1 file changed, 74 insertions(+), 145 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8be263d1a3f7c9..626b7bae21f5ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,10 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/compat-data@npm:7.25.7" - checksum: 10c0/e5cc915abdd18d021236474a96606b2d4a915c4fb620c1ad776b8a08d91111e788cb3b7e9bad43593d4e0bfa4f06894357bcb0984102de1861b9e7322b6bc9f8 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7, @babel/compat-data@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/compat-data@npm:7.25.8" + checksum: 10c0/8b81c17580e5fb4cbb6a3c52079f8c283fc59c0c6bd2fe14cfcf9c44b32d2eaab71b02c5633e2c679f5896f73f8ac4036ba2e67a4c806e8f428e4b11f526d7f4 languageName: node linkType: hard @@ -224,7 +224,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.25.7 resolution: "@babel/helper-plugin-utils@npm:7.25.7" checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf @@ -432,7 +432,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -443,39 +443,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 - languageName: node - linkType: hard - "@babel/plugin-syntax-import-assertions@npm:^7.25.7": version: 7.25.7 resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" @@ -498,7 +465,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -531,7 +498,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -553,7 +520,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -597,18 +564,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -653,17 +609,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dcdd17d8cafafe0eb2edd0a46a7abe86c72235c957c8eb1157ccadb2b199572d5d1aa36a2d3bce5cb99990f7d3c6290ecf09959c62f3081c4df9ff717a1c84a4 + checksum: 10c0/1698d0757d3dc895047120346cdbe6d539dae4a7bb930caf958c3623e89c850d378d1ebd971a1a8b4cba39c8f001cd9c25a1d6f430099022ab1e87aeddb5dd88 languageName: node linkType: hard @@ -714,16 +669,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" +"@babel/plugin-transform-class-static-block@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.8" dependencies: "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/cbb4b46cbd8ad10106eb2bedb5a0665661a1d1d5b6f3ab565ff454b802dab4718e02b25670fe0d40835494aedb3dc26757c06cc4da6ff3e80291c5f882269bd3 + checksum: 10c0/4f37853aef6920875022bbb2d7c6523218d9d718291464e2cacd9cc6f2c22d86a69948d8ea38f9248843bbfe9343f3fd18cf16b1615560124198bf999e3ba612 languageName: node linkType: hard @@ -801,15 +755,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c733252ff20a32d9747dd081916270f5a073856597e849a5f458b12f4354499b18714f5e7049e341432851d9975077cb37effcd276c7f816faa6f5ff708dc5e1 + checksum: 10c0/9726abc1b07771a9c1e3670908ac425d21e29f54c775d10ed7a4e2bc0a18e07600f70bbc531deba3fb3ff7f6763c189200593264c6f784dac583e653b66fe754 languageName: node linkType: hard @@ -825,15 +778,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ef61fc5d54c9c8b075cbd9db62beaf295e38e08a1edb1882995105d3e959763be1631f7d7f7cb7461b702ebd0b4a601f2eb2cd6521acaf061310a3a3305fa756 + checksum: 10c0/8a2e1205dd727a96a9adef0e981d68c61b1c286480b9136e2aa67ce3e2c742be4f87feb9fb4c5548a401aba0953d43d66e9ec36a54dea6a7c15f1ee9345baf57 languageName: node linkType: hard @@ -862,15 +814,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" +"@babel/plugin-transform-json-strings@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/aa6e5f65c8a5f2459d7daa9b5b4ff97ff43bab21f4a8513ed84d35300b0323ec542dc101c5f11622e442dfc93b3a229c7f41ebc7645370dfec6d066bda800a0b + checksum: 10c0/2a6cf69ebe8deebc39c56adae75d609e16786dc4cbd83577eefdc838bd89ca8974671d47e2669b8e65ef9b7ace427f7c2c5a9fc6aa09247b10e141d15fee81cf languageName: node linkType: hard @@ -885,15 +836,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d610a8a2c1be83e03cce2256f29519e705dc68289c09d67f1f362d1fd80f4b36eaf2affc05710abb53a272895041e24d9e95ec73a516a23a67cb907023fbe37b + checksum: 10c0/9adc2634c94b283b682fbf71bbec553bd8448196213491a0ef9ea167993c9c36dcb2fbefbd834e113cfed843a67290131bc99e463f8702043c3f4e3a99bb807e languageName: node linkType: hard @@ -982,41 +932,38 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b35a96a79ef4895b00e4f758d3185cb17e4fbfada311894ad5f0988a55fc2c21820dc789b26a3cb8fbd620434faa516e52acb6e2da105c2edbd29de8b6b0facf + checksum: 10c0/3cb7c44cffccae42e104755acb31b4f00bc27d8c88102ae6f30dca508832f98fa5b746bead0fc7c0c6ddcf83f336829be4b64245c6c7ce26b3ef591937ec54a4 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c028ae89e6b4e1d757f8f1ebcb3b420e6559bb35002728f6f5651d5f669fbf73764adf6e3597908fa12adf8dbae683e5f74b3a7f68e8774a9663c18c0f999539 + checksum: 10c0/d23b3ebc50513f24510791ac2cad43e3c6ea08579f54dccfd4ed5e5d5084f02da0576ea42ea999fb51e1f94f42857cac96a1a29ac6728fc262fbe87ec966dc18 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.8" dependencies: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e8b978d9d1020452da0d5d92f80fe57e302761dac20137bb8bf863478a4779fcd63d314db89e796125d9d76da2a38f64f012d6e0c4913815951b3eb3fba2feb6 + checksum: 10c0/058d5f5bb61068997fb78855011dd175d441da84717640852bbfd12a5919acf8d8c5a14c1debfe87d230f3f4c47c22fcad3d7fa1acd72e5e48b2fff93b6c1dd9 languageName: node linkType: hard @@ -1032,28 +979,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bb609e5103780be0825a255ffe1fefbb5335aead88a46eecc2257053279ea2c45ff66b0ef1fb54302c8c8c57146e88e52f3ecb62b4c6f619218d7b3843b352d9 + checksum: 10c0/f4360e62ca4aa998db31548d0ef06836d958bcb29dee58f5c62d0c29b6b2bff1b54871195bd032825fe3dd79a4fd8275e165148c8d4b57694bcf72135c8f7d24 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7" +"@babel/plugin-transform-optional-chaining@npm:^7.25.7, @babel/plugin-transform-optional-chaining@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/887441ada6c2bc1b789984b7531d9bc585f335ece99642886d3d9fd8aee7e6b8d4f7ca61d76b5f23477f3aa607284d5056eadaa1eb17e7b39af6b0e834cbe878 + checksum: 10c0/a1cdbfc249619fa6b37e57f81600701281629d86a57e616b0c2b29816d0c43114a2296ce089564afd3aa7870c8aad62e907658ffef2c110662af14ee23d5247f languageName: node linkType: hard @@ -1080,17 +1025,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.8" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.25.7" "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5ad8832ba54e2079c1f558b8680e170265e3f376424e5fbb75b17b7f08696fb0af6c96d23d92f7df3dcc559f5971a02587281fcec38a853174aa95478565f5fc + checksum: 10c0/61b5e3a4eb94caf38d6e9ff7bff1ac8927758141aaa4891036d3490866ecee53beaefd7893519fec42a4c55f33374a17fc0e49694cdaf95668082073f0fe4a79 languageName: node linkType: hard @@ -1335,10 +1279,10 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.25.7 - resolution: "@babel/preset-env@npm:7.25.7" + version: 7.25.8 + resolution: "@babel/preset-env@npm:7.25.8" dependencies: - "@babel/compat-data": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.8" "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-validator-option": "npm:^7.25.7" @@ -1348,45 +1292,30 @@ __metadata: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.8" "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" "@babel/plugin-transform-block-scoping": "npm:^7.25.7" "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.7" + "@babel/plugin-transform-class-static-block": "npm:^7.25.8" "@babel/plugin-transform-classes": "npm:^7.25.7" "@babel/plugin-transform-computed-properties": "npm:^7.25.7" "@babel/plugin-transform-destructuring": "npm:^7.25.7" "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.8" "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.8" "@babel/plugin-transform-for-of": "npm:^7.25.7" "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.7" + "@babel/plugin-transform-json-strings": "npm:^7.25.8" "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8" "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" "@babel/plugin-transform-modules-amd": "npm:^7.25.7" "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" @@ -1394,15 +1323,15 @@ __metadata: "@babel/plugin-transform-modules-umd": "npm:^7.25.7" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.8" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.8" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.8" "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.8" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.8" "@babel/plugin-transform-parameters": "npm:^7.25.7" "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.8" "@babel/plugin-transform-property-literals": "npm:^7.25.7" "@babel/plugin-transform-regenerator": "npm:^7.25.7" "@babel/plugin-transform-reserved-words": "npm:^7.25.7" @@ -1423,7 +1352,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bf704a06a69420250c1de2b126cd5c859a851002c2fb2cce0910cd85a8e6755b9b31577021e94feb7e1e53519923726349aaf07580923928791583db61438fb8 + checksum: 10c0/a45cd64ca082262998f6cf508b413ff8a9e967bf33e58337a1fe41c6c939a4c25cc73cd58387792c00d43905cf5fb0ea5ef88dfdc2addf2e8133743088c86c72 languageName: node linkType: hard From b742ce9d0961d9b992fce66ba4ecb3ff414c90c0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 09:58:45 -0400 Subject: [PATCH 297/467] Reduce factory creation (17 -> 0) in `PlainTextFormatter` spec (#32487) --- spec/lib/plain_text_formatter_spec.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/lib/plain_text_formatter_spec.rb b/spec/lib/plain_text_formatter_spec.rb index b22f473d0ce320..4683e150935f46 100644 --- a/spec/lib/plain_text_formatter_spec.rb +++ b/spec/lib/plain_text_formatter_spec.rb @@ -7,7 +7,7 @@ subject { described_class.new(status.text, status.local?).to_s } context 'when status is local' do - let(:status) { Fabricate(:status, text: '

a text by a nerd who uses an HTML tag in text

', uri: nil) } + let(:status) { Fabricate.build(:status, text: '

a text by a nerd who uses an HTML tag in text

', uri: nil) } it 'returns the raw text' do expect(subject).to eq '

a text by a nerd who uses an HTML tag in text

' @@ -15,10 +15,10 @@ end context 'when status is remote' do - let(:remote_account) { Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } + let(:remote_account) { Fabricate.build(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } context 'when text contains inline HTML tags' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem ipsum') } it 'strips the tags' do expect(subject).to eq 'Lorem ipsum' @@ -26,7 +26,7 @@ end context 'when text contains

tags' do - let(:status) { Fabricate(:status, account: remote_account, text: '

Lorem

ipsum

') } + let(:status) { Fabricate.build(:status, account: remote_account, text: '

Lorem

ipsum

') } it 'inserts a newline' do expect(subject).to eq "Lorem\nipsum" @@ -34,7 +34,7 @@ end context 'when text contains a single
tag' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem
ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem
ipsum') } it 'inserts a newline' do expect(subject).to eq "Lorem\nipsum" @@ -42,7 +42,7 @@ end context 'when text contains consecutive
tag' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem


ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem


ipsum') } it 'inserts a single newline' do expect(subject).to eq "Lorem\nipsum" @@ -50,7 +50,7 @@ end context 'when text contains HTML entity' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem & ipsum ❤') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem & ipsum ❤') } it 'unescapes the entity' do expect(subject).to eq 'Lorem & ipsum ❤' @@ -58,7 +58,7 @@ end context 'when text contains ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem ipsum') } it 'strips the tag and its contents' do expect(subject).to eq 'Lorem ipsum' @@ -66,7 +66,7 @@ end context 'when text contains an HTML comment tags' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem ipsum') } it 'strips the comment' do expect(subject).to eq 'Lorem ipsum' @@ -74,7 +74,7 @@ end context 'when text contains HTML ruby tags' do - let(:status) { Fabricate(:status, account: remote_account, text: '

Lorem 明日 (Ashita) ipsum

') } + let(:status) { Fabricate.build(:status, account: remote_account, text: '

Lorem 明日 (Ashita) ipsum

') } it 'strips the comment' do expect(subject).to eq 'Lorem 明日 (Ashita) ipsum' From b78597979a71d4ce4296a96fffc1fb466c7d3c6b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 10:12:54 -0400 Subject: [PATCH 298/467] Fix missing content warning text in rss formatter (#32406) --- app/helpers/formatting_helper.rb | 78 +++++++++++++++++--------- spec/helpers/formatting_helper_spec.rb | 54 +++++++++++++++--- 2 files changed, 99 insertions(+), 33 deletions(-) diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb index 7d1423e52d731d..2ef7d362d8223a 100644 --- a/app/helpers/formatting_helper.rb +++ b/app/helpers/formatting_helper.rb @@ -1,6 +1,14 @@ # frozen_string_literal: true module FormattingHelper + SYNDICATED_EMOJI_STYLES = <<~CSS.squish + height: 1.1em; + margin: -.2ex .15em .2ex; + object-fit: contain; + vertical-align: middle; + width: 1.1em; + CSS + def html_aware_format(text, local, options = {}) HtmlAwareFormatter.new(text, local, options).to_s end @@ -23,33 +31,10 @@ def status_content_format(status) end def rss_status_content_format(status) - html = status_content_format(status) - - before_html = if status.spoiler_text? - tag.p do - tag.strong do - I18n.t('rss.content_warning', locale: available_locale_or_nil(status.language) || I18n.default_locale) - end - - status.spoiler_text - end + tag.hr - end - - after_html = if status.preloadable_poll - tag.p do - safe_join( - status.preloadable_poll.options.map do |o| - tag.send(status.preloadable_poll.multiple? ? 'checkbox' : 'radio', o, disabled: true) - end, - tag.br - ) - end - end - prerender_custom_emojis( - safe_join([before_html, html, after_html]), + wrapped_status_content_format(status), status.emojis, - style: 'width: 1.1em; height: 1.1em; object-fit: contain; vertical-align: middle; margin: -.2ex .15em .2ex' + style: SYNDICATED_EMOJI_STYLES ).to_str end @@ -64,4 +49,47 @@ def account_field_value_format(field, with_rel_me: true) html_aware_format(field.value, field.account.local?, with_rel_me: with_rel_me, with_domains: true, multiline: false) end end + + private + + def wrapped_status_content_format(status) + safe_join [ + rss_content_preroll(status), + status_content_format(status), + rss_content_postroll(status), + ] + end + + def rss_content_preroll(status) + if status.spoiler_text? + safe_join [ + tag.p { spoiler_with_warning(status) }, + tag.hr, + ] + end + end + + def spoiler_with_warning(status) + safe_join [ + tag.strong { I18n.t('rss.content_warning', locale: available_locale_or_nil(status.language) || I18n.default_locale) }, + status.spoiler_text, + ] + end + + def rss_content_postroll(status) + if status.preloadable_poll + tag.p do + poll_option_tags(status) + end + end + end + + def poll_option_tags(status) + safe_join( + status.preloadable_poll.options.map do |option| + tag.send(status.preloadable_poll.multiple? ? 'checkbox' : 'radio', option, disabled: true) + end, + tag.br + ) + end end diff --git a/spec/helpers/formatting_helper_spec.rb b/spec/helpers/formatting_helper_spec.rb index 136a609b1c9cf4..5ff534e4eb3873 100644 --- a/spec/helpers/formatting_helper_spec.rb +++ b/spec/helpers/formatting_helper_spec.rb @@ -6,19 +6,57 @@ include Devise::Test::ControllerHelpers describe '#rss_status_content_format' do - let(:status) { Fabricate(:status, text: 'Hello world<>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) } - let(:html) { helper.rss_status_content_format(status) } + subject { helper.rss_status_content_format(status) } - it 'renders the spoiler text' do - expect(html).to include('

This is a spoiler<>


') + context 'with a simple status' do + let(:status) { Fabricate.build :status, text: 'Hello world' } + + it 'renders the formatted elements' do + expect(parsed_result.css('p').first.text) + .to eq('Hello world') + end end - it 'renders the status text' do - expect(html).to include('

Hello world<>

') + context 'with a spoiler and an emoji and a poll' do + let(:status) { Fabricate(:status, text: 'Hello :world: <>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) } + + before { Fabricate :custom_emoji, shortcode: 'world' } + + it 'renders the formatted elements' do + expect(spoiler_node.css('strong').text) + .to eq('Content warning:') + expect(spoiler_node.text) + .to include('This is a spoiler<>') + expect(content_node.text) + .to eq('Hello <>') + expect(content_node.css('img').first.to_h.symbolize_keys) + .to include( + rel: 'emoji', + title: ':world:' + ) + expect(poll_node.css('radio').first.text) + .to eq('Yes<>') + expect(poll_node.css('radio').first.to_h.symbolize_keys) + .to include( + disabled: 'disabled' + ) + end + + def spoiler_node + parsed_result.css('p').first + end + + def content_node + parsed_result.css('p')[1] + end + + def poll_node + parsed_result.css('p').last + end end - it 'renders the poll' do - expect(html).to include('Yes<>
') + def parsed_result + Nokogiri::HTML.fragment(subject) end end end From 52bc33115d1dc0c544244aa008cb0f2c356531d1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 10:14:17 -0400 Subject: [PATCH 299/467] Add mention of encryption secrets to production sample (#32512) --- .env.production.sample | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.env.production.sample b/.env.production.sample index 0b458a1aa96dfb..87ea031c4ce535 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -45,6 +45,16 @@ ES_PASS=password SECRET_KEY_BASE= OTP_SECRET= +# Encryption secrets +# ------------------ +# Must be available (and set to same values) for all server processes +# These are private/secret values, do not share outside hosting environment +# Use `bin/rails db:encryption:init` to generate fresh secrets +# ------------------ +# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= +# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= +# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= + # Web Push # -------- # Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` From 28131b4b00e65826ac58a034d99b13123461940d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 10:18:20 -0400 Subject: [PATCH 300/467] Convert status embed controller to request spec (#32448) --- spec/controllers/statuses_controller_spec.rb | 72 ------------------- spec/requests/statuses/embed_spec.rb | 74 ++++++++++++++++++++ 2 files changed, 74 insertions(+), 72 deletions(-) create mode 100644 spec/requests/statuses/embed_spec.rb diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index d9702251f41d0a..121e4aa6c6f9e6 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -736,76 +736,4 @@ end end end - - describe 'GET #embed' do - let(:account) { Fabricate(:account) } - let(:status) { Fabricate(:status, account: account) } - - context 'when account is suspended' do - let(:account) { Fabricate(:account, suspended: true) } - - before do - get :embed, params: { account_username: account.username, id: status.id } - end - - it 'returns http gone' do - expect(response).to have_http_status(410) - end - end - - context 'when status is a reblog' do - let(:original_account) { Fabricate(:account, domain: 'example.com') } - let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } - let(:status) { Fabricate(:status, account: account, reblog: original_status) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - - context 'when status is public' do - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'renders status successfully', :aggregate_failures do - expect(response) - .to have_http_status(200) - .and render_template(:embed) - expect(response.headers).to include( - 'Vary' => 'Accept, Accept-Language, Cookie', - 'Cache-Control' => include('public'), - 'Link' => include('activity+json') - ) - end - end - - context 'when status is private' do - let(:status) { Fabricate(:status, account: account, visibility: :private) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - - context 'when status is direct' do - let(:status) { Fabricate(:status, account: account, visibility: :direct) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - end end diff --git a/spec/requests/statuses/embed_spec.rb b/spec/requests/statuses/embed_spec.rb new file mode 100644 index 00000000000000..33c7ea192c80a3 --- /dev/null +++ b/spec/requests/statuses/embed_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Status embed' do + describe 'GET /users/:account_username/statuses/:id/embed' do + subject { get "/users/#{account.username}/statuses/#{status.id}/embed" } + + let(:account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + + context 'when account is suspended' do + let(:account) { Fabricate(:account, suspended: true) } + + it 'returns http gone' do + subject + + expect(response) + .to have_http_status(410) + end + end + + context 'when status is a reblog' do + let(:original_account) { Fabricate(:account, domain: 'example.com') } + let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } + let(:status) { Fabricate(:status, account: account, reblog: original_status) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is public' do + it 'renders status successfully', :aggregate_failures do + subject + + expect(response) + .to have_http_status(200) + expect(response.parsed_body.at('body.embed')) + .to be_present + expect(response.headers).to include( + 'Vary' => 'Accept, Accept-Language, Cookie', + 'Cache-Control' => include('public'), + 'Link' => include('activity+json') + ) + end + end + + context 'when status is private' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is direct' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + end +end From 9e8f099d38029b74d46daa7edbadeaf7057aebfc Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 10:24:12 -0400 Subject: [PATCH 301/467] Improve `app/policies` coverage (#32426) --- .../account_moderation_note_policy_spec.rb | 5 +- spec/policies/account_policy_spec.rb | 3 +- spec/policies/account_warning_policy_spec.rb | 42 ++++++++++++++ .../account_warning_preset_policy_spec.rb | 5 +- spec/policies/admin/status_policy_spec.rb | 5 +- spec/policies/announcement_policy_spec.rb | 5 +- spec/policies/appeal_policy_spec.rb | 7 +-- spec/policies/audit_log_policy_spec.rb | 20 +++++++ spec/policies/backup_policy_spec.rb | 1 - .../canonical_email_block_policy_spec.rb | 5 +- spec/policies/custom_emoji_policy_spec.rb | 1 - spec/policies/dashboard_policy_spec.rb | 20 +++++++ spec/policies/delivery_policy_spec.rb | 5 +- spec/policies/domain_allow_policy_spec.rb | 24 ++++++++ spec/policies/domain_block_policy_spec.rb | 3 +- .../email_domain_block_policy_spec.rb | 1 - .../follow_recommendation_policy_spec.rb | 5 +- spec/policies/instance_policy_spec.rb | 1 - spec/policies/invite_policy_spec.rb | 1 - spec/policies/ip_block_policy_spec.rb | 5 +- spec/policies/poll_policy_spec.rb | 36 ++++++++++++ spec/policies/preview_card_policy_spec.rb | 5 +- .../preview_card_provider_policy_spec.rb | 5 +- spec/policies/relay_policy_spec.rb | 1 - spec/policies/report_note_policy_spec.rb | 1 - spec/policies/report_policy_spec.rb | 1 - spec/policies/rule_policy_spec.rb | 5 +- spec/policies/settings_policy_spec.rb | 1 - spec/policies/software_update_policy_spec.rb | 1 - spec/policies/status_policy_spec.rb | 1 - spec/policies/tag_policy_spec.rb | 1 - spec/policies/user_policy_spec.rb | 39 ++++++++++++- spec/policies/user_role_policy_spec.rb | 56 +++++++++++++++++++ spec/policies/webhook_policy_spec.rb | 1 - spec/rails_helper.rb | 1 + 35 files changed, 264 insertions(+), 55 deletions(-) create mode 100644 spec/policies/account_warning_policy_spec.rb create mode 100644 spec/policies/audit_log_policy_spec.rb create mode 100644 spec/policies/dashboard_policy_spec.rb create mode 100644 spec/policies/domain_allow_policy_spec.rb create mode 100644 spec/policies/poll_policy_spec.rb create mode 100644 spec/policies/user_role_policy_spec.rb diff --git a/spec/policies/account_moderation_note_policy_spec.rb b/spec/policies/account_moderation_note_policy_spec.rb index 8c37acc39fee83..8b33a71012702a 100644 --- a/spec/policies/account_moderation_note_policy_spec.rb +++ b/spec/policies/account_moderation_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountModerationNotePolicy do subject { described_class } @@ -12,13 +11,13 @@ permissions :create? do context 'when staff' do it 'grants to create' do - expect(subject).to permit(admin, described_class) + expect(subject).to permit(admin, AccountModerationNote) end end context 'when not staff' do it 'denies to create' do - expect(subject).to_not permit(john, described_class) + expect(subject).to_not permit(john, AccountModerationNote) end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index d7a21d8e39a77e..75724e831bed58 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountPolicy do subject { described_class } @@ -24,7 +23,7 @@ end end - permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do + permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header?, :sensitive?, :warn? do context 'when staff' do it 'permits' do expect(subject).to permit(admin, alice) diff --git a/spec/policies/account_warning_policy_spec.rb b/spec/policies/account_warning_policy_spec.rb new file mode 100644 index 00000000000000..9abc9d35d638c7 --- /dev/null +++ b/spec/policies/account_warning_policy_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountWarningPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :show? do + context 'with an admin' do + it { is_expected.to permit(admin, AccountWarning.new) } + end + + context 'with a non-admin' do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id)) } + end + end + end + + permissions :appeal? do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + context 'when record is appealable' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago + 1.hour)) } + end + + context 'when record is not appealable' do + it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago - 1.hour)) } + end + end + end +end diff --git a/spec/policies/account_warning_preset_policy_spec.rb b/spec/policies/account_warning_preset_policy_spec.rb index 53e224f19f7f00..33f2fb11870b2c 100644 --- a/spec/policies/account_warning_preset_policy_spec.rb +++ b/spec/policies/account_warning_preset_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountWarningPresetPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, AccountWarningPreset) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, AccountWarningPreset) end end end diff --git a/spec/policies/admin/status_policy_spec.rb b/spec/policies/admin/status_policy_spec.rb index 07af425516d93b..4df29393e3ae2d 100644 --- a/spec/policies/admin/status_policy_spec.rb +++ b/spec/policies/admin/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe Admin::StatusPolicy do let(:policy) { described_class } @@ -13,13 +12,13 @@ permissions :index?, :update?, :review?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Status) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Status) end end end diff --git a/spec/policies/announcement_policy_spec.rb b/spec/policies/announcement_policy_spec.rb index 503ffca6dca518..ab0c1dbaf5a2bb 100644 --- a/spec/policies/announcement_policy_spec.rb +++ b/spec/policies/announcement_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AnnouncementPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Announcement) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Announcement) end end end diff --git a/spec/policies/appeal_policy_spec.rb b/spec/policies/appeal_policy_spec.rb index 1bf8ce0a0da0e6..cdb93bf56cdf46 100644 --- a/spec/policies/appeal_policy_spec.rb +++ b/spec/policies/appeal_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AppealPolicy do let(:policy) { described_class } @@ -12,18 +11,18 @@ permissions :index? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Appeal) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Appeal) end end end - permissions :reject? do + permissions :reject?, :approve? do context 'with an admin' do context 'with a pending appeal' do before { allow(appeal).to receive(:pending?).and_return(true) } diff --git a/spec/policies/audit_log_policy_spec.rb b/spec/policies/audit_log_policy_spec.rb new file mode 100644 index 00000000000000..d9d9359433356e --- /dev/null +++ b/spec/policies/audit_log_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AuditLogPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/backup_policy_spec.rb b/spec/policies/backup_policy_spec.rb index 28cb65d7890730..031021d91dfe2c 100644 --- a/spec/policies/backup_policy_spec.rb +++ b/spec/policies/backup_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe BackupPolicy do subject { described_class } diff --git a/spec/policies/canonical_email_block_policy_spec.rb b/spec/policies/canonical_email_block_policy_spec.rb index f5029d9e6b60e8..b253b439a67dd4 100644 --- a/spec/policies/canonical_email_block_policy_spec.rb +++ b/spec/policies/canonical_email_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CanonicalEmailBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :show?, :test?, :create?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, CanonicalEmailBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, CanonicalEmailBlock) end end end diff --git a/spec/policies/custom_emoji_policy_spec.rb b/spec/policies/custom_emoji_policy_spec.rb index cb869c7d9a7ed7..189885938cf469 100644 --- a/spec/policies/custom_emoji_policy_spec.rb +++ b/spec/policies/custom_emoji_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CustomEmojiPolicy do subject { described_class } diff --git a/spec/policies/dashboard_policy_spec.rb b/spec/policies/dashboard_policy_spec.rb new file mode 100644 index 00000000000000..90c71db381b5cf --- /dev/null +++ b/spec/policies/dashboard_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DashboardPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/delivery_policy_spec.rb b/spec/policies/delivery_policy_spec.rb index bb82389eec8a47..8bc200159ac6e1 100644 --- a/spec/policies/delivery_policy_spec.rb +++ b/spec/policies/delivery_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DeliveryPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :clear_delivery_errors?, :restart_delivery?, :stop_delivery? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, nil) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, nil) end end end diff --git a/spec/policies/domain_allow_policy_spec.rb b/spec/policies/domain_allow_policy_spec.rb new file mode 100644 index 00000000000000..1d285065b854f5 --- /dev/null +++ b/spec/policies/domain_allow_policy_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DomainAllowPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:john) { Fabricate(:account) } + + permissions :index?, :show?, :create?, :destroy? do + context 'when admin' do + it 'permits' do + expect(subject).to permit(admin, DomainAllow) + end + end + + context 'when not admin' do + it 'denies' do + expect(subject).to_not permit(john, DomainAllow) + end + end + end +end diff --git a/spec/policies/domain_block_policy_spec.rb b/spec/policies/domain_block_policy_spec.rb index 4c89f3f37429ab..7c77d1870d0a9b 100644 --- a/spec/policies/domain_block_policy_spec.rb +++ b/spec/policies/domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DomainBlockPolicy do subject { described_class } @@ -9,7 +8,7 @@ let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } let(:john) { Fabricate(:account) } - permissions :index?, :show?, :create?, :destroy? do + permissions :index?, :show?, :create?, :destroy?, :update? do context 'when admin' do it 'permits' do expect(subject).to permit(admin, DomainBlock) diff --git a/spec/policies/email_domain_block_policy_spec.rb b/spec/policies/email_domain_block_policy_spec.rb index 7ecff4be499a16..e98d65a3c73408 100644 --- a/spec/policies/email_domain_block_policy_spec.rb +++ b/spec/policies/email_domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe EmailDomainBlockPolicy do subject { described_class } diff --git a/spec/policies/follow_recommendation_policy_spec.rb b/spec/policies/follow_recommendation_policy_spec.rb index ae74d5c3a862ab..665ed9b0595085 100644 --- a/spec/policies/follow_recommendation_policy_spec.rb +++ b/spec/policies/follow_recommendation_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe FollowRecommendationPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :show?, :suppress?, :unsuppress? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, FollowRecommendation) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, FollowRecommendation) end end end diff --git a/spec/policies/instance_policy_spec.rb b/spec/policies/instance_policy_spec.rb index a0d9a008b7b4d6..6cdc7380228296 100644 --- a/spec/policies/instance_policy_spec.rb +++ b/spec/policies/instance_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InstancePolicy do subject { described_class } diff --git a/spec/policies/invite_policy_spec.rb b/spec/policies/invite_policy_spec.rb index cbe3735d806ba5..3717a449993b95 100644 --- a/spec/policies/invite_policy_spec.rb +++ b/spec/policies/invite_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InvitePolicy do subject { described_class } diff --git a/spec/policies/ip_block_policy_spec.rb b/spec/policies/ip_block_policy_spec.rb index 97bc239e9ac91e..33ea342c10bffc 100644 --- a/spec/policies/ip_block_policy_spec.rb +++ b/spec/policies/ip_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe IpBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :show?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, IpBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, IpBlock) end end end diff --git a/spec/policies/poll_policy_spec.rb b/spec/policies/poll_policy_spec.rb new file mode 100644 index 00000000000000..aa1701cb06b750 --- /dev/null +++ b/spec/policies/poll_policy_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollPolicy do + subject { described_class } + + let(:account) { Fabricate(:account) } + let(:poll) { Fabricate :poll } + + permissions :vote? do + context 'when account cannot view status' do + before { poll.status.update(visibility: :private) } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when account can view status' do + context 'when accounts do not block each other' do + it { is_expected.to permit(account, poll) } + end + + context 'when view blocks poll creator' do + before { Fabricate :block, account: account, target_account: poll.account } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when poll creator blocks viewer' do + before { Fabricate :block, account: poll.account, target_account: account } + + it { is_expected.to_not permit(account, poll) } + end + end + end +end diff --git a/spec/policies/preview_card_policy_spec.rb b/spec/policies/preview_card_policy_spec.rb index a1944303e17ffc..d02a6016cd6944 100644 --- a/spec/policies/preview_card_policy_spec.rb +++ b/spec/policies/preview_card_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCard) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCard) end end end diff --git a/spec/policies/preview_card_provider_policy_spec.rb b/spec/policies/preview_card_provider_policy_spec.rb index 676039a1b79a97..5e25b364a4afe0 100644 --- a/spec/policies/preview_card_provider_policy_spec.rb +++ b/spec/policies/preview_card_provider_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardProviderPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCardProvider) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCardProvider) end end end diff --git a/spec/policies/relay_policy_spec.rb b/spec/policies/relay_policy_spec.rb index 29ba02c26a8bae..5983b2d2ffb20a 100644 --- a/spec/policies/relay_policy_spec.rb +++ b/spec/policies/relay_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RelayPolicy do subject { described_class } diff --git a/spec/policies/report_note_policy_spec.rb b/spec/policies/report_note_policy_spec.rb index b40a8788875fe5..02317f763adad8 100644 --- a/spec/policies/report_note_policy_spec.rb +++ b/spec/policies/report_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportNotePolicy do subject { described_class } diff --git a/spec/policies/report_policy_spec.rb b/spec/policies/report_policy_spec.rb index 4fc41780758933..67f40b518841e5 100644 --- a/spec/policies/report_policy_spec.rb +++ b/spec/policies/report_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportPolicy do subject { described_class } diff --git a/spec/policies/rule_policy_spec.rb b/spec/policies/rule_policy_spec.rb index 5d435e38c1fe33..3086f304463ddf 100644 --- a/spec/policies/rule_policy_spec.rb +++ b/spec/policies/rule_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RulePolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Rule) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Rule) end end end diff --git a/spec/policies/settings_policy_spec.rb b/spec/policies/settings_policy_spec.rb index 4a993149052b15..48821c706a7fff 100644 --- a/spec/policies/settings_policy_spec.rb +++ b/spec/policies/settings_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SettingsPolicy do subject { described_class } diff --git a/spec/policies/software_update_policy_spec.rb b/spec/policies/software_update_policy_spec.rb index e19ba616128db2..2bda84cce9e574 100644 --- a/spec/policies/software_update_policy_spec.rb +++ b/spec/policies/software_update_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SoftwareUpdatePolicy do subject { described_class } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 36ac8d8027a146..538742610c7ea7 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe StatusPolicy, type: :model do subject { described_class } diff --git a/spec/policies/tag_policy_spec.rb b/spec/policies/tag_policy_spec.rb index 35da3cc62a03df..23166e466921b6 100644 --- a/spec/policies/tag_policy_spec.rb +++ b/spec/policies/tag_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe TagPolicy do subject { described_class } diff --git a/spec/policies/user_policy_spec.rb b/spec/policies/user_policy_spec.rb index 7854547d26db60..11a166a24e0ffc 100644 --- a/spec/policies/user_policy_spec.rb +++ b/spec/policies/user_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe UserPolicy do subject { described_class } @@ -112,4 +111,42 @@ end end end + + permissions :approve?, :reject? do + context 'when admin' do + context 'when user is approved' do + it { is_expected.to_not permit(admin, User.new(approved: true)) } + end + + context 'when user is not approved' do + it { is_expected.to permit(admin, User.new(approved: false)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + end + + permissions :change_role? do + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + + context 'when admin' do + let(:user) { User.new(role: role) } + + context 'when role of admin overrides user role' do + let(:role) { UserRole.new(position: admin.user.role.position - 10, id: 123) } + + it { is_expected.to permit(admin, user) } + end + + context 'when role of admin does not override user role' do + let(:role) { UserRole.new(position: admin.user.role.position + 10, id: 123) } + + it { is_expected.to_not permit(admin, user) } + end + end + end end diff --git a/spec/policies/user_role_policy_spec.rb b/spec/policies/user_role_policy_spec.rb new file mode 100644 index 00000000000000..c48b345d68f6de --- /dev/null +++ b/spec/policies/user_role_policy_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UserRolePolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index?, :create? do + context 'when admin' do + it { is_expected.to permit(admin, UserRole.new) } + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :update? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10, id: 123)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10, id: 123)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :destroy? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10)) } + end + + context 'when everyone role' do + it { is_expected.to_not permit(admin, UserRole.everyone) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end +end diff --git a/spec/policies/webhook_policy_spec.rb b/spec/policies/webhook_policy_spec.rb index 96aaae2c306726..9899235d833673 100644 --- a/spec/policies/webhook_policy_spec.rb +++ b/spec/policies/webhook_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe WebhookPolicy do let(:policy) { described_class } diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 84cee0974f1a42..91a2e21bbbc796 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -43,6 +43,7 @@ require 'capybara/rspec' require 'chewy/rspec' require 'email_spec/rspec' +require 'pundit/rspec' require 'test_prof/recipes/rspec/before_all' Rails.root.glob('spec/support/**/*.rb').each { |f| require f } From c40cd79c4d90ad0613616c59cc029ab83d55ee48 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 15 Oct 2024 10:27:46 -0400 Subject: [PATCH 302/467] Convert `admin/invites` controller specs to system specs (#32450) --- app/views/admin/invites/_invite.html.haml | 2 +- .../admin/invites_controller_spec.rb | 59 ----------------- spec/system/admin/invites_spec.rb | 63 +++++++++++++++++++ 3 files changed, 64 insertions(+), 60 deletions(-) delete mode 100644 spec/controllers/admin/invites_controller_spec.rb create mode 100644 spec/system/admin/invites_spec.rb diff --git a/app/views/admin/invites/_invite.html.haml b/app/views/admin/invites/_invite.html.haml index 53eac1d0cddf89..e3e5d325428c6e 100644 --- a/app/views/admin/invites/_invite.html.haml +++ b/app/views/admin/invites/_invite.html.haml @@ -1,4 +1,4 @@ -%tr +%tr{ id: dom_id(invite) } %td .input-copy .input-copy__wrapper diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb deleted file mode 100644 index b6471e80b2766b..00000000000000 --- a/spec/controllers/admin/invites_controller_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::InvitesController do - render_views - - let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - subject { get :index, params: { available: true } } - - let!(:invite) { Fabricate(:invite) } - - it 'renders index page' do - expect(subject).to render_template :index - expect(response.body) - .to include(invite.code) - end - end - - describe 'POST #create' do - subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } } - - it 'succeeds to create a invite' do - expect { subject }.to change(Invite, :count).by(1) - expect(subject).to redirect_to admin_invites_path - expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10) - end - end - - describe 'DELETE #destroy' do - subject { delete :destroy, params: { id: invite.id } } - - let!(:invite) { Fabricate(:invite, expires_at: nil) } - - it 'expires invite' do - expect(subject).to redirect_to admin_invites_path - expect(invite.reload).to be_expired - end - end - - describe 'POST #deactivate_all' do - before { Fabricate(:invite, expires_at: nil) } - - it 'expires all invites, then redirects to admin_invites_path' do - expect { post :deactivate_all } - .to change { Invite.exists?(expires_at: nil) } - .from(true) - .to(false) - - expect(response).to redirect_to admin_invites_path - end - end -end diff --git a/spec/system/admin/invites_spec.rb b/spec/system/admin/invites_spec.rb new file mode 100644 index 00000000000000..f2cee626c68e27 --- /dev/null +++ b/spec/system/admin/invites_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Invites' do + describe 'Invite interaction' do + let!(:invite) { Fabricate(:invite, expires_at: nil) } + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before { sign_in user } + + it 'allows invite listing and creation' do + visit admin_invites_path + + expect(page) + .to have_title(I18n.t('admin.invites.title')) + for_invite(invite) do + expect(find('input').value) + .to include(invite.code) + end + + select I18n.t('invites.max_uses', count: 10), from: max_use_field + + expect { generate_invite } + .to change(Invite, :count).by(1) + expect(user.invites.last) + .to have_attributes(max_uses: 10) + end + + it 'allows invite expiration' do + visit admin_invites_path + + for_invite(invite) do + expect { expire_invite } + .to change { invite.reload.expired? }.from(false).to(true) + end + end + + it 'allows invite deactivation' do + visit admin_invites_path + + expect { click_on I18n.t('admin.invites.deactivate_all') } + .to change { Invite.exists?(expires_at: nil) }.from(true).to(false) + end + + def for_invite(invite, &block) + within("#invite_#{invite.id}", &block) + end + + def expire_invite + click_on I18n.t('invites.delete') + end + + def generate_invite + click_on I18n.t('invites.generate') + end + + def max_use_field + I18n.t('simple_form.labels.defaults.max_uses') + end + end +end From 7a7a7cc448514609a268a2c6bceca414783579ee Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 16 Oct 2024 09:27:44 +0200 Subject: [PATCH 303/467] Add back a 6 hours mute duration option (#32522) --- app/javascript/mastodon/features/ui/components/mute_modal.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.jsx b/app/javascript/mastodon/features/ui/components/mute_modal.jsx index 70d95b593161a1..90b88030a09f92 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/mute_modal.jsx @@ -116,6 +116,7 @@ export const MuteModal = ({ accountId, acct }) => {
+ From 25f8003d75515fb1c195c6f4ca2ea92a0d58163e Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 16 Oct 2024 09:30:53 +0200 Subject: [PATCH 304/467] Fix only the first paragraph being displayed in some notifications (#32348) --- app/javascript/styles/mastodon/components.scss | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 1f69dab7be7a32..a20e84ce757a80 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -10804,21 +10804,17 @@ noscript { color: $darker-text-color; -webkit-line-clamp: 4; -webkit-box-orient: vertical; - max-height: 4 * 22px; + max-height: none; overflow: hidden; - p { - display: none; - - &:first-child { - display: initial; - } - } - p, a { color: inherit; } + + p { + margin-bottom: 8px; + } } .reply-indicator__attachments { From 5900c8c7fd3fb0f3a99f144f79d864fcdedeeca5 Mon Sep 17 00:00:00 2001 From: Christian Winther Date: Wed, 16 Oct 2024 09:44:28 +0200 Subject: [PATCH 305/467] Run migration tests against postgres 16 and 17 as well (#32416) --- .github/workflows/test-migrations.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 6a0e67c58ee500..5b80fef03724db 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -32,6 +32,8 @@ jobs: postgres: - 14-alpine - 15-alpine + - 16-alpine + - 17-alpine services: postgres: From f8ba2122f84679b726050605f81c45b8de7380fa Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 16 Oct 2024 10:03:35 +0200 Subject: [PATCH 306/467] Explicitly install ImageMagick in CI (except for libvips tests) (#32534) --- .github/workflows/test-ruby.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 3da53c1ae8e0dc..c05c8333b2048c 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -143,7 +143,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev + additional-system-dependencies: ffmpeg imagemagick libpam-dev - name: Load database schema run: | @@ -245,7 +245,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev libyaml-dev + additional-system-dependencies: ffmpeg libpam-dev - name: Load database schema run: './bin/rails db:create db:schema:load db:seed' @@ -325,7 +325,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript @@ -445,7 +445,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript From bfe3d49ccad3b15d3b62e9c5e574132af3155f39 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 16 Oct 2024 04:06:34 -0400 Subject: [PATCH 307/467] Add `inline_jobs` to admin/reset spec (#32517) --- spec/system/admin/reset_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/system/admin/reset_spec.rb b/spec/system/admin/reset_spec.rb index 1e787ea110f2d4..d0f70a93f029d8 100644 --- a/spec/system/admin/reset_spec.rb +++ b/spec/system/admin/reset_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe 'Admin::Reset' do - it 'Resets password for account user' do + it 'Resets password for account user', :inline_jobs do account = Fabricate :account sign_in admin_user visit admin_account_path(account.id) From acc1973f3ac554a06d9eefdcff71822cbe7ee927 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:12:43 +0000 Subject: [PATCH 308/467] New Crowdin Translations (automated) (#32533) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ml.json | 29 +++++++++++++++++++------ app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/ru.json | 13 ++++++----- config/locales/ml.yml | 19 ++++++++++++++++ config/locales/sv.yml | 10 +++++++++ 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 35dc70cc98ac4a..66354de6662e20 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -15,6 +15,7 @@ "account.blocked": "തടഞ്ഞു", "account.cancel_follow_request": "Withdraw follow request", "account.copy": "രൂപരേഖയിന്റെ വിലാസം പകർത്തുക", + "account.direct": "സ്വകാരൃമായിട്ടു് @{name}-ന് സൂചനപിക്കുക", "account.disable_notifications": "@{name} പോസ്റ്റുചെയ്യുന്നത് എന്നെ അറിയിക്കുന്നത് നിർത്തുക", "account.domain_blocked": "മേഖല തടഞ്ഞു", "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", @@ -36,7 +37,11 @@ "account.media": "മീഡിയ", "account.mention": "@{name} സൂചിപ്പിക്കുക", "account.mute": "@{name}-നെ(യെ) നിശ്ശബ്ദമാക്കൂ", + "account.mute_notifications_short": "അറിയിപ്പുകൾ മിണ്ടാതാക്കുക", + "account.mute_short": "മിണ്ടാതാക്കുക", "account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു", + "account.no_bio": "വിവരണം നല്കുിയിട്ടില്ല.", + "account.open_original_page": "ആദ്യത്തു് താൾ തുറക്കുക", "account.posts": "പോസ്റ്റുകൾ", "account.posts_with_replies": "പോസ്റ്റുകളും മറുപടികളും", "account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}", @@ -83,6 +88,7 @@ "column.community": "പ്രാദേശികമായ സമയരേഖ", "column.directory": "പ്രൊഫൈലുകൾ മറിച്ചുനോക്കുക", "column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ", + "column.favourites": "പ്രിയപ്പെട്ടതു്", "column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "column.home": "ആമുഖം", "column.lists": "പട്ടികകൾ", @@ -102,6 +108,7 @@ "community.column_settings.media_only": "മാധ്യമങ്ങൾ മാത്രം", "compose.language.change": "ഭാഷ മാറ്റുക", "compose.language.search": "ഭാഷകൾ തിരയുക...", + "compose.published.open": "തുറക്കുക", "compose_form.direct_message_warning_learn_more": "കൂടുതൽ പഠിക്കുക", "compose_form.encryption_warning": "Mastodon-ലെ പോസ്റ്റുകൾ എൻഡ്-ടു-എൻഡ് എൻക്രിപ്റ്റ് ചെയ്തവയല്ല. അതിനാൽ Mastodon-ൽ പ്രധാനപ്പെട്ട വിവരങ്ങളൊന്നും പങ്കിടരുത്.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", @@ -119,12 +126,15 @@ "confirmations.block.confirm": "തടയുക", "confirmations.delete.confirm": "മായ്ക്കുക", "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirmations.delete.title": "എഴുത്തുൾ മായ്ക്കുക?", "confirmations.delete_list.confirm": "മായ്ക്കുക", "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", "confirmations.delete_list.title": "പട്ടിക കളയുണോ?", "confirmations.discard_edit_media.confirm": "കളയുക", + "confirmations.edit.confirm": "സംശോധിക്കുക", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", "confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?", + "confirmations.logout.title": "പുറത്തിറങ്ങുക?", "confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക", "confirmations.redraft.confirm": "മായിച്ച് മാറ്റങ്ങൾ വരുത്തി വീണ്ടും എഴുതുക", "confirmations.reply.confirm": "മറുപടി", @@ -143,6 +153,7 @@ "disabled_account_banner.text": "നിങ്ങളുടെ {disabledAccount} എന്ന അക്കൗണ്ട് ഇപ്പോൾ പ്രവർത്തനരഹിതമാണ്.", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "domain_block_modal.title": "മേഖല തടസ്സപെടുത്തുക?", "domain_pill.username": "ഉപയോക്തൃപേരു്", "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.", "embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:", @@ -183,6 +194,7 @@ "follow_request.reject": "നിരസിക്കുക", "follow_suggestions.dismiss": "വീണ്ടും കാണിക്കരുതു്", "follow_suggestions.view_all": "എല്ലാം കാണുക", + "footer.privacy_policy": "സ്വകാര്യത്തനയം", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.heading": "തുടക്കം കുറിക്കുക", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", @@ -197,8 +209,10 @@ "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", + "home.pending_critical_update.link": "പുതുകൾ കാണുക", "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", "interaction_modal.login.action": "ആമുഖം വരെ എടുത്തോണ്ടു് പോവുക", + "interaction_modal.login.prompt": "ആമുഖപ്രദാനിയുടെ മേഖലപേരു്. ഉദ: mastodon.social", "interaction_modal.on_this_server": "ഈ സെർവറീൽ", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", @@ -211,7 +225,7 @@ "keyboard_shortcuts.enter": "ടൂട്ട് എടുക്കാൻ", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ", - "keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്", + "keyboard_shortcuts.home": "ആമുഖം സമയരേഖ തുറക്കുക", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ", "keyboard_shortcuts.mention": "രചയിതാവിനെ സൂചിപ്പിക്കാൻ", @@ -239,6 +253,7 @@ "lists.delete": "പട്ടിക ഒഴിവാക്കുക", "lists.edit": "പട്ടിക തിരുത്തുക", "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", + "lists.exclusive": "ഈ എഴുത്തുകൾ ആമുഖം നിന്നു് മറയ്ക്കുക", "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", "lists.replies_policy.none": "ആരുമില്ല", "lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:", @@ -284,13 +299,13 @@ "notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക", "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക", "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.actions.go_to_home": "ആമുഖത്താൾ വരെ പോവ്വുക", + "onboarding.follows.lead": "", + "onboarding.follows.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", + "onboarding.steps.follow_people.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക", "onboarding.steps.publish_status.body": "Say hello to the world.", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", @@ -307,7 +322,7 @@ "privacy.public.short": "എല്ലാവര്‍ക്കും", "refresh": "പുതുക്കുക", "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", - "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!", + "regeneration_indicator.sublabel": "നിങ്ങളുടെ താങ്ങളുടെ ആമുഖത്താളിന് തയാറാക്കുന്നു!", "relative_time.days": "{number}ദിവസം", "relative_time.hours": "{number}മണി", "relative_time.just_now": "ഇപ്പോൾ", @@ -373,7 +388,7 @@ "upload_modal.preview_label": "പൂര്‍വ്വദൃശ്യം({ratio})", "upload_progress.label": "Uploading…", "video.close": "വീഡിയോ അടയ്ക്കുക", - "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", + "video.download": "ഫയൽ ഇറക്കുവയ്ക്കുക", "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക", "video.expand": "വീഡിയോ വികസപ്പിക്കൂ", "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 9ad646b82ce9fe..5c47312522b9dc 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -781,7 +781,7 @@ "status.bookmark": "Bladwijzer toevoegen", "status.cancel_reblog_private": "Niet langer boosten", "status.cannot_reblog": "Dit bericht kan niet geboost worden", - "status.continued_thread": "Vervolgt het gesprek", + "status.continued_thread": "Vervolg van gesprek", "status.copy": "Link naar bericht kopiëren", "status.delete": "Verwijderen", "status.detailed_status": "Uitgebreide gespreksweergave", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index de1f4e08853177..b4e7cc656bb0b8 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -34,7 +34,7 @@ "account.follow_back": "Подписаться в ответ", "account.followers": "Подписчики", "account.followers.empty": "На этого пользователя пока никто не подписан.", - "account.followers_counter": "{count, plural, one {{counter} последователя} other {{counter} последователей}}", + "account.followers_counter": "{count, plural, one {{counter} подписчик} few {{counter} подписчика} other {{counter} подписчиков}}", "account.following": "Подписки", "account.following_counter": "{count, plural, one {{counter} последующий} other {{counter} последующие}}", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", @@ -62,6 +62,7 @@ "account.requested_follow": "{name} отправил(а) вам запрос на подписку", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", + "account.statuses_counter": "{count, plural, one {# пост} few {# поста} many {# постов} other {# постов}}", "account.unblock": "Разблокировать @{name}", "account.unblock_domain": "Разблокировать {domain}", "account.unblock_short": "Разблокировать", @@ -77,8 +78,8 @@ "admin.dashboard.retention.cohort": "Месяц регистрации", "admin.dashboard.retention.cohort_size": "Новые пользователи", "admin.impact_report.instance_accounts": "Профили учетных записей, которые будут удалены", - "admin.impact_report.instance_followers": "Последователи, которых потеряют наши пользователи", - "admin.impact_report.instance_follows": "Последователи, которых потеряют наши пользователи", + "admin.impact_report.instance_followers": "Подписчики, которых потеряют наши пользователи", + "admin.impact_report.instance_follows": "Подписчики, которых потеряют их пользователи", "admin.impact_report.title": "Резюме воздействия", "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", "alert.rate_limited.title": "Ограничение количества запросов", @@ -353,7 +354,7 @@ "hashtag.follow": "Подписаться на новые посты", "hashtag.unfollow": "Отписаться", "hashtags.and_other": "...и {count, plural, other {# ещё}}", - "hints.profiles.followers_may_be_missing": "Последователи для этого профиля могут отсутствовать.", + "hints.profiles.followers_may_be_missing": "Подписчики у этого профиля могут отсутствовать.", "hints.profiles.follows_may_be_missing": "Фолловеры для этого профиля могут отсутствовать.", "hints.profiles.posts_may_be_missing": "Некоторые сообщения из этого профиля могут отсутствовать.", "hints.profiles.see_more_followers": "Посмотреть больше подписчиков на {domain}", @@ -508,7 +509,7 @@ "notification.follow": "{name} подписался (-лась) на вас", "notification.follow.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", - "notification.follow_request.name_and_others": "{name} и {count, plural, one {# другие} other {# другие}} последовали за тобой", + "notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас", "notification.label.mention": "Упоминание", "notification.label.private_mention": "Частное упоминание", "notification.label.private_reply": "Частный ответ", @@ -638,7 +639,7 @@ "onboarding.steps.share_profile.title": "Поделитесь вашим профилем", "onboarding.tips.2fa": "Знаете ли вы? Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!", "onboarding.tips.accounts_from_other_servers": "Знали ли вы? Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!", - "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих последователей. Вы даже можете разместить свой собственный сервер!", + "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих подписчиков. Вы даже можете разместить свой собственный сервер!", "onboarding.tips.verification": "Знали ли вы? Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!", "password_confirmation.exceeds_maxlength": "Срок подтверждения пароля превышает максимальную длину пароля", "password_confirmation.mismatching": "Введенные пароли не совпадают.", diff --git a/config/locales/ml.yml b/config/locales/ml.yml index bdc0475a6f9086..c27e5e5467a802 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -4,18 +4,25 @@ ml: contact_missing: സജ്ജമാക്കിയിട്ടില്ല contact_unavailable: ലഭ്യമല്ല accounts: + followers: + one: പിന്തുടരാളി + other: പിന്തുടരുന്നവർ following: പിന്തുടരുന്നു last_active: അവസാനം സജീവമായിരുന്നത് link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്‌കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു nothing_here: ഇവിടെ ഒന്നുമില്ല! posts_tab_heading: ടൂട്ടുകൾ admin: + account_moderation_notes: + create: ഒരു കുറിപ്പു് വിടുക accounts: + add_email_domain_block: ഈ ഇ-തപാൽ മേഖല തടസ്സപെടുത്തുക approve: അംഗീകരിക്കുക are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ? avatar: അവതാർ by_domain: മേഖല change_email: + changed_msg: ഇ-തപാൽ ശരിയായിട്ടു് മാറ്റീ! current_email: ഇപ്പോഴത്തെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത് @@ -24,6 +31,7 @@ ml: confirm: നിജപ്പെടുത്തുക confirmed: നിജപ്പെടുത്തി confirming: സ്ഥിരീകരിക്കുന്നു + custom: സ്വന്തമായ ഭേദഗതി delete: ഡാറ്റ ഇല്ലാതാക്കുക deleted: മായിച്ചു demote: തരം താഴ്ത്തുക @@ -34,7 +42,9 @@ ml: domain: മേഖല edit: തിരുത്തുക email: ഇമെയിൽ + email_status: ഇ-തപാൽ അവസ്ഥ header: തലക്കെട്ട് + inbox_url: ഇ-തപാല്പെട്ടി വിലാസം joined: ജോയിൻ ചെയ്‌തിരിക്കുന്നു location: all: എല്ലാം @@ -46,9 +56,18 @@ ml: all: എല്ലാം suspended: താൽക്കാലികമായി നിർത്തി title: മധ്യസ്ഥന്‍ + protocol: പെരുമാറ്റച്ചട്ടം + public: പൊതുവു് + remove_header: തലക്കെട്ടു് മാറ്റുക + resend_confirmation: + send: ഉറപ്പിക്കൽ-വിലാസം വീണ്ടും അയക്കുക reset: പുനഃക്രമീകരിക്കുക reset_password: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക search: തിരയുക + security: സുരക്ഷ + security_measures: + only_password: രഹസ്യവാക്ക് മാത്രം + silence: അതിർ title: അക്കൗണ്ടുകൾ unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ username: ഉപയോക്തൃനാമം diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 0823e658a8f852..df9b80f3f87b72 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -899,10 +899,15 @@ sv: trends: allow: Tillåt approved: Godkänd + confirm_disallow: Är du säker på att du vill förbjuda valda taggar? disallow: Neka links: allow: Tillåt länk allow_provider: Tillåt utgivare + confirm_allow: Är du säker på att du vill tillåta valda länkar? + confirm_allow_provider: Är du säker på att du vill tillåta valda leverantörer? + confirm_disallow: Är du säker på att du vill förbjuda valda länkar? + confirm_disallow_provider: Är du säker på att du vill förbjuda valda leverantörer? description_html: Detta är länkar som för närvarande delas mycket av konton som din server ser inlägg från. Det kan hjälpa dina användare att ta reda på vad som händer i världen. Inga länkar visas offentligt tills du godkänner utgivaren. Du kan också tillåta eller avvisa enskilda länkar. disallow: Blockera länk disallow_provider: Blockera utgivare @@ -926,6 +931,10 @@ sv: statuses: allow: Tillåt inlägg allow_account: Godkänn författare + confirm_allow: Är du säker på att du vill tillåta valda statusar? + confirm_allow_account: Är du säker på att du vill tillåta valda konton? + confirm_disallow: Är du säker på att du vill förbjuda valda statusar? + confirm_disallow_account: Är du säker på att du vill förbjuda valda konton? description_html: Detta är inlägg som din server vet om som för närvarande delas och favoriseras mycket just nu. Det kan hjälpa dina nya och återvändande användare att hitta fler människor att följa. Inga inlägg visas offentligt förrän du godkänner författaren, och författaren tillåter att deras konto föreslås till andra. Du kan också tillåta eller avvisa enskilda inlägg. disallow: Tillåt inte inlägg disallow_account: Tillåt inte författare @@ -1130,6 +1139,7 @@ sv: title: Låt oss få igång dig på %{domain}. status: account_status: Kontostatus + confirming: Väntar på att e-postbekräftelsen ska slutföras. functional: Ditt konto fungerar som det ska. pending: Din ansökan inväntar granskning. Detta kan ta tid. Du kommer att få ett e-postmeddelande om din ansökan har godkänts. redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}. From 6c87c76e1825a377ebb87fdfcf7f5c438c1be589 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 16 Oct 2024 10:33:11 +0200 Subject: [PATCH 309/467] Add ability to group follow notifications in WebUI (#32520) --- .../mastodon/actions/notification_groups.ts | 21 ++++++++++++------- .../components/column_settings.jsx | 2 ++ .../containers/column_settings_container.js | 7 ++++--- .../components/notification_follow.tsx | 14 +++++++++++-- app/javascript/mastodon/locales/en.json | 3 ++- .../mastodon/reducers/notification_groups.ts | 11 ++++++---- app/javascript/mastodon/reducers/settings.js | 4 ++++ app/javascript/mastodon/selectors/settings.ts | 3 +++ 8 files changed, 48 insertions(+), 17 deletions(-) diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index a359913e614bb4..a3c8095ac44fe4 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -8,6 +8,7 @@ import type { ApiAccountJSON } from 'mastodon/api_types/accounts'; import type { ApiNotificationGroupJSON, ApiNotificationJSON, + NotificationType, } from 'mastodon/api_types/notifications'; import { allNotificationTypes } from 'mastodon/api_types/notifications'; import type { ApiStatusJSON } from 'mastodon/api_types/statuses'; @@ -15,6 +16,7 @@ import { usePendingItems } from 'mastodon/initial_state'; import type { NotificationGap } from 'mastodon/reducers/notification_groups'; import { selectSettingsNotificationsExcludedTypes, + selectSettingsNotificationsGroupFollows, selectSettingsNotificationsQuickFilterActive, selectSettingsNotificationsShows, } from 'mastodon/selectors/settings'; @@ -68,17 +70,19 @@ function dispatchAssociatedRecords( dispatch(importFetchedStatuses(fetchedStatuses)); } -const supportedGroupedNotificationTypes = ['favourite', 'reblog']; +function selectNotificationGroupedTypes(state: RootState) { + const types: NotificationType[] = ['favourite', 'reblog']; -export function shouldGroupNotificationType(type: string) { - return supportedGroupedNotificationTypes.includes(type); + if (selectSettingsNotificationsGroupFollows(state)) types.push('follow'); + + return types; } export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), exclude_types: getExcludedTypes(getState()), }), ({ notifications, accounts, statuses }, { dispatch }) => { @@ -102,7 +106,7 @@ export const fetchNotificationsGap = createDataLoadingThunk( 'notificationGroups/fetchGap', async (params: { gap: NotificationGap }, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: params.gap.maxId, exclude_types: getExcludedTypes(getState()), }), @@ -119,7 +123,7 @@ export const pollRecentNotifications = createDataLoadingThunk( 'notificationGroups/pollRecentNotifications', async (_params, { getState }) => { return apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: undefined, exclude_types: getExcludedTypes(getState()), // In slow mode, we don't want to include notifications that duplicate the already-displayed ones @@ -168,7 +172,10 @@ export const processNewNotificationForGroups = createAppAsyncThunk( dispatchAssociatedRecords(dispatch, [notification]); - return notification; + return { + notification, + groupedTypes: selectNotificationGroupedTypes(state), + }; }, ); diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.jsx b/app/javascript/mastodon/features/notifications/components/column_settings.jsx index ed2947c1754be1..9616adcb9370f0 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.jsx +++ b/app/javascript/mastodon/features/notifications/components/column_settings.jsx @@ -38,6 +38,7 @@ class ColumnSettings extends PureComponent { const alertStr = ; const showStr = ; const soundStr = ; + const groupStr = ; const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed'); const pushStr = showPushSettings && ; @@ -94,6 +95,7 @@ class ColumnSettings extends PureComponent { {showPushSettings && } +

diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index 8bcc7ab4ef79ab..4ac6cfa629ba10 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -56,11 +56,12 @@ const mapDispatchToProps = (dispatch) => ({ } else { dispatch(changeSetting(['notifications', ...path], checked)); } - } else if(path[0] === 'groupingBeta') { - dispatch(changeSetting(['notifications', ...path], checked)); - dispatch(initializeNotifications()); } else { dispatch(changeSetting(['notifications', ...path], checked)); + + if(path[0] === 'group' && path[1] === 'follow') { + dispatch(initializeNotifications()); + } } }, diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx index 6a9a45d242c348..2c90777b9f62a4 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx @@ -1,16 +1,19 @@ import { FormattedMessage } from 'react-intl'; +import { Link } from 'react-router-dom'; + import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; import { FollowersCounter } from 'mastodon/components/counters'; import { FollowButton } from 'mastodon/components/follow_button'; import { ShortNumber } from 'mastodon/components/short_number'; +import { me } from 'mastodon/initial_state'; import type { NotificationGroupFollow } from 'mastodon/models/notification_group'; import { useAppSelector } from 'mastodon/store'; import type { LabelRenderer } from './notification_group_with_status'; import { NotificationGroupWithStatus } from './notification_group_with_status'; -const labelRenderer: LabelRenderer = (displayedName, total) => { +const labelRenderer: LabelRenderer = (displayedName, total, seeMoreHref) => { if (total === 1) return ( { return ( + seeMoreHref ? {chunks} : chunks, }} /> ); @@ -46,6 +51,10 @@ export const NotificationFollow: React.FC<{ notification: NotificationGroupFollow; unread: boolean; }> = ({ notification, unread }) => { + const username = useAppSelector( + (state) => state.accounts.getIn([me, 'username']) as string, + ); + let actions: JSX.Element | undefined; let additionalContent: JSX.Element | undefined; @@ -68,6 +77,7 @@ export const NotificationFollow: React.FC<{ timestamp={notification.latest_page_notification_at} count={notification.notifications_count} labelRenderer={labelRenderer} + labelSeeMoreHref={`/@${username}/followers`} unread={unread} actions={actions} additionalContent={additionalContent} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 7f8dc74779824f..eb29c0371257fd 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} favorited your post", "notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your post", "notification.follow": "{name} followed you", - "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", + "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", "notification.follow_request": "{name} has requested to follow you", "notification.follow_request.name_and_others": "{name} and {count, plural, one {# other} other {# others}} has requested to follow you", "notification.label.mention": "Mention", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.group": "Group", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Poll results:", "notifications.column_settings.push": "Push notifications", diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index 91e91d754937c6..7a165f5fec1297 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -21,7 +21,6 @@ import { unmountNotifications, refreshStaleNotificationGroups, pollRecentNotifications, - shouldGroupNotificationType, } from 'mastodon/actions/notification_groups'; import { disconnectTimeline, @@ -30,6 +29,7 @@ import { import type { ApiNotificationJSON, ApiNotificationGroupJSON, + NotificationType, } from 'mastodon/api_types/notifications'; import { compareId } from 'mastodon/compare_id'; import { usePendingItems } from 'mastodon/initial_state'; @@ -205,8 +205,9 @@ function mergeGapsAround( function processNewNotification( groups: NotificationGroupsState['groups'], notification: ApiNotificationJSON, + groupedTypes: NotificationType[], ) { - if (!shouldGroupNotificationType(notification.type)) { + if (!groupedTypes.includes(notification.type)) { notification = { ...notification, group_key: `ungrouped-${notification.id}`, @@ -476,11 +477,13 @@ export const notificationGroupsReducer = createReducer( trimNotifications(state); }) .addCase(processNewNotificationForGroups.fulfilled, (state, action) => { - const notification = action.payload; - if (notification) { + if (action.payload) { + const { notification, groupedTypes } = action.payload; + processNewNotification( usePendingItems ? state.pendingGroups : state.groups, notification, + groupedTypes, ); updateLastReadId(state); trimNotifications(state); diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index e5ff2ff9104615..fc02ac71860dc8 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -78,6 +78,10 @@ const initialState = ImmutableMap({ 'admin.sign_up': true, 'admin.report': true, }), + + group: ImmutableMap({ + follow: true + }), }), firehose: ImmutableMap({ diff --git a/app/javascript/mastodon/selectors/settings.ts b/app/javascript/mastodon/selectors/settings.ts index e722ad09112034..ca3437416746fc 100644 --- a/app/javascript/mastodon/selectors/settings.ts +++ b/app/javascript/mastodon/selectors/settings.ts @@ -52,4 +52,7 @@ export const selectSettingsNotificationsMinimizeFilteredBanner = ( ) => state.settings.getIn(['notifications', 'minimizeFilteredBanner']) as boolean; +export const selectSettingsNotificationsGroupFollows = (state: RootState) => + state.settings.getIn(['notifications', 'group', 'follow']) as boolean; + /* eslint-enable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ From 6ff1954bdbab3432807615c70849b181b1bef54b Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 16 Oct 2024 10:43:45 +0200 Subject: [PATCH 310/467] Change Active Record Encryption variable check to check for emptiness (#32537) --- .env.production.sample | 1 + config/initializers/active_record_encryption.rb | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.env.production.sample b/.env.production.sample index 87ea031c4ce535..3dd66abae4fc06 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -50,6 +50,7 @@ OTP_SECRET= # Must be available (and set to same values) for all server processes # These are private/secret values, do not share outside hosting environment # Use `bin/rails db:encryption:init` to generate fresh secrets +# Do not change these secrets once in use, as this would cause data loss and other issues # ------------------ # ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= # ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= diff --git a/config/initializers/active_record_encryption.rb b/config/initializers/active_record_encryption.rb index c53f16d4d14da1..9ae28e401bab4d 100644 --- a/config/initializers/active_record_encryption.rb +++ b/config/initializers/active_record_encryption.rb @@ -10,7 +10,9 @@ ENV[key] = SecureRandom.hex(64) end - value = ENV.fetch(key) do + value = ENV.fetch(key, '') + + if value.blank? abort <<~MESSAGE Mastodon now requires that these variables are set: From bc2e642272eec058f153b59b155712e61bc2af7d Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Wed, 16 Oct 2024 12:40:40 +0200 Subject: [PATCH 311/467] Fix: Reword 'pick one' to 'single choice' for polls (#32397) --- .../mastodon/features/compose/components/poll_form.jsx | 2 +- app/javascript/mastodon/locales/en-GB.json | 2 +- app/javascript/mastodon/locales/en.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/compose/components/poll_form.jsx b/app/javascript/mastodon/features/compose/components/poll_form.jsx index d2adc58cc08ad9..e8d53311965b33 100644 --- a/app/javascript/mastodon/features/compose/components/poll_form.jsx +++ b/app/javascript/mastodon/features/compose/components/poll_form.jsx @@ -25,7 +25,7 @@ const messages = defineMessages({ minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' }, hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' }, days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' }, - singleChoice: { id: 'compose_form.poll.single', defaultMessage: 'Pick one' }, + singleChoice: { id: 'compose_form.poll.single', defaultMessage: 'Single choice' }, multipleChoice: { id: 'compose_form.poll.multiple', defaultMessage: 'Multiple choice' }, }); diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index d0b93d8bb8a1de..bc8d1a419f5a6d 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Poll duration", "compose_form.poll.multiple": "Multiple choice", "compose_form.poll.option_placeholder": "Option {number}", - "compose_form.poll.single": "Pick one", + "compose_form.poll.single": "Single choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.poll.type": "Style", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index eb29c0371257fd..46b7d90dba8d50 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Poll duration", "compose_form.poll.multiple": "Multiple choice", "compose_form.poll.option_placeholder": "Option {number}", - "compose_form.poll.single": "Pick one", + "compose_form.poll.single": "Single choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.poll.type": "Style", From a0c7b317a727521a8c5d9c5af9a4d29107fd9a40 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 16 Oct 2024 08:52:06 -0400 Subject: [PATCH 312/467] Update rails to version 7.1.4.1 (#32542) --- Gemfile.lock | 106 +++++++++++++++++++++++++-------------------------- package.json | 2 +- yarn.lock | 10 ++--- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0de74c5ed61d14..d1ee8e0fa8eacd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,35 +10,35 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) + actioncable (7.1.4.1) + actionpack (= 7.1.4.1) + activesupport (= 7.1.4.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + actionmailbox (7.1.4.1) + actionpack (= 7.1.4.1) + activejob (= 7.1.4.1) + activerecord (= 7.1.4.1) + activestorage (= 7.1.4.1) + activesupport (= 7.1.4.1) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.4) - actionpack (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activesupport (= 7.1.4) + actionmailer (7.1.4.1) + actionpack (= 7.1.4.1) + actionview (= 7.1.4.1) + activejob (= 7.1.4.1) + activesupport (= 7.1.4.1) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.4) - actionview (= 7.1.4) - activesupport (= 7.1.4) + actionpack (7.1.4.1) + actionview (= 7.1.4.1) + activesupport (= 7.1.4.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -46,15 +46,15 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.4) - actionpack (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + actiontext (7.1.4.1) + actionpack (= 7.1.4.1) + activerecord (= 7.1.4.1) + activestorage (= 7.1.4.1) + activesupport (= 7.1.4.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.4) - activesupport (= 7.1.4) + actionview (7.1.4.1) + activesupport (= 7.1.4.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -64,22 +64,22 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.4) - activesupport (= 7.1.4) + activejob (7.1.4.1) + activesupport (= 7.1.4.1) globalid (>= 0.3.6) - activemodel (7.1.4) - activesupport (= 7.1.4) - activerecord (7.1.4) - activemodel (= 7.1.4) - activesupport (= 7.1.4) + activemodel (7.1.4.1) + activesupport (= 7.1.4.1) + activerecord (7.1.4.1) + activemodel (= 7.1.4.1) + activesupport (= 7.1.4.1) timeout (>= 0.4.0) - activestorage (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activesupport (= 7.1.4) + activestorage (7.1.4.1) + actionpack (= 7.1.4.1) + activejob (= 7.1.4.1) + activerecord (= 7.1.4.1) + activesupport (= 7.1.4.1) marcel (~> 1.0) - activesupport (7.1.4) + activesupport (7.1.4.1) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -638,20 +638,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.4) - actioncable (= 7.1.4) - actionmailbox (= 7.1.4) - actionmailer (= 7.1.4) - actionpack (= 7.1.4) - actiontext (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activemodel (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + rails (7.1.4.1) + actioncable (= 7.1.4.1) + actionmailbox (= 7.1.4.1) + actionmailer (= 7.1.4.1) + actionpack (= 7.1.4.1) + actiontext (= 7.1.4.1) + actionview (= 7.1.4.1) + activejob (= 7.1.4.1) + activemodel (= 7.1.4.1) + activerecord (= 7.1.4.1) + activestorage (= 7.1.4.1) + activesupport (= 7.1.4.1) bundler (>= 1.15.0) - railties (= 7.1.4) + railties (= 7.1.4.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -666,9 +666,9 @@ GEM rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) + railties (7.1.4.1) + actionpack (= 7.1.4.1) + activesupport (= 7.1.4.1) irb rackup (>= 1.0.0) rake (>= 12.2) diff --git a/package.json b/package.json index 7a6dee131188ce..24770e6d254d2f 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@formatjs/intl-pluralrules": "^5.2.2", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", - "@rails/ujs": "7.1.400", + "@rails/ujs": "7.1.401", "@reduxjs/toolkit": "^2.0.1", "@svgr/webpack": "^5.5.0", "arrow-key-navigation": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index 626b7bae21f5ac..2e1ad6ade64be6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2803,7 +2803,7 @@ __metadata: "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" - "@rails/ujs": "npm:7.1.400" + "@rails/ujs": "npm:7.1.401" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -3102,10 +3102,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.400": - version: 7.1.400 - resolution: "@rails/ujs@npm:7.1.400" - checksum: 10c0/181329e731b925788a530dc5bc44eb4a07ae780e20b0309fd9140ebeeca30d9432ed50be0f25ae60f10beb3aa8883f6d662e4b9c6f6cd19a32c1f42ab2505c47 +"@rails/ujs@npm:7.1.401": + version: 7.1.401 + resolution: "@rails/ujs@npm:7.1.401" + checksum: 10c0/08eae084c80e837e47cc01d0be25a431495f7dea381dcaaa4ce39a3217fac46bf87d169b3dfcf304ae16e0714de7435c2b8c5eb8d5052e3ba70ef3050a72fa3c languageName: node linkType: hard From 5103abc3ec8fa8923541ad03b94fa7924b017b6c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 17 Oct 2024 03:22:13 -0400 Subject: [PATCH 313/467] Fix trailing slash newline in changelog (#32545) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 566c474356d10d..0fc5291d7226b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,7 +67,7 @@ The following changelog entries focus on changes visible to users, administrator ```html ``` - On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\ + On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors \ Users can allow arbitrary domains to use `fediverse:creator` to credit them by visiting `/settings/verification`.\ This is federated as a new `attributionDomains` property in the `http://joinmastodon.org/ns` namespace, containing an array of domain names: https://docs.joinmastodon.org/spec/activitypub/#properties-used-1 - **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\ From b23ff050acebeac7ce09581ad65151b361362998 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Thu, 17 Oct 2024 10:17:18 +0200 Subject: [PATCH 314/467] Fix missing or incorrect cache-control headers for Streaming server (#32551) --- streaming/index.js | 4 ++-- streaming/metrics.js | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index 48ed56b29b5d08..3e362f18604e68 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -235,7 +235,7 @@ const startServer = async () => { app.get('/favicon.ico', (_req, res) => res.status(404).end()); app.get('/api/v1/streaming/health', (_req, res) => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.writeHead(200, { 'Content-Type': 'text/plain', 'Cache-Control': 'private, no-store' }); res.end('OK'); }); @@ -858,7 +858,7 @@ const startServer = async () => { } res.setHeader('Content-Type', 'text/event-stream'); - res.setHeader('Cache-Control', 'no-store'); + res.setHeader('Cache-Control', 'private, no-store'); res.setHeader('Transfer-Encoding', 'chunked'); res.write(':)\n'); diff --git a/streaming/metrics.js b/streaming/metrics.js index bb6bce3f3c16a4..263339a1cafb6c 100644 --- a/streaming/metrics.js +++ b/streaming/metrics.js @@ -98,9 +98,11 @@ export function setupMetrics(channels, pgPool) { const requestHandler = (req, res) => { metrics.register.metrics().then((output) => { res.set('Content-Type', metrics.register.contentType); + res.set('Cache-Control', 'private, no-store'); res.end(output); }).catch((err) => { req.log.error(err, "Error collecting metrics"); + res.set('Cache-Control', 'private, no-store'); res.status(500).end(); }); }; From 009f2ebc324458209c8827eab64cb7d9c81f3404 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:21:51 +0200 Subject: [PATCH 315/467] New Crowdin Translations (automated) (#32553) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/ast.json | 1 + app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/bg.json | 2 -- app/javascript/mastodon/locales/br.json | 3 ++- app/javascript/mastodon/locales/ca.json | 2 -- app/javascript/mastodon/locales/ckb.json | 1 - app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 2 -- app/javascript/mastodon/locales/da.json | 4 ++-- app/javascript/mastodon/locales/de.json | 3 ++- app/javascript/mastodon/locales/el.json | 2 -- app/javascript/mastodon/locales/en-GB.json | 2 -- app/javascript/mastodon/locales/eo.json | 5 ++-- app/javascript/mastodon/locales/es-AR.json | 5 ++-- app/javascript/mastodon/locales/es-MX.json | 11 +++++---- app/javascript/mastodon/locales/es.json | 5 ++-- app/javascript/mastodon/locales/et.json | 2 -- app/javascript/mastodon/locales/eu.json | 2 -- app/javascript/mastodon/locales/fa.json | 2 -- app/javascript/mastodon/locales/fi.json | 5 ++-- app/javascript/mastodon/locales/fil.json | 1 - app/javascript/mastodon/locales/fo.json | 5 ++-- app/javascript/mastodon/locales/fr-CA.json | 9 +++---- app/javascript/mastodon/locales/fr.json | 13 +++++----- app/javascript/mastodon/locales/fy.json | 2 -- app/javascript/mastodon/locales/ga.json | 5 ++-- app/javascript/mastodon/locales/gd.json | 2 -- app/javascript/mastodon/locales/gl.json | 5 ++-- app/javascript/mastodon/locales/he.json | 2 -- app/javascript/mastodon/locales/hi.json | 1 - app/javascript/mastodon/locales/hu.json | 5 ++-- app/javascript/mastodon/locales/ia.json | 2 -- app/javascript/mastodon/locales/id.json | 1 - app/javascript/mastodon/locales/ie.json | 1 - app/javascript/mastodon/locales/ig.json | 1 - app/javascript/mastodon/locales/io.json | 2 -- app/javascript/mastodon/locales/is.json | 5 ++-- app/javascript/mastodon/locales/it.json | 4 ++-- app/javascript/mastodon/locales/ja.json | 2 -- app/javascript/mastodon/locales/kab.json | 1 - app/javascript/mastodon/locales/ko.json | 3 ++- app/javascript/mastodon/locales/lad.json | 15 +++++++++++- app/javascript/mastodon/locales/lt.json | 3 ++- app/javascript/mastodon/locales/lv.json | 1 - app/javascript/mastodon/locales/ml.json | 25 ++++++++++++++++++++ app/javascript/mastodon/locales/ms.json | 1 - app/javascript/mastodon/locales/nl.json | 3 ++- app/javascript/mastodon/locales/nn.json | 5 ++-- app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/pl.json | 5 ++-- app/javascript/mastodon/locales/pt-BR.json | 5 ++-- app/javascript/mastodon/locales/pt-PT.json | 2 -- app/javascript/mastodon/locales/ro.json | 1 - app/javascript/mastodon/locales/ru.json | 2 -- app/javascript/mastodon/locales/ry.json | 1 - app/javascript/mastodon/locales/sc.json | 2 -- app/javascript/mastodon/locales/sk.json | 1 - app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 3 +-- app/javascript/mastodon/locales/sr-Latn.json | 1 - app/javascript/mastodon/locales/sr.json | 1 - app/javascript/mastodon/locales/sv.json | 3 +-- app/javascript/mastodon/locales/th.json | 2 -- app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 5 ++-- app/javascript/mastodon/locales/uk.json | 3 +-- app/javascript/mastodon/locales/vi.json | 3 ++- app/javascript/mastodon/locales/zh-CN.json | 3 ++- app/javascript/mastodon/locales/zh-HK.json | 1 - app/javascript/mastodon/locales/zh-TW.json | 5 ++-- config/locales/activerecord.lad.yml | 5 ++++ config/locales/doorkeeper.sv.yml | 1 + config/locales/eo.yml | 12 ++++++++++ config/locales/es-MX.yml | 22 ++++++++--------- config/locales/hu.yml | 1 + config/locales/lad.yml | 5 ++++ config/locales/nn.yml | 10 ++++---- config/locales/ru.yml | 2 ++ config/locales/simple_form.lad.yml | 1 + config/locales/simple_form.nn.yml | 2 +- config/locales/sv.yml | 19 +++++++++++++++ 82 files changed, 184 insertions(+), 135 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index b11382cf0312b6..6d8290f8a13294 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -157,7 +157,6 @@ "compose_form.poll.duration": "مُدَّة اِستطلاع الرأي", "compose_form.poll.multiple": "متعدد الخيارات", "compose_form.poll.option_placeholder": "الخيار {number}", - "compose_form.poll.single": "اختر واحدا", "compose_form.poll.switch_to_multiple": "تغيِير الاستطلاع للسماح باِخيارات مُتعدِّدة", "compose_form.poll.switch_to_single": "تغيِير الاستطلاع للسماح باِخيار واحد فقط", "compose_form.poll.type": "الطراز", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index a7f44aeadeb83a..f2a0c22a771550 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -300,6 +300,7 @@ "notifications.column_settings.admin.sign_up": "Rexistros nuevos:", "notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow_request": "Solicitúes de siguimientu nueves:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultaos de les encuestes:", "notifications.column_settings.reblog": "Artículos compartíos:", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index d3a29eae408821..eb5cd5053dd5a9 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -156,7 +156,6 @@ "compose_form.poll.duration": "Працягласць апытання", "compose_form.poll.multiple": "Множны выбар", "compose_form.poll.option_placeholder": "Варыянт {number}", - "compose_form.poll.single": "Адзін варыянт", "compose_form.poll.switch_to_multiple": "Змяніце апытанне, каб дазволіць некалькі варыянтаў адказу", "compose_form.poll.switch_to_single": "Змяніце апытанне, каб дазволіць адзіны варыянт адказу", "compose_form.poll.type": "Стыль", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 1e462ba752757c..3d5d8a85850879 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Времетраене на анкетата", "compose_form.poll.multiple": "Множествен избор", "compose_form.poll.option_placeholder": "Избор {number}", - "compose_form.poll.single": "Подберете нещо", "compose_form.poll.switch_to_multiple": "Промяна на анкетата, за да се позволят множество възможни избора", "compose_form.poll.switch_to_single": "Промяна на анкетата, за да се позволи един възможен избор", "compose_form.poll.type": "Стил", @@ -490,7 +489,6 @@ "notification.favourite": "{name} направи любима публикацията ви", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} направиха любима ваша публикация", "notification.follow": "{name} ви последва", - "notification.follow.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} ви последваха", "notification.follow_request": "{name} поиска да ви последва", "notification.follow_request.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} поискаха да ви последват", "notification.label.mention": "Споменаване", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 79949ed91f132e..1f0c90efcb048b 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -145,7 +145,6 @@ "compose_form.poll.duration": "Pad ar sontadeg", "compose_form.poll.multiple": "Meur a choaz", "compose_form.poll.option_placeholder": "Choaz {number}", - "compose_form.poll.single": "Dibabit unan", "compose_form.poll.switch_to_multiple": "Kemmañ ar sontadeg evit aotren meur a zibab", "compose_form.poll.switch_to_single": "Kemmañ ar sontadeg evit aotren un dibab hepken", "compose_form.poll.type": "Neuz", @@ -385,6 +384,7 @@ "notification.admin.report": "Disklêriet eo bet {target} gant {name}", "notification.admin.sign_up": "{name} en·he deus lakaet e·hec'h anv", "notification.follow": "heuliañ a ra {name} ac'hanoc'h", + "notification.follow.name_and_others": "{name} {count, plural, one {hag # den all} two {ha # zen all} few {ha # den all} many {ha # den all} other {ha # den all}} zo o heuliañ ac'hanoc'h", "notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ", "notification.moderation-warning.learn_more": "Gouzout hiroc'h", "notification.own_poll": "Echu eo ho sontadeg", @@ -399,6 +399,7 @@ "notifications.column_settings.favourite": "Muiañ-karet:", "notifications.column_settings.follow": "Heulierien nevez:", "notifications.column_settings.follow_request": "Pedadoù heuliañ nevez :", + "notifications.column_settings.group": "Strollañ", "notifications.column_settings.mention": "Menegoù:", "notifications.column_settings.poll": "Disoc'hoù ar sontadeg:", "notifications.column_settings.push": "Kemennoù push", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 1b583b32044622..990a3ef97d373e 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.multiple": "Opcions múltiples", "compose_form.poll.option_placeholder": "Opció {number}", - "compose_form.poll.single": "Trieu-ne una", "compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre múltiples opcions", "compose_form.poll.switch_to_single": "Canvia l’enquesta per a permetre una única opció", "compose_form.poll.type": "Estil", @@ -508,7 +507,6 @@ "notification.favourite": "{name} ha afavorit el teu tut", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# altre} other {# altres}} han afavorit la vostra publicació", "notification.follow": "{name} et segueix", - "notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit", "notification.follow_request": "{name} ha sol·licitat de seguir-te", "notification.follow_request.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} han demanat de seguir-vos", "notification.label.mention": "Menció", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index bea6e5ceecc12f..469cf4410d96c6 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -143,7 +143,6 @@ "compose_form.poll.duration": "ماوەی ڕاپرسی", "compose_form.poll.multiple": "فرە هەڵبژاردە", "compose_form.poll.option_placeholder": "بژاردەی {number}", - "compose_form.poll.single": "یەکێك هەلبژێرە", "compose_form.poll.switch_to_multiple": "ڕاپرسی بگۆڕە بۆ ڕێگەدان بە چەند هەڵبژاردنێک", "compose_form.poll.switch_to_single": "گۆڕینی ڕاپرسی بۆ ڕێگەدان بە تاکە هەڵبژاردنێک", "compose_form.poll.type": "ستایڵ", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1f2804daa5f657..7198bcab580c18 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -157,7 +157,6 @@ "compose_form.poll.duration": "Doba trvání ankety", "compose_form.poll.multiple": "Výběr z více možností", "compose_form.poll.option_placeholder": "Volba {number}", - "compose_form.poll.single": "Vyber jednu", "compose_form.poll.switch_to_multiple": "Povolit u ankety výběr více voleb", "compose_form.poll.switch_to_single": "Povolit u ankety výběr pouze jedné volby", "compose_form.poll.type": "Styl", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 43446f31e0eafe..8645c72faa882e 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Cyfnod pleidlais", "compose_form.poll.multiple": "Dewis lluosog", "compose_form.poll.option_placeholder": "Dewis {number}", - "compose_form.poll.single": "Ddewis un", "compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", "compose_form.poll.type": "Arddull", @@ -508,7 +507,6 @@ "notification.favourite": "Ffafriodd {name} eich postiad", "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# eraill}} eich postiad", "notification.follow": "Dilynodd {name} chi", - "notification.follow.name_and_others": "Mae {name} a {count, plural, one {# other} other {# others}} wedi'ch dilyn chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# other} other {# others}} wedi gofyn i'ch dilyn chi", "notification.label.mention": "Crybwyll", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e225bb30aefce1..0227702d515d28 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.multiple": "Multivalg", "compose_form.poll.option_placeholder": "Valgmulighed {number}", - "compose_form.poll.single": "Vælg én", "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype", "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype", "compose_form.poll.type": "Stil", @@ -508,7 +507,7 @@ "notification.favourite": "{name} favoritmarkerede dit indlæg", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit", "notification.follow": "{name} begyndte at følge dig", - "notification.follow.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} følger dig", + "notification.follow.name_and_others": "{name} og {count, plural, one {# andre} other {# andre}} begyndte at følge dig", "notification.follow_request": "{name} har anmodet om at følge dig", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} har anmodet om at følger dig", "notification.label.mention": "Omtale", @@ -567,6 +566,7 @@ "notifications.column_settings.filter_bar.category": "Hurtigfiltreringsbjælke", "notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow_request": "Nye følgeanmodninger:", + "notifications.column_settings.group": "Gruppere", "notifications.column_settings.mention": "Omtaler:", "notifications.column_settings.poll": "Afstemningsresultater:", "notifications.column_settings.push": "Push-notifikationer", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index b807d93ab3d720..75672a60d6c378 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} favorisierte deinen Beitrag", "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} favorisierten deinen Beitrag", "notification.follow": "{name} folgt dir", - "notification.follow.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} folgen dir", + "notification.follow.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} folgen dir", "notification.follow_request": "{name} möchte dir folgen", "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} möchten dir folgen", "notification.label.mention": "Erwähnung", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Filterleiste", "notifications.column_settings.follow": "Neue Follower:", "notifications.column_settings.follow_request": "Neue Follower-Anfragen:", + "notifications.column_settings.group": "Gruppieren", "notifications.column_settings.mention": "Erwähnungen:", "notifications.column_settings.poll": "Umfrageergebnisse:", "notifications.column_settings.push": "Push-Benachrichtigungen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 2565f5da687011..e362d9b89bb345 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Διάρκεια δημοσκόπησης", "compose_form.poll.multiple": "Πολλαπλή επιλογή", "compose_form.poll.option_placeholder": "Επιλογή {number}", - "compose_form.poll.single": "Διάλεξε ένα", "compose_form.poll.switch_to_multiple": "Ενημέρωση δημοσκόπησης με πολλαπλές επιλογές", "compose_form.poll.switch_to_single": "Ενημέρωση δημοσκόπησης με μοναδική επιλογή", "compose_form.poll.type": "Στυλ", @@ -508,7 +507,6 @@ "notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου", "notification.favourite.name_and_others_with_link": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} αγάπησαν την ανάρτησή σου", "notification.follow": "Ο/Η {name} σε ακολούθησε", - "notification.follow.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} σε ακολούθησαν", "notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει", "notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν", "notification.label.mention": "Επισήμανση", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index bc8d1a419f5a6d..728ca89c73260b 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Poll duration", "compose_form.poll.multiple": "Multiple choice", "compose_form.poll.option_placeholder": "Option {number}", - "compose_form.poll.single": "Single choice", "compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices", "compose_form.poll.switch_to_single": "Change poll to allow for a single choice", "compose_form.poll.type": "Style", @@ -508,7 +507,6 @@ "notification.favourite": "{name} favourited your post", "notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favourited your post", "notification.follow": "{name} followed you", - "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", "notification.follow_request": "{name} has requested to follow you", "notification.follow_request.name_and_others": "{name} and {count, plural, one {# other} other {# others}} has requested to follow you", "notification.label.mention": "Mention", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index a6f6e0e85ebf09..6beb5a9716542f 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Daŭro de la balotenketo", "compose_form.poll.multiple": "Multobla elekto", "compose_form.poll.option_placeholder": "Opcio {number}", - "compose_form.poll.single": "Elektu unu", + "compose_form.poll.single": "Ununura elekto", "compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn", "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", "compose_form.poll.type": "Stilo", @@ -508,7 +508,7 @@ "notification.favourite": "{name} stelumis vian afiŝon", "notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon", "notification.follow": "{name} eksekvis vin", - "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", + "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", "notification.follow_request.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} petis sekvi vin", "notification.label.mention": "Mencii", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Rapida filtrila breto", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index af0a03299198a0..2410c278a6122b 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.multiple": "Múltiples opciones", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.single": "Elegí una", + "compose_form.poll.single": "Opción única", "compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples", "compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción", "compose_form.poll.type": "Estilo", @@ -508,7 +508,7 @@ "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo", + "notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo", "notification.follow_request": "{name} solicitó seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} solicitaron seguirte", "notification.label.mention": "Mención", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la encuesta:", "notifications.column_settings.push": "Notificaciones push", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index d101d3bc81f6d6..2f9d1feb0139c2 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -158,9 +158,9 @@ "compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.multiple": "Selección múltiple", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.single": "Seleccione uno", - "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", - "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", + "compose_form.poll.single": "Selección única", + "compose_form.poll.switch_to_multiple": "Cambiar la encuesta para permitir múltiples opciones", + "compose_form.poll.switch_to_single": "Cambiar la encuesta para permitir una única opción", "compose_form.poll.type": "Estilo", "compose_form.publish": "Publicación", "compose_form.publish_form": "Publicar", @@ -508,7 +508,7 @@ "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", + "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te han seguido", "notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} han solicitado seguirte", "notification.label.mention": "Mención", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", @@ -644,7 +645,7 @@ "onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.share_profile.body": "Dile a tus amigos cómo encontrarte en Mastodon", "onboarding.steps.share_profile.title": "Comparte tu perfil", - "onboarding.tips.2fa": "¿Sabías que? Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de su cuenta. Funciona con cualquier aplicación TOTP de su elección, ¡no necesitas número de teléfono!", + "onboarding.tips.2fa": "¿Sabías que? Puedes proteger tu cuenta configurando la autenticación de dos factores en los ajustes de su cuenta. Funciona con cualquier aplicación TOTP que elijas, ¡sin necesidad de número de teléfono!", "onboarding.tips.accounts_from_other_servers": "¿Sabías que? Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!", "onboarding.tips.migration": "¿Sabías que? Si sientes que {domain} no es una gran elección de servidor para ti en el futuro, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!", "onboarding.tips.verification": "¿Sabías que? Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en su propio sitio web y añadiendo el sitio web a su perfil. ¡Sin necesidad de comisiones ni documentos!", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 2aeb7d47eaf3a7..fa4159abce7710 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Duración de la encuesta", "compose_form.poll.multiple": "Selección múltiple", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.single": "Elige uno", + "compose_form.poll.single": "Opción única", "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", "compose_form.poll.type": "Estilo", @@ -508,7 +508,7 @@ "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# más} other {# más}} te siguieron", + "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", "notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte", "notification.label.mention": "Mención", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 82e7e6d67c8001..3c58548eb77892 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Küsitluse kestus", "compose_form.poll.multiple": "Mitu vastust", "compose_form.poll.option_placeholder": "Valik {number}", - "compose_form.poll.single": "Vali üks", "compose_form.poll.switch_to_multiple": "Muuda küsitlust mitmikvaliku lubamiseks", "compose_form.poll.switch_to_single": "Muuda küsitlust ainult ühe valiku lubamiseks", "compose_form.poll.type": "Stiil", @@ -508,7 +507,6 @@ "notification.favourite": "{name} märkis su postituse lemmikuks", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# veel} other {# teist}} märkis su postituse lemmikuks", "notification.follow": "{name} alustas su jälgimist", - "notification.follow.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} hakkas sind jälgima", "notification.follow_request": "{name} soovib sind jälgida", "notification.follow_request.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} taotles sinu jälgimist", "notification.label.mention": "Mainimine", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 70ea7601fe2e3e..cd8fbeefbc44b1 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Inkestaren iraupena", "compose_form.poll.multiple": "Aukera aniza", "compose_form.poll.option_placeholder": "{number}. aukera", - "compose_form.poll.single": "Hautatu bat", "compose_form.poll.switch_to_multiple": "Aldatu inkesta hainbat aukera onartzeko", "compose_form.poll.switch_to_single": "Aldatu inkesta aukera bakarra onartzeko", "compose_form.poll.type": "Estiloa", @@ -504,7 +503,6 @@ "notification.favourite": "{name}(e)k zure bidalketa gogoko du", "notification.favourite.name_and_others_with_link": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zure bidalketa gogoko dute", "notification.follow": "{name}(e)k jarraitzen dizu", - "notification.follow.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} jarraitu dizute", "notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du", "notification.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute", "notification.label.mention": "Aipamena", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index ef8136da61379a..6afdb537466f96 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "مدت نظرسنجی", "compose_form.poll.multiple": "چند گزینه‌ای", "compose_form.poll.option_placeholder": "گزینهٔ {number}", - "compose_form.poll.single": "گزینش یکی", "compose_form.poll.switch_to_multiple": "تغییر نظرسنجی برای اجازه به چندین گزینه", "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.poll.type": "سبک", @@ -495,7 +494,6 @@ "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.follow": "‫{name}‬ پی‌گیرتان شد", - "notification.follow.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} پیتان گرفتند", "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", "notification.follow_request.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} درخواست پی‌گیریتان را دادند", "notification.label.mention": "اشاره", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index ac7ab097fa33b0..717ea78559d713 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.multiple": "Monivalinta", "compose_form.poll.option_placeholder": "Vaihtoehto {number}", - "compose_form.poll.single": "Valitse yksi", + "compose_form.poll.single": "Yksittäisvalinta", "compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta äänestys yksittäisvalinnaksi", "compose_form.poll.type": "Tyyli", @@ -508,7 +508,7 @@ "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät julkaisusi suosikkeihinsa", "notification.follow": "{name} seurasi sinua", - "notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua", + "notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua", "notification.follow_request": "{name} on pyytänyt lupaa seurata sinua", "notification.follow_request.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} pyysivät saada seurata sinua", "notification.label.mention": "Maininta", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", "notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.follow_request": "Uudet seurantapyynnöt:", + "notifications.column_settings.group": "Ryhmitä", "notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.poll": "Äänestyksen tulokset:", "notifications.column_settings.push": "Puskuilmoitukset", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index a2009d8ba3907b..3822fbcf858e02 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -118,7 +118,6 @@ "compose_form.placeholder": "Anong nangyari?", "compose_form.poll.duration": "Tagal ng botohan", "compose_form.poll.multiple": "Maraming pagpipilian", - "compose_form.poll.single": "Piliin ang isa", "compose_form.reply": "Tumugon", "compose_form.spoiler.marked": "Tanggalin ang babala sa nilalaman", "compose_form.spoiler.unmarked": "Idagdag ang babala sa nilalaman", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 5ad8ba557b6858..0e2bc88136921b 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Atkvøðugreiðslutíð", "compose_form.poll.multiple": "Fleiri valmøguleikar", "compose_form.poll.option_placeholder": "Valmøguleiki {number}", - "compose_form.poll.single": "Vel ein", + "compose_form.poll.single": "Einfalt val", "compose_form.poll.switch_to_multiple": "Broyt atkvøðugreiðslu til at loyva fleiri svarum", "compose_form.poll.switch_to_single": "Broyt atkvøðugreiðslu til einstakt svar", "compose_form.poll.type": "Stílur", @@ -508,7 +508,7 @@ "notification.favourite": "{name} dámdi postin hjá tær", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær", "notification.follow": "{name} fylgdi tær", - "notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær", + "notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær", "notification.follow_request": "{name} biður um at fylgja tær", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} hava biðið um at fylgja tær", "notification.label.mention": "Umrøða", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Skjótfilturbjálki", "notifications.column_settings.follow": "Nýggir fylgjarar:", "notifications.column_settings.follow_request": "Nýggjar umbønir um at fylgja:", + "notifications.column_settings.group": "Bólkur", "notifications.column_settings.mention": "Umrøður:", "notifications.column_settings.poll": "Úrslit frá atkvøðugreiðslu:", "notifications.column_settings.push": "Trýstifráboðanir", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index f5ab605e3a4435..e73a3249cbd949 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -89,7 +89,7 @@ "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", - "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", @@ -194,7 +194,7 @@ "confirmations.reply.title": "Remplacer le message ?", "confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?", - "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", + "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", "content_warning.show": "Afficher quand même", "conversation.delete": "Supprimer cette conversation", @@ -224,7 +224,7 @@ "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -508,7 +508,7 @@ "notification.favourite": "{name} a ajouté votre publication à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", "notification.follow": "{name} vous suit", - "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont abonné à votre compte", + "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", "notification.follow_request.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} ont demandé à vous suivre", "notification.label.mention": "Mention", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e⋅s:", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement:", + "notifications.column_settings.group": "Grouper", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Résultats des sondages:", "notifications.column_settings.push": "Notifications push", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 1c773d0e39961e..319316272be590 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -79,7 +79,7 @@ "admin.dashboard.retention.cohort_size": "Nouveaux comptes", "admin.impact_report.instance_accounts": "Profils de comptes que cela supprimerait", "admin.impact_report.instance_followers": "Abonnées que nos utilisateurs perdraient", - "admin.impact_report.instance_follows": "Abonnées que leurs utilisateurs perdraient", + "admin.impact_report.instance_follows": "Abonné·e·s que leurs utilisateur·rice·s perdraient", "admin.impact_report.title": "Résumé de l'impact", "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", "alert.rate_limited.title": "Nombre de requêtes limité", @@ -89,7 +89,7 @@ "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", - "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", @@ -194,7 +194,7 @@ "confirmations.reply.title": "Remplacer le message ?", "confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name} ?", - "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", + "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", "content_warning.show": "Afficher quand même", "conversation.delete": "Supprimer la conversation", @@ -224,7 +224,7 @@ "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -262,7 +262,7 @@ "empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", - "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en envoyez ou en recevez, elles apparaîtront ici.", + "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en enverrez ou recevrez, elles apparaîtront ici.", "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.", "empty_column.explore_statuses": "Rien n'est en tendance pour le moment. Revenez plus tard !", "empty_column.favourited_statuses": "Vous n’avez pas encore de message en favori. Lorsque vous en ajouterez un, il apparaîtra ici.", @@ -508,7 +508,7 @@ "notification.favourite": "{name} a ajouté votre message à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", "notification.follow": "{name} vous suit", - "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont abonné à votre compte", + "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", "notification.follow_request.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} ont demandé à vous suivre", "notification.label.mention": "Mention", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.follow": "Nouveaux·elles abonné·e·s :", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement :", + "notifications.column_settings.group": "Grouper", "notifications.column_settings.mention": "Mentions :", "notifications.column_settings.poll": "Résultats des sondages :", "notifications.column_settings.push": "Notifications push", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 9fa2300fbc2d83..0790a0dc574fd5 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Doer fan de enkête", "compose_form.poll.multiple": "Mearkar", "compose_form.poll.option_placeholder": "Opsje {number}", - "compose_form.poll.single": "Kies ien", "compose_form.poll.switch_to_multiple": "Enkête wizigje om meardere karren ta te stean", "compose_form.poll.switch_to_single": "Enkête wizigje om in inkelde kar ta te stean", "compose_form.poll.type": "Styl", @@ -508,7 +507,6 @@ "notification.favourite": "{name} hat jo berjocht as favoryt markearre", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo berjocht as favoryt markearre", "notification.follow": "{name} folget dy", - "notification.follow.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo folge", "notification.follow_request": "{name} hat dy in folchfersyk stjoerd", "notification.follow_request.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe frege om jo te folgjen", "notification.label.mention": "Fermelding", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 61b42e60f26f3d..81b93816ea08a3 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Achar suirbhéanna", "compose_form.poll.multiple": "Ilrogha", "compose_form.poll.option_placeholder": "Rogha {number}", - "compose_form.poll.single": "Roghnaigh ceann amháin", + "compose_form.poll.single": "Rogha aonair", "compose_form.poll.switch_to_multiple": "Athraigh suirbhé chun cead a thabhairt do ilrogha", "compose_form.poll.switch_to_single": "Athraigh suirbhé chun cead a thabhairt do rogha amháin", "compose_form.poll.type": "Stíl", @@ -508,7 +508,7 @@ "notification.favourite": "Is fearr le {name} do phostáil", "notification.favourite.name_and_others_with_link": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} thaitin le do phost", "notification.follow": "Lean {name} thú", - "notification.follow.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} a lean tú", + "notification.follow.name_and_others": "{name} agus {count, plural, one {# other} two {# eile} few {# eile} many {# eile} other {# others}} lean tú", "notification.follow_request": "D'iarr {name} ort do chuntas a leanúint", "notification.follow_request.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} iarratas a dhéanamh chun tú a leanúint", "notification.label.mention": "Luaigh", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra scagairí tapa", "notifications.column_settings.follow": "Leantóirí nua:", "notifications.column_settings.follow_request": "Iarratais leanúnaí nua:", + "notifications.column_settings.group": "Grúpa", "notifications.column_settings.mention": "Tráchtanna:", "notifications.column_settings.poll": "Torthaí suirbhéanna:", "notifications.column_settings.push": "Brúfhógraí", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 52dc7b2998ee3e..a9da2cd5ec4b55 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Faide a’ chunntais", "compose_form.poll.multiple": "Iomadh-roghainn", "compose_form.poll.option_placeholder": "Roghainn {number}", - "compose_form.poll.single": "Aonan", "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", "compose_form.poll.type": "Stoidhle", @@ -508,7 +507,6 @@ "notification.favourite": "Is annsa le {name} am post agad", "notification.favourite.name_and_others_with_link": "Is annsa le {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} am post agad", "notification.follow": "Tha {name} ’gad leantainn a-nis", - "notification.follow.name_and_others": "Lean {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} thu", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", "notification.follow_request.name_and_others": "Dh’iarr {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} ’gad leantainn", "notification.label.mention": "Iomradh", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 27b4ad24607b81..5e40b0e4290769 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Duración da enquisa", "compose_form.poll.multiple": "Escolla múltiple", "compose_form.poll.option_placeholder": "Opción {number}", - "compose_form.poll.single": "Elixe unha", + "compose_form.poll.single": "Opción única", "compose_form.poll.switch_to_multiple": "Mudar a enquisa para permitir múltiples escollas", "compose_form.poll.switch_to_single": "Mudar a enquisa para permitir unha soa opción", "compose_form.poll.type": "Estilo", @@ -508,7 +508,7 @@ "notification.favourite": "{name} marcou como favorita a túa publicación", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} favoreceron a túa publicación", "notification.follow": "{name} comezou a seguirte", - "notification.follow.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} seguíronte", + "notification.follow.name_and_others": "{name} e {count, plural, one {# mais} other {# mais}} seguíronte", "notification.follow_request": "{name} solicitou seguirte", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} solicitaron seguirte", "notification.label.mention": "Mención", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Novas seguidoras:", "notifications.column_settings.follow_request": "Novas peticións de seguimento:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Mencións:", "notifications.column_settings.poll": "Resultados da enquisa:", "notifications.column_settings.push": "Notificacións emerxentes", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index d9b0382f4ae8b8..2ad3a47f0da26e 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "משך הסקר", "compose_form.poll.multiple": "בחירה מרובה", "compose_form.poll.option_placeholder": "אפשרות {number}", - "compose_form.poll.single": "נא לבחור", "compose_form.poll.switch_to_multiple": "אפשרו בחירה מרובה בסקר", "compose_form.poll.switch_to_single": "אפשרו בחירה בודדת בסקר", "compose_form.poll.type": "סוג משאל", @@ -508,7 +507,6 @@ "notification.favourite": "הודעתך חובבה על ידי {name}", "notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך", "notification.follow": "{name} במעקב אחרייך", - "notification.follow.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} עקבו אחריך", "notification.follow_request": "{name} ביקשו לעקוב אחריך", "notification.follow_request.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} ביקשו לעקוב אחריך", "notification.label.mention": "אזכור", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 4a513c1c073e3e..e0de4c84525ac1 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -151,7 +151,6 @@ "compose_form.poll.duration": "चुनाव की अवधि", "compose_form.poll.multiple": "बहुविकल्पी", "compose_form.poll.option_placeholder": "विकल्प {number}", - "compose_form.poll.single": "कोई एक चुनें", "compose_form.poll.switch_to_multiple": "कई विकल्पों की अनुमति देने के लिए पोल बदलें", "compose_form.poll.switch_to_single": "एक ही विकल्प के लिए अनुमति देने के लिए पोल बदलें", "compose_form.poll.type": "स्टाइल", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 0fee79f8b502b4..a6bd621a485f22 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Szavazás időtartama", "compose_form.poll.multiple": "Több lehetőség", "compose_form.poll.option_placeholder": "Válasz {number}", - "compose_form.poll.single": "Egyetlen válasz", + "compose_form.poll.single": "Feleletválasztós", "compose_form.poll.switch_to_multiple": "Szavazás megváltoztatása több választásosra", "compose_form.poll.switch_to_single": "Szavazás megváltoztatása egyetlen választásosra", "compose_form.poll.type": "Stílus", @@ -508,7 +508,7 @@ "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet", "notification.favourite.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a bejegyzésedet", "notification.follow": "{name} követ téged", - "notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett", + "notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett", "notification.follow_request": "{name} követni szeretne téged", "notification.follow_request.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} kérte, hogy követhessen", "notification.label.mention": "Említés", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Gyorsszűrő sáv", "notifications.column_settings.follow": "Új követők:", "notifications.column_settings.follow_request": "Új követési kérések:", + "notifications.column_settings.group": "Csoportosítás", "notifications.column_settings.mention": "Megemlítések:", "notifications.column_settings.poll": "Szavazási eredmények:", "notifications.column_settings.push": "Leküldéses értesítések", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index f5598247385c9a..58e978cd146ec7 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Durata del sondage", "compose_form.poll.multiple": "Selection multiple", "compose_form.poll.option_placeholder": "Option {number}", - "compose_form.poll.single": "Seliger un", "compose_form.poll.switch_to_multiple": "Cambiar le sondage pro permitter selectiones multiple", "compose_form.poll.switch_to_single": "Cambiar le sondage pro permitter selection singule", "compose_form.poll.type": "Stilo", @@ -508,7 +507,6 @@ "notification.favourite": "{name} ha marcate tu message como favorite", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} favoriva tu message", "notification.follow": "{name} te ha sequite", - "notification.follow.name_and_others": "{name} e {count, plural, one {# altere} other {# alteres}} te sequeva", "notification.follow_request": "{name} ha requestate de sequer te", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altere} other {# alteres}} ha demandate de sequer te", "notification.label.mention": "Mention", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index f5c71d4a36e3ca..085705714e3ebb 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -155,7 +155,6 @@ "compose_form.poll.duration": "Durasi japat", "compose_form.poll.multiple": "Pilihan ganda", "compose_form.poll.option_placeholder": "Opsi {number}", - "compose_form.poll.single": "Pilih Satu", "compose_form.poll.switch_to_multiple": "Ubah japat menjadi pilihan ganda", "compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal", "compose_form.poll.type": "Gaya", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index d91c49e83f9bcb..f58cf1c71c7452 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -151,7 +151,6 @@ "compose_form.poll.duration": "Duration del balotation", "compose_form.poll.multiple": "Selection multiplic", "compose_form.poll.option_placeholder": "Option {number}", - "compose_form.poll.single": "Selecter un", "compose_form.poll.switch_to_multiple": "Changea li balotation por permisser multiplic selectiones", "compose_form.poll.switch_to_single": "Changea li balotation por permisser un singul selection", "compose_form.poll.type": "Stil", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index 8a8d043a6b0089..b8b0f1084df117 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -33,7 +33,6 @@ "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.single": "Họrọ otu", "compose_form.publish_form": "Publish", "compose_form.reply": "Zaa", "compose_form.spoiler.marked": "Text is hidden behind warning", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index bfc248a845e79e..21a8a084e75f3b 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Votpostoduro", "compose_form.poll.multiple": "Multopla selekteso", "compose_form.poll.option_placeholder": "Selektato {number}", - "compose_form.poll.single": "Selektez un", "compose_form.poll.switch_to_multiple": "Chanjez votposto por permisar multiselektaji", "compose_form.poll.switch_to_single": "Chanjez votposto por permisar una selektajo", "compose_form.poll.type": "Stilo", @@ -508,7 +507,6 @@ "notification.favourite": "{name} favorizis tua mesajo", "notification.favourite.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {# altri}} favorizis vua posto", "notification.follow": "{name} sequeskis tu", - "notification.follow.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} sequis vu", "notification.follow_request": "{name} demandas sequar vu", "notification.follow_request.name_and_others": "{name} e {count, plural,one {# altru} other {# altri}} volas sequar vu", "notification.label.mention": "Mencionez", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 19d17eaf45b515..a6f85304cdf1a5 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Tímalengd könnunar", "compose_form.poll.multiple": "Margir valkostir", "compose_form.poll.option_placeholder": "Valkostur {number}", - "compose_form.poll.single": "Veldu eitt", + "compose_form.poll.single": "Eitt val", "compose_form.poll.switch_to_multiple": "Breyta könnun svo hægt sé að hafa marga valkosti", "compose_form.poll.switch_to_single": "Breyta könnun svo hægt sé að hafa einn stakan valkost", "compose_form.poll.type": "Stíll", @@ -508,7 +508,7 @@ "notification.favourite": "{name} setti færsluna þína í eftirlæti", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} sett færsluna þína í eftirlæti", "notification.follow": "{name} fylgist með þér", - "notification.follow.name_and_others": "{name} og {count, plural, one {# í viðbót fylgdist} other {# í viðbót fylgdust}} með þér", + "notification.follow.name_and_others": "{name} og {count, plural, one {# í viðbót fylgdist} other {# í viðbót fylgdust}} með þér", "notification.follow_request": "{name} hefur beðið um að fylgjast með þér", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} beðið um að fylgjast með þér", "notification.label.mention": "Minnst á", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Skyndisíustika", "notifications.column_settings.follow": "Nýir fylgjendur:", "notifications.column_settings.follow_request": "Nýjar beiðnir um að fylgjast með:", + "notifications.column_settings.group": "Hópur", "notifications.column_settings.mention": "Tilvísanir:", "notifications.column_settings.poll": "Niðurstöður könnunar:", "notifications.column_settings.push": "Ýti-tilkynningar", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 885be73c62fd86..41d233079a7994 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Durata del sondaggio", "compose_form.poll.multiple": "Scelta multipla", "compose_form.poll.option_placeholder": "Opzione {number}", - "compose_form.poll.single": "Scegli uno", "compose_form.poll.switch_to_multiple": "Modifica il sondaggio per consentire scelte multiple", "compose_form.poll.switch_to_single": "Modifica il sondaggio per consentire una singola scelta", "compose_form.poll.type": "Stile", @@ -508,7 +507,7 @@ "notification.favourite": "{name} ha aggiunto il tuo post ai preferiti", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti", "notification.follow": "{name} ha iniziato a seguirti", - "notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti", + "notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti", "notification.follow_request": "{name} ha richiesto di seguirti", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno richiesto di seguirti", "notification.label.mention": "Menziona", @@ -567,6 +566,7 @@ "notifications.column_settings.filter_bar.category": "Barra del filtro veloce", "notifications.column_settings.follow": "Nuovi seguaci:", "notifications.column_settings.follow_request": "Nuove richieste di seguirti:", + "notifications.column_settings.group": "Gruppo", "notifications.column_settings.mention": "Menzioni:", "notifications.column_settings.poll": "Risultati del sondaggio:", "notifications.column_settings.push": "Notifiche push", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index edab7abef9d837..814b2f812487d1 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "アンケート期間", "compose_form.poll.multiple": "複数選択", "compose_form.poll.option_placeholder": "項目{number}", - "compose_form.poll.single": "単一選択", "compose_form.poll.switch_to_multiple": "複数選択に変更", "compose_form.poll.switch_to_single": "単一選択に変更", "compose_form.poll.type": "スタイル", @@ -508,7 +507,6 @@ "notification.favourite": "{name}さんがお気に入りしました", "notification.favourite.name_and_others_with_link": "{name}さんほか{count, plural, other {#人}}がお気に入りしました", "notification.follow": "{name}さんにフォローされました", - "notification.follow.name_and_others": "{name}さんほか{count, plural, other {#人}}にフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.follow_request.name_and_others": "{name}さんほか{count, plural, other {#人}}があなたにフォローリクエストしました", "notification.label.mention": "メンション", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 35e9be816e3a64..9cf94f26062bb0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -137,7 +137,6 @@ "compose_form.poll.duration": "Tanzagt n tefrant", "compose_form.poll.multiple": "Aṭas n ufran", "compose_form.poll.option_placeholder": "Taxtiṛt {number}", - "compose_form.poll.single": "Fren yiwen", "compose_form.poll.type": "Aɣanib", "compose_form.publish": "Suffeɣ", "compose_form.publish_form": "Tasuffeɣt tamaynut", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 04e099d8bc26be..6b1dc6b365dda1 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", - "notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우 했습니다", + "notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.follow_request.name_and_others": "{name} 외 {count, plural, other {# 명}}이 나에게 팔로우 요청을 보냈습니다", "notification.label.mention": "멘션", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "빠른 필터 막대", "notifications.column_settings.follow": "새 팔로워:", "notifications.column_settings.follow_request": "새 팔로우 요청:", + "notifications.column_settings.group": "그룹화", "notifications.column_settings.mention": "멘션:", "notifications.column_settings.poll": "설문 결과:", "notifications.column_settings.push": "푸시 알림", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index e5ff3cead05507..147546c9773146 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Trafiko limitado", "alert.unexpected.message": "Afito un yerro no asperado.", "alert.unexpected.title": "Atyo!", + "alt_text_badge.title": "Teksto alternativo", "announcement.announcement": "Pregon", "attachments_list.unprocessed": "(no prosesado)", "audio.hide": "Eskonde audio", @@ -154,7 +155,6 @@ "compose_form.poll.duration": "Durasion de anketa", "compose_form.poll.multiple": "Multiples opsyones", "compose_form.poll.option_placeholder": "Opsyon {number}", - "compose_form.poll.single": "Eskoje uno", "compose_form.poll.switch_to_multiple": "Troka anketa para permeter a eskojer mas ke una opsyon", "compose_form.poll.switch_to_single": "Troka anketa para permeter a eskojer solo una opsyon", "compose_form.poll.type": "Estilo", @@ -334,6 +334,11 @@ "hashtag.follow": "Sige etiketa", "hashtag.unfollow": "Desige etiketa", "hashtags.and_other": "…i {count, plural, one {}other {# mas}}", + "hints.profiles.see_more_followers": "Ve mas suivantes en {domain}", + "hints.profiles.see_more_follows": "Ve mas segidos en {domain}", + "hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}", + "hints.threads.replies_may_be_missing": "Puede mankar repuestas de otros sirvidores.", + "hints.threads.see_more": "Ve mas repuestas en {domain}", "home.column_settings.show_reblogs": "Amostra repartajasyones", "home.column_settings.show_replies": "Amostra repuestas", "home.hide_announcements": "Eskonde pregones", @@ -342,6 +347,9 @@ "home.pending_critical_update.title": "Aktualizasyon de seguridad kritika esta desponivle!", "home.show_announcements": "Amostra pregones", "ignore_notifications_modal.ignore": "Inyora avizos", + "ignore_notifications_modal.limited_accounts_title": "Inyorar avizos de kuentos moderados?", + "ignore_notifications_modal.new_accounts_title": "Inyorar avizos de kuentos muevos?", + "ignore_notifications_modal.not_followers_title": "Inyorar avizos de personas a las kualas no te sigen?", "ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?", "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", @@ -484,6 +492,7 @@ "notification_requests.dismiss": "Kita", "notification_requests.edit_selection": "Edita", "notification_requests.exit_selection": "Fecho", + "notification_requests.maximize": "Maksimizar", "notification_requests.notifications_from": "Avizos de {name}", "notification_requests.title": "Avizos filtrados", "notification_requests.view": "Amostra avizos", @@ -498,6 +507,7 @@ "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", "notifications.column_settings.follow": "Muevos suivantes:", "notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Enmentaduras:", "notifications.column_settings.poll": "Rizultados de anketas:", "notifications.column_settings.push": "Avizos arrepushados", @@ -525,6 +535,7 @@ "notifications.policy.accept_hint": "Amostra en avizos", "notifications.policy.drop": "Inyora", "notifications.policy.filter": "Filtra", + "notifications.policy.filter_limited_accounts_title": "Kuentos moderados", "notifications.policy.filter_new_accounts.hint": "Kriyadas durante {days, plural, one {el ultimo diya} other {los ultimos # diyas}}", "notifications.policy.filter_new_accounts_title": "Muevos kuentos", "notifications.policy.filter_not_followers_title": "Personas ke te no sigen", @@ -657,6 +668,7 @@ "report.unfollow_explanation": "Estas sigiendo este kuento. Para no ver sus publikasyones en tu linya de tiempo, puedes deshar de segirlo.", "report_notification.attached_statuses": "{count, plural, one {{count} publikasyon} other {{count} publikasyones}} atadas", "report_notification.categories.legal": "Legal", + "report_notification.categories.legal_sentence": "kontenido ilegal", "report_notification.categories.other": "Otros", "report_notification.categories.other_sentence": "otros", "report_notification.categories.spam": "Spam", @@ -731,6 +743,7 @@ "status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.", "status.redraft": "Efasa i eskrive de muevo", "status.remove_bookmark": "Kita markador", + "status.replied_in_thread": "Arispondo en filo", "status.replied_to": "Arispondio a {name}", "status.reply": "Arisponde", "status.replyAll": "Arisponde al filo", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 043dcfb05d7f0c..60d0acf7a1007e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Apklausos trukmė", "compose_form.poll.multiple": "Keli pasirinkimai", "compose_form.poll.option_placeholder": "{number} parinktis", - "compose_form.poll.single": "Pasirinkti vieną", "compose_form.poll.switch_to_multiple": "Keisti apklausą, kad būtų leidžiama pasirinkti kelis pasirinkimus", "compose_form.poll.switch_to_single": "Keisti apklausą, kad būtų leidžiama pasirinkti vieną pasirinkimą", "compose_form.poll.type": "Stilius", @@ -506,6 +505,7 @@ "notification.admin.sign_up": "{name} užsiregistravo", "notification.favourite": "{name} pamėgo tavo įrašą", "notification.follow": "{name} seka tave", + "notification.follow.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} seka tave", "notification.follow_request": "{name} paprašė tave sekti", "notification.label.mention": "Paminėjimas", "notification.label.private_mention": "Privatus paminėjimas", @@ -559,6 +559,7 @@ "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", "notifications.column_settings.follow": "Nauji sekėjai:", "notifications.column_settings.follow_request": "Nauji sekimo prašymai:", + "notifications.column_settings.group": "Grupė", "notifications.column_settings.mention": "Paminėjimai:", "notifications.column_settings.poll": "Balsavimo rezultatai:", "notifications.column_settings.push": "Tiesioginiai pranešimai", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 1e973ffd3ea5bf..7d325c057d3d32 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -153,7 +153,6 @@ "compose_form.poll.duration": "Aptaujas ilgums", "compose_form.poll.multiple": "Vairākas izvēles iespējas", "compose_form.poll.option_placeholder": "Izvēle {number}", - "compose_form.poll.single": "Jāizvēlas viens", "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", "compose_form.poll.type": "Stils", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 66354de6662e20..38a425cb90b28b 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -194,7 +194,12 @@ "follow_request.reject": "നിരസിക്കുക", "follow_suggestions.dismiss": "വീണ്ടും കാണിക്കരുതു്", "follow_suggestions.view_all": "എല്ലാം കാണുക", + "follow_suggestions.who_to_follow": "ആരേ പിന്തുടരണം", + "followed_tags": "പിന്തുടരിയതു് ചർച്ചാവിഷയങ്ങൾ", + "footer.get_app": "ഉപകരണം ലഭിക്കൂ", + "footer.invite": "ആളുകളെ ക്ഷണിക്കുക", "footer.privacy_policy": "സ്വകാര്യത്തനയം", + "footer.source_code": "ഉറവിടസങ്കേതം കാണുക", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.heading": "തുടക്കം കുറിക്കുക", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", @@ -206,6 +211,8 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", + "hashtag.follow": "ചർച്ചാവിഷയം പിന്തുടരുക", + "hashtag.unfollow": "ചർച്ചാവിഷയം പിന്തുടരരുതു്", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", @@ -264,19 +271,26 @@ "navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക", "navigation_bar.discover": "കണ്ടെത്തുക", "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.explore": "ആരായുക", "navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "navigation_bar.lists": "ലിസ്റ്റുകൾ", "navigation_bar.logout": "ലോഗൗട്ട്", "navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", + "navigation_bar.personal": "സ്വകാര്യ", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "ക്രമീകരണങ്ങൾ", + "navigation_bar.search": "തിരയുക", "navigation_bar.security": "സുരക്ഷ", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു", + "notification.label.reply": "മറുപടി", + "notification.moderation-warning.learn_more": "ഇനീം അറിയുക", + "notification.moderation_warning.action_silence": "താങ്ങളുടെ ഇടപാടു് പരിധിപെട്ടിരിക്കുന്നു.", "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു", + "notification_requests.edit_selection": "പരിഷ്കരിക്കുക", "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", @@ -288,6 +302,7 @@ "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", + "notifications.column_settings.update": "പരിഷ്കരണങ്ങൾ:", "notifications.filter.all": "എല്ലാം", "notifications.filter.boosts": "ബൂസ്റ്റുകൾ", "notifications.filter.follows": "പിന്തുടരുന്നു", @@ -302,6 +317,7 @@ "onboarding.actions.go_to_home": "ആമുഖത്താൾ വരെ പോവ്വുക", "onboarding.follows.lead": "", "onboarding.follows.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക", + "onboarding.share.title": "താങ്ങളുടെ രൂപരേഖ പങ്കിടുക", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", @@ -319,17 +335,26 @@ "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", "privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക", + "privacy.private.long": "താങ്ങളെ പിന്തുടരുന്നവർ മാത്രം", + "privacy.private.short": "പിന്തുടരുന്നവർ", "privacy.public.short": "എല്ലാവര്‍ക്കും", + "privacy_policy.title": "സ്വകാര്യത്തനയം", "refresh": "പുതുക്കുക", "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", "regeneration_indicator.sublabel": "നിങ്ങളുടെ താങ്ങളുടെ ആമുഖത്താളിന് തയാറാക്കുന്നു!", "relative_time.days": "{number}ദിവസം", + "relative_time.full.just_now": "ഇപ്പോൾതന്നെ", "relative_time.hours": "{number}മണി", "relative_time.just_now": "ഇപ്പോൾ", "relative_time.today": "ഇന്ന്", "reply_indicator.cancel": "റദ്ദാക്കുക", + "report.block": "തടസ്സപെടുത്തുക", + "report.category.title_account": "രൂപരേഖ", + "report.close": "ചെയ്തു", "report.forward_hint": "ഈ അക്കൗണ്ട് മറ്റൊരു സെർവറിൽ നിന്നാണ്. റിപ്പോർട്ടിന്റെ അജ്ഞാത പകർപ്പ് അവിടെ അയയ്ക്കണോ?", + "report.next": "അടുത്തതു്", "report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ", + "report.reasons.spam": "ഇതു് പാഴടക്കമാണു്", "report.submit": "സമർപ്പിക്കുക", "report.target": "Report {target}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 749461d1a86ddc..9dea73139798cf 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -147,7 +147,6 @@ "compose_form.poll.duration": "Tempoh undian", "compose_form.poll.multiple": "Pelbagai pilihan", "compose_form.poll.option_placeholder": "Pilihan {number}", - "compose_form.poll.single": "Pilih satu", "compose_form.poll.switch_to_multiple": "Ubah kepada membenarkan aneka undian", "compose_form.poll.switch_to_single": "Ubah kepada undian pilihan tunggal", "compose_form.poll.type": "Gaya", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 5c47312522b9dc..8df1fc4d1f6f68 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} markeerde jouw bericht als favoriet", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht als favoriet gemarkeerd", "notification.follow": "{name} volgt jou nu", - "notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben je gevolgd", + "notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} volgen jou nou", "notification.follow_request": "{name} wil jou graag volgen", "notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben gevraagd om je te volgen", "notification.label.mention": "Vermelding", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Snelle filterbalk", "notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.follow_request": "Nieuw volgverzoek:", + "notifications.column_settings.group": "Groeperen", "notifications.column_settings.mention": "Vermeldingen:", "notifications.column_settings.poll": "Peilingresultaten:", "notifications.column_settings.push": "Pushmeldingen", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 58ed018ba0d26f..e2a6ac9c26fe0e 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Varigheit for rundspørjing", "compose_form.poll.multiple": "Fleirval", "compose_form.poll.option_placeholder": "Alternativ {number}", - "compose_form.poll.single": "Vel ein", + "compose_form.poll.single": "Eitt val", "compose_form.poll.switch_to_multiple": "Endre rundspørjinga til å tillate fleire val", "compose_form.poll.switch_to_single": "Endre rundspørjinga til å tillate berre eitt val", "compose_form.poll.type": "Stil", @@ -508,7 +508,7 @@ "notification.favourite": "{name} markerte innlegget ditt som favoritt", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annan} other {# andre}} favorittmerka innlegget ditt", "notification.follow": "{name} fylgde deg", - "notification.follow.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} fylgde deg", + "notification.follow.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} fylgde deg", "notification.follow_request": "{name} har bedt om å fylgja deg", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} har spurt om å fylgja deg", "notification.label.mention": "Omtale", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Snøggfilterline", "notifications.column_settings.follow": "Nye fylgjarar:", "notifications.column_settings.follow_request": "Ny fylgjarførespurnader:", + "notifications.column_settings.group": "Gruppe", "notifications.column_settings.mention": "Omtaler:", "notifications.column_settings.poll": "Røysteresultat:", "notifications.column_settings.push": "Pushvarsel", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1dd5df32b8a4a5..b709fbea5e21a6 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -157,7 +157,6 @@ "compose_form.poll.duration": "Avstemningens varighet", "compose_form.poll.multiple": "Flervalg", "compose_form.poll.option_placeholder": "Valg {number}", - "compose_form.poll.single": "Velg en", "compose_form.poll.switch_to_multiple": "Endre avstemning til å tillate flere valg", "compose_form.poll.switch_to_single": "Endre avstemning til å tillate ett valg", "compose_form.poll.type": "Stil", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index c6555ebb76706b..21a1c365f02002 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Czas trwania głosowania", "compose_form.poll.multiple": "Wielokrotny wybór", "compose_form.poll.option_placeholder": "Opcja {number}", - "compose_form.poll.single": "Wybierz jedną", + "compose_form.poll.single": "Jednokrotny wybór", "compose_form.poll.switch_to_multiple": "Pozwól na wybranie wielu opcji", "compose_form.poll.switch_to_single": "Pozwól na wybranie tylko jednej opcji", "compose_form.poll.type": "Styl", @@ -508,7 +508,7 @@ "notification.favourite": "{name} dodaje Twój wpis do ulubionych", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba polubiła twój wpis} few {# inne osoby polubiły twój wpis} other {# innych osób polubiło twój wpis}}", "notification.follow": "{name} obserwuje Cię", - "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}", + "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}", "notification.follow_request": "{name} chce cię zaobserwować", "notification.follow_request.name_and_others": "{name} i {count, plural, one {# inna osoba chce} few {# inne osoby chcą} other {# innych osób chce}} zaobserwować twój profil", "notification.label.mention": "Wzmianka", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Szybkie filtrowanie", "notifications.column_settings.follow": "Nowi obserwujący:", "notifications.column_settings.follow_request": "Nowe prośby o możliwość obserwacji:", + "notifications.column_settings.group": "Grupuj", "notifications.column_settings.mention": "Wspomnienia:", "notifications.column_settings.poll": "Wyniki głosowania:", "notifications.column_settings.push": "Powiadomienia push", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index b6d2fe112eb3cc..f5b6481a837e36 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Duração da enquete", "compose_form.poll.multiple": "Múltipla escolha", "compose_form.poll.option_placeholder": "Opção {number}", - "compose_form.poll.single": "Escolha uma", + "compose_form.poll.single": "Única escolha", "compose_form.poll.switch_to_multiple": "Permitir múltiplas escolhas", "compose_form.poll.switch_to_single": "Opção única", "compose_form.poll.type": "Estilo", @@ -508,7 +508,7 @@ "notification.favourite": "{name} favoritou sua publicação", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# others}} favoritaram a publicação", "notification.follow": "{name} te seguiu", - "notification.follow.name_and_others": "{name} e {count, plural, one {# other} other {# outros}} seguiu você", + "notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} seguiram você", "notification.follow_request": "{name} quer te seguir", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# other} other {# outros}} pediu para seguir você", "notification.label.mention": "Menção", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtro rápido", "notifications.column_settings.follow": "Seguidores:", "notifications.column_settings.follow_request": "Seguidores pendentes:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Menções:", "notifications.column_settings.poll": "Enquetes:", "notifications.column_settings.push": "Notificações push", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 6be7e03b393d3a..fe18444ce10dc4 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -157,7 +157,6 @@ "compose_form.poll.duration": "Duração da sondagem", "compose_form.poll.multiple": "Escolha múltipla", "compose_form.poll.option_placeholder": "Opção {number}", - "compose_form.poll.single": "Escolha uma", "compose_form.poll.switch_to_multiple": "Alterar a sondagem para permitir várias respostas", "compose_form.poll.switch_to_single": "Alterar a sondagem para permitir uma única resposta", "compose_form.poll.type": "Estilo", @@ -503,7 +502,6 @@ "notification.favourite": "{name} assinalou a sua publicação como favorita", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} assinalou a sua publicação como favorita", "notification.follow": "{name} começou a seguir-te", - "notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} começaram a segui-lo", "notification.follow_request": "{name} pediu para segui-lo", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} pediram para segui-lo", "notification.label.mention": "Menção", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index a61f4b0d4fd41d..96f9eac2b3ccd7 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -138,7 +138,6 @@ "compose_form.poll.duration": "Durata sondajului", "compose_form.poll.multiple": "Alegeri multiple", "compose_form.poll.option_placeholder": "Opțiune {number}", - "compose_form.poll.single": "Alegeți unul", "compose_form.poll.switch_to_multiple": "Modifică sondajul pentru a permite mai multe opțiuni", "compose_form.poll.switch_to_single": "Modifică sondajul pentru a permite o singură opțiune", "compose_form.poll.type": "Stil", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index b4e7cc656bb0b8..46463be76f5f4b 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Продолжительность опроса", "compose_form.poll.multiple": "Несколько вариантов ответа", "compose_form.poll.option_placeholder": "Вариант {number}", - "compose_form.poll.single": "Выберите один", "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.poll.type": "Стиль", @@ -507,7 +506,6 @@ "notification.favourite": "{name} добавил(а) ваш пост в избранное", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", "notification.follow": "{name} подписался (-лась) на вас", - "notification.follow.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", "notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас", "notification.label.mention": "Упоминание", diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json index 02d1c005cfb078..b55d5e7a7d9974 100644 --- a/app/javascript/mastodon/locales/ry.json +++ b/app/javascript/mastodon/locales/ry.json @@ -140,7 +140,6 @@ "compose_form.poll.duration": "Трывалость убзвідованя", "compose_form.poll.multiple": "Дакулько варіантув", "compose_form.poll.option_placeholder": "Варіант {number}", - "compose_form.poll.single": "Уберіт єден", "compose_form.poll.switch_to_multiple": "Змінити убзвідованя обы поволити дакулько варіантув", "compose_form.poll.switch_to_single": "Змінити убзвідованя обы поволити лишек єден варіант", "compose_form.poll.type": "Стіл", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 227a7483a72ae4..71bcaef7abe9e9 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -157,7 +157,6 @@ "compose_form.poll.duration": "Longària de su sondàgiu", "compose_form.poll.multiple": "Sèberu mùltiplu", "compose_form.poll.option_placeholder": "Optzione {number}", - "compose_form.poll.single": "Sèbera·nde una", "compose_form.poll.switch_to_multiple": "Muda su sondàgiu pro permìtere multi-optziones", "compose_form.poll.switch_to_single": "Muda su sondàgiu pro permìtere un'optzione isceti", "compose_form.poll.type": "Istile", @@ -458,7 +457,6 @@ "notification.favourite": "{name} at marcadu comente a preferidu s'istadu tuo", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant marcadu sa publicatzione tua comente preferida", "notification.follow": "{name} ti sighit", - "notification.follow.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ti sighint", "notification.follow_request": "{name} at dimandadu de ti sighire", "notification.follow_request.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant pedidu de ti sighire", "notification.label.mention": "Mèntovu", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index da3b1eaefd5b32..ffca0914e580a6 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -155,7 +155,6 @@ "compose_form.poll.duration": "Trvanie ankety", "compose_form.poll.multiple": "Viacero možností", "compose_form.poll.option_placeholder": "Možnosť {number}", - "compose_form.poll.single": "Jediný výber", "compose_form.poll.switch_to_multiple": "Zmeniť anketu a povoliť viaceré možnosti", "compose_form.poll.switch_to_single": "Zmeniť anketu na jediný povolený výber", "compose_form.poll.type": "Typ", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 71bee6822b3c64..32626b80f9d19d 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -155,7 +155,6 @@ "compose_form.poll.duration": "Trajanje ankete", "compose_form.poll.multiple": "Več možnosti", "compose_form.poll.option_placeholder": "Možnost {number}", - "compose_form.poll.single": "Izberite eno možnost", "compose_form.poll.switch_to_multiple": "Spremenite anketo, da omogočite več izbir", "compose_form.poll.switch_to_single": "Spremenite anketo, da omogočite eno izbiro", "compose_form.poll.type": "Slog", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 182f018873ed03..e38ea796f60d02 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Kohëzgjatje pyetësori", "compose_form.poll.multiple": "Shumë zgjedhje", "compose_form.poll.option_placeholder": "Mundësia {number}", - "compose_form.poll.single": "Zgjidhni një", + "compose_form.poll.single": "Zgjedhje njëshe", "compose_form.poll.switch_to_multiple": "Ndrysho votimin për të lejuar shumë zgjedhje", "compose_form.poll.switch_to_single": "Ndrysho votimin për të lejuar vetëm një zgjedhje", "compose_form.poll.type": "Stil", @@ -508,7 +508,6 @@ "notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer", "notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer", "notification.follow": "{name} zuri t’ju ndjekë", - "notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.follow_request": "{name} ka kërkuar t’ju ndjekë", "notification.follow_request.name_and_others": "Ka kërkuar t’ju ndjekë {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.label.mention": "Përmendje", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 1053d581c323f5..4a33c2f5cae019 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -154,7 +154,6 @@ "compose_form.poll.duration": "Trajanje ankete", "compose_form.poll.multiple": "Višestruki izbor", "compose_form.poll.option_placeholder": "Opcija {number}", - "compose_form.poll.single": "Odaberite jedno", "compose_form.poll.switch_to_multiple": "Promenite anketu da biste omogućili više izbora", "compose_form.poll.switch_to_single": "Promenite anketu da biste omogućili jedan izbor", "compose_form.poll.type": "Stil", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 9529c41fe301df..d80411859ed17f 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -154,7 +154,6 @@ "compose_form.poll.duration": "Трајање анкете", "compose_form.poll.multiple": "Вишеструки избор", "compose_form.poll.option_placeholder": "Опција {number}", - "compose_form.poll.single": "Одаберите једно", "compose_form.poll.switch_to_multiple": "Промените анкету да бисте омогућили више избора", "compose_form.poll.switch_to_single": "Промените анкету да бисте омогућили један избор", "compose_form.poll.type": "Стил", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 31ded957b56803..d9d4da4ad0a8c7 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Varaktighet för omröstning", "compose_form.poll.multiple": "Flera val", "compose_form.poll.option_placeholder": "Alternativ {number}", - "compose_form.poll.single": "Välj en", + "compose_form.poll.single": "Enval", "compose_form.poll.switch_to_multiple": "Ändra enkät för att tillåta flera val", "compose_form.poll.switch_to_single": "Ändra enkät för att tillåta ett enda val", "compose_form.poll.type": "Stil", @@ -508,7 +508,6 @@ "notification.favourite": "{name} favoritmarkerade ditt inlägg", "notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg", "notification.follow": "{name} följer dig", - "notification.follow.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} följer dig", "notification.follow_request": "{name} har begärt att följa dig", "notification.follow_request.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har bett att följa dig", "notification.label.mention": "Nämn", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index ab93358f6f776a..d05840aa83e4ac 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "ระยะเวลาการสำรวจความคิดเห็น", "compose_form.poll.multiple": "หลายตัวเลือก", "compose_form.poll.option_placeholder": "ตัวเลือก {number}", - "compose_form.poll.single": "เลือกอย่างใดอย่างหนึ่ง", "compose_form.poll.switch_to_multiple": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตหลายตัวเลือก", "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดียว", "compose_form.poll.type": "ลักษณะ", @@ -508,7 +507,6 @@ "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite.name_and_others_with_link": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ชื่นชอบโพสต์ของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", - "notification.follow.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ติดตามคุณ", "notification.follow_request": "{name} ได้ขอติดตามคุณ", "notification.follow_request.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ขอติดตามคุณ", "notification.label.mention": "การกล่าวถึง", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index ba5395b7bd3d0f..2cf7f1929aa3cc 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -117,7 +117,6 @@ "compose_form.poll.duration": "tenpo pana", "compose_form.poll.multiple": "pana mute", "compose_form.poll.option_placeholder": "ken nanpa {number}", - "compose_form.poll.single": "pana pi wan taso", "compose_form.poll.switch_to_multiple": "o ante e nasin pana. pana mute o ken", "compose_form.poll.switch_to_single": "o ante e nasin pana. pana wan taso o lon", "compose_form.poll.type": "nasin", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 937b3e8e19bde5..dae573370a637f 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Anket süresi", "compose_form.poll.multiple": "Çoktan seçmeli", "compose_form.poll.option_placeholder": "Seçenek {number}", - "compose_form.poll.single": "Birini seç", + "compose_form.poll.single": "Tekli seçim", "compose_form.poll.switch_to_multiple": "Birden çok seçeneğe izin vermek için anketi değiştir", "compose_form.poll.switch_to_single": "Tek bir seçeneğe izin vermek için anketi değiştir", "compose_form.poll.type": "Stil", @@ -508,7 +508,7 @@ "notification.favourite": "{name} gönderinizi beğendi", "notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi", "notification.follow": "{name} seni takip etti", - "notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti", + "notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", "notification.follow_request.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} size takip etme isteği gönderdi", "notification.label.mention": "Bahsetme", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", + "notifications.column_settings.group": "Grupla", "notifications.column_settings.mention": "Bahsetmeler:", "notifications.column_settings.poll": "Anket sonuçları:", "notifications.column_settings.push": "Anlık bildirimler", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 5a9d388f0bb3e6..66392afd79fcb3 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -158,7 +158,6 @@ "compose_form.poll.duration": "Тривалість опитування", "compose_form.poll.multiple": "Кілька варіантів", "compose_form.poll.option_placeholder": "Варіант {number}", - "compose_form.poll.single": "Виберіть варіант", "compose_form.poll.switch_to_multiple": "Дозволити вибір декількох відповідей", "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді", "compose_form.poll.type": "Стиль", @@ -508,7 +507,6 @@ "notification.favourite": "Ваш допис сподобався {name}", "notification.favourite.name_and_others_with_link": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} вподобали ваш допис", "notification.follow": "{name} підписалися на вас", - "notification.follow.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} стежать за вами", "notification.follow_request": "{name} відправили запит на підписку", "notification.follow_request.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} надсилають вам запит на стеження", "notification.label.mention": "Згадка", @@ -567,6 +565,7 @@ "notifications.column_settings.filter_bar.category": "Панель швидкого фільтра", "notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.follow_request": "Нові запити на підписку:", + "notifications.column_settings.group": "Група", "notifications.column_settings.mention": "Згадки:", "notifications.column_settings.poll": "Результати опитування:", "notifications.column_settings.push": "Push-сповіщення", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9c886790b00177..1daeada1a28986 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} thích tút của bạn", "notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn", "notification.follow": "{name} theo dõi bạn", - "notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} đã theo dõi bạn", + "notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} theo dõi bạn", "notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.follow_request.name_and_others": "{name} và {count, plural, other {# người khác}} đã yêu cầu theo dõi bạn", "notification.label.mention": "Lượt nhắc", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Thanh lọc nhanh", "notifications.column_settings.follow": "Người theo dõi:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi:", + "notifications.column_settings.group": "Nhóm", "notifications.column_settings.mention": "Lượt nhắc đến:", "notifications.column_settings.poll": "Kết quả bình chọn:", "notifications.column_settings.push": "Thông báo đẩy", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index df237fa2396641..3b1e6b813de9e0 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -508,7 +508,7 @@ "notification.favourite": "{name} 喜欢了你的嘟文", "notification.favourite.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 喜欢了你的嘟文", "notification.follow": "{name} 开始关注你", - "notification.follow.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 关注了你", + "notification.follow.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 关注了你", "notification.follow_request": "{name} 向你发送了关注请求", "notification.follow_request.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 向你发送了关注请求", "notification.label.mention": "提及", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "快速筛选栏", "notifications.column_settings.follow": "新粉丝:", "notifications.column_settings.follow_request": "新关注请求:", + "notifications.column_settings.group": "分组", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票结果:", "notifications.column_settings.push": "推送通知", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index a081e5589706ff..62a43fa7e4b723 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -151,7 +151,6 @@ "compose_form.poll.duration": "投票期限", "compose_form.poll.multiple": "多選", "compose_form.poll.option_placeholder": "選項 {number}", - "compose_form.poll.single": "選擇一個", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為限定單一選項", "compose_form.poll.type": "風格", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index e93f7d5180ba62..388e09fc98ac03 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "投票期限", "compose_form.poll.multiple": "多選", "compose_form.poll.option_placeholder": "選項 {number}", - "compose_form.poll.single": "選擇一個", + "compose_form.poll.single": "單一選擇", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為允許單一選項", "compose_form.poll.type": "投票方式", @@ -508,7 +508,7 @@ "notification.favourite": "{name} 已將您的嘟文加入最愛", "notification.favourite.name_and_others_with_link": "{name} 與{count, plural, other {其他 # 個人}}已將您的嘟文加入最愛", "notification.follow": "{name} 已跟隨您", - "notification.follow.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已跟隨您", + "notification.follow.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已跟隨您", "notification.follow_request": "{name} 要求跟隨您", "notification.follow_request.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已請求跟隨您", "notification.label.mention": "提及", @@ -567,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "快速過濾器", "notifications.column_settings.follow": "新的跟隨者:", "notifications.column_settings.follow_request": "新的跟隨請求:", + "notifications.column_settings.group": "群組", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票結果:", "notifications.column_settings.push": "推播通知", diff --git a/config/locales/activerecord.lad.yml b/config/locales/activerecord.lad.yml index 31e0223ccac764..8fd23b53fec7f3 100644 --- a/config/locales/activerecord.lad.yml +++ b/config/locales/activerecord.lad.yml @@ -15,6 +15,11 @@ lad: user/invite_request: text: Razon errors: + attributes: + domain: + invalid: no es un nombre de domeno valido + messages: + invalid_domain_on_line: "%{value} no es un nombre de domeno valido" models: account: attributes: diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 2a22edf673b80e..ca8271ebf1c5d1 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -60,6 +60,7 @@ sv: error: title: Ett fel har uppstått new: + prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Godkänn bara denna begäran om du känner igen och litar på källan." review_permissions: Granska behörigheter title: Godkännande krävs show: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 629edd9380fffb..9a3ba24562f250 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -61,6 +61,7 @@ eo: demote: Degradi destroyed_msg: Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ disable: Frostigi + disable_sign_in_token_auth: Malebligu retpoŝtan ĵeton-aŭtentikigon disable_two_factor_authentication: Malŝalti 2FA-n disabled: Frostigita display_name: Montrata nomo @@ -69,6 +70,7 @@ eo: email: Retpoŝto email_status: Stato de retpoŝto enable: Malfrostigi + enable_sign_in_token_auth: Ebligu retpoŝtan ĵeton-aŭtentikigon enabled: Ebligita enabled_msg: Sukcese malfrostigis konton de %{username} followers: Sekvantoj @@ -179,17 +181,21 @@ eo: confirm_user: Konfirmi uzanton create_account_warning: Krei averton create_announcement: Krei Anoncon + create_canonical_email_block: Krei retpoŝtan blokon create_custom_emoji: Krei Propran Emoĝion create_domain_allow: Krei Domajnan Permeson create_domain_block: Krei Blokadon De Domajno + create_email_domain_block: Krei retpoŝtan domajnan blokon create_ip_block: Krei IP-regulon create_unavailable_domain: Krei Nehaveblan Domajnon create_user_role: Krei Rolon demote_user: Malpromocii Uzanton destroy_announcement: Forigi Anoncon + destroy_canonical_email_block: Forigi retpoŝtan blokon destroy_custom_emoji: Forigi Propran Emoĝion destroy_domain_allow: Forigi Domajnan Permeson destroy_domain_block: Forigi blokadon de domajno + destroy_email_domain_block: Forigi retpoŝtan domajnan blokon destroy_instance: Forigi Domajnon destroy_ip_block: Forigi IP-regulon destroy_status: Forigi Afiŝon @@ -433,6 +439,7 @@ eo: title: Bloki novan retpoŝtan domajnon not_permitted: Ne permesita resolved_through_html: Solvis tra %{domain} + title: Blokis retpoŝtajn domajnojn export_domain_allows: new: title: Importi domajnpermesojn @@ -585,6 +592,9 @@ eo: actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon. actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi add_to_report: Aldoni pli al raporto + already_suspended_badges: + local: Jam malakceptita sur ĉi tiu servilo + remote: Jam malakceptita sur ilia servilo are_you_sure: Ĉu vi certas? assign_to_self: Asigni al mi assigned: Asignita kontrolanto @@ -850,6 +860,7 @@ eo: name: Nomo newest: Plej novaj oldest: Plej malnovaj + open: Vidu publike reset: Restartigi review: La statuso de la recenzo search: Serĉi @@ -1072,6 +1083,7 @@ eo: set_new_password: Elekti novan pasvorton setup: link_not_received: Ĉu vi ne ricevis ligilon? + new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj! title: Kontrolu vian retpoŝta enirkesto sign_in: preamble_html: Ensalutu per via detaloj de %{domain}. Se via konto gastigantigas sur malsama servilo, vi ne povas ensaluti ĉi tie. diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 097c5c81521ef4..5b44ed85d639a9 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -263,10 +263,10 @@ es-MX: destroy_user_role_html: "%{name} eliminó el rol %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" - disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" + disable_sign_in_token_auth_user_html: "%{name} desactivó la autenticación por token de correo electrónico para %{target}" disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji_html: "%{name} activó el emoji %{target}" - enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}" + enable_sign_in_token_auth_user_html: "%{name} activó autenticación por token de correo electrónico para %{target}" enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" @@ -274,7 +274,7 @@ es-MX: reject_user_html: "%{name} rechazó el registro de %{target}" remove_avatar_user_html: "%{name} eliminó el avatar de %{target}" reopen_report_html: "%{name} reabrió el informe %{target}" - resend_user_html: "%{name} ha reenviado el correo de confirmación para %{target}" + resend_user_html: "%{name} reenvió correo electrónico de confirmación para %{target}" reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}" resolve_report_html: "%{name} resolvió el informe %{target}" sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible" @@ -1557,9 +1557,9 @@ es-MX: poll: subject: Una encuesta de %{name} ha terminado reblog: - body: "%{name} ha retooteado tu estado:" - subject: "%{name} ha retooteado tu estado" - title: Nueva difusión + body: 'Tu publicación fue impulsada por %{name}:' + subject: "%{name} ha impulsado tu publicación" + title: Nuevo impulso status: subject: "%{name} acaba de publicar" update: @@ -1771,7 +1771,7 @@ es-MX: direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse limit: Ya has fijado el número máximo de publicaciones ownership: El toot de alguien más no puede fijarse - reblog: Un boost no puede fijarse + reblog: No se puede fijar una publicación impulsada title: "%{name}: «%{quote}»" visibilities: direct: Directa @@ -1787,9 +1787,9 @@ es-MX: exceptions: Excepciones explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado. ignore_favs: Ignorar favoritos - ignore_reblogs: Ignorar reblogueos + ignore_reblogs: Ignorar impulsos interaction_exceptions: Excepciones basadas en interacciones - interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento. + interaction_exceptions_explanation: Ten en cuenta que no se garantiza la eliminación de las publicaciones si bajan del umbral de favoritos o de impulso después de haberlos superado una vez. keep_direct: Mantener mensajes directos keep_direct_hint: No elimina ninguno de tus mensajes directos keep_media: Mantener publicaciones con multimedia adjunto @@ -1814,7 +1814,7 @@ es-MX: min_age_label: Umbral de tiempo min_favs: Mantener mensajes con un número de favoritos mayor que min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos - min_reblogs: Mantener publicaciones reblogueadas más de + min_reblogs: Mantener publicaciones impulsadas más de min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos stream_entries: sensitive_content: Contenido sensible @@ -1922,7 +1922,7 @@ es-MX: checklist_subtitle: 'Comencemos en esta nueva frontera social:' checklist_title: Lista de bienvenida edit_profile_action: Personalizar - edit_profile_step: Aumenta tus interacciones con un perfil completo. + edit_profile_step: Aumenta tus interacciones completando tu perfil. edit_profile_title: Personaliza tu perfil explanation: Aquí hay algunos consejos para empezar feature_action: Leer más diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 15c632adc9c685..aad90b3ac3c2f7 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -21,6 +21,7 @@ hu: one: Bejegyzés other: Bejegyzés posts_tab_heading: Bejegyzés + self_follow_error: A saját fiók nem követhető admin: account_actions: action: Művelet végrehajtása diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 5a015b21924977..ad241856a43161 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -46,6 +46,7 @@ lad: title: Troka la posta elektronika de %{username} change_role: changed_msg: Rolo trokado kon sukseso! + edit_roles: Administra reglas de utilizadores label: Troka rolo no_role: Sin rolo title: Troka rolo para %{username} @@ -882,11 +883,14 @@ lad: tags: moderation: pending_review: Revizion esta asperando + reviewed: Revizado title: Estado + unreviewed: No revizado usable: Uzavle name: Nombre newest: Mas muevos oldest: Mas viejos + open: Ve puvlikamente reset: Reinisya review: Estado de revizion search: Bushka @@ -1885,6 +1889,7 @@ lad: instructions_html: Kopia i apega este kodiche en el HTML de tu sitio web. Estonses, adjusta el adreso de tu sitio web en uno de los kutis adisyonales de tu profil dizde la seksyon "Edita profil" i guadra los trokamyentos. verification: Verifikasyon verified_links: Tus atadijos verifikados + website_verification: Verifikasyon de sityo web webauthn_credentials: add: Adjusta mueva yave de sigurita create: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index b28cf30162a363..59bc242dcb4ff4 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -690,10 +690,10 @@ nn: moderation: Moderering special: Særskild delete: Slett - description_html: Med brukarrollar kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgong til. + description_html: Med brukarroller kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgang til. edit: Endr rollen '%{name}' everyone: Standard-tillatelser - everyone_full_description_html: Dette er grunnrollen som påverkar alle brukarar, jamvel dei utan ei tilsett rolle. Alle andre rollar arvar tillatingar frå denne. + everyone_full_description_html: Dette er grunnrolla som påverkar alle brukarar, jamvel dei utan ei tildelt rolle. Alle andre rollar arvar tilgangsløve frå denne. permissions_count: one: "%{count} tillatelse" other: "%{count} tillatelser" @@ -719,7 +719,7 @@ nn: manage_reports: Handtere rapporteringar manage_reports_description: Let brukarar gjennomgå rapportar og utføre modereringshandlingar i samsvar med desse manage_roles: Handsam roller - manage_roles_description: Tillet at brukarar handsamar og tilset rollar under deira eiga + manage_roles_description: Tillet at brukarar handsamar og tildeler roller som er lågare enn dera eiga manage_rules: Handtere reglar manage_rules_description: Let brukarar endre reglane for tenaren manage_settings: Handtere innstillingar @@ -738,7 +738,7 @@ nn: view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker view_devops: DevOps view_devops_description: Gir brukere tilgang til Sidekiq og pgHero-dashbord - title: Rollar + title: Roller rules: add_new: Legg til regel delete: Slett @@ -1417,7 +1417,7 @@ nn: one: 1 bruk other: "%{count} bruk" max_uses_prompt: Inga grense - prompt: Generer og del lenkjer med andre for å gje tilgong til denne tenaren + prompt: Generer og del lenkjer med andre for å gje tilgang til denne tenaren table: expires_at: Vert ugyldig uses: Bruk diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 25ca703732aafa..d70499ae17ef16 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -901,6 +901,8 @@ ru: message_html: Вы не определили правила сервера. sidekiq_process_check: message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq + software_version_check: + message_html: Доступно обновление для Mastodon. software_version_critical_check: action: Посмотреть доступные обновления message_html: Доступно критическое обновление Mastodon, пожалуйста, обновитесь как можно скорее. diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 94e387107abb59..de37005312d456 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -307,6 +307,7 @@ lad: listable: Permite ke esta etiketa apareska en bushkedas i sujestyones name: Etiketa trendable: Permite ke esta etiketa apareska en trendes + usable: Permite ke publikasyones uzen esta etiketa lokalmente user: role: Rolo time_zone: Zona de tiempo diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index ddd5ed8995d541..271c384391e5ac 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -137,7 +137,7 @@ nn: highlighted: Dette gjer rolla synleg offentleg name: Offentleg namn på rolla, dersom rolla skal visast som eit emblem permissions_as_keys: Brukarar med denne rolla vil ha tilgang til... - position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet + position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan berre utførast på roller med lågare prioritet webhook: events: Vel hendingar å senda template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON. diff --git a/config/locales/sv.yml b/config/locales/sv.yml index df9b80f3f87b72..b79820310c76ac 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -263,8 +263,10 @@ sv: destroy_user_role_html: "%{name} raderade rollen %{target}" disable_2fa_user_html: "%{name} inaktiverade tvåfaktorsautentiseringskrav för användaren %{target}" disable_custom_emoji_html: "%{name} inaktiverade emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} inaktiverade e-posttokenautentisering för %{target}" disable_user_html: "%{name} stängde av inloggning för användaren %{target}" enable_custom_emoji_html: "%{name} aktiverade emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}" enable_user_html: "%{name} aktiverade inloggning för användaren %{target}" memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida" promote_user_html: "%{name} befordrade användaren %{target}" @@ -272,6 +274,7 @@ sv: reject_user_html: "%{name} avvisade registrering från %{target}" remove_avatar_user_html: "%{name} tog bort %{target}'s avatar" reopen_report_html: "%{name} öppnade rapporten igen %{target}" + resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt" reset_password_user_html: "%{name} återställ användarens lösenord %{target}" resolve_report_html: "%{name} löste rapporten %{target}" sensitive_account_html: "%{name} markerade %{target}'s media som känsligt" @@ -432,6 +435,7 @@ sv: attempts_over_week: one: "%{count} försök under den senaste veckan" other: "%{count} registreringsförsök under den senaste veckan" + created_msg: Blockerade e-postdomänen delete: Radera dns: types: @@ -440,8 +444,12 @@ sv: new: create: Skapa domän resolve: Slå upp domän + title: Blockera ny e-postdomän + no_email_domain_block_selected: Inga blockeringar av e-postdomäner ändrades eftersom inga valdes not_permitted: Ej tillåtet + resolved_dns_records_hint_html: Domännamnet ger uppslag till följande MX-domäner, vilka är ytterst ansvariga för att e-post tas emot. Att blockera en MX-domän blockerar även registreringar från alla e-postadresser som använder samma MX-domän, även om det synliga domännamnet är annorlunda. Var noga med att inte blockera stora e-postleverantörer. resolved_through_html: Uppslagen genom %{domain} + title: Blockerade e-postdomäner export_domain_allows: new: title: Importera domäntillåtelser @@ -595,7 +603,9 @@ sv: resolve_description_html: Ingen åtgärd vidtas mot det rapporterade kontot, ingen prick registreras och rapporten stängs. silence_description_html: Kontot kommer endast synas för de som redan följer den eller manuellt söker på den, vilket dramatiskt minskar dess räckvidd. Kan alltid ångras. Stänger alla anmälningar mot detta konto. suspend_description_html: Kontot och allt dess innehåll kommer att vara oåtkomligt och så småningom tas bort, det kommer inte gå att interagera med kontot. Kan ångras inom 30 dagar. Stänger alla anmälningar mot detta konto. + actions_description_html: Välj vilken åtgärd som skall vidtas för att lösa denna rapport. Om du vidtar en bestraffningsåtgärd mot det rapporterade kontot kommer en e-postnotis att skickas till dem, förutom om du valt kategorin Skräppost. actions_description_remote_html: Bestäm vilka åtgärder som ska vidtas för att lösa denna rapport. Detta kommer bara att påverka hur din server kommunicerar med detta fjärrkonto och hanterar dess innehåll. + actions_no_posts: Denna rapport har inga associerade inlägg att ta bort add_to_report: Lägg till mer i rapporten already_suspended_badges: local: Redan avstängd på denna server @@ -659,6 +669,7 @@ sv: delete_data_html: Ta bort @%{acct}s profil och innehåll om 30 dagar ifall deras avstängning inte tagits bort under tiden preview_preamble_html: "@%{acct} kommer få en varning med följande innehåll:" record_strike_html: Registrera en varning mot @%{acct} för att hjälpa dig eskalera vid framtida överträdelser från detta konto + send_email_html: Skicka @%{acct} ett varningsmejl warning_placeholder: Valfri ytterligare resonemang för modereringsåtgärd. target_origin: Ursprung för anmält konto title: Anmälningar @@ -698,6 +709,7 @@ sv: manage_appeals: Hantera överklaganden manage_appeals_description: Tillåter användare att granska överklaganden av modereringsåtgärder manage_blocks: Hantera blockeringar + manage_blocks_description: Tillåter användare att blockera e-postleverantörer och IP-adresser manage_custom_emojis: Hantera egna emojier manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern manage_federation: Hantera federering @@ -715,6 +727,7 @@ sv: manage_taxonomies: Hantera taxonomier manage_taxonomies_description: Tillåter användare att granska trendande innehåll och uppdatera inställningar för hashtaggar manage_user_access: Hantera användaråtkomst + manage_user_access_description: Tillåter användare att inaktivera andra användares tvåfaktorsautentisering, ändra deras e-postadress samt återställa deras lösenord manage_users: Hantera användare manage_users_description: Tillåter användare att granska användares data och utföra modereringsåtgärder på dessa manage_webhooks: Hantera webhooks @@ -789,6 +802,7 @@ sv: destroyed_msg: Webbplatsuppladdningen har raderats! software_updates: critical_update: Kritiskt — vänligen uppdatera omgående + description: Det rekommenderas att hålla din Mastodon-installation uppdaterad för att ta nytta av de senaste fixarna och funktionerna. Dessutom är det ibland viktigt att uppdatera Mastodon i tid för att undvika säkerhetsproblem. Av dessa skäl kontrollerar Mastodon efter uppdateringar var 30:e minut och meddelar dig i enlighet med dina e-postaviseringsinställningar. documentation_link: Läs mer release_notes: Ändringslogg title: Tillgängliga uppdateringar @@ -899,6 +913,7 @@ sv: trends: allow: Tillåt approved: Godkänd + confirm_allow: Är du säker på att du vill tillåta valda taggar? confirm_disallow: Är du säker på att du vill förbjuda valda taggar? disallow: Neka links: @@ -1348,6 +1363,10 @@ sv: merge_long: Behåll befintliga uppgifter och lägg till nya overwrite: Skriv över overwrite_long: Ersätt de nuvarande uppgifterna med de nya + overwrite_preambles: + bookmarks_html: + one: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}. + other: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}. preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. recent_imports: Nyligen importerade states: From 8b5650962557726c8b1dfca6ccc4b41d96a693b6 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 17 Oct 2024 11:03:08 +0200 Subject: [PATCH 316/467] Add more explicit explanations about author attribution and `fediverse:creator` (#32383) --- app/javascript/styles/mastodon/forms.scss | 2 + .../settings/verifications/show.html.haml | 47 +++++++++++-------- config/locales/en.yml | 4 +- config/locales/simple_form.en.yml | 4 +- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 957a28352267e4..641fb19a577358 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -23,6 +23,8 @@ code { position: relative; overflow: hidden; height: 160px; + max-width: 566px; + margin-inline: auto; &::after { content: ''; diff --git a/app/views/settings/verifications/show.html.haml b/app/views/settings/verifications/show.html.haml index 560807f27ca7fb..4def10e595dbe3 100644 --- a/app/views/settings/verifications/show.html.haml +++ b/app/views/settings/verifications/show.html.haml @@ -38,25 +38,34 @@ %p.lead= t('author_attribution.hint_html') - .fields-row - .fields-row__column.fields-row__column-6 - .fields-group - = f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4 } - .fields-row__column.fields-row__column-6 - .fields-group.fade-out-top - %div - .status-card.expanded.bottomless - .status-card__image - = image_tag frontend_asset_url('images/preview.png'), alt: '', class: 'status-card__image-image' - .status-card__content - %span.status-card__host - %span= t('author_attribution.s_blog', name: display_name(@account)) - · - %time.time-ago{ datetime: 1.year.ago.to_date.iso8601 } - %strong.status-card__title= t('author_attribution.example_title') - .more-from-author - = logo_as_symbol(:icon) - = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + tag.bdi(display_name(@account)) }) + .fields-group.fade-out-top + %div + .status-card.expanded.bottomless + .status-card__image + = image_tag frontend_asset_url('images/preview.png'), alt: '', class: 'status-card__image-image' + .status-card__content + %span.status-card__host + %span= t('author_attribution.s_blog', name: display_name(@account)) + · + %time.time-ago{ datetime: 1.year.ago.to_date.iso8601 } + %strong.status-card__title= t('author_attribution.example_title') + .more-from-author + = logo_as_symbol(:icon) + = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + tag.bdi(display_name(@account)) }) + + %h4= t('verification.here_is_how') + + %p.lead= t('author_attribution.instructions') + + .input-copy.lead + .input-copy__wrapper + = copyable_input value: tag.meta(name: 'fediverse:creator', content: "@#{@account.local_username_and_domain}") + %button{ type: :button }= t('generic.copy') + + %p.lead= t('author_attribution.then_instructions') + + .fields-group + = f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4 } .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/config/locales/en.yml b/config/locales/en.yml index c88ef3fa201b3e..e9c8822d5acb30 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1166,9 +1166,11 @@ en: use_security_key: Use security key author_attribution: example_title: Sample text - hint_html: Control how you're credited when links are shared on Mastodon. + hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon. + instructions: 'Make sure this code is in your article''s HTML:' more_from_html: More from %{name} s_blog: "%{name}'s Blog" + then_instructions: Then, add the domain name of the publication in the field below. title: Author attribution challenge: confirm: Continue diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 8f6137c8c147c5..25de9f5910715b 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -3,7 +3,7 @@ en: simple_form: hints: account: - attribution_domains_as_text: Protects from false attributions. + attribution_domains_as_text: One per line. Protects from false attributions. discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. @@ -144,7 +144,7 @@ en: url: Where events will be sent to labels: account: - attribution_domains_as_text: Only allow specific websites + attribution_domains_as_text: Websites allowed to credit you discoverable: Feature profile and posts in discovery algorithms fields: name: Label From bd6c96f73742101df842cf21574a3bbe0c1371e0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 18 Oct 2024 03:19:37 -0400 Subject: [PATCH 317/467] Fix broken i18n in text welcome mailer tags area (#32571) --- app/helpers/application_helper.rb | 5 +++++ app/views/application/mailer/_hashtag.html.haml | 3 +-- app/views/user_mailer/welcome.text.erb | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8f9a433d82d226..4caf0398fefe65 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -244,6 +244,11 @@ def copyable_input(options = {}) tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options) end + def recent_tag_usage(tag) + people = tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts + I18n.t 'user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(people), count: people + end + private def storage_host_var diff --git a/app/views/application/mailer/_hashtag.html.haml b/app/views/application/mailer/_hashtag.html.haml index b740ba31b99437..0fe7117bc4d1c8 100644 --- a/app/views/application/mailer/_hashtag.html.haml +++ b/app/views/application/mailer/_hashtag.html.haml @@ -17,5 +17,4 @@ %span.email-mini-hashtag-img-span = image_tag full_asset_url(account.avatar.url), alt: '', width: 16, height: 16 %td - - people = hashtag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts - %p= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(people), count: people) + %p= recent_tag_usage(hashtag) diff --git a/app/views/user_mailer/welcome.text.erb b/app/views/user_mailer/welcome.text.erb index d9da2997daecd7..144d44b8429a5b 100644 --- a/app/views/user_mailer/welcome.text.erb +++ b/app/views/user_mailer/welcome.text.erb @@ -53,7 +53,7 @@ <%= t('user_mailer.welcome.hashtags_subtitle') %> <%- @tags.each do |tag| %> -* #<%= tag.display_name %> · <%= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts)) %> +* #<%= tag.display_name %> · <%= recent_tag_usage(tag) %> <%= tag_url(tag) %> <%- end %> From 0f37b7d6acd2a7666ce56354d9196da2ec02da81 Mon Sep 17 00:00:00 2001 From: hota Date: Fri, 18 Oct 2024 16:40:08 +0900 Subject: [PATCH 318/467] Fix column-settings spacing in local timeline in advanced view (#32567) --- .../community_timeline/components/column_settings.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx index 15381b589df2a0..73927b612d3089 100644 --- a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx @@ -21,9 +21,11 @@ class ColumnSettings extends PureComponent { return (
-
- } /> -
+
+
+ } /> +
+
); } From 8eae0d067db940d88a834128a9b6c022e29b9b28 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:56:43 +0200 Subject: [PATCH 319/467] New Crowdin Translations (automated) (#32573) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/cy.json | 3 +++ app/javascript/mastodon/locales/he.json | 3 +++ app/javascript/mastodon/locales/it.json | 1 + app/javascript/mastodon/locales/ja.json | 2 +- app/javascript/mastodon/locales/ml.json | 30 +++++++++++++++++++++++++ config/locales/ca.yml | 1 - config/locales/cy.yml | 4 +++- config/locales/da.yml | 4 +++- config/locales/de.yml | 6 +++-- config/locales/en-GB.yml | 1 - config/locales/eo.yml | 4 ++++ config/locales/es-AR.yml | 4 +++- config/locales/es-MX.yml | 4 +++- config/locales/es.yml | 4 +++- config/locales/et.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 6 +++-- config/locales/fo.yml | 4 +++- config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/ga.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 4 +++- config/locales/he.yml | 4 +++- config/locales/hu.yml | 1 - config/locales/ia.yml | 1 - config/locales/is.yml | 4 +++- config/locales/it.yml | 4 +++- config/locales/ja.yml | 1 - config/locales/ko.yml | 1 - config/locales/lt.yml | 4 +++- config/locales/nl.yml | 4 +++- config/locales/nn.yml | 1 - config/locales/pl.yml | 4 +++- config/locales/pt-BR.yml | 4 +++- config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/simple_form.ar.yml | 1 - config/locales/simple_form.bg.yml | 2 -- config/locales/simple_form.ca.yml | 2 -- config/locales/simple_form.cy.yml | 4 ++-- config/locales/simple_form.da.yml | 4 ++-- config/locales/simple_form.de.yml | 4 ++-- config/locales/simple_form.el.yml | 2 -- config/locales/simple_form.en-GB.yml | 2 -- config/locales/simple_form.eo.yml | 2 -- config/locales/simple_form.es-AR.yml | 4 ++-- config/locales/simple_form.es-MX.yml | 4 ++-- config/locales/simple_form.es.yml | 4 ++-- config/locales/simple_form.et.yml | 2 -- config/locales/simple_form.fa.yml | 2 -- config/locales/simple_form.fi.yml | 4 ++-- config/locales/simple_form.fo.yml | 4 ++-- config/locales/simple_form.fr-CA.yml | 2 -- config/locales/simple_form.fr.yml | 2 -- config/locales/simple_form.fy.yml | 2 -- config/locales/simple_form.ga.yml | 2 -- config/locales/simple_form.gd.yml | 2 -- config/locales/simple_form.gl.yml | 4 ++-- config/locales/simple_form.he.yml | 4 ++-- config/locales/simple_form.hu.yml | 2 -- config/locales/simple_form.ia.yml | 1 - config/locales/simple_form.io.yml | 2 -- config/locales/simple_form.is.yml | 4 ++-- config/locales/simple_form.it.yml | 4 ++-- config/locales/simple_form.ja.yml | 2 -- config/locales/simple_form.ko.yml | 2 -- config/locales/simple_form.lt.yml | 4 ++-- config/locales/simple_form.lv.yml | 2 -- config/locales/simple_form.nl.yml | 4 ++-- config/locales/simple_form.nn.yml | 2 -- config/locales/simple_form.pl.yml | 4 ++-- config/locales/simple_form.pt-BR.yml | 4 ++-- config/locales/simple_form.ru.yml | 2 -- config/locales/simple_form.sq.yml | 2 -- config/locales/simple_form.sv.yml | 2 -- config/locales/simple_form.th.yml | 2 -- config/locales/simple_form.tr.yml | 4 ++-- config/locales/simple_form.uk.yml | 2 -- config/locales/simple_form.vi.yml | 4 ++-- config/locales/simple_form.zh-CN.yml | 4 ++-- config/locales/simple_form.zh-TW.yml | 4 ++-- config/locales/sq.yml | 1 - config/locales/th.yml | 1 - config/locales/tr.yml | 4 +++- config/locales/uk.yml | 2 +- config/locales/vi.yml | 4 +++- config/locales/zh-CN.yml | 4 +++- config/locales/zh-TW.yml | 4 +++- 90 files changed, 145 insertions(+), 130 deletions(-) diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 8645c72faa882e..723e8ae37d5e62 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Cyfnod pleidlais", "compose_form.poll.multiple": "Dewis lluosog", "compose_form.poll.option_placeholder": "Dewis {number}", + "compose_form.poll.single": "Dewis unigol", "compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", "compose_form.poll.type": "Arddull", @@ -507,6 +508,7 @@ "notification.favourite": "Ffafriodd {name} eich postiad", "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# eraill}} eich postiad", "notification.follow": "Dilynodd {name} chi", + "notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# other} two {# others} few {# others} many {# others} other {# others}} nawr yn eich dilyn chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# other} other {# others}} wedi gofyn i'ch dilyn chi", "notification.label.mention": "Crybwyll", @@ -565,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "Bar hidlo cyflym", "notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:", + "notifications.column_settings.group": "Grŵp", "notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.poll": "Canlyniadau pleidlais:", "notifications.column_settings.push": "Hysbysiadau gwthiadwy", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 2ad3a47f0da26e..be1dde65280554 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "משך הסקר", "compose_form.poll.multiple": "בחירה מרובה", "compose_form.poll.option_placeholder": "אפשרות {number}", + "compose_form.poll.single": "בחירה יחידה", "compose_form.poll.switch_to_multiple": "אפשרו בחירה מרובה בסקר", "compose_form.poll.switch_to_single": "אפשרו בחירה בודדת בסקר", "compose_form.poll.type": "סוג משאל", @@ -507,6 +508,7 @@ "notification.favourite": "הודעתך חובבה על ידי {name}", "notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך", "notification.follow": "{name} במעקב אחרייך", + "notification.follow.name_and_others": "{name} ועוד {count, plural,one {מישהו} other {# אחרים}} החלו לעקוב אחריך", "notification.follow_request": "{name} ביקשו לעקוב אחריך", "notification.follow_request.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} ביקשו לעקוב אחריך", "notification.label.mention": "אזכור", @@ -565,6 +567,7 @@ "notifications.column_settings.filter_bar.category": "שורת סינון מהיר", "notifications.column_settings.follow": "עוקבים חדשים:", "notifications.column_settings.follow_request": "בקשות מעקב חדשות:", + "notifications.column_settings.group": "קבוצה", "notifications.column_settings.mention": "פניות:", "notifications.column_settings.poll": "תוצאות סקר:", "notifications.column_settings.push": "התראות בדחיפה", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 41d233079a7994..44040cc716a7fb 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Durata del sondaggio", "compose_form.poll.multiple": "Scelta multipla", "compose_form.poll.option_placeholder": "Opzione {number}", + "compose_form.poll.single": "Scelta singola", "compose_form.poll.switch_to_multiple": "Modifica il sondaggio per consentire scelte multiple", "compose_form.poll.switch_to_single": "Modifica il sondaggio per consentire una singola scelta", "compose_form.poll.type": "Stile", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 814b2f812487d1..9aea55ec3f4c82 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -779,7 +779,7 @@ "status.bookmark": "ブックマーク", "status.cancel_reblog_private": "ブースト解除", "status.cannot_reblog": "この投稿はブーストできません", - "status.continued_thread": "つり下げ投稿", + "status.continued_thread": "続きのスレッド", "status.copy": "投稿へのリンクをコピー", "status.delete": "削除", "status.detailed_status": "詳細な会話ビュー", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 38a425cb90b28b..b7a2ad2a3f002a 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -82,6 +82,7 @@ "closed_registrations.other_server_instructions": "Mastodon വികേന്ദ്രീകൃത സംവിധാനം ആയതിനാൽ, നിങ്ങൾക്ക് മറ്റൊരു സെർവറിൽ ഒരു അക്കൗണ്ട് ഉണ്ടാക്കിയും ഇതുമായി ആശയവിനിമയം നടത്താൻ സാധിക്കുന്നതാണ്.", "closed_registrations_modal.description": "{domain} ഇൽ ഇപ്പോൾ അക്കൗണ്ട് ഉണ്ടാക്കാൻ സാധിക്കുന്നതല്ല, Mastodon ഉപയോഗിക്കുന്നതിനായി നിങ്ങൾക്ക് {domain}-ൽ പ്രത്യേകമായി ഒരു അക്കൗണ്ട് ആവശ്യമില്ല എന്നത് ദയവായി ഓർക്കുക.", "closed_registrations_modal.find_another_server": "മറ്റൊരു സെർവർ കണ്ടെത്തുക", + "closed_registrations_modal.title": "മാസ്റ്റഡോണിൽ ചേർക്കൽ", "column.about": "അപ്ലിക്കേഷനെക്കുറിച്ച്", "column.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", "column.bookmarks": "ബുക്ക്മാർക്കുകൾ", @@ -106,6 +107,7 @@ "column_subheading.settings": "ക്രമീകരണങ്ങള്‍", "community.column_settings.local_only": "പ്രാദേശികം മാത്രം", "community.column_settings.media_only": "മാധ്യമങ്ങൾ മാത്രം", + "community.column_settings.remote_only": "വിദൂര മാത്രം", "compose.language.change": "ഭാഷ മാറ്റുക", "compose.language.search": "ഭാഷകൾ തിരയുക...", "compose.published.open": "തുറക്കുക", @@ -115,11 +117,16 @@ "compose_form.lock_disclaimer.lock": "ലോക്കുചെയ്തു", "compose_form.placeholder": "നിങ്ങളുടെ മനസ്സിൽ എന്താണ്?", "compose_form.poll.duration": "തിരഞ്ഞെടുപ്പിന്റെ സമയദൈർഖ്യം", + "compose_form.poll.multiple": "ഒരുപാടു് സാധ്യതകൾ", + "compose_form.poll.option_placeholder": "സാധ്യത {number}", + "compose_form.poll.single": "ഒറ്റ സാധ്യത", "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്‌സുകൾ ഉൾപ്പെടുതുക", "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്‌സ്‌ മാത്രം ആക്കുക", + "compose_form.poll.type": "രീതി", "compose_form.publish": "അയക്കുക", "compose_form.publish_form": "Publish", "compose_form.reply": "മറുപടി", + "compose_form.save_changes": "കാലാനുസ്യതമാക്കുക", "compose_form.spoiler.marked": "എഴുത്ത് മുന്നറിയിപ്പിനാൽ മറച്ചിരിക്കുന്നു", "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "confirmation_modal.cancel": "റദ്ദാക്കുക", @@ -150,6 +157,7 @@ "directory.local": "{domain} ൽ നിന്ന് മാത്രം", "directory.new_arrivals": "പുതിയ വരവുകൾ", "directory.recently_active": "അടുത്തിടെയായി സജീവമായ", + "disabled_account_banner.account_settings": "ഇടപാടു് ക്രമീകരങ്ങൾ", "disabled_account_banner.text": "നിങ്ങളുടെ {disabledAccount} എന്ന അക്കൗണ്ട് ഇപ്പോൾ പ്രവർത്തനരഹിതമാണ്.", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", @@ -185,10 +193,15 @@ "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", + "explore.search_results": "തിരയൽ ഫലങ്ങൾ", "explore.suggested_follows": "ആൾക്കാർ", "explore.title": "പര്യവേക്ഷണം നടത്തുക", "explore.trending_links": "വാര്‍ത്ത", + "explore.trending_statuses": "എഴുത്തുകൾ", + "explore.trending_tags": "ചർച്ചാവിഷയങ്ങൾ", + "filter_modal.added.review_and_configure_title": "അരിക്കൽ ക്രമീകരങ്ങൾ", "filter_modal.select_filter.prompt_new": "പുതിയ വിഭാഗം: {name}", + "filter_modal.select_filter.search": "തിരയുക അല്ലെങ്കിൽ നിർമാണിക്കുക", "firehose.all": "എല്ലാം", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", "follow_request.reject": "നിരസിക്കുക", @@ -196,10 +209,12 @@ "follow_suggestions.view_all": "എല്ലാം കാണുക", "follow_suggestions.who_to_follow": "ആരേ പിന്തുടരണം", "followed_tags": "പിന്തുടരിയതു് ചർച്ചാവിഷയങ്ങൾ", + "footer.directory": "രൂപരേഖ നാമഗൃഹസൂചി", "footer.get_app": "ഉപകരണം ലഭിക്കൂ", "footer.invite": "ആളുകളെ ക്ഷണിക്കുക", "footer.privacy_policy": "സ്വകാര്യത്തനയം", "footer.source_code": "ഉറവിടസങ്കേതം കാണുക", + "footer.status": "അവസ്ഥ", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.heading": "തുടക്കം കുറിക്കുക", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", @@ -220,7 +235,10 @@ "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", "interaction_modal.login.action": "ആമുഖം വരെ എടുത്തോണ്ടു് പോവുക", "interaction_modal.login.prompt": "ആമുഖപ്രദാനിയുടെ മേഖലപേരു്. ഉദ: mastodon.social", + "interaction_modal.no_account_yet": "മാസ്റ്റഡോണിൽ ഇല്ലേ?", "interaction_modal.on_this_server": "ഈ സെർവറീൽ", + "interaction_modal.title.favourite": "പ്രിയപ്പെട്ട {name}-ന്റെ എഴുതു്", + "interaction_modal.title.follow": "{name}-െ പിന്തുടരുക", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക", @@ -255,6 +273,8 @@ "lightbox.close": "അടയ്ക്കുക", "lightbox.next": "അടുത്തത്", "lightbox.previous": "പുറകോട്ട്", + "limited_account_hint.action": "എന്നാലും രൂപരേഖ കാണിക്കുക", + "link_preview.author": "{name}-നിന്നു്", "lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക", "lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക", "lists.delete": "പട്ടിക ഒഴിവാക്കുക", @@ -262,9 +282,11 @@ "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", "lists.exclusive": "ഈ എഴുത്തുകൾ ആമുഖം നിന്നു് മറയ്ക്കുക", "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", + "lists.new.title_placeholder": "പുതിയ പട്ടിക തലക്കെട്ടു്", "lists.replies_policy.none": "ആരുമില്ല", "lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:", "lists.subheading": "എന്റെ പട്ടികകൾ", + "media_gallery.hide": "മറയ്ക്കുക", "navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", "navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ", "navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ", @@ -272,6 +294,7 @@ "navigation_bar.discover": "കണ്ടെത്തുക", "navigation_bar.domain_blocks": "Hidden domains", "navigation_bar.explore": "ആരായുക", + "navigation_bar.favourites": "പ്രിയപ്പെട്ടതു്", "navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "navigation_bar.lists": "ലിസ്റ്റുകൾ", "navigation_bar.logout": "ലോഗൗട്ട്", @@ -290,16 +313,19 @@ "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു", + "notification_requests.accept": "സ്വീകരിക്കുക", "notification_requests.edit_selection": "പരിഷ്കരിക്കുക", "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", "notifications.column_settings.follow": "പുതിയ പിന്തുടരുന്നവർ:", "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", + "notifications.column_settings.group": "കൂട്ടം", "notifications.column_settings.mention": "സൂചനകൾ:", "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:", "notifications.column_settings.push": "പുഷ് അറിയിപ്പുകൾ", "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", + "notifications.column_settings.show": "എഴുത്തുപംക്തിയിൽ കാണിക്കുക", "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", "notifications.column_settings.update": "പരിഷ്കരണങ്ങൾ:", @@ -312,6 +338,9 @@ "notifications.grant_permission": "അനുമതി നൽകുക.", "notifications.group": "{count} അറിയിപ്പുകൾ", "notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "notifications.policy.filter": "അരിക്കൽ", + "notifications.policy.filter_new_accounts_title": "പുതിയ ഇടപാടുകൾ", + "notifications.policy.filter_not_followers_title": "താങ്ങളെ പിന്തുടരാത്തതു് ആൾക്കാർ", "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "ആമുഖത്താൾ വരെ പോവ്വുക", @@ -330,6 +359,7 @@ "picture_in_picture.restore": "തിരികെ വയ്ക്കുക", "poll.closed": "അടച്ചു", "poll.refresh": "പുതുക്കുക", + "poll.reveal": "ഫലങ്ങൾ കാണുക", "poll.vote": "വോട്ട് ചെയ്യുക", "poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു", "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index cc2da496a67cf3..9d861fa30c3109 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1166,7 +1166,6 @@ ca: use_security_key: Usa clau de seguretat author_attribution: example_title: Text d'exemple - hint_html: Controleu com se us acredita quan els enllaços es comparteixen a Mastodon. more_from_html: Més de %{name} s_blog: Blog de %{name} title: Atribució d'autor diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 85136004ea7219..2d6a0eb38d118a 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1238,9 +1238,11 @@ cy: use_security_key: Defnyddiwch allwedd diogelwch author_attribution: example_title: Testun enghreifftiol - hint_html: Rheolwch sut rydych chi'n cael eich canmol pan fydd dolenni'n cael eu rhannu ar Mastodon. + hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon. + instructions: 'Gwnewch yn siŵr fod y cod hwn yn HTML eich erthygl:' more_from_html: Mwy gan %{name} s_blog: Blog %{name} + then_instructions: Yna, ychwanegwch enw parth y cyhoeddiad yn y maes isod. title: Priodoliad awdur challenge: confirm: Parhau diff --git a/config/locales/da.yml b/config/locales/da.yml index 923102c11f12a1..6447afb4930381 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1166,9 +1166,11 @@ da: use_security_key: Brug sikkerhedsnøgle author_attribution: example_title: Eksempeltekst - hint_html: Styrer, hvordan man krediteres, når links deles på Mastodon. + hint_html: Skriver du nyheder eller blogartikler uden for Mastodon? Styr, hvordan man bliver krediteret, når disse deles på Mastodon. + instructions: 'Sørg for, at denne kode er i artikelens HTML:' more_from_html: Flere fra %{name} s_blog: "%{name}s blog" + then_instructions: Tilføj dernæst publikationsdomænenavnet i feltet nedenfor. title: Forfattertilskrivning challenge: confirm: Fortsæt diff --git a/config/locales/de.yml b/config/locales/de.yml index cfd0d6510ee07c..323579f25fdcfc 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1166,9 +1166,11 @@ de: use_security_key: Sicherheitsschlüssel verwenden author_attribution: example_title: Beispieltext - hint_html: Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest. + hint_html: Schreibst du außerhalb von Mastodon Nachrichtenartikel oder betreibst du einen Blog? Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest. + instructions: 'Der nachfolgende Code muss im HTML-Code deines Artikels sein:' more_from_html: Mehr von %{name} s_blog: Blog von %{name} + then_instructions: Ergänze die Domain, auf der deine Inhalte veröffentlicht werden in das unten stehende Feld. title: Anerkennung als Autor*in challenge: confirm: Fortfahren @@ -1967,7 +1969,7 @@ de: extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. here_is_how: So funktioniert’s hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an." - instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. + instructions_html: Kopiere den unten stehenden Code und füge ihn in den HTML-Code deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. verification: Verifizierung verified_links: Deine verifizierten Links website_verification: Website-Verifizierung diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 65b2e6f71a01ee..fb284479f2ab58 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1165,7 +1165,6 @@ en-GB: use_security_key: Use security key author_attribution: example_title: Sample text - hint_html: Control how you're credited when links are shared on Mastodon. more_from_html: More from %{name} s_blog: "%{name}'s Blog" title: Author attribution diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 9a3ba24562f250..3d63ecd01d6604 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -977,6 +977,8 @@ eo: body: "%{target} apelacias kontroldecido de %{action_taken_by} de %{date}, kiu estas %{type}. Ĝi skribis:" next_steps: Vi povas aprobi apelacion por malfari kontroldecidon au ignori. subject: "%{username} apelacias kontroldecidon ĉe %{instance}" + new_critical_software_updates: + body: Novaj gravaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi kiel eble plej baldaŭ! new_pending_account: body: La detaloj de la nova konto estas ĉi-sube. Vi povas akcepti aŭ malakcepti tiun aliĝilon. subject: Nova konto atendas por recenzo en %{instance} (%{username}) @@ -986,6 +988,7 @@ eo: subject: Nova signalo por %{instance} (#%{id}) new_software_updates: body: Novaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi! + subject: Novaj versioj de Mastodon disponeblas por %{instance}! new_trends: body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:' new_trending_links: @@ -1033,6 +1036,7 @@ eo: apply_for_account: Peti konton captcha_confirmation: help_html: Se vi havas problemojn solvi la CAPTCHA, vi povas kontakti nin per %{email} kaj ni povas helpi vin. + hint_html: Nur unu plia afero! Ni devas konfirmi, ke vi estas homo (tio estas por ke ni povu konservi la spamon ekstere!). Solvu la CAPTCHA sube kaj alklaku "Daŭrigu". title: Sekureckontrolo confirmations: clicking_this_link: alklakante ĉi tiun ligilon diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 04ff7880a1b804..a27ba1a5484448 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1166,9 +1166,11 @@ es-AR: use_security_key: Usar la llave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controlá cómo se te da crédito cuando los enlaces son compartidos en Mastodon. + hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon." + instructions: 'Asegúrate de que este código está en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. title: Atribución del autor challenge: confirm: Continuar diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 5b44ed85d639a9..fef805680a3227 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1166,9 +1166,11 @@ es-MX: use_security_key: Usar la clave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + hint_html: "¿Estás escribiendo artículos de noticias o blogs fuera de Mastodon? Controla cómo te acreditan cuando se comparten en Mastodon." + instructions: 'Asegúrate de que este código esté en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. title: Atribución del autor challenge: confirm: Continuar diff --git a/config/locales/es.yml b/config/locales/es.yml index 47d32c62c8ce5c..8690c1cdfb57c4 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1166,9 +1166,11 @@ es: use_security_key: Usar la clave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon." + instructions: 'Asegúrate de que este código está en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. title: Atribución del autor challenge: confirm: Continuar diff --git a/config/locales/et.yml b/config/locales/et.yml index 4d231ae764e63c..1a679af87f1f87 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1166,7 +1166,6 @@ et: use_security_key: Kasuta turvavõtit author_attribution: example_title: Näidistekst - hint_html: Määra, kuidas sind krediteeritakse, kui linke Mastodonis jagatakse. more_from_html: Rohkem kasutajalt %{name} s_blog: Kasutaja %{name} blogi title: Autori tunnustamine diff --git a/config/locales/fa.yml b/config/locales/fa.yml index fbfd78b6d4261d..3083bc13cbcdd9 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -961,7 +961,6 @@ fa: use_security_key: استفاده از کلید امنیتی author_attribution: example_title: متن نمونه - hint_html: واپایش چگونگی اعتبار دادن به شما هنگام هم‌رسانی پیوندها روی ماستودون. more_from_html: بیش‌تر از %{name} s_blog: بلاگ %{name} title: اعتباردهی به نگارنده diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 52ea0b374c8141..2f9a76c80d4d24 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1166,9 +1166,11 @@ fi: use_security_key: Käytä suojausavainta author_attribution: example_title: Esimerkkiteksti - hint_html: Määrää, kuinka tulet tunnustetuksi, kun Mastodonissa jaetaan linkkejä. + hint_html: Kirjoitatko uutisia tai blogitekstejä Mastodonin ulkopuolella? Määrää, kuinka tulet tunnustetuksi, kun niitä jaetaan Mastodonissa. + instructions: 'Varmista, että artikkelisi HTML:ssä on tämä koodi:' more_from_html: Lisää tekijältä %{name} s_blog: Käyttäjän %{name} blogi + then_instructions: Lisää sitten julkaisun verkkotunnus seuraavaan tekstikenttään. title: Tekijän tunnustus challenge: confirm: Jatka @@ -1965,7 +1967,7 @@ fi: signed_in_as: 'Kirjautunut tilillä:' verification: extra_instructions_html: Vinkki: Verkkosivustollasi oleva linkki voi olla myös näkymätön. Olennainen osuus on rel="me", joka estää toiseksi henkilöksi tekeytymisen verkkosivustoilla, joilla on käyttäjien luomaa sisältöä. Voit käyttää jopa link-elementtiä sivun head-osassa elementin a sijaan, mutta HTML:n pitää olla käytettävissä ilman JavaScript-koodin suorittamista. - here_is_how: Näin voit tehdä sen + here_is_how: Näin se onnistuu hint_html: "Henkilöllisyyden vahvistaminen on Mastodonissa jokaisen käyttäjän ulottuvilla. Se perustuu avoimiin standardeihin ja on maksutonta nyt ja aina. Tarvitset vain henkilökohtaisen verkkosivuston, jonka perusteella sinut voidaan tunnistaa. Kun teet linkin tuolle verkkosivulle profiilistasi, tarkistamme, että verkkosivustolla on linkki takaisin profiiliisi, ja näytämme profiilissasi visuaalisen ilmaisimen." instructions_html: Kopioi ja liitä seuraava koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset. verification: Vahvistus diff --git a/config/locales/fo.yml b/config/locales/fo.yml index fcf3eb031ec8fd..3ade3007f44a56 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1166,9 +1166,11 @@ fo: use_security_key: Brúka trygdarlykil author_attribution: example_title: Tekstadømi - hint_html: Kanna, hvussu tú verður viðurkend/ur, tá ið onnur deila slóðir á Mastodon. + hint_html: Skrivar tú tíðindi ella greinar til bloggin uttanfyri Mastodon? Her kanst tú stýra, hvussu tú verður tilsipað/ur, tá ið títt tilfar verður deilt á Mastodon. + instructions: 'Tryggja tær, at henda kota er í HTML''inum á tíni grein:' more_from_html: Meiri frá %{name} s_blog: Bloggurin hjá %{name} + then_instructions: Skriva síðani økisnavnið, har tað verður lagt út, í teigin niðanfyri. title: Ískoyti høvundans challenge: confirm: Hald á diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index eea31e9fbfb862..3c771d4c6430ff 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1169,7 +1169,6 @@ fr-CA: use_security_key: Utiliser la clé de sécurité author_attribution: example_title: Exemple de texte - hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. more_from_html: Plus via %{name} s_blog: Blog de %{name} title: Attribution de l'auteur·e diff --git a/config/locales/fr.yml b/config/locales/fr.yml index cbe0ae040778c3..58fc63fc1baaea 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1169,7 +1169,6 @@ fr: use_security_key: Utiliser la clé de sécurité author_attribution: example_title: Exemple de texte - hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. more_from_html: Plus via %{name} s_blog: Blog de %{name} title: Attribution de l'auteur·e diff --git a/config/locales/fy.yml b/config/locales/fy.yml index d63d2ac2aacdc0..8ccedd2be17753 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1165,7 +1165,6 @@ fy: use_security_key: Befeiligingskaai brûke author_attribution: example_title: Faorbyldtekst - hint_html: Bepaal hoe’t wy jo fermelde, wannear’t jo keppelingen op Mastodon dield wurde. more_from_html: Mear fan %{name} s_blog: Weblog fan %{name} title: Auteur-attribúsje diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 83ac6ce910f78c..0657f827d1b293 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1220,7 +1220,6 @@ ga: use_security_key: Úsáid eochair shlándála author_attribution: example_title: Téacs samplach - hint_html: Rialú conas a chuirtear chun sochair tú nuair a roinntear naisc ar Mastodon. more_from_html: Tuilleadh ó %{name} s_blog: Blag %{name} title: Leithdháil an údair diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 32aa3e23478406..3495a070ecfe57 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1202,7 +1202,6 @@ gd: use_security_key: Cleachd iuchair tèarainteachd author_attribution: example_title: Ball-sampaill teacsa - hint_html: Stùirich mar a thèid iomradh a thoirt ort nuair a thèid ceangal a cho-roinneadh air Mastodon. more_from_html: Barrachd o %{name} s_blog: Bloga aig %{name} title: Aithris air an ùghdar diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 3ee93bf7318bd7..a4f63a50e06247 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1166,9 +1166,11 @@ gl: use_security_key: Usa chave de seguridade author_attribution: example_title: Texto de mostra - hint_html: Controla o xeito en que te acreditan cando se comparten ligazóns en Mastodon. + hint_html: Escribes novas ou artigos nun blog alleos a Mastodon? Xestiona o xeito en que podes dar crédito da túa autoría cando os compartes en Mastodon. + instructions: 'Pon coidado en que este código apareza no HTML do teu artigo:' more_from_html: Máis de %{name} s_blog: Blog de %{name} + then_instructions: Despois engade o nome de dominio da publicación no campo inferior. title: Atribución da autoría challenge: confirm: Continuar diff --git a/config/locales/he.yml b/config/locales/he.yml index 54b6b6f38dad08..10b4611b9ac5c8 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1202,9 +1202,11 @@ he: use_security_key: שימוש במפתח אבטחה author_attribution: example_title: טקסט לדוגמה - hint_html: בחירה איך תקבלו קרדיטציה כאשר קישורים משותפים דרך מסטודון. + hint_html: האם יש לך בלוג או טור חדשות שמתפרסם מחוץ למסטודון? ניתן לשלוט איך יוצג הקרדיט שלך כשמשתפים את הלינק במסטודון. + instructions: 'ודאו כי הקוד הזה נכלל בקוד ה־HTML של המאמרים שלכם:' more_from_html: עוד מאת %{name} s_blog: הבלוג של %{name} + then_instructions: לאחר מכן, הוסיפו את שם המתחם של האתר המפרסם בשדה למטה. title: ייחוס למפרסם challenge: confirm: המשך diff --git a/config/locales/hu.yml b/config/locales/hu.yml index aad90b3ac3c2f7..4f18e3b4d4861d 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1166,7 +1166,6 @@ hu: use_security_key: Biztonsági kulcs használata author_attribution: example_title: Mintaszöveg - hint_html: Szabályozd, hogyan hivatkoznak rád, amikor linket osztanak meg Mastodonon. more_from_html: 'Több tőle: %{name}' s_blog: "%{name} blogja" title: Szerző forrásmegjelölése diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 70dfa658b2d06a..843e8724b9efcd 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1166,7 +1166,6 @@ ia: use_security_key: Usar clave de securitate author_attribution: example_title: Texto de exemplo - hint_html: Controlar como tu es accreditate quando ligamines es compartite sur Mastodon. more_from_html: Plus de %{name} s_blog: Blog de %{name} title: Attribution de autor diff --git a/config/locales/is.yml b/config/locales/is.yml index ed08663b5a3739..c50b3dd20dda02 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1170,9 +1170,11 @@ is: use_security_key: Nota öryggislykil author_attribution: example_title: Sýnitexti - hint_html: Stýrðu hvernig framlög þín birtast þegar tenglum er deilt á Mastodon. + hint_html: Ertu að skrifa fréttir eða bloggfærslur utan Mastodon? Stýrðu því hvernig vitnað er í þig þegar þeim er deilt á Mastodon. + instructions: 'Gakktu úr skugga um að þessi kóði sé í HTML greinarinnar þinnar:' more_from_html: Meira frá %{name} s_blog: Bloggsvæði hjá %{name} + then_instructions: Síðan skaltu bæta lénsheiti útgefandans í reitinn hér fyrir neðan. title: Framlag höfundar challenge: confirm: Halda áfram diff --git a/config/locales/it.yml b/config/locales/it.yml index 22bfd7df24113b..e18cb0e8f68988 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1168,9 +1168,11 @@ it: use_security_key: Usa la chiave di sicurezza author_attribution: example_title: Testo di esempio - hint_html: Controlla come sei viene accreditato quando i link sono condivisi su Mastodon. + hint_html: Stai scrivendo notizie o articoli di blog al di fuori di Mastodon? Controlla come vieni accreditato quando vengono condivisi su Mastodon. + instructions: 'Assicurati che questo codice sia presente nell''HTML del tuo articolo:' more_from_html: Altro da %{name} s_blog: Blog di %{name} + then_instructions: Quindi, aggiungi il nome di dominio della pubblicazione nel campo sottostante. title: Attribuzione autore challenge: confirm: Continua diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 8bd8b46f30c4ce..66791a622d2fae 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1148,7 +1148,6 @@ ja: use_security_key: セキュリティキーを使用 author_attribution: example_title: サンプルテキスト - hint_html: Mastodonでリンクが共有されたときのクレジットの表示方法を管理する。 more_from_html: "%{name} のその他の情報" s_blog: "%{name} のブログ" title: 著者の帰属 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 4a39cce4ce336c..43944fe0f651cc 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1150,7 +1150,6 @@ ko: use_security_key: 보안 키 사용 author_attribution: example_title: 예시 텍스트 - hint_html: 링크가 마스토돈에 공유될 때 내가 어떻게 표시될 지를 제어합니다. more_from_html: "%{name}의 게시물 더 보기" s_blog: "%{name}의 블로그" title: 작성자 기여 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 3b63ba6dcf9fc8..8ba3bad07040ab 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -817,9 +817,11 @@ lt: view_strikes: Peržiūrėti ankstesnius savo paskyros pažeidimus author_attribution: example_title: Teksto pavyzdys - hint_html: Valdyk, kaip esi nurodomas (-a), kai nuorodos bendrinamos platformoje „Mastodon“. + hint_html: Ar rašote naujienas ar tinklaraščio straipsnius už „Mastodon“ ribų? Valdykite, kaip būsite nurodomi, kai jais bus bendrinama platformoje „Mastodon“. + instructions: 'Įsitikinkite, kad šis kodas yra jūsų straipsnio HTML:' more_from_html: Daugiau iš %{name} s_blog: "%{name} tinklaraštis" + then_instructions: Tada toliau esančiame lauke įrašykite leidinio domeno vardą. title: Autoriaus (-ės) atribucija challenge: hint_html: "Patarimas: artimiausią valandą daugiau neprašysime tavo slaptažodžio." diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 968dcc3e7cb86f..1af30bca98bff0 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1166,9 +1166,11 @@ nl: use_security_key: Beveiligingssleutel gebruiken author_attribution: example_title: Voorbeeldtekst - hint_html: Bepaal hoe we je vermelden, wanneer jouw links op Mastodon worden gedeeld. + hint_html: Schrijf je nieuws- of blogartikelen buiten Mastodon? Bepaal hoe je geattribueerd wordt als deze gedeeld worden op Mastodon. + instructions: 'Zorg ervoor dat deze code in de HTML van je artikel zit:' more_from_html: Meer van %{name} s_blog: De weblog van %{name} + then_instructions: Voeg vervolgens de domeinnaam van de publicatie toe in het onderstaande veld. title: Auteur-attributie challenge: confirm: Doorgaan diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 59bc242dcb4ff4..e6edc2c4b2e18d 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1166,7 +1166,6 @@ nn: use_security_key: Bruk sikkerhetsnøkkel author_attribution: example_title: Eksempeltekst - hint_html: Kontroller korleis du blir kreditert når nokon deler lenker på Mastodon. more_from_html: Meir frå %{name} s_blog: Bloggen til %{name} title: Forfattarkreditering diff --git a/config/locales/pl.yml b/config/locales/pl.yml index ba1f4812e96297..d50a042a22ff5c 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1202,9 +1202,11 @@ pl: use_security_key: Użyj klucza bezpieczeństwa author_attribution: example_title: Przykładowy tekst - hint_html: Kontroluj przypisy do twoich wpisów widoczne na Mastodonie. + hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie. + instructions: 'Upewnij się, że ten kod jest w HTMLu twojego artykułu:' more_from_html: Więcej od %{name} s_blog: Blog %{name} + then_instructions: Potem, dodaj domenę publikacji do pola poniżej. title: Przypis do autora challenge: confirm: Kontynuuj diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 8e806f670c1810..8b2feb5193baae 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1166,9 +1166,11 @@ pt-BR: use_security_key: Usar chave de segurança author_attribution: example_title: Texto de amostra - hint_html: Controle como você é creditado quando links são compartilhados no Mastodon. + hint_html: Você está escrevendo notícias ou artigos de blogs fora do Mastodon? Controle como você é credenciado quando eles forem compartilhados no Mastodon. + instructions: 'Certifique-se que este código esteja no HTML do artigo:' more_from_html: Mais de %{name} s_blog: Blog do %{name} + then_instructions: Então, adicione o nome de domínio da publicação no campo abaixo. title: Atribuição de autoria challenge: confirm: Continuar diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 68217113d27166..1761ec3f0c0ba8 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1162,7 +1162,6 @@ pt-PT: use_security_key: Usar chave de segurança author_attribution: example_title: Texto de exemplo - hint_html: Controle a forma como é creditado quando as hiperligações são partilhadas no Mastodon. more_from_html: Mais de %{name} s_blog: Blog de %{name} title: Atribuição de autor diff --git a/config/locales/ru.yml b/config/locales/ru.yml index d70499ae17ef16..b7a10269fa9425 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1198,7 +1198,6 @@ ru: use_security_key: Использовать ключ безопасности author_attribution: example_title: Образец текста - hint_html: Контролируйте, как вы будете отмечены при обмене ссылками на Mastodon. more_from_html: Больше от %{name} s_blog: "%{name}'S Блог" title: Авторская атрибуция diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index b591cdca5754eb..0a665fb784d415 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -3,7 +3,6 @@ ar: simple_form: hints: account: - attribution_domains_as_text: يحمي من الإسناد الزائف. discoverable: يمكن عرض مشاركاتك العامة وملفك الشخصي أو التوصية به في مختلف مناطق ماستدون ويمكن اقتراح ملفك الشخصي على مستخدمين آخرين. display_name: اسمك الكامل أو اسمك المرح. fields: صفحتك الرئيسية، ضمائرك، عمرك، أي شيء تريده. diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 7b7d92995b04e8..2690f071417beb 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -3,7 +3,6 @@ bg: simple_form: hints: account: - attribution_domains_as_text: Защитава от фалшиви атрибути. discoverable: Вашите публични публикации и профил може да се представят или препоръчват в различни области на Mastodon и вашия профил може да се предлага на други потребители. display_name: Вашето пълно име или псевдоним. fields: Вашата начална страница, местоимения, години, всичко що искате. @@ -144,7 +143,6 @@ bg: url: До къде ще се изпращат събитията labels: account: - attribution_domains_as_text: Позволяване само на особени уебсайтове discoverable: Включване на профил и публикации в алгоритмите за откриване fields: name: Етикет diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 7b651470bfe1b6..c628bebaad79fd 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -3,7 +3,6 @@ ca: simple_form: hints: account: - attribution_domains_as_text: Protegeix de falses atribucions. discoverable: El teu perfil i els teus tuts públics poden aparèixer o ser recomanats en diverses àreas de Mastodon i el teu perfil pot ser suggerit a altres usuaris. display_name: El teu nom complet o el teu nom divertit. fields: La teva pàgina d'inici, pronoms, edat, el que vulguis. @@ -144,7 +143,6 @@ ca: url: On els esdeveniments seran enviats labels: account: - attribution_domains_as_text: Permet només webs específics discoverable: Permet el perfil i el tuts en els algorismes de descobriment fields: name: Etiqueta diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 56d1f873dcf110..dedd50504ba2db 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -3,7 +3,7 @@ cy: simple_form: hints: account: - attribution_domains_as_text: Yn amddiffyn rhag priodoliadau ffug. + attribution_domains_as_text: Un i bob llinell. Yn amddiffyn rhag cydnabyddiaethau ffug. discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill. display_name: Eich enw llawn neu'ch enw hwyl. fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth. @@ -144,7 +144,7 @@ cy: url: I ble bydd digwyddiadau'n cael eu hanfon labels: account: - attribution_domains_as_text: Dim ond yn caniatáu gwefannau penodol + attribution_domains_as_text: Gwefannau sy'n cael caniatâd i'ch cydnabod chi discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod fields: name: Label diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index e7b8fe337a9701..25cf670ea917ac 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -3,7 +3,7 @@ da: simple_form: hints: account: - attribution_domains_as_text: Beskytter mod falske tilskrivninger. + attribution_domains_as_text: Ét pr. linje. Beskytter mod falske tilskrivninger. discoverable: Dine offentlige indlæg og profil kan blive fremhævet eller anbefalet i forskellige områder af Mastodon, og profilen kan blive foreslået til andre brugere. display_name: Dit fulde navn eller dit sjove navn. fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til. @@ -144,7 +144,7 @@ da: url: Hvor begivenheder sendes til labels: account: - attribution_domains_as_text: Tillad kun bestemte websteder + attribution_domains_as_text: Websteder, man må krediteres af discoverable: Fremhæv profil og indlæg i opdagelsesalgoritmer fields: name: Etiket diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index f7e55f1a7bfb4b..08d5331151d903 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -3,7 +3,7 @@ de: simple_form: hints: account: - attribution_domains_as_text: Dadurch können falsche Zuschreibungen unterbunden werden. + attribution_domains_as_text: Eine Domain pro Zeile. Dadurch können falsche Zuschreibungen unterbunden werden. discoverable: Deine öffentlichen Beiträge und dein Profil können in verschiedenen Bereichen auf Mastodon angezeigt oder empfohlen werden und dein Profil kann anderen vorgeschlagen werden. display_name: Dein richtiger Name oder dein Fantasiename. fields: Deine Website, Pronomen, dein Alter – alles, was du möchtest. @@ -144,7 +144,7 @@ de: url: Wohin Ereignisse gesendet werden labels: account: - attribution_domains_as_text: Nur ausgewählte Websites zulassen + attribution_domains_as_text: Websites, die dich anerkennen dürfen discoverable: Profil und Beiträge in Suchalgorithmen berücksichtigen fields: name: Beschriftung diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index d46e764a44fdaf..9dcac5c16064e3 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -3,7 +3,6 @@ el: simple_form: hints: account: - attribution_domains_as_text: Προστατεύει από ψευδείς ιδιότητες. discoverable: Οι δημόσιες δημοσιεύσεις και το προφίλ σου μπορεί να εμφανίζονται ή να συνιστώνται σε διάφορους τομείς του Mastodon και το προφίλ σου μπορεί να προτείνεται σε άλλους χρήστες. display_name: Το πλήρες ή το αστείο σου όνομα. fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες. @@ -144,7 +143,6 @@ el: url: Πού θα σταλούν τα γεγονότα labels: account: - attribution_domains_as_text: Να επιτρέπονται μόνο συγκεκριμένες ιστοσελίδες discoverable: Παροχή προφίλ και αναρτήσεων σε αλγορίθμους ανακάλυψης fields: name: Περιγραφή diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index b802fd532f5180..e20249e6bc22fb 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -3,7 +3,6 @@ en-GB: simple_form: hints: account: - attribution_domains_as_text: Protects from false attributions. discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. @@ -144,7 +143,6 @@ en-GB: url: Where events will be sent to labels: account: - attribution_domains_as_text: Only allow specific websites discoverable: Feature profile and posts in discovery algorithms fields: name: Label diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 0d02969b4dbed7..cfb5578f5dba4e 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -3,7 +3,6 @@ eo: simple_form: hints: account: - attribution_domains_as_text: Protektas kontraŭ falsaj atribuoj. discoverable: Viaj publikaj afiŝoj kaj profilo povas esti prezentitaj aŭ rekomenditaj en diversaj lokoj de Mastodon kaj via profilo povas esti proponita al aliaj uzantoj. display_name: Via plena nomo aŭ via kromnomo. fields: Via retpaĝo, pronomoj, aĝo, ĉio, kion vi volas. @@ -139,7 +138,6 @@ eo: url: Kien eventoj sendotas labels: account: - attribution_domains_as_text: Permesi nur specifajn retejojn discoverable: Elstarigi profilon kaj afiŝojn en eltrovantaj algoritmoj fields: name: Etikedo diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index d06d09761ad512..98254c5e994d45 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -3,7 +3,7 @@ es-AR: simple_form: hints: account: - attribution_domains_as_text: Protege de atribuciones falsas. + attribution_domains_as_text: Una por línea. Protege de falsas atribuciones. discoverable: Tu perfil y publicaciones pueden ser destacadas o recomendadas en varias áreas de Mastodon, y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu pseudónimo. fields: Tu sitio web, pronombres, edad, o lo que quieras. @@ -144,7 +144,7 @@ es-AR: url: Adónde serán enviados los eventos labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados a acreditarte discoverable: Destacar perfil y mensajes en algoritmos de descubrimiento fields: name: Nombre de campo diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 8c84e35a4d1880..9d7809ef3ab3ea 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -3,7 +3,7 @@ es-MX: simple_form: hints: account: - attribution_domains_as_text: Protege frente atribuciones fraudulentas. + attribution_domains_as_text: One per line. Protects from false attributions. discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu nick. fields: Tu página de inicio, pronombres, edad, todo lo que quieras. @@ -144,7 +144,7 @@ es-MX: url: Donde los eventos serán enviados labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados para acreditarte discoverable: Destacar el perfil y las publicaciones en el algoritmo de descubrimiento fields: name: Etiqueta diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index b22701aae7b0b8..8bc2c5f65c5e14 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -3,7 +3,7 @@ es: simple_form: hints: account: - attribution_domains_as_text: Protege frente atribuciones fraudulentas. + attribution_domains_as_text: Una por línea. Protege de falsas atribuciones. discoverable: Tu perfil y publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu apodo. fields: Tu carta de presentación, pronombres, edad, lo que quieras. @@ -144,7 +144,7 @@ es: url: Donde los eventos serán enviados labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados a acreditarte discoverable: Destacar perfil y publicaciones en algoritmos de descubrimiento fields: name: Etiqueta diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 8d045cfcfe34df..4a9245682d4f05 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -3,7 +3,6 @@ et: simple_form: hints: account: - attribution_domains_as_text: Kaitseb valede omistuste eest. discoverable: Su profiili ja avalikke postitusi võidakse Mastodoni erinevates piirkondades esile tõsta või soovitada ning su profiili soovitada teistele kasutajatele. display_name: Su täisnimi või naljanimi. fields: Su koduleht, sugu, vanus. Mistahes, mida soovid. @@ -144,7 +143,6 @@ et: url: Kuhu sündmused saadetakse labels: account: - attribution_domains_as_text: Luba vaid kindlad veebilehed discoverable: Tõsta postitused ja profiil avastamise algoritmides esile fields: name: Nimetus diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index fdaa156e5d6265..6121467768445f 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -3,7 +3,6 @@ fa: simple_form: hints: account: - attribution_domains_as_text: محافظت از اعتباردهی‌های اشتباه. discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. display_name: نام کامل یا باحالتان. fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. @@ -123,7 +122,6 @@ fa: url: جایی که رویدادها فرستاده می‌شوند labels: account: - attribution_domains_as_text: اجازه فقط به پایگاه‌های وب خاص discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف fields: name: برچسب diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 5c85367dbb7906..8c914295fee3d4 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,7 +3,7 @@ fi: simple_form: hints: account: - attribution_domains_as_text: Suojaa vääriltä tunnustuksilta. + attribution_domains_as_text: Yksi riviä kohti. Suojaa vääriltä tunnustuksilta. discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa. @@ -144,7 +144,7 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - attribution_domains_as_text: Salli vain tietyt verkkosivustot + attribution_domains_as_text: Verkkosivustot, jotka voivat antaa sinulle tunnustusta discoverable: Pidä profiiliasi ja julkaisujasi esillä löytämisalgoritmeissa fields: name: Nimike diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index afcd3b39accfe2..e45183df99c1a8 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -3,7 +3,7 @@ fo: simple_form: hints: account: - attribution_domains_as_text: Verjir fyri følskum ískoytum. + attribution_domains_as_text: Eitt á hvørja reglu. Tað verjir fyri skeivum tilsipingum. discoverable: Tínir almennu postar og tín vangi kunnu vera drigin fram og viðmæld ymsa staðni í Mastodon og vangin hjá tær kann vera viðmæltur øðrum brúkarum. display_name: Títt fulla navn og títt stuttliga navn. fields: Heimasíðan hjá tær, fornøvn, aldur ella hvat tú vil. @@ -144,7 +144,7 @@ fo: url: Hvar hendingar verða sendar til labels: account: - attribution_domains_as_text: Loyv einans ávísum heimasíðum + attribution_domains_as_text: Heimasíður, sum hava loyvi at sipa til tín discoverable: Framheva vanga og postar í uppdagingar-algoritmum fields: name: Spjaldur diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index 90a268f411bd0c..d2ce30ec8e3df8 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -3,7 +3,6 @@ fr-CA: simple_form: hints: account: - attribution_domains_as_text: Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom cool. fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez. @@ -144,7 +143,6 @@ fr-CA: url: Là où les événements seront envoyés labels: account: - attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 370f5c1e46e058..626032600aaacc 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -3,7 +3,6 @@ fr: simple_form: hints: account: - attribution_domains_as_text: Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom rigolo. fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez. @@ -144,7 +143,6 @@ fr: url: Là où les événements seront envoyés labels: account: - attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index 11b56bd50dfbae..8a753dcc898d51 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -3,7 +3,6 @@ fy: simple_form: hints: account: - attribution_domains_as_text: Beskermet tsjin net korrekte attribúsjes. discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers. display_name: Jo folsleine namme of in aardige bynamme. fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle. @@ -144,7 +143,6 @@ fy: url: Wêr’t eveneminten nei ta stjoerd wurde labels: account: - attribution_domains_as_text: Allinnich bepaalde websites tastean discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte fields: name: Label diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 772f996ca6c92c..7c125b165a0cd4 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,7 +3,6 @@ ga: simple_form: hints: account: - attribution_domains_as_text: Cosnaíonn sé ó sannadh bréagach. discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile. display_name: D'ainm iomlán nó d'ainm spraoi. fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat. @@ -144,7 +143,6 @@ ga: url: An áit a seolfar imeachtaí chuig labels: account: - attribution_domains_as_text: Ná ceadaigh ach láithreáin ghréasáin ar leith discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana fields: name: Lipéad diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index de585c7a218ac5..9b6c156de79c94 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -3,7 +3,6 @@ gd: simple_form: hints: account: - attribution_domains_as_text: Dìonadh seo o bhuaidh-aithrisean cearra. discoverable: Dh’fhaoidte gun dèid na postaichean poblach ’s a’ phròifil agad a bhrosnachadh no a mholadh ann an caochladh roinnean de Mhastodon agus gun dèid a’ phròifil agad a mholadh do chàch. display_name: D’ ainm slàn no spòrsail. fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu. @@ -144,7 +143,6 @@ gd: url: Far an dèid na tachartasan a chur labels: account: - attribution_domains_as_text: Na ceadaich ach làraichean-lìnn sònraichte discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh fields: name: Leubail diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index cddeae5cee5dd7..b29a071e800519 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -3,7 +3,7 @@ gl: simple_form: hints: account: - attribution_domains_as_text: Protéxete de falsas atribucións. + attribution_domains_as_text: Un por liña. Protéxete das atribucións falsas. discoverable: As túas publicacións públicas e perfil poden mostrarse ou recomendarse en varias zonas de Mastodon e o teu perfil ser suxerido a outras usuarias. display_name: O teu nome completo ou un nome divertido. fields: Páxina web, pronome, idade, o que ti queiras. @@ -144,7 +144,7 @@ gl: url: A onde se enviarán os eventos labels: account: - attribution_domains_as_text: Permitir só os sitios web indicados + attribution_domains_as_text: Sitios web que poden acreditarte discoverable: Perfil destacado e publicacións nos algoritmos de descubrimento fields: name: Etiqueta diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 1feebb0d69ae11..d8d6af5e99ab60 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -3,7 +3,7 @@ he: simple_form: hints: account: - attribution_domains_as_text: הגנה מייחוסים שקריים. + attribution_domains_as_text: אחד בכל שורה. יגן מפני יחוס מטעה. discoverable: הפוסטים והפרופיל שלך עשויים להיות מוצגים או מומלצים באזורים שונים באתר וייתכן שהפרופיל שלך יוצע למשתמשים אחרים. display_name: שמך המלא או שם הכיף שלך. fields: עמוד הבית שלך, לשון הפנייה, גיל, וכל מידע אחר לפי העדפתך האישית. @@ -144,7 +144,7 @@ he: url: היעד שאליו יישלחו אירועים labels: account: - attribution_domains_as_text: רק אתרים מסויימים יאושרו + attribution_domains_as_text: אתרים המורשים לייחס אליך מאמרים discoverable: הצג משתמש ופוסטים בעמוד התגליות fields: name: תווית diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 383bdd076054b7..545fd4a8e91fd0 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -3,7 +3,6 @@ hu: simple_form: hints: account: - attribution_domains_as_text: Megvéd a hamis forrásmegjelölésektől. discoverable: A nyilvános bejegyzéseid és a profilod kiemelhető vagy ajánlható a Mastodon különböző területein, a profilod más felhasználóknak is javasolható. display_name: Teljes neved vagy vicces neved. fields: Weboldalad, megszólításaid, korod, bármi, amit szeretnél. @@ -144,7 +143,6 @@ hu: url: Ahová az eseményket küldjük labels: account: - attribution_domains_as_text: Csak meghatározott weboldalak engedélyezése discoverable: Profil és bejegyzések szerepeltetése a felfedezési algoritmusokban fields: name: Címke diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index dc5aad57ae3957..85fa74f1edd960 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -142,7 +142,6 @@ ia: url: Ubi le eventos essera inviate labels: account: - attribution_domains_as_text: Solmente permitter sitos web specific discoverable: Evidentiar le profilo e messages in le algorithmos de discoperta fields: name: Etiquetta diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 5cbbd9d06e90e3..1df50081951292 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -3,7 +3,6 @@ io: simple_form: hints: account: - attribution_domains_as_text: Protektas de falsa akreditaji. discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. display_name: Vua tota nomo o vua gaya nomo. fields: Vua retsituo, pronomi, evo, irgo quan vu volas. @@ -144,7 +143,6 @@ io: url: Ibe eventi sendesos labels: account: - attribution_domains_as_text: Nur permisas specifika retsitui discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 6f3a4fe8a561ed..40ae267a064186 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -3,7 +3,7 @@ is: simple_form: hints: account: - attribution_domains_as_text: Ver fyrir fölskum tilvísunum í höfunda. + attribution_domains_as_text: Eitt á hverja línu. Ver fyrir röngum tilvísunum. discoverable: Opinberar færslur og notandasnið þitt geta birst eða verið mælt með á hinum ýmsu svæðum í Mastodon auk þess sem hægt er að mæla með þér við aðra notendur. display_name: Fullt nafn þitt eða eitthvað til gamans. fields: Heimasíðan þín, fornöfn, aldur eða eitthvað sem þú vilt koma á framfæri. @@ -144,7 +144,7 @@ is: url: Hvert atburðir verða sendir labels: account: - attribution_domains_as_text: Einungis leyfa tiltekin vefsvæði + attribution_domains_as_text: Vefsvæði sem mega vitna í þig discoverable: Hafa notandasnið og færslur með í reikniritum leitar fields: name: Skýring diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 7ed4c0d004c6b6..c36fce36f74930 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -3,7 +3,7 @@ it: simple_form: hints: account: - attribution_domains_as_text: Protegge da false attribuzioni. + attribution_domains_as_text: Uno per riga. Protegge da false attribuzioni. discoverable: I tuoi post pubblici e il tuo profilo potrebbero essere presenti o consigliati in varie aree di Mastodon e il tuo profilo potrebbe essere suggerito ad altri utenti. display_name: Il tuo nome completo o il tuo soprannome. fields: La tua homepage, i pronomi, l'età, tutto quello che vuoi. @@ -144,7 +144,7 @@ it: url: Dove gli eventi saranno inviati labels: account: - attribution_domains_as_text: Consenti solo siti web specifici + attribution_domains_as_text: Siti web autorizzati ad accreditarti discoverable: Include il profilo e i post negli algoritmi di scoperta fields: name: Etichetta diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 809d2eaa9a3acc..6ce16b64480153 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -3,7 +3,6 @@ ja: simple_form: hints: account: - attribution_domains_as_text: 誤った帰属から保護します。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 display_name: フルネーム、ハンドルネームなど fields: ホームページ、代名詞、年齢など何でも構いません。 @@ -144,7 +143,6 @@ ja: url: イベントの送信先 labels: account: - attribution_domains_as_text: 特定のウェブサイトのみを許可します discoverable: アカウントを見つけやすくする fields: name: ラベル diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index a649b4ec5a90df..fee07fa5e0ff66 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -3,7 +3,6 @@ ko: simple_form: hints: account: - attribution_domains_as_text: 가짜 기여로부터 보호합니다. discoverable: 내 공개 게시물과 프로필이 마스토돈의 다양한 추천 기능에 나타날 수 있고 프로필이 다른 사용자에게 제안될 수 있습니다 display_name: 진짜 이름 또는 재미난 이름. fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들. @@ -144,7 +143,6 @@ ko: url: 이벤트가 어디로 전송될 지 labels: account: - attribution_domains_as_text: 특정 웹사이트만 허용하기 discoverable: 발견하기 알고리즘에 프로필과 게시물을 추천하기 fields: name: 라벨 diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 5d3a02993bb319..de3dd2f31c64e0 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -3,7 +3,7 @@ lt: simple_form: hints: account: - attribution_domains_as_text: Apsaugo nuo klaidingų atributų. + attribution_domains_as_text: Po vieną eilutėje. Apsaugo nuo klaidingų atributų. discoverable: Tavo vieši įrašai ir profilis gali būti rodomi arba rekomenduojami įvairiose Mastodon vietose, o profilis gali būti siūlomas kitiems naudotojams. display_name: Tavo pilnas vardas arba smagus vardas. fields: Tavo pagrindinis puslapis, įvardžiai, amžius, bet kas, ko tik nori. @@ -107,7 +107,7 @@ lt: role: Vaidmuo valdo, kokius leidimus naudotojas turi. labels: account: - attribution_domains_as_text: Leisti tik konkrečias svetaines + attribution_domains_as_text: Svetainės, kuriuose leidžiama jus nurodyti discoverable: Rekomenduoti profilį ir įrašus į atradimo algoritmus indexable: Įtraukti viešus įrašus į paieškos rezultatus show_collections: Rodyti sekimus ir sekėjus profilyje diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 523e9a5fccd3ad..4303ba9b41458a 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -3,7 +3,6 @@ lv: simple_form: hints: account: - attribution_domains_as_text: Aizsargā no nepatiesa attiecinājuma. discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. @@ -144,7 +143,6 @@ lv: url: Kur notikumi tiks nosūtīti labels: account: - attribution_domains_as_text: Ļaut tikai noteiktas tīmekļvietnes discoverable: Funkcijas profils un ziņas atklāšanas algoritmos fields: name: Marķējums diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index bf30cdb1bffccd..afd3624785a5aa 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -3,7 +3,7 @@ nl: simple_form: hints: account: - attribution_domains_as_text: Beschermt tegen onjuiste attributies. + attribution_domains_as_text: Eén per regel. Beschermt tegen valse attribueringen. discoverable: Jouw openbare berichten kunnen worden uitgelicht op verschillende plekken binnen Mastodon en jouw account kan worden aanbevolen aan andere gebruikers. display_name: Jouw volledige naam of een leuke bijnaam. fields: Jouw website, persoonlijke voornaamwoorden, leeftijd, alles wat je maar kwijt wilt. @@ -144,7 +144,7 @@ nl: url: Waar gebeurtenissen naartoe worden verzonden labels: account: - attribution_domains_as_text: Alleen bepaalde websites toestaan + attribution_domains_as_text: Websites doe jou credit mogen geven discoverable: Jouw account en berichten laten uitlichten door Mastodon fields: name: Label diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 271c384391e5ac..f963d3bc72d196 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -3,7 +3,6 @@ nn: simple_form: hints: account: - attribution_domains_as_text: Vernar mot falske krediteringar. discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk. display_name: Ditt fulle namn eller ditt tøysenamn. fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. @@ -144,7 +143,6 @@ nn: url: Kvar hendingar skal sendast labels: account: - attribution_domains_as_text: Tillat berre visse nettstader discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar fields: name: Merkelapp diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index bb404e56c93320..c5ff55c15de10f 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -3,7 +3,7 @@ pl: simple_form: hints: account: - attribution_domains_as_text: Chroni przed fałszywym przypisaniem wpisów. + attribution_domains_as_text: Jedna na linię. Chroni przed fałszywym przypisaniem wpisów. discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom. display_name: Twoje imię lub pseudonim. fields: Co ci się tylko podoba – twoja strona domowa, zaimki, wiek… @@ -144,7 +144,7 @@ pl: url: Dokąd będą wysłane zdarzenia labels: account: - attribution_domains_as_text: Zezwól tylko na konkretne strony + attribution_domains_as_text: Strony które mogą ci przypisywać autorstwo. discoverable: Udostępniaj profil i wpisy funkcjom odkrywania fields: name: Nazwa diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 96bc219e8eb24a..16d7cfe4458bf9 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -3,7 +3,7 @@ pt-BR: simple_form: hints: account: - attribution_domains_as_text: Protege de atribuições falsas. + attribution_domains_as_text: Um por linha. Protege de falsas atribuições. discoverable: Suas publicações e perfil públicos podem ser destaques ou recomendados em várias áreas de Mastodon, e seu perfil pode ser sugerido a outros usuários. display_name: Seu nome completo ou apelido. fields: Sua página inicial, pronomes, idade ou qualquer coisa que quiser. @@ -144,7 +144,7 @@ pt-BR: url: Aonde os eventos serão enviados labels: account: - attribution_domains_as_text: Permitir apenas sites específicos + attribution_domains_as_text: Sites permitidos para credenciar você discoverable: Destacar perfil e publicações nos algoritmos de descoberta fields: name: Rótulo diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 3ff746451b3279..1bdffc6f1d5634 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -3,7 +3,6 @@ ru: simple_form: hints: account: - attribution_domains_as_text: Защищает от ложных атрибуций. discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям. display_name: Ваше полное имя или псевдоним. fields: Ваша домашняя страница, местоимения, возраст - все, что угодно. @@ -144,7 +143,6 @@ ru: url: Куда события будут отправляться labels: account: - attribution_domains_as_text: Разрешить только определенные сайты discoverable: Профиль и сообщения в алгоритмах обнаружения fields: name: Пункт diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 169f4a02dee4c5..3d865572824706 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -3,7 +3,6 @@ sq: simple_form: hints: account: - attribution_domains_as_text: Mbron nga atribuime të rreme. discoverable: Postimet dhe profili juaj publik mund të shfaqen, ose rekomandohen në zona të ndryshme të Mastodon-it dhe profili juaj mund të sugjerohet përdoruesve të tjerë. display_name: Emri juaj i plotë, ose emri juaj lojcak. fields: Faqja juaj hyrëse, përemra, moshë, ç’të keni qejf. @@ -144,7 +143,6 @@ sq: url: Ku do të dërgohen aktet labels: account: - attribution_domains_as_text: Lejo vetëm sajte specifikë discoverable: Profilin dhe postimet bëji objekt të algoritmeve të zbulimit fields: name: Etiketë diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index c588c9c0718996..297e96a2bdf125 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -3,7 +3,6 @@ sv: simple_form: hints: account: - attribution_domains_as_text: Skyddar mot falska attributioner. discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare. display_name: Ditt fullständiga namn eller ditt roliga namn. fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill. @@ -144,7 +143,6 @@ sv: url: Dit händelser kommer skickas labels: account: - attribution_domains_as_text: Tillåt endast specifika webbplatser discoverable: Presentera profil och inlägg med upptäcktsalgoritmer fields: name: Etikett diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 1ecd672a97a14c..8bd782c1405d32 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -3,7 +3,6 @@ th: simple_form: hints: account: - attribution_domains_as_text: ปกป้องจากการระบุแหล่งที่มาที่ผิด discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ @@ -144,7 +143,6 @@ th: url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: - attribution_domains_as_text: อนุญาตเฉพาะเว็บไซต์ที่เฉพาะเจาะจงเท่านั้น discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ fields: name: ป้ายชื่อ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index d90b97bf9b2e61..5aed566626d6d1 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -3,7 +3,7 @@ tr: simple_form: hints: account: - attribution_domains_as_text: Sahte atıflardan korur. + attribution_domains_as_text: Her satırda bir tanesi. Sahte atıflardan korur. discoverable: Herkese açık gönderileriniz ve profiliniz Mastodon'un çeşitli kısımlarında öne çıkarılabilir veya önerilebilir ve profiliniz başka kullanıcılara önerilebilir. display_name: Tam adınız veya kullanıcı adınız. fields: Ana sayfanız, zamirleriniz, yaşınız, istediğiniz herhangi bir şey. @@ -144,7 +144,7 @@ tr: url: Olayların gönderileceği yer labels: account: - attribution_domains_as_text: Yalnızca belirli websitelerine izin ver + attribution_domains_as_text: Size atıf verebilecek websiteleri discoverable: Profil ve gönderileri keşif algoritmalarında kullan fields: name: Etiket diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index b584a6cada12af..e2a1562b53499e 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -3,7 +3,6 @@ uk: simple_form: hints: account: - attribution_domains_as_text: Захищає від фальшивих атрибутів. discoverable: Ваші дописи та профіль можуть бути рекомендовані в різних частинах Mastodon і ваш профіль може бути запропонований іншим користувачам. display_name: Ваше повне ім'я або ваш псевдонім. fields: Ваша домашня сторінка, займенники, вік, все, що вам заманеться. @@ -144,7 +143,6 @@ uk: url: Куди надсилатимуться події labels: account: - attribution_domains_as_text: Дозволити лише на певних вебсайтах discoverable: Функції профілю та дописів у алгоритмах виявлення fields: name: Мітка diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 8330ec3de452a6..2b1d84f595ec58 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -3,7 +3,7 @@ vi: simple_form: hints: account: - attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai. + attribution_domains_as_text: Mỗi cái một dòng. Bảo vệ khỏi những sự gán ghép sai. discoverable: Hồ sơ và tút công khai của bạn được đề xuất cho những người dùng Mastodon khác. display_name: Tên đầy đủ hoặc biệt danh đều được. fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. @@ -144,7 +144,7 @@ vi: url: Nơi những sự kiện được gửi đến labels: account: - attribution_domains_as_text: Chỉ cho phép các website đặc biệt + attribution_domains_as_text: Các trang web được ghi nhận cho bạn discoverable: Cho phép khám phá hồ sơ fields: name: Nhãn diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 419cb99abb5974..6586c372efd238 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -3,7 +3,7 @@ zh-CN: simple_form: hints: account: - attribution_domains_as_text: 保护作品免受虚假署名。 + attribution_domains_as_text: 每行一个域名。这样就可以保护作品免受虚假署名。 discoverable: 您的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,您的个人资料可能会被推荐给其他用户。 display_name: 你的全名或昵称。 fields: 你的主页、人称代词、年龄,以及任何你想要添加的内容。 @@ -144,7 +144,7 @@ zh-CN: url: 事件将被发往的目的地 labels: account: - attribution_domains_as_text: 仅允许特定网站 + attribution_domains_as_text: 授权展示你的署名的网站 discoverable: 在发现算法中展示你的个人资料和嘟文 fields: name: 标签 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index a5bc6836348ef1..289a24f122c130 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -3,7 +3,7 @@ zh-TW: simple_form: hints: account: - attribution_domains_as_text: 偽造署名保護。 + attribution_domains_as_text: 每行一個。以保護偽造署名。 discoverable: 公開嘟文及個人檔案可能於各 Mastodon 功能中被推薦,並且您的個人檔案可能被推薦至其他使用者。 display_name: 完整名稱或暱稱。 fields: 烘培雞、自我認同代稱、年齡,及任何您想分享的。 @@ -144,7 +144,7 @@ zh-TW: url: 事件會被傳送至何處 labels: account: - attribution_domains_as_text: 僅允許特定網站 + attribution_domains_as_text: 允許對您予與信譽之網站 discoverable: 於探索演算法中推薦個人檔案及嘟文 fields: name: 標籤 diff --git a/config/locales/sq.yml b/config/locales/sq.yml index fdeb959f88db8f..c113308eea9b70 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1159,7 +1159,6 @@ sq: use_security_key: Përdor kyç sigurie author_attribution: example_title: Tekst shembull - hint_html: Kontrolloni se si vlerësoheni, kur ndahen lidhje me të tjerë në Mastodon. more_from_html: Më tepër nga %{name} s_blog: Blogu i %{name} title: Atribuim autorësh diff --git a/config/locales/th.yml b/config/locales/th.yml index dd57a8df7f5ee2..2c21687a460bd0 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1148,7 +1148,6 @@ th: use_security_key: ใช้กุญแจความปลอดภัย author_attribution: example_title: ข้อความตัวอย่าง - hint_html: ควบคุมวิธีที่ให้เครดิตแก่คุณเมื่อมีการแบ่งปันลิงก์ใน Mastodon more_from_html: เพิ่มเติมจาก %{name} s_blog: บล็อกของ %{name} title: การระบุแหล่งที่มาผู้สร้าง diff --git a/config/locales/tr.yml b/config/locales/tr.yml index ee74f237ee4266..942ee2fbf29b40 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1166,9 +1166,11 @@ tr: use_security_key: Güvenlik anahtarını kullan author_attribution: example_title: Örnek metin - hint_html: Mastodon'da bağlantılar paylaşıldığında nasıl tanınmak istediğinizi denetleyin. + hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin. + instructions: 'Bu kodun yazınızın HTML''sinde olduğundan emin olun:' more_from_html: "%{name} kişisinden daha fazlası" s_blog: "%{name} kişisinin Günlüğü" + then_instructions: Daha sonra, yayının alan adını aşağıda sahaya girin. title: Yazar atıfı challenge: confirm: Devam et diff --git a/config/locales/uk.yml b/config/locales/uk.yml index dec4299fb9fbc7..ab50ac4deea134 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1202,9 +1202,9 @@ uk: use_security_key: Використовувати ключ безпеки author_attribution: example_title: Зразок тексту - hint_html: Контроль авторства поширених посилань на Mastodon. more_from_html: Більше від %{name} s_blog: Блог %{name} + then_instructions: Потім додайте доменне ім'я публікації у поле нижче. title: Атрибути авторства challenge: confirm: Далі diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 097e573efaa584..00431ba4250662 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1148,9 +1148,11 @@ vi: use_security_key: Dùng khóa bảo mật author_attribution: example_title: Văn bản mẫu - hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon. + hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bạn được ghi nhận khi chúng được chia sẻ trên Mastodon. + instructions: 'Đặt mã này trong HTML bài viết:' more_from_html: Viết bởi %{name} s_blog: "%{name}'s Blog" + then_instructions: Sau đó, thêm URL của báo/blog trong trường bên dưới. title: Ghi nhận người đăng challenge: confirm: Tiếp tục diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 025bc2b6dd100d..209683e21cf32b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1148,9 +1148,11 @@ zh-CN: use_security_key: 使用安全密钥 author_attribution: example_title: 示例文本 - hint_html: 控制在 Mastodon 上分享的链接如何显示你的署名。 + hint_html: 你是否在 Mastodon 之外撰写新闻或博客文章?控制它们被分享到 Mastodon 时的署名方式。 + instructions: 请确保将这段代码放在您文章的 HTML 中: more_from_html: 来自 %{name} 的更多内容 s_blog: "%{name} 的博客" + then_instructions: 然后,在下面的文本框中添加你用于发布文章的域名。 title: 作者归属 challenge: confirm: 继续 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index c461aabcdc787e..d8fef10816d145 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1150,9 +1150,11 @@ zh-TW: use_security_key: 使用安全金鑰 author_attribution: example_title: 範例文字 - hint_html: 控制如何於 Mastodon 上分享連結時註明您的貢獻。 + hint_html: 您是否正於 Mastodon 之外撰寫新聞或部落格文章?控制當它們於 Mastodon 上分享時您如何獲得信譽。 + instructions: 確認您文章 HTML 內容中包含此份程式碼: more_from_html: 來自 %{name} 之更多內容 s_blog: "%{name} 的部落格" + then_instructions: 接著,將發表處網域加入以下欄位中。 title: 作者署名 challenge: confirm: 繼續 From 2391937e11d2dd1ce4da9073511ee0f85a3f63f9 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 18 Oct 2024 12:21:25 +0200 Subject: [PATCH 320/467] Fix follow recommendation moderation page default language when using regional variant (#32580) --- app/models/follow_recommendation_filter.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/models/follow_recommendation_filter.rb b/app/models/follow_recommendation_filter.rb index 62a02eba5ae5c5..f3b0fd319bec2e 100644 --- a/app/models/follow_recommendation_filter.rb +++ b/app/models/follow_recommendation_filter.rb @@ -11,7 +11,7 @@ class FollowRecommendationFilter attr_reader :params, :language def initialize(params) - @language = params.delete('language') || I18n.locale + @language = usable_language(params.delete('language') || I18n.locale) @params = params end @@ -22,4 +22,15 @@ def results Account.includes(:account_stat).joins(:follow_recommendation).merge(FollowRecommendation.localized(@language).order(rank: :desc)) end end + + private + + def usable_language(locale) + return locale if Trends.available_locales.include?(locale) + + locale = locale.to_s.split(/[_-]/).first + return locale if Trends.available_locales.include?(locale) + + nil + end end From 1fc165de02d79294c8a218f5fa82bcd477484ca1 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 18 Oct 2024 12:51:05 +0200 Subject: [PATCH 321/467] Remove ability to get embed code for remote posts (#32578) --- app/javascript/mastodon/components/status_action_bar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 75531abf568cf7..94cd7e3e077178 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -264,7 +264,7 @@ class StatusActionBar extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.share), action: this.handleShareClick }); } - if (publicStatus && (signedIn || !isRemote)) { + if (publicStatus && !isRemote) { menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed }); } From fb6d7ed4752ec94ce414de6e78cdaf3f7515f9e9 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Mon, 21 Oct 2024 09:08:18 +0200 Subject: [PATCH 322/467] Replace `execCommand` for copying text with the modern `clipboard` API (#32598) --- app/javascript/entrypoints/public.tsx | 35 +++++++++++---------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index d33e00d5da88ce..c1e8418014af41 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -327,31 +327,24 @@ Rails.delegate(document, '.input-copy button', 'click', ({ target }) => { if (!input) return; - const oldReadOnly = input.readOnly; - - input.readOnly = false; - input.focus(); - input.select(); - input.setSelectionRange(0, input.value.length); - - try { - if (document.execCommand('copy')) { - input.blur(); - + navigator.clipboard + .writeText(input.value) + .then(() => { const parent = target.parentElement; - if (!parent) return; - parent.classList.add('copied'); + if (parent) { + parent.classList.add('copied'); - setTimeout(() => { - parent.classList.remove('copied'); - }, 700); - } - } catch (err) { - console.error(err); - } + setTimeout(() => { + parent.classList.remove('copied'); + }, 700); + } - input.readOnly = oldReadOnly; + return true; + }) + .catch((error: unknown) => { + console.error(error); + }); }); const toggleSidebar = () => { From 52af99ce778495cf843be8fdf4de7e9a5f393889 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:27:09 +0200 Subject: [PATCH 323/467] Update dependency libvips to v8.15.5 (#32596) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a5e35025ae2f6f..bb29ad21fa05ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -191,7 +191,7 @@ FROM build AS libvips # libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"] # renovate: datasource=github-releases depName=libvips packageName=libvips/libvips -ARG VIPS_VERSION=8.15.3 +ARG VIPS_VERSION=8.15.5 # libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"] ARG VIPS_URL=https://github.com/libvips/libvips/releases/download From a19a120769ee5a20851aaca42b98c96e9d659b78 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:27:27 +0200 Subject: [PATCH 324/467] Update DefinitelyTyped types (non-major) (#32278) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2e1ad6ade64be6..a4d65ef53e7637 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3756,9 +3756,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.9 - resolution: "@types/lodash@npm:4.17.9" - checksum: 10c0/54de935e835508b5f835a5dfaedd2b9a299685a21d11e9c5cd2dde57331d03bc2f98b71d2424ca8460f447ecd55a673e45ccdb70e58f9f72745710f6b91abc60 + version: 4.17.12 + resolution: "@types/lodash@npm:4.17.12" + checksum: 10c0/106008f628ea3c74ed7ee7842dee79e230c84e3721ac38c293700031adb5bd130113048c22f476dbde0d0c119506b0fc447d4bd62eca922682d11e00e1377967 languageName: node linkType: hard @@ -3883,11 +3883,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.2.4": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" + version: 18.3.1 + resolution: "@types/react-dom@npm:18.3.1" dependencies: "@types/react": "npm:*" - checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b + checksum: 10c0/8b416551c60bb6bd8ec10e198c957910cfb271bc3922463040b0d57cf4739cdcd24b13224f8d68f10318926e1ec3cd69af0af79f0291b599a992f8c80d47f1eb languageName: node linkType: hard From 8e39cc921877fde1aab24c872125767b0a85cae6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:28:01 +0200 Subject: [PATCH 325/467] Update Yarn to v4.5.1 (#32586) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 24770e6d254d2f..a37b766ef0057e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.5.0", + "packageManager": "yarn@4.5.1", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index d573c9b2845139..585c4be4e1b233 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.5.0", + "packageManager": "yarn@4.5.1", "engines": { "node": ">=18" }, From 35da47c857ccf6c3aee27af6d2ce9a402dbc3a3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 07:28:35 +0000 Subject: [PATCH 326/467] Update devDependencies (non-major) (#32603) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index a4d65ef53e7637..e7c733ded1d4b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2196,8 +2196,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.15 - resolution: "@formatjs/cli@npm:6.2.15" + version: 6.3.0 + resolution: "@formatjs/cli@npm:6.3.0" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2226,7 +2226,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/e947aa7f3994251392fe15673752a8d8e3c8a30733bb49de5e617d45a327a3e1d16419e2d6b01f7ef2cbe86e2946024342d5b3301e6a8f17de3de9e2e7aedb29 + checksum: 10c0/9a803eacbcf2060c8b3cedcf9eef1300df73722eeadaebf7282ff0e9cc41bdcb98d60cea46c297fb9060a07ccd56d44f70247d659827086a55a1d0787e6bd545 languageName: node linkType: hard @@ -3425,8 +3425,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.5.0 - resolution: "@testing-library/jest-dom@npm:6.5.0" + version: 6.6.2 + resolution: "@testing-library/jest-dom@npm:6.6.2" dependencies: "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" @@ -3435,7 +3435,7 @@ __metadata: dom-accessibility-api: "npm:^0.6.3" lodash: "npm:^4.17.21" redent: "npm:^3.0.0" - checksum: 10c0/fd5936a547f04608d8de15a7de3ae26516f21023f8f45169b10c8c8847015fd20ec259b7309f08aa1031bcbc37c6e5e6f532d1bb85ef8f91bad654193ec66a4c + checksum: 10c0/1c51390f97063ce8b06a7267534aac0d6ac9b1f27042a0ae43ca52d886b32c9d2b0ff85e62e7cfeb7e1f089ef03c4d75fda4f2b7b1f08afb4bdb09a5d56566d9 languageName: node linkType: hard @@ -13220,7 +13220,7 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": +"pino-abstract-transport@npm:^1.2.0": version: 1.2.0 resolution: "pino-abstract-transport@npm:1.2.0" dependencies: @@ -13230,6 +13230,15 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: "npm:^4.0.0" + checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f + languageName: node + linkType: hard + "pino-http@npm:^10.0.0": version: 10.3.0 resolution: "pino-http@npm:10.3.0" @@ -13243,8 +13252,8 @@ __metadata: linkType: hard "pino-pretty@npm:^11.0.0": - version: 11.2.2 - resolution: "pino-pretty@npm:11.2.2" + version: 11.3.0 + resolution: "pino-pretty@npm:11.3.0" dependencies: colorette: "npm:^2.0.7" dateformat: "npm:^4.6.3" @@ -13254,7 +13263,7 @@ __metadata: joycon: "npm:^3.1.1" minimist: "npm:^1.2.6" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.0.0" + pino-abstract-transport: "npm:^2.0.0" pump: "npm:^3.0.0" readable-stream: "npm:^4.0.0" secure-json-parse: "npm:^2.4.0" @@ -13262,7 +13271,7 @@ __metadata: strip-json-comments: "npm:^3.1.1" bin: pino-pretty: bin.js - checksum: 10c0/3ce1769907886a5584f6c8123d9bc987712ad10a375797733a0fe95a238df587dac8e2b709bab291c4e30d41b0cf65808c708c96f8eb98b2778b6df60afa7e66 + checksum: 10c0/8e4d842bfce5fa3fc69d3a6adb1bca873051e000f0fb4879ae1cc5d1410387b2464a7208f6ecc70ec49bb149a9617ec233cb3ec7a5f017ec141cb482d79917c2 languageName: node linkType: hard From 2e0bb35cf70c903467b1daf2fee7f6e718f5871c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:29:09 +0200 Subject: [PATCH 327/467] Update dependency brakeman to v6.2.2 (#32587) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d1ee8e0fa8eacd..264f49a37c7de0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -137,7 +137,7 @@ GEM blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) - brakeman (6.2.1) + brakeman (6.2.2) racc browser (5.3.1) brpoplpush-redis_script (0.1.3) From 650f224328bd1e1e1da9616776b96a894860be7f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 07:29:32 +0000 Subject: [PATCH 328/467] Update dependency faker to v3.5.1 (#32588) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 264f49a37c7de0..40db30cb52eedf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -233,7 +233,7 @@ GEM tzinfo excon (0.111.0) fabrication (2.31.0) - faker (3.4.2) + faker (3.5.1) i18n (>= 1.8.11, < 2) faraday (1.10.3) faraday-em_http (~> 1.0) From 4a65fa74fa1b9ce81563c4f63651aa7d86dbced8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 07:29:51 +0000 Subject: [PATCH 329/467] Update dependency aws-sdk-s3 to v1.169.0 (#32552) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 40db30cb52eedf..e437760ed1f16c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,17 +100,17 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.983.0) - aws-sdk-core (3.209.1) + aws-partitions (1.992.0) + aws-sdk-core (3.210.0) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) + aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.94.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-kms (1.95.0) + aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.167.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-s3 (1.169.0) + aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.10.0) From 11a63b2db6146a5bc4d85b5c1b56ccd932a212ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:03:44 +0200 Subject: [PATCH 330/467] Update eslint (non-major) (#32279) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renaud Chaput --- app/javascript/mastodon/components/button.tsx | 2 +- .../mastodon/components/short_number.tsx | 1 + .../components/notification_follow.tsx | 2 + .../notification_group_with_status.tsx | 1 + yarn.lock | 296 ++++++++---------- 5 files changed, 127 insertions(+), 175 deletions(-) diff --git a/app/javascript/mastodon/components/button.tsx b/app/javascript/mastodon/components/button.tsx index 3e720f7ceead2a..b349a83f2bbed2 100644 --- a/app/javascript/mastodon/components/button.tsx +++ b/app/javascript/mastodon/components/button.tsx @@ -1,4 +1,4 @@ -import type { PropsWithChildren } from 'react'; +import type { PropsWithChildren, JSX } from 'react'; import { useCallback } from 'react'; import classNames from 'classnames'; diff --git a/app/javascript/mastodon/components/short_number.tsx b/app/javascript/mastodon/components/short_number.tsx index a0b523aaadc920..37201a5e1d7126 100644 --- a/app/javascript/mastodon/components/short_number.tsx +++ b/app/javascript/mastodon/components/short_number.tsx @@ -1,4 +1,5 @@ import { memo } from 'react'; +import type { JSX } from 'react'; import { FormattedMessage, FormattedNumber } from 'react-intl'; diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx index 2c90777b9f62a4..78ba260fa9e38f 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx @@ -1,3 +1,5 @@ +import type { JSX } from 'react'; + import { FormattedMessage } from 'react-intl'; import { Link } from 'react-router-dom'; diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_group_with_status.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_group_with_status.tsx index 91f8ae2d401bdc..861556620fac5a 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_group_with_status.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_group_with_status.tsx @@ -1,4 +1,5 @@ import { useMemo } from 'react'; +import type { JSX } from 'react'; import classNames from 'classnames'; diff --git a/yarn.lock b/yarn.lock index e7c733ded1d4b0..97177407125be2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2116,14 +2116,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.48.0": - version: 0.48.0 - resolution: "@es-joy/jsdoccomment@npm:0.48.0" +"@es-joy/jsdoccomment@npm:~0.49.0": + version: 0.49.0 + resolution: "@es-joy/jsdoccomment@npm:0.49.0" dependencies: comment-parser: "npm:1.4.1" esquery: "npm:^1.6.0" jsdoc-type-pratt-parser: "npm:~4.1.0" - checksum: 10c0/8d87c7c0426fade009c30ab429d4ede53fd253d40b55079c02bdacdaa4c0fe904aaea5e3084cd98052f2bed6b3030c381d84f4a3251b343a71fee6f681a08bee + checksum: 10c0/16717507d557d37e7b59456fedeefbe0a3bc93aa2d9c043d5db91e24e076509b6fcb10ee6fd1dafcb0c5bbe50ae329b45de5b83541cb5994a98c9e862a45641e languageName: node linkType: hard @@ -2162,10 +2162,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard @@ -2436,14 +2436,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" + "@humanwhocodes/object-schema": "npm:^2.0.3" debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e languageName: node linkType: hard @@ -2454,10 +2454,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.2 - resolution: "@humanwhocodes/object-schema@npm:2.0.2" - checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c languageName: node linkType: hard @@ -4170,14 +4170,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^8.0.0": - version: 8.1.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.1.0" + version: 8.10.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.10.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/type-utils": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/type-utils": "npm:8.10.0" + "@typescript-eslint/utils": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -4188,25 +4188,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/7bbeae588f859b59c34d6a76cac06ef0fa605921b40c5d3b65b94829984280ea84c4dd3f5cb9ce2eb326f5563e9abb4c90ebff05c47f83f4def296c2ea1fa86c + checksum: 10c0/4b77ba9c865a2a14e238cd330b5901f0274b8ce1c13324fccd0339b8eea82a50a4709394c903fd8cd5bd0d3aebace0761ff9a4a19fa20b00bb61349b7671c035 languageName: node linkType: hard "@typescript-eslint/parser@npm:^8.0.0": - version: 8.1.0 - resolution: "@typescript-eslint/parser@npm:8.1.0" + version: 8.10.0 + resolution: "@typescript-eslint/parser@npm:8.10.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b94b2d3ab5ca505484d100701fad6a04a5dc8d595029bac1b9f5b8a4a91d80fd605b0f65d230b36a97ab7e5d55eeb0c28af2ab63929a3e4ab8fdefd2a548c36b + checksum: 10c0/7becb2457c085c239838d301796074b790f46dd38c9fbc14ec1dec8e993c7115cd8a66cdc07983c3a68a2dd92e24e8acc49d69a4ebcc29e9869957eb52d1cb74 languageName: node linkType: hard @@ -4220,28 +4220,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/scope-manager@npm:8.1.0" +"@typescript-eslint/scope-manager@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/scope-manager@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" - checksum: 10c0/2bcf8cd176a1819bddcae16c572e7da8fba821b995a91cd53d64d8d6b85a17f5a895522f281ba57e34929574bddd4d6684ee3e545ec4e8096be4c3198e253a9a + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" + checksum: 10c0/b8bb8635c4d6c00a3578d6265e3ee0f5d96d0c9dee534ed588aa411c3f4497fd71cce730c3ae7571e52453d955b191bc9edcc47c9af21a20c90e9a20f2371108 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/type-utils@npm:8.1.0" +"@typescript-eslint/type-utils@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/type-utils@npm:8.10.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.1.0" - "@typescript-eslint/utils": "npm:8.1.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" + "@typescript-eslint/utils": "npm:8.10.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/62753941c4136e8d2daa72fe0410dea48e5317a6f12ece6382ca85e29912bd1b3f739b61d1060fc0a1f8c488dfc905beab4c8b8497951a21c3138a659c7271ec + checksum: 10c0/1af8fce8394279e6ac7bcef449a132072ee36e374c8d557564246ffe7150230844901ca0305e29525bf37c87010e03bf8bedec76fccbfe1e41931cb4f274e208 languageName: node linkType: hard @@ -4252,10 +4252,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/types@npm:8.1.0" - checksum: 10c0/ceade44455f45974e68956016c4d1c6626580732f7f9675e14ffa63db80b551752b0df596b20473dae9f0dc6ed966e17417dc2cf36e1a82b6ab0edc97c5eaa50 +"@typescript-eslint/types@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/types@npm:8.10.0" + checksum: 10c0/f27dd43c8383e02e914a254257627e393dfc0f08b0f74a253c106813ae361f090271b2f3f2ef588fa3ca1329897d873da595bb5641fe8e3091b25eddca24b5d2 languageName: node linkType: hard @@ -4278,14 +4278,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.1.0" +"@typescript-eslint/typescript-estree@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/visitor-keys": "npm:8.1.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/visitor-keys": "npm:8.10.0" debug: "npm:^4.3.4" - globby: "npm:^11.1.0" + fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" @@ -4293,21 +4293,21 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/a7bc8275df1c79c4cb14ef086c56674316dd4907efec53eddca35d0b5220428b69c82178ce2d95138da2e398269c8bd0764cae8020a36417e411e35c3c47bc4b + checksum: 10c0/535a740fe25be0e28fe68c41e3264273d1e5169c9f938e08cc0e3415c357726f43efa44621960108c318fc3305c425d29f3223b6e731d44d67f84058a8947304 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/utils@npm:8.1.0" +"@typescript-eslint/utils@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/utils@npm:8.10.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.1.0" - "@typescript-eslint/types": "npm:8.1.0" - "@typescript-eslint/typescript-estree": "npm:8.1.0" + "@typescript-eslint/scope-manager": "npm:8.10.0" + "@typescript-eslint/types": "npm:8.10.0" + "@typescript-eslint/typescript-estree": "npm:8.10.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/c95503a6bdcd98b1ff04d1adbf46377b2036b1c510d90a4a056401f996f775f06c3108c95fb81cd6babc9c97b73b91b8e848f0337bc508de8a49c993582f0e75 + checksum: 10c0/a21a2933517176abd00fcd5d8d80023e35dc3d89d5746bbac43790b4e984ab1f371117db08048bce7f42d54c64f4e0e35161149f8f34fd25a27bff9d1110fd16 languageName: node linkType: hard @@ -4338,13 +4338,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.1.0": - version: 8.1.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.1.0" +"@typescript-eslint/visitor-keys@npm:8.10.0": + version: 8.10.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.10.0" dependencies: - "@typescript-eslint/types": "npm:8.1.0" + "@typescript-eslint/types": "npm:8.10.0" eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/b7544dbb0eec1ddbfcd95c04b51b9a739c2e768c16d1c88508f976a2b0d1bc02fefb7491930e06e48073a5c07c6f488cd8403bba3a8b918888b93a88d5ac3869 + checksum: 10c0/14721c4ac939640d5fd1ee1b6eeb07604b11a6017e319e21dcc71e7aac2992341fc7ae1992d977bad4433b6a1d0d1c0c279e6927316b26245f6e333f922fa458 languageName: node linkType: hard @@ -4834,7 +4834,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.3.0, aria-query@npm:^5.0.0": +"aria-query@npm:5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" dependencies: @@ -4843,12 +4843,10 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:~5.1.3": - version: 5.1.3 - resolution: "aria-query@npm:5.1.3" - dependencies: - deep-equal: "npm:^2.0.5" - checksum: 10c0/edcbc8044c4663d6f88f785e983e6784f98cb62b4ba1e9dd8d61b725d0203e4cfca38d676aee984c31f354103461102a3d583aa4fbe4fd0a89b679744f4e5faf +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10c0/003c7e3e2cff5540bf7a7893775fc614de82b0c5dde8ae823d47b7a28a9d4da1f7ed85f340bdb93d5649caa927755f0e31ecc7ab63edfdfc00c8ef07e505e03e languageName: node linkType: hard @@ -4873,7 +4871,7 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": +"array-buffer-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: @@ -7059,32 +7057,6 @@ __metadata: languageName: node linkType: hard -"deep-equal@npm:^2.0.5": - version: 2.2.3 - resolution: "deep-equal@npm:2.2.3" - dependencies: - array-buffer-byte-length: "npm:^1.0.0" - call-bind: "npm:^1.0.5" - es-get-iterator: "npm:^1.1.3" - get-intrinsic: "npm:^1.2.2" - is-arguments: "npm:^1.1.1" - is-array-buffer: "npm:^3.0.2" - is-date-object: "npm:^1.0.5" - is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" - isarray: "npm:^2.0.5" - object-is: "npm:^1.1.5" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.1" - side-channel: "npm:^1.0.4" - which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.13" - checksum: 10c0/a48244f90fa989f63ff5ef0cc6de1e4916b48ea0220a9c89a378561960814794a5800c600254482a2c8fd2e49d6c2e196131dc983976adb024c94a42dfe4949f - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -7758,26 +7730,9 @@ __metadata: languageName: node linkType: hard -"es-get-iterator@npm:^1.1.3": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.3" - has-symbols: "npm:^1.0.3" - is-arguments: "npm:^1.1.1" - is-map: "npm:^2.0.2" - is-set: "npm:^2.0.2" - is-string: "npm:^1.0.7" - isarray: "npm:^2.0.5" - stop-iteration-iterator: "npm:^1.0.0" - checksum: 10c0/ebd11effa79851ea75d7f079405f9d0dc185559fd65d986c6afea59a0ff2d46c2ed8675f19f03dce7429d7f6c14ff9aede8d121fbab78d75cfda6a263030bac0 - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.0.19": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.0.19, es-iterator-helpers@npm:^1.1.0": + version: 1.1.0 + resolution: "es-iterator-helpers@npm:1.1.0" dependencies: call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" @@ -7786,14 +7741,14 @@ __metadata: es-set-tostringtag: "npm:^2.0.3" function-bind: "npm:^1.1.2" get-intrinsic: "npm:^1.2.4" - globalthis: "npm:^1.0.3" + globalthis: "npm:^1.0.4" has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" internal-slot: "npm:^1.0.7" - iterator.prototype: "npm:^1.1.2" + iterator.prototype: "npm:^1.1.3" safe-array-concat: "npm:^1.1.2" - checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5 + checksum: 10c0/84d6c240c7da6e62323b336cb1497781546dab16bebdbd879ccfdf588979712d3e941d41165b6c2ffce5a03a7b929d4e6131d3124d330da1a0e2bfa1da7cd99f languageName: node linkType: hard @@ -8002,10 +7957,10 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^50.0.0": - version: 50.2.2 - resolution: "eslint-plugin-jsdoc@npm:50.2.2" + version: 50.4.3 + resolution: "eslint-plugin-jsdoc@npm:50.4.3" dependencies: - "@es-joy/jsdoccomment": "npm:~0.48.0" + "@es-joy/jsdoccomment": "npm:~0.49.0" are-docs-informative: "npm:^0.0.2" comment-parser: "npm:1.4.1" debug: "npm:^4.3.6" @@ -8018,15 +7973,15 @@ __metadata: synckit: "npm:^0.9.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/f41d30246f6a4b6acb55e8cd75cf4fc256315e141ab25f7740fa6fa58cdd24e08cb672b4a350da93aeb126d210bd25981310a50f97cfb108f6a7ce8668b6b90a + checksum: 10c0/96067f8fc3553371e9afdc6d03c166228bfd3cb004fcd70c4357d49185732f384351e20f44c21b0a13ea318c8aabbd584b627804f62a2a80376507646708a786 languageName: node linkType: hard "eslint-plugin-jsx-a11y@npm:~6.10.0": - version: 6.10.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.10.0" + version: 6.10.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.1" dependencies: - aria-query: "npm:~5.1.3" + aria-query: "npm:^5.3.2" array-includes: "npm:^3.1.8" array.prototype.flatmap: "npm:^1.3.2" ast-types-flow: "npm:^0.0.8" @@ -8034,17 +7989,17 @@ __metadata: axobject-query: "npm:^4.1.0" damerau-levenshtein: "npm:^1.0.8" emoji-regex: "npm:^9.2.2" - es-iterator-helpers: "npm:^1.0.19" + es-iterator-helpers: "npm:^1.1.0" hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^3.3.5" language-tags: "npm:^1.0.9" minimatch: "npm:^3.1.2" object.fromentries: "npm:^2.0.8" safe-regex-test: "npm:^1.0.3" - string.prototype.includes: "npm:^2.0.0" + string.prototype.includes: "npm:^2.0.1" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - checksum: 10c0/9f8e29a3317fb6a82e2ecd333fe0fab3a69fff786d087eb65dc723d6e954473ab681d14a252d7cb2971f5e7f68816cb6f7731766558e1833a77bd73af1b5ab34 + checksum: 10c0/25bf28e3db4f6789c5d4f9300fc6fc54faca19ecc537d0f46e9c873f80ed37103a033e1f716f608fab5f5813dd38af65a9a6ae2e29dd079763ce539ebecf998e languageName: node linkType: hard @@ -8067,8 +8022,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.35.2 - resolution: "eslint-plugin-react@npm:7.35.2" + version: 7.37.1 + resolution: "eslint-plugin-react@npm:7.37.1" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" @@ -8090,7 +8045,7 @@ __metadata: string.prototype.repeat: "npm:^1.0.0" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10c0/5f891f5a77e902a0ca8d10b23d0b800e90a09400187febe5986c5078d6277baa4b974d6acdbba25baae065dbcf12eb9241b5f5782527d0780314c2ee5006a8af + checksum: 10c0/13cf55666f16d2ca45b14aad1b0e14741d1817679c86d20aff0bc1e802439a8541f40a42c4c8e3486ffb710f1bcc2f3e56697f2b5f724306a7fca174e1ad6433 languageName: node linkType: hard @@ -8129,14 +8084,14 @@ __metadata: linkType: hard "eslint@npm:^8.41.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -8172,7 +8127,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 languageName: node linkType: hard @@ -8970,7 +8925,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -9165,12 +9120,13 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.3, globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: "npm:^1.1.3" - checksum: 10c0/0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0 + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 languageName: node linkType: hard @@ -9817,7 +9773,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": +"internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" dependencies: @@ -9933,7 +9889,7 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": +"is-arguments@npm:^1.0.4": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -9943,7 +9899,7 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": +"is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" dependencies: @@ -10208,7 +10164,7 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.1, is-map@npm:^2.0.2": +"is-map@npm:^2.0.1": version: 2.0.3 resolution: "is-map@npm:2.0.3" checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc @@ -10333,7 +10289,7 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.1, is-set@npm:^2.0.2": +"is-set@npm:^2.0.1": version: 2.0.3 resolution: "is-set@npm:2.0.3" checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 @@ -10560,16 +10516,16 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"iterator.prototype@npm:^1.1.3": + version: 1.1.3 + resolution: "iterator.prototype@npm:1.1.3" dependencies: define-properties: "npm:^1.2.1" get-intrinsic: "npm:^1.2.1" has-symbols: "npm:^1.0.3" reflect.getprototypeof: "npm:^1.0.4" set-function-name: "npm:^2.0.1" - checksum: 10c0/a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79 + checksum: 10c0/68b0320c14291fbb3d8ed5a17e255d3127e7971bec19108076667e79c9ff4c7d69f99de4b0b3075c789c3f318366d7a0a35bb086eae0f2cf832dd58465b2f9e6 languageName: node linkType: hard @@ -12529,7 +12485,7 @@ __metadata: languageName: node linkType: hard -"object-is@npm:^1.0.1, object-is@npm:^1.1.5": +"object-is@npm:^1.0.1": version: 1.1.6 resolution: "object-is@npm:1.1.6" dependencies: @@ -15118,7 +15074,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: @@ -16336,15 +16292,6 @@ __metadata: languageName: node linkType: hard -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" - dependencies: - internal-slot: "npm:^1.0.4" - checksum: 10c0/c4158d6188aac510d9e92925b58709207bd94699e9c31186a040c80932a687f84a51356b5895e6dc72710aad83addb9411c22171832c9ae0e6e11b7d61b0dfb9 - languageName: node - linkType: hard - "stream-browserify@npm:^2.0.1": version: 2.0.2 resolution: "stream-browserify@npm:2.0.2" @@ -16429,13 +16376,14 @@ __metadata: languageName: node linkType: hard -"string.prototype.includes@npm:^2.0.0": - version: 2.0.0 - resolution: "string.prototype.includes@npm:2.0.0" +"string.prototype.includes@npm:^2.0.1": + version: 2.0.1 + resolution: "string.prototype.includes@npm:2.0.1" dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10c0/32dff118c9e9dcc87e240b05462fa8ee7248d9e335c0015c1442fe18152261508a2146d9bb87ddae56abab69148a83c61dfaea33f53853812a6a2db737689ed2 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + checksum: 10c0/25ce9c9b49128352a2618fbe8758b46f945817a58a4420f4799419e40a8d28f116e176c7590d767d5327a61e75c8f32c86171063f48e389b9fdd325f1bd04ee5 languageName: node linkType: hard @@ -18280,7 +18228,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: From 29f98b361f77778d9e5675078a9276575cd1cb03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:03:59 +0200 Subject: [PATCH 331/467] Update dependency ruby-prof to v1.7.1 (#32599) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e437760ed1f16c..f73f43fee4a3fd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -761,7 +761,7 @@ GEM rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) rubocop-rspec (~> 3, >= 3.0.1) - ruby-prof (1.7.0) + ruby-prof (1.7.1) ruby-progressbar (1.13.0) ruby-saml (1.17.0) nokogiri (>= 1.13.10) From e05f9fed333bb7316e818e19c7f599e721afb050 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 08:04:30 +0000 Subject: [PATCH 332/467] Update dependency pino to v9.5.0 (#32511) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 97177407125be2..7b1cd2a7e84d86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13176,16 +13176,6 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.2.0": - version: 1.2.0 - resolution: "pino-abstract-transport@npm:1.2.0" - dependencies: - readable-stream: "npm:^4.0.0" - split2: "npm:^4.0.0" - checksum: 10c0/b4ab59529b7a91f488440147fc58ee0827a6c1c5ca3627292339354b1381072c1a6bfa9b46d03ad27872589e8477ecf74da12cf286e1e6b665ac64a3b806bf07 - languageName: node - linkType: hard - "pino-abstract-transport@npm:^2.0.0": version: 2.0.0 resolution: "pino-abstract-transport@npm:2.0.0" @@ -13239,13 +13229,13 @@ __metadata: linkType: hard "pino@npm:^9.0.0": - version: 9.4.0 - resolution: "pino@npm:9.4.0" + version: 9.5.0 + resolution: "pino@npm:9.5.0" dependencies: atomic-sleep: "npm:^1.0.0" fast-redact: "npm:^3.1.1" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.2.0" + pino-abstract-transport: "npm:^2.0.0" pino-std-serializers: "npm:^7.0.0" process-warning: "npm:^4.0.0" quick-format-unescaped: "npm:^4.0.3" @@ -13255,7 +13245,7 @@ __metadata: thread-stream: "npm:^3.0.0" bin: pino: bin.js - checksum: 10c0/12a3d74968964d92b18ca7d6095a3c5b86478dc22264a37486d64e102085ed08820fcbe75e640acc3542fdf2937a34e5050b624f98e6ac62dd10f5e1328058a2 + checksum: 10c0/b06590c5f4da43df59905af1aac344432b43154c4c1569ebea168e7ae7fd0a4181ccabb769a6568cf3e781e1d1b9df13d65b3603e25ebb05539bcb02ea04215e languageName: node linkType: hard From 40b4f73c189ae2d3e16db58baab4caa5d40ffc3c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 21 Oct 2024 04:07:07 -0400 Subject: [PATCH 333/467] Pre-import Rails 7.2 generated config minor changes (#30579) --- config/environments/development.rb | 7 ++----- config/environments/production.rb | 12 +++++------- config/environments/test.rb | 6 +++--- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index 74f0913da241c4..f5f22a3c1ff158 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -16,7 +16,7 @@ # Show full error reports. config.consider_all_requests_local = true - # Enable server timing + # Enable server timing. config.server_timing = true # Enable/disable caching. By default caching is disabled. @@ -77,9 +77,6 @@ # Annotate rendered view with file names. # config.action_view.annotate_rendered_view_with_filenames = true - # Uncomment if you wish to allow Action Cable access from any origin. - # config.action_cable.disable_request_forgery_protection = true - config.action_mailer.default_options = { from: 'notifications@localhost' } # If using a Heroku, Vagrant or generic remote development environment, @@ -90,7 +87,7 @@ # TODO: Remove once devise-two-factor data migration complete config.x.otp_secret = ENV.fetch('OTP_SECRET', '1fc2b87989afa6351912abeebe31ffc5c476ead9bf8b3d74cbc4a302c7b69a45b40b1bbef3506ddad73e942e15ed5ca4b402bf9a66423626051104f4b5f05109') - # Raise error when a before_action's only/except options reference missing actions + # Raise error when a before_action's only/except options reference missing actions. config.action_controller.raise_on_missing_callback_actions = true end diff --git a/config/environments/production.rb b/config/environments/production.rb index 5129b73e411799..1cf752f3b24904 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -15,17 +15,14 @@ config.eager_load = true # Full error reports are disabled and caching is turned on. - config.consider_all_requests_local = false + config.consider_all_requests_local = false config.action_controller.perform_caching = true - config.action_controller.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present? + config.action_controller.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present? # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files). # config.require_master_key = true - # Compress CSS using a preprocessor. - # config.assets.css_compressor = :sass - # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false @@ -42,6 +39,7 @@ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true + # Skip http-to-https redirect for the default health check endpoint. config.ssl_options = { redirect: { exclude: ->(request) { request.path.start_with?('/health') || request.headers['Host'].end_with?('.onion') || request.headers['Host'].end_with?('.i2p') }, @@ -60,7 +58,7 @@ config.cache_store = :redis_cache_store, REDIS_CONFIGURATION.cache # Use a real queuing backend for Active Job (and separate queues per environment). - # config.active_job.queue_adapter = :resque + # config.active_job.queue_adapter = :resque # config.active_job.queue_name_prefix = "mastodon_production" config.action_mailer.perform_caching = false @@ -70,7 +68,7 @@ # config.action_mailer.raise_delivery_errors = false # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # English when a translation cannot be found). + # the I18n.default_locale when a translation cannot be found). # This setting would typically be `true` to use the `I18n.default_locale`. # Some locales are missing translation entries and would have errors: # https://github.com/mastodon/mastodon/pull/24727 diff --git a/config/environments/test.rb b/config/environments/test.rb index 716bf8d31f194e..eb29ab1e176775 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -22,11 +22,11 @@ config.assets_digest = false # Show full error reports and disable caching. - config.consider_all_requests_local = true + config.consider_all_requests_local = true config.action_controller.perform_caching = false config.cache_store = :memory_store - # Raise exceptions instead of rendering exception templates. + # Render exception templates for rescuable exceptions and raise for other exceptions. config.action_dispatch.show_exceptions = :rescuable # Disable request forgery protection in test environment. @@ -70,7 +70,7 @@ # Annotate rendered view with file names. # config.action_view.annotate_rendered_view_with_filenames = true - # Raise error when a before_action's only/except options reference missing actions + # Raise error when a before_action's only/except options reference missing actions. config.action_controller.raise_on_missing_callback_actions = true end From bd850d1ec0c6bb34fff93efe18a216ba0114a1b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:22:07 +0200 Subject: [PATCH 334/467] Update dependency @reduxjs/toolkit to v2.3.0 (#32497) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b1cd2a7e84d86..38385bf8aa861b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3110,8 +3110,8 @@ __metadata: linkType: hard "@reduxjs/toolkit@npm:^2.0.1": - version: 2.2.8 - resolution: "@reduxjs/toolkit@npm:2.2.8" + version: 2.3.0 + resolution: "@reduxjs/toolkit@npm:2.3.0" dependencies: immer: "npm:^10.0.3" redux: "npm:^5.0.1" @@ -3125,7 +3125,7 @@ __metadata: optional: true react-redux: optional: true - checksum: 10c0/bf1356d71bfb82e5a181692c79c19b7bc19355260a9966f6562604c995f0cd0ce1154177ccd14095e8b319e73f64cfe86a4e46a83d24edba7876d4ae71fd5ae0 + checksum: 10c0/414e90b706331385a2122fc79e33f90c59a9caf9a59419f1bfd7f5e594bc8e4987902fd1bccbc53eb96d22c65ec2981ff5581f3d2df3ecd381a630f391edfc3e languageName: node linkType: hard From 699f75bb350f80545f37f80796d08feaec8525c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:23:46 +0200 Subject: [PATCH 335/467] Update dependency eslint-plugin-react-hooks to v5 (#32425) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a37b766ef0057e..047dbbb806e505 100644 --- a/package.json +++ b/package.json @@ -183,7 +183,7 @@ "eslint-plugin-jsx-a11y": "~6.10.0", "eslint-plugin-promise": "~7.1.0", "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-hooks": "^5.0.0", "husky": "^9.0.11", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", diff --git a/yarn.lock b/yarn.lock index 38385bf8aa861b..5ed241b03e15c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2870,7 +2870,7 @@ __metadata: eslint-plugin-jsx-a11y: "npm:~6.10.0" eslint-plugin-promise: "npm:~7.1.0" eslint-plugin-react: "npm:^7.33.2" - eslint-plugin-react-hooks: "npm:^4.6.0" + eslint-plugin-react-hooks: "npm:^5.0.0" file-loader: "npm:^6.2.0" fuzzysort: "npm:^3.0.0" glob: "npm:^10.2.6" @@ -8012,12 +8012,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.6.0": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:^5.0.0": + version: 5.0.0 + resolution: "eslint-plugin-react-hooks@npm:5.0.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/bcb74b421f32e4203a7100405b57aab85526be4461e5a1da01bc537969a30012d2ee209a2c2a6cac543833a27188ce1e6ad71e4628d0bb4a2e5365cad86c5002 languageName: node linkType: hard From 4d5b2de6c8a8e574899f488f47ea0433117458a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:24:42 +0200 Subject: [PATCH 336/467] Update dependency mime-types to '~> 3.6.0' (#32215) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index bcb19421ab9afe..104fd266b8237f 100644 --- a/Gemfile +++ b/Gemfile @@ -61,7 +61,7 @@ gem 'irb', '~> 1.8' gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' -gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar' +gem 'mime-types', '~> 3.6.0', require: 'mime/types/columnar' gem 'nokogiri', '~> 1.15' gem 'oj', '~> 3.14' gem 'ox', '~> 2.14' diff --git a/Gemfile.lock b/Gemfile.lock index f73f43fee4a3fd..957146b16b63f5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -429,9 +429,10 @@ GEM azure-storage-blob (~> 2.0.1) hashie (~> 5.0) memory_profiler (1.1.0) - mime-types (3.5.2) + mime-types (3.6.0) + logger mime-types-data (~> 3.2015) - mime-types-data (3.2024.0820) + mime-types-data (3.2024.1001) mini_mime (1.1.5) mini_portile2 (2.8.7) minitest (5.25.1) @@ -970,7 +971,7 @@ DEPENDENCIES mario-redis-lock (~> 1.2) md-paperclip-azure (~> 2.2) memory_profiler - mime-types (~> 3.5.0) + mime-types (~> 3.6.0) net-http (~> 0.4.0) net-ldap (~> 0.18) nokogiri (~> 1.15) From 36f1ec164d6f92f5229fed386947d3536bdffee5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 08:29:23 +0000 Subject: [PATCH 337/467] Update dependency ubuntu to v24 (#32280) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check-i18n.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-i18n.yml b/.github/workflows/check-i18n.yml index 5a1c0519665873..7c1004329cc166 100644 --- a/.github/workflows/check-i18n.yml +++ b/.github/workflows/check-i18n.yml @@ -18,7 +18,7 @@ permissions: jobs: check-i18n: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 From bb0532530666d877cae6345ce6a11c041b01fc7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 08:37:51 +0000 Subject: [PATCH 338/467] Update dependency eslint-plugin-formatjs to v5 (#32087) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 187 +++++---------------------------------------------- 2 files changed, 18 insertions(+), 171 deletions(-) diff --git a/package.json b/package.json index 047dbbb806e505..d144b0c156ea39 100644 --- a/package.json +++ b/package.json @@ -177,7 +177,7 @@ "eslint": "^8.41.0", "eslint-define-config": "^2.0.0", "eslint-import-resolver-typescript": "^3.5.5", - "eslint-plugin-formatjs": "^4.10.1", + "eslint-plugin-formatjs": "^5.0.0", "eslint-plugin-import": "~2.30.0", "eslint-plugin-jsdoc": "^50.0.0", "eslint-plugin-jsx-a11y": "~6.10.0", diff --git a/yarn.lock b/yarn.lock index 5ed241b03e15c4..5ef35623408833 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2230,16 +2230,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.0.0": - version: 2.0.0 - resolution: "@formatjs/ecma402-abstract@npm:2.0.0" - dependencies: - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/94cba291aeadffa3ca416087c2c2352c8a741bb4dcb7f47f15c247b1f043ffcef1af5b20a1b7578fbba9e704fc5f1c079923f3537a273d50162be62f8037625c - languageName: node - linkType: hard - "@formatjs/ecma402-abstract@npm:2.2.0": version: 2.2.0 resolution: "@formatjs/ecma402-abstract@npm:2.2.0" @@ -2271,27 +2261,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.7.8": - version: 2.7.8 - resolution: "@formatjs/icu-messageformat-parser@npm:2.7.8" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-skeleton-parser": "npm:1.8.2" - tslib: "npm:^2.4.0" - checksum: 10c0/a3b759a825fb22ffd7b906f6a07b1a079bbc34f72c745de2c2514e439c4bb75bc1a9442eba1bac7ff3ea3010e12076374cd755ad12116b1d066cc90da5fbcbc9 - languageName: node - linkType: hard - -"@formatjs/icu-skeleton-parser@npm:1.8.2": - version: 1.8.2 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.2" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - tslib: "npm:^2.4.0" - checksum: 10c0/9b15013acc47b8d560b52942e3dab2abaaa9c5a4410bbd1d490a4b22bf5ca36fdd88b71f241d05479bddf856d0d1d57b7ecc9e79738497ac518616aa6d4d0015 - languageName: node - linkType: hard - "@formatjs/icu-skeleton-parser@npm:1.8.4": version: 1.8.4 resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" @@ -2324,15 +2293,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.4": - version: 0.5.4 - resolution: "@formatjs/intl-localematcher@npm:0.5.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/c9ff5d34ca8b6fe59f8f303a3cc31a92d343e095a6987e273e5cc23f0fe99feb557a392a05da95931c7d24106acb6988e588d00ddd05b0934005aafd7fdbafe6 - languageName: node - linkType: hard - "@formatjs/intl-localematcher@npm:0.5.5": version: 0.5.5 resolution: "@formatjs/intl-localematcher@npm:0.5.5" @@ -2373,26 +2333,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.14": - version: 3.13.14 - resolution: "@formatjs/ts-transformer@npm:3.13.14" - dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@types/json-stable-stringify": "npm:^1.0.32" - "@types/node": "npm:14 || 16 || 17" - chalk: "npm:^4.0.0" - json-stable-stringify: "npm:^1.0.1" - tslib: "npm:^2.4.0" - typescript: "npm:5" - peerDependencies: - ts-jest: ">=27" - peerDependenciesMeta: - ts-jest: - optional: true - checksum: 10c0/38450cfce3ec5132f3548c1e9ab098909ca8d2db2b8b6b4b5bb87aa59a4ca1a19bbf6d339ace39bcc931fa80d9946b4c7cf039c9574069b317ae015cd6963bd3 - languageName: node - linkType: hard - "@formatjs/ts-transformer@npm:3.13.16": version: 3.13.16 resolution: "@formatjs/ts-transformer@npm:3.13.16" @@ -2864,7 +2804,7 @@ __metadata: eslint: "npm:^8.41.0" eslint-define-config: "npm:^2.0.0" eslint-import-resolver-typescript: "npm:^3.5.5" - eslint-plugin-formatjs: "npm:^4.10.1" + eslint-plugin-formatjs: "npm:^5.0.0" eslint-plugin-import: "npm:~2.30.0" eslint-plugin-jsdoc: "npm:^50.0.0" eslint-plugin-jsx-a11y: "npm:~6.10.0" @@ -3574,13 +3514,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:7 || 8": - version: 8.56.10 - resolution: "@types/eslint@npm:8.56.10" +"@types/eslint@npm:9": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 10c0/674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3 + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e languageName: node linkType: hard @@ -3734,7 +3674,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -3792,13 +3732,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:14 || 16 || 17": - version: 17.0.45 - resolution: "@types/node@npm:17.0.45" - checksum: 10c0/0db377133d709b33a47892581a21a41cd7958f22723a3cc6c71d55ac018121382de42fbfc7970d5ae3e7819dbe5f40e1c6a5174aedf7e7964e9cb8fa72b580b0 - languageName: node - linkType: hard - "@types/node@npm:14 || 16 || 17 || 18": version: 18.19.55 resolution: "@types/node@npm:18.19.55" @@ -4019,13 +3952,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.0": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -4210,16 +4136,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:8.10.0": version: 8.10.0 resolution: "@typescript-eslint/scope-manager@npm:8.10.0" @@ -4245,13 +4161,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d - languageName: node - linkType: hard - "@typescript-eslint/types@npm:8.10.0": version: 8.10.0 resolution: "@typescript-eslint/types@npm:8.10.0" @@ -4259,25 +4168,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:8.10.0": version: 8.10.0 resolution: "@typescript-eslint/typescript-estree@npm:8.10.0" @@ -4311,33 +4201,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^6.18.1": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.21.0" - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/typescript-estree": "npm:6.21.0" - semver: "npm:^7.5.4" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" - dependencies: - "@typescript-eslint/types": "npm:6.21.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:8.10.0": version: 8.10.0 resolution: "@typescript-eslint/visitor-keys@npm:8.10.0" @@ -7907,24 +7770,24 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-formatjs@npm:^4.10.1": - version: 4.13.3 - resolution: "eslint-plugin-formatjs@npm:4.13.3" +"eslint-plugin-formatjs@npm:^5.0.0": + version: 5.1.1 + resolution: "eslint-plugin-formatjs@npm:5.1.1" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/ts-transformer": "npm:3.13.14" - "@types/eslint": "npm:7 || 8" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/ts-transformer": "npm:3.13.16" + "@types/eslint": "npm:9" "@types/picomatch": "npm:^2.3.0" - "@typescript-eslint/utils": "npm:^6.18.1" + "@typescript-eslint/utils": "npm:8.10.0" emoji-regex: "npm:^10.2.1" magic-string: "npm:^0.30.0" picomatch: "npm:^2.3.1" - tslib: "npm:2.6.2" + tslib: "npm:^2.7.0" typescript: "npm:5" unicode-emoji-utils: "npm:^1.2.0" peerDependencies: - eslint: 7 || 8 - checksum: 10c0/5e98f487a097189e3bdc64b678d19f4c83502c32d7c89a8959eda4ed9cb664bf16f13ad8871be89ca192cb39c1007d6a158c39bbf5b23c56962d949dbe9abfab + eslint: 9 + checksum: 10c0/b0cf41208fe1bdcd4e7879c0a7099273753ec1e2c5a855c0989679690a740b92123d1625cea7ce862a19412a588fd16e42c0c196807021f13462585ace719dc1 languageName: node linkType: hard @@ -12008,15 +11871,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac - languageName: node - linkType: hard - "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -17193,7 +17047,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": +"ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -17214,13 +17068,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb - languageName: node - linkType: hard - "tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": version: 2.7.0 resolution: "tslib@npm:2.7.0" From 346cdb998c8b8519292a0a1633a28a3938665f44 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 22 Oct 2024 10:31:53 +0200 Subject: [PATCH 339/467] Fix 'unknown' media attachment type rendering (#32613) --- app/javascript/mastodon/components/status.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 46926b4aaead34..479213636818c9 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -449,7 +449,7 @@ class Status extends ImmutablePureComponent { } else if (status.get('media_attachments').size > 0) { const language = status.getIn(['translation', 'language']) || status.get('language'); - if (['image', 'gifv'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { + if (['image', 'gifv', 'unknown'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { media = ( {Component => ( From f8a66e99150e50ac7e74f3b68e2881bc0c983ffe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:36:32 +0200 Subject: [PATCH 340/467] Update formatjs monorepo (#32612) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 122 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 80 insertions(+), 42 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5ef35623408833..baf0dec9efbdd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2261,6 +2261,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/icu-messageformat-parser@npm:2.8.0": + version: 2.8.0 + resolution: "@formatjs/icu-messageformat-parser@npm:2.8.0" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-skeleton-parser": "npm:1.8.4" + tslib: "npm:^2.7.0" + checksum: 10c0/f8cf835817529ec5c7aed55e60c2584ffe78b6d7f079526e2809af4fdd32d85c4569a01e806861e4352bb5ca996116ea5006870d7e40e01c79878df345e8ba4d + languageName: node + linkType: hard + "@formatjs/icu-skeleton-parser@npm:1.8.4": version: 1.8.4 resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" @@ -2271,25 +2282,25 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.10": - version: 6.6.10 - resolution: "@formatjs/intl-displaynames@npm:6.6.10" +"@formatjs/intl-displaynames@npm:6.7.0": + version: 6.7.0 + resolution: "@formatjs/intl-displaynames@npm:6.7.0" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" "@formatjs/intl-localematcher": "npm:0.5.5" tslib: "npm:^2.7.0" - checksum: 10c0/e4158f67fc0d6c2345d05b85183aef480fc86c68b60643abdd143ddc66a2203acfcf1b3dc4619658479e54c971c878a2548db34e08f3b035348686f088bf03c4 + checksum: 10c0/d4814ca580ab261681d2926c3d0df26c445df8e18891dff5cc6363f3c7ea9db393ed1056d8c5ab9277b5fb5e40d44444e7f92935f64f8282c8859c9dab8caabf languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.9": - version: 7.5.9 - resolution: "@formatjs/intl-listformat@npm:7.5.9" +"@formatjs/intl-listformat@npm:7.6.0": + version: 7.6.0 + resolution: "@formatjs/intl-listformat@npm:7.6.0" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" "@formatjs/intl-localematcher": "npm:0.5.5" tslib: "npm:^2.7.0" - checksum: 10c0/b5041de4d6e011f36ba4b54406aae9aef763f8bc8b22364bdc8447d0b8b3e553111d117b02f801c31f2ab2c0d3abc086bd90db1b83c000babb99316cd15be5e2 + checksum: 10c0/8732f492d0faa3d3c633fc9247af6953c15ca8ae9a7cc7de620afa86bbdcb8a92a8a76e36aaf2dbc1fb25d1e9c0ed48c9031926caef9900f68d18772b7e8ce29 languageName: node linkType: hard @@ -2303,33 +2314,33 @@ __metadata: linkType: hard "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.16 - resolution: "@formatjs/intl-pluralrules@npm:5.2.16" + version: 5.2.17 + resolution: "@formatjs/intl-pluralrules@npm:5.2.17" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" "@formatjs/intl-localematcher": "npm:0.5.5" tslib: "npm:^2.7.0" - checksum: 10c0/2250a96a74a153a5f1e771233c366c42005efd71ac5ff665891a308ce78a68f85709f8c892d28a1e334f974252bfb3407f6a64da616c3adbeb158310ef73d71b + checksum: 10c0/d1389821d8b853433ba4b3b7c1b5c08244d6b2dc5f3e54cc171336c8e6ab545b9eb0f388ce98f1245879693bf3068ffc4df2e5f1c7dee0a1e87a058a5c4ce8fc languageName: node linkType: hard -"@formatjs/intl@npm:2.10.8": - version: 2.10.8 - resolution: "@formatjs/intl@npm:2.10.8" +"@formatjs/intl@npm:2.10.9": + version: 2.10.9 + resolution: "@formatjs/intl@npm:2.10.9" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.7.10" - "@formatjs/intl-displaynames": "npm:6.6.10" - "@formatjs/intl-listformat": "npm:7.5.9" - intl-messageformat: "npm:10.7.0" + "@formatjs/icu-messageformat-parser": "npm:2.8.0" + "@formatjs/intl-displaynames": "npm:6.7.0" + "@formatjs/intl-listformat": "npm:7.6.0" + intl-messageformat: "npm:10.7.1" tslib: "npm:^2.7.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/e35a4421f445ef4f7ce362144dde143ad895391b03380fbf896fe261a445fa6b5d886989e07bf9b49e52e83f0a3f9b667cfecbc2684a9ea898c6d25daf07b392 + checksum: 10c0/9be5c6e7e8371904789d0771ee97f04cdf16de3f6f4aa01998b3f8c64aa36d9bf91c491ebf95fa2dc6ec16a7d1bb6e3738ddbec02005c199e786133eb0e5795b languageName: node linkType: hard @@ -2353,6 +2364,26 @@ __metadata: languageName: node linkType: hard +"@formatjs/ts-transformer@npm:3.13.17": + version: 3.13.17 + resolution: "@formatjs/ts-transformer@npm:3.13.17" + dependencies: + "@formatjs/icu-messageformat-parser": "npm:2.8.0" + "@types/json-stable-stringify": "npm:^1.0.32" + "@types/node": "npm:14 || 16 || 17 || 18 || 20" + chalk: "npm:^4.0.0" + json-stable-stringify: "npm:^1.0.1" + tslib: "npm:^2.7.0" + typescript: "npm:5" + peerDependencies: + ts-jest: ">=27" + peerDependenciesMeta: + ts-jest: + optional: true + checksum: 10c0/1619f771d8aa69cf63f05199ebc28b57a5e0850b64dc9c2bd0df73d8f388a3323c47f13bcc742a51a7560349591282d88695e6fb9a646b0e7d4f7d0b07e2c5c0 + languageName: node + linkType: hard + "@gamestdio/websocket@npm:^0.3.2": version: 0.3.2 resolution: "@gamestdio/websocket@npm:0.3.2" @@ -3723,12 +3754,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 20.8.10 - resolution: "@types/node@npm:20.8.10" +"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20": + version: 20.16.13 + resolution: "@types/node@npm:20.16.13" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/caaa3ae9294f1bfdacb029a916c64af63cbcea613a52f53ea86f93c91779859af177b2b68113ef835194519f5e76cadda08559929b68297f1a8a568c207f9f66 + undici-types: "npm:~6.19.2" + checksum: 10c0/7f4fd7176db0802c62e11ebbf7a66d0248e2dc8ec9153d9fc8bcb164d9aed581d91c407046c823c522e60d0babfdc24a1618dba7f2c6920ef1a24e1d416c9550 languageName: node linkType: hard @@ -5100,21 +5131,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.18 - resolution: "babel-plugin-formatjs@npm:10.5.18" + version: 10.5.19 + resolution: "babel-plugin-formatjs@npm:10.5.19" dependencies: "@babel/core": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0" "@babel/types": "npm:^7.25.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.10" - "@formatjs/ts-transformer": "npm:3.13.16" + "@formatjs/icu-messageformat-parser": "npm:2.8.0" + "@formatjs/ts-transformer": "npm:3.13.17" "@types/babel__core": "npm:^7.20.5" "@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__traverse": "npm:^7.20.6" tslib: "npm:^2.7.0" - checksum: 10c0/3e7753cb1837ea300f7b0d574751758330f4fe56e4f686a1ceb7acc612c0ac1353ed2a918b5af6e4dcaf579c623d56f714159a265d64b71897471a69f15910b8 + checksum: 10c0/29d1e1fe8c97412a1c6c95dde3753ea28ddbe39040aaead90c67106422ce12dad363aee47a2729f685807bacf7f422ef607f015b325203a8201249b74e84bab3 languageName: node linkType: hard @@ -9661,15 +9692,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.0, intl-messageformat@npm:^10.3.5": - version: 10.7.0 - resolution: "intl-messageformat@npm:10.7.0" +"intl-messageformat@npm:10.7.1, intl-messageformat@npm:^10.3.5": + version: 10.7.1 + resolution: "intl-messageformat@npm:10.7.1" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/icu-messageformat-parser": "npm:2.8.0" tslib: "npm:^2.7.0" - checksum: 10c0/772469599fa8ab43dc933d03c75c6290220565c97afdc60cb67d036f2c51f1b3a825b2345933ee7616ecdf018b95ea7704f5ec80ded5a8efc2ce7f4b2962cae3 + checksum: 10c0/b9383a2c0ce7888d34fa7bbb4ba7cc139ea77a372bd9268412e97e8a1357ebd1880beb04affdbd7175ae27db2a57024f21e804b34f2b159fd1c3d221f69c40d4 languageName: node linkType: hard @@ -14381,18 +14412,18 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.8.0 - resolution: "react-intl@npm:6.8.0" + version: 6.8.1 + resolution: "react-intl@npm:6.8.1" dependencies: "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.10" - "@formatjs/intl": "npm:2.10.8" - "@formatjs/intl-displaynames": "npm:6.6.10" - "@formatjs/intl-listformat": "npm:7.5.9" + "@formatjs/icu-messageformat-parser": "npm:2.8.0" + "@formatjs/intl": "npm:2.10.9" + "@formatjs/intl-displaynames": "npm:6.7.0" + "@formatjs/intl-listformat": "npm:7.6.0" "@types/hoist-non-react-statics": "npm:^3.3.1" "@types/react": "npm:^18.3.11" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.7.0" + intl-messageformat: "npm:10.7.1" tslib: "npm:^2.7.0" peerDependencies: react: ^16.6.0 || 17 || 18 @@ -14400,7 +14431,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/e110d8cbfc227cbed3b72b162fe8a75e824aef47eeb5a7879a5a2d9fa5dd35d2d25149ef57460fa06bca7ae106184c729e410c22bcdb349d29bb1ee35f3c5cf0 + checksum: 10c0/4ffdf8fd6e82c10de7d1e195336c8bc98fab5f6bc7fde548f7df553caf05677d632977c3287e9b72915f8a01ed98ff8246fdfccea2f7048902f46a596a0db4b2 languageName: node linkType: hard @@ -17253,6 +17284,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" From 16597fa73547f5f894342711ad081a36bd34ee03 Mon Sep 17 00:00:00 2001 From: Eugene Alvin Villar Date: Tue, 22 Oct 2024 16:41:40 +0800 Subject: [PATCH 341/467] Fix tl language native name (#32606) --- app/helpers/languages_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 394202e39ad78a..0a8ebcde549cdc 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -162,7 +162,7 @@ module LanguagesHelper th: ['Thai', 'ไทย'].freeze, ti: ['Tigrinya', 'ትግርኛ'].freeze, tk: ['Turkmen', 'Türkmen'].freeze, - tl: ['Tagalog', 'Wikang Tagalog'].freeze, + tl: ['Tagalog', 'Tagalog'].freeze, tn: ['Tswana', 'Setswana'].freeze, to: ['Tonga', 'faka Tonga'].freeze, tr: ['Turkish', 'Türkçe'].freeze, From 18659f8163e146a7fea17a2800f039c9a47b7683 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 22 Oct 2024 08:46:32 -0400 Subject: [PATCH 342/467] Fix that blocking was not working on link timeline (#32625) --- app/models/link_feed.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/link_feed.rb b/app/models/link_feed.rb index 32efb331b62656..29ea430cc0175a 100644 --- a/app/models/link_feed.rb +++ b/app/models/link_feed.rb @@ -19,6 +19,8 @@ def get(limit, max_id = nil, since_id = nil, min_id = nil) scope.merge!(discoverable) scope.merge!(attached_to_preview_card) + scope.merge!(account_filters_scope) if account? + scope.merge!(language_scope) if account&.chosen_languages.present? scope.to_a_paginated_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id) end From 029c99bd7b5bca19b11d63a09c3e71b86306dad4 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 22 Oct 2024 14:49:10 +0200 Subject: [PATCH 343/467] Do not change follow counters when already following (#32622) --- app/javascript/mastodon/reducers/accounts.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/reducers/accounts.ts b/app/javascript/mastodon/reducers/accounts.ts index 5a9cc7220c7624..2001353b2e81e7 100644 --- a/app/javascript/mastodon/reducers/accounts.ts +++ b/app/javascript/mastodon/reducers/accounts.ts @@ -57,7 +57,10 @@ export const accountsReducer: Reducer = ( return state.setIn([action.payload.id, 'hidden'], false); else if (importAccounts.match(action)) return normalizeAccounts(state, action.payload.accounts); - else if (followAccountSuccess.match(action)) { + else if ( + followAccountSuccess.match(action) && + !action.payload.alreadyFollowing + ) { return state .update(action.payload.relationship.id, (account) => account?.update('followers_count', (n) => n + 1), From 6d2f865862dcadcc6046c2b81df25e51bae134a0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 02:39:19 -0400 Subject: [PATCH 344/467] Add coverage for `AccountAlias` validations (#31936) --- spec/models/account_alias_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/models/account_alias_spec.rb b/spec/models/account_alias_spec.rb index fc8c6bd250efde..17c83967a4ab7f 100644 --- a/spec/models/account_alias_spec.rb +++ b/spec/models/account_alias_spec.rb @@ -8,4 +8,26 @@ it { is_expected.to normalize(:acct).from(' @username@domain ').to('username@domain') } end end + + describe 'Validations' do + subject { described_class.new(account:) } + + let(:account) { Fabricate :account } + + it { is_expected.to_not allow_values(nil, '').for(:uri).against(:acct).with_message(not_found_message) } + + it { is_expected.to_not allow_values(account_uri).for(:uri).against(:acct).with_message(self_move_message) } + + def account_uri + ActivityPub::TagManager.instance.uri_for(subject.account) + end + + def not_found_message + I18n.t('migrations.errors.not_found') + end + + def self_move_message + I18n.t('migrations.errors.move_to_self') + end + end end From 0a4a73f9a67d5dc80a66d192af2b89cac41563a1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 02:40:29 -0400 Subject: [PATCH 345/467] Add coverage for `api/v1/domain_blocks/preview` endpoint (#32303) --- .../api/v1/domain_blocks/previews_spec.rb | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 spec/requests/api/v1/domain_blocks/previews_spec.rb diff --git a/spec/requests/api/v1/domain_blocks/previews_spec.rb b/spec/requests/api/v1/domain_blocks/previews_spec.rb new file mode 100644 index 00000000000000..eb191f436b6f2a --- /dev/null +++ b/spec/requests/api/v1/domain_blocks/previews_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Domain Blocks Previews API' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'write:blocks' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + let(:account) { Fabricate(:account, user: user) } + + describe 'GET /api/v1/domain_blocks/preview' do + subject { get '/api/v1/domain_blocks/preview', params: { domain: domain }, headers: headers } + + let(:domain) { 'host.example' } + + before do + Fabricate :follow, account: account, target_account: Fabricate(:account, domain: domain) + Fabricate :follow, target_account: account, account: Fabricate(:account, domain: domain) + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + + it 'returns http success and follower counts' do + subject + + expect(response) + .to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to include(followers_count: 1) + .and include(following_count: 1) + end + end +end From 67403e7b01f22c3089c7062f9f4e8e861357c377 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 02:41:07 -0400 Subject: [PATCH 346/467] Add coverage for ActivityPub likes/shares endpoints (#32305) --- spec/requests/activitypub/likes_spec.rb | 25 ++++++++++++++++++++++++ spec/requests/activitypub/shares_spec.rb | 25 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 spec/requests/activitypub/likes_spec.rb create mode 100644 spec/requests/activitypub/shares_spec.rb diff --git a/spec/requests/activitypub/likes_spec.rb b/spec/requests/activitypub/likes_spec.rb new file mode 100644 index 00000000000000..d780ad51684876 --- /dev/null +++ b/spec/requests/activitypub/likes_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'ActivityPub Likes' do + let(:account) { Fabricate(:account) } + let(:status) { Fabricate :status, account: account } + + before { Fabricate :favourite, status: status } + + describe 'GET /accounts/:account_username/statuses/:status_id/likes' do + it 'returns http success and activity json types and correct items count' do + get account_status_likes_path(account, status) + + expect(response) + .to have_http_status(200) + expect(response.media_type) + .to eq 'application/activity+json' + + expect(response.parsed_body) + .to include(type: 'Collection') + .and include(totalItems: 1) + end + end +end diff --git a/spec/requests/activitypub/shares_spec.rb b/spec/requests/activitypub/shares_spec.rb new file mode 100644 index 00000000000000..956bc7d201c04b --- /dev/null +++ b/spec/requests/activitypub/shares_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'ActivityPub Shares' do + let(:account) { Fabricate(:account) } + let(:status) { Fabricate :status, account: account } + + before { Fabricate :status, reblog: status } + + describe 'GET /accounts/:account_username/statuses/:status_id/shares' do + it 'returns http success and activity json types and correct items count' do + get account_status_shares_path(account, status) + + expect(response) + .to have_http_status(200) + expect(response.media_type) + .to eq 'application/activity+json' + + expect(response.parsed_body) + .to include(type: 'Collection') + .and include(totalItems: 1) + end + end +end From 1f3722904fd328b7a1490a58304779521acc52df Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 02:42:57 -0400 Subject: [PATCH 347/467] Top off coverage for `Appeal` model (#32464) --- spec/models/appeal_spec.rb | 91 ++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 13 deletions(-) diff --git a/spec/models/appeal_spec.rb b/spec/models/appeal_spec.rb index 7e324582ed5d37..e974ff92547f0a 100644 --- a/spec/models/appeal_spec.rb +++ b/spec/models/appeal_spec.rb @@ -4,20 +4,85 @@ RSpec.describe Appeal do describe 'Validations' do - it 'validates text length is under limit' do - appeal = Fabricate.build( - :appeal, - strike: Fabricate(:account_warning), - text: 'a' * described_class::TEXT_LENGTH_LIMIT * 2 - ) - - expect(appeal).to_not be_valid - expect(appeal).to model_have_error_on_field(:text) + subject { Fabricate.build :appeal, strike: Fabricate(:account_warning) } + + it { is_expected.to validate_length_of(:text).is_at_most(described_class::TEXT_LENGTH_LIMIT) } + + context 'with a strike created too long ago' do + let(:strike) { Fabricate.build :account_warning, created_at: 100.days.ago } + + it { is_expected.to_not allow_values(strike).for(:strike).against(:base).on(:create) } + end + end + + describe 'Query methods' do + describe '#pending?' do + subject { Fabricate.build :appeal, approved_at:, rejected_at: } + + context 'with not approved and not rejected' do + let(:approved_at) { nil } + let(:rejected_at) { nil } + + it { expect(subject).to be_pending } + end + + context 'with approved and rejected' do + let(:approved_at) { 1.day.ago } + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to_not be_pending } + end + + context 'with approved and not rejected' do + let(:approved_at) { 1.day.ago } + let(:rejected_at) { nil } + + it { expect(subject).to_not be_pending } + end + + context 'with not approved and rejected' do + let(:approved_at) { nil } + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to_not be_pending } + end + end + + describe '#approved?' do + subject { Fabricate.build :appeal, approved_at: } + + context 'with not approved' do + let(:approved_at) { nil } + + it { expect(subject).to_not be_approved } + end + + context 'with approved' do + let(:approved_at) { 1.day.ago } + + it { expect(subject).to be_approved } + end + end + + describe '#rejected?' do + subject { Fabricate.build :appeal, rejected_at: } + + context 'with not rejected' do + let(:rejected_at) { nil } + + it { expect(subject).to_not be_rejected } + end + + context 'with rejected' do + let(:rejected_at) { 1.day.ago } + + it { expect(subject).to be_rejected } + end end end - describe 'scopes' do - describe 'approved' do + describe 'Scopes' do + describe '.approved' do let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } let(:not_approved_appeal) { Fabricate(:appeal, approved_at: nil) } @@ -27,7 +92,7 @@ end end - describe 'rejected' do + describe '.rejected' do let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } let(:not_rejected_appeal) { Fabricate(:appeal, rejected_at: nil) } @@ -37,7 +102,7 @@ end end - describe 'pending' do + describe '.pending' do let(:approved_appeal) { Fabricate(:appeal, approved_at: 10.days.ago) } let(:rejected_appeal) { Fabricate(:appeal, rejected_at: 10.days.ago) } let(:pending_appeal) { Fabricate(:appeal, rejected_at: nil, approved_at: nil) } From c0f46e90314f0cec405974bc7e14d818ed380248 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 03:46:55 -0400 Subject: [PATCH 348/467] Fortify coverage for `Follow` model (#32472) --- spec/models/follow_spec.rb | 81 +++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index f22bd6ea88d53d..8684170dcf0c43 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -3,27 +3,26 @@ require 'rails_helper' RSpec.describe Follow do - let(:alice) { Fabricate(:account, username: 'alice') } - let(:bob) { Fabricate(:account, username: 'bob') } - - describe 'validations' do - subject { described_class.new(account: alice, target_account: bob, rate_limit: true) } - + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } + end + + describe 'Validations' do + subject { Fabricate.build :follow, rate_limit: true } + + let(:account) { Fabricate(:account) } - it 'is invalid if account already follows too many people' do - alice.update(following_count: FollowLimitValidator::LIMIT) + context 'when account follows too many people' do + before { account.update(following_count: FollowLimitValidator::LIMIT) } - expect(subject).to_not be_valid - expect(subject).to model_have_error_on_field(:base) + it { is_expected.to_not allow_value(account).for(:account).against(:base) } end - it 'is valid if account is only on the brink of following too many people' do - alice.update(following_count: FollowLimitValidator::LIMIT - 1) + context 'when account is on brink of following too many people' do + before { account.update(following_count: FollowLimitValidator::LIMIT - 1) } - expect(subject).to be_valid - expect(subject).to_not model_have_error_on_field(:base) + it { is_expected.to allow_value(account).for(:account).against(:base) } end end @@ -54,4 +53,58 @@ expect(account.requested?(target_account)).to be true end end + + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :follow, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + + describe 'Maintaining counters' do + subject { Fabricate.build :follow, account:, target_account: } + + let(:account) { Fabricate :account } + let(:target_account) { Fabricate :account } + + before do + account.account_stat.update following_count: 123 + target_account.account_stat.update followers_count: 123 + end + + describe 'saving the follow' do + it 'increments counters' do + expect { subject.save } + .to change(account, :following_count).by(1) + .and(change(target_account, :followers_count).by(1)) + end + end + + describe 'destroying the follow' do + it 'decrements counters' do + expect { subject.destroy } + .to change(account, :following_count).by(-1) + .and(change(target_account, :followers_count).by(-1)) + end + end + end + end end From bd0c826a3dd6dfb4602c573e826a49bb440c4ac8 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 03:47:46 -0400 Subject: [PATCH 349/467] Simplify model validation specs for `Announcement` (#32481) --- spec/models/announcement_spec.rb | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb index 8bd1e74b2975b5..884b352cb5ac77 100644 --- a/spec/models/announcement_spec.rb +++ b/spec/models/announcement_spec.rb @@ -67,18 +67,30 @@ it { is_expected.to validate_presence_of(:text) } describe 'ends_at' do - it 'validates presence when starts_at is present' do - record = Fabricate.build(:announcement, starts_at: 1.day.ago) + context 'when starts_at is present' do + subject { Fabricate.build :announcement, starts_at: 1.day.ago } - expect(record).to_not be_valid - expect(record.errors[:ends_at]).to be_present + it { is_expected.to validate_presence_of(:ends_at) } end - it 'does not validate presence when starts_at is missing' do - record = Fabricate.build(:announcement, starts_at: nil) + context 'when starts_at is missing' do + subject { Fabricate.build :announcement, starts_at: nil } - expect(record).to be_valid - expect(record.errors[:ends_at]).to_not be_present + it { is_expected.to_not validate_presence_of(:ends_at) } + end + end + + describe 'starts_at' do + context 'when ends_at is present' do + subject { Fabricate.build :announcement, ends_at: 1.day.ago } + + it { is_expected.to validate_presence_of(:starts_at) } + end + + context 'when ends_at is missing' do + subject { Fabricate.build :announcement, ends_at: nil } + + it { is_expected.to_not validate_presence_of(:starts_at) } end end end From d1b20ea8f70ecc44f78315c1bba1f7e16c0bfa15 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 03:50:20 -0400 Subject: [PATCH 350/467] Worker specs coverage increase (#32541) --- .../account_conversation_fabricator.rb | 7 ++++ spec/workers/account_refresh_worker_spec.rb | 10 +++-- .../followers_synchronization_worker_spec.rb | 33 ++++++++++++++++ spec/workers/push_conversation_worker_spec.rb | 26 ++++++++++++- spec/workers/push_update_worker_spec.rb | 28 ++++++++++++-- .../remote_account_refresh_worker_spec.rb | 38 +++++++++++++++++++ .../remove_featured_tag_worker_spec.rb | 31 +++++++++++++-- spec/workers/resolve_account_worker_spec.rb | 28 +++++++++++++- 8 files changed, 186 insertions(+), 15 deletions(-) create mode 100644 spec/fabricators/account_conversation_fabricator.rb create mode 100644 spec/workers/activitypub/followers_synchronization_worker_spec.rb create mode 100644 spec/workers/remote_account_refresh_worker_spec.rb diff --git a/spec/fabricators/account_conversation_fabricator.rb b/spec/fabricators/account_conversation_fabricator.rb new file mode 100644 index 00000000000000..6145ed8254cadc --- /dev/null +++ b/spec/fabricators/account_conversation_fabricator.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Fabricator(:account_conversation) do + account + conversation + status_ids { [Fabricate(:status).id] } +end diff --git a/spec/workers/account_refresh_worker_spec.rb b/spec/workers/account_refresh_worker_spec.rb index 3e88e8db28be7f..4408ef77a9433e 100644 --- a/spec/workers/account_refresh_worker_spec.rb +++ b/spec/workers/account_refresh_worker_spec.rb @@ -7,9 +7,7 @@ let(:service) { instance_double(ResolveAccountService, call: true) } describe '#perform' do - before do - allow(ResolveAccountService).to receive(:new).and_return(service) - end + before { stub_service } context 'when account does not exist' do it 'returns immediately without processing' do @@ -48,5 +46,11 @@ def outdated_webfinger_at (Account::BACKGROUND_REFRESH_INTERVAL + 3.days).ago end end + + def stub_service + allow(ResolveAccountService) + .to receive(:new) + .and_return(service) + end end end diff --git a/spec/workers/activitypub/followers_synchronization_worker_spec.rb b/spec/workers/activitypub/followers_synchronization_worker_spec.rb new file mode 100644 index 00000000000000..0847b247e378ad --- /dev/null +++ b/spec/workers/activitypub/followers_synchronization_worker_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::FollowersSynchronizationWorker do + let(:worker) { described_class.new } + let(:service) { instance_double(ActivityPub::SynchronizeFollowersService, call: true) } + + describe '#perform' do + before { stub_service } + + let(:account) { Fabricate(:account, domain: 'host.example') } + let(:url) { 'https://sync.url' } + + it 'sends the status to the service' do + worker.perform(account.id, url) + + expect(service).to have_received(:call).with(account, url) + end + + it 'returns nil for non-existent record' do + result = worker.perform(123_123_123, url) + + expect(result).to be(true) + end + end + + def stub_service + allow(ActivityPub::SynchronizeFollowersService) + .to receive(:new) + .and_return(service) + end +end diff --git a/spec/workers/push_conversation_worker_spec.rb b/spec/workers/push_conversation_worker_spec.rb index d651059c9a6ed8..a98c603c17d73c 100644 --- a/spec/workers/push_conversation_worker_spec.rb +++ b/spec/workers/push_conversation_worker_spec.rb @@ -6,8 +6,30 @@ let(:worker) { described_class.new } describe 'perform' do - it 'runs without error for missing record' do - expect { worker.perform(nil) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil) } + .to_not raise_error + end + end + + context 'with valid records' do + let(:account_conversation) { Fabricate :account_conversation } + + before { allow(redis).to receive(:publish) } + + it 'pushes message to timeline' do + expect { worker.perform(account_conversation.id) } + .to_not raise_error + + expect(redis) + .to have_received(:publish) + .with(redis_key, anything) + end + + def redis_key + "timeline:direct:#{account_conversation.account_id}" + end end end end diff --git a/spec/workers/push_update_worker_spec.rb b/spec/workers/push_update_worker_spec.rb index 6206ab59867a27..f3e0a128df55b8 100644 --- a/spec/workers/push_update_worker_spec.rb +++ b/spec/workers/push_update_worker_spec.rb @@ -6,11 +6,31 @@ let(:worker) { described_class.new } describe 'perform' do - it 'runs without error for missing record' do - account_id = nil - status_id = nil + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil, nil) } + .to_not raise_error + end + end + + context 'with valid records' do + let(:account) { Fabricate :account } + let(:status) { Fabricate :status } + + before { allow(redis).to receive(:publish) } + + it 'pushes message to timeline' do + expect { worker.perform(account.id, status.id) } + .to_not raise_error + + expect(redis) + .to have_received(:publish) + .with(redis_key, anything) + end - expect { worker.perform(account_id, status_id) }.to_not raise_error + def redis_key + "timeline:#{account.id}" + end end end end diff --git a/spec/workers/remote_account_refresh_worker_spec.rb b/spec/workers/remote_account_refresh_worker_spec.rb new file mode 100644 index 00000000000000..9938d971b9a653 --- /dev/null +++ b/spec/workers/remote_account_refresh_worker_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe RemoteAccountRefreshWorker do + let(:worker) { described_class.new } + let(:service) { instance_double(ActivityPub::FetchRemoteAccountService, call: true) } + + describe '#perform' do + before { stub_service } + + let(:account) { Fabricate(:account, domain: 'host.example') } + + it 'sends the status to the service' do + worker.perform(account.id) + + expect(service).to have_received(:call).with(account.uri) + end + + it 'returns nil for non-existent record' do + result = worker.perform(123_123_123) + + expect(result).to be_nil + end + + it 'returns nil for a local record' do + account = Fabricate :account, domain: nil + result = worker.perform(account) + expect(result).to be_nil + end + + def stub_service + allow(ActivityPub::FetchRemoteAccountService) + .to receive(:new) + .and_return(service) + end + end +end diff --git a/spec/workers/remove_featured_tag_worker_spec.rb b/spec/workers/remove_featured_tag_worker_spec.rb index 7866824ee751fc..a8a5bcea81d7eb 100644 --- a/spec/workers/remove_featured_tag_worker_spec.rb +++ b/spec/workers/remove_featured_tag_worker_spec.rb @@ -4,12 +4,35 @@ RSpec.describe RemoveFeaturedTagWorker do let(:worker) { described_class.new } + let(:service) { instance_double(RemoveFeaturedTagService, call: true) } describe 'perform' do - it 'runs without error for missing record' do - account_id = nil - featured_tag_id = nil - expect { worker.perform(account_id, featured_tag_id) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil, nil) } + .to_not raise_error + end + end + + context 'with real records' do + before { stub_service } + + let(:account) { Fabricate :account } + let(:featured_tag) { Fabricate :featured_tag } + + it 'calls the service for processing' do + worker.perform(account.id, featured_tag.id) + + expect(service) + .to have_received(:call) + .with(be_an(Account), be_an(FeaturedTag)) + end + + def stub_service + allow(RemoveFeaturedTagService) + .to receive(:new) + .and_return(service) + end end end end diff --git a/spec/workers/resolve_account_worker_spec.rb b/spec/workers/resolve_account_worker_spec.rb index de349adacb6f39..58c2c1212924e5 100644 --- a/spec/workers/resolve_account_worker_spec.rb +++ b/spec/workers/resolve_account_worker_spec.rb @@ -4,10 +4,34 @@ RSpec.describe ResolveAccountWorker do let(:worker) { described_class.new } + let(:service) { instance_double(ResolveAccountService, call: true) } describe 'perform' do - it 'runs without error for missing record' do - expect { worker.perform(nil) }.to_not raise_error + context 'with missing values' do + it 'runs without error' do + expect { worker.perform(nil) } + .to_not raise_error + end + end + + context 'with a URI' do + before { stub_service } + + let(:uri) { 'https://host/path/value' } + + it 'initiates account resolution' do + worker.perform(uri) + + expect(service) + .to have_received(:call) + .with(uri) + end + + def stub_service + allow(ResolveAccountService) + .to receive(:new) + .and_return(service) + end end end end From 05f23df3b7ceff2e9debac5f6232271620b78447 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Wed, 23 Oct 2024 10:02:31 +0200 Subject: [PATCH 351/467] Add endpoint to remove web push subscription (#32626) --- .../api/web/push_subscriptions_controller.rb | 9 ++- app/models/web/push_subscription.rb | 2 + app/workers/web/push_notification_worker.rb | 12 +++- config/routes/api.rb | 2 +- .../api/web/push_subscriptions_spec.rb | 55 +++++++++++++++++++ .../web/push_notification_worker_spec.rb | 1 + 6 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 spec/requests/api/web/push_subscriptions_spec.rb diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb index 167d16fc4d838c..f5159614278a0b 100644 --- a/app/controllers/api/web/push_subscriptions_controller.rb +++ b/app/controllers/api/web/push_subscriptions_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Api::Web::PushSubscriptionsController < Api::Web::BaseController - before_action :require_user! + before_action :require_user!, except: :destroy before_action :set_push_subscription, only: :update before_action :destroy_previous_subscriptions, only: :create, if: :prior_subscriptions? after_action :update_session_with_subscription, only: :create @@ -17,6 +17,13 @@ def update render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer end + def destroy + push_subscription = ::Web::PushSubscription.find_by_token_for(:unsubscribe, params[:id]) + push_subscription&.destroy + + head 200 + end + private def active_session diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index 9d30881bf38238..656040d2cec43b 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -29,6 +29,8 @@ class Web::PushSubscription < ApplicationRecord delegate :locale, to: :associated_user + generates_token_for :unsubscribe, expires_in: Web::PushNotificationWorker::TTL + def pushable?(notification) policy_allows_notification?(notification) && alert_enabled_for_notification_type?(notification) end diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index e771928ef31fa7..824e7b59407d6b 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -2,10 +2,11 @@ class Web::PushNotificationWorker include Sidekiq::Worker + include RoutingHelper sidekiq_options queue: 'push', retry: 5 - TTL = 48.hours.to_s + TTL = 48.hours URGENCY = 'normal' def perform(subscription_id, notification_id) @@ -23,12 +24,13 @@ def perform(subscription_id, notification_id) request.add_headers( 'Content-Type' => 'application/octet-stream', - 'Ttl' => TTL, + 'Ttl' => TTL.to_s, 'Urgency' => URGENCY, 'Content-Encoding' => 'aesgcm', 'Encryption' => "salt=#{Webpush.encode64(payload.fetch(:salt)).delete('=')}", 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{web_push_request.crypto_key_header}", - 'Authorization' => web_push_request.authorization_header + 'Authorization' => web_push_request.authorization_header, + 'Unsubscribe-URL' => subscription_url ) request.perform do |response| @@ -72,4 +74,8 @@ def serialized_notification def request_pool RequestPool.current end + + def subscription_url + api_web_push_subscription_url(id: @subscription.generate_token_for(:unsubscribe)) + end end diff --git a/config/routes/api.rb b/config/routes/api.rb index 46907a1ce2f3db..57ce3ba9fd45c7 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -346,7 +346,7 @@ namespace :web do resource :settings, only: [:update] resources :embeds, only: [:show] - resources :push_subscriptions, only: [:create] do + resources :push_subscriptions, only: [:create, :destroy] do member do put :update end diff --git a/spec/requests/api/web/push_subscriptions_spec.rb b/spec/requests/api/web/push_subscriptions_spec.rb new file mode 100644 index 00000000000000..a903dc6f89dae8 --- /dev/null +++ b/spec/requests/api/web/push_subscriptions_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'API Web Push Subscriptions' do + describe 'DELETE /api/web/push_subscriptions/:id' do + subject { delete api_web_push_subscription_path(token) } + + context 'when the subscription exists' do + let!(:web_push_subscription) do + Fabricate(:web_push_subscription) + end + let(:token) do + web_push_subscription.generate_token_for(:unsubscribe) + end + + it 'deletes the subscription' do + expect { subject } + .to change(Web::PushSubscription, :count).by(-1) + + expect(response).to have_http_status(200) + end + end + + context 'when the subscription does not exist' do + let(:web_push_subscription) do + Fabricate(:web_push_subscription) + end + let(:token) do + web_push_subscription.generate_token_for(:unsubscribe) + end + + before do + token # memoize before destroying the record + web_push_subscription.destroy! + end + + it 'does nothing' do + subject + + expect(response).to have_http_status(200) + end + end + + context 'when the token is invalid' do + let(:token) { 'invalid--invalid' } + + it 'does nothing' do + subject + + expect(response).to have_http_status(200) + end + end + end +end diff --git a/spec/workers/web/push_notification_worker_spec.rb b/spec/workers/web/push_notification_worker_spec.rb index 7f836d99e431f9..4993d467b36752 100644 --- a/spec/workers/web/push_notification_worker_spec.rb +++ b/spec/workers/web/push_notification_worker_spec.rb @@ -61,6 +61,7 @@ def web_push_endpoint_request 'Ttl' => '172800', 'Urgency' => 'normal', 'Authorization' => 'WebPush jwt.encoded.payload', + 'Unsubscribe-URL' => %r{/api/web/push_subscriptions/}, }, body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr" ) From 393f0a0159f8c12316e903979f6a506e44ea2b50 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 23 Oct 2024 11:47:23 +0200 Subject: [PATCH 352/467] Redesign Content Warning and filters (#32543) --- .../mastodon/components/content_warning.tsx | 2 +- .../mastodon/components/filter_warning.tsx | 9 ++-- .../mastodon/components/status_banner.tsx | 15 ++++--- app/javascript/mastodon/locales/en.json | 3 +- .../styles/mastodon/components.scss | 41 +++++++------------ 5 files changed, 33 insertions(+), 37 deletions(-) diff --git a/app/javascript/mastodon/components/content_warning.tsx b/app/javascript/mastodon/components/content_warning.tsx index df8afca74d6a86..c1c879b55d27c8 100644 --- a/app/javascript/mastodon/components/content_warning.tsx +++ b/app/javascript/mastodon/components/content_warning.tsx @@ -8,7 +8,7 @@ export const ContentWarning: React.FC<{

diff --git a/app/javascript/mastodon/components/filter_warning.tsx b/app/javascript/mastodon/components/filter_warning.tsx index 4305e43038df9f..5eaaac4ba38686 100644 --- a/app/javascript/mastodon/components/filter_warning.tsx +++ b/app/javascript/mastodon/components/filter_warning.tsx @@ -10,13 +10,16 @@ export const FilterWarning: React.FC<{

{chunks}, + }} />

diff --git a/app/javascript/mastodon/components/status_banner.tsx b/app/javascript/mastodon/components/status_banner.tsx index 8ff17a9b2e4b84..d25c05d6dbe098 100644 --- a/app/javascript/mastodon/components/status_banner.tsx +++ b/app/javascript/mastodon/components/status_banner.tsx @@ -1,8 +1,8 @@ import { FormattedMessage } from 'react-intl'; export enum BannerVariant { - Yellow = 'yellow', - Blue = 'blue', + Warning = 'warning', + Filter = 'filter', } export const StatusBanner: React.FC<{ @@ -11,9 +11,9 @@ export const StatusBanner: React.FC<{ expanded?: boolean; onClick?: () => void; }> = ({ children, variant, expanded, onClick }) => ( -
+ ) : variant === BannerVariant.Warning ? ( + ) : ( )} -
+ ); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 46b7d90dba8d50..f2d37e67a60c43 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Unfollow user?", "content_warning.hide": "Hide post", "content_warning.show": "Show anyway", + "content_warning.show_more": "Show more", "conversation.delete": "Delete conversation", "conversation.mark_as_read": "Mark as read", "conversation.open": "View conversation", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "filter_warning.matches_filter": "Matches filter “{title}”", + "filter_warning.matches_filter": "Matches filter “{title}”", "filtered_notifications_banner.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know", "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a20e84ce757a80..673e47f429833b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -11109,19 +11109,21 @@ noscript { } .content-warning { + display: block; box-sizing: border-box; background: rgba($ui-highlight-color, 0.05); color: $secondary-text-color; - border-top: 1px solid; - border-bottom: 1px solid; - border-color: rgba($ui-highlight-color, 0.15); + border: 1px solid rgba($ui-highlight-color, 0.15); + border-radius: 8px; padding: 8px (5px + 8px); position: relative; font-size: 15px; line-height: 22px; + cursor: pointer; p { margin-bottom: 8px; + font-weight: 500; } .link-button { @@ -11130,31 +11132,16 @@ noscript { font-weight: 500; } - &::before, - &::after { - content: ''; - display: block; - position: absolute; - height: 100%; - background: url('../images/warning-stripes.svg') repeat-y; - width: 5px; - top: 0; - } - - &::before { - border-start-start-radius: 4px; - border-end-start-radius: 4px; - inset-inline-start: 0; - } + &--filter { + color: $darker-text-color; - &::after { - border-start-end-radius: 4px; - border-end-end-radius: 4px; - inset-inline-end: 0; - } + p { + font-weight: normal; + } - &--filter::before, - &--filter::after { - background-image: url('../images/filter-stripes.svg'); + .filter-name { + font-weight: 500; + color: $secondary-text-color; + } } } From c3e684b715a9e59344201c87ccdf94ed00d796aa Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:25:49 -0400 Subject: [PATCH 353/467] Remove unused svg logos (#32581) --- app/javascript/images/logo_full.svg | 1 - app/javascript/images/logo_transparent.svg | 1 - 2 files changed, 2 deletions(-) delete mode 100644 app/javascript/images/logo_full.svg delete mode 100644 app/javascript/images/logo_transparent.svg diff --git a/app/javascript/images/logo_full.svg b/app/javascript/images/logo_full.svg deleted file mode 100644 index 03bcf93e39d260..00000000000000 --- a/app/javascript/images/logo_full.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/javascript/images/logo_transparent.svg b/app/javascript/images/logo_transparent.svg deleted file mode 100644 index a1e7b403e034c3..00000000000000 --- a/app/javascript/images/logo_transparent.svg +++ /dev/null @@ -1 +0,0 @@ - From fae1de699cf10879fa66881acb13422b69949b80 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:26:51 -0400 Subject: [PATCH 354/467] Remove duplicate indexes from database (#32454) --- db/migrate/20241014010506_remove_duplicate_indexes.rb | 10 ++++++++++ db/schema.rb | 6 +----- 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20241014010506_remove_duplicate_indexes.rb diff --git a/db/migrate/20241014010506_remove_duplicate_indexes.rb b/db/migrate/20241014010506_remove_duplicate_indexes.rb new file mode 100644 index 00000000000000..50e0e6ffcfc00c --- /dev/null +++ b/db/migrate/20241014010506_remove_duplicate_indexes.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class RemoveDuplicateIndexes < ActiveRecord::Migration[7.1] + def change + remove_index :account_aliases, :account_id + remove_index :account_relationship_severance_events, :account_id + remove_index :custom_filter_statuses, :status_id + remove_index :webauthn_credentials, :user_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 68067841e03c66..5f7b3a3305cfd5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do +ActiveRecord::Schema[7.1].define(version: 2024_10_14_010506) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -21,7 +21,6 @@ t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.index ["account_id", "uri"], name: "index_account_aliases_on_account_id_and_uri", unique: true - t.index ["account_id"], name: "index_account_aliases_on_account_id" end create_table "account_conversations", force: :cascade do |t| @@ -99,7 +98,6 @@ t.integer "followers_count", default: 0, null: false t.integer "following_count", default: 0, null: false t.index ["account_id", "relationship_severance_event_id"], name: "idx_on_account_id_relationship_severance_event_id_7bd82bf20e", unique: true - t.index ["account_id"], name: "index_account_relationship_severance_events_on_account_id" t.index ["relationship_severance_event_id"], name: "idx_on_relationship_severance_event_id_403f53e707" end @@ -397,7 +395,6 @@ t.datetime "updated_at", null: false t.index ["custom_filter_id"], name: "index_custom_filter_statuses_on_custom_filter_id" t.index ["status_id", "custom_filter_id"], name: "index_custom_filter_statuses_on_status_id_and_custom_filter_id", unique: true - t.index ["status_id"], name: "index_custom_filter_statuses_on_status_id" end create_table "custom_filters", force: :cascade do |t| @@ -1202,7 +1199,6 @@ t.datetime "updated_at", precision: nil, null: false t.index ["external_id"], name: "index_webauthn_credentials_on_external_id", unique: true t.index ["user_id", "nickname"], name: "index_webauthn_credentials_on_user_id_and_nickname", unique: true - t.index ["user_id"], name: "index_webauthn_credentials_on_user_id" end create_table "webhooks", force: :cascade do |t| From 2f906ed55ab0b9887a3aee66dc8c29cf7c1d7545 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:29:01 -0400 Subject: [PATCH 355/467] Constants for account refresh (#32420) --- app/models/account.rb | 6 ++++-- spec/models/account_spec.rb | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 708415b6eef1ab..957ccc73c46c79 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -65,6 +65,8 @@ class Account < ApplicationRecord ) BACKGROUND_REFRESH_INTERVAL = 1.week.freeze + REFRESH_DEADLINE = 6.hours + STALE_THRESHOLD = 1.day DEFAULT_FIELDS_SIZE = 4 INSTANCE_ACTOR_ID = -99 @@ -229,13 +231,13 @@ def to_webfinger_s end def possibly_stale? - last_webfingered_at.nil? || last_webfingered_at <= 1.day.ago + last_webfingered_at.nil? || last_webfingered_at <= STALE_THRESHOLD.ago end def schedule_refresh_if_stale! return unless last_webfingered_at.present? && last_webfingered_at <= BACKGROUND_REFRESH_INTERVAL.ago - AccountRefreshWorker.perform_in(rand(6.hours.to_i), id) + AccountRefreshWorker.perform_in(rand(REFRESH_DEADLINE), id) end def refresh! diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index a8f6ed74937af4..d129ef280dfad3 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -208,16 +208,16 @@ end end - context 'when last_webfingered_at is more than 24 hours before' do - let(:last_webfingered_at) { 25.hours.ago } + context 'when last_webfingered_at is before the threshold' do + let(:last_webfingered_at) { (described_class::STALE_THRESHOLD + 1.hour).ago } it 'returns true' do expect(account.possibly_stale?).to be true end end - context 'when last_webfingered_at is less than 24 hours before' do - let(:last_webfingered_at) { 23.hours.ago } + context 'when last_webfingered_at is after the threshold' do + let(:last_webfingered_at) { (described_class::STALE_THRESHOLD - 1.hour).ago } it 'returns false' do expect(account.possibly_stale?).to be false From a850be4ad3da31f3bc8a708da539499a9b2e1746 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:30:09 -0400 Subject: [PATCH 356/467] Match ruby version in lockfile to version in `.ruby-version` (#31995) --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 957146b16b63f5..f5264e8db233d4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1058,7 +1058,7 @@ DEPENDENCIES xorcist (~> 1.1) RUBY VERSION - ruby 3.3.4p94 + ruby 3.3.5p100 BUNDLED WITH - 2.5.18 + 2.5.22 From 5a4f4f3e8361c4155a2c83aa70f4fba6b9f901f6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:31:03 -0400 Subject: [PATCH 357/467] Remove single-use `ProfileStories` method (#31164) --- spec/support/stories/profile_stories.rb | 14 +------------- spec/system/profile_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/spec/support/stories/profile_stories.rb b/spec/support/stories/profile_stories.rb index 07eaaca9fb93b0..43a8e170ccb5a2 100644 --- a/spec/support/stories/profile_stories.rb +++ b/spec/support/stories/profile_stories.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module ProfileStories - attr_reader :bob, :alice, :alice_bio + attr_reader :bob def fill_in_auth_details(email, password) fill_in 'user_email', with: email @@ -31,18 +31,6 @@ def as_a_logged_in_admin bob.update!(role: UserRole.find_by!(name: 'Admin')) end - def with_alice_as_local_user - @alice_bio = '@alice and @bob are fictional characters commonly used as' \ - 'placeholder names in #cryptology, as well as #science and' \ - 'engineering 📖 literature. Not affiliated with @pepe.' - - @alice = Fabricate( - :user, - email: 'alice@example.com', password: password, confirmed_at: confirmed_at, - account: Fabricate(:account, username: 'alice', note: @alice_bio) - ) - end - def confirmed_at @confirmed_at ||= Time.zone.now end diff --git a/spec/system/profile_spec.rb b/spec/system/profile_spec.rb index 7e3cbfd334ea44..a05a146fef7af4 100644 --- a/spec/system/profile_spec.rb +++ b/spec/system/profile_spec.rb @@ -11,10 +11,10 @@ before do as_a_logged_in_user - with_alice_as_local_user + Fabricate(:user, account: Fabricate(:account, username: 'alice')) end - it 'I can view Annes public account' do + it 'I can view public account page for Alice' do visit account_path('alice') expect(subject).to have_title("alice (@alice@#{local_domain})") From 35f008aa2a16240dc20d543ecc1089aa19332a00 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 09:32:18 -0400 Subject: [PATCH 358/467] Move translation service config to `config_for` yml (#30663) --- app/lib/translation_service.rb | 20 +++++++++++++++----- config/application.rb | 2 ++ config/translation.yml | 7 +++++++ 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 config/translation.yml diff --git a/app/lib/translation_service.rb b/app/lib/translation_service.rb index bfe5de44f87804..ee268d7a7c3649 100644 --- a/app/lib/translation_service.rb +++ b/app/lib/translation_service.rb @@ -8,17 +8,27 @@ class QuotaExceededError < Error; end class UnexpectedResponseError < Error; end def self.configured - if ENV['DEEPL_API_KEY'].present? - TranslationService::DeepL.new(ENV.fetch('DEEPL_PLAN', 'free'), ENV['DEEPL_API_KEY']) - elsif ENV['LIBRE_TRANSLATE_ENDPOINT'].present? - TranslationService::LibreTranslate.new(ENV['LIBRE_TRANSLATE_ENDPOINT'], ENV['LIBRE_TRANSLATE_API_KEY']) + if configuration.deepl[:api_key].present? + TranslationService::DeepL.new( + configuration.deepl[:plan], + configuration.deepl[:api_key] + ) + elsif configuration.libre_translate[:endpoint].present? + TranslationService::LibreTranslate.new( + configuration.libre_translate[:endpoint], + configuration.libre_translate[:api_key] + ) else raise NotConfiguredError end end def self.configured? - ENV['DEEPL_API_KEY'].present? || ENV['LIBRE_TRANSLATE_ENDPOINT'].present? + configuration.deepl[:api_key].present? || configuration.libre_translate[:endpoint].present? + end + + def self.configuration + Rails.configuration.x.translation end def languages diff --git a/config/application.rb b/config/application.rb index 5e2f44453d4d9c..06411139828185 100644 --- a/config/application.rb +++ b/config/application.rb @@ -109,6 +109,8 @@ class Application < Rails::Application end end + config.x.translation = config_for(:translation) + config.to_prepare do Doorkeeper::AuthorizationsController.layout 'modal' Doorkeeper::AuthorizedApplicationsController.layout 'admin' diff --git a/config/translation.yml b/config/translation.yml new file mode 100644 index 00000000000000..e074c5d0f22732 --- /dev/null +++ b/config/translation.yml @@ -0,0 +1,7 @@ +shared: + deepl: + api_key: <%= ENV.fetch('DEEPL_API_KEY', nil) %> + plan: <%= ENV.fetch('DEEPL_PLAN', 'free') %> + libre_translate: + api_key: <%= ENV.fetch('LIBRE_TRANSLATE_API_KEY', nil) %> + endpoint: <%= ENV.fetch('LIBRE_TRANSLATE_ENDPOINT', nil) %> From 97b18d10b42bb61baeec4a5612036e170af33874 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 23 Oct 2024 10:25:43 -0400 Subject: [PATCH 359/467] Move hcaptcha service config to `config_for` yml (#30662) --- app/controllers/concerns/auth/captcha_concern.rb | 2 +- app/helpers/admin/settings_helper.rb | 2 +- config/application.rb | 1 + config/captcha.yml | 3 +++ 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 config/captcha.yml diff --git a/app/controllers/concerns/auth/captcha_concern.rb b/app/controllers/concerns/auth/captcha_concern.rb index cfd93978cea576..c01da212499f04 100644 --- a/app/controllers/concerns/auth/captcha_concern.rb +++ b/app/controllers/concerns/auth/captcha_concern.rb @@ -10,7 +10,7 @@ module Auth::CaptchaConcern end def captcha_available? - ENV['HCAPTCHA_SECRET_KEY'].present? && ENV['HCAPTCHA_SITE_KEY'].present? + Rails.configuration.x.captcha.secret_key.present? && Rails.configuration.x.captcha.site_key.present? end def captcha_enabled? diff --git a/app/helpers/admin/settings_helper.rb b/app/helpers/admin/settings_helper.rb index 6937331e1a6df9..9b950d5a6370f4 100644 --- a/app/helpers/admin/settings_helper.rb +++ b/app/helpers/admin/settings_helper.rb @@ -2,7 +2,7 @@ module Admin::SettingsHelper def captcha_available? - ENV['HCAPTCHA_SECRET_KEY'].present? && ENV['HCAPTCHA_SITE_KEY'].present? + Rails.configuration.x.captcha.secret_key.present? && Rails.configuration.x.captcha.site_key.present? end def login_activity_title(activity) diff --git a/config/application.rb b/config/application.rb index 06411139828185..f94366d36f49db 100644 --- a/config/application.rb +++ b/config/application.rb @@ -109,6 +109,7 @@ class Application < Rails::Application end end + config.x.captcha = config_for(:captcha) config.x.translation = config_for(:translation) config.to_prepare do diff --git a/config/captcha.yml b/config/captcha.yml new file mode 100644 index 00000000000000..a9f54588c71682 --- /dev/null +++ b/config/captcha.yml @@ -0,0 +1,3 @@ +shared: + secret_key: <%= ENV.fetch('HCAPTCHA_SECRET_KEY', nil) %> + site_key: <%= ENV.fetch('HCAPTCHA_SITE_KEY', nil) %> From d11231a420cf80c3f924233d398002639cac0f8b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 24 Oct 2024 09:28:22 +0200 Subject: [PATCH 360/467] Change design of rich text elements in web UI (#32633) --- app/javascript/images/quote.svg | 3 + .../styles/mastodon-light/variables.scss | 3 + app/javascript/styles/mastodon/rich_text.scss | 74 +++++++++++++++++-- app/javascript/styles/mastodon/variables.scss | 3 + 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 app/javascript/images/quote.svg diff --git a/app/javascript/images/quote.svg b/app/javascript/images/quote.svg new file mode 100644 index 00000000000000..ae6fbbe04a9f9b --- /dev/null +++ b/app/javascript/images/quote.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 76bdc4022e3ef0..777c622ace0855 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -76,4 +76,7 @@ body { --background-color-tint: rgba(255, 255, 255, 80%); --background-filter: blur(10px); --on-surface-color: #{transparentize($ui-base-color, 0.65)}; + --rich-text-container-color: rgba(255, 216, 231, 100%); + --rich-text-text-color: rgba(114, 47, 83, 100%); + --rich-text-decorations-color: rgba(255, 175, 212, 100%); } diff --git a/app/javascript/styles/mastodon/rich_text.scss b/app/javascript/styles/mastodon/rich_text.scss index c57db26e036c32..52412274b61ef2 100644 --- a/app/javascript/styles/mastodon/rich_text.scss +++ b/app/javascript/styles/mastodon/rich_text.scss @@ -2,9 +2,29 @@ .e-content, .edit-indicator__content, .reply-indicator__content { + code { + background: var(--rich-text-container-color); + padding: 4px; + border-radius: 4px; + color: var(--rich-text-text-color); + font-size: 0.85em; + } + + pre { + background: var(--rich-text-container-color); + padding: 8px; + border-radius: 4px; + color: var(--rich-text-text-color); + + code { + padding: 0; + background: transparent; + } + } + pre, blockquote { - margin-bottom: 20px; + margin-bottom: 22px; white-space: pre-wrap; unicode-bidi: plaintext; @@ -14,19 +34,45 @@ } blockquote { - padding-inline-start: 10px; - border-inline-start: 3px solid $darker-text-color; - color: $darker-text-color; + padding-inline-start: 32px; + color: var(--rich-text-text-color); white-space: normal; + position: relative; + + &::before { + display: block; + content: ''; + width: 24px; + height: 20px; + mask-image: url('../images/quote.svg'); + background-color: var(--rich-text-decorations-color); + position: absolute; + inset-inline-start: 0; + top: 0; + } + + blockquote { + margin-top: 4px; + border-inline-start: 3px solid var(--rich-text-decorations-color); + padding-inline-start: 16px; + + &::before { + display: none; + } + } - p:last-child { + p:last-of-type { margin-bottom: 0; } } & > ul, & > ol { - margin-bottom: 20px; + margin-bottom: 22px; + + &:last-child { + margin-bottom: 0; + } } b, @@ -41,7 +87,15 @@ ul, ol { - margin-inline-start: 2em; + padding-inline-start: 24px; + + li { + padding-inline-start: 8px; + + &::marker { + text-align: end; + } + } p { margin: 0; @@ -49,7 +103,11 @@ } ul { - list-style-type: disc; + list-style-type: '•'; + + li::marker { + text-align: start; + } } ol { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index baaec5f58f5942..fe36e166311e81 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -116,4 +116,7 @@ $font-monospace: 'mastodon-font-monospace' !default; --error-background-color: #{darken($error-red, 16%)}; --error-active-background-color: #{darken($error-red, 12%)}; --on-error-color: #fff; + --rich-text-container-color: rgba(87, 24, 60, 100%); + --rich-text-text-color: rgba(255, 175, 212, 100%); + --rich-text-decorations-color: rgba(128, 58, 95, 100%); } From 745c4f900af31ef1282fd4ac6b982293fea5bed6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 04:02:54 -0400 Subject: [PATCH 361/467] Remove unused `ApplicationHelper#visibility_icon` helper method (#32644) --- app/helpers/application_helper.rb | 12 ------------ spec/helpers/application_helper_spec.rb | 22 ---------------------- 2 files changed, 34 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4caf0398fefe65..e36de192557386 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -120,18 +120,6 @@ def check_icon inline_svg_tag 'check.svg' end - def visibility_icon(status) - if status.public_visibility? - material_symbol('globe', title: I18n.t('statuses.visibilities.public')) - elsif status.unlisted_visibility? - material_symbol('lock_open', title: I18n.t('statuses.visibilities.unlisted')) - elsif status.private_visibility? || status.limited_visibility? - material_symbol('lock', title: I18n.t('statuses.visibilities.private')) - elsif status.direct_visibility? - material_symbol('alternate_email', title: I18n.t('statuses.visibilities.direct')) - end - end - def interrelationships_icon(relationships, account_id) if relationships.following[account_id] && relationships.followed_by[account_id] material_symbol('sync_alt', title: I18n.t('relationships.mutual'), class: 'active passive') diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 0f78dc82f511e3..ffcc5b81b66c49 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -227,28 +227,6 @@ def current_theme = 'default' end end - describe 'visibility_icon' do - it 'returns a globe icon for a public visible status' do - result = helper.visibility_icon Status.new(visibility: 'public') - expect(result).to match(/globe/) - end - - it 'returns an unlock icon for a unlisted visible status' do - result = helper.visibility_icon Status.new(visibility: 'unlisted') - expect(result).to match(/lock_open/) - end - - it 'returns a lock icon for a private visible status' do - result = helper.visibility_icon Status.new(visibility: 'private') - expect(result).to match(/lock/) - end - - it 'returns an at icon for a direct visible status' do - result = helper.visibility_icon Status.new(visibility: 'direct') - expect(result).to match(/alternate_email/) - end - end - describe 'title' do it 'returns site title on production environment' do Setting.site_title = 'site title' From 5c910dc82eb07a0e69e7788280321383405f8196 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 04:04:29 -0400 Subject: [PATCH 362/467] Add coverage for `DatabaseHelper` primary/replica methods (#32642) --- spec/helpers/database_helper_spec.rb | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 spec/helpers/database_helper_spec.rb diff --git a/spec/helpers/database_helper_spec.rb b/spec/helpers/database_helper_spec.rb new file mode 100644 index 00000000000000..9ea398bf4ca38e --- /dev/null +++ b/spec/helpers/database_helper_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DatabaseHelper do + context 'when a replica is enabled' do + around do |example| + ClimateControl.modify REPLICA_DB_NAME: 'prod-relay-quantum-tunnel-mirror' do + example.run + end + end + + before { allow(ApplicationRecord).to receive(:connected_to) } + + describe '#with_read_replica' do + it 'uses the replica for connections' do + helper.with_read_replica { _x = 1 } + + expect(ApplicationRecord) + .to have_received(:connected_to).with(role: :reading, prevent_writes: true) + end + end + + describe '#with_primary' do + it 'uses the primary for connections' do + helper.with_primary { _x = 1 } + + expect(ApplicationRecord) + .to have_received(:connected_to).with(role: :writing) + end + end + end + + context 'when a replica is not enabled' do + around do |example| + ClimateControl.modify REPLICA_DB_NAME: nil do + example.run + end + end + + before { allow(ApplicationRecord).to receive(:connected_to) } + + describe '#with_read_replica' do + it 'does not use the replica for connections' do + helper.with_read_replica { _x = 1 } + + expect(ApplicationRecord) + .to_not have_received(:connected_to).with(role: :reading, prevent_writes: true) + end + end + + describe '#with_primary' do + it 'does not use the primary for connections' do + helper.with_primary { _x = 1 } + + expect(ApplicationRecord) + .to_not have_received(:connected_to).with(role: :writing) + end + end + end +end From 67504dbf9c51f458a912d98106ef7b5ae79d63fc Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 08:43:40 -0400 Subject: [PATCH 363/467] Simplify uniqueness validation spec for `IpBlock` (#32066) --- spec/models/ip_block_spec.rb | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb index ac9f5db601329e..b85856780ae970 100644 --- a/spec/models/ip_block_spec.rb +++ b/spec/models/ip_block_spec.rb @@ -3,18 +3,13 @@ require 'rails_helper' RSpec.describe IpBlock do - describe 'validations' do + describe 'Validations' do + subject { Fabricate.build :ip_block } + it { is_expected.to validate_presence_of(:ip) } it { is_expected.to validate_presence_of(:severity) } - it 'validates ip uniqueness', :aggregate_failures do - described_class.create!(ip: '127.0.0.1', severity: :no_access) - - ip_block = described_class.new(ip: '127.0.0.1', severity: :no_access) - - expect(ip_block).to_not be_valid - expect(ip_block).to model_have_error_on_field(:ip) - end + it { is_expected.to validate_uniqueness_of(:ip) } end describe '#to_log_human_identifier' do From b16435e79f2b695a58effcadc5077ceedd559507 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 08:44:13 -0400 Subject: [PATCH 364/467] Explore more resplendent model validation specs for `Form::AdminSettings` (#32465) --- spec/models/form/admin_settings_spec.rb | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/spec/models/form/admin_settings_spec.rb b/spec/models/form/admin_settings_spec.rb index 6080b9e081d39e..73106f2b69ce36 100644 --- a/spec/models/form/admin_settings_spec.rb +++ b/spec/models/form/admin_settings_spec.rb @@ -3,33 +3,17 @@ require 'rails_helper' RSpec.describe Form::AdminSettings do - describe 'validations' do + describe 'Validations' do describe 'site_contact_username' do context 'with no accounts' do - it 'is not valid' do - setting = described_class.new(site_contact_username: 'Test') - setting.valid? - - expect(setting).to model_have_error_on_field(:site_contact_username) - end + it { is_expected.to_not allow_value('Test').for(:site_contact_username) } end context 'with an account' do before { Fabricate(:account, username: 'Glorp') } - it 'is not valid when account doesnt match' do - setting = described_class.new(site_contact_username: 'Test') - setting.valid? - - expect(setting).to model_have_error_on_field(:site_contact_username) - end - - it 'is valid when account matches' do - setting = described_class.new(site_contact_username: 'Glorp') - setting.valid? - - expect(setting).to_not model_have_error_on_field(:site_contact_username) - end + it { is_expected.to_not allow_value('Test').for(:site_contact_username) } + it { is_expected.to allow_value('Glorp').for(:site_contact_username) } end end end From dea6c454fdc1de099918ab4cca33ec397f9f9ce0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 08:47:06 -0400 Subject: [PATCH 365/467] Contribute more coverage for `Account` model (#32474) --- spec/models/account_spec.rb | 154 ++++++++++++++---------------------- 1 file changed, 59 insertions(+), 95 deletions(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index d129ef280dfad3..bd897a2999503b 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -752,26 +752,42 @@ end end - describe '#prepare_contents' do - subject { Fabricate.build :account, domain: domain, note: ' padded note ', display_name: ' padded name ' } + describe 'Callbacks' do + describe 'Stripping content when required' do + context 'with a remote account' do + subject { Fabricate.build :account, domain: 'host.example', note: ' note ', display_name: ' display name ' } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :note) + .and not_change(subject, :display_name) + end + end - context 'with local account' do - let(:domain) { nil } + context 'with a local account' do + subject { Fabricate.build :account, domain: nil, note:, display_name: } - it 'strips values' do - expect { subject.valid? } - .to change(subject, :note).to('padded note') - .and(change(subject, :display_name).to('padded name')) - end - end + context 'with populated fields' do + let(:note) { ' note ' } + let(:display_name) { ' display name ' } + + it 'strips content' do + expect { subject.valid? } + .to change(subject, :note).to('note') + .and change(subject, :display_name).to('display name') + end + end - context 'with remote account' do - let(:domain) { 'host.example' } + context 'with empty fields' do + let(:note) { nil } + let(:display_name) { nil } - it 'preserves values' do - expect { subject.valid? } - .to not_change(subject, :note) - .and(not_change(subject, :display_name)) + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :note) + .and not_change(subject, :display_name) + end + end end end end @@ -826,32 +842,30 @@ end end - describe 'validations' do + describe 'Validations' do it { is_expected.to validate_presence_of(:username) } - context 'when is local' do - it 'is invalid if the username is not unique in case-insensitive comparison among local accounts' do - _account = Fabricate(:account, username: 'the_doctor') - non_unique_account = Fabricate.build(:account, username: 'the_Doctor') - non_unique_account.valid? - expect(non_unique_account).to model_have_error_on_field(:username) - end + context 'when account is local' do + subject { Fabricate.build :account, domain: nil } - it 'is invalid if the username is reserved' do - account = Fabricate.build(:account, username: 'support') - account.valid? - expect(account).to model_have_error_on_field(:username) + context 'with an existing differently-cased username account' do + before { Fabricate :account, username: 'the_doctor' } + + it { is_expected.to_not allow_value('the_Doctor').for(:username) } end + it { is_expected.to_not allow_value('support').for(:username) } + it 'is valid when username is reserved but record has already been created' do account = Fabricate.build(:account, username: 'support') account.save(validate: false) expect(account.valid?).to be true end - it 'is valid if we are creating an instance actor account with a period' do - account = Fabricate.build(:account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true, username: 'example.com') - expect(account.valid?).to be true + context 'with the instance actor' do + subject { Fabricate.build :account, id: described_class::INSTANCE_ACTOR_ID, actor_type: 'Application', locked: true } + + it { is_expected.to allow_value('example.com').for(:username) } end it 'is valid if we are creating a possibly-conflicting instance actor account' do @@ -860,81 +874,31 @@ expect(instance_account.valid?).to be true end - it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do - account = Fabricate.build(:account, username: 'the-doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) - end - - it 'is invalid if the username contains a period' do - account = Fabricate.build(:account, username: 'the.doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + it { is_expected.to_not allow_values('the-doctor', 'the.doctor').for(:username) } - it 'is invalid if the username is longer than the character limit' do - account = Fabricate.build(:account, username: username_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:username) - end - - it 'is invalid if the display name is longer than the character limit' do - account = Fabricate.build(:account, display_name: display_name_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:display_name) - end + it { is_expected.to validate_length_of(:username).is_at_most(described_class::USERNAME_LENGTH_LIMIT) } + it { is_expected.to validate_length_of(:display_name).is_at_most(described_class::DISPLAY_NAME_LENGTH_LIMIT) } - it 'is invalid if the note is longer than the character limit' do - account = Fabricate.build(:account, note: account_note_over_limit) - account.valid? - expect(account).to model_have_error_on_field(:note) - end + it { is_expected.to_not allow_values(account_note_over_limit).for(:note) } end - context 'when is remote' do - it 'is invalid if the username is same among accounts in the same normalized domain' do - Fabricate(:account, domain: 'にゃん', username: 'username') - account = Fabricate.build(:account, domain: 'xn--r9j5b5b', username: 'username') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + context 'when account is remote' do + subject { Fabricate.build :account, domain: 'host.example' } - it 'is invalid if the username is not unique in case-insensitive comparison among accounts in the same normalized domain' do - Fabricate(:account, domain: 'にゃん', username: 'username') - account = Fabricate.build(:account, domain: 'xn--r9j5b5b', username: 'Username') - account.valid? - expect(account).to model_have_error_on_field(:username) - end + context 'when a normalized domain account exists' do + subject { Fabricate.build :account, domain: 'xn--r9j5b5b' } - it 'is valid even if the username contains hyphens' do - account = Fabricate.build(:account, domain: 'domain', username: 'the-doctor') - account.valid? - expect(account).to_not model_have_error_on_field(:username) - end + before { Fabricate(:account, domain: 'にゃん', username: 'username') } - it 'is invalid if the username doesn\'t only contains letters, numbers, underscores and hyphens' do - account = Fabricate.build(:account, domain: 'domain', username: 'the doctor') - account.valid? - expect(account).to model_have_error_on_field(:username) + it { is_expected.to_not allow_values('username', 'Username').for(:username) } end - it 'is valid even if the username is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', username: username_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:username) - end + it { is_expected.to allow_values('the-doctor', username_over_limit).for(:username) } + it { is_expected.to_not allow_values('the doctor').for(:username) } - it 'is valid even if the display name is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', display_name: display_name_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:display_name) - end + it { is_expected.to allow_values(display_name_over_limit).for(:display_name) } - it 'is valid even if the note is longer than the character limit' do - account = Fabricate.build(:account, domain: 'domain', note: account_note_over_limit) - account.valid? - expect(account).to_not model_have_error_on_field(:note) - end + it { is_expected.to allow_values(account_note_over_limit).for(:note) } end def username_over_limit From 37bcbeab4aead09c4884827b8a7625c5070ab192 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 24 Oct 2024 08:52:38 -0400 Subject: [PATCH 366/467] Simplify model validation spec in AccountModerationNote/ReportNote (#31792) --- spec/models/account_moderation_note_spec.rb | 31 +++++++++------------ spec/models/report_note_spec.rb | 31 +++++++++------------ 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/spec/models/account_moderation_note_spec.rb b/spec/models/account_moderation_note_spec.rb index 079774c4925b4e..f3bcff4cd66d13 100644 --- a/spec/models/account_moderation_note_spec.rb +++ b/spec/models/account_moderation_note_spec.rb @@ -3,29 +3,24 @@ require 'rails_helper' RSpec.describe AccountModerationNote do - describe 'chronological scope' do - it 'returns account moderation notes oldest to newest' do - account = Fabricate(:account) - note1 = Fabricate(:account_moderation_note, target_account: account) - note2 = Fabricate(:account_moderation_note, target_account: account) + describe 'Scopes' do + describe '.chronological' do + it 'returns account moderation notes oldest to newest' do + account = Fabricate(:account) + note1 = Fabricate(:account_moderation_note, target_account: account) + note2 = Fabricate(:account_moderation_note, target_account: account) - expect(account.targeted_moderation_notes.chronological).to eq [note1, note2] + expect(account.targeted_moderation_notes.chronological).to eq [note1, note2] + end end end - describe 'validations' do - it 'is invalid if the content is empty' do - report = Fabricate.build(:account_moderation_note, content: '') - expect(report.valid?).to be false - end - - it 'is invalid if content is longer than character limit' do - report = Fabricate.build(:account_moderation_note, content: comment_over_limit) - expect(report.valid?).to be false - end + describe 'Validations' do + subject { Fabricate.build :account_moderation_note } - def comment_over_limit - Faker::Lorem.paragraph_by_chars(number: described_class::CONTENT_SIZE_LIMIT * 2) + describe 'content' do + it { is_expected.to_not allow_value('').for(:content) } + it { is_expected.to validate_length_of(:content).is_at_most(described_class::CONTENT_SIZE_LIMIT) } end end end diff --git a/spec/models/report_note_spec.rb b/spec/models/report_note_spec.rb index 417971c9a1e357..0d1c0f619e5957 100644 --- a/spec/models/report_note_spec.rb +++ b/spec/models/report_note_spec.rb @@ -3,29 +3,24 @@ require 'rails_helper' RSpec.describe ReportNote do - describe 'chronological scope' do - it 'returns report notes oldest to newest' do - report = Fabricate(:report) - note1 = Fabricate(:report_note, report: report) - note2 = Fabricate(:report_note, report: report) + describe 'Scopes' do + describe '.chronological' do + it 'returns report notes oldest to newest' do + report = Fabricate(:report) + note1 = Fabricate(:report_note, report: report) + note2 = Fabricate(:report_note, report: report) - expect(report.notes.chronological).to eq [note1, note2] + expect(report.notes.chronological).to eq [note1, note2] + end end end - describe 'validations' do - it 'is invalid if the content is empty' do - report = Fabricate.build(:report_note, content: '') - expect(report.valid?).to be false - end - - it 'is invalid if content is longer than character limit' do - report = Fabricate.build(:report_note, content: comment_over_limit) - expect(report.valid?).to be false - end + describe 'Validations' do + subject { Fabricate.build :report_note } - def comment_over_limit - Faker::Lorem.paragraph_by_chars(number: described_class::CONTENT_SIZE_LIMIT * 2) + describe 'content' do + it { is_expected.to_not allow_value('').for(:content) } + it { is_expected.to validate_length_of(:content).is_at_most(described_class::CONTENT_SIZE_LIMIT) } end end end From e5be4bf8d887bffd6f660ec86b13515a593f21d4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 03:55:33 -0400 Subject: [PATCH 367/467] Simplify model validation specs for `PreviewCard` (#32469) --- spec/models/preview_card_spec.rb | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/spec/models/preview_card_spec.rb b/spec/models/preview_card_spec.rb index c0bc2b6e0e01bf..0fe76c37b07cda 100644 --- a/spec/models/preview_card_spec.rb +++ b/spec/models/preview_card_spec.rb @@ -9,26 +9,10 @@ end end - describe 'validations' do - describe 'urls' do - it 'allows http schemes' do - record = described_class.new(url: 'http://example.host/path') - - expect(record).to be_valid - end - - it 'allows https schemes' do - record = described_class.new(url: 'https://example.host/path') - - expect(record).to be_valid - end - - it 'does not allow javascript: schemes' do - record = described_class.new(url: 'javascript:alert()') - - expect(record).to_not be_valid - expect(record).to model_have_error_on_field(:url) - end + describe 'Validations' do + describe 'url' do + it { is_expected.to allow_values('http://example.host/path', 'https://example.host/path').for(:url) } + it { is_expected.to_not allow_value('javascript:alert()').for(:url) } end end end From 4134ccdbe06b1c34ba28910c9d608a949c69dba3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 03:55:45 -0400 Subject: [PATCH 368/467] Simplify model validation specs for `WebauthnCredential` (#32466) --- spec/models/webauthn_credential_spec.rb | 48 ++++--------------------- 1 file changed, 6 insertions(+), 42 deletions(-) diff --git a/spec/models/webauthn_credential_spec.rb b/spec/models/webauthn_credential_spec.rb index c4105d91500622..067c696c1338a6 100644 --- a/spec/models/webauthn_credential_spec.rb +++ b/spec/models/webauthn_credential_spec.rb @@ -3,53 +3,17 @@ require 'rails_helper' RSpec.describe WebauthnCredential do - describe 'validations' do + describe 'Validations' do + subject { Fabricate.build :webauthn_credential } + it { is_expected.to validate_presence_of(:external_id) } it { is_expected.to validate_presence_of(:public_key) } it { is_expected.to validate_presence_of(:nickname) } it { is_expected.to validate_presence_of(:sign_count) } - it 'is invalid if already exist a webauthn credential with the same external id' do - Fabricate(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw') - new_webauthn_credential = Fabricate.build(:webauthn_credential, external_id: '_Typ0ygudDnk9YUVWLQayw') - - new_webauthn_credential.valid? - - expect(new_webauthn_credential).to model_have_error_on_field(:external_id) - end - - it 'is invalid if user already registered a webauthn credential with the same nickname' do - user = Fabricate(:user) - Fabricate(:webauthn_credential, user_id: user.id, nickname: 'USB Key') - new_webauthn_credential = Fabricate.build(:webauthn_credential, user_id: user.id, nickname: 'USB Key') - - new_webauthn_credential.valid? - - expect(new_webauthn_credential).to model_have_error_on_field(:nickname) - end - - it 'is invalid if sign_count is not a number' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: 'invalid sign_count') - - webauthn_credential.valid? - - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end - - it 'is invalid if sign_count is negative number' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: -1) - - webauthn_credential.valid? - - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end - - it 'is invalid if sign_count is greater than the limit' do - webauthn_credential = Fabricate.build(:webauthn_credential, sign_count: (described_class::SIGN_COUNT_LIMIT * 2)) - - webauthn_credential.valid? + it { is_expected.to validate_uniqueness_of(:external_id) } + it { is_expected.to validate_uniqueness_of(:nickname).scoped_to(:user_id) } - expect(webauthn_credential).to model_have_error_on_field(:sign_count) - end + it { is_expected.to validate_numericality_of(:sign_count).only_integer.is_greater_than_or_equal_to(0).is_less_than_or_equal_to(described_class::SIGN_COUNT_LIMIT - 1) } end end From 2e3bbb6861553f624ef2dc01d46620638ff6b33b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 03:58:41 -0400 Subject: [PATCH 369/467] Move account suspension related coverage to concern spec (#32432) --- spec/models/account_spec.rb | 66 ------------------- .../concerns/account/suspensions_spec.rb | 65 ++++++++++++++++++ 2 files changed, 65 insertions(+), 66 deletions(-) create mode 100644 spec/models/concerns/account/suspensions_spec.rb diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index bd897a2999503b..7a5deed599c5e4 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -10,64 +10,6 @@ let(:bob) { Fabricate(:account, username: 'bob') } - describe '#suspended_locally?' do - context 'when the account is not suspended' do - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - - context 'when the account is suspended locally' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) - end - - it 'returns true' do - expect(subject.suspended_locally?).to be true - end - end - - context 'when the account is suspended remotely' do - before do - subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) - end - - it 'returns false' do - expect(subject.suspended_locally?).to be false - end - end - end - - describe '#suspend!' do - it 'marks the account as suspended and creates a deletion request' do - expect { subject.suspend! } - .to change(subject, :suspended?).from(false).to(true) - .and change(subject, :suspended_locally?).from(false).to(true) - .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) - end - - context 'when the account is of a local user' do - subject { local_user_account } - - let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } - - it 'creates a canonical domain block' do - subject.suspend! - expect(CanonicalEmailBlock.block?(subject.user_email)).to be true - end - - context 'when a canonical domain block already exists for that email' do - before do - Fabricate(:canonical_email_block, email: subject.user_email) - end - - it 'does not raise an error' do - expect { subject.suspend! }.to_not raise_error - end - end - end - end - describe '#follow!' do it 'creates a follow' do follow = subject.follow!(bob) @@ -1049,14 +991,6 @@ def account_note_over_limit end end - describe 'suspended' do - it 'returns an array of accounts who are suspended' do - suspended_account = Fabricate(:account, suspended: true) - _account = Fabricate(:account, suspended: false) - expect(described_class.suspended).to contain_exactly(suspended_account) - end - end - describe 'searchable' do let!(:suspended_local) { Fabricate(:account, suspended: true, username: 'suspended_local') } let!(:suspended_remote) { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') } diff --git a/spec/models/concerns/account/suspensions_spec.rb b/spec/models/concerns/account/suspensions_spec.rb new file mode 100644 index 00000000000000..3d71f1b723087c --- /dev/null +++ b/spec/models/concerns/account/suspensions_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Suspensions do + subject { Fabricate(:account) } + + describe '.suspended' do + let!(:suspended_account) { Fabricate :account, suspended: true } + + before { Fabricate :account, suspended: false } + + it 'returns accounts that are suspended' do + expect(Account.suspended) + .to contain_exactly(suspended_account) + end + end + + describe '#suspended_locally?' do + context 'when the account is not suspended' do + it { is_expected.to_not be_suspended_locally } + end + + context 'when the account is suspended locally' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :local) } + + it { is_expected.to be_suspended_locally } + end + + context 'when the account is suspended remotely' do + before { subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote) } + + it { is_expected.to_not be_suspended_locally } + end + end + + describe '#suspend!' do + it 'marks the account as suspended and creates a deletion request' do + expect { subject.suspend! } + .to change(subject, :suspended?).from(false).to(true) + .and change(subject, :suspended_locally?).from(false).to(true) + .and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true)) + end + + context 'when the account is of a local user' do + subject { local_user_account } + + let!(:local_user_account) { Fabricate(:user, email: 'foo+bar@domain.org').account } + + it 'creates a canonical domain block' do + expect { subject.suspend! } + .to change { CanonicalEmailBlock.block?(subject.user_email) }.from(false).to(true) + end + + context 'when a canonical domain block already exists for that email' do + before { Fabricate(:canonical_email_block, email: subject.user_email) } + + it 'does not raise an error' do + expect { subject.suspend! } + .to_not raise_error + end + end + end + end +end From 2a13d6824c4e390b16e2f2d4cd18e4bfd93e0166 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 03:59:31 -0400 Subject: [PATCH 370/467] Use `subject` for `FeedManager` lib spec (#32486) --- spec/lib/feed_manager_spec.rb | 160 +++++++++++++++++----------------- 1 file changed, 81 insertions(+), 79 deletions(-) diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 679309bd11c746..1d704996746338 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' RSpec.describe FeedManager do + subject { described_class.instance } + before do |example| unless example.metadata[:skip_stub] stub_const 'FeedManager::MAX_ITEMS', 10 @@ -32,26 +34,26 @@ it 'returns false for followee\'s status' do status = Fabricate(:status, text: 'Hello world', account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, status, bob)).to be false + expect(subject.filter?(:home, status, bob)).to be false end it 'returns false for reblog by followee' do status = Fabricate(:status, text: 'Hello world', account: jeff) reblog = Fabricate(:status, reblog: status, account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, reblog, bob)).to be false + expect(subject.filter?(:home, reblog, bob)).to be false end it 'returns true for post from account who blocked me' do status = Fabricate(:status, text: 'Hello, World', account: alice) alice.block!(bob) - expect(described_class.instance.filter?(:home, status, bob)).to be true + expect(subject.filter?(:home, status, bob)).to be true end it 'returns true for post from blocked account' do status = Fabricate(:status, text: 'Hello, World', account: alice) bob.block!(alice) - expect(described_class.instance.filter?(:home, status, bob)).to be true + expect(subject.filter?(:home, status, bob)).to be true end it 'returns true for reblog by followee of blocked account' do @@ -59,7 +61,7 @@ reblog = Fabricate(:status, reblog: status, account: alice) bob.follow!(alice) bob.block!(jeff) - expect(described_class.instance.filter?(:home, reblog, bob)).to be true + expect(subject.filter?(:home, reblog, bob)).to be true end it 'returns true for reblog by followee of muted account' do @@ -67,7 +69,7 @@ reblog = Fabricate(:status, reblog: status, account: alice) bob.follow!(alice) bob.mute!(jeff) - expect(described_class.instance.filter?(:home, reblog, bob)).to be true + expect(subject.filter?(:home, reblog, bob)).to be true end it 'returns true for reblog by followee of someone who is blocking recipient' do @@ -75,14 +77,14 @@ reblog = Fabricate(:status, reblog: status, account: alice) bob.follow!(alice) jeff.block!(bob) - expect(described_class.instance.filter?(:home, reblog, bob)).to be true + expect(subject.filter?(:home, reblog, bob)).to be true end it 'returns true for reblog from account with reblogs disabled' do status = Fabricate(:status, text: 'Hello world', account: jeff) reblog = Fabricate(:status, reblog: status, account: alice) bob.follow!(alice, reblogs: false) - expect(described_class.instance.filter?(:home, reblog, bob)).to be true + expect(subject.filter?(:home, reblog, bob)).to be true end it 'returns false for reply by followee to another followee' do @@ -90,49 +92,49 @@ reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) bob.follow!(alice) bob.follow!(jeff) - expect(described_class.instance.filter?(:home, reply, bob)).to be false + expect(subject.filter?(:home, reply, bob)).to be false end it 'returns false for reply by followee to recipient' do status = Fabricate(:status, text: 'Hello world', account: bob) reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, reply, bob)).to be false + expect(subject.filter?(:home, reply, bob)).to be false end it 'returns false for reply by followee to self' do status = Fabricate(:status, text: 'Hello world', account: alice) reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, reply, bob)).to be false + expect(subject.filter?(:home, reply, bob)).to be false end it 'returns true for reply by followee to non-followed account' do status = Fabricate(:status, text: 'Hello world', account: jeff) reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, reply, bob)).to be true + expect(subject.filter?(:home, reply, bob)).to be true end it 'returns true for the second reply by followee to a non-federated status' do reply = Fabricate(:status, text: 'Reply 1', reply: true, account: alice) second_reply = Fabricate(:status, text: 'Reply 2', thread: reply, account: alice) bob.follow!(alice) - expect(described_class.instance.filter?(:home, second_reply, bob)).to be true + expect(subject.filter?(:home, second_reply, bob)).to be true end it 'returns false for status by followee mentioning another account' do bob.follow!(alice) jeff.follow!(alice) status = PostStatusService.new.call(alice, text: 'Hey @jeff') - expect(described_class.instance.filter?(:home, status, bob)).to be false + expect(subject.filter?(:home, status, bob)).to be false end it 'returns true for status by followee mentioning blocked account' do bob.block!(jeff) bob.follow!(alice) status = PostStatusService.new.call(alice, text: 'Hey @jeff') - expect(described_class.instance.filter?(:home, status, bob)).to be true + expect(subject.filter?(:home, status, bob)).to be true end it 'returns true for reblog of a personally blocked domain' do @@ -140,19 +142,19 @@ alice.follow!(jeff) status = Fabricate(:status, text: 'Hello world', account: bob) reblog = Fabricate(:status, reblog: status, account: jeff) - expect(described_class.instance.filter?(:home, reblog, alice)).to be true + expect(subject.filter?(:home, reblog, alice)).to be true end it 'returns true for German post when follow is set to English only' do alice.follow!(bob, languages: %w(en)) status = Fabricate(:status, text: 'Hallo Welt', account: bob, language: 'de') - expect(described_class.instance.filter?(:home, status, alice)).to be true + expect(subject.filter?(:home, status, alice)).to be true end it 'returns false for German post when follow is set to German' do alice.follow!(bob, languages: %w(de)) status = Fabricate(:status, text: 'Hallo Welt', account: bob, language: 'de') - expect(described_class.instance.filter?(:home, status, alice)).to be false + expect(subject.filter?(:home, status, alice)).to be false end it 'returns true for post from followee on exclusive list' do @@ -161,7 +163,7 @@ list.accounts << bob allow(List).to receive(:where).and_return(list) status = Fabricate(:status, text: 'I post a lot', account: bob) - expect(described_class.instance.filter?(:home, status, alice)).to be true + expect(subject.filter?(:home, status, alice)).to be true end it 'returns true for reblog from followee on exclusive list' do @@ -171,7 +173,7 @@ allow(List).to receive(:where).and_return(list) status = Fabricate(:status, text: 'I post a lot', account: bob) reblog = Fabricate(:status, reblog: status, account: jeff) - expect(described_class.instance.filter?(:home, reblog, alice)).to be true + expect(subject.filter?(:home, reblog, alice)).to be true end it 'returns false for post from followee on non-exclusive list' do @@ -179,7 +181,7 @@ alice.follow!(bob) list.accounts << bob status = Fabricate(:status, text: 'I post a lot', account: bob) - expect(described_class.instance.filter?(:home, status, alice)).to be false + expect(subject.filter?(:home, status, alice)).to be false end it 'returns false for reblog from followee on non-exclusive list' do @@ -188,7 +190,7 @@ list.accounts << jeff status = Fabricate(:status, text: 'I post a lot', account: bob) reblog = Fabricate(:status, reblog: status, account: jeff) - expect(described_class.instance.filter?(:home, reblog, alice)).to be false + expect(subject.filter?(:home, reblog, alice)).to be false end end @@ -196,27 +198,27 @@ it 'returns true for status that mentions blocked account' do bob.block!(jeff) status = PostStatusService.new.call(alice, text: 'Hey @jeff') - expect(described_class.instance.filter?(:mentions, status, bob)).to be true + expect(subject.filter?(:mentions, status, bob)).to be true end it 'returns true for status that replies to a blocked account' do status = Fabricate(:status, text: 'Hello world', account: jeff) reply = Fabricate(:status, text: 'Nay', thread: status, account: alice) bob.block!(jeff) - expect(described_class.instance.filter?(:mentions, reply, bob)).to be true + expect(subject.filter?(:mentions, reply, bob)).to be true end it 'returns false for status by limited account who recipient is not following' do status = Fabricate(:status, text: 'Hello world', account: alice) alice.silence! - expect(described_class.instance.filter?(:mentions, status, bob)).to be false + expect(subject.filter?(:mentions, status, bob)).to be false end it 'returns false for status by followed limited account' do status = Fabricate(:status, text: 'Hello world', account: alice) alice.silence! bob.follow!(alice) - expect(described_class.instance.filter?(:mentions, status, bob)).to be false + expect(subject.filter?(:mentions, status, bob)).to be false end end end @@ -228,7 +230,7 @@ members = Array.new(described_class::MAX_ITEMS) { |count| [count, count] } redis.zadd("feed:home:#{account.id}", members) - described_class.instance.push_to_home(account, status) + subject.push_to_home(account, status) expect(redis.zcard("feed:home:#{account.id}")).to eq described_class::MAX_ITEMS end @@ -239,7 +241,7 @@ reblogged = Fabricate(:status) reblog = Fabricate(:status, reblog: reblogged) - expect(described_class.instance.push_to_home(account, reblog)).to be true + expect(subject.push_to_home(account, reblog)).to be true end it 'does not save a new reblog of a recent status' do @@ -247,9 +249,9 @@ reblogged = Fabricate(:status) reblog = Fabricate(:status, reblog: reblogged) - described_class.instance.push_to_home(account, reblogged) + subject.push_to_home(account, reblogged) - expect(described_class.instance.push_to_home(account, reblog)).to be false + expect(subject.push_to_home(account, reblog)).to be false end it 'saves a new reblog of an old status' do @@ -257,14 +259,14 @@ reblogged = Fabricate(:status) reblog = Fabricate(:status, reblog: reblogged) - described_class.instance.push_to_home(account, reblogged) + subject.push_to_home(account, reblogged) # Fill the feed with intervening statuses described_class::REBLOG_FALLOFF.times do - described_class.instance.push_to_home(account, Fabricate(:status)) + subject.push_to_home(account, Fabricate(:status)) end - expect(described_class.instance.push_to_home(account, reblog)).to be true + expect(subject.push_to_home(account, reblog)).to be true end it 'does not save a new reblog of a recently-reblogged status' do @@ -273,10 +275,10 @@ reblogs = Array.new(2) { Fabricate(:status, reblog: reblogged) } # The first reblog will be accepted - described_class.instance.push_to_home(account, reblogs.first) + subject.push_to_home(account, reblogs.first) # The second reblog should be ignored - expect(described_class.instance.push_to_home(account, reblogs.last)).to be false + expect(subject.push_to_home(account, reblogs.last)).to be false end it 'saves a new reblog of a recently-reblogged status when previous reblog has been deleted' do @@ -285,15 +287,15 @@ old_reblog = Fabricate(:status, reblog: reblogged) # The first reblog should be accepted - expect(described_class.instance.push_to_home(account, old_reblog)).to be true + expect(subject.push_to_home(account, old_reblog)).to be true # The first reblog should be successfully removed - expect(described_class.instance.unpush_from_home(account, old_reblog)).to be true + expect(subject.unpush_from_home(account, old_reblog)).to be true reblog = Fabricate(:status, reblog: reblogged) # The second reblog should be accepted - expect(described_class.instance.push_to_home(account, reblog)).to be true + expect(subject.push_to_home(account, reblog)).to be true end it 'does not save a new reblog of a multiply-reblogged-then-unreblogged status' do @@ -302,14 +304,14 @@ reblogs = Array.new(3) { Fabricate(:status, reblog: reblogged) } # Accept the reblogs - described_class.instance.push_to_home(account, reblogs[0]) - described_class.instance.push_to_home(account, reblogs[1]) + subject.push_to_home(account, reblogs[0]) + subject.push_to_home(account, reblogs[1]) # Unreblog the first one - described_class.instance.unpush_from_home(account, reblogs[0]) + subject.unpush_from_home(account, reblogs[0]) # The last reblog should still be ignored - expect(described_class.instance.push_to_home(account, reblogs.last)).to be false + expect(subject.push_to_home(account, reblogs.last)).to be false end it 'saves a new reblog of a long-ago-reblogged status' do @@ -318,15 +320,15 @@ reblogs = Array.new(2) { Fabricate(:status, reblog: reblogged) } # The first reblog will be accepted - described_class.instance.push_to_home(account, reblogs.first) + subject.push_to_home(account, reblogs.first) # Fill the feed with intervening statuses described_class::REBLOG_FALLOFF.times do - described_class.instance.push_to_home(account, Fabricate(:status)) + subject.push_to_home(account, Fabricate(:status)) end # The second reblog should also be accepted - expect(described_class.instance.push_to_home(account, reblogs.last)).to be true + expect(subject.push_to_home(account, reblogs.last)).to be true end end @@ -334,9 +336,9 @@ account = Fabricate(:account) reblog = Fabricate(:status) status = Fabricate(:status, reblog: reblog) - described_class.instance.push_to_home(account, status) + subject.push_to_home(account, status) - expect(described_class.instance.push_to_home(account, reblog)).to be false + expect(subject.push_to_home(account, reblog)).to be false end end @@ -359,9 +361,9 @@ it "does not push when the given status's reblog is already inserted" do reblog = Fabricate(:status) status = Fabricate(:status, reblog: reblog) - described_class.instance.push_to_list(list, status) + subject.push_to_list(list, status) - expect(described_class.instance.push_to_list(list, reblog)).to be false + expect(subject.push_to_list(list, reblog)).to be false end context 'when replies policy is set to no replies' do @@ -371,19 +373,19 @@ it 'pushes statuses that are not replies' do status = Fabricate(:status, text: 'Hello world', account: bob) - expect(described_class.instance.push_to_list(list, status)).to be true + expect(subject.push_to_list(list, status)).to be true end it 'pushes statuses that are replies to list owner' do status = Fabricate(:status, text: 'Hello world', account: owner) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end it 'does not push replies to another member of the list' do status = Fabricate(:status, text: 'Hello world', account: alice) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be false + expect(subject.push_to_list(list, reply)).to be false end end @@ -394,25 +396,25 @@ it 'pushes statuses that are not replies' do status = Fabricate(:status, text: 'Hello world', account: bob) - expect(described_class.instance.push_to_list(list, status)).to be true + expect(subject.push_to_list(list, status)).to be true end it 'pushes statuses that are replies to list owner' do status = Fabricate(:status, text: 'Hello world', account: owner) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end it 'pushes replies to another member of the list' do status = Fabricate(:status, text: 'Hello world', account: alice) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end it 'does not push replies to someone not a member of the list' do status = Fabricate(:status, text: 'Hello world', account: eve) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be false + expect(subject.push_to_list(list, reply)).to be false end end @@ -423,25 +425,25 @@ it 'pushes statuses that are not replies' do status = Fabricate(:status, text: 'Hello world', account: bob) - expect(described_class.instance.push_to_list(list, status)).to be true + expect(subject.push_to_list(list, status)).to be true end it 'pushes statuses that are replies to list owner' do status = Fabricate(:status, text: 'Hello world', account: owner) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end it 'pushes replies to another member of the list' do status = Fabricate(:status, text: 'Hello world', account: alice) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end it 'pushes replies to someone not a member of the list' do status = Fabricate(:status, text: 'Hello world', account: eve) reply = Fabricate(:status, text: 'Nay', thread: status, account: bob) - expect(described_class.instance.push_to_list(list, reply)).to be true + expect(subject.push_to_list(list, reply)).to be true end end end @@ -451,9 +453,9 @@ account = Fabricate(:account, id: 0) reblog = Fabricate(:status) status = Fabricate(:status, reblog: reblog) - described_class.instance.push_to_home(account, status) + subject.push_to_home(account, status) - described_class.instance.merge_into_home(account, reblog.account) + subject.merge_into_home(account, reblog.account) expect(redis.zscore('feed:home:0', reblog.id)).to be_nil end @@ -466,14 +468,14 @@ reblogged = Fabricate(:status) status = Fabricate(:status, reblog: reblogged) - described_class.instance.push_to_home(receiver, reblogged) - described_class::REBLOG_FALLOFF.times { described_class.instance.push_to_home(receiver, Fabricate(:status)) } - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, reblogged) + described_class::REBLOG_FALLOFF.times { subject.push_to_home(receiver, Fabricate(:status)) } + subject.push_to_home(receiver, status) # The reblogging status should show up under normal conditions. expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s) - described_class.instance.unpush_from_home(receiver, status) + subject.unpush_from_home(receiver, status) # Restore original status expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to_not include(status.id.to_s) @@ -484,12 +486,12 @@ reblogged = Fabricate(:status) status = Fabricate(:status, reblog: reblogged) - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, status) # The reblogging status should show up under normal conditions. expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [status.id.to_s] - described_class.instance.unpush_from_home(receiver, status) + subject.unpush_from_home(receiver, status) expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to be_empty end @@ -499,14 +501,14 @@ reblogs = Array.new(3) { Fabricate(:status, reblog: reblogged) } reblogs.each do |reblog| - described_class.instance.push_to_home(receiver, reblog) + subject.push_to_home(receiver, reblog) end # The reblogging status should show up under normal conditions. expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.first.id.to_s] reblogs[0...-1].each do |reblog| - described_class.instance.unpush_from_home(receiver, reblog) + subject.unpush_from_home(receiver, reblog) end expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.last.id.to_s] @@ -515,10 +517,10 @@ it 'sends push updates' do status = Fabricate(:status) - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, status) allow(redis).to receive_messages(publish: nil) - described_class.instance.unpush_from_home(receiver, status) + subject.unpush_from_home(receiver, status) deletion = Oj.dump(event: :delete, payload: status.id.to_s) expect(redis).to have_received(:publish).with("timeline:#{receiver.id}", deletion) @@ -532,9 +534,9 @@ it 'leaves a tagged status' do status = Fabricate(:status) status.tags << tag - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, status) - described_class.instance.unmerge_tag_from_home(tag, receiver) + subject.unmerge_tag_from_home(tag, receiver) expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to_not include(status.id.to_s) end @@ -545,9 +547,9 @@ status = Fabricate(:status, account: followee) status.tags << tag - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, status) - described_class.instance.unmerge_tag_from_home(tag, receiver) + subject.unmerge_tag_from_home(tag, receiver) expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s) end @@ -555,9 +557,9 @@ it 'remains a tagged status written by receiver' do status = Fabricate(:status, account: receiver) status.tags << tag - described_class.instance.push_to_home(receiver, status) + subject.push_to_home(receiver, status) - described_class.instance.unmerge_tag_from_home(tag, receiver) + subject.unmerge_tag_from_home(tag, receiver) expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s) end @@ -588,7 +590,7 @@ end it 'correctly cleans the home timeline' do - described_class.instance.clear_from_home(account, target_account) + subject.clear_from_home(account, target_account) expect(redis.zrange("feed:home:#{account.id}", 0, -1)).to eq [status_from_followed_account_first.id.to_s, status_from_followed_account_next.id.to_s] end From 86132f7dd3d41d777090d283b83d371246e0220e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 04:00:58 -0400 Subject: [PATCH 371/467] Provide `establish_policy` helper method in `AccountStatusesCleanupPolicy` spec (#32490) --- .../account_statuses_cleanup_policy_spec.rb | 91 ++++++------------- 1 file changed, 27 insertions(+), 64 deletions(-) diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index c142a0359ac6fe..114ebb38fe0615 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -339,14 +339,7 @@ end context 'when policy is set to keep DMs and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = true - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_direct: true) } it 'returns every old status except does not return the old direct message for deletion' do expect(subject.pluck(:id)) @@ -356,14 +349,7 @@ end context 'when policy is set to keep self-bookmarked toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = true - end + before { establish_policy(keep_self_bookmark: true) } it 'returns every old status but does not return the old self-bookmarked message for deletion' do expect(subject.pluck(:id)) @@ -373,14 +359,7 @@ end context 'when policy is set to keep self-faved toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = true - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_self_fav: true) } it 'returns every old status but does not return the old self-faved message for deletion' do expect(subject.pluck(:id)) @@ -390,14 +369,7 @@ end context 'when policy is set to keep toots with media and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = true - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_media: true) } it 'returns every old status but does not return the old message with media for deletion' do expect(subject.pluck(:id)) @@ -407,14 +379,7 @@ end context 'when policy is set to keep toots with polls and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = true - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_polls: true) } it 'returns every old status but does not return the old poll message for deletion' do expect(subject.pluck(:id)) @@ -424,14 +389,7 @@ end context 'when policy is set to keep pinned toots and reject everything else' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = true - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy(keep_pinned: true) } it 'returns every old status but does not return the old pinned message for deletion' do expect(subject.pluck(:id)) @@ -441,14 +399,7 @@ end context 'when policy is to not keep any special messages' do - before do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.keep_self_bookmark = false - end + before { establish_policy } it 'returns every old status but does not return the recent or unrelated statuses' do expect(subject.pluck(:id)) @@ -459,14 +410,7 @@ end context 'when policy is set to keep every category of toots' do - before do - account_statuses_cleanup_policy.keep_direct = true - account_statuses_cleanup_policy.keep_pinned = true - account_statuses_cleanup_policy.keep_polls = true - account_statuses_cleanup_policy.keep_media = true - account_statuses_cleanup_policy.keep_self_fav = true - account_statuses_cleanup_policy.keep_self_bookmark = true - end + before { establish_policy(keep_direct: true, keep_pinned: true, keep_polls: true, keep_media: true, keep_self_fav: true, keep_self_bookmark: true) } it 'returns normal statuses and does not return unrelated old status' do expect(subject.pluck(:id)) @@ -502,5 +446,24 @@ .and include(very_old_status.id, faved_primary.id, reblogged_primary.id, reblogged_secondary.id) end end + + private + + def establish_policy(options = {}) + default_policy_options.merge(options).each do |attribute, value| + account_statuses_cleanup_policy.send :"#{attribute}=", value + end + end + + def default_policy_options + { + keep_direct: false, + keep_media: false, + keep_pinned: false, + keep_polls: false, + keep_self_bookmark: false, + keep_self_fav: false, + } + end end end From 15f6336cddcf342ad7c6b79e443d1a39bee3f7a1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 04:02:13 -0400 Subject: [PATCH 372/467] Simplify model validation specs for `AccountMigration` (#32494) --- spec/models/account_migration_spec.rb | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/spec/models/account_migration_spec.rb b/spec/models/account_migration_spec.rb index d658915ce3c4e6..b92771e8f5c737 100644 --- a/spec/models/account_migration_spec.rb +++ b/spec/models/account_migration_spec.rb @@ -9,8 +9,8 @@ end end - describe 'validations' do - subject { described_class.new(account: source_account, acct: target_acct) } + describe 'Validations' do + subject { Fabricate.build :account_migration, account: source_account } let(:source_account) { Fabricate(:account) } let(:target_acct) { target_account.acct } @@ -26,9 +26,7 @@ allow(service_double).to receive(:call).with(target_acct, anything).and_return(target_account) end - it 'passes validations' do - expect(subject).to be_valid - end + it { is_expected.to allow_value(target_account.acct).for(:acct) } end context 'with unresolvable account' do @@ -40,17 +38,13 @@ allow(service_double).to receive(:call).with(target_acct, anything).and_return(nil) end - it 'has errors on acct field' do - expect(subject).to model_have_error_on_field(:acct) - end + it { is_expected.to_not allow_value(target_acct).for(:acct) } end context 'with a space in the domain part' do let(:target_acct) { 'target@remote. org' } - it 'has errors on acct field' do - expect(subject).to model_have_error_on_field(:acct) - end + it { is_expected.to_not allow_value(target_acct).for(:acct) } end end end From 66c047151572d126b815622a6f935f4c745b625e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 04:35:07 -0400 Subject: [PATCH 373/467] Enrich coverage for `IpBlock` model (#32471) --- app/models/ip_block.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index d6242efbf7db24..5ed4d2a84626d4 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -36,9 +36,14 @@ def to_log_human_identifier class << self def blocked?(remote_ip) - blocked_ips_map = Rails.cache.fetch(CACHE_KEY) { FastIpMap.new(IpBlock.where(severity: :no_access).pluck(:ip)) } blocked_ips_map.include?(remote_ip) end + + private + + def blocked_ips_map + Rails.cache.fetch(CACHE_KEY) { FastIpMap.new(severity_no_access.pluck(:ip)) } + end end private From 9464281f2964ca1d3d39f2ab72ed8f07e7900eca Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 04:41:24 -0400 Subject: [PATCH 374/467] Simplify model validation specs for `AccountStatusCleanupPolicy` (#32495) --- spec/models/account_statuses_cleanup_policy_spec.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index 114ebb38fe0615..9bbbefa08eb489 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -5,13 +5,12 @@ RSpec.describe AccountStatusesCleanupPolicy do let(:account) { Fabricate(:account, username: 'alice', domain: nil) } - describe 'validation' do - it 'disallow remote accounts' do - account.update(domain: 'example.com') - account_statuses_cleanup_policy = Fabricate.build(:account_statuses_cleanup_policy, account: account) - account_statuses_cleanup_policy.valid? - expect(account_statuses_cleanup_policy).to model_have_error_on_field(:account) - end + describe 'Validations' do + subject { Fabricate.build :account_statuses_cleanup_policy } + + let(:remote_account) { Fabricate(:account, domain: 'example.com') } + + it { is_expected.to_not allow_value(remote_account).for(:account) } end describe 'save hooks' do From 1775e151ecc93ee21c993303a6b51f89f24fd2d1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 25 Oct 2024 04:42:14 -0400 Subject: [PATCH 375/467] Simplify model validation specs for `DomainAllow` (#32496) --- spec/models/domain_allow_spec.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec/models/domain_allow_spec.rb b/spec/models/domain_allow_spec.rb index d8f438f07eea2e..fbb324657e21b4 100644 --- a/spec/models/domain_allow_spec.rb +++ b/spec/models/domain_allow_spec.rb @@ -6,11 +6,10 @@ describe 'Validations' do it { is_expected.to validate_presence_of(:domain) } - it 'is invalid if the same normalized domain already exists' do - _domain_allow = Fabricate(:domain_allow, domain: 'にゃん') - domain_allow_with_normalized_value = Fabricate.build(:domain_allow, domain: 'xn--r9j5b5b') - domain_allow_with_normalized_value.valid? - expect(domain_allow_with_normalized_value).to model_have_error_on_field(:domain) + context 'when a normalized domain exists' do + before { Fabricate(:domain_allow, domain: 'にゃん') } + + it { is_expected.to_not allow_value('xn--r9j5b5b').for(:domain) } end end end From 0970cf818a5791206872703be8edcc9edb07edac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:04:53 +0200 Subject: [PATCH 376/467] Update dependency pg to v1.5.9 (#32655) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f5264e8db233d4..cf60b23bc94708 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -591,7 +591,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.5.8) + pg (1.5.9) pghero (3.6.1) activerecord (>= 6.1) premailer (1.27.0) From 097942a291913b984e7bf86403e7506e52ce6dca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:15:22 +0200 Subject: [PATCH 377/467] Update dependency pg to v8.13.1 (#32650) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index baf0dec9efbdd3..96c30cfe793cdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12971,8 +12971,8 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.13.0 - resolution: "pg@npm:8.13.0" + version: 8.13.1 + resolution: "pg@npm:8.13.1" dependencies: pg-cloudflare: "npm:^1.1.1" pg-connection-string: "npm:^2.7.0" @@ -12988,7 +12988,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/1521189063d2293d62f3fac61e797a3096a62a69668c223827d00b83c17a320805f31f0b5316feb80f8d9eed0c6c32f95146d8aca866af05816a66fd2ba8e32a + checksum: 10c0/c13bc661cbdb115337bc8519254836faf4bd79106dfd7ed588c8ece8c8b2dd3b7376bfec9a9a2f7646fa095b0b310cec77a83c3ba2ea4872331446eb93fd9055 languageName: node linkType: hard From 5f58357bbe73fde0ca9b0e0c07b35117bc6d2f96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:15:46 +0200 Subject: [PATCH 378/467] Update opentelemetry-ruby (non-major) (#32631) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 4 ++-- Gemfile.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 104fd266b8237f..6f4559b00f9f05 100644 --- a/Gemfile +++ b/Gemfile @@ -111,8 +111,8 @@ group :opentelemetry do gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false - gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false - gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false + gem 'opentelemetry-instrumentation-rack', '~> 0.25.0', require: false + gem 'opentelemetry-instrumentation-rails', '~> 0.32.0', require: false gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false gem 'opentelemetry-instrumentation-sidekiq', '~> 0.25.2', require: false gem 'opentelemetry-sdk', '~> 1.4', require: false diff --git a/Gemfile.lock b/Gemfile.lock index cf60b23bc94708..8421f06588d292 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -504,7 +504,7 @@ GEM opentelemetry-semantic_conventions opentelemetry-helpers-sql-obfuscation (0.2.0) opentelemetry-common (~> 0.21) - opentelemetry-instrumentation-action_mailer (0.1.0) + opentelemetry-instrumentation-action_mailer (0.2.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) @@ -522,7 +522,7 @@ GEM opentelemetry-instrumentation-active_model_serializers (0.20.2) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_record (0.7.3) + opentelemetry-instrumentation-active_record (0.8.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_support (0.6.0) @@ -554,16 +554,16 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-helpers-sql-obfuscation opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rack (0.24.6) + opentelemetry-instrumentation-rack (0.25.0) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-rails (0.31.2) + opentelemetry-instrumentation-rails (0.32.0) opentelemetry-api (~> 1.0) - opentelemetry-instrumentation-action_mailer (~> 0.1.0) + opentelemetry-instrumentation-action_mailer (~> 0.2.0) opentelemetry-instrumentation-action_pack (~> 0.9.0) opentelemetry-instrumentation-action_view (~> 0.7.0) opentelemetry-instrumentation-active_job (~> 0.7.0) - opentelemetry-instrumentation-active_record (~> 0.7.0) + opentelemetry-instrumentation-active_record (~> 0.8.0) opentelemetry-instrumentation-active_support (~> 0.6.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-redis (0.25.7) @@ -992,8 +992,8 @@ DEPENDENCIES opentelemetry-instrumentation-http_client (~> 0.22.3) opentelemetry-instrumentation-net_http (~> 0.22.4) opentelemetry-instrumentation-pg (~> 0.29.0) - opentelemetry-instrumentation-rack (~> 0.24.1) - opentelemetry-instrumentation-rails (~> 0.31.0) + opentelemetry-instrumentation-rack (~> 0.25.0) + opentelemetry-instrumentation-rails (~> 0.32.0) opentelemetry-instrumentation-redis (~> 0.25.3) opentelemetry-instrumentation-sidekiq (~> 0.25.2) opentelemetry-sdk (~> 1.4) From 60b0ad07714ecd4a361a47559e72ced43453cb4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 09:17:22 +0000 Subject: [PATCH 379/467] Update dependency postcss-preset-env to v10.0.8 (#32647) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 521 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 270 insertions(+), 251 deletions(-) diff --git a/yarn.lock b/yarn.lock index 96c30cfe793cdd..3951c1c8cbd0e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1462,13 +1462,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.2" +"@csstools/cascade-layer-name-parser@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.3" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-parser-algorithms": ^3.0.3 "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/2cc840445328400bb3e1e4186e6081e6519a23d9abde36a16c95892b6ad75155b3af3410d79fdda1c53a068384f970cabff4b5f5ba6867578168cbd3419016c8 + checksum: 10c0/a0f0d6c94122d0a82b0da94ee2619915a9e6e98211de6e1f28afebe34332a29cab1b7905a34b6e5c1df30a125df9f9860ce5fa960c676484417d4ef2c4db4757 languageName: node linkType: hard @@ -1479,35 +1479,35 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/css-calc@npm:2.0.2" +"@csstools/css-calc@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/css-calc@npm:2.0.3" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-parser-algorithms": ^3.0.3 "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/b36e655b4abc8ea39b300725e33cd43b1875d759dd60bee8155bf7841065615a7f24cf53199382e30aa10bb137f64021043e4af7e11b7199b674a6e6cf3ccd01 + checksum: 10c0/a3dacda66bde67edab0f2384e85462dcd46b5bb62bc2a6396f0577a006d9ad59eae270353cbd6fe1a5f7081d0546fe4b1fd9b2df242758da54ec8b7022296570 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/css-color-parser@npm:3.0.3" +"@csstools/css-color-parser@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-color-parser@npm:3.0.4" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-calc": "npm:^2.0.3" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-parser-algorithms": ^3.0.3 "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/02367ffc222254132c47f9cbc856f65fe0b81ee4a5e7381251b95c4064138b5ed99a5e5a79c0c8689f9e75e3d900f94773258a161a97f467c3f0420838c10e04 + checksum: 10c0/8f05264254d3768e45e46ce10e9355fe8ca0f6e4d2f648a22572f46c6d05b2378c37c2e5d970ed3b7bdfa0b152ea2af0c56a0556249bd85973aee9db7b091aa7 languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-parser-algorithms@npm:3.0.2" +"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-parser-algorithms@npm:3.0.3" peerDependencies: "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/246afbf518ee9eaa24ed7f083360eb66884f1172fd4f8c663bff8c6099de2a8abd1e2a31d5b6fe42e010277d238469d780cff62bc7fdc6a52e7a90626b8924dc + checksum: 10c0/c1e634384affb10c3726a36f090867247005a2a470cb223de88debeab07921b78c0e7875e7847d90949c2b0ba88a290c71565f1839f7739c21a5bf1c870e137d languageName: node linkType: hard @@ -1528,82 +1528,82 @@ __metadata: languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/media-query-list-parser@npm:4.0.0" +"@csstools/media-query-list-parser@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/media-query-list-parser@npm:4.0.1" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-parser-algorithms": ^3.0.3 "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/416417bcfd84c18a2df8dc77f31c87830e151dc20530fe7f0d8f13a0848b1a9090858abdf7792d82bf2edb41ddedb7b57b34eb78b68b5c10755ae02c019e496a + checksum: 10c0/037f57520b6ca7d58ba1d71a477bd99bdbe3a6d8e7b972ed0f436d649e574f5b429e54fc47d0272daa2ac24ffb819bd9d260a90e154c4a265b8ee4d1cfb1d279 languageName: node linkType: hard -"@csstools/postcss-cascade-layers@npm:^5.0.0": - version: 5.0.0 - resolution: "@csstools/postcss-cascade-layers@npm:5.0.0" +"@csstools/postcss-cascade-layers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-cascade-layers@npm:5.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b608c69c12671682676598e451dcd79bfc6f5030a4e17b4d1bf9659e531f1daf03526be023f9aafdc952ecc87c87b04f379a763309e3eadb2140572cd4aa5b60 + checksum: 10c0/5cc3c6f220d9216f7ab16e716a20d6db845f127c917521e6236342bfa871accd63eb662a04c1e24a28e396412dcb47b1c4abccc490b88e4010cd704d14a702f1 languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-color-function@npm:4.0.3" +"@csstools/postcss-color-function@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-color-function@npm:4.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c994660ca0e2652755d9ad181c8cb46a07220c972086c97c843fa9bacf690be10c642770f898aeec4acc47c2b718dfc7372107285a678361f34d84d9e9c11e0c + checksum: 10c0/e7735c6d7c84f039c84dc1b180410aa4db7c404d55477c2e7872bc8306a3150bf37883583ec080ebd8b40b765f700cc78892d61dc167578f76e324543d551c04 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.3" +"@csstools/postcss-color-mix-function@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/4ba358eb9030fc485bfe2922d897eeb712725762cc399eaba60ba665c84dc3e56a4d5a52dfb320093c0b217d32fedb9b5197fa45738cade53d9afcbefdadf04f + checksum: 10c0/3e01f04853e49c9f69ee0538b817209b630649844039ee5b195cfbae94d41cf6e0d8a50a3d02dbe066f84855eefa1b7047f6750e4744858519978468577e567f languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.2" +"@csstools/postcss-content-alt-text@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.3" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/e52d40f6567b9b23b32a6c40f9b2a74d57f99a9921b4cae015f51f72453474236c760bb13120682f8815698a615e0ad7bed22314c29dca89c34b5480d83a7a6d + checksum: 10c0/0389292a1ba11483f58db1bdd38cc774b0ec18c73f03d1db5f4a1f38edc861bb8b8d750b5c5b3615a98aaf995c0464dcfd6db5421888be0f868548c69455b5b3 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.2" +"@csstools/postcss-exponential-functions@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.3" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/034ff89089872f63a6b00bda670c5ff11361babd221ed3e441dde969a718059e5d44ab0ed331868f137bb205331b808ecbcc4cb641d5c945238ebca28aa3ed59 + checksum: 10c0/690ac6c5ec72e085160401100cc8465a040fd70d59efadf61ef767094edac28bbb2653f53ea7cfa47d8220d0be0b9e23c3e3c2b80d9e93ad07b1db8031163d70 languageName: node linkType: hard @@ -1619,46 +1619,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.3" +"@csstools/postcss-gamut-mapping@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/21f5708f63e9c3b7603f8b72b5f288e0a021e9710a6abf4aaa713ff4d04bae057d1861e1f28d7670ea39ba463ac04f1507876d4a11178934e7cc7a1c6a780084 + checksum: 10c0/60c6ff13cc71a0cda7ce184fa8b42924975f2bd05e3bc096059de853ae01d48e36f27d02d7e6286d9e8c4eb4dfd526f7c302ff51be19c5f7949dd6079915a3a9 languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.3": - version: 5.0.3 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.3" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.4": + version: 5.0.4 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/062d27148438309c940a1973bfc7d42a06caa9397bf2382c7a61979f5be3d6f3fae1bc8ddf94d2dd8e6c807e0530a9e76179510266aaddc439677bf79447a765 + checksum: 10c0/3b6aa4404851be09a083f35b596acc7e3f74f525386dcd2887720438638ca1893f79e699e5dad0e3a35487cb9527e08d0dcd29f1331f87800f53c13423321d6e languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-hwb-function@npm:4.0.3" +"@csstools/postcss-hwb-function@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-hwb-function@npm:4.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/faf2bfbafeec765391e37c7a5cbc7b4647d9ab1ffa51e922c7dfffa545c3d436d15604dfdfb9d7684e760042e62bb42e0243dd4ebd8c3c14694a9f7be4e57b30 + checksum: 10c0/2460cc7e6324f0793d12976de175ff33344c3410ff7a04ca8a5ce0560ee3354d1d8034f9f07c0759c2b7e222a4681d02298f6a29c2a326c76b33060830da83b4 languageName: node linkType: hard @@ -1684,29 +1684,29 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-is-pseudo-class@npm:^5.0.0": - version: 5.0.0 - resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.0" +"@csstools/postcss-is-pseudo-class@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/738eb84728b24bfe19ca06ccf6ff773a423552df2f31c87704ce79da4abfd2ccf2a45d5d6d3e11e71e42cc3d92eb35a856209b9cd6116c879acf15ac75454683 + checksum: 10c0/3aaab18ebb2dcf5565efa79813eaa987d40de1e086765358524392a09631c68ad1ee952e6aff8f42513b2c18ab84891787e065fe287f696128498fc641520b6c languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.5": - version: 2.0.5 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.5" +"@csstools/postcss-light-dark-function@npm:^2.0.6": + version: 2.0.6 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.6" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/80635ee312d2a8f42aa5ce6792f1dc4a71199c384c66a3270d37e998d96db55beaa6836d689cda3b7e4828227960582fae04659ba5e4e0f64fd4543cbf15c6ab + checksum: 10c0/f3e93b58a23f0f01c9d032a892070a18e3393e60997e1d2b57c5bddb2cb36f7ee6cbaeaeb3d531b065a545a03e54d86567d34b45eddf85ed48ac360eb4ab66cd languageName: node linkType: hard @@ -1760,30 +1760,30 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-media-minmax@npm:2.0.2" +"@csstools/postcss-media-minmax@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/postcss-media-minmax@npm:2.0.3" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/media-query-list-parser": "npm:^4.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/83cf10742884fca3baa7ae26e2cb34123ce5a022622390566c139b4587ea8583fab00acbb85545786b36398e2201d2a94301e0fae805e55f375f1b5c38f67ce8 + checksum: 10c0/87c1ed6fe6ed487125e383ae7bc356ba0f68885c41cd129b85c323af69255031a8ac7b2e994d4f9b6b65d6a9f6833aeb1301ca230b592547825aedb3e3acab4b languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.2" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.3" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/media-query-list-parser": "npm:^4.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/3ac4073d2e958bfb24ae45f673070dd805f0fcf07bc8d00a9a98f596d1096e7be282c8d8e87df3abde90f33fcbe2c7705e972b8c1a58e43ec44729f470b76096 + checksum: 10c0/3bbadd5c79ff2102b4a2e0f107d7f3cbb89d2840b935915531d0a1bfc711d58386e6e234fccb9b4abb37e48f07cdfaa4dd66b5c795dfac9e317fa8b5cfd38e06 languageName: node linkType: hard @@ -1810,18 +1810,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-oklab-function@npm:4.0.3" +"@csstools/postcss-oklab-function@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-oklab-function@npm:4.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/650bcb4f664308972588a8f789f806d63c4069e2e008cfc3b5c80bf9df992c62972dce279b8f434c7f78823e97095942ee4f0e37bc549258887213e72acb7ef8 + checksum: 10c0/4fd2a5c22ebaf69053e005d9d009ccb41b6879f0246677159bfb6a28208e90af857446c443d34fe3efdaf50bccdd67b16fcd0c1e7c52961396a48bd84e45311f languageName: node linkType: hard @@ -1836,42 +1836,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.3" +"@csstools/postcss-relative-color-syntax@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c241fe6b725d775f6d2085be1dff3868d189b176fa91ab1eb1133e30e30c8151bded4e50d17a845edd0bdd0a7adf9e8883cb2634fea3394872591fe9ad2a7e86 + checksum: 10c0/f2ae6f9053e976e2431d08bdc5aa40ca5242754e23370abdfd7b6087d7ed56037e46911d1be801cf7e760aa8aee94bcab6a46f4f68696cf6befacf707c1534b7 languageName: node linkType: hard -"@csstools/postcss-scope-pseudo-class@npm:^4.0.0": - version: 4.0.0 - resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.0" +"@csstools/postcss-scope-pseudo-class@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/a6f562df1417c6f257c0fec95babf4cea99a25622573a2dbcfb416e2fcb8e1e53561127f5e7277d19fcb2a4603bdbc64dd6a4c416429623503c604050c99229a + checksum: 10c0/6a0ca50fae655f4498200d1ce298ca794c85fbe2e3fd5d6419843254f055df5007a973e09b5f1e78e376c02b54278e411516c8d824300c68b265d3e5b311d7ee languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.2" +"@csstools/postcss-stepped-value-functions@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.3" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/444a27d725bc7a8e1554469e8ac69e248ff525b728fbe058523b0f1aefcff80ca707f543d21fead0a22d51603b1669190fb01f0f2dcd599a01768a37e0d62bc3 + checksum: 10c0/31af5a650d4b2de97d3a3ef77e7ad0777b3f013f7463e23455ac31ffc946d2f79f365a1fdead52c7c535176232ab57f6f086ecdbeca1bb0b250161b1302e8c8c languageName: node linkType: hard @@ -1887,16 +1887,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.2" +"@csstools/postcss-trigonometric-functions@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.3" dependencies: - "@csstools/css-calc": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/eaecb2ea891162e4fcbbccf4f660c99e9e59f21937b70fe6aec3b51441eff2a12c1a2dc13fff426722629a7929919fd866311eaa68d74ee9d1f5387a23502fe2 + checksum: 10c0/a13dd72c00e45e6db16c03e135f1cd1b2b412e83b7681696b49feef3a4c36ab80f5f806f3589d33405e2d14dd0dfb13572ec12007ebe3d294077b0bd3d645b2b languageName: node linkType: hard @@ -1909,12 +1909,12 @@ __metadata: languageName: node linkType: hard -"@csstools/selector-resolve-nested@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/selector-resolve-nested@npm:2.0.0" +"@csstools/selector-resolve-nested@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/selector-resolve-nested@npm:3.0.0" peerDependencies: - postcss-selector-parser: ^6.1.0 - checksum: 10c0/10516fd1db5e0a3963063caa57d24eeb1d1f69fcb63f0b5aec5d7a44f8b36ff07b1eded3012e8a9b92fc1f484e1a5a9def0cf57d788aa7f944ee79877837cc77 + postcss-selector-parser: ^7.0.0 + checksum: 10c0/2b01c36b3fa81388d5bddd8db962766465d76b021a815c8bb5a48c3a42c530154cc155fc496707ade627dbba6745eb8ecd9fa840c1972133c0f7d8811e0a959d languageName: node linkType: hard @@ -1927,6 +1927,15 @@ __metadata: languageName: node linkType: hard +"@csstools/selector-specificity@npm:^5.0.0": + version: 5.0.0 + resolution: "@csstools/selector-specificity@npm:5.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/186b444cabcdcdeb553bfe021f80c58bfe9ef38dcc444f2b1f34a5aab9be063ab4e753022b2d5792049c041c28cfbb78e4b707ec398459300e402030d35c07eb + languageName: node + linkType: hard + "@csstools/utilities@npm:^2.0.0": version: 2.0.0 resolution: "@csstools/utilities@npm:2.0.0" @@ -6493,14 +6502,14 @@ __metadata: languageName: node linkType: hard -"css-blank-pseudo@npm:^7.0.0": - version: 7.0.0 - resolution: "css-blank-pseudo@npm:7.0.0" +"css-blank-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-blank-pseudo@npm:7.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/74c6c0af773a8d2c8c5a53bcfc2b2c06f9c3fd4a8bd756b7aafc102b91a1060b179a4f0aa21475b54685b62bfd9724fee90778dd992b42e0cd3ea3698132af92 + checksum: 10c0/46c3d3a611972fdb0c264db7c0b34fe437bc4300961d11945145cf04962f52a545a6ef55bc8ff4afd82b605bd692b4970f2b54582616dea00441105e725d4618 languageName: node linkType: hard @@ -6520,16 +6529,16 @@ __metadata: languageName: node linkType: hard -"css-has-pseudo@npm:^7.0.0": - version: 7.0.0 - resolution: "css-has-pseudo@npm:7.0.0" +"css-has-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-has-pseudo@npm:7.0.1" dependencies: - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/2c72602ca9bcdb3afe2cce3b014e7dd17548658904c17560042ebf4bd6727b1ed8706961b1f44bff43bbdb8dc932c30a0b29f536c353df858e300e68e163b872 + checksum: 10c0/13789b08b70169204be786d652190356ace9313099d3656bd2fc38afbdd28f3d9620f0e0b07425480961b7a1ec789794961d0472f205b959d3f64c9a78ce511c languageName: node linkType: hard @@ -6665,10 +6674,10 @@ __metadata: languageName: node linkType: hard -"cssdb@npm:^8.1.1": - version: 8.1.1 - resolution: "cssdb@npm:8.1.1" - checksum: 10c0/d60facfad3bca70e21100fc35b9205cb9d3d0ac642f44f0a687e54bf787f21c43d28ce2d17fcd405f67950fb4709516108fe1f3cb15df570eff1007b5fbbc787 +"cssdb@npm:^8.1.2": + version: 8.1.2 + resolution: "cssdb@npm:8.1.2" + checksum: 10c0/056149e713a78921f56d9ef0cd734577cedb93c27966c3d0eab01956a2aa8d3c260a911766064b57ded8b4d9c55dd5275626cbb022ccd8d2d0b93b53fefd1603 languageName: node linkType: hard @@ -13184,14 +13193,14 @@ __metadata: languageName: node linkType: hard -"postcss-attribute-case-insensitive@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-attribute-case-insensitive@npm:7.0.0" +"postcss-attribute-case-insensitive@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-attribute-case-insensitive@npm:7.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ce2a96bc29f59a6113953f1f72bfa2d4d34e54b194ff4d49aad0d548aa738835afaf479f22060a2605952b842f63aeae278b44e41f8f3a05731df28d08e2df97 + checksum: 10c0/48945abe2024e2d2e4c37d30b8c1aaf37af720f24f6a996f7ea7e7ed33621f5c22cf247ed22028c0c922de040c58c0802729bc39b903cb1693f4b63c0b49da34 languageName: node linkType: hard @@ -13218,18 +13227,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-color-functional-notation@npm:7.0.3" +"postcss-color-functional-notation@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-color-functional-notation@npm:7.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/5e04c81002512c960784043c096bc91ebc76b8fddb9259a2418b0e121eb65042944cc0f78946f6b7e5774ff1fee087849019655e4848af1f88879e3ab9ff7c17 + checksum: 10c0/1e39c47f27610ebf6a6308cfea2904fbe1f157b13654325ada23153a944666722c6132b53dfc7660632406a636479dda68eeb97a246c2e593ad6eed1e9bf838d languageName: node linkType: hard @@ -13283,57 +13292,57 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.3": - version: 11.0.3 - resolution: "postcss-custom-media@npm:11.0.3" +"postcss-custom-media@npm:^11.0.4": + version: 11.0.4 + resolution: "postcss-custom-media@npm:11.0.4" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.0" + "@csstools/media-query-list-parser": "npm:^4.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/bd3f0cf17d7422385d26afed510dc2acebb1d8c25fce13e2bbee1c49cdc7fe95ebe7f50b89ef0a88ebdd5f6826e89d99e26b905881ceff788df655670dba93d8 + checksum: 10c0/31e82e5802f6933a15f5fcf64ff41c8107af9c1d5dcba3c4422a6de3fac77bce9e3dc4ed2b79ae7f6ae460549c5da5a013669af05c1ae21549dbb09b66a9492d languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.2": - version: 14.0.2 - resolution: "postcss-custom-properties@npm:14.0.2" +"postcss-custom-properties@npm:^14.0.3": + version: 14.0.3 + resolution: "postcss-custom-properties@npm:14.0.3" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/ea2e0cb60c558bb1afb4e601dcc64a38e1b28e5df3e47b83b858fc12d909d0e3453013e6b368fc05a7db7098ffcdc702a30a92f1a3c0ef67dfb97bf089021f1a + checksum: 10c0/878ffd171ab9bbbba711930cf1b5bd48a12779e3b45d69f41366c2f65d84518f9338a92a277c0e390518c9e12272e06892cdc6575783bcdecfa6d26ebde3d043 languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.2": - version: 8.0.2 - resolution: "postcss-custom-selectors@npm:8.0.2" +"postcss-custom-selectors@npm:^8.0.3": + version: 8.0.3 + resolution: "postcss-custom-selectors@npm:8.0.3" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/81673ffb0874f63c0f5e14315a5808259ec80ae8452aaf10d28112d30a9aaabbf61d13edb02f8be2965f44b943968c7eda051a1693da436ef157e77fcff0d752 + checksum: 10c0/3acdada43e385c23130f1dde41b189acc7739e5bbd14751ae28b2bd97b0d97f30c2a53da4f9558d108a893cc48717f76b28395a9ff38dcbbe3c3a1721ee4a68a languageName: node linkType: hard -"postcss-dir-pseudo-class@npm:^9.0.0": - version: 9.0.0 - resolution: "postcss-dir-pseudo-class@npm:9.0.0" +"postcss-dir-pseudo-class@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-dir-pseudo-class@npm:9.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/debae71bf508c0e494ebb1892ce6b3c1c4eeb6b23231180151a93920a12fec771815510cdec54db54605e090ae56af9f07c68ef6a61260d0c837adc719f9e1e4 + checksum: 10c0/da9d3387648c5c3161a653d354c8f3e70a299108df3977e8aa65cf10793e4dd58a2711b3426cd63716245b13584ca8d95adcd6e10e3c9adbc61d08743e2d8690 languageName: node linkType: hard @@ -13388,25 +13397,25 @@ __metadata: languageName: node linkType: hard -"postcss-focus-visible@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-focus-visible@npm:10.0.0" +"postcss-focus-visible@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-focus-visible@npm:10.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b86b825bac597092b300127c2686c0669ce0766165716ecda42f298f21ca69dda721e44917732cbcb2611a4ab650f1231bf8c5d4d07c9daefef815329251ae8a + checksum: 10c0/c5ecc8536a708a49a99d0abd68a88a160664e6c832c808db8edd9f0221e7017a258daa87e49daf2cb098cb037005d46cf492403c8c9c92ad8835d30adaccf665 languageName: node linkType: hard -"postcss-focus-within@npm:^9.0.0": - version: 9.0.0 - resolution: "postcss-focus-within@npm:9.0.0" +"postcss-focus-within@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-within@npm:9.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1d6f1b4f4d12e23a2824f394652d520942f00fd582d3016c933a492fe0ba38aaf26bc1855576878aaeaeda1d6fc38da39bb51e8e6470c50ef03f3ea9a286b3d1 + checksum: 10c0/d6ab49d2a7f33485a9e137dc77ec92c5619a3ec92e1e672734fc604853ff1f3c0c189085c12461614be4fcb03ea0347d91791a45986a18d50b5228d161eda57a languageName: node linkType: hard @@ -13440,18 +13449,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-lab-function@npm:7.0.3" +"postcss-lab-function@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-lab-function@npm:7.0.4" dependencies: - "@csstools/css-color-parser": "npm:^3.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.3" "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/c50a73a9ed54b4194998c4627599d1f42074235f572edbbcdb0e00717f3ae2121dc8378d917792b281860c5650a617d923823da6f395515f610b5760d115354d + checksum: 10c0/79ce3cc20484aef0e0bbc2d18c8f91d7362226a3db52f06a931ac8e1c58ffbc60876c6439f364093e5f16ef92260a420230cfb2a9e7b95c6c11e6f7d57626260 languageName: node linkType: hard @@ -13608,16 +13617,16 @@ __metadata: languageName: node linkType: hard -"postcss-nesting@npm:^13.0.0": - version: 13.0.0 - resolution: "postcss-nesting@npm:13.0.0" +"postcss-nesting@npm:^13.0.1": + version: 13.0.1 + resolution: "postcss-nesting@npm:13.0.1" dependencies: - "@csstools/selector-resolve-nested": "npm:^2.0.0" - "@csstools/selector-specificity": "npm:^4.0.0" - postcss-selector-parser: "npm:^6.1.0" + "@csstools/selector-resolve-nested": "npm:^3.0.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/b82a3c7010f7c6097bd3f3fe6c03f3f3af9a63a58e255f120dadd506a0ea9444aeeaba994f2a3fa34fb26e666dc72032edf5786c5fbdade790b02ad07d91ef95 + checksum: 10c0/549307c272cdd4cb5105d8fbcd582f15a1cb74e5bba240b05b27f77fe0422730be966699a49a9ad15fd9d1bc551c1edbaefb21a69686a9b131b585dbc9d90ebf languageName: node linkType: hard @@ -13772,84 +13781,84 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.7 - resolution: "postcss-preset-env@npm:10.0.7" - dependencies: - "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.3" - "@csstools/postcss-color-mix-function": "npm:^3.0.3" - "@csstools/postcss-content-alt-text": "npm:^2.0.2" - "@csstools/postcss-exponential-functions": "npm:^2.0.2" + version: 10.0.8 + resolution: "postcss-preset-env@npm:10.0.8" + dependencies: + "@csstools/postcss-cascade-layers": "npm:^5.0.1" + "@csstools/postcss-color-function": "npm:^4.0.4" + "@csstools/postcss-color-mix-function": "npm:^3.0.4" + "@csstools/postcss-content-alt-text": "npm:^2.0.3" + "@csstools/postcss-exponential-functions": "npm:^2.0.3" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.3" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.3" - "@csstools/postcss-hwb-function": "npm:^4.0.3" + "@csstools/postcss-gamut-mapping": "npm:^2.0.4" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.4" + "@csstools/postcss-hwb-function": "npm:^4.0.4" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" - "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.5" + "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" + "@csstools/postcss-light-dark-function": "npm:^2.0.6" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" "@csstools/postcss-logical-viewport-units": "npm:^3.0.2" - "@csstools/postcss-media-minmax": "npm:^2.0.2" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.2" + "@csstools/postcss-media-minmax": "npm:^2.0.3" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.3" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.3" + "@csstools/postcss-oklab-function": "npm:^4.0.4" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.3" - "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.2" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.4" + "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.3" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.2" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.3" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" - css-blank-pseudo: "npm:^7.0.0" - css-has-pseudo: "npm:^7.0.0" + css-blank-pseudo: "npm:^7.0.1" + css-has-pseudo: "npm:^7.0.1" css-prefers-color-scheme: "npm:^10.0.0" - cssdb: "npm:^8.1.1" - postcss-attribute-case-insensitive: "npm:^7.0.0" + cssdb: "npm:^8.1.2" + postcss-attribute-case-insensitive: "npm:^7.0.1" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.3" + postcss-color-functional-notation: "npm:^7.0.4" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.3" - postcss-custom-properties: "npm:^14.0.2" - postcss-custom-selectors: "npm:^8.0.2" - postcss-dir-pseudo-class: "npm:^9.0.0" + postcss-custom-media: "npm:^11.0.4" + postcss-custom-properties: "npm:^14.0.3" + postcss-custom-selectors: "npm:^8.0.3" + postcss-dir-pseudo-class: "npm:^9.0.1" postcss-double-position-gradients: "npm:^6.0.0" - postcss-focus-visible: "npm:^10.0.0" - postcss-focus-within: "npm:^9.0.0" + postcss-focus-visible: "npm:^10.0.1" + postcss-focus-within: "npm:^9.0.1" postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.3" + postcss-lab-function: "npm:^7.0.4" postcss-logical: "npm:^8.0.0" - postcss-nesting: "npm:^13.0.0" + postcss-nesting: "npm:^13.0.1" postcss-opacity-percentage: "npm:^3.0.0" postcss-overflow-shorthand: "npm:^6.0.0" postcss-page-break: "npm:^3.0.4" postcss-place: "npm:^10.0.0" - postcss-pseudo-class-any-link: "npm:^10.0.0" + postcss-pseudo-class-any-link: "npm:^10.0.1" postcss-replace-overflow-wrap: "npm:^4.0.0" - postcss-selector-not: "npm:^8.0.0" + postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/f789000e0504fd827e854bb0feb8b4c218d381314e4d863c5a36df925df412d0844c912952fe27892a320433640aeaff03ee94a3057b42011bf5d32b3963f333 + checksum: 10c0/3f7dc8eb2e7f4e7a5eee0a9456972a5b18bd40109d1aa3328f60cd645d352f3a70c83c507ea58f83b820153b0f5c3f14af3f376573c56599c36d5739c943b6f1 languageName: node linkType: hard -"postcss-pseudo-class-any-link@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-pseudo-class-any-link@npm:10.0.0" +"postcss-pseudo-class-any-link@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-pseudo-class-any-link@npm:10.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/8357716e0ba0f01c70dba65a1efd268f610249ac2fbd41833e5e87dc19ffa7911c8d5e234d0d7c77d94ba6cdfa04fe7f0f98461c34f64cdbb59abd9737ab7d32 + checksum: 10c0/95e883996e87baf14fc09d25f9a763a2e9d599eb3b9c6b736e83a8c3d0b55841bcb886bccdf51b5b7fefc128cbd0187ad8841f59878f85bd1613642e592d7673 languageName: node linkType: hard @@ -13910,18 +13919,18 @@ __metadata: languageName: node linkType: hard -"postcss-selector-not@npm:^8.0.0": - version: 8.0.0 - resolution: "postcss-selector-not@npm:8.0.0" +"postcss-selector-not@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-selector-not@npm:8.0.1" dependencies: - postcss-selector-parser: "npm:^6.1.0" + postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/677f2cd9d0cd481d276663b57001b2ba96db94ad5bba397f277e53d560ccb074b27c21792deff44720a9f2d96da85fa34f438bb1d33198305b5866b35f1a4708 + checksum: 10c0/491ea3dcc421cd90135be786078521605e2062fb93624ea8813cfd5ba0d35143f931e2e608d5f20effd5ea7d3f4786d2afea2afa42d117779a0288e135f132b6 languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.2": +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.2": version: 6.1.2 resolution: "postcss-selector-parser@npm:6.1.2" dependencies: @@ -13931,6 +13940,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-selector-parser@npm:7.0.0" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/e96e096afcce70bf5c97789f5ea09d7415ae5eb701d82b05b5e8532885d31363b484fcb1ca9488c9a331f30508d9e5bb6c3109eb2eb5067ef3d3919f9928cd9d + languageName: node + linkType: hard + "postcss-svgo@npm:^7.0.1": version: 7.0.1 resolution: "postcss-svgo@npm:7.0.1" From aa29e42cf8ceedbd65778f73e508f8180042c33c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 09:17:41 +0000 Subject: [PATCH 380/467] Update babel monorepo to v7.25.9 (#32628) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 1276 ++++++++++++++++++++++++++--------------------------- 1 file changed, 634 insertions(+), 642 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3951c1c8cbd0e9..5b563d52d659ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,127 +42,127 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/code-frame@npm:7.25.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/code-frame@npm:7.25.9" dependencies: - "@babel/highlight": "npm:^7.25.7" + "@babel/highlight": "npm:^7.25.9" picocolors: "npm:^1.0.0" - checksum: 10c0/14825c298bdec914caf3d24d1383b6d4cd6b030714686004992f4fc251831ecf432236652896f99d5d341f17170ae9a07b58d8d7b15aa0df8cfa1c5a7d5474bc + checksum: 10c0/88562eba0eeb5960b7004e108790aa00183d90cbbe70ce10dad01c2c48141d2ef54d6dcd0c678cc1e456de770ffeb68e28559f4d222c01a110c79aea8733074b languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7, @babel/compat-data@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/compat-data@npm:7.25.8" - checksum: 10c0/8b81c17580e5fb4cbb6a3c52079f8c283fc59c0c6bd2fe14cfcf9c44b32d2eaab71b02c5633e2c679f5896f73f8ac4036ba2e67a4c806e8f428e4b11f526d7f4 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/compat-data@npm:7.25.9" + checksum: 10c0/8d9fc2074311ce61aaf5bccf740a808644d19d4859caf5fa46d8a7186a1ee0b0d8cbbc23f9371f8b397e84a885bdeab58d5f22d6799ddde55973252aac351a27 languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": - version: 7.25.8 - resolution: "@babel/core@npm:7.25.8" + version: 7.25.9 + resolution: "@babel/core@npm:7.25.9" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.8" - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.8" + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helpers": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/8411ea506e6f7c8a39ab5c1524b00589fa3b087edb47389708f7fe07170929192171734666e3ea10b95a951643a531a6d09eedfe071572c9ea28516646265086 + checksum: 10c0/40d3064ebe906f65ed4153a0f4d75c679a19e4d71e425035b7bbe2d292a9167274f1a0d908d4d6c8f484fcddeb10bd91e0c7878fdb3dfad1bb00f6a319ce431d languageName: node linkType: hard -"@babel/generator@npm:^7.25.7, @babel/generator@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/generator@npm:7.25.7" +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/generator@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.9" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/c03a26c79864d60d04ce36b649c3fa0d6fd7b2bf6a22e22854a0457aa09206508392dd73ee40e7bc8d50b3602f9ff068afa47770cda091d332e7db1ca382ee96 + checksum: 10c0/fca49a1440ac550bb835a73c0e8314849cd493a468a5431ca7f9dbb3d3443e3a1a6dcba2426752e8a97cc2feed4a3b7a0c639e1c45871c4a9dd0c994f08dd25a languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.25.7" +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10c0/2f020b0fa9d336b5778485cc2de3141561ec436a7591b685457a5bcdae4ce41d9ddee68169c95504e0789e5a4327e73b8b7e72e5b60e82e96d730c4d19255248 + "@babel/types": "npm:^7.25.9" + checksum: 10c0/095b6ba50489d797733abebc4596a81918316a99e3632755c9f02508882912b00c2ae5e468532a25a5c2108d109ddbe9b7da78333ee7cc13817fc50c00cf06fe languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/e9dc5a7920a1d74150dec53ccd5e34f2b31ae307df7cdeec6289866f7bda97ecb1328b49a7710ecde5db5b6daad768c904a030f9a0fa3184963b0017622c42aa + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/a6068bb813e7f72d12b72edeecb99167f60cd7964cacedfb60e01fff5e7bed4a5a7f4f7414de7cf352a1b71487df5f8dab8c2b5230de4ad5aea16adf32e14219 languageName: node linkType: hard -"@babel/helper-builder-react-jsx@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-builder-react-jsx@npm:7.25.7" +"@babel/helper-builder-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-builder-react-jsx@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/f8123a76e8c3fcdbb24cc14bfefc80e4c7bf58112ab26bea3247298748c674cbaee70591c362d0d881e4d88154ea4809b145f3ddcf96221cf55ba27bfde535c6 + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/99d6e87eede0971f25b5e638220f5f966c56c03f6a6278a693c73ac0a31acddb86110208a89d948aa337c8cf7998fb317c00e8baf2e9fa0a42b9207b977dc9c6 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-compilation-targets@npm:7.25.7" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-compilation-targets@npm:7.25.9" dependencies: - "@babel/compat-data": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/705be7e5274a3fdade68e3e2cf42e2b600316ab52794e13b91299a16f16c926f15886b6e9d6df20eb943ccc1cdba5a363d4766f8d01e47b8e6f4e01175f5e66c + checksum: 10c0/a6b26a1e4222e69ef8e62ee19374308f060b007828bc11c65025ecc9e814aba21ff2175d6d3f8bf53c863edd728ee8f94ba7870f8f90a37d39552ad9933a8aaa languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.7" +"@babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/405c3c1a137acda1206380a96993cf2cfd808b3bee1c11c4af47ee0f03a20858497aa53394d6adc5431793c543be5e02010620e871a5ab39d938ae90a54b50f2 + checksum: 10c0/b2bdd39f38056a76b9ba00ec5b209dd84f5c5ebd998d0f4033cf0e73d5f2c357fbb49d1ce52db77a2709fb29ee22321f84a5734dc9914849bdfee9ad12ce8caf languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.7" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" regexpu-core: "npm:^6.1.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/75919fd5a67cd7be8497b56f7b9ed6b4843cb401956ba8d403aa9ae5b005bc28e35c7f27e704d820edbd1154394ed7a7984d4719916795d89d716f6980fe8bd4 + checksum: 10c0/3adc60a758febbf07d65a15eaccab1f7b9fcc55e7141e59122f13c9f81fc0d1cce4525b7f4af50285d27c93b34c859fd2c39c39820c5fb92211898c3bbdc77ef languageName: node linkType: hard @@ -181,223 +181,223 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.25.7" +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/1e948162ab48d84593a7c6ec9570d14c906146f1697144fc369c59dbeb00e4a062da67dd06cb0d8f98a044cd8389002dcf2ab6f5613d99c35748307846ec63fc + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/e08c7616f111e1fb56f398365e78858e26e466d4ac46dff25921adc5ccae9b232f66e952a2f4162bbe336627ba336c7fd9eca4835b6548935973d3380d77eaff languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-imports@npm:7.25.7" +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/0fd0c3673835e5bf75558e184bcadc47c1f6dd2fe2016d53ebe1e5a6ae931a44e093015c2f9a6651c1a89f25c76d9246710c2b0b460b95ee069c464f2837fa2c + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-module-transforms@npm:7.25.7" +"@babel/helper-module-transforms@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-transforms@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-simple-access": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/f37fa7d1d4df21690535b278468cbd5faf0133a3080f282000cfa4f3ffc9462a1458f866b04b6a2f2d1eec4691236cba9a867da61270dab3ab19846e62f05090 + checksum: 10c0/cd005e7585806845d79c5c0ca9e8926f186b430b0a558dad08a3611365eaad3ac587672b0d903530117dec454f48b6bdc3d164b19ea1b71ca1b4eb3be7b452ef languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.25.7" +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.7" - checksum: 10c0/19b4cc7e77811b1fedca4928dbc14026afef913c2ba4142e5e110ebdcb5c3b2efc0f0fbee9f362c23a194674147b9d627adea71c289b9be08b9067bc0085308b + "@babel/types": "npm:^7.25.9" + checksum: 10c0/90203e6607edeadd2a154940803fd616c0ed92c1013d6774c4b8eb491f1a5a3448b68faae6268141caa5c456e55e3ee49a4ed2bd7ddaf2365daea321c435914c languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.25.7 - resolution: "@babel/helper-plugin-utils@npm:7.25.7" - checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.25.9 + resolution: "@babel/helper-plugin-utils@npm:7.25.9" + checksum: 10c0/483066a1ba36ff16c0116cd24f93de05de746a603a777cd695ac7a1b034928a65a4ecb35f255761ca56626435d7abdb73219eba196f9aa83b6c3c3169325599d languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.7" +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-wrap-function": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-wrap-function": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/972d84876adce6ab61c87a2df47e1afc790b73cff0d1767d0a1c5d9f7aa5e91d8c581a272b66b2051a26cfbb167d8a780564705e488e3ce1f477f1c15059bc5f + checksum: 10c0/6798b562f2788210980f29c5ee96056d90dc73458c88af5bd32f9c82e28e01975588aa2a57bb866c35556bd9b76bac937e824ee63ba472b6430224b91b4879e9 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-replace-supers@npm:7.25.7" +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-replace-supers@npm:7.25.9" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.25.7" - "@babel/helper-optimise-call-expression": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/761d64ee74429f7326a6aa65e2cd5bfcb8de9e3bc3f1efb14b8f610d2410f003b0fca52778dc801d49ff8fbc90b057e8f51b27c62b0b05c95eaf23140ca1287b + checksum: 10c0/0b40d7d2925bd3ba4223b3519e2e4d2456d471ad69aa458f1c1d1783c80b522c61f8237d3a52afc9e47c7174129bbba650df06393a6787d5722f2ec7f223c3f4 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-simple-access@npm:7.25.7" +"@babel/helper-simple-access@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-simple-access@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/eed1b499bfb4f613c18debd61517e3de77b6da2727ca025aa05ac81599e0269f1dddb5237db04e8bb598115d015874752e0a7f11ff38672d74a4976097417059 + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/3f1bcdb88ee3883ccf86959869a867f6bbf8c4737cd44fb9f799c38e54f67474590bc66802500ae9fe18161792875b2cfb7ec15673f48ed6c8663f6d09686ca8 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" dependencies: - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/5804adb893849a9d8cfb548e3812566a81d95cb0c9a10d66b52912d13f488e577c33063bf19bc06ac70e6333162a7370d67ba1a1c3544d37fb50d5f4a00db4de + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/09ace0c6156961624ac9524329ce7f45350bab94bbe24335cbe0da7dfaa1448e658771831983cb83fe91cf6635b15d0a3cab57c03b92657480bfb49fb56dd184 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-string-parser@npm:7.25.7" - checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-identifier@npm:7.25.7" - checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-validator-option@npm:7.25.7" - checksum: 10c0/12ed418c8e3ed9ed44c8c80d823f4e42d399b5eb2e423adccb975e31a31a008cd3b5d8eab688b31f740caff4a1bb28fe06ea2fa7d635aee34cc0ad6995d50f0a +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helper-wrap-function@npm:7.25.7" +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/b5d412f72697f4a4ce4cb9784fbaf82501c63cf95066c0eadd3179e3439cbbf0aa5fa4858d93590083671943cd357aeb87286958df34aa56fdf8a4c9dea39755 + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/b6627d83291e7b80df020f8ee2890c52b8d49272962cac0114ef90f189889c90f1027985873d1b5261a4e986e109b2754292dc112392f0b1fcbfc91cc08bd003 languageName: node linkType: hard -"@babel/helpers@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/helpers@npm:7.25.7" +"@babel/helpers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helpers@npm:7.25.9" dependencies: - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/3b3ae9e373bd785414195ef8f59976a69d5a6ebe0ef2165fdcc5165e5c3ee09e0fcee94bb457df2ddb8c0532e4146d0a9b7a96b3497399a4bff4ffe196b30228 + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/4354fbf050291937d0f127f6f927a0c471b604524e0767516fefb91dc36427f25904dd0d2b2b3bbc66bce1894c680cc37eac9ab46970d70f24bf3e53375612de languageName: node linkType: hard -"@babel/highlight@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/highlight@npm:7.25.7" +"@babel/highlight@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.9" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/1f5894fdb0a0af6101fb2822369b2eeeae32cbeae2ef73ff73fc6a0a4a20471565cd9cfa589f54ed69df66adeca7c57266031ca9134b7bd244d023a488d419aa + checksum: 10c0/ae0ed93c151b85a07df42936117fa593ce91563a22dfc8944a90ae7088c9679645c33e00dcd20b081c1979665d65f986241172dae1fc9e5922692fc3ff685a49 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/parser@npm:7.25.8" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/parser@npm:7.25.9" dependencies: - "@babel/types": "npm:^7.25.8" + "@babel/types": "npm:^7.25.9" bin: parser: ./bin/babel-parser.js - checksum: 10c0/a1a13845b7e8dda4c970791814a4bbf60004969882f18f470e260ad822d2e1f8941948f851e9335895563610f240fa6c98481ce8019865e469502bbf21daafa4 + checksum: 10c0/143faff8a72331be5ed94080e0f4645cbeea814fb488cd9210154083735f67cb66fde32f6a4a80efd6c4cdf12c6f8b50995a465846093c7f65c5da8d7829627c languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.7" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/c6ba97c39973897a2ab021c4a77221e1e93e853a5811d498db325da1bd692e41fa521db6d91bb709ccafd4e54ddd00869ffb35846923c3ccd49d46124b316904 + checksum: 10c0/7aab47fcbb8c1ddc195a3cd66609edcad54c5022f018db7de40185f0182950389690e953e952f117a1737b72f665ff02ad30de6c02b49b97f1d8f4ccdffedc34 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.7" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/ac284868bf410f952c6959b0d77708464127160416f003b05c8127d30e64792d671abc167ebf778b17707e32174223ea8d3ff487276991fa90297d92f0dac6e2 + checksum: 10c0/3a652b3574ca62775c5f101f8457950edc540c3581226579125da535d67765f41ad7f0e6327f8efeb2540a5dad5bb0c60a89fb934af3f67472e73fb63612d004 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/1bffc0a20c8c82b4c77515eb4c99b961b38184116f008bb42bed4e12d3379ba7b2bc6cf299bcea8118d645bb7a5e0caa83969842f16dd1fce49fb3a050e4ac65 + checksum: 10c0/18fc9004104a150f9f5da9f3307f361bc3104d16778bb593b7523d5110f04a8df19a2587e6bdd5e726fb1d397191add45223f4f731bb556c33f14f2779d596e8 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10c0/32223f012614a0b2657579317ded7d0d09af2aa316285715c5012f974d0f15c2ce2fe0d8e80fdd9bac6c10c21c93cc925a9dfd6c8e21ce7ba1a9fe06a58088b4 + checksum: 10c0/3f6c8781a2f7aa1791a31d2242399ca884df2ab944f90c020b6f112fb19f05fa6dad5be143d274dad1377e40415b63d24d5489faf5060b9c4a99e55d8f0c317c languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.7" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/aa2ee7a5954d187de6cbcca0e0b64cfb79c4d224c332d1eb1e0e4afd92ef1a1f4bc4af24f66154097ccb348c08121a875456f47baed220b1b9e93584e6a19b65 + checksum: 10c0/02b365f0cc4df8b8b811c68697c93476da387841e5f153fe42766f34241b685503ea51110d5ed6df7132759820b93e48d9fa3743cffc091eed97c19f7e5fe272 languageName: node linkType: hard @@ -443,25 +443,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" +"@babel/plugin-syntax-import-assertions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0fee0d971f3c654749fdf92e09b6556bba26ab014c8e99b7252f6a7f1ca108f17edd7ceefb5401d7b7008e98ab1b6f8c3c6a5db72862e7c7b2fcd649d000d690 + checksum: 10c0/f5a022b8a7f3585cf1586535224b06ae380983d3c14f7127b82792ef50cd8194047080540c8abec7aa8f8bfe7d774d71a1ee91f4fd3fa0277f7ffe2d3c6c4977 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.7" +"@babel/plugin-syntax-import-attributes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/fe00cdb96fd289ab126830a98e1dcf5ab7b529a6ef1c01a72506b5e7b1197d6e46c3c4d029cd90d1d61eb9a15ef77c282d156d0c02c7e32f168bb09d84150db4 + checksum: 10c0/bbdf97ba088c3d482492f6c3376422752b1723ce32e3ac11b000faf3c942d68e418c8a911431cb05d5e300d008cc37cd5518e89807a5813c2ac8fdd82d171f8d languageName: node linkType: hard @@ -487,14 +487,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.25.0, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" +"@babel/plugin-syntax-jsx@npm:^7.25.0, @babel/plugin-syntax-jsx@npm:^7.25.9, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/17db499c31fcfaa94d5408726d943955d51d478353d1e2dd84eda6024f7e3d104b9456a77f8aabfae0db7f4dc32f810d08357112f7fcbe305e7c9fcf5b3cac13 + checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c languageName: node linkType: hard @@ -575,14 +575,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.25.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.25.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.7" +"@babel/plugin-syntax-typescript@npm:^7.25.9, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ed51fd81a5cf571a89fc4cf4c0e3b0b91285c367237374c133d2e5e718f3963cfa61b81997df39220a8837dc99f9e9a8ab7701d259c09fae379e4843d9db60c2 + checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2 languageName: node linkType: hard @@ -598,454 +598,454 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.7" +"@babel/plugin-transform-arrow-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c8d75ead93f130bf113b6d29493aca695092661ef039336d2a227169c3b7895aa5e9bcc548c42a95a6eaaaf49e512317b00699940bd40ccefd77443e703d3935 + checksum: 10c0/851fef9f58be60a80f46cc0ce1e46a6f7346a6f9d50fa9e0fa79d46ec205320069d0cc157db213e2bea88ef5b7d9bd7618bb83f0b1996a836e2426c3a3a1f622 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.8" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1698d0757d3dc895047120346cdbe6d539dae4a7bb930caf958c3623e89c850d378d1ebd971a1a8b4cba39c8f001cd9c25a1d6f430099022ab1e87aeddb5dd88 + checksum: 10c0/e3fcb9fc3d6ab6cbd4fcd956b48c17b5e92fe177553df266ffcd2b2c1f2f758b893e51b638e77ed867941e0436487d2b8b505908d615c41799241699b520dec6 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.7" +"@babel/plugin-transform-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-remap-async-to-generator": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1dbefba9c1455f7a92b8c59a93c622091db945294c936fc2c09b1648308c5b4cb2ecaae92baae0d07a324ab890a8a2ee27ceb046bc120932845d27aede275821 + checksum: 10c0/c443d9e462ddef733ae56360064f32fc800105803d892e4ff32d7d6a6922b3765fa97b9ddc9f7f1d3f9d8c2d95721d85bef9dbf507804214c6cf6466b105c168 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b1e77492295d1b271ef850a81b0404cf3d0dd6a2bcbeab28a0fd99e61c6de4bda91dff583bb42138eec61bf71282bdd3b1bebcb53b7e373035e77fd6ba66caeb + checksum: 10c0/e92ba0e3d72c038513844d8fca1cc8437dcb35cd42778e97fd03cb8303380b201468611e7ecfdcae3de33473b2679fe2de1552c5f925d112c5693425cf851f10 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.7" +"@babel/plugin-transform-block-scoping@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b2057e00535cd0e8bd5ee5d4640aa2e952564aeafb1bcf4e7b6de33442422877bb0ca8669ad0a48262ec077271978c61eae87b6b3bc8f472d830fa781d6f7e44 + checksum: 10c0/a76e30becb6c75b4d87a2cd53556fddb7c88ddd56bfadb965287fd944810ac159aa8eb5705366fc37336041f63154ed9fab3862fb10482a45bf5ede63fd55fda languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.7" +"@babel/plugin-transform-class-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1f41e6934b20ad3e05df63959cff9bc600ff3119153b9acbbd44c1731e7df04866397e6e17799173f4c53cdee6115e155632859aee20bf47ec7dcef3f2168a47 + checksum: 10c0/f0603b6bd34d8ba62c03fc0572cb8bbc75874d097ac20cc7c5379e001081210a84dba1749e7123fca43b978382f605bb9973c99caf2c5b4c492d5c0a4a441150 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.8" +"@babel/plugin-transform-class-static-block@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/4f37853aef6920875022bbb2d7c6523218d9d718291464e2cacd9cc6f2c22d86a69948d8ea38f9248843bbfe9343f3fd18cf16b1615560124198bf999e3ba612 + checksum: 10c0/696a3a8acde79d6fee4f685ee1353bf483c4cd50a38e586a1a044268df72d87f9b1a3b7c473def6cde836aa69931fd5a75560bb9ee3a635ebde8911575ed49ca languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-classes@npm:7.25.7" +"@babel/plugin-transform-classes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8121781e1d8acd80e6169019106f73a399475ad9c895c1988a344dfed5a6ddd340938ac55123dc1e423bb8f25f255f5d11031116ad756ba3c314595a97c973af + checksum: 10c0/02742ea7cd25be286c982e672619effca528d7a931626a6f3d6cea11852951b7ee973276127eaf6418ac0e18c4d749a16b520709c707e86a67012bd23ff2927d languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.25.7" +"@babel/plugin-transform-computed-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7ad0a1c126f50935a02e77d438ebc39078a9d644b3a60de60bec32c5d9f49e7f2b193fcecb8c61bb1bc3cdd4af1e93f72d022d448511fa76a171527c633cd1bf + checksum: 10c0/948c0ae3ce0ba2375241d122a9bc7cda4a7ac8110bd8a62cd804bc46a5fdb7a7a42c7799c4cd972e14e0a579d2bd0999b92e53177b73f240bb0d4b09972c758b languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.25.7" +"@babel/plugin-transform-destructuring@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a563123b2fb267e03aa50104005f00b56226a685938906c42c1b251462e0cc9fc89e587d5656d3324159071eb8ebda8c68a6011f11d5a00fb1436cb5a5411b7b + checksum: 10c0/7beec5fda665d108f69d5023aa7c298a1e566b973dd41290faa18aeea70f6f571295c1ece0a058f3ceb6c6c96de76de7cd34f5a227fbf09a1b8d8a735d28ca49 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.7" +"@babel/plugin-transform-dotall-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7f1db3ec20b7fae46db4a9c4c257d75418b0896b72c0a3de20b3044f952801480f0a2e75ebb0d64f13e8cd4db0e49aa42c5c0edff372b23c41679b1ea5dd3ed4 + checksum: 10c0/7c3471ae5cf7521fd8da5b03e137e8d3733fc5ee4524ce01fb0c812f0bb77cb2c9657bc8a6253186be3a15bb4caa8974993c7ddc067f554ecc6a026f0a3b5e12 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b4079981e2db19737a0f1a00254e7388e2d3c01ce36e9fd826e4d86d3c1755339495e29c71fd7c84a068201ec24687328d48f3bf53b32b6d6224f51d9a34da74 + checksum: 10c0/d0c74894b9bf6ff2a04189afffb9cd43d87ebd7b7943e51a827c92d2aaa40fa89ac81565a2fd6fbeabf9e38413a9264c45862eee2b017f1d49046cc3c8ff06b4 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/e4946090ff6d88d54b78265ee653079ec34c117ac046e22f66f7c4ac44249cdc2dfca385bc5bf4386db668b9948eeb12985589500188bc252e684c7714c31475 + checksum: 10c0/a8039a6d2b90e011c7b30975edee47b5b1097cf3c2f95ec1f5ddd029898d783a995f55f7d6eb8d6bb8873c060fb64f9f1ccba938dfe22d118d09cf68e0cd3bf6 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.8" +"@babel/plugin-transform-dynamic-import@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9726abc1b07771a9c1e3670908ac425d21e29f54c775d10ed7a4e2bc0a18e07600f70bbc531deba3fb3ff7f6763c189200593264c6f784dac583e653b66fe754 + checksum: 10c0/5e643a8209072b668350f5788f23c64e9124f81f958b595c80fecca6561086d8ef346c04391b9e5e4cad8b8cbe22c258f0cd5f4ea89b97e74438e7d1abfd98cf languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.9" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c8537b9f3cddc5a8d3710f6980196dc7a0f4389f8f82617312a5f7b8b15bcd8ddaeba783c687c3ac6031eb0a4ba0bc380a98da6bf7efe98e225602a98ad42a1e + checksum: 10c0/3b42f65bab3fee28c385115ce6bcb6ba544dff187012df408a432c9fb44c980afd898911020c723dc1c9257aaf3d7d0131ad83ba15102bf30ad9a86fc2a8a912 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.8" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8a2e1205dd727a96a9adef0e981d68c61b1c286480b9136e2aa67ce3e2c742be4f87feb9fb4c5548a401aba0953d43d66e9ec36a54dea6a7c15f1ee9345baf57 + checksum: 10c0/f291ea2ec5f36de9028a00cbd5b32f08af281b8183bf047200ff001f4cb260be56f156b2449f42149448a4a033bd6e86a3a7f06d0c2825532eb0ae6b03058dfb languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-for-of@npm:7.25.7" +"@babel/plugin-transform-for-of@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/08a37a1742368a422d095c998ed76f60f6bf3f9cc060033be121d803fd2dddc08fe543e48ee49c022bdc9ed80893ca79d084958d83d30684178b088774754277 + checksum: 10c0/bf11abc71934a1f369f39cd7a33cf3d4dc5673026a53f70b7c1238c4fcc44e68b3ca1bdbe3db2076f60defb6ffe117cbe10b90f3e1a613b551d88f7c4e693bbe languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-function-name@npm:7.25.7" +"@babel/plugin-transform-function-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ca98e1116c0ada7211ed43e4b7f21ca15f95bbbdad70f2fbe1ec2d90a97daedf9f22fcb0a25c8b164a5e394f509f2e4d1f7609d26dc938a58d37c5ee9b80088a + checksum: 10c0/8e67fbd1dd367927b8b6afdf0a6e7cb3a3fd70766c52f700ca77428b6d536f6c9d7ec643e7762d64b23093233765c66bffa40e31aabe6492682879bcb45423e1 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.8" +"@babel/plugin-transform-json-strings@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2a6cf69ebe8deebc39c56adae75d609e16786dc4cbd83577eefdc838bd89ca8974671d47e2669b8e65ef9b7ace427f7c2c5a9fc6aa09247b10e141d15fee81cf + checksum: 10c0/00bc2d4751dfc9d44ab725be16ee534de13cfd7e77dfb386e5dac9e48101ce8fcbc5971df919dc25b3f8a0fa85d6dc5f2a0c3cf7ec9d61c163d9823c091844f0 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-literals@npm:7.25.7" +"@babel/plugin-transform-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c2c2488102f33e566f45becdcb632e53bd052ecfb2879deb07a614b3e9437e3b624c3b16d080096d50b0b622edebd03e438acbf9260bcc41167897963f64560e + checksum: 10c0/00b14e9c14cf1e871c1f3781bf6334cac339c360404afd6aba63d2f6aca9270854d59a2b40abff1c4c90d4ffdca614440842d3043316c2f0ceb155fdf7726b3b languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.8" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9adc2634c94b283b682fbf71bbec553bd8448196213491a0ef9ea167993c9c36dcb2fbefbd834e113cfed843a67290131bc99e463f8702043c3f4e3a99bb807e + checksum: 10c0/6e2051e10b2d6452980fc4bdef9da17c0d6ca48f81b8529e8804b031950e4fff7c74a7eb3de4a2b6ad22ffb631d0b67005425d232cce6e2b29ce861c78ed04f5 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d6936b98ae4d3daed850dc4e064042ea4375f815219ba9d8591373bf1fba4cfdb5be42623ae8882f2d666cc34af650a4855e2a5ad89e3c235d73a6f172f9969c + checksum: 10c0/91d17b451bcc5ea9f1c6f8264144057ade3338d4b92c0b248366e4db3a7790a28fd59cc56ac433a9627a9087a17a5684e53f4995dd6ae92831cb72f1bd540b54 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.25.7" +"@babel/plugin-transform-modules-amd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c0bc999206c3834c090e6559a6c8a55d7672d3573104e832223ebe7df99bd1b82fc850e15ba32f512c84b0db1cdb613b66fa60abe9abb9c7e8dcbff91649b356 + checksum: 10c0/849957d9484d0a2d93331226ed6cf840cee7d57454549534c447c93f8b839ef8553eae9877f8f550e3c39f14d60992f91244b2e8e7502a46064b56c5d68ba855 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.7" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-simple-access": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-simple-access": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2f1c945fc3c9b690b0ddcf2c80156b2e4fbf2cf15aac43ac8fe6e4b34125869528839a53d07c564e62e4aed394ebdc1d2c3b796b547374455522581c11b7599c + checksum: 10c0/6ce771fb04d4810257fc8900374fece877dacaed74b05eaa16ad9224b390f43795c4d046cbe9ae304e1eb5aad035d37383895e3c64496d647c2128d183916e74 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.7" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - "@babel/traverse": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/95eaea7082636710c61e49e58b3907e85ec79db4327411d3784f28592509fbe94a53cc3d20a36a1cf245efc6d3f0017eae15b45ffd645c1ab949bb4e1670e6bb + checksum: 10c0/8299e3437542129c2684b86f98408c690df27db4122a79edded4782cf04e755d6ecb05b1e812c81a34224a81e664303392d5f3c36f3d2d51fdc99bb91c881e9a languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.25.7" +"@babel/plugin-transform-modules-umd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8849ab04eecdb73cd37e2d7289449fa5256331832b0304c220b2a6aaa12e2d2dd87684f2813412d1fc5bdb3d6b55cc08c6386d3273fe05a65177c09bee5b6769 + checksum: 10c0/fa11a621f023e2ac437b71d5582f819e667c94306f022583d77da9a8f772c4128861a32bbb63bef5cba581a70cd7dbe87a37238edaafcfacf889470c395e7076 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/eb55fec55dc930cd122911f3e4a421320fa8b1b4de85bfd7ef11b46c611ec69b0213c114a6e1c6bc224d6b954ff183a0caa7251267d5258ecc0f00d6d9ca1d52 + checksum: 10c0/32b14fda5c885d1706863f8af2ee6c703d39264355b57482d3a24fce7f6afbd4c7a0896e501c0806ed2b0759beb621bf7f3f7de1fbbc82026039a98d961e78ef languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-new-target@npm:7.25.7" +"@babel/plugin-transform-new-target@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-new-target@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8e5dce6d027e0f3fd394578ea1af7f515de157793a15c23a5aad7034a6d8a4005ef280238e67a232bb4dd4fafd3a264fed462deb149128ddd9ce59ff6f575cff + checksum: 10c0/7b5f1b7998f1cf183a7fa646346e2f3742e5805b609f28ad5fee22d666a15010f3e398b7e1ab78cddb7901841a3d3f47135929af23d54e8bf4ce69b72051f71e languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.8" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3cb7c44cffccae42e104755acb31b4f00bc27d8c88102ae6f30dca508832f98fa5b746bead0fc7c0c6ddcf83f336829be4b64245c6c7ce26b3ef591937ec54a4 + checksum: 10c0/eb623db5be078a1c974afe7c7797b0309ba2ea9e9237c0b6831ade0f56d8248bb4ab3432ab34495ff8c877ec2fe412ff779d1e9b3c2b8139da18e1753d950bc3 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.8" +"@babel/plugin-transform-numeric-separator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d23b3ebc50513f24510791ac2cad43e3c6ea08579f54dccfd4ed5e5d5084f02da0576ea42ea999fb51e1f94f42857cac96a1a29ac6728fc262fbe87ec966dc18 + checksum: 10c0/ad63ad341977844b6f9535fcca15ca0d6d6ad112ed9cc509d4f6b75e9bf4b1b1a96a0bcb1986421a601505d34025373608b5f76d420d924b4e21f86b1a1f2749 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.8" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" dependencies: - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-transform-parameters": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/058d5f5bb61068997fb78855011dd175d441da84717640852bbfd12a5919acf8d8c5a14c1debfe87d230f3f4c47c22fcad3d7fa1acd72e5e48b2fff93b6c1dd9 + checksum: 10c0/02077d8abd83bf6a48ff0b59e98d7561407cf75b591cffd3fdc5dc5e9a13dec1c847a7a690983762a3afecddb244831e897e0515c293e7c653b262c30cd614af languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-super@npm:7.25.7" +"@babel/plugin-transform-object-super@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7f2968d4da997101b63fd3b74445c9b16f56bd32cd8a0a16c368af9d3e983e7675c1b05d18601f32307cb06e7d884ee11d13ff18a1f6830c0db243a9a852afab + checksum: 10c0/0348d00e76f1f15ada44481a76e8c923d24cba91f6e49ee9b30d6861eb75344e7f84d62a18df8a6f9e9a7eacf992f388174b7f9cc4ce48287bcefca268c07600 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.8" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f4360e62ca4aa998db31548d0ef06836d958bcb29dee58f5c62d0c29b6b2bff1b54871195bd032825fe3dd79a4fd8275e165148c8d4b57694bcf72135c8f7d24 + checksum: 10c0/722fd5ee12ab905309d4e84421584fce4b6d9e6b639b06afb20b23fa809e6ab251e908a8d5e8b14d066a28186b8ef8f58d69fd6eca9ce1b9ef7af08333378f6c languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.7, @babel/plugin-transform-optional-chaining@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.8" +"@babel/plugin-transform-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a1cdbfc249619fa6b37e57f81600701281629d86a57e616b0c2b29816d0c43114a2296ce089564afd3aa7870c8aad62e907658ffef2c110662af14ee23d5247f + checksum: 10c0/041ad2beae5affb8e68a0bcb6882a2dadb758db3c629a0e012f57488ab43a822ac1ea17a29db8ef36560a28262a5dfa4dbbbf06ed6e431db55abe024b7cd3961 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-parameters@npm:7.25.7" +"@babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b40ba70278842ce1e800d7ab400df730994941550da547ef453780023bd61a9b8acf4b9fb8419c1b5bcbe09819a1146ff59369db11db07eb71870bef86a12422 + checksum: 10c0/aecb446754b9e09d6b6fa95fd09e7cf682f8aaeed1d972874ba24c0a30a7e803ad5f014bb1fffc7bfeed22f93c0d200947407894ea59bf7687816f2f464f8df3 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.7" +"@babel/plugin-transform-private-methods@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/92e076f63f7c4696e1321dafdd56c4212eb41784cdadba0ebc39091f959a76d357c3df61a6c668be81d6b6ad8964ee458e85752ab0c6cfbbaf2066903edda732 + checksum: 10c0/64bd71de93d39daefa3e6c878d6f2fd238ed7d4ecfb13b0e771ddbbc131487def3ceb405b62b534a5cbb5043046b504e1b189b0a45229cc75af979a9fbcaa7bd languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.8": - version: 7.25.8 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.8" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/61b5e3a4eb94caf38d6e9ff7bff1ac8927758141aaa4891036d3490866ecee53beaefd7893519fec42a4c55f33374a17fc0e49694cdaf95668082073f0fe4a79 + checksum: 10c0/d4965de19d9f204e692cc74dbc39f0bb469e5f29df96dd4457ea23c5e5596fba9d5af76eaa96f9d48a9fc20ec5f12a94c679285e36b8373406868ea228109e27 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.25.7" +"@babel/plugin-transform-property-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6d5bccdc772207906666ad5201bd91e4e132e1d806dbcf4163a1d08e18c57cc3795578c4e10596514bcd6afaf9696f478ea4f0dea890176d93b9cb077b9e5c55 + checksum: 10c0/1639e35b2438ccf3107af760d34e6a8e4f9acdd3ae6186ae771a6e3029bd59dfe778e502d67090f1185ecda5c16addfed77561e39c518a3f51ff10d41790e106 languageName: node linkType: hard @@ -1060,290 +1060,290 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.25.7" +"@babel/plugin-transform-react-display-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a0c537cc7c328ed7468d3b6a37bf0d9cb15d94afcdf3f2849ce6e5a68494fc61f0fa4fc529482a6b95b00f3c5c734f310bf18085293bff40702789f06c816f36 + checksum: 10c0/63a0f962d64e71baf87c212755419e25c637d2d95ea6fdc067df26b91e606ae186442ae815b99a577eca9bf5404d9577ecad218a3cf42d0e9e286ca7b003a992 languageName: node linkType: hard "@babel/plugin-transform-react-inline-elements@npm:^7.21.0": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-inline-elements@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/plugin-transform-react-inline-elements@npm:7.25.9" dependencies: - "@babel/helper-builder-react-jsx": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-builder-react-jsx": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/de85180c09002083cb330ef28d5b31b44e6ac6565c700b603be76e629f5a92c59ff69f79c08cc1dbd2dd1f271f44fe8d4c751deaf66c059ba721aa3cb43c881e + checksum: 10c0/d745bcfa8e51acc497b5ea2ff2fc4215cd39ebdb54703f2973962e3818a4829081ebc9e7818db28f90d1295e0b02e140986509ba48eef8aaa9de8c09b9434646 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.7" +"@babel/plugin-transform-react-jsx-development@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9" dependencies: - "@babel/plugin-transform-react-jsx": "npm:^7.25.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a3dc14644d09a6d22875af7b5584393ab53e467e0531cd192fc6242504dacaffa421e89265ba7f84fd4edef2b7b100d2e2ebf092a4dce2b55cf9c5fe29390c18 + checksum: 10c0/c0b92ff9eb029620abf320ff74aae182cea87524723d740fb48a4373d0d16bddf5edbe1116e7ba341332a5337e55c2ceaee8b8cad5549e78af7f4b3cfe77debb languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.25.7" +"@babel/plugin-transform-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-jsx": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6766b0357b8bbfcb77fca5350f06cf822c89bbe75ddcaea24614601ef23957504da24e76597d743038ce8fa081373b0663c8ad0c86d7c7226e8185f0680b8b56 + checksum: 10c0/5c9947e8ed141f7606f54da3e05eea1074950c5b8354c39df69cb7f43cb5a83c6c9d7973b24bc3d89341c8611f8ad50830a98ab10d117d850e6bdd8febdce221 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.7" +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d92c9b511850fb6dea71966a0d4f313d67e317db7fc3633a7ff2e27d6df2e95cbc91c4c25abdb6c8db651fcda842a0cb7433835a8a9d4a3fdc5d452068428101 + checksum: 10c0/7c8eac04644ad19dcd71bb8e949b0ae22b9e548fa4a58e545d3d0342f647fb89db7f8789a7c5b8074d478ce6d3d581eaf47dd4b36027e16fd68211c383839abc languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.25.7" +"@babel/plugin-transform-regenerator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7ee3a57c4050bc908ef7ac392d810826b294970a7182f4ec34a8ca93dbe36deb21bc862616d46a6f3d881d6b5749930e1679e875b638a00866d844a4250df212 + checksum: 10c0/eef3ffc19f7d291b863635f32b896ad7f87806d9219a0d3404a470219abcfc5b43aabecd691026c48e875b965760d9c16abee25e6447272233f30cd07f453ec7 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.25.7" +"@babel/plugin-transform-reserved-words@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/920c98130daff6c1288fb13a9a2d2e45863bba93e619cb88d90e1f5b5cb358a3ee8880a425a3adb1b4bd5dbb6bd0500eea3370fc612633045eec851b08cc586c + checksum: 10c0/8b028b80d1983e3e02f74e21924323cc66ba930e5c5758909a122aa7d80e341b8b0f42e1698e42b50d47a6ba911332f584200b28e1a4e2104b7514d9dc011e96 languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.25.7 - resolution: "@babel/plugin-transform-runtime@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/plugin-transform-runtime@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9b2514e9079361ac8e7e500ffd522dad869d61a3894302da7e29bbac80de00276c8a1b4394d1dcf0b51c57b2c854919928df9648be336139fdf1d6ecd6d1bb32 + checksum: 10c0/888a4998ba0a2313de347954c9a8dfeccbff0633c69d33aee385b8878eba2b429dbfb00c3cc04f6bca454b9be8afa01ebbd73defb7fbbb6e2d3086205c07758b languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4250f89a0072f0f400be7a2e3515227b8e2518737899bd57d497e5173284a0e05d812e4a3c219ffcd484e9fa9a01c19fce5acd77bbb898f4d594512c56701eb4 + checksum: 10c0/05a20d45f0fb62567644c507ccd4e379c1a74dacf887d2b2cac70247415e3f6d7d3bf4850c8b336053144715fedb6200fc38f7130c4b76c94eec9b9c0c2a8e9b languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-spread@npm:7.25.7" +"@babel/plugin-transform-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/258bd1b52388cd7425d0ae25fa39538734f7540ea503a1d8a72211d33f6f214cb4e3b73d6cd03016cbcff5d41169f1e578b9ea331965ad224d223591983e90a7 + checksum: 10c0/996c8fed238efc30e0664f9f58bd7ec8c148f4659f84425f68923a094fe891245711d26eb10d1f815f50c124434e076e860dbe9662240844d1b77cd09907dcdf languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.7" +"@babel/plugin-transform-sticky-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0e466cfc3ca1e0db4bb11eb630215b0e1f43066d7678325e5ddadcf5a118b2351a528f67205729c32ac5b78ab68ab7f40517dd33bcb1fb6b456509f5f54ce097 + checksum: 10c0/e9612b0615dab4c4fba1c560769616a9bd7b9226c73191ef84b6c3ee185c8b719b4f887cdd8336a0a13400ce606ab4a0d33bc8fa6b4fcdb53e2896d07f2568f6 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.25.7" +"@babel/plugin-transform-template-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a3455303b6841cb536ac66d1a2d03c194b9f371519482d8d1e8edbd33bf5ca7cdd5db1586b2b0ea5f909ebf74a0eafacf0fb28d257e4905445282dcdccfa6139 + checksum: 10c0/5144da6036807bbd4e9d2a8b92ae67a759543929f34f4db9b463448a77298f4a40bf1e92e582db208fe08ee116224806a3bd0bed75d9da404fc2c0af9e6da540 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.7" +"@babel/plugin-transform-typeof-symbol@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ce1a0744a900b05de1372a70508c4148f17eb941c482da26eb369b9f0347570dce45470c8a86d907bc3a0443190344da1e18489ecfecb30388ab6178e8a9916b + checksum: 10c0/2b19fd88608589d9bc6b607ff17b06791d35c67ef3249f4659283454e6a9984241e3bd4c4eb72bb8b3d860a73223f3874558b861adb7314aa317c1c6a2f0cafb languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-typescript@npm:7.25.7" +"@babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-typescript@npm:7.25.9" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.25.7" - "@babel/helper-create-class-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-typescript": "npm:^7.25.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-syntax-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5fa839b9560221698edff5e00b5cccc658c7875efaa7971c66d478f5b026770f12dd47b1be024463a44f9e29b4e14e8ddddbf4a2b324b0b94f58370dd5ae7195 + checksum: 10c0/c607ddb45f7e33cfcb928aad05cb1b18b1ecb564d2329d8f8e427f75192511aa821dee42d26871f1bdffbd883853e150ba81436664646c6e6b13063e65ce1475 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8b1f71fda0a832c6e26ba4c00f99e9033e6f9b36ced542a512921f4ad861a70e2fec2bd54a91a5ca2efa46aaa8c8893e4c602635c4ef172bd3ed6eef3178c70b + checksum: 10c0/615c84d7c53e1575d54ba9257e753e0b98c5de1e3225237d92f55226eaab8eb5bceb74df43f50f4aa162b0bbcc934ed11feafe2b60b8ec4934ce340fad4b8828 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b4bfcf7529138d00671bf5cdfe606603d52cfe57ec1be837da57683f404fc0b0c171834a02515eb03379e5c806121866d097b90e31cb437d21d0ea59368ad82b + checksum: 10c0/1685836fc38af4344c3d2a9edbd46f7c7b28d369b63967d5b83f2f6849ec45b97223461cea3d14cc3f0be6ebb284938e637a5ca3955c0e79c873d62f593d615c languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/73ae34c02ea8b7ac7e4efa690f8c226089c074e3fef658d2a630ad898a93550d84146ce05e073c271c8b2bbba61cbbfd5a2002a7ea940dcad3274e5b5dcb6bcf + checksum: 10c0/448004f978279e726af26acd54f63f9002c9e2582ecd70d1c5c4436f6de490fcd817afb60016d11c52f5ef17dbaac2590e8cc7bfaf4e91b58c452cf188c7920f languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/39e45ae3db7adfc3457b1d6ba5608ffbace957ad019785967e5357a6639f261765bda12363f655d39265f5a2834af26327037751420191d0b73152ccc7ce3c35 + checksum: 10c0/56ee04fbe236b77cbcd6035cbf0be7566d1386b8349154ac33244c25f61170c47153a9423cd1d92855f7d6447b53a4a653d9e8fd1eaeeee14feb4b2baf59bd9f languageName: node linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.25.8 - resolution: "@babel/preset-env@npm:7.25.8" - dependencies: - "@babel/compat-data": "npm:^7.25.8" - "@babel/helper-compilation-targets": "npm:^7.25.7" - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" + version: 7.25.9 + resolution: "@babel/preset-env@npm:7.25.9" + dependencies: + "@babel/compat-data": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" + "@babel/plugin-syntax-import-assertions": "npm:^7.25.9" + "@babel/plugin-syntax-import-attributes": "npm:^7.25.9" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.8" - "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.7" - "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.8" - "@babel/plugin-transform-classes": "npm:^7.25.7" - "@babel/plugin-transform-computed-properties": "npm:^7.25.7" - "@babel/plugin-transform-destructuring": "npm:^7.25.7" - "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.8" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.8" - "@babel/plugin-transform-for-of": "npm:^7.25.7" - "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.8" - "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8" - "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" - "@babel/plugin-transform-modules-amd": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.7" - "@babel/plugin-transform-modules-umd": "npm:^7.25.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.8" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.8" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.8" - "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.8" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.8" - "@babel/plugin-transform-parameters": "npm:^7.25.7" - "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.8" - "@babel/plugin-transform-property-literals": "npm:^7.25.7" - "@babel/plugin-transform-regenerator": "npm:^7.25.7" - "@babel/plugin-transform-reserved-words": "npm:^7.25.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.25.7" - "@babel/plugin-transform-spread": "npm:^7.25.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.25.7" - "@babel/plugin-transform-template-literals": "npm:^7.25.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.25.7" - "@babel/plugin-transform-unicode-escapes": "npm:^7.25.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.25.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.7" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9" + "@babel/plugin-transform-block-scoping": "npm:^7.25.9" + "@babel/plugin-transform-class-properties": "npm:^7.25.9" + "@babel/plugin-transform-class-static-block": "npm:^7.25.9" + "@babel/plugin-transform-classes": "npm:^7.25.9" + "@babel/plugin-transform-computed-properties": "npm:^7.25.9" + "@babel/plugin-transform-destructuring": "npm:^7.25.9" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.9" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-for-of": "npm:^7.25.9" + "@babel/plugin-transform-function-name": "npm:^7.25.9" + "@babel/plugin-transform-json-strings": "npm:^7.25.9" + "@babel/plugin-transform-literals": "npm:^7.25.9" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9" + "@babel/plugin-transform-modules-amd": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-umd": "npm:^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-new-target": "npm:^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.9" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.9" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9" + "@babel/plugin-transform-object-super": "npm:^7.25.9" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" + "@babel/plugin-transform-private-methods": "npm:^7.25.9" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" + "@babel/plugin-transform-property-literals": "npm:^7.25.9" + "@babel/plugin-transform-regenerator": "npm:^7.25.9" + "@babel/plugin-transform-reserved-words": "npm:^7.25.9" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" + "@babel/plugin-transform-spread": "npm:^7.25.9" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" + "@babel/plugin-transform-template-literals": "npm:^7.25.9" + "@babel/plugin-transform-typeof-symbol": "npm:^7.25.9" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" @@ -1352,7 +1352,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a45cd64ca082262998f6cf508b413ff8a9e967bf33e58337a1fe41c6c939a4c25cc73cd58387792c00d43905cf5fb0ea5ef88dfdc2addf2e8133743088c86c72 + checksum: 10c0/b8b391e3fe69918a2a4f4366034113bd6f57c9748974dbe1b807a728bc41434f1e003cb4204ca63a2a01cbb7c05ba96036261b64756243374374353931d346e6 languageName: node linkType: hard @@ -1370,33 +1370,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.22.3": - version: 7.25.7 - resolution: "@babel/preset-react@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/preset-react@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-transform-react-display-name": "npm:^7.25.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.7" - "@babel/plugin-transform-react-jsx-development": "npm:^7.25.7" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-transform-react-display-name": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx-development": "npm:^7.25.9" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b133b1a2f46c70a337d8b1ef442e09e3dbdaecb0d6bed8f1cb64dfddc31c16e248b017385ab909caeebd8462111c9c0e1c5409deb10f2be5cb5bcfdaa4d27718 + checksum: 10c0/c294b475ee741f01f63ea0d828862811c453fabc6023f01814ce983bc316388e9d73290164d2b1384c2684db9c330803a3d4d2170285b105dcbacd483329eb93 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.25.7 - resolution: "@babel/preset-typescript@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/preset-typescript@npm:7.25.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/helper-validator-option": "npm:^7.25.7" - "@babel/plugin-syntax-jsx": "npm:^7.25.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" - "@babel/plugin-transform-typescript": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" + "@babel/plugin-transform-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8dc1258e3c5230bbe42ff9811f08924509238e6bd32fa0b7b0c0a6c5e1419512a8e1f733e1b114454d367b7c164beca2cf33acf2ed9e0d99be010c1c5cdbef0c + checksum: 10c0/cbcc5b4bf2891e367627338961113febbe58d361e9a03bd2c8340ede914870f74db35ee367cfd8d0fca0872149bfb58b090d0a4815de7c05d0a8abb3d961eead languageName: node linkType: hard @@ -1410,48 +1410,47 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.25.7 - resolution: "@babel/runtime@npm:7.25.7" + version: 7.25.9 + resolution: "@babel/runtime@npm:7.25.9" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/86b7829d2fc9343714a9afe92757cf96c4dc799006ca61d73cda62f4b9e29bfa1ce36794955bc6cb4c188f5b10db832c949339895e1bbe81a69022d9d578ce29 + checksum: 10c0/d1727a47eab67b8a742cbf1ef336a20c3d906fe65d6316d073c72479125addfa4358c44dd7b95d114f241b93409b134fad7cea43f3bf8ca7e2ef344177eb72d8 languageName: node linkType: hard -"@babel/template@npm:^7.25.7, @babel/template@npm:^7.3.3": - version: 7.25.7 - resolution: "@babel/template@npm:7.25.7" +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" - checksum: 10c0/8ae9e36e4330ee83d4832531d1d9bec7dc2ef6a2a8afa1ef1229506fd60667abcb17f306d1c3d7e582251270597022990c845d5d69e7add70a5aea66720decb9 + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab languageName: node linkType: hard -"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/traverse@npm:7.25.7" +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" dependencies: - "@babel/code-frame": "npm:^7.25.7" - "@babel/generator": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" - "@babel/template": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/75d73e52c507a7a7a4c7971d6bf4f8f26fdd094e0d3a0193d77edf6a5efa36fc3db91ec5cc48e8b94e6eb5d5ad21af0a1040e71309172851209415fd105efb1a + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.8 - resolution: "@babel/types@npm:7.25.8" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.25.9 + resolution: "@babel/types@npm:7.25.9" dependencies: - "@babel/helper-string-parser": "npm:^7.25.7" - "@babel/helper-validator-identifier": "npm:^7.25.7" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/55ca2d6df6426c98db2769ce884ce5e9de83a512ea2dd7bcf56c811984dc14351cacf42932a723630c5afcff2455809323decd645820762182f10b7b5252b59f + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/33890d08bcb06b26a3a60e4c6c996cbdf2b8d8a3c212664de659c2775f80b002c5f2bceedaa309c384ff5e99bd579794fe6a7e41de07df70246f43c55016d349 languageName: node linkType: hard @@ -16981,13 +16980,6 @@ __metadata: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 - languageName: node - linkType: hard - "to-object-path@npm:^0.3.0": version: 0.3.0 resolution: "to-object-path@npm:0.3.0" From 3aa38841bd1bf76b0c2ecccce241c186db1aa397 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:36:14 +0200 Subject: [PATCH 381/467] Update formatjs monorepo (#32651) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 238 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 140 insertions(+), 98 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5b563d52d659ae..cfe57e724c6104 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2249,6 +2249,17 @@ __metadata: languageName: node linkType: hard +"@formatjs/ecma402-abstract@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/ecma402-abstract@npm:2.2.1" + dependencies: + "@formatjs/fast-memoize": "npm:2.2.2" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10c0/bb0b01282368d201d9bcfb3232963af90069f6048da5824d38a674118fd49a0cb92b05d19d2526fe6d035428b2e47e1abd671bb59a673317f1418e67974253fa + languageName: node + linkType: hard + "@formatjs/fast-memoize@npm:2.2.1": version: 2.2.1 resolution: "@formatjs/fast-memoize@npm:2.2.1" @@ -2258,6 +2269,15 @@ __metadata: languageName: node linkType: hard +"@formatjs/fast-memoize@npm:2.2.2": + version: 2.2.2 + resolution: "@formatjs/fast-memoize@npm:2.2.2" + dependencies: + tslib: "npm:2" + checksum: 10c0/cebbf632a6ed8798ed67dba59d05be8bbe81c9ada7bcbc8ce69798fbaa5e0117c35792f212097d28b8b06fb99cf73bdbc7754702c06cda34f847e5082814643b + languageName: node + linkType: hard + "@formatjs/icu-messageformat-parser@npm:2.7.10": version: 2.7.10 resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10" @@ -2269,14 +2289,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.8.0": - version: 2.8.0 - resolution: "@formatjs/icu-messageformat-parser@npm:2.8.0" +"@formatjs/icu-messageformat-parser@npm:2.9.1": + version: 2.9.1 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/icu-skeleton-parser": "npm:1.8.4" - tslib: "npm:^2.7.0" - checksum: 10c0/f8cf835817529ec5c7aed55e60c2584ffe78b6d7f079526e2809af4fdd32d85c4569a01e806861e4352bb5ca996116ea5006870d7e40e01c79878df345e8ba4d + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/icu-skeleton-parser": "npm:1.8.5" + tslib: "npm:2" + checksum: 10c0/53554edc7d41f6bd737dc3bb3e03dcd4b4081b4fc9a70383612b87993c1639747d1d3827d8ebb13f8bf3566c60442549a0a42df4959699eef76633d4c7b49b25 languageName: node linkType: hard @@ -2290,25 +2310,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.7.0": - version: 6.7.0 - resolution: "@formatjs/intl-displaynames@npm:6.7.0" +"@formatjs/icu-skeleton-parser@npm:1.8.5": + version: 1.8.5 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.5" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10c0/d4814ca580ab261681d2926c3d0df26c445df8e18891dff5cc6363f3c7ea9db393ed1056d8c5ab9277b5fb5e40d44444e7f92935f64f8282c8859c9dab8caabf + "@formatjs/ecma402-abstract": "npm:2.2.1" + tslib: "npm:2" + checksum: 10c0/3e5ddd26e5dc983547320ca09b4a5daa692a00c15382e85474a9a539c223b581dba2290708d71aae12589c3ddd053b3bfd0dab0a07a11c44033fb313605566bc languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.6.0": - version: 7.6.0 - resolution: "@formatjs/intl-listformat@npm:7.6.0" +"@formatjs/intl-displaynames@npm:6.8.1": + version: 6.8.1 + resolution: "@formatjs/intl-displaynames@npm:6.8.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10c0/8732f492d0faa3d3c633fc9247af6953c15ca8ae9a7cc7de620afa86bbdcb8a92a8a76e36aaf2dbc1fb25d1e9c0ed48c9031926caef9900f68d18772b7e8ce29 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10c0/6d39c7bbc3cf0b1398463d662662e5c7c8b873fe977e93b7d702a337f1ed639246492b71b7138c1f193df9e1045add5609edb3fd3efc76c6174ce134c02a186f + languageName: node + linkType: hard + +"@formatjs/intl-listformat@npm:7.7.1": + version: 7.7.1 + resolution: "@formatjs/intl-listformat@npm:7.7.1" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10c0/9ac38d34956ee8018c000bbd594c84f1de283d18441f1376b072658844735a4ebee61ac4711f824dd0a89f4a855acfc7a24159e4cd8a4747609b1d2153316a61 languageName: node linkType: hard @@ -2321,34 +2351,43 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.5.6": + version: 0.5.6 + resolution: "@formatjs/intl-localematcher@npm:0.5.6" + dependencies: + tslib: "npm:2" + checksum: 10c0/39fc454641b7871f4b37416a01c7851624db6f1bf6cdcd5c854dfe06b95c0ca7540ec7c803a654140fc3f1c758596a684de8054bc95c4d6c7962091c251f5671 + languageName: node + linkType: hard + "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.17 - resolution: "@formatjs/intl-pluralrules@npm:5.2.17" + version: 5.3.1 + resolution: "@formatjs/intl-pluralrules@npm:5.3.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/intl-localematcher": "npm:0.5.5" - tslib: "npm:^2.7.0" - checksum: 10c0/d1389821d8b853433ba4b3b7c1b5c08244d6b2dc5f3e54cc171336c8e6ab545b9eb0f388ce98f1245879693bf3068ffc4df2e5f1c7dee0a1e87a058a5c4ce8fc + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.6" + tslib: "npm:2" + checksum: 10c0/71a87aa81d5d69d56dca0636144f8f9714176b95fe3bc92ae1e455322c09b5b09ba0018315d81def00e89fc95e4fbffe41110104c86eb189ba6d58ac09efa48c languageName: node linkType: hard -"@formatjs/intl@npm:2.10.9": - version: 2.10.9 - resolution: "@formatjs/intl@npm:2.10.9" +"@formatjs/intl@npm:2.10.11": + version: 2.10.11 + resolution: "@formatjs/intl@npm:2.10.11" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - "@formatjs/intl-displaynames": "npm:6.7.0" - "@formatjs/intl-listformat": "npm:7.6.0" - intl-messageformat: "npm:10.7.1" - tslib: "npm:^2.7.0" + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/fast-memoize": "npm:2.2.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@formatjs/intl-displaynames": "npm:6.8.1" + "@formatjs/intl-listformat": "npm:7.7.1" + intl-messageformat: "npm:10.7.3" + tslib: "npm:2" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/9be5c6e7e8371904789d0771ee97f04cdf16de3f6f4aa01998b3f8c64aa36d9bf91c491ebf95fa2dc6ec16a7d1bb6e3738ddbec02005c199e786133eb0e5795b + checksum: 10c0/83baa76d1194dbaae38c21d28cdc4e1ce024f8c49a37e2c02629a9f6afe18912f640435e346fae11af7d8128dac6355b36b93cff37685542ab3095edf3ec6d19 languageName: node linkType: hard @@ -2372,23 +2411,23 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.17": - version: 3.13.17 - resolution: "@formatjs/ts-transformer@npm:3.13.17" +"@formatjs/ts-transformer@npm:3.13.20": + version: 3.13.20 + resolution: "@formatjs/ts-transformer@npm:3.13.20" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - "@types/json-stable-stringify": "npm:^1.0.32" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@types/json-stable-stringify": "npm:1" "@types/node": "npm:14 || 16 || 17 || 18 || 20" - chalk: "npm:^4.0.0" - json-stable-stringify: "npm:^1.0.1" - tslib: "npm:^2.7.0" + chalk: "npm:4" + json-stable-stringify: "npm:1" + tslib: "npm:2" typescript: "npm:5" peerDependencies: ts-jest: ">=27" peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/1619f771d8aa69cf63f05199ebc28b57a5e0850b64dc9c2bd0df73d8f388a3323c47f13bcc742a51a7560349591282d88695e6fb9a646b0e7d4f7d0b07e2c5c0 + checksum: 10c0/0c1a203ce2e0efc24b9c1fc087771330f9630ebb4220e34dd2fffe64d5ee94816554df8ed8402a54dd588c186617765efb6c200a3373cf1d5dfb093ba8d70416 languageName: node linkType: hard @@ -3627,7 +3666,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.1": +"@types/hoist-non-react-statics@npm:3, @types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.5 resolution: "@types/hoist-non-react-statics@npm:3.3.5" dependencies: @@ -3720,10 +3759,10 @@ __metadata: languageName: node linkType: hard -"@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.35 - resolution: "@types/json-stable-stringify@npm:1.0.35" - checksum: 10c0/67b50a86478f932c932ba21515b80700a8844d55e0656b3abe2c32c41c1c405c70fcd10b30ff8f38d1869871af2deae63ffdea54ce72cc2ee92e94a9d1cf2b6f +"@types/json-stable-stringify@npm:1, @types/json-stable-stringify@npm:^1.0.32": + version: 1.1.0 + resolution: "@types/json-stable-stringify@npm:1.1.0" + checksum: 10c0/8f69944701510243cd3a83aa44363a8a4d366f11a659b258f69fb3ad0f94ab1e2533206a2c929ac7fd18784d201b663b3f02a45934f545c926f051d8cb4df095 languageName: node linkType: hard @@ -5139,21 +5178,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.19 - resolution: "babel-plugin-formatjs@npm:10.5.19" + version: 10.5.22 + resolution: "babel-plugin-formatjs@npm:10.5.22" dependencies: "@babel/core": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0" "@babel/types": "npm:^7.25.0" - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - "@formatjs/ts-transformer": "npm:3.13.17" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@formatjs/ts-transformer": "npm:3.13.20" "@types/babel__core": "npm:^7.20.5" "@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__traverse": "npm:^7.20.6" - tslib: "npm:^2.7.0" - checksum: 10c0/29d1e1fe8c97412a1c6c95dde3753ea28ddbe39040aaead90c67106422ce12dad363aee47a2729f685807bacf7f422ef607f015b325203a8201249b74e84bab3 + tslib: "npm:2" + checksum: 10c0/c35ec81d89eb228d23d3d62e7e4d0e5d7216f0d09f91b1dc3c46e049c5515a201fcfe77c1079924c6bfb9883b2941af91431f479a0f5a24a0574b695f18b64bc languageName: node linkType: hard @@ -5809,6 +5848,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4, chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -5830,16 +5879,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - "chalk@npm:~5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -9259,7 +9298,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:3, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -9700,15 +9739,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.1, intl-messageformat@npm:^10.3.5": - version: 10.7.1 - resolution: "intl-messageformat@npm:10.7.1" +"intl-messageformat@npm:10.7.3, intl-messageformat@npm:^10.3.5": + version: 10.7.3 + resolution: "intl-messageformat@npm:10.7.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/fast-memoize": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - tslib: "npm:^2.7.0" - checksum: 10c0/b9383a2c0ce7888d34fa7bbb4ba7cc139ea77a372bd9268412e97e8a1357ebd1880beb04affdbd7175ae27db2a57024f21e804b34f2b159fd1c3d221f69c40d4 + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/fast-memoize": "npm:2.2.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + tslib: "npm:2" + checksum: 10c0/7ddd118c04023c9ecdf9a2270753abd876e90a428d5106ce8373622ddefe72ff1daa33993b12065a3339b7f838e9266c3db9048aa7dd20012c8703c6ebe26fd4 languageName: node linkType: hard @@ -11126,12 +11165,15 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" +"json-stable-stringify@npm:1, json-stable-stringify@npm:^1.0.1": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" dependencies: + call-bind: "npm:^1.0.5" + isarray: "npm:^2.0.5" jsonify: "npm:^0.0.1" - checksum: 10c0/502d021c3c59c09587faa40d7693d77c00460fd6c68bae95d6e35804909ec8c4aec71b136d3a09df61a7ebf803eb6e820f23ede76b77e74b8b02c76afb2ada8c + object-keys: "npm:^1.1.1" + checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde languageName: node linkType: hard @@ -14430,26 +14472,26 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.8.1 - resolution: "react-intl@npm:6.8.1" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.8.0" - "@formatjs/intl": "npm:2.10.9" - "@formatjs/intl-displaynames": "npm:6.7.0" - "@formatjs/intl-listformat": "npm:7.6.0" - "@types/hoist-non-react-statics": "npm:^3.3.1" + version: 6.8.4 + resolution: "react-intl@npm:6.8.4" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@formatjs/intl": "npm:2.10.11" + "@formatjs/intl-displaynames": "npm:6.8.1" + "@formatjs/intl-listformat": "npm:7.7.1" + "@types/hoist-non-react-statics": "npm:3" "@types/react": "npm:^18.3.11" - hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.7.1" - tslib: "npm:^2.7.0" + hoist-non-react-statics: "npm:3" + intl-messageformat: "npm:10.7.3" + tslib: "npm:2" peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/4ffdf8fd6e82c10de7d1e195336c8bc98fab5f6bc7fde548f7df553caf05677d632977c3287e9b72915f8a01ed98ff8246fdfccea2f7048902f46a596a0db4b2 + checksum: 10c0/a6b417c1cfb36ffe38645fe9daaaf3e1a25660468b8dbd4ccf386be063cc7c0fdeecc3c0490c671721408696b6578262b8db5882d00b76d4ec48d94601b14eab languageName: node linkType: hard @@ -17110,10 +17152,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 +"tslib@npm:2, tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": + version: 2.8.0 + resolution: "tslib@npm:2.8.0" + checksum: 10c0/31e4d14dc1355e9b89e4d3c893a18abb7f90b6886b089c2da91224d0a7752c79f3ddc41bc1aa0a588ac895bd97bb99c5bc2bfdb2f86de849f31caeb3ba79bbe5 languageName: node linkType: hard From 77cd16f4ee7ab807df6fffb1538a6659a8182a9e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 09:44:02 +0000 Subject: [PATCH 382/467] Update dependency opentelemetry-instrumentation-active_job to v0.7.8 (#32657) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8421f06588d292..103bd80b815b3a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -516,7 +516,7 @@ GEM opentelemetry-api (~> 1.0) opentelemetry-instrumentation-active_support (~> 0.1) opentelemetry-instrumentation-base (~> 0.22.1) - opentelemetry-instrumentation-active_job (0.7.7) + opentelemetry-instrumentation-active_job (0.7.8) opentelemetry-api (~> 1.0) opentelemetry-instrumentation-base (~> 0.22.1) opentelemetry-instrumentation-active_model_serializers (0.20.2) From 9074c1fac930db91dbf7fb6aad4b73f628b11e94 Mon Sep 17 00:00:00 2001 From: Jonny Saunders Date: Sun, 27 Oct 2024 21:55:18 -0700 Subject: [PATCH 383/467] Use `likes` and `shares` totalItems on status creations and updates (#32620) --- app/lib/activitypub/activity/create.rb | 13 ++++ app/lib/activitypub/parser/status_parser.rb | 8 +++ app/models/status.rb | 26 +++++++- app/models/status_stat.rb | 27 ++++++-- app/serializers/rest/status_serializer.rb | 4 +- .../process_status_update_service.rb | 15 +++++ ..._untrusted_reblogs_count_to_status_stat.rb | 8 +++ db/schema.rb | 4 +- spec/lib/activitypub/activity/create_spec.rb | 26 ++++++++ spec/lib/activitypub/activity/update_spec.rb | 64 +++++++++++++++++++ spec/models/status_spec.rb | 50 +++++++++++++++ spec/requests/api/v1/trends/statuses_spec.rb | 36 +++++++++++ .../rest/status_serializer_spec.rb | 55 ++++++++++++++++ spec/spec_helper.rb | 4 +- 14 files changed, 326 insertions(+), 14 deletions(-) create mode 100644 db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb create mode 100644 spec/serializers/rest/status_serializer_spec.rb diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index d04f7226a0d2e4..85a66c68526578 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -53,6 +53,7 @@ def process_status ApplicationRecord.transaction do @status = Status.create!(@params) attach_tags(@status) + attach_counts(@status) end resolve_thread(@status) @@ -166,6 +167,18 @@ def attach_tags(status) end end + def attach_counts(status) + likes = @status_parser.favourites_count + shares = @status_parser.reblogs_count + return if likes.nil? && shares.nil? + + status.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = shares unless shares.nil? + status_stat.untrusted_favourites_count = likes unless likes.nil? + status_stat.save if status_stat.changed? + end + end + def process_tags return if @object['tag'].nil? diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 2940aea44b7b95..3d2be3c66cc922 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -93,6 +93,14 @@ def language lang.presence && NORMALIZED_LOCALE_NAMES.fetch(lang.downcase.to_sym, lang) end + def favourites_count + @object.dig(:likes, :totalItems) + end + + def reblogs_count + @object.dig(:shares, :totalItems) + end + private def raw_language_code diff --git a/app/models/status.rb b/app/models/status.rb index e0630733d897fd..f0a4f50ff6f6ad 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -303,12 +303,34 @@ def favourites_count status_stat&.favourites_count || 0 end + # Reblogs count received from an external instance + def untrusted_reblogs_count + status_stat&.untrusted_reblogs_count unless local? + end + + # Favourites count received from an external instance + def untrusted_favourites_count + status_stat&.untrusted_favourites_count unless local? + end + def increment_count!(key) - update_status_stat!(key => public_send(key) + 1) + if key == :favourites_count && !untrusted_favourites_count.nil? + update_status_stat!(favourites_count: favourites_count + 1, untrusted_favourites_count: untrusted_favourites_count + 1) + elsif key == :reblogs_count && !untrusted_reblogs_count.nil? + update_status_stat!(reblogs_count: reblogs_count + 1, untrusted_reblogs_count: untrusted_reblogs_count + 1) + else + update_status_stat!(key => public_send(key) + 1) + end end def decrement_count!(key) - update_status_stat!(key => [public_send(key) - 1, 0].max) + if key == :favourites_count && !untrusted_favourites_count.nil? + update_status_stat!(favourites_count: [favourites_count - 1, 0].max, untrusted_favourites_count: [untrusted_favourites_count - 1, 0].max) + elsif key == :reblogs_count && !untrusted_reblogs_count.nil? + update_status_stat!(reblogs_count: [reblogs_count - 1, 0].max, untrusted_reblogs_count: [untrusted_reblogs_count - 1, 0].max) + else + update_status_stat!(key => [public_send(key) - 1, 0].max) + end end def trendable? diff --git a/app/models/status_stat.rb b/app/models/status_stat.rb index 47aa1447775abd..14a02071a7b74c 100644 --- a/app/models/status_stat.rb +++ b/app/models/status_stat.rb @@ -4,18 +4,24 @@ # # Table name: status_stats # -# id :bigint(8) not null, primary key -# status_id :bigint(8) not null -# replies_count :bigint(8) default(0), not null -# reblogs_count :bigint(8) default(0), not null -# favourites_count :bigint(8) default(0), not null -# created_at :datetime not null -# updated_at :datetime not null +# id :bigint(8) not null, primary key +# status_id :bigint(8) not null +# replies_count :bigint(8) default(0), not null +# reblogs_count :bigint(8) default(0), not null +# favourites_count :bigint(8) default(0), not null +# created_at :datetime not null +# updated_at :datetime not null +# untrusted_favourites_count :bigint(8) +# untrusted_reblogs_count :bigint(8) # class StatusStat < ApplicationRecord belongs_to :status, inverse_of: :status_stat + before_validation :clamp_untrusted_counts + + MAX_UNTRUSTED_COUNT = 100_000_000 + def replies_count [attributes['replies_count'], 0].max end @@ -27,4 +33,11 @@ def reblogs_count def favourites_count [attributes['favourites_count'], 0].max end + + private + + def clamp_untrusted_counts + self.untrusted_favourites_count = untrusted_favourites_count.to_i.clamp(0, MAX_UNTRUSTED_COUNT) if untrusted_favourites_count.present? + self.untrusted_reblogs_count = untrusted_reblogs_count.to_i.clamp(0, MAX_UNTRUSTED_COUNT) if untrusted_reblogs_count.present? + end end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index e17e8c823e76fa..e108c789c7a8dc 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -84,11 +84,11 @@ def url end def reblogs_count - relationships&.attributes_map&.dig(object.id, :reblogs_count) || object.reblogs_count + object.untrusted_reblogs_count || relationships&.attributes_map&.dig(object.id, :reblogs_count) || object.reblogs_count end def favourites_count - relationships&.attributes_map&.dig(object.id, :favourites_count) || object.favourites_count + object.untrusted_favourites_count || relationships&.attributes_map&.dig(object.id, :favourites_count) || object.favourites_count end def favourited diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 141ad24e92716a..1c7584b7696267 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -43,6 +43,7 @@ def handle_explicit_update! update_poll! update_immediate_attributes! update_metadata! + update_counts! create_edits! end @@ -62,6 +63,7 @@ def handle_implicit_update! with_redis_lock("create:#{@uri}") do update_poll!(allow_significant_changes: false) queue_poll_notifications! + update_counts! end end @@ -239,6 +241,19 @@ def update_emojis! end end + def update_counts! + likes = @status_parser.favourites_count + shares = @status_parser.reblogs_count + return if likes.nil? && shares.nil? + + @status.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = shares unless shares.nil? + status_stat.untrusted_favourites_count = likes unless likes.nil? + + status_stat.save if status_stat.changed? + end + end + def expected_type? equals_or_includes_any?(@json['type'], %w(Note Question)) end diff --git a/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb b/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb new file mode 100644 index 00000000000000..e34caff24020f8 --- /dev/null +++ b/db/migrate/20241022214312_add_untrusted_favourites_count_and_untrusted_reblogs_count_to_status_stat.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class AddUntrustedFavouritesCountAndUntrustedReblogsCountToStatusStat < ActiveRecord::Migration[7.1] + def change + add_column :status_stats, :untrusted_favourites_count, :bigint, null: true + add_column :status_stats, :untrusted_reblogs_count, :bigint, null: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 5f7b3a3305cfd5..bea9ad46be5a19 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_10_14_010506) do +ActiveRecord::Schema[7.1].define(version: 2024_10_22_214312) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1008,6 +1008,8 @@ t.bigint "favourites_count", default: 0, null: false t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false + t.bigint "untrusted_favourites_count" + t.bigint "untrusted_reblogs_count" t.index ["status_id"], name: "index_status_stats_on_status_id", unique: true end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index bdc8fd9d519080..9482a309592d4c 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -928,6 +928,32 @@ def activity_for_object(json) expect(poll.votes.first).to be_nil end end + + context 'with counts' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + likes: { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar', '/likes'].join, + type: 'Collection', + totalItems: 50, + }, + shares: { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar', '/shares'].join, + type: 'Collection', + totalItems: 100, + }, + } + end + + it 'uses the counts from the created object' do + status = sender.statuses.first + expect(status.untrusted_favourites_count).to eq 50 + expect(status.untrusted_reblogs_count).to eq 100 + end + end end context 'when object URI uses bearcaps' do diff --git a/spec/lib/activitypub/activity/update_spec.rb b/spec/lib/activitypub/activity/update_spec.rb index 87e96d2d1b12cb..b829f3a5ad6d06 100644 --- a/spec/lib/activitypub/activity/update_spec.rb +++ b/spec/lib/activitypub/activity/update_spec.rb @@ -115,5 +115,69 @@ expect(status.edited_at).to be_nil end end + + context 'with a Note object' do + let(:updated) { nil } + let(:favourites) { 50 } + let(:reblogs) { 100 } + + let!(:status) { Fabricate(:status, uri: 'https://example.com/statuses/poll', account: sender) } + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Update', + actor: sender.uri, + object: { + type: 'Note', + id: status.uri, + content: 'Foo', + updated: updated, + likes: { + id: "#{status.uri}/likes", + type: 'Collection', + totalItems: favourites, + }, + shares: { + id: "#{status.uri}/shares", + type: 'Collection', + totalItems: reblogs, + }, + }, + }.with_indifferent_access + end + + shared_examples 'updates counts' do + it 'updates the reblog count' do + expect(status.untrusted_reblogs_count).to eq reblogs + end + + it 'updates the favourites count' do + expect(status.untrusted_favourites_count).to eq favourites + end + end + + context 'with an implicit update' do + before do + status.update!(uri: ActivityPub::TagManager.instance.uri_for(status)) + subject.perform + end + + it_behaves_like 'updates counts' + end + + context 'with an explicit update' do + let(:favourites) { 150 } + let(:reblogs) { 200 } + let(:updated) { Time.now.utc.iso8601 } + + before do + status.update!(uri: ActivityPub::TagManager.instance.uri_for(status)) + subject.perform + end + + it_behaves_like 'updates counts' + end + end end end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 90f5968438644f..36b13df815c94c 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -164,6 +164,31 @@ end end + describe '#untrusted_reblogs_count' do + before do + alice.update(domain: 'example.com') + subject.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = 0 + status_stat.save + end + subject.save + end + + it 'is incremented by the number of reblogs' do + Fabricate(:status, account: bob, reblog: subject) + Fabricate(:status, account: alice, reblog: subject) + + expect(subject.untrusted_reblogs_count).to eq 2 + end + + it 'is decremented when reblog is removed' do + reblog = Fabricate(:status, account: bob, reblog: subject) + expect(subject.untrusted_reblogs_count).to eq 1 + reblog.destroy + expect(subject.untrusted_reblogs_count).to eq 0 + end + end + describe '#replies_count' do it 'is the number of replies' do Fabricate(:status, account: bob, thread: subject) @@ -194,6 +219,31 @@ end end + describe '#untrusted_favourites_count' do + before do + alice.update(domain: 'example.com') + subject.status_stat.tap do |status_stat| + status_stat.untrusted_favourites_count = 0 + status_stat.save + end + subject.save + end + + it 'is incremented by favorites' do + Fabricate(:favourite, account: bob, status: subject) + Fabricate(:favourite, account: alice, status: subject) + + expect(subject.untrusted_favourites_count).to eq 2 + end + + it 'is decremented when favourite is removed' do + favourite = Fabricate(:favourite, account: bob, status: subject) + expect(subject.untrusted_favourites_count).to eq 1 + favourite.destroy + expect(subject.untrusted_favourites_count).to eq 0 + end + end + describe '#proper' do it 'is itself for original statuses' do expect(subject.proper).to eq subject diff --git a/spec/requests/api/v1/trends/statuses_spec.rb b/spec/requests/api/v1/trends/statuses_spec.rb index fe00c9c6458564..414d7651b99a98 100644 --- a/spec/requests/api/v1/trends/statuses_spec.rb +++ b/spec/requests/api/v1/trends/statuses_spec.rb @@ -39,6 +39,42 @@ def prepare_trends end Trends::Statuses.new(threshold: 1, decay_threshold: -1).refresh end + + context 'with a comically inflated external interactions count' do + def prepare_fake_trends + fake_remote_account = Fabricate(:account, domain: 'other.com') + fake_status = Fabricate(:status, account: fake_remote_account, text: 'I am a big faker', trendable: true, language: 'en') + fake_status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 0 + status_stat.favourites_count = 0 + status_stat.untrusted_reblogs_count = 1_000_000_000 + status_stat.untrusted_favourites_count = 1_000_000_000 + status_stat.save + end + real_remote_account = Fabricate(:account, domain: 'other.com') + real_status = Fabricate(:status, account: real_remote_account, text: 'I make real friends online', trendable: true, language: 'en') + real_status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 10 + status_stat.favourites_count = 10 + status_stat.untrusted_reblogs_count = 10 + status_stat.untrusted_favourites_count = 10 + status_stat.save + end + Trends.statuses.add(fake_status, 100) + Trends.statuses.add(real_status, 101) + Trends::Statuses.new(threshold: 1, decay_threshold: 1).refresh + end + + it 'ignores the feeble attempts at deception' do + prepare_fake_trends + stub_const('Api::BaseController::DEFAULT_STATUSES_LIMIT', 10) + get '/api/v1/trends/statuses' + + expect(response).to have_http_status(200) + expect(response.parsed_body.length).to eq(1) + expect(response.parsed_body[0]['content']).to eq('I make real friends online') + end + end end end end diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb new file mode 100644 index 00000000000000..e96d1fbe67ba52 --- /dev/null +++ b/spec/serializers/rest/status_serializer_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::StatusSerializer do + subject do + serialized_record_json( + status, + described_class, + options: { + scope: current_user, + scope_name: :current_user, + } + ) + end + + let(:current_user) { Fabricate(:user) } + let(:alice) { Fabricate(:account, username: 'alice') } + let(:bob) { Fabricate(:account, username: 'bob', domain: 'other.com') } + let(:status) { Fabricate(:status, account: alice) } + + context 'with a remote status' do + let(:status) { Fabricate(:status, account: bob) } + + before do + status.status_stat.tap do |status_stat| + status_stat.reblogs_count = 10 + status_stat.favourites_count = 20 + status_stat.save + end + end + + context 'with only trusted counts' do + it 'shows the trusted counts' do + expect(subject['reblogs_count']).to eq(10) + expect(subject['favourites_count']).to eq(20) + end + end + + context 'with untrusted counts' do + before do + status.status_stat.tap do |status_stat| + status_stat.untrusted_reblogs_count = 30 + status_stat.untrusted_favourites_count = 40 + status_stat.save + end + end + + it 'shows the untrusted counts' do + expect(subject['reblogs_count']).to eq(30) + expect(subject['favourites_count']).to eq(40) + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2a27544407ba26..13683e404e0e8f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -34,8 +34,8 @@ end end -def serialized_record_json(record, serializer, adapter: nil) - options = { serializer: serializer } +def serialized_record_json(record, serializer, adapter: nil, options: {}) + options[:serializer] = serializer options[:adapter] = adapter if adapter.present? JSON.parse( ActiveModelSerializers::SerializableResource.new( From 1edb527072b8004b0ac25157d49f992b697ff800 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 28 Oct 2024 03:34:58 -0400 Subject: [PATCH 384/467] Enhance coverage for `StatusPin` model (#32515) --- app/models/status_pin.rb | 12 +++- spec/models/status_pin_spec.rb | 116 +++++++++++++++++++++------------ 2 files changed, 82 insertions(+), 46 deletions(-) diff --git a/app/models/status_pin.rb b/app/models/status_pin.rb index dae4a5b4e6ba7f..83711dde42da93 100644 --- a/app/models/status_pin.rb +++ b/app/models/status_pin.rb @@ -17,11 +17,17 @@ class StatusPin < ApplicationRecord validates_with StatusPinValidator - after_destroy :invalidate_cleanup_info + after_destroy :invalidate_cleanup_info, if: %i(account_matches_status_account? account_local?) - def invalidate_cleanup_info - return unless status&.account_id == account_id && account.local? + delegate :local?, to: :account, prefix: true + + private + def invalidate_cleanup_info account.statuses_cleanup_policy&.invalidate_last_inspected(status, :unpin) end + + def account_matches_status_account? + status&.account_id == account_id + end end diff --git a/spec/models/status_pin_spec.rb b/spec/models/status_pin_spec.rb index da375009aedd5b..1501d43cc4e430 100644 --- a/spec/models/status_pin_spec.rb +++ b/spec/models/status_pin_spec.rb @@ -3,70 +3,100 @@ require 'rails_helper' RSpec.describe StatusPin do - describe 'validations' do - it 'allows pins of own statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account) + describe 'Validations' do + subject { Fabricate.build :status_pin } - expect(described_class.new(account: account, status: status).save).to be true - end + context 'with an account pinning statuses' do + subject { Fabricate.build :status_pin, account: account } - it 'does not allow pins of statuses by someone else' do - account = Fabricate(:account) - status = Fabricate(:status) + let(:account) { Fabricate(:account) } - expect(described_class.new(account: account, status: status).save).to be false - end + context 'with a self-owned status' do + let(:status) { Fabricate(:status, account: account) } - it 'does not allow pins of reblogs' do - account = Fabricate(:account) - status = Fabricate(:status, account: account) - reblog = Fabricate(:status, reblog: status) + it { is_expected.to allow_value(status).for(:status) } + end - expect(described_class.new(account: account, status: reblog).save).to be false - end + context 'with a status from someone else' do + let(:status) { Fabricate(:status) } - it 'does allow pins of direct statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account, visibility: :private) + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end - expect(described_class.new(account: account, status: status).save).to be true - end + context 'with a reblog status' do + let(:status) { Fabricate(:status, reblog: Fabricate(:status, account: account)) } - it 'does not allow pins of direct statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account, visibility: :direct) + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end + + context 'with a private status' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it { is_expected.to allow_value(status).for(:status).against(:base) } + end + + context 'with a direct status' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } - expect(described_class.new(account: account, status: status).save).to be false + it { is_expected.to_not allow_value(status).for(:status).against(:base) } + end end - context 'with a pin limit' do + context 'with a validator pin limit' do before { stub_const('StatusPinValidator::PIN_LIMIT', 2) } - it 'does not allow pins above the max' do - account = Fabricate(:account) + context 'with a local account at the limit' do + let(:account) { Fabricate :account } - Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) + before { Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) } - pin = described_class.new(account: account, status: Fabricate(:status, account: account)) - expect(pin.save) - .to be(false) + it { is_expected.to_not allow_value(account).for(:account).against(:base).with_message(I18n.t('statuses.pin_errors.limit')) } + end + + context 'with a remote account at the limit' do + let(:account) { Fabricate :account, domain: 'remote.test' } + + before { Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) } - expect(pin.errors[:base]) - .to contain_exactly(I18n.t('statuses.pin_errors.limit')) + it { is_expected.to allow_value(account).for(:account) } end + end + end + + describe 'Callbacks' do + describe 'Invalidating status via policy' do + subject { Fabricate :status_pin, status: Fabricate(:status, account: account), account: account } - it 'allows pins above the max for remote accounts' do - account = Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') + context 'with a local account that owns the status and has a policy' do + let(:account) { Fabricate :account, domain: nil } - Fabricate.times(StatusPinValidator::PIN_LIMIT, :status_pin, account: account) + before do + Fabricate :account_statuses_cleanup_policy, account: account + account.statuses_cleanup_policy.record_last_inspected(subject.status.id + 1_024) + end + + it 'calls the invalidator on destroy' do + expect { subject.destroy } + .to change(account.statuses_cleanup_policy, :last_inspected) + end + end + + context 'with a local account that owns the status and does not have a policy' do + let(:account) { Fabricate :account, domain: nil } + + it 'does not call the invalidator on destroy' do + expect { subject.destroy } + .to_not change(account, :updated_at) + end + end - pin = described_class.new(account: account, status: Fabricate(:status, account: account)) - expect(pin.save) - .to be(true) + context 'with a remote account' do + let(:account) { Fabricate :account, domain: 'host.example' } - expect(pin.errors[:base]) - .to be_empty + it 'does not call the invalidator on destroy' do + expect { subject.destroy } + .to_not change(account, :updated_at) + end end end end From d547bf2f1e4198d6d5b8c8b200e7287bf03e9961 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 28 Oct 2024 03:37:32 -0400 Subject: [PATCH 385/467] Update rails to version 7.1.4.2 (#32670) --- Gemfile.lock | 106 +++++++++++++++++++++++++-------------------------- package.json | 2 +- yarn.lock | 10 ++--- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 103bd80b815b3a..4c9ccaabd175bc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,35 +10,35 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.4.1) - actionpack (= 7.1.4.1) - activesupport (= 7.1.4.1) + actioncable (7.1.4.2) + actionpack (= 7.1.4.2) + activesupport (= 7.1.4.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.4.1) - actionpack (= 7.1.4.1) - activejob (= 7.1.4.1) - activerecord (= 7.1.4.1) - activestorage (= 7.1.4.1) - activesupport (= 7.1.4.1) + actionmailbox (7.1.4.2) + actionpack (= 7.1.4.2) + activejob (= 7.1.4.2) + activerecord (= 7.1.4.2) + activestorage (= 7.1.4.2) + activesupport (= 7.1.4.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.4.1) - actionpack (= 7.1.4.1) - actionview (= 7.1.4.1) - activejob (= 7.1.4.1) - activesupport (= 7.1.4.1) + actionmailer (7.1.4.2) + actionpack (= 7.1.4.2) + actionview (= 7.1.4.2) + activejob (= 7.1.4.2) + activesupport (= 7.1.4.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.4.1) - actionview (= 7.1.4.1) - activesupport (= 7.1.4.1) + actionpack (7.1.4.2) + actionview (= 7.1.4.2) + activesupport (= 7.1.4.2) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -46,15 +46,15 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.4.1) - actionpack (= 7.1.4.1) - activerecord (= 7.1.4.1) - activestorage (= 7.1.4.1) - activesupport (= 7.1.4.1) + actiontext (7.1.4.2) + actionpack (= 7.1.4.2) + activerecord (= 7.1.4.2) + activestorage (= 7.1.4.2) + activesupport (= 7.1.4.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.4.1) - activesupport (= 7.1.4.1) + actionview (7.1.4.2) + activesupport (= 7.1.4.2) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -64,22 +64,22 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.4.1) - activesupport (= 7.1.4.1) + activejob (7.1.4.2) + activesupport (= 7.1.4.2) globalid (>= 0.3.6) - activemodel (7.1.4.1) - activesupport (= 7.1.4.1) - activerecord (7.1.4.1) - activemodel (= 7.1.4.1) - activesupport (= 7.1.4.1) + activemodel (7.1.4.2) + activesupport (= 7.1.4.2) + activerecord (7.1.4.2) + activemodel (= 7.1.4.2) + activesupport (= 7.1.4.2) timeout (>= 0.4.0) - activestorage (7.1.4.1) - actionpack (= 7.1.4.1) - activejob (= 7.1.4.1) - activerecord (= 7.1.4.1) - activesupport (= 7.1.4.1) + activestorage (7.1.4.2) + actionpack (= 7.1.4.2) + activejob (= 7.1.4.2) + activerecord (= 7.1.4.2) + activesupport (= 7.1.4.2) marcel (~> 1.0) - activesupport (7.1.4.1) + activesupport (7.1.4.2) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -639,20 +639,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.4.1) - actioncable (= 7.1.4.1) - actionmailbox (= 7.1.4.1) - actionmailer (= 7.1.4.1) - actionpack (= 7.1.4.1) - actiontext (= 7.1.4.1) - actionview (= 7.1.4.1) - activejob (= 7.1.4.1) - activemodel (= 7.1.4.1) - activerecord (= 7.1.4.1) - activestorage (= 7.1.4.1) - activesupport (= 7.1.4.1) + rails (7.1.4.2) + actioncable (= 7.1.4.2) + actionmailbox (= 7.1.4.2) + actionmailer (= 7.1.4.2) + actionpack (= 7.1.4.2) + actiontext (= 7.1.4.2) + actionview (= 7.1.4.2) + activejob (= 7.1.4.2) + activemodel (= 7.1.4.2) + activerecord (= 7.1.4.2) + activestorage (= 7.1.4.2) + activesupport (= 7.1.4.2) bundler (>= 1.15.0) - railties (= 7.1.4.1) + railties (= 7.1.4.2) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -667,9 +667,9 @@ GEM rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.4.1) - actionpack (= 7.1.4.1) - activesupport (= 7.1.4.1) + railties (7.1.4.2) + actionpack (= 7.1.4.2) + activesupport (= 7.1.4.2) irb rackup (>= 1.0.0) rake (>= 12.2) diff --git a/package.json b/package.json index d144b0c156ea39..f907dc4f6c7d0d 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@formatjs/intl-pluralrules": "^5.2.2", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", - "@rails/ujs": "7.1.401", + "@rails/ujs": "7.1.402", "@reduxjs/toolkit": "^2.0.1", "@svgr/webpack": "^5.5.0", "arrow-key-navigation": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index cfe57e724c6104..b8f9d50cf6e5c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2821,7 +2821,7 @@ __metadata: "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" - "@rails/ujs": "npm:7.1.401" + "@rails/ujs": "npm:7.1.402" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -3120,10 +3120,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.401": - version: 7.1.401 - resolution: "@rails/ujs@npm:7.1.401" - checksum: 10c0/08eae084c80e837e47cc01d0be25a431495f7dea381dcaaa4ce39a3217fac46bf87d169b3dfcf304ae16e0714de7435c2b8c5eb8d5052e3ba70ef3050a72fa3c +"@rails/ujs@npm:7.1.402": + version: 7.1.402 + resolution: "@rails/ujs@npm:7.1.402" + checksum: 10c0/ccab74b8013ed8a8ab8d7497d0fa510a6ec079725b5fcf679936d80c342940e462b60243ad2cb98128f29db5708a094e319767e8f33a18eb63ceb745de63d1e0 languageName: node linkType: hard From 48f6f46072f009a4e6e2c434a94b90fd58017c25 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:20:47 +0100 Subject: [PATCH 386/467] Update dependency react-select to v5.8.2 (#32661) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b8f9d50cf6e5c5..eb509cfdc4b225 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14652,8 +14652,8 @@ __metadata: linkType: hard "react-select@npm:^5.7.3": - version: 5.8.1 - resolution: "react-select@npm:5.8.1" + version: 5.8.2 + resolution: "react-select@npm:5.8.2" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -14667,7 +14667,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/0fd73e1e472105f980e09c86f0e6adbdc9f2f5c1befa275b08c71653becdd1829f596155a81b5085cb86f18b20bf4f4cc439ab5fe23e68f326e169dcfe00ccf6 + checksum: 10c0/3089b8bfb23f556a7b1de07ea654fc5f5976f531a731a0231bbcbc195afb9294c36f49d712712f2deefc13eb6d7ede4aa1d80cb45b80afd3e26fde2f09db35eb languageName: node linkType: hard From c3919289d2d1b4bcb74b789533debd109bf77f9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:21:01 +0100 Subject: [PATCH 387/467] Update DefinitelyTyped types (non-major) (#32674) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index eb509cfdc4b225..ac78bdc5a251c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3725,12 +3725,12 @@ __metadata: linkType: hard "@types/jest@npm:^29.5.2": - version: 29.5.13 - resolution: "@types/jest@npm:29.5.13" + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" dependencies: expect: "npm:^29.0.0" pretty-format: "npm:^29.0.0" - checksum: 10c0/9c31af0b155387b9860908830de63c6b79011d7c87c8b61b39da124e26e55423dd51b006749aafe4f0ef3a065016619a1f93ef4b055157d43727f448e67824b7 + checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed languageName: node linkType: hard @@ -3997,12 +3997,12 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7, @types/react@npm:^18.3.11": - version: 18.3.11 - resolution: "@types/react@npm:18.3.11" + version: 18.3.12 + resolution: "@types/react@npm:18.3.12" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/ce80512246ca5bda69db85b9f4f1835189334acfb6b2c4f3eda8cabff1ff1a3ea9ce4f3b895bdbc18c94140aa45592331aa3fdeb557f525c1b048de7ce84fc0e + checksum: 10c0/8bae8d9a41619804561574792e29112b413044eb0d53746dde2b9720c1f9a59f71c895bbd7987cd8ce9500b00786e53bc032dced38cddf42910458e145675290 languageName: node linkType: hard @@ -4135,8 +4135,8 @@ __metadata: linkType: hard "@types/webpack@npm:^4.41.33": - version: 4.41.39 - resolution: "@types/webpack@npm:4.41.39" + version: 4.41.40 + resolution: "@types/webpack@npm:4.41.40" dependencies: "@types/node": "npm:*" "@types/tapable": "npm:^1" @@ -4144,7 +4144,7 @@ __metadata: "@types/webpack-sources": "npm:*" anymatch: "npm:^3.0.0" source-map: "npm:^0.6.0" - checksum: 10c0/740420d092abb80b70263b02609bde209801b060d8e6f3a399a129945cb09182c2ce63dc816908bfbcdb123b35dc4c4fb51367aac2b5974537694cac2631db21 + checksum: 10c0/ecd530e5db4c21ec61795eec538026f96c126323836249a83e72805afd1d0b1141fc781f14d4a59d77f877523384b4c5d79dc391cfb901e7a781a9aa085f8198 languageName: node linkType: hard From 6a5a59c28ca081554026e13c0e71763c0fdc033c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:21:24 +0000 Subject: [PATCH 388/467] Update dependency @formatjs/cli to v6.3.5 (#32675) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ac78bdc5a251c0..4ef44a7591cef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2204,8 +2204,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.3.0 - resolution: "@formatjs/cli@npm:6.3.0" + version: 6.3.5 + resolution: "@formatjs/cli@npm:6.3.5" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2234,7 +2234,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/9a803eacbcf2060c8b3cedcf9eef1300df73722eeadaebf7282ff0e9cc41bdcb98d60cea46c297fb9060a07ccd56d44f70247d659827086a55a1d0787e6bd545 + checksum: 10c0/f3fd57de6df3ef0cfa668813c49acd7dcbecbf52444f30e8edec4ee7bc2d8c47c2e6fb4b7ce3c9c5b4595bdf8416c37953ebb05b400f99874a7f810943f6265b languageName: node linkType: hard From 0426cb78f7f162c0ff46c61081ada5025875874b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:23:13 +0000 Subject: [PATCH 389/467] New Crowdin Translations (automated) (#32589) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/br.json | 2 + app/javascript/mastodon/locales/ca.json | 4 +- app/javascript/mastodon/locales/cy.json | 43 +++---- app/javascript/mastodon/locales/da.json | 3 +- app/javascript/mastodon/locales/de.json | 9 +- app/javascript/mastodon/locales/el.json | 1 - app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 7 +- app/javascript/mastodon/locales/es-AR.json | 5 +- app/javascript/mastodon/locales/es-MX.json | 3 +- app/javascript/mastodon/locales/es.json | 5 +- app/javascript/mastodon/locales/et.json | 1 - app/javascript/mastodon/locales/eu.json | 1 - app/javascript/mastodon/locales/fa.json | 18 ++- app/javascript/mastodon/locales/fi.json | 3 +- app/javascript/mastodon/locales/fo.json | 3 +- app/javascript/mastodon/locales/fr-CA.json | 2 +- app/javascript/mastodon/locales/fr.json | 2 +- app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 3 +- app/javascript/mastodon/locales/gd.json | 4 +- app/javascript/mastodon/locales/gl.json | 3 +- app/javascript/mastodon/locales/he.json | 3 +- app/javascript/mastodon/locales/hu.json | 3 +- app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 9 ++ app/javascript/mastodon/locales/io.json | 1 - app/javascript/mastodon/locales/is.json | 3 +- app/javascript/mastodon/locales/it.json | 3 +- app/javascript/mastodon/locales/ja.json | 16 ++- app/javascript/mastodon/locales/ko.json | 3 +- app/javascript/mastodon/locales/la.json | 3 + app/javascript/mastodon/locales/lt.json | 4 +- app/javascript/mastodon/locales/lv.json | 24 ++-- app/javascript/mastodon/locales/nl.json | 3 +- app/javascript/mastodon/locales/nn.json | 1 - app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/pl.json | 3 +- app/javascript/mastodon/locales/pt-BR.json | 3 +- app/javascript/mastodon/locales/pt-PT.json | 3 +- app/javascript/mastodon/locales/ru.json | 5 +- app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/sq.json | 3 +- app/javascript/mastodon/locales/sv.json | 9 +- app/javascript/mastodon/locales/th.json | 11 +- app/javascript/mastodon/locales/tr.json | 3 +- app/javascript/mastodon/locales/uk.json | 7 +- app/javascript/mastodon/locales/vi.json | 3 +- app/javascript/mastodon/locales/zh-CN.json | 3 +- app/javascript/mastodon/locales/zh-HK.json | 10 ++ app/javascript/mastodon/locales/zh-TW.json | 41 +++---- config/locales/activerecord.fa.yml | 6 + config/locales/devise.eo.yml | 2 + config/locales/doorkeeper.eo.yml | 4 + config/locales/doorkeeper.lv.yml | 19 +-- config/locales/doorkeeper.th.yml | 1 + config/locales/es-AR.yml | 6 +- config/locales/fa.yml | 127 ++++++++++++++++++++- config/locales/ga.yml | 3 + config/locales/hu.yml | 3 + config/locales/ja.yml | 3 + config/locales/ko.yml | 3 + config/locales/lv.yml | 78 +++++++------ config/locales/nn.yml | 34 ++++++ config/locales/simple_form.eo.yml | 2 + config/locales/simple_form.es-MX.yml | 2 +- config/locales/simple_form.fa.yml | 4 + config/locales/simple_form.ga.yml | 2 + config/locales/simple_form.hu.yml | 2 + config/locales/simple_form.ja.yml | 2 + config/locales/simple_form.ko.yml | 2 + config/locales/simple_form.lv.yml | 4 +- config/locales/simple_form.nl.yml | 2 +- config/locales/simple_form.nn.yml | 2 + config/locales/simple_form.sq.yml | 2 + config/locales/simple_form.sv.yml | 2 + config/locales/simple_form.th.yml | 2 + config/locales/simple_form.uk.yml | 2 + config/locales/sk.yml | 5 + config/locales/sq.yml | 3 + config/locales/sv.yml | 41 ++++++- config/locales/th.yml | 29 +++++ config/locales/uk.yml | 2 + config/locales/vi.yml | 6 +- 86 files changed, 544 insertions(+), 174 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 6d8290f8a13294..54ed1cb8c85b5a 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -301,7 +301,6 @@ "filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة", "filter_modal.select_filter.title": "تصفية هذا المنشور", "filter_modal.title.status": "تصفية منشور", - "filter_warning.matches_filter": "يطابق عامل التصفية \"{title}\"", "filtered_notifications_banner.title": "الإشعارات المصفاة", "firehose.all": "الكل", "firehose.local": "هذا الخادم", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index eb5cd5053dd5a9..8423e36ba0527d 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -300,7 +300,6 @@ "filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую", "filter_modal.select_filter.title": "Фільтраваць гэты допіс", "filter_modal.title.status": "Фільтраваць допіс", - "filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"", "filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце", "filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні", "firehose.all": "Усе", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 1f0c90efcb048b..575bc567241b6a 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -171,6 +171,7 @@ "confirmations.reply.message": "Respont bremañ a zilamo ar gemennadenn emaoc'h o skrivañ. Sur e oc'h e fell deoc'h kenderc'hel ganti?", "confirmations.unfollow.confirm": "Diheuliañ", "confirmations.unfollow.message": "Ha sur oc'h e fell deoc'h paouez da heuliañ {name} ?", + "content_warning.show_more": "Diskouez muioc'h", "conversation.delete": "Dilemel ar gaozeadenn", "conversation.mark_as_read": "Merkañ evel lennet", "conversation.open": "Gwelout ar gaozeadenn", @@ -249,6 +250,7 @@ "filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez", "filter_modal.select_filter.title": "Silañ an toud-mañ", "filter_modal.title.status": "Silañ un toud", + "filter_warning.matches_filter": "A glot gant ar sil “{title}”", "firehose.all": "Pep tra", "firehose.local": "Ar servijer-mañ", "firehose.remote": "Servijerioù all", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 990a3ef97d373e..678f4da1752609 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Durada de l'enquesta", "compose_form.poll.multiple": "Opcions múltiples", "compose_form.poll.option_placeholder": "Opció {number}", + "compose_form.poll.single": "Única opció", "compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre múltiples opcions", "compose_form.poll.switch_to_single": "Canvia l’enquesta per a permetre una única opció", "compose_form.poll.type": "Estil", @@ -304,7 +305,6 @@ "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova", "filter_modal.select_filter.title": "Filtra aquest tut", "filter_modal.title.status": "Filtra un tut", - "filter_warning.matches_filter": "Coincideix amb el filtre “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {De ningú} one {D'una persona} other {De # persones}} que potser coneixes", "filtered_notifications_banner.title": "Notificacions filtrades", "firehose.all": "Tots", @@ -507,6 +507,7 @@ "notification.favourite": "{name} ha afavorit el teu tut", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# altre} other {# altres}} han afavorit la vostra publicació", "notification.follow": "{name} et segueix", + "notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit", "notification.follow_request": "{name} ha sol·licitat de seguir-te", "notification.follow_request.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} han demanat de seguir-vos", "notification.label.mention": "Menció", @@ -565,6 +566,7 @@ "notifications.column_settings.filter_bar.category": "Barra ràpida de filtres", "notifications.column_settings.follow": "Nous seguidors:", "notifications.column_settings.follow_request": "Noves sol·licituds de seguiment:", + "notifications.column_settings.group": "Agrupa", "notifications.column_settings.mention": "Mencions:", "notifications.column_settings.poll": "Resultats de l’enquesta:", "notifications.column_settings.push": "Notificacions push", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 723e8ae37d5e62..3c4a6aa40cc6a3 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -36,7 +36,7 @@ "account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.", "account.followers_counter": "{count, plural, one {{counter} dilynwr} two {{counter} ddilynwr} other {{counter} dilynwyr}}", "account.following": "Yn dilyn", - "account.following_counter": "{count, plural, one {Yn dilyn {counter}} other {Yn dilyn {counter}}}", + "account.following_counter": "{count, plural, one {Yn dilyn {counter}} other {Yn dilyn {counter} arall}}", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.go_to_profile": "Mynd i'r proffil", "account.hide_reblogs": "Cuddio hybiau gan @{name}", @@ -62,7 +62,7 @@ "account.requested_follow": "Mae {name} wedi gwneud cais i'ch dilyn", "account.share": "Rhannwch broffil @{name}", "account.show_reblogs": "Dangos hybiau gan @{name}", - "account.statuses_counter": "{count, plural, one {{counter} post} two {{counter} bost} few {{counter} phost} many {{counter} post} other {{counter} post}}", + "account.statuses_counter": "{count, plural, one {{counter} postiad} two {{counter} bostiad} few {{counter} phostiad} many {{counter} postiad} other {{counter} postiad}}", "account.unblock": "Dadflocio @{name}", "account.unblock_domain": "Dadflocio parth {domain}", "account.unblock_short": "Dadflocio", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?", "content_warning.hide": "Cuddio'r postiad", "content_warning.show": "Dangos beth bynnag", + "content_warning.show_more": "Dangos rhagor", "conversation.delete": "Dileu sgwrs", "conversation.mark_as_read": "Nodi fel wedi'i ddarllen", "conversation.open": "Gweld sgwrs", @@ -305,8 +306,8 @@ "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.title.status": "Hidlo postiad", - "filter_warning.matches_filter": "Yn cydweddu'r hidlydd “{title}”", - "filtered_notifications_banner.pending_requests": "Gan {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", + "filter_warning.matches_filter": "Yn cyd-fynd â'r hidlydd “ {title} ”", + "filtered_notifications_banner.pending_requests": "Oddi wrth {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "firehose.all": "Popeth", "firehose.local": "Gweinydd hwn", @@ -349,12 +350,12 @@ "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.counter_by_accounts": "{cyfrif, lluosog, un {{counter} cyfranogwr} arall {{counter} cyfranogwr}}", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} cyfranogwr} other {{counter} cyfranogwr}}", "hashtag.counter_by_uses": "{count, plural, one {postiad {counter}} other {postiad {counter}}}", - "hashtag.counter_by_uses_today": "{cyfrif, lluosog, un {{counter} postiad} arall {{counter} postiad}} heddiw", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postiad} other {{counter} postiad}} heddiw", "hashtag.follow": "Dilyn hashnod", "hashtag.unfollow": "Dad-ddilyn hashnod", - "hashtags.and_other": "…a {count, plural, other {# more}}", + "hashtags.and_other": "…a {count, plural, other {# arall}}", "hints.profiles.followers_may_be_missing": "Mae'n bosibl bod dilynwyr y proffil hwn ar goll.", "hints.profiles.follows_may_be_missing": "Mae'n bosibl bod dilynwyr y proffil hwn ar goll.", "hints.profiles.posts_may_be_missing": "Mae'n bosibl bod rhai postiadau y proffil hwn ar goll.", @@ -442,7 +443,7 @@ "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.", "link_preview.author": "Gan {name}", "link_preview.more_from_author": "Mwy gan {name}", - "link_preview.shares": "{count, plural, one {{counter} ostiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}", + "link_preview.shares": "{count, plural, one {{counter} postiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}", "lists.account.add": "Ychwanegu at restr", "lists.account.remove": "Tynnu o'r rhestr", "lists.delete": "Dileu rhestr", @@ -499,18 +500,18 @@ "navigation_bar.security": "Diogelwch", "not_signed_in_indicator.not_signed_in": "Rhaid i chi fewngofnodi i weld yr adnodd hwn.", "notification.admin.report": "Adroddwyd ar {name} {target}", - "notification.admin.report_account": "{name} reported {count, plural, one {un postiad} other {# postiad}} from {target} for {category}", - "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un postiad} two {# bostiad} few {# phost} other {# postiad}} gan {target}", + "notification.admin.report_account": "Adroddodd {name} {count, plural, one {un postiad} other {# postiad}} gan {target} oherwydd {category}", + "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un postiad} two {# bostiad} few {# postiad} other {# postiad}} gan {target}", "notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}", "notification.admin.report_statuses_other": "Adroddodd {name} {target}", "notification.admin.sign_up": "Cofrestrodd {name}", - "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # eraill}}", + "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}", "notification.favourite": "Ffafriodd {name} eich postiad", - "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# eraill}} eich postiad", + "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad", "notification.follow": "Dilynodd {name} chi", - "notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# other} two {# others} few {# others} many {# others} other {# others}} nawr yn eich dilyn chi", + "notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# arall} two {# arall} few {# arall} many {# others} other {# arall}} nawr yn eich dilyn chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", - "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# other} other {# others}} wedi gofyn i'ch dilyn chi", + "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# arall} other {# arall}} wedi gofyn i'ch dilyn chi", "notification.label.mention": "Crybwyll", "notification.label.private_mention": "Crybwyll preifat", "notification.label.private_reply": "Ateb preifat", @@ -529,7 +530,7 @@ "notification.own_poll": "Mae eich pleidlais wedi dod i ben", "notification.poll": "Mae arolwg y gwnaethoch bleidleisio ynddo wedi dod i ben", "notification.reblog": "Hybodd {name} eich post", - "notification.reblog.name_and_others_with_link": "Mae {name} a {count, plural, one {# other} other {# others}} wedi hybu eich postiad", + "notification.reblog.name_and_others_with_link": "Mae {name} a {count, plural, one {# arall} other {# arall}} wedi hybu eich postiad", "notification.relationships_severance_event": "Wedi colli cysylltiad â {name}", "notification.relationships_severance_event.account_suspension": "Mae gweinyddwr o {from} wedi atal {target}, sy'n golygu na allwch dderbyn diweddariadau ganddynt mwyach na rhyngweithio â nhw.", "notification.relationships_severance_event.domain_block": "Mae gweinyddwr o {from} wedi blocio {target}, gan gynnwys {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {# cyfrif}} arall rydych chi'n ei ddilyn.", @@ -538,9 +539,9 @@ "notification.status": "{name} newydd ei bostio", "notification.update": "Golygodd {name} bostiad", "notification_requests.accept": "Derbyn", - "notification_requests.accept_multiple": "{count, plural, one {Accept # request…} other {Accept # requests…}}", - "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accept request} other {Accept requests}}", - "notification_requests.confirm_accept_multiple.message": "Rydych ar fin derbyn {count, plural, one {one notification request} other {# notification requests}}. Ydych chi'n siŵr eich bod am barhau?", + "notification_requests.accept_multiple": "{count, plural, one {Derbyn # cais…} other {Derbyn # cais…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Derbyn cais} other {Derbyn cais}}", + "notification_requests.confirm_accept_multiple.message": "Rydych ar fin derbyn {count, plural, one {un cais hysbysiad} other {# cais hysbysiad}}. Ydych chi'n siŵr eich bod am barhau?", "notification_requests.confirm_accept_multiple.title": "Derbyn ceisiadau hysbysu?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Diystyru cais} other {Diystyru ceisiadau}}", "notification_requests.confirm_dismiss_multiple.message": "Rydych ar fin diystyru {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. Fyddwch chi ddim yn gallu cyrchu {count, plural, one {it} other {them}} yn hawdd eto. Ydych chi'n yn siŵr eich bod am fwrw ymlaen?", @@ -689,7 +690,7 @@ "relative_time.minutes": "{number} munud", "relative_time.seconds": "{number} eiliad", "relative_time.today": "heddiw", - "reply_indicator.attachments": "{count, plural, one {# attachment} arall {# attachments}}", + "reply_indicator.attachments": "{count, plural, one {# atodiad} other {# atodiad}}", "reply_indicator.cancel": "Canslo", "reply_indicator.poll": "Arolwg", "report.block": "Blocio", @@ -732,7 +733,7 @@ "report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.", "report.unfollow": "Dad-ddilyn @{name}", "report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich ffrwd gartref mwyach, dad-ddilynwch nhw.", - "report_notification.attached_statuses": "{count, plural, one {{count} postiad} arall {{count} postiad}} atodwyd", + "report_notification.attached_statuses": "{count, plural, one {{count} postiad} other {{count} postiad}} wedi'i atodi", "report_notification.categories.legal": "Cyfreithiol", "report_notification.categories.legal_sentence": "cynnwys anghyfreithlon", "report_notification.categories.other": "Arall", @@ -812,7 +813,7 @@ "status.reblog": "Hybu", "status.reblog_private": "Hybu i'r gynulleidfa wreiddiol", "status.reblogged_by": "Hybodd {name}", - "status.reblogs": "{count, plural, one {hwb} other {hwb}}", + "status.reblogs": "{count, plural, one {# hwb} other {# hwb}}", "status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.", "status.redraft": "Dileu ac ailddrafftio", "status.remove_bookmark": "Tynnu nod tudalen", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 0227702d515d28..f8a1f2ad65aa0b 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -196,6 +196,7 @@ "confirmations.unfollow.title": "Følg ikke længere bruger?", "content_warning.hide": "Skjul indlæg", "content_warning.show": "Vis alligevel", + "content_warning.show_more": "Vis flere", "conversation.delete": "Slet samtale", "conversation.mark_as_read": "Markér som læst", "conversation.open": "Vis samtale", @@ -304,7 +305,7 @@ "filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny", "filter_modal.select_filter.title": "Filtrér dette indlæg", "filter_modal.title.status": "Filtrér et indlæg", - "filter_warning.matches_filter": "Matcher filteret “{title}”", + "filter_warning.matches_filter": "Matcher filteret “{title}”", "filtered_notifications_banner.pending_requests": "Fra {count, plural, =0 {ingen} one {én person} other {# personer}}, man måske kender", "filtered_notifications_banner.title": "Filtrerede notifikationer", "firehose.all": "Alle", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 75672a60d6c378..a02f13aef0a9b0 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Profil entfolgen?", "content_warning.hide": "Beitrag ausblenden", "content_warning.show": "Trotzdem anzeigen", + "content_warning.show_more": "Mehr anzeigen", "conversation.delete": "Unterhaltung löschen", "conversation.mark_as_read": "Als gelesen markieren", "conversation.open": "Unterhaltung anzeigen", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen", "filter_modal.select_filter.title": "Diesen Beitrag filtern", "filter_modal.title.status": "Beitrag per Filter ausblenden", - "filter_warning.matches_filter": "Übereinstimmend mit dem Filter „{title}“", + "filter_warning.matches_filter": "Übereinstimmend mit dem Filter „{title}“", "filtered_notifications_banner.pending_requests": "Von {count, plural, =0 {keinem, den} one {einer Person, die} other {# Personen, die}} du möglicherweise kennst", "filtered_notifications_banner.title": "Gefilterte Benachrichtigungen", "firehose.all": "Alles", @@ -598,15 +599,15 @@ "notifications.policy.filter": "Filtern", "notifications.policy.filter_hint": "An gefilterte Benachrichtigungen im Posteingang senden", "notifications.policy.filter_limited_accounts_hint": "Durch Server-Moderator*innen eingeschränkt", - "notifications.policy.filter_limited_accounts_title": "Moderierte Konten", + "notifications.policy.filter_limited_accounts_title": "moderierten Konten", "notifications.policy.filter_new_accounts.hint": "Innerhalb {days, plural, one {des letzten Tages} other {der letzten # Tagen}} erstellt", - "notifications.policy.filter_new_accounts_title": "Neuen Konten", + "notifications.policy.filter_new_accounts_title": "neuen Konten", "notifications.policy.filter_not_followers_hint": "Einschließlich Profilen, die dir seit weniger als {days, plural, one {einem Tag} other {# Tagen}} folgen", "notifications.policy.filter_not_followers_title": "Profilen, die mir nicht folgen", "notifications.policy.filter_not_following_hint": "Bis du sie manuell genehmigst", "notifications.policy.filter_not_following_title": "Profilen, denen ich nicht folge", "notifications.policy.filter_private_mentions_hint": "Solange sie keine Antwort auf deine Erwähnung ist oder du dem Profil nicht folgst", - "notifications.policy.filter_private_mentions_title": "Unerwünschten privaten Erwähnungen", + "notifications.policy.filter_private_mentions_title": "unerwünschten privaten Erwähnungen", "notifications.policy.title": "Benachrichtigungen verwalten von …", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index e362d9b89bb345..40517f8340901c 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα", "filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης", "filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης", - "filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”", "filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις", "filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις", "firehose.all": "Όλα", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 728ca89c73260b..d482ec21dd399a 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "filter_warning.matches_filter": "Matches filter “{title}”", "filtered_notifications_banner.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know", "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 6beb5a9716542f..0c9118228546c9 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -2,7 +2,7 @@ "about.blocks": "Administritaj serviloj", "about.contact": "Kontakto:", "about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.", - "about.domain_blocks.no_reason_available": "Kialo ne disponebla", + "about.domain_blocks.no_reason_available": "Kialo ne disponeblas", "about.domain_blocks.preamble": "Mastodon ĝenerale rajtigas vidi la enhavojn de uzantoj el aliaj serviloj en la fediverso, kaj komuniki kun ili. Jen la limigoj deciditaj de tiu ĉi servilo mem.", "about.domain_blocks.silenced.explanation": "Vi ne ĝenerale vidos profilojn kaj enhavojn de ĉi tiu servilo, krom se vi eksplice trovas aŭ estas permesita de via sekvato.", "about.domain_blocks.silenced.title": "Limigita", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Ĉu ĉesi sekvi uzanton?", "content_warning.hide": "Kaŝi afiŝon", "content_warning.show": "Montri ĉiukaze", + "content_warning.show_more": "Montri pli", "conversation.delete": "Forigi konversacion", "conversation.mark_as_read": "Marku kiel legita", "conversation.open": "Vidi konversacion", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", "filter_modal.title.status": "Filtri afiŝon", - "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", + "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", "filtered_notifications_banner.title": "Filtritaj sciigoj", "firehose.all": "Ĉiuj", @@ -567,7 +568,7 @@ "notifications.column_settings.filter_bar.category": "Rapida filtrila breto", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", - "notifications.column_settings.group": "Grupo", + "notifications.column_settings.group": "Grupigi", "notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 2410c278a6122b..55e64faba58ad3 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar mensaje", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Eliminar conversación", "conversation.mark_as_read": "Marcar como leída", "conversation.open": "Ver conversación", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.title.status": "Filtrar un mensaje", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todos", @@ -856,7 +857,7 @@ "upload_form.description": "Agregá una descripción para personas con dificultades visuales", "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsá la barra espaciadora o la tecla Enter. Mientras arrastrás, usá las teclas de flecha para mover el archivo multimedia en cualquier dirección. Volvé a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsá la tecla Escape para cancelar.", "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", - "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue soltado.", "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 2f9d1feb0139c2..f4e0352450d930 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar publicación", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Borrar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# people}} que puede que tú conozcas", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index fa4159abce7710..30a4b91fa23645 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar publicación", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Borrar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", @@ -567,7 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", - "notifications.column_settings.group": "Grupo", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 3c58548eb77892..c360a3aa23405e 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Kasuta olemasolevat kategooriat või loo uus", "filter_modal.select_filter.title": "Filtreeri seda postitust", "filter_modal.title.status": "Postituse filtreerimine", - "filter_warning.matches_filter": "Sobib filtriga “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Mitte üheltki inimeselt} one {Ühelt inimeselt} other {# inimeselt}}, keda võid teada", "filtered_notifications_banner.title": "Filtreeritud teavitused", "firehose.all": "Kõik", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index cd8fbeefbc44b1..c8349dc6a1a0d8 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -302,7 +302,6 @@ "filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria", "filter_modal.select_filter.title": "Iragazi bidalketa hau", "filter_modal.title.status": "Iragazi bidalketa bat", - "filter_warning.matches_filter": "“{title}” iragazkiarekin bat dator", "filtered_notifications_banner.pending_requests": "Ezagutu dezakezun {count, plural, =0 {inoren} one {pertsona baten} other {# pertsonen}}", "filtered_notifications_banner.title": "Iragazitako jakinarazpenak", "firehose.all": "Guztiak", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 6afdb537466f96..3bc96cf9f2e4eb 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "مدت نظرسنجی", "compose_form.poll.multiple": "چند گزینه‌ای", "compose_form.poll.option_placeholder": "گزینهٔ {number}", + "compose_form.poll.single": "تک گزینه‌ای", "compose_form.poll.switch_to_multiple": "تغییر نظرسنجی برای اجازه به چندین گزینه", "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.poll.type": "سبک", @@ -195,7 +196,7 @@ "confirmations.unfollow.message": "مطمئنید که می‌خواهید به پی‌گیری از {name} پایان دهید؟", "confirmations.unfollow.title": "ناپی‌گیری کاربر؟", "content_warning.hide": "نهفتن فرسته", - "content_warning.show": "نمایش به هر روی", + "content_warning.show": "در هر صورت نشان داده شود", "conversation.delete": "حذف گفتگو", "conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده", "conversation.open": "دیدن گفتگو", @@ -221,6 +222,7 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", + "domain_block_modal.you_will_lose_num_followers": "تعداد {followersCount, plural,other {{followersCount}}} پی‌گیرنده و {followingCount, plural,other {{followingCount}}} شخص پی‌گرفته شده را از دست خواهید داد.", "domain_block_modal.you_will_lose_relationships": "شما تمام پیگیرکنندگان و افرادی که از این کارساز پیگیری می‌کنید را از دست خواهید داد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", "domain_pill.activitypub_lets_connect": "این به شما اجازه می‌دهد تا نه تنها در ماستودون، بلکه در برنامه‌های اجتماعی مختلف نیز با افراد ارتباط برقرار کرده و تعامل داشته باشید.", @@ -302,7 +304,6 @@ "filter_modal.select_filter.subtitle": "استفاده از یک دستهً موجود یا ایجاد دسته‌ای جدید", "filter_modal.select_filter.title": "پالایش این فرسته", "filter_modal.title.status": "پالایش یک فرسته", - "filter_warning.matches_filter": "مطابق با پالایهٔ «{title}»", "filtered_notifications_banner.pending_requests": "از {count, plural, =0 {هیچ‌کسی} one {فردی} other {# نفر}} که ممکن است بشناسید", "filtered_notifications_banner.title": "آگاهی‌های پالوده", "firehose.all": "همه", @@ -367,6 +368,7 @@ "home.pending_critical_update.link": "دیدن به‌روز رسانی‌ها", "home.pending_critical_update.title": "به‌روز رسانی امنیتی بحرانی موجود است!", "home.show_announcements": "نمایش اعلامیه‌ها", + "ignore_notifications_modal.filter_instead": "به جایش پالوده شود", "ignore_notifications_modal.ignore": "چشم‌پوشی از آگاهی‌ها", "ignore_notifications_modal.limited_accounts_title": "چشم‌پوشی از آگاهی‌های حساب‌های نظارت شده؟", "ignore_notifications_modal.new_accounts_title": "چشم‌پوشی از آگاهی‌های حساب‌های جدید؟", @@ -428,6 +430,8 @@ "lightbox.close": "بستن", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", + "lightbox.zoom_in": "بزرگ‌نمایی به اندازهٔ اصلی", + "lightbox.zoom_out": "بزرگ نمایی برای برازش", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", "limited_account_hint.title": "این نمایه از سوی ناظم‌های {domain} پنهان شده.", "link_preview.author": "از {name}", @@ -455,6 +459,7 @@ "mute_modal.hide_options": "گزینه‌های نهفتن", "mute_modal.indefinite": "تا وقتی ناخموشش کنم", "mute_modal.show_options": "نمایش گزینه‌ها", + "mute_modal.they_can_mention_and_follow": "می‌توانند به شما اشاره کرده و پیتان بگیرند، ولی نخواهید دیدشان.", "mute_modal.they_wont_know": "نخواهند دانست که خموش شده‌اند.", "mute_modal.title": "خموشی کاربر؟", "mute_modal.you_wont_see_mentions": "فرسته‌هایی که به او اشاره کرده‌اند را نخواهید دید.", @@ -494,6 +499,7 @@ "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.follow": "‫{name}‬ پی‌گیرتان شد", + "notification.follow.name_and_others": "{name} و {count, plural, other {#}} نفر دیگر پیتان گرفتند", "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", "notification.follow_request.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} درخواست پی‌گیریتان را دادند", "notification.label.mention": "اشاره", @@ -501,6 +507,7 @@ "notification.label.private_reply": "پاسخ خصوصی", "notification.label.reply": "پاسخ", "notification.mention": "اشاره", + "notification.mentioned_you": "‫{name}‬ از شما نام برد", "notification.moderation-warning.learn_more": "بیشتر بدانید", "notification.moderation_warning": "هشداری مدیریتی گرفته‌اید", "notification.moderation_warning.action_delete_statuses": "برخی از فرسته‌هایتان برداشته شدند.", @@ -519,7 +526,10 @@ "notification.status": "{name} چیزی فرستاد", "notification.update": "{name} فرسته‌ای را ویرایش کرد", "notification_requests.accept": "پذیرش", + "notification_requests.confirm_accept_multiple.button": "پذیرش {count, plural,one {درخواست} other {درخواست‌ها}}", + "notification_requests.confirm_accept_multiple.message": "در حال پذیرش {count, plural,one {یک}other {#}} درخواست آگاهی هستید. مطمئنید که می‌خواهید ادامه دهید؟", "notification_requests.confirm_accept_multiple.title": "پذیرش درخواست‌های آگاهی؟", + "notification_requests.confirm_dismiss_multiple.button": "رد {count, plural,one {درخواست} other {درخواست‌ها}}", "notification_requests.confirm_dismiss_multiple.title": "رد کردن درخواست‌های آگاهی؟", "notification_requests.dismiss": "دورانداختن", "notification_requests.edit_selection": "ویرایش", @@ -540,6 +550,7 @@ "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", + "notifications.column_settings.group": "گروه", "notifications.column_settings.mention": "اشاره‌ها:", "notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.push": "آگاهی‌های ارسالی", @@ -595,7 +606,7 @@ "onboarding.profile.discoverable_hint": "خواسته‌اید روی ماستودون کشف شوید. ممکن است فرسته‌هایتان در نتیحهٔ جست‌وجوها و فرسته‌های داغ ظاهر شده و نمایه‌تان به افرادی با علایق مشابهتان پیشنهاد شود.", "onboarding.profile.display_name": "نام نمایشی", "onboarding.profile.display_name_hint": "نام کامل یا نام باحالتان…", - "onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌ّای شخصی سازی بیش‌تری نیز دارد کامل کنید.", + "onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌های شخصی سازی بیش‌تری نیز دارد کامل کنید.", "onboarding.profile.note": "درباره شما", "onboarding.profile.note_hint": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…", "onboarding.profile.save_and_continue": "ذخیره کن و ادامه بده", @@ -760,6 +771,7 @@ "status.edit": "ویرایش", "status.edited": "آخرین ویرایش {date}", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", + "status.embed": "گرفتن کد تعبیه", "status.favourite": "برگزیده‌", "status.favourites": "{count, plural, one {برگزیده} other {برگزیده}}", "status.filter": "پالایش این فرسته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 717ea78559d713..37f3b87e84fae5 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?", "content_warning.hide": "Piilota julkaisu", "content_warning.show": "Näytä kuitenkin", + "content_warning.show_more": "Näytä lisää", "conversation.delete": "Poista keskustelu", "conversation.mark_as_read": "Merkitse luetuksi", "conversation.open": "Näytä keskustelu", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", "filter_modal.select_filter.title": "Suodata tämä julkaisu", "filter_modal.title.status": "Suodata julkaisu", - "filter_warning.matches_filter": "Vastaa suodatinta ”{title}”", + "filter_warning.matches_filter": "Vastaa suodatinta ”{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Ei keneltäkään, jonka} one {Yhdeltä käyttäjältä, jonka} other {# käyttäjältä, jotka}} saatat tuntea", "filtered_notifications_banner.title": "Suodatetut ilmoitukset", "firehose.all": "Kaikki", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 0e2bc88136921b..921f38468c130c 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Gevst at fylgja brúkara?", "content_warning.hide": "Fjal post", "content_warning.show": "Vís kortini", + "content_warning.show_more": "Vís meiri", "conversation.delete": "Strika samrøðu", "conversation.mark_as_read": "Merk sum lisið", "conversation.open": "Vís samrøðu", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan", "filter_modal.select_filter.title": "Filtrera hendan postin", "filter_modal.title.status": "Filtrera ein post", - "filter_warning.matches_filter": "Samsvarar við filtrið “{title}”", + "filter_warning.matches_filter": "Samsvarar við filtrið “{title}”", "filtered_notifications_banner.pending_requests": "Frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir", "filtered_notifications_banner.title": "Filtreraðar fráboðanir", "firehose.all": "Allar", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index e73a3249cbd949..65bbc25c211b8e 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -305,7 +305,6 @@ "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle", "filter_modal.select_filter.title": "Filtrer cette publication", "filter_modal.title.status": "Filtrer une publication", - "filter_warning.matches_filter": "Correspond au filtre « {title} »", "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître", "filtered_notifications_banner.title": "Notifications filtrées", "firehose.all": "Tout", @@ -856,6 +855,7 @@ "upload_form.description": "Décrire pour les malvoyants", "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", + "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 319316272be590..ed751c244b50a3 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -305,7 +305,6 @@ "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou créez-en une nouvelle", "filter_modal.select_filter.title": "Filtrer ce message", "filter_modal.title.status": "Filtrer un message", - "filter_warning.matches_filter": "Correspond au filtre « {title} »", "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître", "filtered_notifications_banner.title": "Notifications filtrées", "firehose.all": "Tout", @@ -856,6 +855,7 @@ "upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", + "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 0790a0dc574fd5..e1c090cb0cb8cb 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje", "filter_modal.select_filter.title": "Dit berjocht filterje", "filter_modal.title.status": "In berjocht filterje", - "filter_warning.matches_filter": "Komt oerien mei filter ‘{title}’", "filtered_notifications_banner.pending_requests": "Fan {count, plural, =0 {net ien} one {ien persoan} other {# persoanen}} dy’t jo mooglik kinne", "filtered_notifications_banner.title": "Filtere meldingen", "firehose.all": "Alles", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 81b93816ea08a3..aa7892163bcd54 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Dílean ​​an t-úsáideoir?", "content_warning.hide": "Folaigh postáil", "content_warning.show": "Taispeáin ar aon nós", + "content_warning.show_more": "Taispeáin níos mó", "conversation.delete": "Scrios comhrá", "conversation.mark_as_read": "Marcáil mar léite", "conversation.open": "Féach ar comhrá", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Bain úsáid as catagóir reatha nó cruthaigh ceann nua", "filter_modal.select_filter.title": "Déan scagadh ar an bpostáil seo", "filter_modal.title.status": "Déan scagadh ar phostáil", - "filter_warning.matches_filter": "Meaitseálann an scagaire “{title}”", + "filter_warning.matches_filter": "Meaitseálann an scagaire “{title}”", "filtered_notifications_banner.pending_requests": "Ó {count, plural, =0 {duine ar bith} one {duine amháin} two {# daoine} few {# daoine} many {# daoine} other {# daoine}} b’fhéidir go bhfuil aithne agat orthu", "filtered_notifications_banner.title": "Fógraí scagtha", "firehose.all": "Gach", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index a9da2cd5ec4b55..47a90334408422 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Faide a’ chunntais", "compose_form.poll.multiple": "Iomadh-roghainn", "compose_form.poll.option_placeholder": "Roghainn {number}", + "compose_form.poll.single": "Aon taghadh", "compose_form.poll.switch_to_multiple": "Atharraich an cunntas-bheachd ach an gabh iomadh roghainn a thaghadh", "compose_form.poll.switch_to_single": "Atharraich an cunntas-bheachd gus nach gabh ach aon roghainn a thaghadh", "compose_form.poll.type": "Stoidhle", @@ -304,7 +305,6 @@ "filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr", "filter_modal.select_filter.title": "Criathraich am post seo", "filter_modal.title.status": "Criathraich post", - "filter_warning.matches_filter": "A’ maidseadh na criathraige “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil gin ann} one {O # neach} two {O # neach} few {O # daoine} other {O # duine}} air a bheil thu eòlach ’s dòcha", "filtered_notifications_banner.title": "Brathan criathraichte", "firehose.all": "Na h-uile", @@ -507,6 +507,7 @@ "notification.favourite": "Is annsa le {name} am post agad", "notification.favourite.name_and_others_with_link": "Is annsa le {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} am post agad", "notification.follow": "Tha {name} ’gad leantainn a-nis", + "notification.follow.name_and_others": "Lean {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} thu", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", "notification.follow_request.name_and_others": "Dh’iarr {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} ’gad leantainn", "notification.label.mention": "Iomradh", @@ -565,6 +566,7 @@ "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", "notifications.column_settings.follow": "Luchd-leantainn ùr:", "notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:", + "notifications.column_settings.group": "Buidheann", "notifications.column_settings.mention": "Iomraidhean:", "notifications.column_settings.poll": "Toraidhean cunntais-bheachd:", "notifications.column_settings.push": "Brathan putaidh", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 5e40b0e4290769..a772dbc0f78034 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Deixar de seguir á usuaria?", "content_warning.hide": "Agochar publicación", "content_warning.show": "Mostrar igualmente", + "content_warning.show_more": "Mostrar máis", "conversation.delete": "Eliminar conversa", "conversation.mark_as_read": "Marcar como lido", "conversation.open": "Ver conversa", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar unha publicación", - "filter_warning.matches_filter": "Debido ao filtro “{title}”", + "filter_warning.matches_filter": "Concorda co filtro «{title}»", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que igual coñeces", "filtered_notifications_banner.title": "Notificacións filtradas", "firehose.all": "Todo", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index be1dde65280554..087eed903032cc 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "לבטל מעקב אחר המשתמש.ת?", "content_warning.hide": "הסתרת חיצרוץ", "content_warning.show": "להציג בכל זאת", + "content_warning.show_more": "הצג עוד", "conversation.delete": "מחיקת שיחה", "conversation.mark_as_read": "סמן כנקרא", "conversation.open": "צפו בשיחה", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", "filter_modal.select_filter.title": "סינון ההודעה הזו", "filter_modal.title.status": "סנן הודעה", - "filter_warning.matches_filter": "תואם לסנן “{title}”", + "filter_warning.matches_filter": "תואם לסנן “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין בקשות ממשתמשים }one {בקשה אחת ממישהו/מישהי }two {יש בקשותיים ממשתמשים }other {יש # בקשות ממשתמשים }}שאולי מוכרים לך", "filtered_notifications_banner.title": "התראות מסוננות", "firehose.all": "הכל", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index a6bd621a485f22..af0d83954dc420 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Megszünteted a felhasználó követését?", "content_warning.hide": "Bejegyzés elrejtése", "content_warning.show": "Megjelenítés mindenképp", + "content_warning.show_more": "Több megjelenítése", "conversation.delete": "Beszélgetés törlése", "conversation.mark_as_read": "Megjelölés olvasottként", "conversation.open": "Beszélgetés megtekintése", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat", "filter_modal.select_filter.title": "E bejegyzés szűrése", "filter_modal.title.status": "Egy bejegyzés szűrése", - "filter_warning.matches_filter": "Megfelel a szűrőnek: „{title}”", + "filter_warning.matches_filter": "Megfelel a szűrőnek: „{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {senkitől} one {egy valószínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}", "filtered_notifications_banner.title": "Szűrt értesítések", "firehose.all": "Összes", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 58e978cd146ec7..e41d390a3f123d 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Usa un categoria existente o crea un nove", "filter_modal.select_filter.title": "Filtrar iste message", "filter_modal.title.status": "Filtrar un message", - "filter_warning.matches_filter": "Corresponde al filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nemo} one {un persona} other {# personas}} que tu pote cognoscer", "filtered_notifications_banner.title": "Notificationes filtrate", "firehose.all": "Toto", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 085705714e3ebb..4b4336396036b3 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Jumlah akses dibatasi", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Teks Alternatif", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(tidak diproses)", "audio.hide": "Sembunyikan audio", @@ -97,6 +98,8 @@ "block_modal.title": "Blokir pengguna?", "block_modal.you_wont_see_mentions": "Anda tidak akan melihat kiriman yang menyebutkan mereka.", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", + "boost_modal.reblog": "Pacu kiriman?", + "boost_modal.undo_reblog": "Jangan pacu kiriman?", "bundle_column_error.copy_stacktrace": "Salin laporan kesalahan", "bundle_column_error.error.body": "Laman yang diminta tidak dapat ditampilkan. Mungkin karena sebuah kutu dalam kode kami, atau masalah kompatibilitas peramban.", "bundle_column_error.error.title": "Oh, tidak!", @@ -155,6 +158,7 @@ "compose_form.poll.duration": "Durasi japat", "compose_form.poll.multiple": "Pilihan ganda", "compose_form.poll.option_placeholder": "Opsi {number}", + "compose_form.poll.single": "Pilihan tunggal", "compose_form.poll.switch_to_multiple": "Ubah japat menjadi pilihan ganda", "compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal", "compose_form.poll.type": "Gaya", @@ -218,6 +222,7 @@ "domain_block_modal.they_cant_follow": "Tidak ada seorangpun dari server ini yang dapat mengikuti anda.", "domain_block_modal.they_wont_know": "Mereka tidak akan tahu bahwa mereka diblokir.", "domain_block_modal.title": "Blokir domain?", + "domain_block_modal.you_will_lose_relationships": "Kamu akan kehilangan semua pengikut dan orang yang kamu ikuti dari server ini.", "domain_block_modal.you_wont_see_posts": "Anda tidak akan melihat postingan atau notifikasi dari pengguna di server ini.", "domain_pill.activitypub_lets_connect": "Ini memungkinkan anda terhubung dan berinteraksi dengan orang-orang tidak hanya di Mastodon, tetapi juga di berbagai aplikasi sosial.", "domain_pill.activitypub_like_language": "ActivityPub seperti bahasa yang digunakan Mastodon dengan jejaring sosial lainnya.", @@ -231,6 +236,7 @@ "domain_pill.who_you_are": ".", "domain_pill.your_handle": "Nama pengguna anda:", "domain_pill.your_server": "Your digital home, where all of your posts live. Don’t like this one? Transfer servers at any time and bring your followers, too.", + "domain_pill.your_username": "Pengenal unik anda di server ini. Itu memungkinkan dapat mencari pengguna dengan nama yang sama di server lain.", "embed.instructions": "Sematkan kiriman ini di situs web Anda dengan menyalin kode di bawah ini.", "embed.preview": "Tampilan akan seperti ini nantinya:", "emoji_button.activity": "Aktivitas", @@ -293,6 +299,7 @@ "filter_modal.select_filter.subtitle": "Gunakan kategori yang sudah ada atau buat yang baru", "filter_modal.select_filter.title": "Saring kiriman ini", "filter_modal.title.status": "Saring sebuah kiriman", + "filtered_notifications_banner.title": "Notifikasi yang disaring", "firehose.all": "Semua", "firehose.local": "Server Ini", "firehose.remote": "Server Lain", @@ -301,6 +308,7 @@ "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", "follow_suggestions.curated_suggestion": "Pilihan staf", "follow_suggestions.dismiss": "Jangan tampilkan lagi", + "follow_suggestions.friends_of_friends_longer": "Populer di antara orang yang anda ikuti", "follow_suggestions.hints.featured": "Profil ini telah dipilih sendiri oleh tim {domain}.", "follow_suggestions.hints.friends_of_friends": "Profil ini populer di kalangan orang yang anda ikuti.", "follow_suggestions.personalized_suggestion": "Saran yang dipersonalisasi", @@ -308,6 +316,7 @@ "follow_suggestions.popular_suggestion_longer": "Populer di {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Serupa dengan profil yang baru Anda ikuti", "follow_suggestions.view_all": "Lihat semua", + "follow_suggestions.who_to_follow": "Siapa yang harus diikuti", "followed_tags": "Tagar yang diikuti", "footer.about": "Tentang", "footer.directory": "Direktori profil", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 21a8a084e75f3b..f9173b65f9f90b 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -304,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Usez disponebla grupo o kreez novajo", "filter_modal.select_filter.title": "Filtragez ca posto", "filter_modal.title.status": "Filtragez posto", - "filter_warning.matches_filter": "Sama kam filtrilo \"{title}\"", "filtered_notifications_banner.pending_requests": "De {count, plural,=0 {nulu} one {1 persono} other {# personi}} quan vu forsan konocas", "filtered_notifications_banner.title": "Filtrilita savigi", "firehose.all": "Omno", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index a6f85304cdf1a5..d1601c7634cb54 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Hætta að fylgjast með viðkomandi?", "content_warning.hide": "Fela færslu", "content_warning.show": "Birta samt", + "content_warning.show_more": "Sýna meira", "conversation.delete": "Eyða samtali", "conversation.mark_as_read": "Merkja sem lesið", "conversation.open": "Skoða samtal", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan", "filter_modal.select_filter.title": "Sía þessa færslu", "filter_modal.title.status": "Sía færslu", - "filter_warning.matches_filter": "Samsvarar síunni“{title}”", + "filter_warning.matches_filter": "Samsvarar síunni “{title}”", "filtered_notifications_banner.pending_requests": "Frá {count, plural, =0 {engum} one {einum aðila} other {# manns}} sem þú gætir þekkt", "filtered_notifications_banner.title": "Síaðar tilkynningar", "firehose.all": "Allt", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 44040cc716a7fb..68201e18ded4e9 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Smettere di seguire l'utente?", "content_warning.hide": "Nascondi post", "content_warning.show": "Mostra comunque", + "content_warning.show_more": "Mostra di più", "conversation.delete": "Elimina conversazione", "conversation.mark_as_read": "Segna come letto", "conversation.open": "Visualizza conversazione", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova", "filter_modal.select_filter.title": "Filtra questo post", "filter_modal.title.status": "Filtra un post", - "filter_warning.matches_filter": "Corrisponde al filtro \"{title}\"", + "filter_warning.matches_filter": "Corrisponde al filtro “{title}”", "filtered_notifications_banner.pending_requests": "Da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere", "filtered_notifications_banner.title": "Notifiche filtrate", "firehose.all": "Tutto", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 9aea55ec3f4c82..c0ef224b70e664 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "アンケート期間", "compose_form.poll.multiple": "複数選択", "compose_form.poll.option_placeholder": "項目{number}", + "compose_form.poll.single": "単一選択", "compose_form.poll.switch_to_multiple": "複数選択に変更", "compose_form.poll.switch_to_single": "単一選択に変更", "compose_form.poll.type": "スタイル", @@ -195,7 +196,8 @@ "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?", "confirmations.unfollow.title": "フォローを解除しようとしています", "content_warning.hide": "内容を隠す", - "content_warning.show": "承知の上で表示", + "content_warning.show": "承知して表示", + "content_warning.show_more": "続きを表示", "conversation.delete": "会話を削除", "conversation.mark_as_read": "既読にする", "conversation.open": "会話を表示", @@ -304,7 +306,7 @@ "filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します", "filter_modal.select_filter.title": "この投稿をフィルターする", "filter_modal.title.status": "投稿をフィルターする", - "filter_warning.matches_filter": "フィルター「{title}」に一致する投稿です", + "filter_warning.matches_filter": "フィルター「{title}」に一致する投稿", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {すべて完了しました} other {#人の通知がブロックされています}}", "filtered_notifications_banner.title": "保留中の通知", "firehose.all": "すべて", @@ -503,12 +505,13 @@ "notification.admin.report_statuses": "{name}さんが{target}さんを「{category}」として通報しました", "notification.admin.report_statuses_other": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", - "notification.admin.sign_up.name_and_others": "{name}さんほか{count, plural, other {#人}}がサインアップしました", + "notification.admin.sign_up.name_and_others": "{name}さんとほか{count, plural, other {#人}}がサインアップしました", "notification.favourite": "{name}さんがお気に入りしました", - "notification.favourite.name_and_others_with_link": "{name}さんほか{count, plural, other {#人}}がお気に入りしました", + "notification.favourite.name_and_others_with_link": "{name}さんとほか{count, plural, other {#人}}がお気に入りしました", "notification.follow": "{name}さんにフォローされました", + "notification.follow.name_and_others": "{name}さんとほか{count, plural, other {#人}}にフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", - "notification.follow_request.name_and_others": "{name}さんほか{count, plural, other {#人}}があなたにフォローリクエストしました", + "notification.follow_request.name_and_others": "{name}さんとほか{count, plural, other {#人}}があなたにフォローリクエストしました", "notification.label.mention": "メンション", "notification.label.private_mention": "非公開の返信 (メンション)", "notification.label.private_reply": "非公開の返信", @@ -527,7 +530,7 @@ "notification.own_poll": "アンケートが終了しました", "notification.poll": "投票したアンケートが終了しました", "notification.reblog": "{name}さんがあなたの投稿をブーストしました", - "notification.reblog.name_and_others_with_link": "{name}さんほか{count, plural, other {#人}}にブーストされました", + "notification.reblog.name_and_others_with_link": "{name}さんとほか{count, plural, other {#人}}がブーストしました", "notification.relationships_severance_event": "{name} との関係が失われました", "notification.relationships_severance_event.account_suspension": "{from} の管理者が {target} さんを停止したため、今後このユーザーとの交流や新しい投稿の受け取りができなくなりました。", "notification.relationships_severance_event.domain_block": "{from} の管理者が {target} をブロックしました。これにより{followersCount}フォロワーと{followingCount, plural, other {#フォロー}}が失われました。", @@ -565,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "クイックフィルターバー:", "notifications.column_settings.follow": "新しいフォロワー:", "notifications.column_settings.follow_request": "新しいフォローリクエスト:", + "notifications.column_settings.group": "グループ", "notifications.column_settings.mention": "返信:", "notifications.column_settings.poll": "アンケート結果:", "notifications.column_settings.push": "プッシュ通知", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 6b1dc6b365dda1..532fc01ab1ea00 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "사용자를 언팔로우 할까요?", "content_warning.hide": "게시물 숨기기", "content_warning.show": "무시하고 보기", + "content_warning.show_more": "더 보기", "conversation.delete": "대화 삭제", "conversation.mark_as_read": "읽은 상태로 표시", "conversation.open": "대화 보기", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", "filter_modal.select_filter.title": "이 게시물을 필터", "filter_modal.title.status": "게시물 필터", - "filter_warning.matches_filter": "\"{title}\" 필터에 걸림", + "filter_warning.matches_filter": "\"{title}\" 필터에 걸림", "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터", "filtered_notifications_banner.title": "걸러진 알림", "firehose.all": "모두", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index ac95b590e3b307..55678dbdf83655 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -13,6 +13,8 @@ "account.edit_profile": "Recolere notionem", "account.featured_tags.last_status_never": "Nulla contributa", "account.featured_tags.title": "Hashtag notātī {name}", + "account.followers_counter": "{count, plural, one {{counter} sectator} other {{counter} sectatores}}", + "account.following_counter": "{count, plural, one {{counter} sectans} other {{counter} sectans}}", "account.moved_to": "{name} significavit eum suam rationem novam nunc esse:", "account.muted": "Confutatus", "account.requested_follow": "{name} postulavit ut te sequeretur", @@ -230,6 +232,7 @@ "search_results.all": "Omnis", "server_banner.active_users": "Usūrāriī āctīvī", "server_banner.administered_by": "Administratur:", + "server_banner.is_one_of_many": "{domain} est unum ex multis independentibus servientibus Mastodon quos adhibere potes ut participes in fediverso.", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open this status in the moderation interface", "status.block": "Impedire @{name}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 60d0acf7a1007e..b2740b0165ee7d 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Apklausos trukmė", "compose_form.poll.multiple": "Keli pasirinkimai", "compose_form.poll.option_placeholder": "{number} parinktis", + "compose_form.poll.single": "Vienas pasirinkimas", "compose_form.poll.switch_to_multiple": "Keisti apklausą, kad būtų leidžiama pasirinkti kelis pasirinkimus", "compose_form.poll.switch_to_single": "Keisti apklausą, kad būtų leidžiama pasirinkti vieną pasirinkimą", "compose_form.poll.type": "Stilius", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Nebesekti naudotoją?", "content_warning.hide": "Slėpti įrašą", "content_warning.show": "Rodyti vis tiek", + "content_warning.show_more": "Rodyti daugiau", "conversation.delete": "Ištrinti pokalbį", "conversation.mark_as_read": "Žymėti kaip skaitytą", "conversation.open": "Peržiūrėti pokalbį", @@ -304,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.", "filter_modal.select_filter.title": "Filtruoti šį įrašą", "filter_modal.title.status": "Filtruoti įrašą", - "filter_warning.matches_filter": "Atitinka filtrą „{title}“", + "filter_warning.matches_filter": "Atitinka filtrą „{title}“", "filtered_notifications_banner.pending_requests": "Iš {count, plural, =0 {nė vieno} one {žmogaus} few {# žmonių} many {# žmonių} other {# žmonių}}, kuriuos galbūt pažįsti", "filtered_notifications_banner.title": "Filtruojami pranešimai", "firehose.all": "Visi", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 7d325c057d3d32..d7507ee8843dcd 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -146,7 +146,7 @@ "compose.saved.body": "Ziņa saglabāta.", "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk", "compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jutīgu informāciju caur Mastodon!", - "compose_form.hashtag_warning": "Šī ziņa netiks norādīta zem nevienas atsauces, jo tā nav publiska. Tikai publiskās ziņās var meklēt pēc atsauces.", + "compose_form.hashtag_warning": "Šis ieraksts netiks uzrādīts nevienā tēmturī, jo tas nav redzams visiem. Tikai visiem redzamos ierakstus var meklēt pēc tēmtura.", "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot, lai redzētu tikai sekotājiem paredzētos ierakstus.", "compose_form.lock_disclaimer.lock": "slēgts", "compose_form.placeholder": "Kas Tev padomā?", @@ -208,7 +208,7 @@ "dismissable_banner.dismiss": "Atcelt", "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.", "dismissable_banner.explore_statuses": "Šie ir ieraksti, kas šodien gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti jaunāki ieraksti, kuri tiek vairāk pastiprināti un ievietoti izlasēs.", - "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", + "dismissable_banner.explore_tags": "Šie ir tēmturi, kas šodien gūst uzmanību sabiedriskajā tīmeklī. Tēmturi, kurus izmanto vairāk dažādu cilvēku, tiek vērtēti augstāk.", "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.", "domain_block_modal.block": "Bloķēt serveri", "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", @@ -246,7 +246,7 @@ "empty_column.favourited_statuses": "Tev vēl nav iecienītāko ierakstu. Kad pievienosi kādu izlasei, tas tiks parādīts šeit.", "empty_column.favourites": "Šo ziņu neviens vēl nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.", "empty_column.follow_requests": "Šobrīd Tev nav sekošanas pieprasījumu. Kad saņemsi kādu, tas parādīsies šeit.", - "empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", + "empty_column.followed_tags": "Tu vēl neseko nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", "empty_column.home": "Tava mājas laikjosla ir tukša. Seko vairāk cilvēkiem, lai to piepildītu!", "empty_column.list": "Pagaidām šajā sarakstā nekā nav. Kad šī saraksta dalībnieki ievietos jaunus ierakstus, tie parādīsies šeit.", @@ -282,7 +282,6 @@ "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", - "filter_warning.matches_filter": "Atbilst filtram “{title}”", "firehose.all": "Visi", "firehose.local": "Šis serveris", "firehose.remote": "Citi serveri", @@ -315,8 +314,8 @@ "hashtag.column_settings.tag_mode.all": "Visi no šiem", "hashtag.column_settings.tag_mode.any": "Kāds no šiem", "hashtag.column_settings.tag_mode.none": "Neviens no šiem", - "hashtag.column_settings.tag_toggle": "Pievienot kolonnai papildu tēmturus", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} dalībnieks} other {{counter} dalībnieki}}", + "hashtag.column_settings.tag_toggle": "Iekļaut šajā kolonnā papildu birkas", + "hashtag.counter_by_accounts": "{count, plural, zero{{counter} dalībnieku} one {{counter} dalībnieks} other {{counter} dalībnieki}}", "hashtag.counter_by_uses": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", "hashtag.counter_by_uses_today": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}} šodien", "hashtag.follow": "Sekot tēmturim", @@ -412,6 +411,7 @@ "mute_modal.show_options": "Parādīt iespējas", "mute_modal.title": "Apklusināt lietotāju?", "navigation_bar.about": "Par", + "navigation_bar.administration": "Pārvaldība", "navigation_bar.advanced_interface": "Atvērt paplašinātā tīmekļa saskarnē", "navigation_bar.blocks": "Bloķētie lietotāji", "navigation_bar.bookmarks": "Grāmatzīmes", @@ -428,6 +428,7 @@ "navigation_bar.follows_and_followers": "Sekojamie un sekotāji", "navigation_bar.lists": "Saraksti", "navigation_bar.logout": "Iziet", + "navigation_bar.moderation": "Satura pārraudzība", "navigation_bar.mutes": "Apklusinātie lietotāji", "navigation_bar.opened_in_classic_interface": "Ieraksti, konti un citas noteiktas lapas pēc noklusējuma tiek atvērtas klasiskajā tīmekļa saskarnē.", "navigation_bar.personal": "Personīgie", @@ -443,9 +444,11 @@ "notification.follow": "{name} uzsāka Tev sekot", "notification.follow_request": "{name} nosūtīja Tev sekošanas pieprasījumu", "notification.moderation-warning.learn_more": "Uzzināt vairāk", + "notification.moderation_warning": "Ir saņemts satura pārraudzības brīdinājums", "notification.moderation_warning.action_delete_statuses": "Daži no Taviem ierakstiem tika noņemti.", "notification.moderation_warning.action_disable": "Tavs konts tika atspējots.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Daži no Taviem ierakstiem tika atzīmēti kā jutīgi.", + "notification.moderation_warning.action_none": "Konts ir saņēmis satura pārraudzības brīdinājumu.", "notification.moderation_warning.action_sensitive": "Tavi ieraksti turpmāk tiks atzīmēti kā jutīgi.", "notification.moderation_warning.action_silence": "Tavs konts tika ierobežots.", "notification.moderation_warning.action_suspend": "Tava konta darbība tika apturēta.", @@ -554,7 +557,8 @@ "privacy.private.long": "Tikai Tavi sekotāji", "privacy.private.short": "Sekotāji", "privacy.public.long": "Jebkurš Mastodon un ārpus tā", - "privacy.public.short": "Publiska", + "privacy.public.short": "Redzams visiem", + "privacy.unlisted.additional": "Šis uzvedas tieši kā publisks, izņemot to, ka ieraksts neparādīsies tiešraides barotnēs vai tēmturos, izpētē vai Mastodon meklēšanā, pat ja esi to norādījis visa konta ietvaros.", "privacy.unlisted.long": "Mazāk algoritmisku fanfaru", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", @@ -652,9 +656,9 @@ "sign_in_banner.create_account": "Izveidot kontu", "sign_in_banner.sign_in": "Pieteikties", "sign_in_banner.sso_redirect": "Piesakies vai Reģistrējies", - "status.admin_account": "Atvērt @{name} moderēšanas saskarni", - "status.admin_domain": "Atvērt {domain} moderēšanas saskarni", - "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē", + "status.admin_account": "Atvērt @{name} satura pārraudzības saskarni", + "status.admin_domain": "Atvērt {domain} satura pārraudzības saskarni", + "status.admin_status": "Atvērt šo ziņu satura pārraudzības saskarnē", "status.block": "Bloķēt @{name}", "status.bookmark": "Grāmatzīme", "status.cancel_reblog_private": "Nepastiprināt", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 8df1fc4d1f6f68..e7add2e8c7b5a7 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Gebruiker ontvolgen?", "content_warning.hide": "Bericht verbergen", "content_warning.show": "Alsnog tonen", + "content_warning.show_more": "Meer tonen", "conversation.delete": "Gesprek verwijderen", "conversation.mark_as_read": "Als gelezen markeren", "conversation.open": "Gesprek tonen", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken", "filter_modal.select_filter.title": "Dit bericht filteren", "filter_modal.title.status": "Een bericht filteren", - "filter_warning.matches_filter": "Komt overeen met filter “{title}”", + "filter_warning.matches_filter": "Komt overeen met filter \"{title}\"", "filtered_notifications_banner.pending_requests": "Van {count, plural, =0 {niemand} one {een persoon} other {# personen}} die je mogelijk kent", "filtered_notifications_banner.title": "Gefilterde meldingen", "firehose.all": "Alles", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index e2a6ac9c26fe0e..6bd16f3cfd01b6 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -305,7 +305,6 @@ "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny", "filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.title.status": "Filtrer eit innlegg", - "filter_warning.matches_filter": "Passar med filteret «{title}»", "filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner", "filtered_notifications_banner.title": "Filtrerte varslingar", "firehose.all": "Alle", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index b709fbea5e21a6..9a5f37979701ad 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -301,7 +301,6 @@ "filter_modal.select_filter.subtitle": "Bruk en eksisterende kategori eller opprett en ny", "filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.title.status": "Filtrer et innlegg", - "filter_warning.matches_filter": "Passer med filteret «{title}»", "filtered_notifications_banner.pending_requests": "Fra {count, plural, =0 {ingen} one {en person} other {# folk}} du kanskje kjenner", "filtered_notifications_banner.title": "Filtrerte varsler", "firehose.all": "Alt", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 21a1c365f02002..5867d6c1a0e0b4 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Przestać obserwować?", "content_warning.hide": "Ukryj wpis", "content_warning.show": "Pokaż mimo to", + "content_warning.show_more": "Rozwiń", "conversation.delete": "Usuń konwersację", "conversation.mark_as_read": "Oznacz jako przeczytane", "conversation.open": "Zobacz konwersację", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową", "filter_modal.select_filter.title": "Filtruj ten wpis", "filter_modal.title.status": "Filtruj wpis", - "filter_warning.matches_filter": "Pasuje do filtra \"{title}\"", + "filter_warning.matches_filter": "Pasuje do filtra \"{title}\"", "filtered_notifications_banner.pending_requests": "Od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}", "filtered_notifications_banner.title": "Powiadomienia filtrowane", "firehose.all": "Wszystko", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index f5b6481a837e36..28c6a07e019191 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Deixar de seguir o usuário?", "content_warning.hide": "Ocultar post", "content_warning.show": "Mostrar mesmo assim", + "content_warning.show_more": "Mostrar mais", "conversation.delete": "Excluir conversa", "conversation.mark_as_read": "Marcar como lida", "conversation.open": "Ver conversa", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Use uma categoria existente ou crie uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", - "filter_warning.matches_filter": "Correspondente ao filtro “{title}”", + "filter_warning.matches_filter": "Corresponder filtro “{title}”", "filtered_notifications_banner.pending_requests": "Por {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça", "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Tudo", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index fe18444ce10dc4..a4f2e274013f1a 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -301,7 +301,6 @@ "filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", - "filter_warning.matches_filter": "Corresponde ao filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que pode conhecer", "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Todas", @@ -773,7 +772,7 @@ "status.bookmark": "Guardar nos marcadores", "status.cancel_reblog_private": "Deixar de reforçar", "status.cannot_reblog": "Não é possível partilhar esta publicação", - "status.continued_thread": "Continuação da conserva", + "status.continued_thread": "Continuação da conversa", "status.copy": "Copiar hiperligação para a publicação", "status.delete": "Eliminar", "status.detailed_status": "Vista pormenorizada da conversa", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 46463be76f5f4b..2a985a1f848221 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -36,7 +36,7 @@ "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.followers_counter": "{count, plural, one {{counter} подписчик} few {{counter} подписчика} other {{counter} подписчиков}}", "account.following": "Подписки", - "account.following_counter": "{count, plural, one {{counter} последующий} other {{counter} последующие}}", + "account.following_counter": "{count, plural, one {# подписка} many {# подписок} other {# подписки}}", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.go_to_profile": "Перейти к профилю", "account.hide_reblogs": "Скрыть продвижения от @{name}", @@ -303,8 +303,7 @@ "filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую", "filter_modal.select_filter.title": "Фильтровать этот пост", "filter_modal.title.status": "Фильтровать пост", - "filter_warning.matches_filter": "Соответствует фильтру \"{title}\"", - "filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни один} one {один человек} other {# люди}}", + "filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни одного человека} one {одного человека} other {# человек}}", "filtered_notifications_banner.title": "Отфильтрованные уведомления", "firehose.all": "Все", "firehose.local": "Текущий сервер", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index ffca0914e580a6..a1bcdb9ff9fd0c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -155,6 +155,7 @@ "compose_form.poll.duration": "Trvanie ankety", "compose_form.poll.multiple": "Viacero možností", "compose_form.poll.option_placeholder": "Možnosť {number}", + "compose_form.poll.single": "Jediná voľba", "compose_form.poll.switch_to_multiple": "Zmeniť anketu a povoliť viaceré možnosti", "compose_form.poll.switch_to_single": "Zmeniť anketu na jediný povolený výber", "compose_form.poll.type": "Typ", @@ -290,7 +291,6 @@ "filter_modal.select_filter.subtitle": "Použite existujúcu kategóriu alebo vytvorte novú", "filter_modal.select_filter.title": "Filtrovanie tohto príspevku", "filter_modal.title.status": "Filtrovanie príspevku", - "filter_warning.matches_filter": "Zhody triedenia “{title}”", "filtered_notifications_banner.title": "Filtrované oznámenia", "firehose.all": "Všetko", "firehose.local": "Tento server", @@ -404,6 +404,7 @@ "limited_account_hint.title": "Tento profil bol skrytý správcami servera {domain}.", "link_preview.author": "Autor: {name}", "link_preview.more_from_author": "Viac od {name}", + "link_preview.shares": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "lists.account.add": "Pridať do zoznamu", "lists.account.remove": "Odstrániť zo zoznamu", "lists.delete": "Vymazať zoznam", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index e38ea796f60d02..c0199d00783ca6 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Të ndalet ndjekja e përdoruesit?", "content_warning.hide": "Fshihe postimin", "content_warning.show": "Shfaqe, sido qoftë", + "content_warning.show_more": "Shfaq më tepër", "conversation.delete": "Fshije bisedën", "conversation.mark_as_read": "Vëri shenjë si të lexuar", "conversation.open": "Shfaq bisedën", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.title.status": "Filtroni një postim", - "filter_warning.matches_filter": "Ka përkim me filtrin “{title}”", + "filter_warning.matches_filter": "Ka përkim me filtrin “{title}”", "filtered_notifications_banner.pending_requests": "Nga {count, plural, =0 {askush} one {një person} other {# vetë}} që mund të njihni", "filtered_notifications_banner.title": "Njoftime të filtruar", "firehose.all": "Krejt", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index d9d4da4ad0a8c7..eae02649a179b6 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -22,7 +22,7 @@ "account.cancel_follow_request": "Återkalla din begäran om att få följa", "account.copy": "Kopiera länk till profil", "account.direct": "Nämn @{name} privat", - "account.disable_notifications": "Sluta notifiera mig när @{name} gör inlägg", + "account.disable_notifications": "Sluta meddela mig när @{name} skriver ett inlägg", "account.domain_blocked": "Domän blockerad", "account.edit_profile": "Redigera profil", "account.enable_notifications": "Notifiera mig när @{name} gör inlägg", @@ -44,7 +44,7 @@ "account.joined_short": "Gick med", "account.languages": "Ändra vilka språk du helst vill se i ditt flöde", "account.link_verified_on": "Ägarskap för denna länk kontrollerades den {date}", - "account.locked_info": "För detta konto har ägaren valt att manuellt godkänna vem som kan följa hen.", + "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa det.", "account.media": "Media", "account.mention": "Nämn @{name}", "account.moved_to": "{name} har indikerat att hen har ett nytt konto:", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Avfölj %s?", "content_warning.hide": "Dölj inlägg", "content_warning.show": "Visa ändå", + "content_warning.show_more": "Visa mer", "conversation.delete": "Radera konversation", "conversation.mark_as_read": "Markera som läst", "conversation.open": "Visa konversation", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny", "filter_modal.select_filter.title": "Filtrera detta inlägg", "filter_modal.title.status": "Filtrera ett inlägg", - "filter_warning.matches_filter": "Matchar filtret \"{title}\"", + "filter_warning.matches_filter": "Matchar filtret \"{title}\"", "filtered_notifications_banner.pending_requests": "Från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner", "filtered_notifications_banner.title": "Filtrerade aviseringar", "firehose.all": "Allt", @@ -508,6 +509,7 @@ "notification.favourite": "{name} favoritmarkerade ditt inlägg", "notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg", "notification.follow": "{name} följer dig", + "notification.follow.name_and_others": "{name} och {count, plural, one {# annan} other {# andra}} följer dig", "notification.follow_request": "{name} har begärt att följa dig", "notification.follow_request.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har bett att följa dig", "notification.label.mention": "Nämn", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Snabbfilter", "notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.follow_request": "Ny följ-förfrågan:", + "notifications.column_settings.group": "Gruppera", "notifications.column_settings.mention": "Omnämningar:", "notifications.column_settings.poll": "Omröstningsresultat:", "notifications.column_settings.push": "Push-aviseringar", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d05840aa83e4ac..9e845c35e7d34d 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "ระยะเวลาการสำรวจความคิดเห็น", "compose_form.poll.multiple": "หลายตัวเลือก", "compose_form.poll.option_placeholder": "ตัวเลือก {number}", + "compose_form.poll.single": "ตัวเลือกเดียว", "compose_form.poll.switch_to_multiple": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตหลายตัวเลือก", "compose_form.poll.switch_to_single": "เปลี่ยนการสำรวจความคิดเห็นเป็นอนุญาตตัวเลือกเดียว", "compose_form.poll.type": "ลักษณะ", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "เลิกติดตามผู้ใช้?", "content_warning.hide": "ซ่อนโพสต์", "content_warning.show": "แสดงต่อไป", + "content_warning.show_more": "แสดงเพิ่มเติม", "conversation.delete": "ลบการสนทนา", "conversation.mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว", "conversation.open": "ดูการสนทนา", @@ -304,7 +306,7 @@ "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", "filter_modal.select_filter.title": "กรองโพสต์นี้", "filter_modal.title.status": "กรองโพสต์", - "filter_warning.matches_filter": "ตรงกับตัวกรอง “{title}”", + "filter_warning.matches_filter": "ตรงกับตัวกรอง “{title}”", "filtered_notifications_banner.pending_requests": "จาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก", "filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่", "firehose.all": "ทั้งหมด", @@ -507,6 +509,7 @@ "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite.name_and_others_with_link": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ชื่นชอบโพสต์ของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", + "notification.follow.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ติดตามคุณ", "notification.follow_request": "{name} ได้ขอติดตามคุณ", "notification.follow_request.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ขอติดตามคุณ", "notification.label.mention": "การกล่าวถึง", @@ -565,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน", "notifications.column_settings.follow": "ผู้ติดตามใหม่:", "notifications.column_settings.follow_request": "คำขอติดตามใหม่:", + "notifications.column_settings.group": "จัดกลุ่ม", "notifications.column_settings.mention": "การกล่าวถึง:", "notifications.column_settings.poll": "ผลลัพธ์การสำรวจความคิดเห็น:", "notifications.column_settings.push": "การแจ้งเตือนแบบผลัก", @@ -851,6 +855,11 @@ "upload_error.poll": "ไม่อนุญาตการอัปโหลดไฟล์โดยมีการสำรวจความคิดเห็น", "upload_form.audio_description": "อธิบายสำหรับผู้ที่สูญเสียการได้ยิน", "upload_form.description": "อธิบายสำหรับผู้คนที่พิการทางการมองเห็นหรือมีสายตาเลือนราง", + "upload_form.drag_and_drop.instructions": "หากต้องการเลือกไฟล์สื่อ ให้กดปุ่มที Space หรือ Enter บนแป้นพิมพ์ เมื่อเลือกไฟล์ได้แล้ว ก็สามารถใช้ปุ่มลูกศรเพื่อเลื่อนไฟล์ไปในทิศทางที่ต้องการได้ เมื่อต้องการวางไฟล์ในตำแหน่งใหม่ ให้กดปุ่ม Space หรือ Enter ดูอีกครั้ง หรือหากต้องการยกเลิกการเลือก ให้กดปุ่ม Esc ได้", + "upload_form.drag_and_drop.on_drag_cancel": "การลากไฟล์นั้นหยุดชะงัก ไฟล์ที่กำลังแนบมาถูกยกเลิก {item} ได้ถูกลบทิ้งแล้ว", + "upload_form.drag_and_drop.on_drag_end": "ไฟล์แนบ {item} ได้ถูกยกเลิกแล้ว", + "upload_form.drag_and_drop.on_drag_over": "ไฟล์แนบ {item} ได้ถูกย้ายไปแล้ว", + "upload_form.drag_and_drop.on_drag_start": "ได้รับไฟล์แนบเรียบร้อยแล้ว {item}.", "upload_form.edit": "แก้ไข", "upload_form.thumbnail": "เปลี่ยนภาพขนาดย่อ", "upload_form.video_description": "อธิบายสำหรับผู้คนที่พิการทางการได้ยิน ได้ยินไม่ชัด พิการทางการมองเห็น หรือมีสายตาเลือนราง", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index dae573370a637f..fbbe76b431ecb1 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Kullanıcıyı takipten çık?", "content_warning.hide": "Gönderiyi gizle", "content_warning.show": "Yine de göster", + "content_warning.show_more": "Daha fazla göster", "conversation.delete": "Sohbeti sil", "conversation.mark_as_read": "Okundu olarak işaretle", "conversation.open": "Sohbeti görüntüle", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur", "filter_modal.select_filter.title": "Bu gönderiyi süzgeçle", "filter_modal.title.status": "Bir gönderi süzgeçle", - "filter_warning.matches_filter": "“{title}” filtresiyle eşleşiyor", + "filter_warning.matches_filter": "“{title}” filtresiyle eşleşiyor", "filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}}", "filtered_notifications_banner.title": "Filtrelenmiş bildirimler", "firehose.all": "Tümü", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 66392afd79fcb3..9afa5816aad719 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Тривалість опитування", "compose_form.poll.multiple": "Кілька варіантів", "compose_form.poll.option_placeholder": "Варіант {number}", + "compose_form.poll.single": "Один вибір", "compose_form.poll.switch_to_multiple": "Дозволити вибір декількох відповідей", "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді", "compose_form.poll.type": "Стиль", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Відписатися від користувача?", "content_warning.hide": "Сховати допис", "content_warning.show": "Усе одно показати", + "content_warning.show_more": "Показати більше", "conversation.delete": "Видалити бесіду", "conversation.mark_as_read": "Позначити як прочитане", "conversation.open": "Переглянути бесіду", @@ -304,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову", "filter_modal.select_filter.title": "Фільтрувати цей допис", "filter_modal.title.status": "Фільтрувати допис", - "filter_warning.matches_filter": "Збігається з фільтром “{title}”", + "filter_warning.matches_filter": "Збігається з фільтром “{title}”", "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати", "filtered_notifications_banner.title": "Відфільтровані сповіщення", "firehose.all": "Всі", @@ -507,6 +509,7 @@ "notification.favourite": "Ваш допис сподобався {name}", "notification.favourite.name_and_others_with_link": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} вподобали ваш допис", "notification.follow": "{name} підписалися на вас", + "notification.follow.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} стежать за вами", "notification.follow_request": "{name} відправили запит на підписку", "notification.follow_request.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} надсилають вам запит на стеження", "notification.label.mention": "Згадка", @@ -565,7 +568,7 @@ "notifications.column_settings.filter_bar.category": "Панель швидкого фільтра", "notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.follow_request": "Нові запити на підписку:", - "notifications.column_settings.group": "Група", + "notifications.column_settings.group": "Групувати", "notifications.column_settings.mention": "Згадки:", "notifications.column_settings.poll": "Результати опитування:", "notifications.column_settings.push": "Push-сповіщення", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 1daeada1a28986..0fcd3e43dd3711 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Bỏ theo dõi", "content_warning.hide": "Ẩn lại", "content_warning.show": "Nhấn để xem", + "content_warning.show_more": "Hiện thêm", "conversation.delete": "Xóa tin nhắn này", "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới", "filter_modal.select_filter.title": "Lọc tút này", "filter_modal.title.status": "Lọc một tút", - "filter_warning.matches_filter": "Khớp bộ lọc “{title}”", + "filter_warning.matches_filter": "Khớp bộ lọc “{title}”", "filtered_notifications_banner.pending_requests": "Từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết", "filtered_notifications_banner.title": "Thông báo đã lọc", "firehose.all": "Toàn bộ", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 3b1e6b813de9e0..f8da5933ae506c 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "是否取消关注用户?", "content_warning.hide": "隐藏嘟文", "content_warning.show": "仍然显示", + "content_warning.show_more": "显示更多", "conversation.delete": "删除对话", "conversation.mark_as_read": "标记为已读", "conversation.open": "查看对话", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别", "filter_modal.select_filter.title": "过滤此嘟文", "filter_modal.title.status": "过滤一条嘟文", - "filter_warning.matches_filter": "命中过滤规则 “{title}”", + "filter_warning.matches_filter": "命中过滤规则 “{title}”", "filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}", "filtered_notifications_banner.title": "通知(已过滤)", "firehose.all": "全部", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 62a43fa7e4b723..8acd6df078ebb6 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -11,6 +11,7 @@ "about.not_available": "本伺服器尚未提供這資訊。", "about.powered_by": "由 {mastodon} 提供之去中心化社交媒體", "about.rules": "伺服器規則", + "account.account_note_header": "個人筆記", "account.add_or_remove_from_list": "從列表中新增或移除", "account.badges.bot": "機械人", "account.badges.group": "群組", @@ -33,6 +34,7 @@ "account.follow_back": "追蹤對方", "account.followers": "追蹤者", "account.followers.empty": "尚未有人追蹤這位使用者。", + "account.followers_counter": "{count, plural, other {{counter} 個追蹤者}}", "account.following": "正在追蹤", "account.follows.empty": "這位使用者尚未追蹤任何人。", "account.go_to_profile": "前往個人檔案", @@ -81,6 +83,7 @@ "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生意外錯誤。", "alert.unexpected.title": "失敗!", + "alt_text_badge.title": "替代文字", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未處理)", "audio.hide": "隱藏音訊", @@ -151,6 +154,7 @@ "compose_form.poll.duration": "投票期限", "compose_form.poll.multiple": "多選", "compose_form.poll.option_placeholder": "選項 {number}", + "compose_form.poll.single": "單一選擇", "compose_form.poll.switch_to_multiple": "變更投票為允許多個選項", "compose_form.poll.switch_to_single": "變更投票為限定單一選項", "compose_form.poll.type": "風格", @@ -168,6 +172,7 @@ "confirmations.delete.title": "刪除帖文?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", + "confirmations.delete_list.title": "刪除列表?", "confirmations.discard_edit_media.confirm": "捨棄", "confirmations.discard_edit_media.message": "您在媒體描述或預覽有尚未儲存的變更。確定要捨棄它們嗎?", "confirmations.edit.confirm": "編輯", @@ -182,6 +187,9 @@ "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消追蹤", "confirmations.unfollow.message": "真的不要繼續追蹤 {name} 了嗎?", + "confirmations.unfollow.title": "取消追蹤使用者?", + "content_warning.hide": "隱藏嘟文", + "content_warning.show": "仍要顯示", "conversation.delete": "刪除對話", "conversation.mark_as_read": "標為已讀", "conversation.open": "檢視對話", @@ -343,6 +351,7 @@ "home.pending_critical_update.link": "查看更新", "home.pending_critical_update.title": "有重要的安全更新!", "home.show_announcements": "顯示公告", + "ignore_notifications_modal.ignore": "忽略推播通知", "interaction_modal.description.favourite": "有了 Mastodon 的帳號,你便可以把這篇帖文加入最愛,讓作者知道你欣賞他的作品,並可以稍後再閱讀。", "interaction_modal.description.follow": "在 Mastodon 上有個帳號的話,您可以追蹤 {name} 以於首頁時間軸接收他們的帖文。", "interaction_modal.description.reblog": "在 Mastodon 上有個帳號的話,您可以向自己的追縱者們轉發此帖文。", @@ -417,6 +426,7 @@ "lists.subheading": "列表", "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "載入中…", + "media_gallery.hide": "隱藏", "moved_to_account_banner.text": "您的帳號 {disabledAccount} 目前已停用,因為您已搬家至 {movedToAccount}。", "mute_modal.hide_from_notifications": "隱藏通知", "mute_modal.hide_options": "隱藏選項", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 388e09fc98ac03..8903573dec3e32 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -1,7 +1,7 @@ { "about.blocks": "被限制的伺服器", "about.contact": "聯絡我們:", - "about.disclaimer": "Mastodon 是一個自由的開源軟體,是 Mastodon gGmbH 的註冊商標。", + "about.disclaimer": "Mastodon 是一個自由的開源軟體,是 Mastodon gGmbH 之註冊商標。", "about.domain_blocks.no_reason_available": "無法存取的原因", "about.domain_blocks.preamble": "Mastodon 基本上允許您瀏覽聯邦宇宙中任何伺服器的內容並與使用者互動。以下是在本伺服器上設定的例外。", "about.domain_blocks.silenced.explanation": "一般來說您不會看到來自這個伺服器的個人檔案和內容,除非您明確搜尋或主動跟隨對方。", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "是否取消跟隨該使用者?", "content_warning.hide": "隱藏嘟文", "content_warning.show": "仍要顯示", + "content_warning.show_more": "顯示更多", "conversation.delete": "刪除對話", "conversation.mark_as_read": "標記為已讀", "conversation.open": "檢視對話", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "使用既有的類別或是新增", "filter_modal.select_filter.title": "過濾此嘟文", "filter_modal.title.status": "過濾一則嘟文", - "filter_warning.matches_filter": "匹配過濾器「{title}」", + "filter_warning.matches_filter": "符合過濾器「{title}」", "filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}}", "filtered_notifications_banner.title": "已過濾之推播通知", "firehose.all": "全部", @@ -396,9 +397,9 @@ "interaction_modal.title.follow": "跟隨 {name}", "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文", "interaction_modal.title.reply": "回覆 {name} 的嘟文", - "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", - "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", - "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", + "intervals.full.days": "{number, plural, other {# 天}}", + "intervals.full.hours": "{number, plural, other {# 小時}}", + "intervals.full.minutes": "{number, plural, other {# 分鐘}}", "keyboard_shortcuts.back": "上一頁", "keyboard_shortcuts.blocked": "開啟「封鎖使用者」列表", "keyboard_shortcuts.boost": "轉嘟", @@ -457,7 +458,7 @@ "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您跟隨之使用者", "lists.subheading": "您的列表", - "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", + "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "正在載入...", "media_gallery.hide": "隱藏", "moved_to_account_banner.text": "您的帳號 {disabledAccount} 目前已停用,因為您已搬家至 {movedToAccount}。", @@ -499,8 +500,8 @@ "navigation_bar.security": "安全性", "not_signed_in_indicator.not_signed_in": "您需要登入才能存取此資源。", "notification.admin.report": "{name} 已檢舉 {target}", - "notification.admin.report_account": "{name} 已檢舉來自 {target} 關於 {category} 之 {count, plural, other {# 則嘟文}} ", - "notification.admin.report_account_other": "{name} 已檢舉來自 {target} 之 {count, plural, other {# 則嘟文}} ", + "notification.admin.report_account": "{name} 已檢舉來自 {target} 關於 {category} 之 {count, plural, other {# 則嘟文}}", + "notification.admin.report_account_other": "{name} 已檢舉來自 {target} 之 {count, plural, other {# 則嘟文}}", "notification.admin.report_statuses": "{name} 已檢舉 {target} 關於 {category}", "notification.admin.report_statuses_other": "{name} 已檢舉 {target}", "notification.admin.sign_up": "{name} 已經註冊", @@ -655,11 +656,11 @@ "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.reveal": "檢視結果", - "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", - "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", + "poll.total_people": "{count, plural, other {# 個人}}", + "poll.total_votes": "{count, plural, other {# 張票}}", "poll.vote": "投票", "poll.voted": "您已對此問題投票", - "poll.votes": "{votes, plural, one {# 張票} other {# 張票}}", + "poll.votes": "{votes, plural, other {# 張票}}", "poll_button.add_poll": "新增投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整嘟文隱私狀態", @@ -680,10 +681,10 @@ "regeneration_indicator.sublabel": "您的首頁時間軸正在準備中!", "relative_time.days": "{number} 天", "relative_time.full.days": "{number, plural, other {# 天}}前", - "relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前", + "relative_time.full.hours": "{number, plural, other {# 小時}}前", "relative_time.full.just_now": "剛剛", - "relative_time.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}前", - "relative_time.full.seconds": "{number, plural, one {# 秒} other {# 秒}}前", + "relative_time.full.minutes": "{number, plural, other {# 分鐘}}前", + "relative_time.full.seconds": "{number, plural, other {# 秒}}前", "relative_time.hours": "{number} 小時前", "relative_time.just_now": "剛剛", "relative_time.minutes": "{number} 分鐘前", @@ -793,7 +794,7 @@ "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "取得嵌入程式碼", "status.favourite": "最愛", - "status.favourites": "{count, plural, other {# 則最愛}}", + "status.favourites": "{count, plural, other {則最愛}}", "status.filter": "過濾此嘟文", "status.history.created": "{name} 於 {date} 建立", "status.history.edited": "{name} 於 {date} 修改", @@ -812,7 +813,7 @@ "status.reblog": "轉嘟", "status.reblog_private": "依照原嘟可見性轉嘟", "status.reblogged_by": "{name} 已轉嘟", - "status.reblogs": "{count, plural, other {# 則轉嘟}}", + "status.reblogs": "{count, plural, other {則轉嘟}}", "status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。", "status.redraft": "刪除並重新編輯", "status.remove_bookmark": "移除書籤", @@ -837,11 +838,11 @@ "subscribed_languages.target": "變更 {target} 的訂閱語言", "tabs_bar.home": "首頁", "tabs_bar.notifications": "通知", - "time_remaining.days": "剩餘 {number, plural, one {# 天} other {# 天}}", - "time_remaining.hours": "剩餘 {number, plural, one {# 小時} other {# 小時}}", - "time_remaining.minutes": "剩餘 {number, plural, one {# 分鐘} other {# 分鐘}}", + "time_remaining.days": "剩餘 {number, plural, other {# 天}}", + "time_remaining.hours": "剩餘{number, plural, other {# 小時}}", + "time_remaining.minutes": "剩餘{number, plural, other {# 分鐘}}", "time_remaining.moments": "剩餘時間", - "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", + "time_remaining.seconds": "剩餘{number, plural, other {# 秒}}", "trends.counter_by_accounts": "{count, plural, one {{counter} 人} other {{counter} 人}}於過去 {days, plural, one {日} other {{days} 日}} 之間", "trends.trending_now": "現正熱門趨勢", "ui.beforeunload": "如果離開 Mastodon,您的草稿將會不見。", diff --git a/config/locales/activerecord.fa.yml b/config/locales/activerecord.fa.yml index 3d1e8012bfc305..81e54ed3a95f39 100644 --- a/config/locales/activerecord.fa.yml +++ b/config/locales/activerecord.fa.yml @@ -15,6 +15,12 @@ fa: user/invite_request: text: دلیل errors: + attributes: + domain: + invalid: نام دامنهٔ معتبری نیست + messages: + invalid_domain_on_line: "%{value} نام دامنهٔ معتبری نیست" + too_many_lines: بیش از کران %{limit} خط است models: account: attributes: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 88514ab5e2824f..754fa015504295 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -53,12 +53,14 @@ eo: subtitle: Dupaŝa aŭtentigo por via konto estas malŝaltita. title: 2FA estas malŝaltita two_factor_enabled: + explanation: Tokeno generita de la parigita TOTP-aplikaĵo estos necesa por ensaluti. subject: 'Mastodon: Dufaktora aŭtentigo ebligita' subtitle: Dupaŝa aŭtentigo por via konto estas ŝaltita. title: 2FA aktivigita two_factor_recovery_codes_changed: explanation: La antaŭaj reakiraj kodoj estis nuligitaj kaj novaj estis generitaj. subject: 'Mastodon: Reakiraj kodoj de dufaktora aŭtentigo rekreitaj' + subtitle: La antaŭaj restarigaj kodoj estis malvalidigitaj kaj novaj estis generitaj. title: Reakiraj kodoj de 2FA estas ŝanĝitaj unlock_instructions: subject: 'Mastodon: Instrukcioj por malŝlosi' diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index 12e120f8befa67..36a5ed19746b13 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -60,6 +60,7 @@ eo: error: title: Eraro okazis new: + prompt_html: "%{client_name} ŝatus permeson aliri vian konton. Nur aprobu ĉi tiun peton se vi rekonas kaj fidas ĉi tiun fonton." review_permissions: Revizu permesojn title: Rajtigo bezonata show: @@ -82,6 +83,7 @@ eo: access_denied: La posedanto de la rimedo aŭ de la rajtiga servilo rifuzis vian peton. credential_flow_not_configured: La sendado de la identigiloj de la posedanto de la rimedo malsukcesis ĉar Doorkeeper.configure.resource_owner_from_credentials ne estis agordita. invalid_client: Klienta aŭtentigo malsukcesa pro nekonata kliento, neniu klienta aŭtentigo inkluzivita, aŭ nesubtenata aŭtentiga metodo. + invalid_code_challenge_method: La koda defia metodo devas esti S256, ebenaĵo estas nesubtenata. invalid_grant: La rajtiga konsento ne estas valida, ne plu estas valida, estis forigita, ne kongruas kun la plusenda URI uzita en la aŭtentiga peto, aŭ estis sendita al alia kliento. invalid_redirect_uri: La plusenda URI uzita ne estas valida. invalid_request: @@ -134,6 +136,7 @@ eo: media: Plurmediaj aldonaĵoj mutes: Silentigitaj notifications: Sciigoj + profile: Via Mastodon-profilo push: Puŝsciigoj reports: Raportoj search: Serĉi @@ -164,6 +167,7 @@ eo: admin:write:reports: plenumi agojn de kontrolo sur signaloj crypto: uzi fin-al-finan ĉifradon follow: ŝanĝi rilatojn al aliaj kontoj + profile: legu nur la profilinformojn de via konto push: ricevi viajn puŝ-sciigojn read: legi ĉiujn datumojn de via konto read:accounts: vidi la informojn de la kontoj diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 55e288a9d67aa4..af892d79faae51 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -60,6 +60,7 @@ lv: error: title: Radās kļūda new: + prompt_html: "%{client_name} vēlas atļauju piekļūt Tavam kontam. Apstiprini šo pieprasījumu tikai tad, ja atpazīsti un uzticies šim avotam!" review_permissions: Pārskatīt atļaujas title: Nepieciešama autorizācija show: @@ -119,9 +120,9 @@ lv: write: Tikai rakstīšanas piekļuve title: accounts: Konti - admin/accounts: Kontu administrēšana + admin/accounts: Kontu pārvaldīšana admin/all: Visas administrēšanas funkcijas - admin/reports: Ziņojumu administrēšana + admin/reports: Ziņojumu pārvaldīšana all: Pilna piekļuve tavam Mastodon kontam blocks: Bloķētie bookmarks: Grāmatzīmes @@ -157,13 +158,13 @@ lv: admin:read:ip_blocks: lasīt sensitīvu informāciju par visiem IP blokiem admin:read:reports: lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots admin:write: modificēt visus datus uz servera - admin:write:accounts: veikt moderācijas darbības kontos - admin:write:canonical_email_blocks: veikt regulēšanas darbības kanoniskajos e-pasta blokos - admin:write:domain_allows: veikt moderēšanas darbības domēna atļaujā - admin:write:domain_blocks: veikt moderēšanas darbības domēna blokos - admin:write:email_domain_blocks: veikt moderēšanas darbības e-pasta domēna blokos - admin:write:ip_blocks: veikt moderēšanas darbības IP blokos - admin:write:reports: veikt moderācijas darbības pārskatos + admin:write:accounts: veikt satura pārraudzības darbības kontos + admin:write:canonical_email_blocks: veikt satura pārraudzības darbības kanoniskajos e-pasta blokos + admin:write:domain_allows: veikt satura pārraudzības darbības domēna atļaujā + admin:write:domain_blocks: veikt satura pārraudzības darbības domēna blokos + admin:write:email_domain_blocks: veikt satura pārraudzības darbības e-pasta domēna blokos + admin:write:ip_blocks: veikt satura pārraudzības darbības IP blokos + admin:write:reports: veikt satura pārraudzības darbības pārskatos crypto: lieto pilnīgu šifrēšanu follow: mainīt konta attiecības profile: lasīt tikai Tava konta profila informāciju diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index e7ed0ba8a3bdb5..2dfc72cd6ccc9b 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -60,6 +60,7 @@ th: error: title: เกิดข้อผิดพลาด new: + prompt_html: "%{client_name} ร้องขอสิทธิ์ในการเข้าถึงข้อมูลในบัญชีของคุณ อนุมัติคำขอนี้ได้ก็ต่อเมื่อคุณมั่นใจและเชื่อถือในแหล่งที่มาของข้อมูลนี้" review_permissions: ตรวจทานสิทธิอนุญาต title: ต้องการการอนุญาต show: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index a27ba1a5484448..79bfdfbdbf7050 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1166,11 +1166,11 @@ es-AR: use_security_key: Usar la llave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon." - instructions: 'Asegúrate de que este código está en el HTML de tu artículo:' + hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon." + instructions: 'Asegurate de que este código está en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} - then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. + then_instructions: Luego, agregá el nombre de dominio de la publicación en el campo de abajo. title: Atribución del autor challenge: confirm: Continuar diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 3083bc13cbcdd9..603cfe8de18491 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -190,9 +190,11 @@ fa: create_user_role: ایجاد نقش demote_user: تنزل کاربر destroy_announcement: حذف اعلامیه + destroy_canonical_email_block: حذف انسداد رایانامه destroy_custom_emoji: حذف اموجی سفارشی destroy_domain_allow: حذف اجازهٔ دامنه destroy_domain_block: حذف انسداد دامنه + destroy_email_domain_block: حذف انسداد دامنهٔ رایانامه destroy_instance: پاکسازی دامنه destroy_ip_block: حذف قاعدهٔ آی‌پی destroy_status: حذف وضعیت @@ -200,8 +202,10 @@ fa: destroy_user_role: نابودی نقش disable_2fa_user: از کار انداختن ورود دومرحله‌ای disable_custom_emoji: از کار انداختن اموجی سفارشی + disable_sign_in_token_auth_user: از کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر disable_user: از کار انداختن کاربر enable_custom_emoji: به کار انداختن اموجی سفارشی + enable_sign_in_token_auth_user: به کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر enable_user: به کار انداختن کاربر memorialize_account: یادسپاری حساب promote_user: ترفیع کاربر @@ -231,20 +235,26 @@ fa: approve_appeal_html: "%{name} درخواست تجدیدنظر تصمیم مدیر را از %{target} پذیرفت" approve_user_html: "%{name} ثبت نام %{target} را تایید کرد" assigned_to_self_report_html: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت" + change_email_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را عوض کرد" change_role_user_html: "%{name} نقش %{target} را تغییر داد" + confirm_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را تأیید کرد" create_account_warning_html: "%{name} هشداری برای %{target} فرستاد" create_announcement_html: "%{name} اعلامیه‌ای جدید ایجاد کرد %{target}" + create_canonical_email_block_html: "%{name} رایانامه با درهم‌ریزی %{target} را مسدود کرد" create_custom_emoji_html: "%{name} اموجی تازهٔ %{target} را بارگذاشت" create_domain_allow_html: "%{name} دامنهٔ %{target} را مجاز کرد" create_domain_block_html: "%{name} دامنهٔ %{target} را مسدود کرد" + create_email_domain_block_html: "%{name} دامنهٔ رایانامهٔ %{target} را مسدود کرد" create_ip_block_html: "%{name} برای آی‌پی %{target} قانونی ایجاد کرد" create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد" create_user_role_html: "%{name} نقش %{target} را ایجاد کرد" demote_user_html: "%{name} کاربر %{target} را تنزل داد" destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد" + destroy_canonical_email_block_html: "%{name} رایانامه با درهم‌ریزی %{target} را نامسدود کرد" destroy_custom_emoji_html: "%{name} شکلک %{target} را حذف کرد" destroy_domain_allow_html: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت" destroy_domain_block_html: "%{name} انسداد دامنهٔ %{target} را رفع کرد" + destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت" destroy_instance_html: "%{name} دامنه %{target} را پاکسازی کرد" destroy_ip_block_html: "%{name} قاعدهٔ آی‌پی %{target} را حذف کرد" destroy_status_html: "%{name} وضعیت %{target} را برداشت" @@ -252,8 +262,10 @@ fa: destroy_user_role_html: "%{name} نقش %{target} را حذف کرد" disable_2fa_user_html: "%{name} ضرورت ورود دو مرحله‌ای را برای کاربر %{target} غیر فعال کرد" disable_custom_emoji_html: "%{name} شکلک %{target} را غیرفعال کرد" + disable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} غیرفعال کرد" disable_user_html: "%{name} ورود را برای کاربر %{target} غیرفعال کرد" enable_custom_emoji_html: "%{name} شکلک %{target} را فعال کرد" + enable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} فعال کرد" enable_user_html: "%{name} ورود را برای کاربر %{target} فعال کرد" memorialize_account_html: "%{name} حساب %{target} را تبدیل به صفحهٔ یادمان کرد" promote_user_html: "%{name} کاربر %{target} را ترفیع داد" @@ -478,6 +490,7 @@ fa: instance_followers_measure: پی‌گیرندگانمان در آن‌جا instance_follows_measure: پی‌گیرندگانشان در این‌جا instance_languages_dimension: زبان‌های برتر + instance_media_attachments_measure: پیوست‌های رسانه‌ای ذخیره شده instance_reports_measure: گزارش‌ها درباره‌شان instance_statuses_measure: فرسته‌های ذخیره شده delivery: @@ -565,6 +578,9 @@ fa: other_description_html: دیدن انتخاب های بیشتر برای کنترل رفتار حساب و سفارشی سازی ارتباط با حساب گزارش شده. resolve_description_html: هیچ کنشی علیه حساب گزارش شده انجام نخواهد شد. هیچ شکایتی ضبط نشده و گزارش بسته خواهد شد. add_to_report: افزودن بیش‌تر به گزارش + already_suspended_badges: + local: از پیش روی این کارساز معلّق شده + remote: از پیش روی کارسازشان معلّق شده are_you_sure: مطمئنید؟ assign_to_self: به عهدهٔ من بگذار assigned: مدیر عهده‌دار @@ -574,6 +590,7 @@ fa: comment: none: هیچ confirm: تأیید + confirm_action: تأیید کنش مدیریتی برای ‪@%{acct}‬ created_at: گزارش‌شده delete_and_resolve: حذف فرسته‌ها forwarded: هدایت شده @@ -594,6 +611,7 @@ fa: report: 'گزارش #%{id}' reported_account: حساب گزارش‌شده reported_by: گزارش از طرف + reported_with_application: گزارش شده با برنامه resolved: حل‌شده resolved_msg: گزارش با موفقیت حل شد! skip_to_actions: پرش به کنش‌ها @@ -665,6 +683,8 @@ fa: title: ظاهر branding: title: ویژندگی + content_retention: + danger_zone: منطقهٔ خطر default_noindex: title: درخواست خروج از اندیس‌گذاری پیش‌گزیدهٔ موتور جست‌وجو discovery: @@ -752,6 +772,9 @@ fa: message_html: هیچ قانون کارسازی تعریف نکرده‌اید. sidekiq_process_check: message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید + software_version_check: + action: دیدن به‌روز رسانی‌های موجود + message_html: به‌روز رسانی ماستودون موجود است. software_version_critical_check: action: مشاهده به‌روزرسانی‌های موجود message_html: یک به‌روزرسانی حیاتی ماستودون موجود است، لطفا در اسرع وقت به‌روزرسانی کنید. @@ -775,16 +798,27 @@ fa: trendable: قابل داغ شدن unreviewed: بررسی نشده usable: قابل استفاده + name: نام + newest: جدیدترین + oldest: قدیمی‌ترین + open: دیدن عمومی + reset: بازنشانی review: وضعیت بازبینی + search: جست‌وجو + title: برچسب‌ها updated_msg: تنظیمات برچسب‌ها با موفقیت به‌روز شد title: مدیریت trends: allow: اجازه approved: تأیید شده + confirm_allow: مطمئنید که می‌خواهید برچسب‌های گزیده را مجاز کنید؟ + confirm_disallow: مطمئنید که می‌خواهید برچسب‌های گزیده را ممنوع کنید؟ disallow: اجازه ندادن links: allow: اجازه به پیوند allow_provider: اجازه به ناشر + confirm_allow: مطمئنید که می‌خواهید پیوندهای گزیده را مجاز کنید؟ + confirm_allow_provider: مطمئنید که می‌خواهید فراهم‌کننده‌های گزیده را مجاز کنید؟ confirm_disallow: مطمئنید که می خواهید پیوندهای گزیده را ممنوع کنید؟ confirm_disallow_provider: مطمئنید که می خواهید فراهم کننده‌های گزیده را ممنوع کنید؟ disallow: اجازه ندادن به پیوند @@ -792,18 +826,32 @@ fa: no_link_selected: هیچ پیوندی تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند publishers: no_publisher_selected: هیچ ناشری تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند + shared_by_over_week: + one: هم‌رسانده به دست یک نفر در هفتهٔ گذشته + other: هم‌رسانده به دست %{count} نفر در هفتهٔ گذشته title: پیوندهای داغ + usage_comparison: امروز %{today} بار هم‌رسانی شده. در مقایسه با %{yesterday} بار دیروز not_allowed_to_trend: اجازهٔ داغ شدن ندارد + only_allowed: فقط مجازها pending_review: بازبینی منتظر preview_card_providers: + allowed: پیوندها از این ناشر می‌توانند داغ شوند + rejected: پیوندها از این ناشر داغ نخواهند شد title: ناشران rejected: رد شده statuses: allow: اجازه به فرسته allow_account: اجازه به نگارنده + confirm_allow: مطمئنید که می‌خواهید وضعیت‌های گزیده را مجاز کنید؟ + confirm_allow_account: مطمئنید که می‌خواهید حساب‌های گزیده را مجاز کنید؟ + confirm_disallow: مطمئنید که می‌خواهید وضعیت‌های گزیده را ممنوع کنید؟ + confirm_disallow_account: مطمئنید که می‌خواهید حساب‌های گزیده را ممنوع کنید؟ disallow: ممنوع کردن فرسته disallow_account: ممنوع کردن نگارنده no_status_selected: هیچ فرستهٔ داغی تغییری نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند + shared_by: + one: یک بار برگزیده یا هم‌رسانی شده + other: "%{friendly_count} بار برگزیده یا هم‌رسانی شده" title: فرسته‌های داغ tags: current_score: امتیاز کنونی %{score} @@ -812,8 +860,9 @@ fa: tag_languages_dimension: زبان‌های برتر tag_servers_dimension: کارسازهای برتر tag_servers_measure: کارسازهای گوناگون - tag_uses_measure: کل استفاده‌ّا + tag_uses_measure: کل استفاده‌ها listable: می‌تواند پیشنهاد شود + no_tag_selected: هیچ برچسبی تغییر نکرد زیرا هیچ‌کدام گزیده نبودند not_listable: پیشنهاد نخواهد شد not_usable: غیر قابل استفاده title: برچسب‌های پرطرفدار @@ -908,7 +957,9 @@ fa: title: بررسی های امنیتی confirmations: awaiting_review_title: ثبت‌نامتان دارد بررسی می‌شود + clicking_this_link: زدن این پیوند login_link: ورود + proceed_to_login_html: می‌توانید به %{login_link} ادامه دهید. welcome_title: خوش آمدید، %{name}! delete_account: پاک‌کردن حساب delete_account_html: اگر می‌خواهید حساب خود را پاک کنید، از این‌جا پیش بروید. از شما درخواست تأیید خواهد شد. @@ -930,6 +981,7 @@ fa: or_log_in_with: یا ورود به وسیلهٔ privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفته‌ام progress: + confirm: تأیید رایانامه details: جزئیات شما review: بررسی ما rules: پذیرش قوانین @@ -943,6 +995,7 @@ fa: rules: accept: پذیرفتن back: بازگشت + invited_by: 'با سپاس از دعوتی از این فرد دریافت کرده‌اید می‌توانید به %{domain} بپیوندید:' title_invited: شما دعوت شده اید. security: امنیت set_new_password: تعین گذرواژه جدید @@ -952,17 +1005,23 @@ fa: title: صندوق ورودیتان را بررسی کنید sign_in: title: ورود به %{domain} + sign_up: + title: بیایید روی %{domain} برپایتان کنیم. status: account_status: وضعیت حساب + confirming: منتظر کامل شدن تأیید رایانامه. functional: حسابتان کاملاً قابل استفاده است. + pending: درخواستتان منتظر بازبینی مسئولان است. ممکن است کمی طول بکشد. اگر درخواستتان پذیرفته شود رایانامه‌ای خواهید گرفت. redirecting_to: حساب شما غیرفعال است زیرا هم‌اکنون به %{acct} منتقل شده است. view_strikes: دیدن شکایت‌های گذشته از حسابتان too_fast: فرم با سرعت بسیار زیادی فرستاده شد، دوباره تلاش کنید. use_security_key: استفاده از کلید امنیتی author_attribution: example_title: متن نمونه + instructions: 'مطمئن شوید این کد در HTML مقاله‌تان وجود دارد:' more_from_html: بیش‌تر از %{name} s_blog: بلاگ %{name} + then_instructions: سپس نام دامنهٔ مقاله را در زمینهٔ زیر بیفزایید. title: اعتباردهی به نگارنده challenge: confirm: ادامه @@ -1000,6 +1059,9 @@ fa: before: 'پیش از ادامه،‌ لطفاً نکته‌های زیر را به دقت بخوانید:' caches: ممکن است محتواهایی که دیگر کارسازها ذخیره کرده‌اند، همچنان باقی بماند data_removal: نوشته‌ها و داده‌های شما برای همیشه پاک خواهند شد + email_change_html: می‌توانید بدون حذف حسابتان نشانی رایانامه‌تان را تغییر دهید + email_contact_html: اگر هنوز نرسیده، می‌توانید برای راهنمایی به %{email} رایانامه دهید + email_reconfirmation_html: اگر رایانامهٔ تأیید را نگرفته‌اید، می‌توانید دوباره درخواستش دهید irreversible: شما نخواهید توانست حساب خود را بازیابی یا فعال‌سازی کنید more_details_html: برای اطلاعات بیشتر سیاست رازداری را ببینید. username_available: نام کاربری شما دوباره در دسترس خواهد بود @@ -1092,8 +1154,10 @@ fa: deprecated_api_multiple_keywords: این پارامترها نمی‌توانند از این برنامه تغییر یابند؛ چرا که به بیش از یک کلیدواژهٔ پالایه اعمال می‌شود. از برنامه‌ای جدیدتر یا میانای وب استفاده کنید. invalid_context: زمینه‌ای موجود نیست یا نامعتبر است index: + contexts: پالایه‌ها در %{contexts} delete: پاک‌کردن empty: هیچ پالایه‌ای ندارید. + expires_in: در %{distance} منقضی می شود expires_on: در %{date} منقضی می شود keywords: one: "%{count} کلیدواژه" @@ -1116,6 +1180,9 @@ fa: title: فرسته‌های پالوده generic: all: همه + all_items_on_page_selected_html: + one: "%{count} مورد در این صفحه گزیده شده." + other: همهٔ %{count} مورد این صفحه گزیده شده‌اند. all_matching_items_selected_html: one: "%{count} مورد مطابق با جست‌وجویتان گزیده شده." other: "%{count} مورد مطابق با جست‌وجویتان گزیده شدند." @@ -1137,6 +1204,9 @@ fa: other: یک چیزی هنوز درست نیست! لطفاً %{count} خطای زیر را ببینید imports: errors: + empty: پروندهٔ خالی CSV + incompatible_type: ناسازگار با گونهٔ درون‌ریزی گزیده + invalid_csv_file: 'پروندهٔ CSV نامعتبر. خطا: %{error}' over_rows_processing_limit: دارای بیش از %{count} ردیف too_large: حجم فایل خیلی بزرگ است failures: شکست‌ها @@ -1214,7 +1284,15 @@ fa: title: تاریخچهٔ تأیید هویت mail_subscriptions: unsubscribe: + action: بله. لغو اشتراک complete: لغو اشتراک شد + emails: + notification_emails: + favourite: رایانامه‌های آگاهی برگزیدن + follow: رایانامه‌های آگاهی پی‌گیری + follow_request: رایانامه‌های درخواست پی‌گیری + mention: رایانامه‌های آگاهی اشاره + reblog: رایانامه‌های آگاهی تقویت title: لغو اشتراک media_attachments: validations: @@ -1295,6 +1373,7 @@ fa: update: subject: "%{name} فرسته‌ای را ویرایست" notifications: + administration_emails: آگاهی‌های رایانامه‌ای مدیر email_events: رویدادها برای آگاهی‌های رایانامه‌ای email_events_hint: 'گزینش رویدادهایی که می‌خواهید برایشان آگاهی دریافت کنید:' number: @@ -1352,12 +1431,16 @@ fa: errors: limit_reached: تجاوز از کران واکنش‌های مختلف unrecognized_emoji: شکلک شناخته‌شده‌ای نیست + redirects: + prompt: اگر به این پویند اطمینان دارید برای ادامه بزنید. + title: دارید %{instance} را ترک می‌کنید. relationships: activity: فعالیت حساب confirm_follow_selected_followers: آیا مطمئنید که می خواهید دنبال کننده های انتخابی را دنبال کنید؟ confirm_remove_selected_followers: آیا شما واقعا می خواهید دنبال کننده های انتخابی را حذف کنید؟ confirm_remove_selected_follows: آیا شما واقعا می خواهید دنبال شده های انتخابی را حذف کنید؟ dormant: غیرفعال + follow_failure: نتوانست برخی از حساب‌های گزیده را پی بگیرد. follow_selected_followers: پیگیری پیگیران انتخاب شده followers: پی‌گیران following: پی می‌گیرد @@ -1462,7 +1545,7 @@ fa: domain_block: تعلیق کارساز (%{target_name}) user_domain_block: "%{target_name} را مسدود کردید" lost_followers: پی‌گیرندگان از دست رفته - lost_follows: پی‌گرفته‌ّای از دست رفته + lost_follows: پی‌گرفته‌های از دست رفته preamble: وقتی دامنه‌ای را مسدود کرده یا ناظرانتان تصمیم به تعلیق کارسازی دوردست می‌گیرند، ممکن است پی‌گیران و پی‌گرفته‌هایتان را از دست بدهید. با این حال قادرید سیاهه‌هایی از ارتباط‌های قطع شده را برای بررسی و درون‌ریزی احتمالی روی کارسازی دیگر بار بگیرید. purged: اطّلاعات دربارهٔ این کارساز به دست مدیران کارسازتان پاک سازی شده. type: رویداد @@ -1571,16 +1654,23 @@ fa: webauthn: کلیدهای امنیتی user_mailer: appeal_approved: + action: تنظیمات حساب explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کرده‌اید، پذیرفته شده است. حساب شما بار دیگر در وضعیت خوبی قرار دارد. subject: درخواست تجدیدنظر شما در %{date} پذیرفته شد + subtitle: حسابتان دوباره در وضعیت مناسب است. title: درخواست تجدیدنظر پذیرفته شد appeal_rejected: explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کرده‌اید، رد شده است. subject: درخواست تجدیدنظر شما در %{date} رد شده است + subtitle: درخواست تجدیدنظرتان رد شد. title: درخواست تجدیدنظر رد شد backup_ready: + explanation: درخواست پشتیبانی کامل از حساب ماستودونتان کردید. + extra: اکنون آمادهٔ بارگیری است! subject: بایگانی شما آمادهٔ دریافت است title: گرفتن بایگانی + failed_2fa: + details: 'جزییات تلاش‌ها برای ورد:' suspicious_sign_in: change_password: تغییر گذرواژه‌تان details: 'جزییات ورود:' @@ -1592,8 +1682,11 @@ fa: spam: هرزنامه reason: 'دلیل:' subject: + delete_statuses: فرسته‌هایتان روی %{acct} برداشته شده‌اند disable: حساب %{acct} شما متوقف شده است + mark_statuses_as_sensitive: فرسته‌هایتان روی %{acct} به عنوان حسّاس علامت خورده‌اند none: هشدار برای %{acct} + sensitive: فرسته‌هایتان روی %{acct} از اکنون به عنوان حسّاس علامت خواهند خورد silence: حساب %{acct} شما محدود شده است suspend: حساب %{acct} شما معلق شده است title: @@ -1609,11 +1702,39 @@ fa: apps_ios_action: بارگیری روی فروشگاه کاره apps_step: بارگیری کارهٔ رسمیمان. apps_title: کاره‌های ماستودون + checklist_subtitle: 'بیایید روی این مرز اجتماعی جدید راهتان بیندازیم:' + checklist_title: سیاههٔ بررسی خوش‌آمد edit_profile_action: شخصی سازی + edit_profile_step: تقویت تعامل‌هایتان با داشتن نمایه‌ای جامع. + edit_profile_title: شخصی سازی نمایه‌تان explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند + feature_action: دانشتن بیش‌تر + feature_audience: ماستودون بدون حضور فرد میانی، فرصتی منحصربه‌فرد برای مدیریت مخاطبان ارائه می‌کند. ماستودونی که روی زیرساخت خودتان استقرار یافته باشد، می‌گذارد بدون بودن زیر واپایش کسی غیر از خودتان، دیگر کارسازهای برخط ماستودون را دنبال کرده و به دست آن‌ها دنبال شوید. + feature_audience_title: مخاطبان‌تان را با اطمینان بسازید + feature_control: شما بهتر از هر کسی دیگری می‌دونید که چه می‌خواهید ببینید. هیچ الگوریتم یا تبلیغی وقت شما را تلف نمی‌کند. تنها با یک حساب، هر کسی را روی هر کارساز ماستودون دیگری دنبال کرده و فرسته‌هایشان را به ترتیب زمانی دریافت کنید. گوشهٔ دنج اینترنتی خودتان را بیشتر شبیه خودتان کنید. + feature_control_title: کنترل خط زمانی‌تان را به دست بگیرید + feature_creativity: ماستودون از فرسته‌های تصویری، ویدئویی و شنیداری، توضیحات دسترس‌پذیری، نظرسنجی، هشدار محتوا، تصاویر نمایهٔ پویا، شکلک‌های سفارشی، کنترل برش تصاویر بندانگشتی و بسیاری موارد دیگر پشتیبانی می‌کند تا به شما برای ابزار کردن خود در فضای برخط کمک کند. چه بخواهید یک اثر هنری، موسیقی یا پادکست منتشر کنید، ماستودون در خدمت شماست. + feature_creativity_title: خلاقیت بی‌همتا + feature_moderation: ماستودن، تصمیم‌گیری را به شما باز می‌گرداند. هر کارساز قوانین و شرایط استفاده خاص خودش را وضع می‌کند که فقط به صورت محلی اعمال می‌شود و نه به صورت از بالا به پایین در سکوهای اجتماعی شرکتی. این موضوع باعث افزایش انعطاف در پاسخ‌گویی به نیازهای گروه‌های مختلف می‌شود. به کارسازی با قوانین مورد پسندتان بپیوندید، و یا نمونه خود را میزبانی کنید. + feature_moderation_title: نظارت به شکلی که باید باشد follow_action: پی‌گیری + follow_step: You curate your own feed. Lets fill it with interesting people. + follow_title: شخصی سازی خوراک خانگیتان + follows_subtitle: پی گرفتن حساب‌های شناخته شده + follows_title: افرادی برای پی‌گیری + follows_view_more: دیدن افرادی بیش‌تر برای پی‌گیری + hashtags_recent_count: + one: "%{people} نفر در ۲ روز اخیر" + other: "%{people} نفر در ۲ روز اخیر" + hashtags_subtitle: کشف گرایه‌ها در ۲ روز گذشته + hashtags_title: برچسب‌های داغ + hashtags_view_more: دیدن برچسب‌های داغ بیش‌تر post_action: ایجاد + post_step: سلام کردن به جهان با متن، عکس، ویدیو یا نظرسنجی. + post_title: ساخت نخستین نظرسنجیتان share_action: هم‌رسانی + share_step: بگذارید دوستانتان بدانند چگونه روی ماستودون بیابندتان. + share_title: هم‌رسانی نمایهٔ ماستودونتان sign_in_action: ورود subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! @@ -1622,6 +1743,8 @@ fa: go_to_sso_account_settings: به تنظیمات حساب فراهمگر هوبتتان بروید invalid_otp_token: کد ورود دومرحله‌ای نامعتبر است otp_lost_help_html: اگر شما دسترسی به هیچ‌کدامشان ندارید، باید با ایمیل %{email} تماس بگیرید + rate_limited: تلاش ّای هویت‌سنجی بیش از حد. لطفاً بعداً دوباره تلاش کنید. + seamless_external_login: با خدمتی خارجی وارد شده‌اید، برای همین تنظیمات رایانامه و گذرواژه در دسترس نیستند. signed_in_as: 'واردشده به نام:' verification: extra_instructions_html: نکته: پیوند روی پایگاه وبتان می‌تواند نامرئی باشد. بخش مهم rel="me" است که از جعل هویت روی پایگاه‌هایی با محتوای تولید شده به دست کاربر جلوگیری می‌کند. حتا می‌توانید به جای برچسب a از برچسب link در سرایند صفحه استفاده کنید؛ ولی HTML باید بدون اجرای جاوااسکریپت در دسترس باشد. diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 0657f827d1b293..5e5ecb238e3e6d 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1220,8 +1220,11 @@ ga: use_security_key: Úsáid eochair shlándála author_attribution: example_title: Téacs samplach + hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon. + instructions: 'Cinntigh go bhfuil an cód seo i HTML d''alt:' more_from_html: Tuilleadh ó %{name} s_blog: Blag %{name} + then_instructions: Ansin, cuir ainm fearainn an fhoilseacháin sa réimse thíos. title: Leithdháil an údair challenge: confirm: Lean ar aghaidh diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 4f18e3b4d4861d..47bd24fccf2767 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1166,8 +1166,11 @@ hu: use_security_key: Biztonsági kulcs használata author_attribution: example_title: Mintaszöveg + hint_html: Mastodonon kívül írsz híreket vagy blogbejegyzéseket? Szabályozd, hogyan tüntethetnek fel szerzőként, amikor Mastodonon osztják meg őket. + instructions: 'Győződj meg róla, hogy ez a kód a cikked HTML-jében van:' more_from_html: 'Több tőle: %{name}' s_blog: "%{name} blogja" + then_instructions: Aztán add meg a publikáció domain-nevét az alábbi mezőben. title: Szerző forrásmegjelölése challenge: confirm: Folytatás diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 66791a622d2fae..a70ae680e44be3 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1148,8 +1148,11 @@ ja: use_security_key: セキュリティキーを使用 author_attribution: example_title: サンプルテキスト + hint_html: Mastodonの外でニュースやブログなどを執筆しているユーザーは、Mastodonで自分の記事が共有されたときに著者情報を表示させることができます。 + instructions: 以下のコードを自分の記事のHTMLに貼り付けます。 more_from_html: "%{name} のその他の情報" s_blog: "%{name} のブログ" + then_instructions: その後、記事の公開に使用しているドメイン名を以下の入力欄に追加してください。 title: 著者の帰属 challenge: confirm: 続ける diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 43944fe0f651cc..6bff1703e68d97 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1150,8 +1150,11 @@ ko: use_security_key: 보안 키 사용 author_attribution: example_title: 예시 텍스트 + hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요. + instructions: '이 코드가 글의 HTML 안에 포함되는지 확인하세요:' more_from_html: "%{name}의 게시물 더 보기" s_blog: "%{name}의 블로그" + then_instructions: 그리고 발행처의 도메인 네임을 아래 입력란에 추가하세요. title: 작성자 기여 challenge: confirm: 계속 diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 908b15e851bc09..9e9515511045eb 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -29,11 +29,11 @@ lv: action: Veikt darbību already_silenced: Šis konts jau ir ierobežots. already_suspended: Šis konts jau ir aizturēts. - title: Veikt moderācijas darbību %{acct} + title: Veikt satura pārraudzības darbību %{acct} account_moderation_notes: create: Atstāt piezīmi - created_msg: Moderācijas piezīme ir veiksmīgi izveidota! - destroyed_msg: Moderācijas piezīme ir veiksmīgi iznīcināta! + created_msg: Satura pārraudzības piezīme ir veiksmīgi izveidota. + destroyed_msg: Satura pārraudzības piezīme ir veiksmīgi iznīcināta. accounts: add_email_domain_block: Liegt e-pasta domēnu approve: Apstiprināt @@ -96,12 +96,12 @@ lv: moderation: active: Aktīvie all: Visi - disabled: Atspējots + disabled: Atspējota pending: Gaida - silenced: Ierobežotie - suspended: Apturētie - title: Moderācija - moderation_notes: Moderācijas piezīmes + silenced: Ierobežoti + suspended: Apturēti + title: Satura pārraudzība + moderation_notes: Satura pārraudzības piezīmes most_recent_activity: Pati pēdējā darbība most_recent_ip: Pati pēdējā IP no_account_selected: Neviens konts netika mainīts, jo neviens netika atlasīts @@ -236,7 +236,7 @@ lv: update_status: Atjaunināt ziņu update_user_role: Atjaunināt lomu actions: - approve_appeal_html: "%{name} apstiprināja moderācijas lēmuma apelāciju no %{target}" + approve_appeal_html: "%{name} apstiprināja satura pārraudzības lēmuma iebildumu no %{target}" approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}" assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" change_email_user_html: "%{name} nomainīja lietotāja %{target} e-pasta adresi" @@ -267,7 +267,7 @@ lv: enable_user_html: "%{name} iespējoja pieteikšanos lietotājam %{target}" memorialize_account_html: "%{name} pārvērta %{target} kontu par atmiņas lapu" promote_user_html: "%{name} paaugstināja lietotāju %{target}" - reject_appeal_html: "%{name} noraidīja moderācijas lēmuma apelāciju no %{target}" + reject_appeal_html: "%{name} noraidīja satura pārraudzības lēmuma iebildumu no %{target}" reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}" remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu" reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" @@ -362,9 +362,9 @@ lv: other: "%{count}ziņojumi gaida" zero: "%{count}ziņojumi gaida" pending_tags_html: - one: "%{count}tēmturis gaida" - other: "%{count}tēmturi gaida" - zero: "%{count}tēmturi gaida" + one: "%{count} tēmturis rindā" + other: "%{count} tēmturi rindā" + zero: "%{count} tēmturu rindā" pending_users_html: one: "%{count}lietotājs gaida" other: "%{count}lietotāji gaida" @@ -409,7 +409,7 @@ lv: import: Importēt new: create: Izveodot bloku - hint: Domēna bloķēšana netraucēs izveidot kontu ierakstus datu bāzē, bet ar atpakaļejošu datumu un automātiski tiks piemērotas noteiktas moderēšanas metodes šajos kontos. + hint: Domēna aizturēšana netraucēs izveidot kontu ierakstus datubāzē, bet šajos kontos ar atpakaļejošu datumu un automātiski tiks piemērotas noteikti satura pārraudzības veidi. severity: desc_html: "Ierobežojums padarīs ziņas no šī domēna kontiem neredzamas ikvienam, kas tiem neseko. Apturēšana no tava servera noņems visu šī domēna kontu saturu, multividi un profila datus. Izmanto Nav, ja vēlies vienkārši noraidīt multivides failus." noop: Neviens @@ -532,7 +532,7 @@ lv: moderation: all: Visas limited: Ierobežotās - title: Moderācija + title: Satura pārraudzība private_comment: Privāts komentārs public_comment: Publisks komentārs purge: Iztīrīt @@ -619,7 +619,7 @@ lv: none: Neviens comment_description_html: 'Lai sniegtu vairāk informācijas, %{name} rakstīja:' confirm: Apstiprināt - confirm_action: Apstipriniet regulēšanas darbību pret @%{acct} + confirm_action: Apstiprināt satura pārraudzības darbību pret @%{acct} created_at: Ziņoti delete_and_resolve: Izdzēst rakstus forwarded: Pārsūtīti @@ -667,7 +667,7 @@ lv: delete_data_html: Dzēsiet lietotāja @%{acct} profilu un saturu pēc 30 dienām, ja vien to darbība pa šo laiku netiks atcelta preview_preamble_html: "@%{acct} saņems brīdinājumu ar šādu saturu:" record_strike_html: Ierakstiet brīdinājumu pret @%{acct}, lai palīdzētu jums izvērst turpmākus pārkāpumus no šī konta - warning_placeholder: Izvēles papildu pamatojums regulēšanas darbībai. + warning_placeholder: Izvēles papildu pamatojums satura pārraudzības darbībai. target_origin: Ziņotā konta izcelsme title: Ziņojumi unassign: Atsaukt @@ -682,10 +682,10 @@ lv: other: "%{count} lietotāji" zero: "%{count} lietotāju" categories: - administration: Administrēšana + administration: Pārvaldība devops: DevOps invites: Uzaicinājumi - moderation: Moderācija + moderation: Satura pārraudzība special: Īpašās delete: Dzēst description_html: Izmantojot lietotāju lomas, vari pielāgot, kurām Mastodon funkcijām un apgabaliem var piekļūt tavi lietotāji. @@ -706,7 +706,7 @@ lv: manage_announcements: Pārvaldīt Paziņojumus manage_announcements_description: Ļauj lietotājiem pārvaldīt paziņojumus serverī manage_appeals: Pārvaldīt Pārsūdzības - manage_appeals_description: Ļauj lietotājiem izskatīt apelācijas pret regulēšanas darbībām + manage_appeals_description: Ļauj lietotājiem pārskatīt iebildumus pret satura pārraudzības darbībām manage_blocks: Pārvaldīt Bloķus manage_custom_emojis: Pārvaldīt Pielāgotās Emocijzīmes manage_custom_emojis_description: Ļauj lietotājiem pārvaldīt pielāgotās emocijzīmes serverī @@ -715,7 +715,7 @@ lv: manage_invites: Pārvaldīt Uzaicinājumus manage_invites_description: Ļauj lietotājiem pārlūkot un deaktivizēt uzaicinājuma saites manage_reports: Pārvaldīt Pārskatus - manage_reports_description: Ļauj lietotājiem pārskatīt pārskatus un veikt pret tiem regulēšanas darbības + manage_reports_description: Ļauj lietotājiem pārskatīt ziņojumus un veikt pret tiem satura pārraudzības darbības manage_roles: Pārvaldīt Lomas manage_roles_description: Ļauj lietotājiem pārvaldīt un piešķirt lomas, kas ir zemākas par viņu lomu manage_rules: Pārvaldīt Noteikumus @@ -723,10 +723,10 @@ lv: manage_settings: Pārvaldīt Iestatījumus manage_settings_description: Ļauj lietotājiem mainīt vietnes iestatījumus manage_taxonomies: Pārvaldīt Taksonomijas - manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt atsauces iestatījumus + manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt tēmturu iestatījumus manage_user_access: Pārvaldīt Lietotāju Piekļuves manage_users: Pārvaldīt Lietotājus - manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem regulēšanas darbības + manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem satura pārraudzības darbības manage_webhooks: Pārvaldīt Tīmekļa Aizķeres manage_webhooks_description: Ļauj lietotājiem iestatīt tīmekļa aizķeres administratīviem pasākumiem view_audit_log: Skatīt Audita Žurnālu @@ -779,6 +779,7 @@ lv: disabled: Nevienam users: Vietējiem reģistrētiem lietotājiem registrations: + moderation_recommandation: Lūgums nodrošināt, ka Tev ir pieņemama un atsaucīga satura pārraudzības komanda, pirms padari reģistrēšanos visiem pieejamu. preamble: Kontrolē, kurš var izveidot kontu tavā serverī. title: Reģistrācijas registrations_mode: @@ -786,6 +787,7 @@ lv: approved: Reģistrācijai nepieciešams apstiprinājums none: Neviens nevar reģistrēties open: Jebkurš var reģistrēties + warning_hint: Mēs iesakām izmantot "Nepieciešams reģistrēšanās apstiprinājums", izņemot, ja esi pārliecināts, ka Tava satura pārraudzības komanda var laicīgi apstrādāt mēstules un ļaunprātīgas reģistrācijas. security: authorized_fetch: Pieprasīt autentifikāciju no federētajiem serveriem authorized_fetch_hint: Pieprasot autentifikāciju no federētajiem serveriem, tiek nodrošināta stingrāka gan lietotāja līmeņa, gan servera līmeņa bloku izpilde. Tomēr tas ir saistīts ar izpildes sodu, samazina tavu atbilžu sasniedzamību un var radīt saderības problēmas ar dažiem federētajiem pakalpojumiem. Turklāt tas netraucēs īpašiem dalībniekiem ienest tavas publiskās ziņas un kontus. @@ -889,6 +891,8 @@ lv: review_requested: Pieprasīta pārskatīšana reviewed: Pārskatīts title: Stāvoklis + unreviewed: Nepārskatīts + usable: Izmantojams name: Nosaukums newest: Jaunākie oldest: Vecākie @@ -897,7 +901,7 @@ lv: search: Meklēt title: Tēmturi updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti - title: Administrēšana + title: Pārvaldība trends: allow: Atļaut approved: Apstiprināts @@ -1001,9 +1005,9 @@ lv: sensitive: lai atzīmētu viņu kontu kā sensitīvu silence: lai ierobežotu viņu kontu suspend: lai apturētu viņu kontu - body: "%{target} pārsūdzēja %{action_taken_by} moderēšanas lēmumu no %{date}, kas bija %{type}. Viņi rakstīja:" - next_steps: Varat apstiprināt apelāciju, lai atsauktu regulēšanas lēmumu, vai ignorēt to. - subject: "%{username} pārsūdz moderēšanas lēmumu par %{instance}" + body: "%{target} iebilst %{action_taken_by} satura pārraudzības lēmumam no %{date}, kas bija %{type}. Viņi rakstīja:" + next_steps: Vari apstiprināt iebildumu, lai atsauktu satura pārraudzības lēmumu, vai neņemt to vērā. + subject: "%{username} iebilst satura pārraudzības lēmumam par %{instance}" new_critical_software_updates: body: Ir izlaistas jaunas Mastodon svarīgās versijas, iespējams, vēlēsies to atjaunināt pēc iespējas ātrāk! subject: "%{instance} ir pieejami svarīgi Mastodon atjauninājumi!" @@ -1456,7 +1460,7 @@ lv: other_data: Nekādi citi dati netiks automātiski pārvietoti redirect: Tava pašreizējā konta profils tiks atjaunināts ar novirzīšanas paziņojumu un tiks izslēgts no meklēšanas moderation: - title: Moderācija + title: Satura pārraudzība move_handler: carry_blocks_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji bloķējis. carry_mutes_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji apklusinājis. @@ -1498,6 +1502,7 @@ lv: update: subject: "%{name} laboja ierakstu" notifications: + administration_emails: Pārvaldītāju e-pasta paziņojumi email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:' number: human: @@ -1546,7 +1551,7 @@ lv: reach: Sasniedzamība reach_hint_html: Kontrolē, vai vēlies, lai tevi atklātu un sekotu jauni cilvēki. Vai vēlies, lai tavas ziņas tiktu parādītas ekrānā Izpēte? Vai vēlies, lai citi cilvēki tevi redzētu savos ieteikumos? Vai vēlies automātiski pieņemt visus jaunos sekotājus vai arī tev ir pilnīga kontrole pār katru? search: Meklēt - search_hint_html: Kontrolē, kā vēlies tikt atrasts. Vai vēlies, lai cilvēki tevi atrod pēc tā, ko esi publiski publicējis? Vai vēlies, lai cilvēki ārpus Mastodon atrastu tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar garantēt publiskas informācijas pilnīgu izslēgšanu no visām meklētājprogrammām. + search_hint_html: Nosaki, kā vēlies tikt atrasts! Vai vēlies, lai cilvēki Tevi atrod pēc tā, par ko esi veicis visiem redzamus ierakstus? Vai vēlies, lai cilvēki ārpus Mastodon atrastu Tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar nodrošināt visiem redzamas informācijas pilnīgu izslēgšanu no visām meklētājiem! title: Privātums un sasniedzamība privacy_policy: title: Privātuma Politika @@ -1583,8 +1588,8 @@ lv: rss: content_warning: 'Satura brīdinājums:' descriptions: - account: Publiskas ziņas no @%{acct} - tag: 'Publiskas ziņas ar atzīmi #%{hashtag}' + account: Visiem redzami ieraksti no @%{acct} + tag: 'Visiem redzami ieraksti ar tēmturi #%{hashtag}' scheduled_statuses: over_daily_limit: Tu esi pārsniedzis šodien ieplānoto %{limit} ziņu ierobežojumu over_total_limit: Tu esi pārsniedzis ieplānoto %{limit} ziņu ierobežojumu @@ -1658,7 +1663,7 @@ lv: relationships: Sekojamie un sekotāji severed_relationships: Pārtrauktās attiecības statuses_cleanup: Automātiska ziņu dzēšana - strikes: Moderācijas aizrādījumi + strikes: Satura pārraudzības aizrādījumi two_factor_authentication: Divpakāpju autentifikācija webauthn_authentication: Drošības atslēgas severed_relationships: @@ -1687,7 +1692,7 @@ lv: disallowed_hashtags: one: 'saturēja neatļautu tēmturi: %{tags}' other: 'saturēja neatļautus tēmturus: %{tags}' - zero: 'neatļauti tēmturi: %{tags}' + zero: 'saturēja neatļautus tēmturus: %{tags}' edited_at_html: Labots %{date} errors: in_reply_not_found: Šķiet, ka ziņa, uz kuru tu mēģini atbildēt, nepastāv. @@ -1705,7 +1710,7 @@ lv: public: Publisks public_long: Visi var redzēt unlisted: Nerindota - unlisted_long: Redzama visiem, bet nav iekļauta publiskajās ziņu lentās + unlisted_long: Redzams visiem, bet nav uzskaitīts visiem pieejamās laika joslās statuses_cleanup: enabled: Automātiski dzēst vecās ziņas enabled_hint: Automātiski izdzēš tavas ziņas, tiklīdz tās sasniedz noteiktu vecuma slieksni, ja vien tās neatbilst kādam no tālāk norādītajiem izņēmumiem @@ -1838,7 +1843,8 @@ lv: explanation: Šeit ir daži padomi, kā sākt darbu feature_action: Uzzināt vairāk feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi. - feature_moderation_title: Moderēšana, kādai tai būtu jābūt + feature_moderation: Mastodon nodod lēmumu pieņemšanu atpakaļ Tavās rokās. Katrs serveris izveido savus noteikumus un nosacījumus, kas tiek nodrošināti vietēji, ne kā lieliem uzņēmumiem piederošos sabiedriskajos medijiem, padarot katru serveri par vispielāgojamāko un visatsaucīgāko dažādu cilvēku kopu vajadzībām. Pievienojies serverim, kura noteikumiem Tu piekrīti, vai izvieto savu! + feature_moderation_title: Satura pārraudzība, kādai tai būtu jābūt follow_action: Sekot follow_step: Sekošana aizraujošiem cilvēkiem ir viss, par ko ir Mastodon. follow_title: Pielāgo savu mājas barotni @@ -1849,7 +1855,7 @@ lv: one: "%{people} cilvēks pēdējās 2 dienās" other: "%{people} cilvēki pēdējās 2 dienās" zero: "%{people} cilvēku pēdējās divās dienās" - hashtags_subtitle: Izpēti, kas pēdējās divās dienāš ir piesasitījis cilvēku uzmanību + hashtags_subtitle: Izpēti, kas pēdējās divās dienās ir piesasitījis cilvēku uzmanību hashtags_title: Izplatīti tēmturi hashtags_view_more: Skatīt vairāk izplatītu tēmturu post_action: Rakstīt diff --git a/config/locales/nn.yml b/config/locales/nn.yml index e6edc2c4b2e18d..9ec4f29f42682e 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1166,8 +1166,11 @@ nn: use_security_key: Bruk sikkerhetsnøkkel author_attribution: example_title: Eksempeltekst + hint_html: Skriv du nyhende eller blogginnlegg utanfor Mastodon? Her kan du kontrollera korleis du blir kreditert når artiklane dine blir delte på Mastodon. + instructions: 'Sjå til at denne koden er i HTML-koden i artikkelen din:' more_from_html: Meir frå %{name} s_blog: Bloggen til %{name} + then_instructions: Så legg du til domenenamnet for publikasjonen i feltet under. title: Forfattarkreditering challenge: confirm: Hald fram @@ -1369,6 +1372,37 @@ nn: blocking_html: one: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkonto frå %{filename}. other: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkontoar frå %{filename}. + bookmarks_html: + one: Du skal til å byta ut bokmerka dine med opp til %{count} innlegg frå %{filename}. + other: Du skal til å byta ut bokmerka dine med opp til %{count} innlegg frå %{filename}. + domain_blocking_html: + one: Du skal til å byta ut domeneblokkeringslista di med opp til %{count} domene frå %{filename}. + other: Du skal til å byta ut domeneblokkeringslista di med opp til %{count} domene frå %{filename}. + following_html: + one: Du skal til å fylgja opp til %{count} brukarkonto frå %{filename} og slutta å fylgja alle andre. + other: Du skal til å fylgja opp til %{count} brukarkontoar frå %{filename} og slutta å fylgja alle andre. + muting_html: + one: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{count} brukarkonto frå %{filename}. + other: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{count} brukarkontoar frå %{filename}. + preambles: + blocking_html: + one: Du skal til å blokkera opp til %{count} brukarkonto frå %{filename}. + other: Du skal til å blokkera opp til %{count} brukarkontoar frå %{filename}. + bookmarks_html: + one: Du er i ferd med å leggja til opp til %{count} innlegg frå %{filename} til bokmerka dine. + other: Du er i ferd med å leggja til opp til %{count} innlegg frå %{filename} til bokmerka dine. + domain_blocking_html: + one: Du skal til å blokkera opp til %{count} domene frå %{filename}. + other: Du skal til å blokkera opp til %{count} domene frå %{filename}. + following_html: + one: Du er i ferd med å fylgja opp til %{count} brukarkonto frå %{filename}. + other: Du er i ferd med å fylgja opp til %{count} brukarkontoar frå %{filename}. + lists_html: + one: Du er i ferd med å leggja til opptil %{count} konto frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før. + other: Du er i ferd med å leggja til opptil %{count} kontoar frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før. + muting_html: + one: Du er i ferd med å dempa opp til %{count} brukarkonto frå %{filename}. + other: Du er i ferd med å dempa opp til %{count} brukarkontoar frå %{filename}. preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer. recent_imports: Siste importar states: diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index cfb5578f5dba4e..184f1120bd9d17 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -3,6 +3,7 @@ eo: simple_form: hints: account: + attribution_domains_as_text: Unu por linio. Protektas kontraŭ falsaj atribuoj. discoverable: Viaj publikaj afiŝoj kaj profilo povas esti prezentitaj aŭ rekomenditaj en diversaj lokoj de Mastodon kaj via profilo povas esti proponita al aliaj uzantoj. display_name: Via plena nomo aŭ via kromnomo. fields: Via retpaĝo, pronomoj, aĝo, ĉio, kion vi volas. @@ -138,6 +139,7 @@ eo: url: Kien eventoj sendotas labels: account: + attribution_domains_as_text: Retejoj permesitaj krediti vin discoverable: Elstarigi profilon kaj afiŝojn en eltrovantaj algoritmoj fields: name: Etikedo diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 9d7809ef3ab3ea..2b5d22aee83210 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -3,7 +3,7 @@ es-MX: simple_form: hints: account: - attribution_domains_as_text: One per line. Protects from false attributions. + attribution_domains_as_text: Uno por línea. Protege contra atribuciones falsas. discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu nick. fields: Tu página de inicio, pronombres, edad, todo lo que quieras. diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 6121467768445f..f51a4ce8bfe5f9 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -3,6 +3,7 @@ fa: simple_form: hints: account: + attribution_domains_as_text: یکی در هر خط. محافظت از اعتباردهی‌های اشتباه. discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. display_name: نام کامل یا باحالتان. fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. @@ -90,6 +91,7 @@ fa: site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چه‌کسی می‌گرداندش و برای چه کسیست؟ site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیش‌گزیده خالی بگذارید. می‌تواند در قالب مارک‌دون باشد. site_title: چگونه مردم ممکن است به کارساز شما علاوه بر نام دامنه آن مراجعه کنند. + theme: زمینه‌ای که بینندگان خارج شده و کاربران جدید می‌بینند. form_challenge: current_password: شما در حال ورود به یک منطقهٔ‌ حفاظت‌شده هستید imports: @@ -122,6 +124,7 @@ fa: url: جایی که رویدادها فرستاده می‌شوند labels: account: + attribution_domains_as_text: پابگاه‌های وبی که اجازهٔ اعتبار دهی به شما را دارند discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف fields: name: برچسب @@ -227,6 +230,7 @@ fa: bootstrap_timeline_accounts: پیشنهاد همیشگی این حساب‌ها به کاربران جدید closed_registrations_message: پیام سفارشی هنگام در دسترس نبودن ثبت‌نام‌ها custom_css: سبک CSS سفارشی + favicon: نمادک mascot: نشان سفارشی (قدیمی) media_cache_retention_period: دورهٔ نگه‌داری انبارهٔ رسانه peers_api_enabled: انتشار سیاههٔ کارسازهای کشف شده در API diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 7c125b165a0cd4..f8257a9da9dd10 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,6 +3,7 @@ ga: simple_form: hints: account: + attribution_domains_as_text: Ceann in aghaidh an líne. Cosnaíonn sé ó sannadh bréagach. discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile. display_name: D'ainm iomlán nó d'ainm spraoi. fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat. @@ -143,6 +144,7 @@ ga: url: An áit a seolfar imeachtaí chuig labels: account: + attribution_domains_as_text: Tá cead ag suíomhanna Gréasáin creidmheas a thabhairt duit discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana fields: name: Lipéad diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 545fd4a8e91fd0..230965fe87f8cc 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -3,6 +3,7 @@ hu: simple_form: hints: account: + attribution_domains_as_text: Megvéd a hamis forrásmegjelölésektől. discoverable: A nyilvános bejegyzéseid és a profilod kiemelhető vagy ajánlható a Mastodon különböző területein, a profilod más felhasználóknak is javasolható. display_name: Teljes neved vagy vicces neved. fields: Weboldalad, megszólításaid, korod, bármi, amit szeretnél. @@ -143,6 +144,7 @@ hu: url: Ahová az eseményket küldjük labels: account: + attribution_domains_as_text: Weboldalak, melyek szerzőként tüntethetnek fel discoverable: Profil és bejegyzések szerepeltetése a felfedezési algoritmusokban fields: name: Címke diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 6ce16b64480153..27e98341cb8152 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -3,6 +3,7 @@ ja: simple_form: hints: account: + attribution_domains_as_text: 1行につき1つずつ入力してください。この設定は関わりのないwebサイトに対して虚偽の帰属表示が行われることを防止する役割があります。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 display_name: フルネーム、ハンドルネームなど fields: ホームページ、代名詞、年齢など何でも構いません。 @@ -143,6 +144,7 @@ ja: url: イベントの送信先 labels: account: + attribution_domains_as_text: あなたの著者表示を許可するwebサイト discoverable: アカウントを見つけやすくする fields: name: ラベル diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index fee07fa5e0ff66..c40814d61b1593 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -3,6 +3,7 @@ ko: simple_form: hints: account: + attribution_domains_as_text: 한 줄에 하나씩. 가짜 기여로부터 보호합니다. discoverable: 내 공개 게시물과 프로필이 마스토돈의 다양한 추천 기능에 나타날 수 있고 프로필이 다른 사용자에게 제안될 수 있습니다 display_name: 진짜 이름 또는 재미난 이름. fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들. @@ -143,6 +144,7 @@ ko: url: 이벤트가 어디로 전송될 지 labels: account: + attribution_domains_as_text: 나를 기여자로 올릴 수 있도록 허용된 웹사이트들 discoverable: 발견하기 알고리즘에 프로필과 게시물을 추천하기 fields: name: 라벨 diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 4303ba9b41458a..974008b5ebc5e9 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -3,6 +3,7 @@ lv: simple_form: hints: account: + attribution_domains_as_text: Viens katrā līnijā. Aizsargā no nepatiesa attiecinājuma. discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. @@ -18,7 +19,7 @@ lv: text: Vari izmantot ziņu sintaksi, piemēram, URL, atsauces un pieminējumus title: Neobligāts. Saņēmējam nav redzams admin_account_action: - include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas moderācijas darbību vai brīdinājumu + include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas satura pārraudzības darbību vai brīdinājumu send_email_notification: Lietotājs saņems paskaidrojumu par to, kas notika ar viņa kontu text_html: Neobligāts. Tu vari lietot ziņu sintaksi. Lai ietaupītu laiku, tu vari pievienot brīdinājuma sākotnējos iestatījumus type_html: Izvēlies, ko darīt ar %{acct} @@ -143,6 +144,7 @@ lv: url: Kur notikumi tiks nosūtīti labels: account: + attribution_domains_as_text: Tīmekļvietnes, kurām ir tiesības uzskaitīt Tevi discoverable: Funkcijas profils un ziņas atklāšanas algoritmos fields: name: Marķējums diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index afd3624785a5aa..7280ba6d801626 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -213,7 +213,7 @@ nl: setting_default_privacy: Zichtbaarheid van nieuwe berichten setting_default_sensitive: Media altijd als gevoelig markeren setting_delete_modal: Vraag voor het verwijderen van een bericht een bevestiging - setting_disable_hover_cards: Profielvoorbeelden door eroverheen te zweven uitschakelen + setting_disable_hover_cards: Hover-kaarten met profielvoorbeelden uitschakelen setting_disable_swiping: Swipebewegingen uitschakelen setting_display_media: Mediaweergave setting_display_media_default: Standaard diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index f963d3bc72d196..46b7af4bdb08d8 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -3,6 +3,7 @@ nn: simple_form: hints: account: + attribution_domains_as_text: Ein per line. Vernar mot falske krediteringar. discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk. display_name: Ditt fulle namn eller ditt tøysenamn. fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. @@ -143,6 +144,7 @@ nn: url: Kvar hendingar skal sendast labels: account: + attribution_domains_as_text: Nettstader som har lov å kreditera deg discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar fields: name: Merkelapp diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 3d865572824706..1ca9037e63464c 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -3,6 +3,7 @@ sq: simple_form: hints: account: + attribution_domains_as_text: Një për rresht. Kjo mbron nga atribuime të rreme. discoverable: Postimet dhe profili juaj publik mund të shfaqen, ose rekomandohen në zona të ndryshme të Mastodon-it dhe profili juaj mund të sugjerohet përdoruesve të tjerë. display_name: Emri juaj i plotë, ose emri juaj lojcak. fields: Faqja juaj hyrëse, përemra, moshë, ç’të keni qejf. @@ -143,6 +144,7 @@ sq: url: Ku do të dërgohen aktet labels: account: + attribution_domains_as_text: Sajte të lejuar t’ju japin hakë discoverable: Profilin dhe postimet bëji objekt të algoritmeve të zbulimit fields: name: Etiketë diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 297e96a2bdf125..36d1def01244d4 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -3,6 +3,7 @@ sv: simple_form: hints: account: + attribution_domains_as_text: En per rad. Skyddar mot falska attributioner. discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare. display_name: Ditt fullständiga namn eller ditt roliga namn. fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill. @@ -143,6 +144,7 @@ sv: url: Dit händelser kommer skickas labels: account: + attribution_domains_as_text: Webbplatser som får kreditera dig discoverable: Presentera profil och inlägg med upptäcktsalgoritmer fields: name: Etikett diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 8bd782c1405d32..f8f4d3f11947cf 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -3,6 +3,7 @@ th: simple_form: hints: account: + attribution_domains_as_text: หนึ่งรายการต่อบรรทัด ปกป้องจากการระบุแหล่งที่มาที่ผิด discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ @@ -143,6 +144,7 @@ th: url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: + attribution_domains_as_text: เว็บไซต์ที่ได้รับอนุญาตให้ให้เครดิตคุณ discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ fields: name: ป้ายชื่อ diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index e2a1562b53499e..74dcd3f9087589 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -3,6 +3,7 @@ uk: simple_form: hints: account: + attribution_domains_as_text: Один на рядок. Захищає від фальшивих атрибутів. discoverable: Ваші дописи та профіль можуть бути рекомендовані в різних частинах Mastodon і ваш профіль може бути запропонований іншим користувачам. display_name: Ваше повне ім'я або ваш псевдонім. fields: Ваша домашня сторінка, займенники, вік, все, що вам заманеться. @@ -143,6 +144,7 @@ uk: url: Куди надсилатимуться події labels: account: + attribution_domains_as_text: Сайти дозволяють вам вказувати ваше авторство discoverable: Функції профілю та дописів у алгоритмах виявлення fields: name: Мітка diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 399ecc061af0db..6ef78a8f211407 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -49,6 +49,7 @@ sk: title: Zmeň email pre %{username} change_role: changed_msg: Postavenie úspešne zmenené! + edit_roles: Spravuj role užívateľov label: Zmeň pozíciu no_role: Žiadna pozícia title: Zmeň pozíciu pre %{username} @@ -61,6 +62,7 @@ sk: demote: Degraduj destroyed_msg: "%{username} je teraz zaradený do fronty na okamžité vymazanie" disable: Zablokuj + disable_sign_in_token_auth: Vypni overovanie e-mailovým tokenom disable_two_factor_authentication: Vypni dvoj-faktorové overovanie disabled: Blokovaný display_name: Ukáž meno @@ -69,6 +71,7 @@ sk: email: Email email_status: Stav emailu enable: Povoľ + enable_sign_in_token_auth: Povoľ overovania e-mailovým tokenom enabled: Povolený enabled_msg: Úspešne rozmrazené konto %{username} followers: Sledujúci @@ -822,6 +825,7 @@ sk: prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!" prefix_sign_up: Zaregistruj sa na Mastodone už dnes! suffix: S účtom budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi z hocijakého Mastodon servera a viac! + didnt_get_confirmation: Neobdržal/a si odkaz na potvrdenie? dont_have_your_security_key: Nemáš svoj bezpečnostný kľúč? forgot_password: Zabudnuté heslo? invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový. @@ -832,6 +836,7 @@ sk: migrate_account_html: Ak si želáš presmerovať tento účet na nejaký iný, môžeš si to nastaviť tu. or_log_in_with: Alebo prihlás s progress: + confirm: Potvrď email details: Tvoje údaje rules: Súhlas s pravidlami register: Zaregistruj sa diff --git a/config/locales/sq.yml b/config/locales/sq.yml index c113308eea9b70..980eff1aa58eac 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1159,8 +1159,11 @@ sq: use_security_key: Përdor kyç sigurie author_attribution: example_title: Tekst shembull + hint_html: Shkruani lajme, apo artikuj blogu jashtë Mastodon-it? Kontrolloni se si ju jepet hakë, kur ndahen me të tjerët në Mastodon. + instructions: 'Sigurohuni që ky kod të jetë në HTML-në e artikullit tuaj:' more_from_html: Më tepër nga %{name} s_blog: Blogu i %{name} + then_instructions: Mandej, shtoni te fusha më poshtë emrin e përkatësisë së botimit. title: Atribuim autorësh challenge: confirm: Vazhdo diff --git a/config/locales/sv.yml b/config/locales/sv.yml index b79820310c76ac..f3ce6443f6d65b 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -542,7 +542,7 @@ sv: total_followed_by_them: Följs av dem total_followed_by_us: Följs av oss total_reported: Rapporter om dem - total_storage: Media-bilagor + total_storage: Mediebilagor totals_time_period_hint_html: Totalsummorna som visas nedan inkluderar data för all tid. unknown_instance: Det finns för närvarande inga uppgifter om denna domän på denna server. invites: @@ -893,6 +893,7 @@ sv: message_html: "Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen." tags: moderation: + not_trendable: Kan inte trenda not_usable: Inte användbar pending_review: Väntar på granskning review_requested: Granskning begärd @@ -904,6 +905,7 @@ sv: name: Namn newest: Nyaste oldest: Äldsta + open: Visa offentligt reset: Återställ review: Granskningsstatus search: Sök @@ -1164,8 +1166,11 @@ sv: use_security_key: Använd säkerhetsnyckel author_attribution: example_title: Exempeltext + hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon. + instructions: 'Se till att den här koden finns i din artikels HTML:' more_from_html: Mer från %{name} s_blog: "%{name}s blogg" + then_instructions: Lägg sedan till domännamnet för publikationen i fältet nedan. title: Författarattribution challenge: confirm: Fortsätt @@ -1364,9 +1369,43 @@ sv: overwrite: Skriv över overwrite_long: Ersätt de nuvarande uppgifterna med de nya overwrite_preambles: + blocking_html: + one: Du är på väg att ersätta din blockeringslista med upp till %{count} konto från %{filename}. + other: Du är på väg att ersätta din blockeringslista med upp till %{count} konton från %{filename}. bookmarks_html: one: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}. other: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}. + domain_blocking_html: + one: Du är på väg att ersätta din blockeringslista med upp till %{count} domän från %{filename}. + other: Du är på väg att ersätta din blockeringslista med upp till %{count} domäner från %{filename}. + following_html: + one: Du är på väg till följ upp till %{count} konto från %{filename} och sluta följa någon annan. + other: Du är på väg till följ upp till %{count} konton från %{filename} och sluta följa någon annan. + lists_html: + one: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{count} konto kommer att läggas till i nya listor. + other: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{count} konton kommer att läggas till i nya listor. + muting_html: + one: Du är på väg att ersätta din lista med tystade konton med upp till %{count} konto från %{filename}. + other: Du är på väg att ersätta din lista med tystade konton med upp till %{count} konton från %{filename}. + preambles: + blocking_html: + one: Du är på väg att blockera med upp till %{count} konto från %{filename}. + other: Du är på väg att blockera med upp till %{count} konton från %{filename}. + bookmarks_html: + one: Du håller på att lägga upp till %{count} inlägg från %{filename} till dina bokmärken. + other: Du håller på att lägga upp till %{count} inlägg från %{filename} till dina bokmärken. + domain_blocking_html: + one: Du är på väg att blockera upp till %{count} domän från %{filename}. + other: Du är på väg att blockera upp till %{count} domäner från %{filename}. + following_html: + one: Du är på väg att följa upp till %{count} konto från %{filename}. + other: Du är på väg att följa upp till %{count} konton från %{filename}. + lists_html: + one: Du håller på att lägga upp till %{count} konto från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till. + other: Du håller på att lägga upp till %{count} konton från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till. + muting_html: + one: Du är på väg att tysta upp till %{count} konto från %{filename}. + other: Du är på väg att tysta upp till %{count} konton från %{filename}. preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar. recent_imports: Nyligen importerade states: diff --git a/config/locales/th.yml b/config/locales/th.yml index 2c21687a460bd0..cdc56d98ce0f17 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1148,8 +1148,11 @@ th: use_security_key: ใช้กุญแจความปลอดภัย author_attribution: example_title: ข้อความตัวอย่าง + hint_html: คุณเขียนข่าวหรือลงบทความที่อื่นๆที่นอกจาก Mastodon บ้างไหม? ถ้าหากคุณเขียนอยู่ล่ะก็ คุณสามารถบอกได้นะว่าอยากให้คนอื่นให้เครดิตคุณยังไงเวลาแชร์ไปที่ Mastodon นะ + instructions: 'โปรดตรวจสอบให้แน่ใจว่าโค้ดนี้ได้มีอยู่ในบทความของคุณแล้ว HTML:' more_from_html: เพิ่มเติมจาก %{name} s_blog: บล็อกของ %{name} + then_instructions: จากนั้น ให้เพิ่มใส่ชื่อเว็บไซต์ของสิ่งพิมพ์ลงไปในช่องว่างข้างล่าง title: การระบุแหล่งที่มาผู้สร้าง challenge: confirm: ดำเนินการต่อ @@ -1340,6 +1343,32 @@ th: merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่ overwrite: เขียนทับ overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่ + overwrite_preambles: + blocking_html: + other: คุณกำลังจะ แทนที่รายการการปิดกั้นของคุณ ด้วยมากถึง %{count} บัญชี จาก %{filename} + bookmarks_html: + other: คุณกำลังจะ แทนที่ที่คั่นหน้าของคุณ ด้วยมากถึง %{count} โพสต์ จาก %{filename} + domain_blocking_html: + other: คุณกำลังจะ แทนที่รายการการปิดกั้นโดเมนของคุณ ด้วยมากถึง %{count} โดเมน จาก %{filename} + following_html: + other: คุณกำลังจะ ติดตาม มากถึง %{count} บัญชี จาก %{filename} และ หยุดการติดตามคนอื่นใด + lists_html: + other: คุณกำลังจะ แทนที่รายการของคุณ ด้วยเนื้อหาของ %{filename} จะเพิ่มมากถึง %{count} บัญชี ไปยังรายการใหม่ + muting_html: + other: คุณกำลังจะ แทนที่รายการบัญชีที่ซ่อนอยู่ของคุณ ด้วยมากถึง %{count} บัญชี จาก %{filename} + preambles: + blocking_html: + other: คุณกำลังจะ ปิดกั้น มากถึง %{count} บัญชี จาก %{filename} + bookmarks_html: + other: คุณกำลังจะเพิ่มมากถึง %{count} โพสต์ จาก %{filename} ไปยัง ที่คั่นหน้า ของคุณ + domain_blocking_html: + other: คุณกำลังจะ ปิดกั้น มากถึง %{count} โดเมน จาก %{filename} + following_html: + other: คุณกำลังจะ ติดตาม มากถึง %{count} บัญชี จาก %{filename} + lists_html: + other: คุณกำลังจะเพิ่มมากถึง %{count} บัญชี จาก %{filename} ไปยัง รายการ ของคุณ จะสร้างรายการใหม่หากไม่มีรายการที่จะเพิ่มไปยัง + muting_html: + other: คุณกำลังจะ ซ่อน มากถึง %{count} บัญชี จาก %{filename} preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น recent_imports: การนำเข้าล่าสุด states: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index ab50ac4deea134..e6a765267fde81 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1202,6 +1202,8 @@ uk: use_security_key: Використовувати ключ безпеки author_attribution: example_title: Зразок тексту + hint_html: Ви пишете новини чи статті в блозі за межами Mastodon? Контролюйте, як вони підписуються, коли ними діляться на Mastodon. + instructions: 'Переконайтесь, що цей код розміщено в HTML-коді вашої статті:' more_from_html: Більше від %{name} s_blog: Блог %{name} then_instructions: Потім додайте доменне ім'я публікації у поле нижче. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 00431ba4250662..172ce55a3d4a44 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -832,8 +832,8 @@ vi: sensitive: "%{name} đã đánh dấu %{target} là nhạy cảm" silence: "%{name} đã ẩn %{target}" suspend: "%{name} đã vô hiệu hóa %{target}" - appeal_approved: Đã khiếu nại - appeal_pending: Đang kháng cáo + appeal_approved: Khiếu nại được chấp nhận + appeal_pending: Đang khiếu nại appeal_rejected: Khiếu nại bị từ chối system_checks: database_schema_check: @@ -1148,7 +1148,7 @@ vi: use_security_key: Dùng khóa bảo mật author_attribution: example_title: Văn bản mẫu - hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bạn được ghi nhận khi chúng được chia sẻ trên Mastodon. + hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon. instructions: 'Đặt mã này trong HTML bài viết:' more_from_html: Viết bởi %{name} s_blog: "%{name}'s Blog" From dc0b1948beea5eed657bc32a3a7deaab0d41c693 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 28 Oct 2024 14:27:37 +0100 Subject: [PATCH 390/467] Feat: Implement interaction modal for Polls (#32609) --- app/javascript/mastodon/components/poll.jsx | 12 +++++++++--- .../mastodon/components/status_content.jsx | 2 +- app/javascript/mastodon/containers/poll_container.js | 12 ++++++++++++ .../mastodon/features/interaction_modal/index.jsx | 8 +++++++- app/javascript/mastodon/locales/en.json | 2 ++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/components/poll.jsx b/app/javascript/mastodon/components/poll.jsx index 7b836f00b1abab..06b09f5b3520e9 100644 --- a/app/javascript/mastodon/components/poll.jsx +++ b/app/javascript/mastodon/components/poll.jsx @@ -41,12 +41,14 @@ const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => { class Poll extends ImmutablePureComponent { static propTypes = { identity: identityContextPropShape, - poll: ImmutablePropTypes.map, + poll: ImmutablePropTypes.map.isRequired, + status: ImmutablePropTypes.map.isRequired, lang: PropTypes.string, intl: PropTypes.object.isRequired, disabled: PropTypes.bool, refresh: PropTypes.func, onVote: PropTypes.func, + onInteractionModal: PropTypes.func, }; state = { @@ -117,7 +119,11 @@ class Poll extends ImmutablePureComponent { return; } - this.props.onVote(Object.keys(this.state.selected)); + if (this.props.identity.signedIn) { + this.props.onVote(Object.keys(this.state.selected)); + } else { + this.props.onInteractionModal('vote', this.props.status); + } }; handleRefresh = () => { @@ -232,7 +238,7 @@ class Poll extends ImmutablePureComponent {
- {!showResults && } + {!showResults && } {!showResults && <> · } {showResults && !this.props.disabled && <> · } {votesCount} diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index 3316be8350603c..4950c896f97e7e 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -245,7 +245,7 @@ class StatusContent extends PureComponent { ); const poll = !!status.get('poll') && ( - + ); if (this.props.onClick) { diff --git a/app/javascript/mastodon/containers/poll_container.js b/app/javascript/mastodon/containers/poll_container.js index 8482345431673f..db378cba7c2b6a 100644 --- a/app/javascript/mastodon/containers/poll_container.js +++ b/app/javascript/mastodon/containers/poll_container.js @@ -2,6 +2,7 @@ import { connect } from 'react-redux'; import { debounce } from 'lodash'; +import { openModal } from 'mastodon/actions/modal'; import { fetchPoll, vote } from 'mastodon/actions/polls'; import Poll from 'mastodon/components/poll'; @@ -17,6 +18,17 @@ const mapDispatchToProps = (dispatch, { pollId }) => ({ onVote (choices) { dispatch(vote(pollId, choices)); }, + + onInteractionModal (type, status) { + dispatch(openModal({ + modalType: 'INTERACTION', + modalProps: { + type, + accountId: status.getIn(['account', 'id']), + url: status.get('uri'), + }, + })); + } }); const mapStateToProps = (state, { pollId }) => ({ diff --git a/app/javascript/mastodon/features/interaction_modal/index.jsx b/app/javascript/mastodon/features/interaction_modal/index.jsx index 723e27ae1c7857..446cc2586a03a2 100644 --- a/app/javascript/mastodon/features/interaction_modal/index.jsx +++ b/app/javascript/mastodon/features/interaction_modal/index.jsx @@ -9,6 +9,7 @@ import { connect } from 'react-redux'; import { throttle, escapeRegExp } from 'lodash'; +import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; @@ -340,7 +341,7 @@ class InteractionModal extends React.PureComponent { static propTypes = { displayNameHtml: PropTypes.string, url: PropTypes.string, - type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']), + type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow', 'vote']), onSignupClick: PropTypes.func.isRequired, signupUrl: PropTypes.string.isRequired, }; @@ -377,6 +378,11 @@ class InteractionModal extends React.PureComponent { title = ; actionDescription = ; break; + case 'vote': + icon = ; + title = ; + actionDescription = ; + break; } let signupButton; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index f2d37e67a60c43..e91d6e52fce60d 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.", "interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.", "interaction_modal.description.reply": "With an account on Mastodon, you can respond to this post.", + "interaction_modal.description.vote": "With an account on Mastodon, you can vote in this poll.", "interaction_modal.login.action": "Take me home", "interaction_modal.login.prompt": "Domain of your home server, e.g. mastodon.social", "interaction_modal.no_account_yet": "Not on Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Follow {name}", "interaction_modal.title.reblog": "Boost {name}'s post", "interaction_modal.title.reply": "Reply to {name}'s post", + "interaction_modal.title.vote": "Vote in {name}'s poll", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", From b1d3c645255db900de0a7ed3b1bd1e033c21cae8 Mon Sep 17 00:00:00 2001 From: Hugo Gameiro Date: Mon, 28 Oct 2024 13:32:56 +0000 Subject: [PATCH 391/467] Fix and improve batch attachment deletion handling when using OpenStack Swift (#32637) --- app/lib/attachment_batch.rb | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/lib/attachment_batch.rb b/app/lib/attachment_batch.rb index 32ccb0b13c1fb1..374abfac49038d 100644 --- a/app/lib/attachment_batch.rb +++ b/app/lib/attachment_batch.rb @@ -77,10 +77,22 @@ def remove_files when :fog logger.debug { "Deleting #{attachment.path(style)}" } + retries = 0 begin attachment.send(:directory).files.new(key: attachment.path(style)).destroy - rescue Fog::Storage::OpenStack::NotFound - # Ignore failure to delete a file that has already been deleted + rescue Fog::OpenStack::Storage::NotFound + logger.debug "Will ignore because file is not found #{attachment.path(style)}" + rescue => e + retries += 1 + + if retries < MAX_RETRY + logger.debug "Retry #{retries}/#{MAX_RETRY} after #{e.message}" + sleep 2**retries + retry + else + logger.error "Batch deletion from fog failed after #{e.message}" + raise e + end end when :azure logger.debug { "Deleting #{attachment.path(style)}" } From 6f5eb22135d24c6e9669989a89c643fe343173bf Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 28 Oct 2024 09:41:56 -0400 Subject: [PATCH 392/467] Mailer header partial access cleanup (#32585) --- app/views/application/mailer/_heading.html.haml | 12 ++++++------ app/views/notification_mailer/favourite.html.haml | 5 ++++- app/views/notification_mailer/follow.html.haml | 5 ++++- .../notification_mailer/follow_request.html.haml | 5 ++++- app/views/notification_mailer/mention.html.haml | 5 ++++- app/views/notification_mailer/reblog.html.haml | 5 ++++- app/views/user_mailer/appeal_approved.html.haml | 5 ++++- app/views/user_mailer/appeal_rejected.html.haml | 5 ++++- app/views/user_mailer/backup_ready.html.haml | 5 ++++- .../user_mailer/confirmation_instructions.html.haml | 4 +++- app/views/user_mailer/email_changed.html.haml | 5 ++++- app/views/user_mailer/failed_2fa.html.haml | 5 ++++- app/views/user_mailer/password_change.html.haml | 5 ++++- .../reconfirmation_instructions.html.haml | 4 +++- .../reset_password_instructions.html.haml | 5 ++++- app/views/user_mailer/suspicious_sign_in.html.haml | 5 ++++- app/views/user_mailer/two_factor_disabled.html.haml | 5 ++++- app/views/user_mailer/two_factor_enabled.html.haml | 5 ++++- .../two_factor_recovery_codes_changed.html.haml | 5 ++++- app/views/user_mailer/warning.html.haml | 4 +++- .../user_mailer/webauthn_credential_added.html.haml | 5 ++++- .../webauthn_credential_deleted.html.haml | 5 ++++- app/views/user_mailer/webauthn_disabled.html.haml | 5 ++++- app/views/user_mailer/webauthn_enabled.html.haml | 5 ++++- app/views/user_mailer/welcome.html.haml | 4 +++- 25 files changed, 98 insertions(+), 30 deletions(-) diff --git a/app/views/application/mailer/_heading.html.haml b/app/views/application/mailer/_heading.html.haml index 9fc5dc7471b5e4..8b1f3f9ffc9659 100644 --- a/app/views/application/mailer/_heading.html.haml +++ b/app/views/application/mailer/_heading.html.haml @@ -1,13 +1,13 @@ +-# locals: (title:, image_url: nil, subtitle: nil) %table.email-w-full.email-header-heading-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-header-heading-td %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - - if defined?(heading_image_url) + - if image_url %td.email-header-heading-img-td - = image_tag heading_image_url, alt: '', width: 56, height: 56 + = image_tag image_url, alt: '', width: 56, height: 56 %td.email-header-heading-txt-td - - if defined?(heading_title) - %h1= heading_title - - if defined?(heading_subtitle) - %p= heading_subtitle + %h1= title + - if subtitle + %p= subtitle diff --git a/app/views/notification_mailer/favourite.html.haml b/app/views/notification_mailer/favourite.html.haml index 62c0a39abe14f0..ec2a048ba7f97d 100644 --- a/app/views/notification_mailer/favourite.html.haml +++ b/app/views/notification_mailer/favourite.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('notification_mailer.favourite.title'), heading_subtitle: t('notification_mailer.favourite.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/favorite.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/favorite.png'), + subtitle: t('notification_mailer.favourite.body', name: @account.pretty_acct), + title: t('notification_mailer.favourite.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/notification_mailer/follow.html.haml b/app/views/notification_mailer/follow.html.haml index 8247aa5b448d21..4e23f7fae71b38 100644 --- a/app/views/notification_mailer/follow.html.haml +++ b/app/views/notification_mailer/follow.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('notification_mailer.follow.title'), heading_subtitle: t('notification_mailer.follow.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/user.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/user.png'), + subtitle: t('notification_mailer.follow.body', name: @account.pretty_acct), + title: t('notification_mailer.follow.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/notification_mailer/follow_request.html.haml b/app/views/notification_mailer/follow_request.html.haml index 9344ef7eb38031..13a5cf87e8ef84 100644 --- a/app/views/notification_mailer/follow_request.html.haml +++ b/app/views/notification_mailer/follow_request.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('notification_mailer.follow_request.title'), heading_subtitle: t('notification_mailer.follow_request.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/follow.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/follow.png'), + subtitle: t('notification_mailer.follow_request.body', name: @account.pretty_acct), + title: t('notification_mailer.follow_request.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/notification_mailer/mention.html.haml b/app/views/notification_mailer/mention.html.haml index 83fa5086a6b252..419d0b76eaa018 100644 --- a/app/views/notification_mailer/mention.html.haml +++ b/app/views/notification_mailer/mention.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('notification_mailer.mention.title'), heading_subtitle: t('notification_mailer.mention.body', name: @status.account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/mention.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/mention.png'), + subtitle: t('notification_mailer.mention.body', name: @status.account.pretty_acct), + title: t('notification_mailer.mention.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/notification_mailer/reblog.html.haml b/app/views/notification_mailer/reblog.html.haml index f91c678cf535f2..f097211bc5aa70 100644 --- a/app/views/notification_mailer/reblog.html.haml +++ b/app/views/notification_mailer/reblog.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('notification_mailer.reblog.title'), heading_subtitle: t('notification_mailer.reblog.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/boost.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/boost.png'), + subtitle: t('notification_mailer.reblog.body', name: @account.pretty_acct), + title: t('notification_mailer.reblog.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/appeal_approved.html.haml b/app/views/user_mailer/appeal_approved.html.haml index 54e9a94a544c16..2da3e0d3eb6c24 100644 --- a/app/views/user_mailer/appeal_approved.html.haml +++ b/app/views/user_mailer/appeal_approved.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.appeal_approved.title'), heading_subtitle: t('user_mailer.appeal_approved.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-approved.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/appeal-approved.png'), + subtitle: t('user_mailer.appeal_approved.subtitle'), + title: t('user_mailer.appeal_approved.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/appeal_rejected.html.haml b/app/views/user_mailer/appeal_rejected.html.haml index b493712b05cf56..6f9282507b34b9 100644 --- a/app/views/user_mailer/appeal_rejected.html.haml +++ b/app/views/user_mailer/appeal_rejected.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.appeal_rejected.title'), heading_subtitle: t('user_mailer.appeal_rejected.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-rejected.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/appeal-rejected.png'), + subtitle: t('user_mailer.appeal_rejected.subtitle'), + title: t('user_mailer.appeal_rejected.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/backup_ready.html.haml b/app/views/user_mailer/backup_ready.html.haml index 99a48e7fdb4a3d..c25f0b45ddd860 100644 --- a/app/views/user_mailer/backup_ready.html.haml +++ b/app/views/user_mailer/backup_ready.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.backup_ready.title'), heading_subtitle: t('user_mailer.backup_ready.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/archive.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/archive.png'), + subtitle: t('user_mailer.backup_ready.explanation'), + title: t('user_mailer.backup_ready.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/confirmation_instructions.html.haml b/app/views/user_mailer/confirmation_instructions.html.haml index 13e68c722b2fc8..d3e3e8f9305102 100644 --- a/app/views/user_mailer/confirmation_instructions.html.haml +++ b/app/views/user_mailer/confirmation_instructions.html.haml @@ -1,5 +1,7 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.confirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/email.png'), + title: t('devise.mailer.confirmation_instructions.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/email_changed.html.haml b/app/views/user_mailer/email_changed.html.haml index 71678ad029aead..33e35a314b6c1d 100644 --- a/app/views/user_mailer/email_changed.html.haml +++ b/app/views/user_mailer/email_changed.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.email_changed.title'), heading_subtitle: t('devise.mailer.email_changed.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/email.png'), + subtitle: t('devise.mailer.email_changed.explanation'), + title: t('devise.mailer.email_changed.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/failed_2fa.html.haml b/app/views/user_mailer/failed_2fa.html.haml index e1da35ce062c21..edac8ef63b67e3 100644 --- a/app/views/user_mailer/failed_2fa.html.haml +++ b/app/views/user_mailer/failed_2fa.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.failed_2fa.title'), heading_subtitle: t('user_mailer.failed_2fa.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/login.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/login.png'), + subtitle: t('user_mailer.failed_2fa.explanation'), + title: t('user_mailer.failed_2fa.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/password_change.html.haml b/app/views/user_mailer/password_change.html.haml index 44c8c0dcafb9b7..350f5bd996727a 100644 --- a/app/views/user_mailer/password_change.html.haml +++ b/app/views/user_mailer/password_change.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.password_change.title'), heading_subtitle: t('devise.mailer.password_change.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/password.png'), + subtitle: t('devise.mailer.password_change.explanation'), + title: t('devise.mailer.password_change.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/reconfirmation_instructions.html.haml b/app/views/user_mailer/reconfirmation_instructions.html.haml index 854887a7e01ba0..6f6954f705ab1a 100644 --- a/app/views/user_mailer/reconfirmation_instructions.html.haml +++ b/app/views/user_mailer/reconfirmation_instructions.html.haml @@ -1,5 +1,7 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.reconfirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/email.png'), + title: t('devise.mailer.reconfirmation_instructions.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/reset_password_instructions.html.haml b/app/views/user_mailer/reset_password_instructions.html.haml index a1384fcc270a6d..5a1480867c97c3 100644 --- a/app/views/user_mailer/reset_password_instructions.html.haml +++ b/app/views/user_mailer/reset_password_instructions.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.reset_password_instructions.title'), heading_subtitle: t('devise.mailer.reset_password_instructions.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/password.png'), + subtitle: t('devise.mailer.reset_password_instructions.explanation'), + title: t('devise.mailer.reset_password_instructions.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/suspicious_sign_in.html.haml b/app/views/user_mailer/suspicious_sign_in.html.haml index deee7a1ce16db1..890d883c44008b 100644 --- a/app/views/user_mailer/suspicious_sign_in.html.haml +++ b/app/views/user_mailer/suspicious_sign_in.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.suspicious_sign_in.title'), heading_subtitle: t('user_mailer.suspicious_sign_in.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/login.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/login.png'), + subtitle: t('user_mailer.suspicious_sign_in.explanation'), + title: t('user_mailer.suspicious_sign_in.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/two_factor_disabled.html.haml b/app/views/user_mailer/two_factor_disabled.html.haml index 28f6ca66007bc8..4f1559d86cd72b 100644 --- a/app/views/user_mailer/two_factor_disabled.html.haml +++ b/app/views/user_mailer/two_factor_disabled.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_disabled.title'), heading_subtitle: t('devise.mailer.two_factor_disabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-disabled.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/2fa-disabled.png'), + subtitle: t('devise.mailer.two_factor_disabled.subtitle'), + title: t('devise.mailer.two_factor_disabled.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/two_factor_enabled.html.haml b/app/views/user_mailer/two_factor_enabled.html.haml index 691dc661a09c5d..0ed57ea32b7691 100644 --- a/app/views/user_mailer/two_factor_enabled.html.haml +++ b/app/views/user_mailer/two_factor_enabled.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_enabled.title'), heading_subtitle: t('devise.mailer.two_factor_enabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-enabled.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/2fa-enabled.png'), + subtitle: t('devise.mailer.two_factor_enabled.subtitle'), + title: t('devise.mailer.two_factor_enabled.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml index 2d063e4c76919e..cc4c21b83b77f1 100644 --- a/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml +++ b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_recovery_codes_changed.title'), heading_subtitle: t('devise.mailer.two_factor_recovery_codes_changed.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-recovery.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/2fa-recovery.png'), + subtitle: t('devise.mailer.two_factor_recovery_codes_changed.subtitle'), + title: t('devise.mailer.two_factor_recovery_codes_changed.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/warning.html.haml b/app/views/user_mailer/warning.html.haml index 837cde550e5a4d..fe8db974ee93f5 100644 --- a/app/views/user_mailer/warning.html.haml +++ b/app/views/user_mailer/warning.html.haml @@ -1,5 +1,7 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t("user_mailer.warning.title.#{@warning.action}"), heading_image_url: frontend_asset_url('images/mailer-new/heading/warning.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/warning.png'), + title: t("user_mailer.warning.title.#{@warning.action}") %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/webauthn_credential_added.html.haml b/app/views/user_mailer/webauthn_credential_added.html.haml index 3e167662380884..9c5cbdd6762f1b 100644 --- a/app/views/user_mailer/webauthn_credential_added.html.haml +++ b/app/views/user_mailer/webauthn_credential_added.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.added.title'), heading_subtitle: t('devise.mailer.webauthn_credential.added.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-added.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/key-added.png'), + subtitle: t('devise.mailer.webauthn_credential.added.explanation'), + title: t('devise.mailer.webauthn_credential.added.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/webauthn_credential_deleted.html.haml b/app/views/user_mailer/webauthn_credential_deleted.html.haml index 59dcb75d3a812e..decfc02c227108 100644 --- a/app/views/user_mailer/webauthn_credential_deleted.html.haml +++ b/app/views/user_mailer/webauthn_credential_deleted.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.deleted.title'), heading_subtitle: t('devise.mailer.webauthn_credential.deleted.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-deleted.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/key-deleted.png'), + subtitle: t('devise.mailer.webauthn_credential.deleted.explanation'), + title: t('devise.mailer.webauthn_credential.deleted.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/webauthn_disabled.html.haml b/app/views/user_mailer/webauthn_disabled.html.haml index 0f7c534bc4505e..232c9519157db3 100644 --- a/app/views/user_mailer/webauthn_disabled.html.haml +++ b/app/views/user_mailer/webauthn_disabled.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_disabled.title'), heading_subtitle: t('devise.mailer.webauthn_disabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-disabled.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/key-disabled.png'), + subtitle: t('devise.mailer.webauthn_disabled.explanation'), + title: t('devise.mailer.webauthn_disabled.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/webauthn_enabled.html.haml b/app/views/user_mailer/webauthn_enabled.html.haml index cd11aa5a40fe97..955a557de4a07b 100644 --- a/app/views/user_mailer/webauthn_enabled.html.haml +++ b/app/views/user_mailer/webauthn_enabled.html.haml @@ -1,5 +1,8 @@ = content_for :heading do - = render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_enabled.title'), heading_subtitle: t('devise.mailer.webauthn_enabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-enabled.png') + = render 'application/mailer/heading', + image_url: frontend_asset_url('images/mailer-new/heading/key-enabled.png'), + subtitle: t('devise.mailer.webauthn_enabled.explanation'), + title: t('devise.mailer.webauthn_enabled.title') %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-body-padding-td diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index efc6cad3934526..c37104da799d34 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -1,7 +1,9 @@ = content_for :heading do .email-desktop-flex .email-header-left - = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') + = render 'application/mailer/heading', + subtitle: t('user_mailer.welcome.explanation'), + title: t('user_mailer.welcome.title', name: @resource.account.username) .email-header-right .email-header-card %table.email-header-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } From cff1846f803b25ef79ef6db2a30affd2e617faee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:55:45 +0000 Subject: [PATCH 393/467] Update babel monorepo to v7.26.0 (#32659) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 160 +++++++++++++++++++++++++++--------------------------- 1 file changed, 81 insertions(+), 79 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4ef44a7591cef1..1a129ac3675ced 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,55 +42,57 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/code-frame@npm:7.25.9" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/code-frame@npm:7.26.0" dependencies: - "@babel/highlight": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/88562eba0eeb5960b7004e108790aa00183d90cbbe70ce10dad01c2c48141d2ef54d6dcd0c678cc1e456de770ffeb68e28559f4d222c01a110c79aea8733074b + checksum: 10c0/46f7e367714be736b52ea3c01b24f47e2102e210fb83021d1c8237d8fc511b9538909e16e2fcdbb5cb6173e0794e28624309a59014e52fcfb7bde908f5284388 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/compat-data@npm:7.25.9" - checksum: 10c0/8d9fc2074311ce61aaf5bccf740a808644d19d4859caf5fa46d8a7186a1ee0b0d8cbbc23f9371f8b397e84a885bdeab58d5f22d6799ddde55973252aac351a27 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9, @babel/compat-data@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/compat-data@npm:7.26.0" + checksum: 10c0/6325c9151a3c9b0a3a807e854a26255ef66d989bff331475a935af9bb18f160e0fffe6aed550e4e96b63f91efcd874bfbaab2a1f4a2f8d25645d712a0de590fb languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": - version: 7.25.9 - resolution: "@babel/core@npm:7.25.9" + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.25.9" - "@babel/generator": "npm:^7.25.9" + "@babel/code-frame": "npm:^7.26.0" + "@babel/generator": "npm:^7.26.0" "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.25.9" - "@babel/helpers": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.0" "@babel/template": "npm:^7.25.9" "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/40d3064ebe906f65ed4153a0f4d75c679a19e4d71e425035b7bbe2d292a9167274f1a0d908d4d6c8f484fcddeb10bd91e0c7878fdb3dfad1bb00f6a319ce431d + checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e languageName: node linkType: hard -"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.7.2": - version: 7.25.9 - resolution: "@babel/generator@npm:7.25.9" +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.7.2": + version: 7.26.0 + resolution: "@babel/generator@npm:7.26.0" dependencies: - "@babel/types": "npm:^7.25.9" + "@babel/parser": "npm:^7.26.0" + "@babel/types": "npm:^7.26.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/fca49a1440ac550bb835a73c0e8314849cd493a468a5431ca7f9dbb3d3443e3a1a6dcba2426752e8a97cc2feed4a3b7a0c639e1c45871c4a9dd0c994f08dd25a + checksum: 10c0/b6bb9185f19a97eaf58e04a6d39a13237076678e7ed16b6321dea914535d4bf6a8d7727c9dcb65539845aa0096b326eb67be4bab764bd74bcfd848e2eda68609 languageName: node linkType: hard @@ -201,17 +203,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-transforms@npm:7.25.9" +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" dependencies: "@babel/helper-module-imports": "npm:^7.25.9" - "@babel/helper-simple-access": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" "@babel/traverse": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/cd005e7585806845d79c5c0ca9e8926f186b430b0a558dad08a3611365eaad3ac587672b0d903530117dec454f48b6bdc3d164b19ea1b71ca1b4eb3be7b452ef + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a languageName: node linkType: hard @@ -309,36 +310,24 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helpers@npm:7.25.9" +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" dependencies: "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/4354fbf050291937d0f127f6f927a0c471b604524e0767516fefb91dc36427f25904dd0d2b2b3bbc66bce1894c680cc37eac9ab46970d70f24bf3e53375612de + "@babel/types": "npm:^7.26.0" + checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097 languageName: node linkType: hard -"@babel/highlight@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/highlight@npm:7.25.9" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": + version: 7.26.1 + resolution: "@babel/parser@npm:7.26.1" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/ae0ed93c151b85a07df42936117fa593ce91563a22dfc8944a90ae7088c9679645c33e00dcd20b081c1979665d65f986241172dae1fc9e5922692fc3ff685a49 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/parser@npm:7.25.9" - dependencies: - "@babel/types": "npm:^7.25.9" + "@babel/types": "npm:^7.26.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/143faff8a72331be5ed94080e0f4645cbeea814fb488cd9210154083735f67cb66fde32f6a4a80efd6c4cdf12c6f8b50995a465846093c7f65c5da8d7829627c + checksum: 10c0/dc7d4e6b7eb667fa0784e7e2c3f6f92ca12ad72242f6d4311995310dae55093f02acdb595b69b0dbbf04cb61ad87156ac03186ff32eacfa35149c655bc22c14b languageName: node linkType: hard @@ -443,25 +432,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.9" +"@babel/plugin-syntax-import-assertions@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f5a022b8a7f3585cf1586535224b06ae380983d3c14f7127b82792ef50cd8194047080540c8abec7aa8f8bfe7d774d71a1ee91f4fd3fa0277f7ffe2d3c6c4977 + checksum: 10c0/525b174e60b210d96c1744c1575fc2ddedcc43a479cba64a5344cf77bd0541754fc58120b5a11ff832ba098437bb05aa80900d1f49bb3d888c5e349a4a3a356e languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.9" +"@babel/plugin-syntax-import-attributes@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bbdf97ba088c3d482492f6c3376422752b1723ce32e3ac11b000faf3c942d68e418c8a911431cb05d5e300d008cc37cd5518e89807a5813c2ac8fdd82d171f8d + checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 languageName: node linkType: hard @@ -669,15 +658,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.9" +"@babel/plugin-transform-class-static-block@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" dependencies: "@babel/helper-create-class-features-plugin": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/696a3a8acde79d6fee4f685ee1353bf483c4cd50a38e586a1a044268df72d87f9b1a3b7c473def6cde836aa69931fd5a75560bb9ee3a635ebde8911575ed49ca + checksum: 10c0/cdcf5545ae6514ed75fbd73cccfa209c6a5dfdf0c2bb7bb62c0fb4ec334a32281bcf1bc16ace494d9dbe93feb8bdc0bd3cf9d9ccb6316e634a67056fa13b741b languageName: node linkType: hard @@ -1133,6 +1122,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4abc1db6c964efafc7a927cda814c7275275afa4b530483e0936fd614de23cb5802f7ca43edaa402008a723d4e7eac282b6f5283aa2eeb3b27da6d6c1dd7f8ed + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" @@ -1279,10 +1280,10 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.25.9 - resolution: "@babel/preset-env@npm:7.25.9" + version: 7.26.0 + resolution: "@babel/preset-env@npm:7.26.0" dependencies: - "@babel/compat-data": "npm:^7.25.9" + "@babel/compat-data": "npm:^7.26.0" "@babel/helper-compilation-targets": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.25.9" "@babel/helper-validator-option": "npm:^7.25.9" @@ -1292,8 +1293,8 @@ __metadata: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.25.9" - "@babel/plugin-syntax-import-attributes": "npm:^7.25.9" + "@babel/plugin-syntax-import-assertions": "npm:^7.26.0" + "@babel/plugin-syntax-import-attributes": "npm:^7.26.0" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" @@ -1301,7 +1302,7 @@ __metadata: "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9" "@babel/plugin-transform-block-scoping": "npm:^7.25.9" "@babel/plugin-transform-class-properties": "npm:^7.25.9" - "@babel/plugin-transform-class-static-block": "npm:^7.25.9" + "@babel/plugin-transform-class-static-block": "npm:^7.26.0" "@babel/plugin-transform-classes": "npm:^7.25.9" "@babel/plugin-transform-computed-properties": "npm:^7.25.9" "@babel/plugin-transform-destructuring": "npm:^7.25.9" @@ -1334,6 +1335,7 @@ __metadata: "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" "@babel/plugin-transform-property-literals": "npm:^7.25.9" "@babel/plugin-transform-regenerator": "npm:^7.25.9" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0" "@babel/plugin-transform-reserved-words": "npm:^7.25.9" "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" "@babel/plugin-transform-spread": "npm:^7.25.9" @@ -1352,7 +1354,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b8b391e3fe69918a2a4f4366034113bd6f57c9748974dbe1b807a728bc41434f1e003cb4204ca63a2a01cbb7c05ba96036261b64756243374374353931d346e6 + checksum: 10c0/26e19dc407cfa1c5166be638b4c54239d084fe15d8d7e6306d8c6dc7bc1decc51070a8dcf28352c1a2feeefbe52a06d193a12e302327ad5f529583df75fb7a26 languageName: node linkType: hard @@ -1386,8 +1388,8 @@ __metadata: linkType: hard "@babel/preset-typescript@npm:^7.21.5": - version: 7.25.9 - resolution: "@babel/preset-typescript@npm:7.25.9" + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.9" "@babel/helper-validator-option": "npm:^7.25.9" @@ -1396,7 +1398,7 @@ __metadata: "@babel/plugin-transform-typescript": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/cbcc5b4bf2891e367627338961113febbe58d361e9a03bd2c8340ede914870f74db35ee367cfd8d0fca0872149bfb58b090d0a4815de7c05d0a8abb3d961eead + checksum: 10c0/20d86bc45d2bbfde2f84fc7d7b38746fa6481d4bde6643039ad4b1ff0b804c6d210ee43e6830effd8571f2ff43fa7ffd27369f42f2b3a2518bb92dc86c780c61 languageName: node linkType: hard @@ -1410,11 +1412,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.25.9 - resolution: "@babel/runtime@npm:7.25.9" + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/d1727a47eab67b8a742cbf1ef336a20c3d906fe65d6316d073c72479125addfa4358c44dd7b95d114f241b93409b134fad7cea43f3bf8ca7e2ef344177eb72d8 + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 languageName: node linkType: hard @@ -1444,13 +1446,13 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.9 - resolution: "@babel/types@npm:7.25.9" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/33890d08bcb06b26a3a60e4c6c996cbdf2b8d8a3c212664de659c2775f80b002c5f2bceedaa309c384ff5e99bd579794fe6a7e41de07df70246f43c55016d349 + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 languageName: node linkType: hard From dc077437d5daa5e5cb154f0be7878d2fe8028529 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 29 Oct 2024 04:37:43 -0400 Subject: [PATCH 394/467] Misc gem version bumps (#32684) --- Gemfile.lock | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4c9ccaabd175bc..8fff112872cd89 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,8 +100,8 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.992.0) - aws-sdk-core (3.210.0) + aws-partitions (1.997.0) + aws-sdk-core (3.211.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -113,7 +113,7 @@ GEM aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.0) + aws-sigv4 (1.10.1) aws-eventstream (~> 1, >= 1.0.2) azure-storage-blob (2.0.3) azure-storage-common (~> 2.0) @@ -179,7 +179,7 @@ GEM bigdecimal rexml crass (1.0.6) - css_parser (1.19.0) + css_parser (1.19.1) addressable csv (3.3.0) database_cleaner-active_record (2.2.0) @@ -231,7 +231,7 @@ GEM erubi (1.13.0) et-orbi (1.2.11) tzinfo - excon (0.111.0) + excon (0.112.0) fabrication (2.31.0) faker (3.5.1) i18n (>= 1.8.11, < 2) @@ -262,7 +262,7 @@ GEM faraday (~> 1.0) fast_blank (1.0.1) fastimage (2.3.1) - ffi (1.16.3) + ffi (1.17.0) ffi-compiler (1.3.2) ffi (>= 1.15.5) rake @@ -351,7 +351,7 @@ GEM rdoc (>= 4.0.0) reline (>= 0.4.2) jmespath (1.6.2) - json (2.7.2) + json (2.7.4) json-canonicalization (1.0.0) json-jwt (1.15.3.1) activesupport (>= 4.2) @@ -412,7 +412,7 @@ GEM activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.22.0) + loofah (2.23.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -436,7 +436,7 @@ GEM mini_mime (1.1.5) mini_portile2 (2.8.7) minitest (5.25.1) - msgpack (1.7.2) + msgpack (1.7.3) multi_json (1.15.0) multipart-post (2.4.1) mutex_m (0.2.0) @@ -444,7 +444,7 @@ GEM uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.4.15) + net-imap (0.5.0) date net-protocol net-ldap (0.19.0) @@ -699,9 +699,9 @@ GEM responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.3.8) + rexml (3.3.9) rotp (6.3.0) - rouge (4.3.0) + rouge (4.4.0) rpam2 (4.0.2) rqrcode (2.2.0) chunky_png (~> 1.0) @@ -711,14 +711,14 @@ GEM rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.1) + rspec-core (3.13.2) rspec-support (~> 3.13.0) - rspec-expectations (3.13.2) + rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-github (2.4.0) rspec-core (~> 3.0) - rspec-mocks (3.13.1) + rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-rails (7.0.1) @@ -752,12 +752,12 @@ GEM rubocop-performance (1.22.1) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.26.2) + rubocop-rails (2.27.0) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.1.0) + rubocop-rspec (3.2.0) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) From b107fc2e6520579ca2ae8f3d556f88694a8db37f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 29 Oct 2024 04:54:30 -0400 Subject: [PATCH 395/467] Use nil for timestamp column in admin/confirmations spec (#32682) --- spec/controllers/admin/confirmations_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/admin/confirmations_controller_spec.rb b/spec/controllers/admin/confirmations_controller_spec.rb index 95591607867c8b..59ea0121cacc9b 100644 --- a/spec/controllers/admin/confirmations_controller_spec.rb +++ b/spec/controllers/admin/confirmations_controller_spec.rb @@ -11,7 +11,7 @@ describe 'POST #create' do it 'confirms the user' do - user = Fabricate(:user, confirmed_at: false) + user = Fabricate(:user, confirmed_at: nil) post :create, params: { account_id: user.account.id } expect(response).to redirect_to(admin_accounts_path) From d94a367aebc0d047e567697640a41ed12c33d77d Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 29 Oct 2024 10:25:38 +0100 Subject: [PATCH 396/467] Add test coverage for POST /api/v2/media's max description length (#32683) --- spec/requests/api/v2/media_spec.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spec/requests/api/v2/media_spec.rb b/spec/requests/api/v2/media_spec.rb index 70e0679f57442c..807e427d3f747f 100644 --- a/spec/requests/api/v2/media_spec.rb +++ b/spec/requests/api/v2/media_spec.rb @@ -29,6 +29,22 @@ end end + context 'when media description is too long' do + let(:params) do + { + file: fixture_file_upload('attachment-jpg.123456_abcd', 'image/jpeg'), + description: 'aa' * MediaAttachment::MAX_DESCRIPTION_LENGTH, + } + end + + it 'returns http error' do + post '/api/v2/media', headers: headers, params: params + + expect(response).to have_http_status(422) + expect(response.body).to include 'Description is too long' + end + end + context 'when large format media attachment has not been processed' do let(:params) { { file: fixture_file_upload('attachment.webm', 'video/webm') } } From 244aaf9a38a31b63624fca9ff89482ce1fec3a90 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 09:29:22 +0000 Subject: [PATCH 397/467] New Crowdin Translations (automated) (#32687) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ast.json | 1 + app/javascript/mastodon/locales/be.json | 16 +++++++++++++ app/javascript/mastodon/locales/ca.json | 4 ++++ app/javascript/mastodon/locales/da.json | 2 ++ app/javascript/mastodon/locales/de.json | 2 ++ app/javascript/mastodon/locales/eo.json | 6 +++-- app/javascript/mastodon/locales/es-AR.json | 2 ++ app/javascript/mastodon/locales/es-MX.json | 2 ++ app/javascript/mastodon/locales/es.json | 2 ++ app/javascript/mastodon/locales/fi.json | 2 ++ app/javascript/mastodon/locales/fo.json | 2 ++ app/javascript/mastodon/locales/gl.json | 2 +- app/javascript/mastodon/locales/he.json | 2 ++ app/javascript/mastodon/locales/hu.json | 2 ++ app/javascript/mastodon/locales/is.json | 2 ++ app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/lt.json | 2 ++ app/javascript/mastodon/locales/nl.json | 2 ++ app/javascript/mastodon/locales/pl.json | 2 ++ app/javascript/mastodon/locales/pt-BR.json | 2 ++ app/javascript/mastodon/locales/sq.json | 2 ++ app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/tr.json | 2 ++ app/javascript/mastodon/locales/uk.json | 2 ++ app/javascript/mastodon/locales/vi.json | 2 ++ app/javascript/mastodon/locales/zh-CN.json | 2 ++ app/javascript/mastodon/locales/zh-TW.json | 2 ++ config/locales/eo.yml | 26 ++++++++++++++++++++++ config/locales/simple_form.eo.yml | 5 +++++ 29 files changed, 99 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index f2a0c22a771550..e5b1168bea00b2 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -214,6 +214,7 @@ "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.follow": "Siguir a la etiqueta", "hashtag.unfollow": "Dexar de siguir a la etiqueta", + "hints.threads.replies_may_be_missing": "Ye posible que falten les rempuestes d'otros sirvidores.", "home.column_settings.show_reblogs": "Amosar los artículos compartíos", "home.column_settings.show_replies": "Amosar les rempuestes", "home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 8423e36ba0527d..97d4dc4b4c9f98 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -98,6 +98,8 @@ "block_modal.title": "Заблакіраваць карыстальніка?", "block_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.", "boost_modal.combo": "Націсніце {combo}, каб прапусціць наступным разам", + "boost_modal.reblog": "Пашырыць допіс?", + "boost_modal.undo_reblog": "Прыбраць допіс?", "bundle_column_error.copy_stacktrace": "Скапіраваць справаздачу пра памылку", "bundle_column_error.error.body": "Запытаная старонка не можа быць адлюстраваная. Гэта магло стацца праз хібу ў нашым кодзе, або праз памылку сумяшчальнасці з браўзерам.", "bundle_column_error.error.title": "Халера!", @@ -156,6 +158,7 @@ "compose_form.poll.duration": "Працягласць апытання", "compose_form.poll.multiple": "Множны выбар", "compose_form.poll.option_placeholder": "Варыянт {number}", + "compose_form.poll.single": "Адзін варыянт", "compose_form.poll.switch_to_multiple": "Змяніце апытанне, каб дазволіць некалькі варыянтаў адказу", "compose_form.poll.switch_to_single": "Змяніце апытанне, каб дазволіць адзіны варыянт адказу", "compose_form.poll.type": "Стыль", @@ -194,6 +197,7 @@ "confirmations.unfollow.title": "Адпісацца ад карыстальніка?", "content_warning.hide": "Схаваць допіс", "content_warning.show": "Усё адно паказаць", + "content_warning.show_more": "Паказаць усё роўна", "conversation.delete": "Выдаліць размову", "conversation.mark_as_read": "Адзначыць прачытаным", "conversation.open": "Прагледзець размову", @@ -219,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Ніхто з гэтага сервера не зможа падпісацца на вас.", "domain_block_modal.they_wont_know": "Карыстальнік не будзе ведаць пра блакіроўку.", "domain_block_modal.title": "Заблакіраваць дамен?", + "domain_block_modal.you_will_lose_num_followers": "Вы страціце {followersCount, plural, one {{followersCountDisplay} падпісчыка} other {{followersCountDisplay} падпісчыкаў}} і {followingCount, plural, one {{followingCountDisplay} чалавека, на якога падпісаны} other {{followingCountDisplay} людзей, на якіх падпісаны}}.", + "domain_block_modal.you_will_lose_relationships": "Вы страціце ўсех падпісчыкаў і людзей на якіх падпісаны на гэтым.", "domain_block_modal.you_wont_see_posts": "Вы не ўбачыце допісаў і апавяшчэнняў ад карыстальнікаў з гэтага сервера.", "domain_pill.activitypub_lets_connect": "Ён дазваляе вам узаемадзейнічаць не толькі з карыстальнікамі Mastodon, але і розных іншых сацыяльных платформ.", "domain_pill.activitypub_like_language": "ActivityPub — гэта мова, на якой Mastodon размаўляе з іншымі сацыяльнымі сеткамі.", @@ -300,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую", "filter_modal.select_filter.title": "Фільтраваць гэты допіс", "filter_modal.title.status": "Фільтраваць допіс", + "filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"", "filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце", "filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні", "firehose.all": "Усе", @@ -349,6 +356,9 @@ "hashtag.follow": "Падпісацца на хэштэг", "hashtag.unfollow": "Адпісацца ад хэштэга", "hashtags.and_other": "…і яшчэ {count, plural, other {#}}", + "hints.profiles.followers_may_be_missing": "Падпісчыкі гэтага профілю могуць адсутнічаць.", + "hints.profiles.follows_may_be_missing": "Падпіскі гэтага профілю могуць адсутнічаць.", + "hints.profiles.posts_may_be_missing": "Некаторыя допісы гэтага профілю могуць адсутнічаць.", "home.column_settings.show_reblogs": "Паказваць пашырэнні", "home.column_settings.show_replies": "Паказваць адказы", "home.hide_announcements": "Схаваць аб'явы", @@ -433,6 +443,7 @@ "lists.subheading": "Вашыя спісы", "load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}", "loading_indicator.label": "Загрузка…", + "media_gallery.hide": "Схаваць", "moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.", "mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў", "mute_modal.hide_options": "Схаваць опцыі", @@ -478,11 +489,13 @@ "notification.favourite": "Ваш допіс упадабаны {name}", "notification.follow": "{name} падпісаўся на вас", "notification.follow_request": "{name} адправіў запыт на падпіску", + "notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас", "notification.label.mention": "Згадванне", "notification.label.private_mention": "Асабістае згадванне", "notification.label.private_reply": "Асабісты адказ", "notification.label.reply": "Адказ", "notification.mention": "Згадванне", + "notification.mentioned_you": "{name} згадаў вас", "notification.moderation-warning.learn_more": "Даведацца больш", "notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі", "notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.", @@ -495,6 +508,7 @@ "notification.own_poll": "Ваша апытанне скончылася", "notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася", "notification.reblog": "{name} пашырыў ваш допіс", + "notification.reblog.name_and_others_with_link": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} абагулілі ваш допіс", "notification.relationships_severance_event": "Страціў сувязь з {name}", "notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.", "notification.relationships_severance_event.domain_block": "Адміністратар з {from} заблакіраваў {target}, у тым ліку {followersCount} вашых падпісчыка(-аў) і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}.", @@ -524,6 +538,7 @@ "notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі", "notifications.column_settings.follow": "Новыя падпісчыкі:", "notifications.column_settings.follow_request": "Новыя запыты на падпіску:", + "notifications.column_settings.group": "Аб'яднаць апавяшчэнні ад падпісчыкаў", "notifications.column_settings.mention": "Згадванні:", "notifications.column_settings.poll": "Вынікі апытання:", "notifications.column_settings.push": "Push-апавяшчэнні", @@ -742,6 +757,7 @@ "status.edit": "Рэдагаваць", "status.edited": "Апошняе рэдагаванне {date}", "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}", + "status.embed": "Атрымаць убудаваны код", "status.favourite": "Упадабанае", "status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}", "status.filter": "Фільтраваць гэты допіс", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 678f4da1752609..e5c8440236b684 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Deixar de seguir l'usuari?", "content_warning.hide": "Amaga la publicació", "content_warning.show": "Mostra-la igualment", + "content_warning.show_more": "Mostra'n més", "conversation.delete": "Elimina la conversa", "conversation.mark_as_read": "Marca com a llegida", "conversation.open": "Mostra la conversa", @@ -305,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova", "filter_modal.select_filter.title": "Filtra aquest tut", "filter_modal.title.status": "Filtra un tut", + "filter_warning.matches_filter": "Coincideix amb el filtre “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {De ningú} one {D'una persona} other {De # persones}} que potser coneixes", "filtered_notifications_banner.title": "Notificacions filtrades", "firehose.all": "Tots", @@ -384,6 +386,7 @@ "interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.", "interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquest tut per a compartir-lo amb els teus seguidors.", "interaction_modal.description.reply": "Amb un compte a Mastodon, pots respondre aquest tut.", + "interaction_modal.description.vote": "Si teniu compte a Mastodon, podeu votar aquesta enquesta.", "interaction_modal.login.action": "Torna a l'inici", "interaction_modal.login.prompt": "Domini del teu servidor domèstic, p.ex. mastodon.social", "interaction_modal.no_account_yet": "No a Mastodon?", @@ -395,6 +398,7 @@ "interaction_modal.title.follow": "Segueix {name}", "interaction_modal.title.reblog": "Impulsa el tut de {name}", "interaction_modal.title.reply": "Respon al tut de {name}", + "interaction_modal.title.vote": "Voteu l'enquesta de {name}", "intervals.full.days": "{number, plural, one {# dia} other {# dies}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index f8a1f2ad65aa0b..55315764479eb8 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -385,6 +385,7 @@ "interaction_modal.description.follow": "Med en konto på Mastodon kan du følge {name} for at modtage vedkommendes indlæg i dit hjemmefeed.", "interaction_modal.description.reblog": "Med en konto på Mastodon kan dette indlæg fremhæves så det deles med egne følgere.", "interaction_modal.description.reply": "Med en konto på Mastodon kan dette indlæg besvares.", + "interaction_modal.description.vote": "Med en konto på Mastodon kan man deltage i denne afstemning.", "interaction_modal.login.action": "Gå til hjemmeserver", "interaction_modal.login.prompt": "Hjemmeserverdomænet, f.eks. mastodon.social", "interaction_modal.no_account_yet": "Ikke på Mastodon?", @@ -396,6 +397,7 @@ "interaction_modal.title.follow": "Følg {name}", "interaction_modal.title.reblog": "Boost {name}s indlæg", "interaction_modal.title.reply": "Besvar {name}s indlæg", + "interaction_modal.title.vote": "Deltag i {name}s afstemning", "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index a02f13aef0a9b0..1d59b1472448af 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.", "interaction_modal.description.reblog": "Mit einem Mastodon-Konto kannst du die Reichweite dieses Beitrags erhöhen, indem du ihn mit deinen Followern teilst.", "interaction_modal.description.reply": "Mit einem Mastodon-Konto kannst du auf diesen Beitrag antworten.", + "interaction_modal.description.vote": "Mit einem Mastodon-Konto kannst du an dieser Umfrage teilnehmen.", "interaction_modal.login.action": "Zurück zur Startseite", "interaction_modal.login.prompt": "Adresse deines Servers, z. B. mastodon.social", "interaction_modal.no_account_yet": "Nicht auf Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Folge {name}", "interaction_modal.title.reblog": "Beitrag von {name} teilen", "interaction_modal.title.reply": "Auf Beitrag von {name} antworten", + "interaction_modal.title.vote": "An der Umfrage von {name} teilnehmen", "intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}", "intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}", "intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 0c9118228546c9..7abe0783c39f43 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.", + "interaction_modal.description.vote": "Kun konto ĉe Mastodon, vi povas voĉdoni en ĉi tiu balotenketo.", "interaction_modal.login.action": "Prenu min hejmen", "interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social", "interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Sekvi {name}", "interaction_modal.title.reblog": "Akceli la afiŝon de {name}", "interaction_modal.title.reply": "Respondi al la afiŝo de {name}", + "interaction_modal.title.vote": "Voĉdonu en la balotenketo de {name}", "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", @@ -527,7 +529,7 @@ "notification.moderation_warning.action_sensitive": "Viaj afiŝoj estos markitaj kiel sentemaj ekde nun.", "notification.moderation_warning.action_silence": "Via konto estis limigita.", "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", - "notification.own_poll": "Via enketo finiĝis", + "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", "notification.reblog.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} diskonigis vian afiŝon", @@ -659,7 +661,7 @@ "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}", "poll.vote": "Voĉdoni", - "poll.voted": "Vi elektis por ĉi tiu respondo", + "poll.voted": "Vi voĉdonis por ĉi tiu respondo", "poll.votes": "{votes, plural, one {# voĉdono} other {# voĉdonoj}}", "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 55e64faba58ad3..e1803aabdaff0d 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.", + "interaction_modal.description.vote": "Con una cuenta en Mastodon, puedes votar en esta encuesta.", "interaction_modal.login.action": "Llevame al comienzo", "interaction_modal.login.prompt": "Dominio de su servidor de inicio, p. ej., mastodon.social", "interaction_modal.no_account_yet": "¿No tenés cuenta en Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Adherir al mensaje de {name}", "interaction_modal.title.reply": "Responder al mensaje de {name}", + "interaction_modal.title.vote": "Vota en la encuesta de {name}", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index f4e0352450d930..af2bd0e528e533 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu fuente de inicio.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.", + "interaction_modal.description.vote": "Con una cuenta en Mastodon, puedes votar en esta encuesta.", "interaction_modal.login.action": "Ir a Inicio", "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo: mastodon.social", "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Impulsar la publicación de {name}", "interaction_modal.title.reply": "Responder la publicación de {name}", + "interaction_modal.title.vote": "Vota en la encuesta de {name}", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 30a4b91fa23645..dea526f8a0c218 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu línea temporal de inicio.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.", + "interaction_modal.description.vote": "Con una cuenta en Mastodon, puedes votar en esta encuesta.", "interaction_modal.login.action": "Ir a Inicio", "interaction_modal.login.prompt": "Dominio de tu servidor, por ejemplo mastodon.social", "interaction_modal.no_account_yet": "¿Aún no tienes cuenta en Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Impulsar la publicación de {name}", "interaction_modal.title.reply": "Responder a la publicación de {name}", + "interaction_modal.title.vote": "Vota en la encuesta de {name}", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 37f3b87e84fae5..0455e4df29ba63 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", + "interaction_modal.description.vote": "Mastodon-tilillä voit osallistua tähän äänestykseen.", "interaction_modal.login.action": "Siirry kotiin", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", "interaction_modal.title.reply": "Vastaa käyttäjän {name} julkaisuun", + "interaction_modal.title.vote": "Osallistu käyttäjän {name} äänestykseen", "intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}", "intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}", "intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 921f38468c130c..e15385725a0097 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Við eini kontu á Mastodon kanst tú fylgja {name} fyri at síggja teirra postar á tíni heimarás.", "interaction_modal.description.reblog": "Við eini kontu á Mastodon kanst tú stimbra hendan postin og soleiðis deila hann við tínar fylgjarar.", "interaction_modal.description.reply": "Við eini kontu á Mastodon, so kanst tú svara hesum posti.", + "interaction_modal.description.vote": "Við eini kontu á Mastodon, so kanst tú atkvøða í hesi spurnarkanningini.", "interaction_modal.login.action": "Tak meg heim", "interaction_modal.login.prompt": "Navnaøki hjá tínum heimaambætara, t.d. mastodon.social", "interaction_modal.no_account_yet": "Ikki á Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Fylg {name}", "interaction_modal.title.reblog": "Stimbra postin hjá {name}", "interaction_modal.title.reply": "Svara postinum hjá {name}", + "interaction_modal.title.vote": "Atkvøði í spurnarkanningini hjá {name}", "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# tími} other {# tímar}}", "intervals.full.minutes": "{number, plural, one {# minuttur} other {# minuttir}}", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index a772dbc0f78034..822666ad8c7905 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -452,7 +452,7 @@ "lists.exclusive": "Agocha estas publicacións no Inicio", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", - "lists.replies_policy.followed": "Toda usuaria seguida", + "lists.replies_policy.followed": "Calquera usuaria que siga", "lists.replies_policy.list": "Membros da lista", "lists.replies_policy.none": "Ninguén", "lists.replies_policy.title": "Mostrar respostas a:", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 087eed903032cc..ed08a9aba3e570 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "עם חשבון מסטודון, ניתן לעקוב אחרי {name} כדי לקבל את הפוסטים שלו/ה בפיד הבית.", "interaction_modal.description.reblog": "עם חשבון מסטודון, ניתן להדהד את החצרוץ ולשתף עם עוקבים.", "interaction_modal.description.reply": "עם חשבון מסטודון, ניתן לענות לחצרוץ.", + "interaction_modal.description.vote": "עם חשבון מסטודון, ניתן להצביע בסקר.", "interaction_modal.login.action": "קח אותי לדף הבית", "interaction_modal.login.prompt": "שם השרת שלך, למשל mastodon.social", "interaction_modal.no_account_yet": "עדיין לא במסטודון?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "לעקוב אחרי {name}", "interaction_modal.title.reblog": "להדהד את החצרוץ של {name}", "interaction_modal.title.reply": "תשובה לחצרוץ של {name}", + "interaction_modal.title.vote": "הצביעו בסקר של {name}", "intervals.full.days": "{number, plural, one {# יום} other {# ימים}}", "intervals.full.hours": "{number, plural, one {# שעה} other {# שעות}}", "intervals.full.minutes": "{number, plural, one {# דקה} other {# דקות}}", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index af0d83954dc420..0933a7c25655d1 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Egy Mastodon-fiókkal követheted {name} fiókját, hogy lásd a bejegyzéseit a kezdőlapodon.", "interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.", "interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.", + "interaction_modal.description.vote": "Egy Mastodon fiókkal szavazhatsz ebben a szavazásban.", "interaction_modal.login.action": "Vigyen haza", "interaction_modal.login.prompt": "A saját kiszolgálód tartományneve, pl.: mastodon.social", "interaction_modal.no_account_yet": "Nem vagy Mastodonon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "{name} követése", "interaction_modal.title.reblog": "{name} bejegyzésének megtolása", "interaction_modal.title.reply": "Válasz {name} bejegyzésére", + "interaction_modal.title.vote": "Szavazz {name} szavazásában", "intervals.full.days": "{number, plural, one {# nap} other {# nap}}", "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}", "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index d1601c7634cb54..8c87298910597d 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Með notandaaðgangi á Mastodon geturðu fylgst með {name} og fengið færslur frá viðkomandi í heimastreymið þitt.", "interaction_modal.description.reblog": "Með notandaaðgangi á Mastodon geturðu endurbirt þessa færslu til að deila henni með þeim sem fylgjast með þér.", "interaction_modal.description.reply": "Með notandaaðgangi á Mastodon geturðu svarað þessari færslu.", + "interaction_modal.description.vote": "Þú getur greitt atkvæði í þessari könnun ef þú ert með aðgang á Mastodon.", "interaction_modal.login.action": "Fara á heimastreymið mitt", "interaction_modal.login.prompt": "Lén heimanetþjónsins þíns, t.d. mastodon.social", "interaction_modal.no_account_yet": "Ekki á Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Fylgjast með {name}", "interaction_modal.title.reblog": "Endurbirta færsluna frá {name}", "interaction_modal.title.reply": "Svara færslunni frá {name}", + "interaction_modal.title.vote": "Greiða atkvæði í könnun á vegum {name}", "intervals.full.days": "{number, plural, one {# dagur} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# klukkustund} other {# klukkustundir}}", "intervals.full.minutes": "{number, plural, one {# mínúta} other {# mínútur}}", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 532fc01ab1ea00..3462675e3e0e1e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -352,7 +352,7 @@ "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", "hashtag.counter_by_accounts": "{count, plural, other {참여자 {counter}명}}", "hashtag.counter_by_uses": "{count, plural, other {게시물 {counter}개}}", - "hashtag.counter_by_uses_today": "금일 {count, plural, other {게시물 {counter}개}}", + "hashtag.counter_by_uses_today": "오늘 {count, plural, other {{counter} 개의 게시물}}", "hashtag.follow": "해시태그 팔로우", "hashtag.unfollow": "해시태그 팔로우 해제", "hashtags.and_other": "…및 {count, plural,other {#개}}", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index b2740b0165ee7d..7d53c2702fc99e 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Su Mastodon paskyra gali sekti {name}, kad gautum jų įrašus į pagrindinį srautą.", "interaction_modal.description.reblog": "Su Mastodon paskyra gali pakelti šią įrašą ir pasidalyti juo su savo sekėjais.", "interaction_modal.description.reply": "Su Mastodon paskyra gali atsakyti į šį įrašą.", + "interaction_modal.description.vote": "Su „Mastodon“ paskyra galite balsuoti šioje apklausoje.", "interaction_modal.login.action": "Į pagrindinį puslapį", "interaction_modal.login.prompt": "Tavo pagrindinio serverio domenas, pvz., mastodon.social.", "interaction_modal.no_account_yet": "Nesi Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Sekti {name}", "interaction_modal.title.reblog": "Pakelti {name} įrašą", "interaction_modal.title.reply": "Atsakyti į {name} įrašą", + "interaction_modal.title.vote": "Balsuoti {name} apklausoje", "intervals.full.days": "{number, plural, one {# diena} few {# dienos} many {# dienos} other {# dienų}}", "intervals.full.hours": "{number, plural, one {# valanda} few {# valandos} many {# valandos} other {# valandų}}", "intervals.full.minutes": "{number, plural, one {# minutė} few {# minutes} many {# minutės} other {# minučių}}", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index e7add2e8c7b5a7..9f265782e111b3 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Je kunt met een Mastodon-account {name} volgen, om zo diens berichten op jouw starttijdlijn te ontvangen.", "interaction_modal.description.reblog": "Je kunt met een Mastodon-account dit bericht boosten, om het zo met jouw volgers te delen.", "interaction_modal.description.reply": "Je kunt met een Mastodon-account op dit bericht reageren.", + "interaction_modal.description.vote": "Met een Mastodon-account kun je stemmen in deze peiling.", "interaction_modal.login.action": "Ga naar start", "interaction_modal.login.prompt": "Domein van jouw server, bv. mastodon.social", "interaction_modal.no_account_yet": "Niet op Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "{name} volgen", "interaction_modal.title.reblog": "Bericht van {name} boosten", "interaction_modal.title.reply": "Op het bericht van {name} reageren", + "interaction_modal.title.vote": "Stemmen in {name}'s peiling", "intervals.full.days": "{number, plural, one {# dag} other {# dagen}}", "intervals.full.hours": "{number, plural, one {# uur} other {# uur}}", "intervals.full.minutes": "{number, plural, one {# minuut} other {# minuten}}", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 5867d6c1a0e0b4..c521fabf390515 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Mając konto na Mastodonie, możesz śledzić {name} by widzieć jego wpisy na swojej głównej osi czasu.", "interaction_modal.description.reblog": "Mając konto na Mastodonie, możesz podbić ten wpis i udostępnić go Twoim obserwującym.", "interaction_modal.description.reply": "Mając konto na Mastodonie, możesz odpowiedzieć na ten wpis.", + "interaction_modal.description.vote": "Mając konto na Mastodonie, możesz wziąć udział w tym głosowaniu.", "interaction_modal.login.action": "Wróć na stronę główną", "interaction_modal.login.prompt": "Domena twojego serwera domowego, np. \"mastodon.social\"", "interaction_modal.no_account_yet": "Nie masz konta na Mastodonie?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Śledź {name}", "interaction_modal.title.reblog": "Podbij wpis {name}", "interaction_modal.title.reply": "Odpowiedz na post {name}", + "interaction_modal.title.vote": "Weź udział w głosowaniu {name}", "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 28c6a07e019191..c620933abe2ae3 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Com uma conta no Mastodon, você pode seguir {name} para receber publicações na sua página inicial.", "interaction_modal.description.reblog": "Com uma conta no Mastodon, você pode impulsionar esta publicação para compartilhá-lo com seus próprios seguidores.", "interaction_modal.description.reply": "Com uma conta no Mastodon, você pode responder a esta publicação.", + "interaction_modal.description.vote": "Com uma conta no Mastodon, você pode votar nesta enquete.", "interaction_modal.login.action": "Leve-me para casa", "interaction_modal.login.prompt": "Domínio do seu servidor hospedeiro; por exemplo, mastodon.social", "interaction_modal.no_account_yet": "Ainda não está no Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seguir {name}", "interaction_modal.title.reblog": "Impulsionar publicação de {name}", "interaction_modal.title.reply": "Responder à publicação de {name}", + "interaction_modal.title.vote": "Votar na enquete de {name}", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index c0199d00783ca6..410d7c2ef3dd2f 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Me një llogari në Mastodon, mund ta ndiqni {name} për të marrë postimet e tyre në prurjen tuaj të kreut.", "interaction_modal.description.reblog": "Me një llogari në Mastodon, mund ta përforconi këtë postim për ta ndarë me ndjekësit tuaj.", "interaction_modal.description.reply": "Me një llogari në Mastodon, mund t’i përgjigjeni këtij postimi.", + "interaction_modal.description.vote": "Me një llogari në Mastodon, mund të votoni në këtë pyetësor.", "interaction_modal.login.action": "Shpjemëni në shtëpi", "interaction_modal.login.prompt": "Përkatësia e shërbyesit tuaj vatër, p.sh. mastodon.social", "interaction_modal.no_account_yet": "S’gjendeni në Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Ndiq {name}", "interaction_modal.title.reblog": "Përforconi postimin e {name}", "interaction_modal.title.reply": "Përgjigjuni postimit të {name}", + "interaction_modal.title.vote": "Votoni te pyetësori nga {name}", "intervals.full.days": "{number, plural, one {# ditë} other {# ditë}}", "intervals.full.hours": "{number, plural, one {# orë} other {# orë}}", "intervals.full.minutes": "{number, plural, one {# minutë} other {# minuta}}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index eae02649a179b6..304535a67c5907 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.", "interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.", "interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.", + "interaction_modal.description.vote": "Med ett konto på Mastodon kan du delta i denna omröstning.", "interaction_modal.login.action": "Ta hem mig", "interaction_modal.login.prompt": "Domän för din hemserver, t.ex. mastodon.social", "interaction_modal.no_account_yet": "Inte på Mastodon?", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index fbbe76b431ecb1..5ac5a3368b4c5d 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Mastodon'daki bir hesapla, {name} kişisini, ana akışınızdaki gönderilerini görmek üzere takip edebilirsiniz.", "interaction_modal.description.reblog": "Mastodon'daki bir hesapla, bu gönderiyi takipçilerinizle paylaşmak için tuşlayabilirsiniz.", "interaction_modal.description.reply": "Mastodon'daki bir hesapla, bu gönderiye yanıt verebilirsiniz.", + "interaction_modal.description.vote": "Mastodon'daki bir hesapla, bu ankette oy kullanabilirsiniz.", "interaction_modal.login.action": "Anasayfaya geri dön", "interaction_modal.login.prompt": "Ev sunucunuzun etki alanı, örneğin mastodon.social", "interaction_modal.no_account_yet": "Mastodon açık değil?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "{name} kişisini takip et", "interaction_modal.title.reblog": "{name} kişisinin gönderisini yeniden paylaş", "interaction_modal.title.reply": "{name} kişisinin gönderisine yanıt ver", + "interaction_modal.title.vote": "{name} kullanıcısının anketinde oy kullan", "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}", "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 9afa5816aad719..fc396aa9339cca 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Маючи обліковий запис на Mastodon, ви можете підписатися на {name}, щоб отримувати дописи цього користувача у свою стрічку.", "interaction_modal.description.reblog": "Маючи обліковий запис на Mastodon, ви можете поширити цей допис, щоб поділитися ним зі своїми підписниками.", "interaction_modal.description.reply": "Маючи обліковий запис на Mastodon, ви можете відповісти на цей допис.", + "interaction_modal.description.vote": "Маючи обліковий запис на Mastodon, ви можете проголосувати в цьому опитуванні.", "interaction_modal.login.action": "На домашню сторінку", "interaction_modal.login.prompt": "Домен вашого домашнього сервера, наприклад, mastodon.social", "interaction_modal.no_account_yet": "Не зареєстровані в Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Підписатися на {name}", "interaction_modal.title.reblog": "Поширити допис {name}", "interaction_modal.title.reply": "Відповісти на допис {name}", + "interaction_modal.title.vote": "Проголосувати в опитуванні {name}", "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 0fcd3e43dd3711..7ae955c1b0ca6f 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Với tài khoản Mastodon, bạn có thể theo dõi {name} để tút của họ hiện trên bảng tin của mình.", "interaction_modal.description.reblog": "Với tài khoản Mastodon, bạn có thể đăng lại tút này để chia sẻ nó với những người đang theo dõi bạn.", "interaction_modal.description.reply": "Với tài khoản Mastodon, bạn có thể trả lời tút này.", + "interaction_modal.description.vote": "Với tài khoản Mastodon, bạn có thể tham gia bình chọn.", "interaction_modal.login.action": "Đăng nhập ngay", "interaction_modal.login.prompt": "Địa chỉ máy chủ của bạn, vd: mastodon.social", "interaction_modal.no_account_yet": "Chưa có tài khoản Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Theo dõi {name}", "interaction_modal.title.reblog": "Đăng lại tút của {name}", "interaction_modal.title.reply": "Trả lời tút của {name}", + "interaction_modal.title.vote": "Bình chọn cùng {name}", "intervals.full.days": "{number, plural, other {# ngày}}", "intervals.full.hours": "{number, plural, other {# giờ}}", "intervals.full.minutes": "{number, plural, other {# phút}}", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index f8da5933ae506c..1c233a64034358 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你可以关注 {name} 并在自己的主页上接收对方的新嘟文。", "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你可以向自己的关注者们转发此嘟文。", "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你可以回复此嘟文。", + "interaction_modal.description.vote": "拥有一个 Mastodon 账号,你可以参与此投票。", "interaction_modal.login.action": "转到主页", "interaction_modal.login.prompt": "您所入驻的服务器域名,如:mastodon.social", "interaction_modal.no_account_yet": "不在 Mastodon 上?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "关注 {name}", "interaction_modal.title.reblog": "转发 {name} 的嘟文", "interaction_modal.title.reply": "回复 {name} 的嘟文", + "interaction_modal.title.vote": "参与 {name} 的投票", "intervals.full.days": "{number} 天", "intervals.full.hours": "{number} 小时", "intervals.full.minutes": "{number} 分钟", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 8903573dec3e32..a3de26ffc40dca 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "若於 Mastodon 上有個帳號,您可以跟隨 {name} 以於首頁時間軸接收他們的嘟文。", "interaction_modal.description.reblog": "若於 Mastodon 上有個帳號,您可以轉嘟此嘟文以向您的跟隨者們分享。", "interaction_modal.description.reply": "若於 Mastodon 上有個帳號,您可以回覆此嘟文。", + "interaction_modal.description.vote": "若於 Mastodon 上有個帳號,您可以參與此投票。", "interaction_modal.login.action": "返回首頁", "interaction_modal.login.prompt": "您帳號所屬伺服器之網域,例如:mastodon.social", "interaction_modal.no_account_yet": "還沒有 Mastodon 帳號嗎?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "跟隨 {name}", "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文", "interaction_modal.title.reply": "回覆 {name} 的嘟文", + "interaction_modal.title.vote": "參與 {name} 之投票", "intervals.full.days": "{number, plural, other {# 天}}", "intervals.full.hours": "{number, plural, other {# 小時}}", "intervals.full.minutes": "{number, plural, other {# 分鐘}}", diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 3d63ecd01d6604..f21e0bc7247d85 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -531,6 +531,7 @@ eo: total_reported: Signaloj pri ili total_storage: Aŭdovidaj kunsendaĵoj totals_time_period_hint_html: Sumo montritas malsupre inkluzivas datumo ekde komenco. + unknown_instance: Nuntempe ne ekzistas registro pri ĉi tiu domajno sur ĉi tiu servilo. invites: deactivate_all: Malaktivigi ĉion filter: @@ -763,6 +764,7 @@ eo: disabled: Al neniu users: Al salutintaj lokaj uzantoj registrations: + moderation_recommandation: Bonvolu certigi, ke vi havas taŭgan kaj reaktivan moderigan teamon antaŭ ol vi malfermas registriĝojn al ĉiuj! preamble: Regi kiu povas krei konton ĉe via servilo. title: Registriĝoj registrations_mode: @@ -772,6 +774,7 @@ eo: open: Iu povas aliĝi security: authorized_fetch: Devigi aŭtentigon de frataraj serviloj + authorized_fetch_overridden_hint: Vi nuntempe ne povas ŝanĝi ĉi tiun agordon ĉar ĝi estas anstataŭita de mediovariablo. title: Agordoj de la servilo site_uploads: delete: Forigi elŝutitan dosieron @@ -856,7 +859,12 @@ eo: message_html: "Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko." tags: moderation: + not_usable: Ne uzebla + review_requested: Revizio petita + reviewed: Reviziita title: Stato + unreviewed: Nereviziita + usable: Uzebla name: Nomo newest: Plej novaj oldest: Plej malnovaj @@ -1039,6 +1047,7 @@ eo: hint_html: Nur unu plia afero! Ni devas konfirmi, ke vi estas homo (tio estas por ke ni povu konservi la spamon ekstere!). Solvu la CAPTCHA sube kaj alklaku "Daŭrigu". title: Sekureckontrolo confirmations: + awaiting_review_title: Via registriĝo estas reviziita clicking_this_link: alklakante ĉi tiun ligilon login_link: ensaluti registration_complete: Via registriĝo sur %{domain} nun finiĝis! @@ -1104,8 +1113,11 @@ eo: use_security_key: Uzi sekurecan ŝlosilon author_attribution: example_title: Ekzempla teksto + hint_html: Ĉu vi skribas novaĵojn aŭ blogartikolojn ekster Mastodon? Kontrolu kiel vi estas kreditita kiam ili estas kunhavataj ĉe Mastodon. + instructions: 'Certigu, ke ĉi tiu kodo estas en la HTML de via artikolo:' more_from_html: Pli de %{name} s_blog: Blogo de %{name} + then_instructions: Poste, aldonu la domajnan nomon de la publikigado en la suba kampo. title: Atribuo de aŭtoro challenge: confirm: Daŭrigi @@ -1504,6 +1516,7 @@ eo: unrecognized_emoji: ne estas rekonita emoĝio redirects: prompt: Se vi fidas ĉi tiun ligon, alklaku ĝin por daŭrigi. + title: Vi foriras %{instance}. relationships: activity: Konta aktiveco confirm_follow_selected_followers: Ĉu vi certas ke vi volas sekvi la elektitajn sekvantojn? @@ -1699,6 +1712,7 @@ eo: contrast: Mastodon (Forta kontrasto) default: Mastodon (Malhela) mastodon-light: Mastodon (Hela) + system: Aŭtomata (uzu sisteman temon) time: formats: default: "%Y.%b.%d, %H:%M" @@ -1737,6 +1751,10 @@ eo: extra: Estas nun preta por elŝuto! subject: Via arkivo estas preta por elŝutado title: Arkiva elŝuto + failed_2fa: + explanation: Iu provis ensaluti al via konto sed provizis nevalidan duan aŭtentikigfaktoron. + further_actions_html: Se ĉi tio ne estis vi, ni rekomendas ke vi %{action} tuj ĉar ĝi povas esti endanĝerigita. + subject: Malsukceso dum la dua aŭtentikigfaktoro suspicious_sign_in: change_password: ŝanĝi vian pasvorton details: 'Ĉi-sube estas detaloj pri la saluto:' @@ -1776,6 +1794,8 @@ eo: silence: Konto limigita suspend: Konto suspendita welcome: + apps_android_action: Akiru ĝin ĉe Google Play + apps_ios_action: Elŝutu ĉe la App Store apps_step: Elŝutu niajn oficialajn aplikaĵojn. apps_title: Aplikaĵoj de Mastodon edit_profile_action: Agordi @@ -1783,9 +1803,14 @@ eo: explanation: Jen kelkaj konsiloj por helpi vin komenci feature_action: Lerni pli follow_action: Sekvi + follow_step: Sekvi interesajn homojn estas pri kio Mastodon temas. + follows_subtitle: Sekvu konatajn kontojn + follows_title: Kiun sekvi + follows_view_more: Rigardu pli da homoj por sekvi hashtags_recent_count: one: "%{people} homo en la pasintaj 2 tagoj" other: "%{people} homoj en la pasintaj 2 tagoj" + hashtags_subtitle: Esploru kio estas tendenco ekde la pasintaj 2 tagoj hashtags_title: Popularaj kradvortoj hashtags_view_more: Vidi pli da popularaj kradvortoj post_action: Redakti @@ -1811,6 +1836,7 @@ eo: instructions_html: Kopiu kaj algluu la jenan kodon en la HTML de via retejo. Poste aldonu la adreson de via retejo en unu el la kromaj kampoj de via profilo en la langeto "Redakti profilon" kaj konservu la ŝanĝojn. verification: Kontrolo verified_links: Via kontrolitaj ligiloj + website_verification: Reteja konfirmo webauthn_credentials: add: Aldoni novan sekurecan ŝlosilon create: diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 184f1120bd9d17..f8a5776835b4cb 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -40,12 +40,14 @@ eo: text: Oni povas apelaci strikin nur unufoje defaults: autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin + avatar: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto email: Vi ricevos konfirman retpoŝton + header: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj @@ -76,12 +78,15 @@ eo: warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro form_admin_settings: activity_api_enabled: Nombroj de loke publikigitaj afiŝoj, aktivaj uzantoj kaj novaj registradoj en semajnaj siteloj + app_icon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan aplikaĵan bildsimbolon sur porteblaj aparatoj kun propra bildsimbolo. backups_retention_period: Uzantoj havas la kapablon generi arkivojn de siaj afiŝoj por elŝuti poste. Kiam estas agordita al pozitiva valoro, ĉi tiuj arkivoj estos aŭtomate forigitaj de via stokado post la specifita nombro da tagoj. bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj. closed_registrations_message: Montrita kiam registroj fermitas + content_cache_retention_period: Ĉiuj afiŝoj de aliaj serviloj (inkluzive de diskonigoj kaj respondoj) estos forigitaj post la specifita nombro da tagoj, sen konsidero al iu ajn loka uzantinterago kun tiuj afiŝoj. Ĉi tio inkluzivas afiŝojn, kie loka uzanto markis ĝin kiel legosignojn aŭ ŝatatajn. Privataj mencioj inter uzantoj de malsamaj nodoj ankaŭ estos perditaj kaj neeble restaŭreblaj. Uzo de ĉi tiu agordo estas celita por specialcelaj okazoj kaj rompas multajn uzantajn atendojn kiam efektivigita por ĝenerala uzo. custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon. favicon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan Mastodon-favikono kun propra bildsimbolo. mascot: Anstatauigi la ilustraĵon en la altnivela retinterfaco. + media_cache_retention_period: Amaskomunikilaj dosieroj de afiŝoj faritaj de foraj uzantoj estas konservitaj en kaŝmemoro en via servilo. Kiam agordita al pozitiva valoro, amaskomunikilaro estos forigita post la specifita nombro da tagoj. Se la amaskomunikilaro-datumoj estas petitaj post kiam ĝi estas forigita, ĝi estos re-elŝutita, se la fonta enhavo ankoraŭ disponeblas. Pro limigoj pri kiom ofte ligaj antaŭrigardaj kartoj enketas retejojn de ekstera liveranto, oni rekomendas agordi ĉi tiun valoron al almenaŭ 14 tagoj, aŭ ligaj antaŭrigardaj kartoj ne estos ĝisdatigitaj laŭpostule antaŭ tiu tempo. peers_api_enabled: Listo de domajnaj nomoj kiujn ĉi tiu servilo renkontis en la fediverso. Neniuj datumoj estas inkluditaj ĉi tie pri ĉu vi federacias kun donita servilo, nur ke via servilo scias pri ĝi. Ĉi tio estas uzata de servoj kiuj kolektas statistikojn pri federacio en ĝenerala signifo. profile_directory: La profilujo listigas ĉiujn uzantojn kiu volonte malkovrebli. require_invite_text: Kiam registroj bezonas permanan aprobon, igi la "Kial vi volas aliĝi?" tekstoenigon deviga anstau nedeviga From 9de3fd60a012c69070a3371efec9c9fd54d9071a Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 29 Oct 2024 11:10:17 +0100 Subject: [PATCH 398/467] Add telemetry for status / bio formatting (#32677) --- app/helpers/formatting_helper.rb | 18 ++++++- app/lib/text_formatter.rb | 89 ++++++++++++++++++-------------- 2 files changed, 67 insertions(+), 40 deletions(-) diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb index 2ef7d362d8223a..9d5a2e24784a10 100644 --- a/app/helpers/formatting_helper.rb +++ b/app/helpers/formatting_helper.rb @@ -27,7 +27,14 @@ def extract_status_plain_text(status) module_function :extract_status_plain_text def status_content_format(status) - html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : [])) + MastodonOTELTracer.in_span('HtmlAwareFormatter rendering') do |span| + span.add_attributes( + 'app.formatter.content.type' => 'status', + 'app.formatter.content.origin' => status.local? ? 'local' : 'remote' + ) + + html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : [])) + end end def rss_status_content_format(status) @@ -39,7 +46,14 @@ def rss_status_content_format(status) end def account_bio_format(account) - html_aware_format(account.note, account.local?) + MastodonOTELTracer.in_span('HtmlAwareFormatter rendering') do |span| + span.add_attributes( + 'app.formatter.content.type' => 'account_bio', + 'app.formatter.content.origin' => account.local? ? 'local' : 'remote' + ) + + html_aware_format(account.note, account.local?) + end end def account_field_value_format(field, with_rel_me: true) diff --git a/app/lib/text_formatter.rb b/app/lib/text_formatter.rb index 2b3febc219bac4..5e8e73a2173f40 100644 --- a/app/lib/text_formatter.rb +++ b/app/lib/text_formatter.rb @@ -33,17 +33,24 @@ def entities def to_s return ''.html_safe if text.blank? - html = rewrite do |entity| - if entity[:url] - link_to_url(entity) - elsif entity[:hashtag] - link_to_hashtag(entity) - elsif entity[:screen_name] - link_to_mention(entity) + html = nil + MastodonOTELTracer.in_span('TextFormatter#to_s extract_and_rewrite') do + html = rewrite do |entity| + if entity[:url] + link_to_url(entity) + elsif entity[:hashtag] + link_to_hashtag(entity) + elsif entity[:screen_name] + link_to_mention(entity) + end end end - html = simple_format(html, {}, sanitize: false).delete("\n") if multiline? + if multiline? + MastodonOTELTracer.in_span('TextFormatter#to_s simple_format') do + html = simple_format(html, {}, sanitize: false).delete("\n") + end + end html.html_safe # rubocop:disable Rails/OutputSafety end @@ -93,48 +100,54 @@ def rewrite end def link_to_url(entity) - TextFormatter.shortened_link(entity[:url], rel_me: with_rel_me?) + MastodonOTELTracer.in_span('TextFormatter#link_to_url') do + TextFormatter.shortened_link(entity[:url], rel_me: with_rel_me?) + end end def link_to_hashtag(entity) - hashtag = entity[:hashtag] - url = tag_url(hashtag) + MastodonOTELTracer.in_span('TextFormatter#link_to_hashtag') do + hashtag = entity[:hashtag] + url = tag_url(hashtag) - <<~HTML.squish - - HTML + <<~HTML.squish + + HTML + end end def link_to_mention(entity) - username, domain = entity[:screen_name].split('@') - domain = nil if local_domain?(domain) - account = nil - - if preloaded_accounts? - same_username_hits = 0 - - preloaded_accounts.each do |other_account| - same_username = other_account.username.casecmp(username).zero? - same_domain = other_account.domain.nil? ? domain.nil? : other_account.domain.casecmp(domain)&.zero? - - if same_username && !same_domain - same_username_hits += 1 - elsif same_username && same_domain - account = other_account + MastodonOTELTracer.in_span('TextFormatter#link_to_mention') do + username, domain = entity[:screen_name].split('@') + domain = nil if local_domain?(domain) + account = nil + + if preloaded_accounts? + same_username_hits = 0 + + preloaded_accounts.each do |other_account| + same_username = other_account.username.casecmp(username).zero? + same_domain = other_account.domain.nil? ? domain.nil? : other_account.domain.casecmp(domain)&.zero? + + if same_username && !same_domain + same_username_hits += 1 + elsif same_username && same_domain + account = other_account + end end + else + account = entity_cache.mention(username, domain) end - else - account = entity_cache.mention(username, domain) - end - return "@#{h(entity[:screen_name])}" if account.nil? + return "@#{h(entity[:screen_name])}" if account.nil? - url = ActivityPub::TagManager.instance.url_for(account) - display_username = same_username_hits&.positive? || with_domains? ? account.pretty_acct : account.username + url = ActivityPub::TagManager.instance.url_for(account) + display_username = same_username_hits&.positive? || with_domains? ? account.pretty_acct : account.username - <<~HTML.squish - @#{h(display_username)} - HTML + <<~HTML.squish + @#{h(display_username)} + HTML + end end def entity_cache From 311d2b7f3a979915078a900551a79550a4fd7817 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:17:28 +0100 Subject: [PATCH 399/467] Update dependency fog-core to '<= 2.6.0' (#32660) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 6f4559b00f9f05..97856d78255c93 100644 --- a/Gemfile +++ b/Gemfile @@ -16,7 +16,7 @@ gem 'pghero' gem 'aws-sdk-s3', '~> 1.123', require: false gem 'blurhash', '~> 0.1' -gem 'fog-core', '<= 2.5.0' +gem 'fog-core', '<= 2.6.0' gem 'fog-openstack', '~> 1.0', require: false gem 'kt-paperclip', '~> 7.2' gem 'md-paperclip-azure', '~> 2.2', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 8fff112872cd89..f1088b22b6010e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -943,7 +943,7 @@ DEPENDENCIES fast_blank (~> 1.0) fastimage flatware-rspec - fog-core (<= 2.5.0) + fog-core (<= 2.6.0) fog-openstack (~> 1.0) haml-rails (~> 2.0) haml_lint From de1d8dc63afbd541710de44502129345e912895c Mon Sep 17 00:00:00 2001 From: Nathan Sparrow <24910097+DismalShadowX@users.noreply.github.com> Date: Tue, 29 Oct 2024 11:12:35 -0400 Subject: [PATCH 400/467] Embed modal mobile fix (#32641) --- app/javascript/styles/mastodon/components.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 673e47f429833b..fc0b2b0e8e6145 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5809,6 +5809,7 @@ a.status-card { pointer-events: auto; user-select: text; display: flex; + max-width: 100vw; @media screen and (width <= $mobile-breakpoint) { margin-top: auto; From df3b9547202c07ec7ec7f6af8295deb272c6f5ca Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 29 Oct 2024 11:35:25 -0400 Subject: [PATCH 401/467] Add `DomainHelpers` spec support module for DNS/MX stub (#32690) --- .../auth/registrations_controller_spec.rb | 12 +---- spec/rails_helper.rb | 1 + spec/services/app_sign_up_service_spec.rb | 12 +---- spec/support/domain_helpers.rb | 44 +++++++++++++++++++ 4 files changed, 47 insertions(+), 22 deletions(-) create mode 100644 spec/support/domain_helpers.rb diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index 6118edf4e34331..d1542128e7a718 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -233,17 +233,7 @@ Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'mail.example.com') allow(User).to receive(:skip_mx_check?).and_return(false) - - resolver = instance_double(Resolv::DNS, :timeouts= => nil) - - allow(resolver).to receive(:getresources) - .with('example.com', Resolv::DNS::Resource::IN::MX) - .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')]) - allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) - allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) - allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) - allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) - allow(Resolv::DNS).to receive(:open).and_yield(resolver) + configure_mx(domain: 'example.com', exchange: 'mail.example.com') end it 'creates unapproved user and redirects to setup' do diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 91a2e21bbbc796..d2ad40be7310fb 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -113,6 +113,7 @@ def sign_in(resource, _deprecated = nil, scope: nil) config.include ActiveSupport::Testing::TimeHelpers config.include Chewy::Rspec::Helpers config.include Redisable + config.include DomainHelpers config.include ThreadingHelpers config.include SignedRequestHelpers, type: :request config.include CommandLineHelpers, type: :cli diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index ec7b7516f95372..b78868db49476c 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -53,17 +53,7 @@ Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'smtp.email.com') allow(User).to receive(:skip_mx_check?).and_return(false) - - resolver = instance_double(Resolv::DNS, :timeouts= => nil) - - allow(resolver).to receive(:getresources) - .with('email.com', Resolv::DNS::Resource::IN::MX) - .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'smtp.email.com')]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::A).and_return([]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) - allow(Resolv::DNS).to receive(:open).and_yield(resolver) + configure_mx(domain: 'email.com', exchange: 'smtp.email.com') end it 'creates an unapproved user', :aggregate_failures do diff --git a/spec/support/domain_helpers.rb b/spec/support/domain_helpers.rb new file mode 100644 index 00000000000000..9977702099db80 --- /dev/null +++ b/spec/support/domain_helpers.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module DomainHelpers + def configure_mx(domain:, exchange:, ip_v4_addr: '2.3.4.5', ip_v6_addr: 'fd00::2') + resolver = instance_double(Resolv::DNS, :timeouts= => nil) + + allow(resolver).to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::MX) + .and_return([double_mx(exchange)]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::A) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::AAAA) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::A) + .and_return([double_resource_v4(ip_v4_addr)]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::AAAA) + .and_return([double_resource_v6(ip_v6_addr)]) + allow(Resolv::DNS) + .to receive(:open) + .and_yield(resolver) + end + + private + + def double_mx(exchange) + instance_double(Resolv::DNS::Resource::MX, exchange: exchange) + end + + def double_resource_v4(addr) + instance_double(Resolv::DNS::Resource::IN::A, address: addr) + end + + def double_resource_v6(addr) + instance_double(Resolv::DNS::Resource::IN::AAAA, address: addr) + end +end From babee06794e188dffb9f82787cc0f0ab784dc99e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 29 Oct 2024 11:46:32 -0400 Subject: [PATCH 402/467] Add coverage for `StatusTrend` and `PreviewCardTrend` models, add `locales` class method to `RankedTrend` (#32688) --- .../admin/trends/links_controller.rb | 2 +- .../admin/trends/statuses_controller.rb | 2 +- app/models/concerns/ranked_trend.rb | 4 ++++ app/models/trends/links.rb | 2 +- app/models/trends/statuses.rb | 2 +- .../preview_card_trend_fabricator.rb | 5 ++++ spec/fabricators/status_trend_fabricator.rb | 6 +++++ spec/models/preview_card_trend_spec.rb | 22 ++++++++++++++++++ spec/models/status_trend_spec.rb | 23 +++++++++++++++++++ 9 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 spec/fabricators/preview_card_trend_fabricator.rb create mode 100644 spec/fabricators/status_trend_fabricator.rb create mode 100644 spec/models/preview_card_trend_spec.rb create mode 100644 spec/models/status_trend_spec.rb diff --git a/app/controllers/admin/trends/links_controller.rb b/app/controllers/admin/trends/links_controller.rb index 83d68eba63c321..65eca11c7f3cde 100644 --- a/app/controllers/admin/trends/links_controller.rb +++ b/app/controllers/admin/trends/links_controller.rb @@ -4,7 +4,7 @@ class Admin::Trends::LinksController < Admin::BaseController def index authorize :preview_card, :review? - @locales = PreviewCardTrend.pluck('distinct language') + @locales = PreviewCardTrend.locales @preview_cards = filtered_preview_cards.page(params[:page]) @form = Trends::PreviewCardBatch.new end diff --git a/app/controllers/admin/trends/statuses_controller.rb b/app/controllers/admin/trends/statuses_controller.rb index 3d8b53ea8a0444..682fe70bb561d8 100644 --- a/app/controllers/admin/trends/statuses_controller.rb +++ b/app/controllers/admin/trends/statuses_controller.rb @@ -4,7 +4,7 @@ class Admin::Trends::StatusesController < Admin::BaseController def index authorize [:admin, :status], :review? - @locales = StatusTrend.pluck('distinct language') + @locales = StatusTrend.locales @statuses = filtered_statuses.page(params[:page]) @form = Trends::StatusBatch.new end diff --git a/app/models/concerns/ranked_trend.rb b/app/models/concerns/ranked_trend.rb index add36afb0c2829..e707fe0bad9f87 100644 --- a/app/models/concerns/ranked_trend.rb +++ b/app/models/concerns/ranked_trend.rb @@ -9,6 +9,10 @@ module RankedTrend end class_methods do + def locales + distinct.pluck(:language) + end + def recalculate_ordered_rank connection .exec_update(<<~SQL.squish) diff --git a/app/models/trends/links.rb b/app/models/trends/links.rb index 0650c4109de8ac..9d721d25f818ce 100644 --- a/app/models/trends/links.rb +++ b/app/models/trends/links.rb @@ -85,7 +85,7 @@ def refresh(at_time = Time.now.utc) end def request_review - PreviewCardTrend.pluck('distinct language').flat_map do |language| + PreviewCardTrend.locales.flat_map do |language| score_at_threshold = PreviewCardTrend.where(language: language).allowed.by_rank.ranked_below(options[:review_threshold]).first&.score || 0 preview_card_trends = PreviewCardTrend.where(language: language).not_allowed.joins(:preview_card) diff --git a/app/models/trends/statuses.rb b/app/models/trends/statuses.rb index 9be6eb13a5c272..8757e5aa9c3b6c 100644 --- a/app/models/trends/statuses.rb +++ b/app/models/trends/statuses.rb @@ -78,7 +78,7 @@ def refresh(at_time = Time.now.utc) end def request_review - StatusTrend.pluck('distinct language').flat_map do |language| + StatusTrend.locales.flat_map do |language| score_at_threshold = StatusTrend.where(language: language, allowed: true).by_rank.ranked_below(options[:review_threshold]).first&.score || 0 status_trends = StatusTrend.where(language: language, allowed: false).joins(:status).includes(status: :account) diff --git a/spec/fabricators/preview_card_trend_fabricator.rb b/spec/fabricators/preview_card_trend_fabricator.rb new file mode 100644 index 00000000000000..14c126cc89f206 --- /dev/null +++ b/spec/fabricators/preview_card_trend_fabricator.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Fabricator(:preview_card_trend) do + preview_card +end diff --git a/spec/fabricators/status_trend_fabricator.rb b/spec/fabricators/status_trend_fabricator.rb new file mode 100644 index 00000000000000..c775892b1ff61c --- /dev/null +++ b/spec/fabricators/status_trend_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:status_trend) do + status + account +end diff --git a/spec/models/preview_card_trend_spec.rb b/spec/models/preview_card_trend_spec.rb new file mode 100644 index 00000000000000..6edd24b693826b --- /dev/null +++ b/spec/models/preview_card_trend_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PreviewCardTrend do + describe 'Associations' do + it { is_expected.to belong_to(:preview_card).required } + end + + describe '.locales' do + before do + Fabricate :preview_card_trend, language: 'en' + Fabricate :preview_card_trend, language: 'en' + Fabricate :preview_card_trend, language: 'es' + end + + it 'returns unique set of languages' do + expect(described_class.locales) + .to eq(['en', 'es']) + end + end +end diff --git a/spec/models/status_trend_spec.rb b/spec/models/status_trend_spec.rb new file mode 100644 index 00000000000000..34522493cda3f5 --- /dev/null +++ b/spec/models/status_trend_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe StatusTrend do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + it { is_expected.to belong_to(:status).required } + end + + describe '.locales' do + before do + Fabricate :status_trend, language: 'en' + Fabricate :status_trend, language: 'en' + Fabricate :status_trend, language: 'es' + end + + it 'returns unique set of languages' do + expect(described_class.locales) + .to eq(['en', 'es']) + end + end +end From 742eb549abe556ff2c53adfaaddd4ed01789f26e Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 30 Oct 2024 09:34:56 +0100 Subject: [PATCH 403/467] Fix preview cards with long titles erroneously causing layout changes (#32678) --- app/javascript/styles/mastodon/components.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index fc0b2b0e8e6145..f688b9b4ba37fd 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2759,6 +2759,7 @@ a.account__display-name { flex: 0 1 auto; display: flex; flex-direction: column; + contain: inline-size layout paint style; @media screen and (min-width: $no-gap-breakpoint) { max-width: 600px; @@ -4032,6 +4033,7 @@ $ui-header-logo-wordmark-width: 99px; overflow: hidden; border: 1px solid var(--background-border-color); border-radius: 8px; + contain: inline-size layout paint style; &.bottomless { border-radius: 8px 8px 0 0; From 7f743f3c8190ec3c5bfd4cc4543f87be39bed53e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:40:49 +0100 Subject: [PATCH 404/467] Update dependency libvips to v8.16.0 (#32679) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bb29ad21fa05ba..acb7631eb9b502 100644 --- a/Dockerfile +++ b/Dockerfile @@ -191,7 +191,7 @@ FROM build AS libvips # libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"] # renovate: datasource=github-releases depName=libvips packageName=libvips/libvips -ARG VIPS_VERSION=8.15.5 +ARG VIPS_VERSION=8.16.0 # libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"] ARG VIPS_URL=https://github.com/libvips/libvips/releases/download From 110aa0aa28ec44de7841ce8a8cce924a94f3717c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:09:10 +0100 Subject: [PATCH 405/467] Update workbox monorepo to v7.3.0 (#32691) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 220 +++++++++++++++++++++++++++--------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1a129ac3675ced..7762f961022c58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18218,28 +18218,28 @@ __metadata: languageName: node linkType: hard -"workbox-background-sync@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-background-sync@npm:7.1.0" +"workbox-background-sync@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-background-sync@npm:7.3.0" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.1.0" - checksum: 10c0/9538c49a377d8eb06acee3848fbca09bac1940a2ca9e904fed765c39aa32f77c20d72c3ba6fa1eb47bee81289b1d527556a1cd3e02728960a4c40400ce6d0e91 + workbox-core: "npm:7.3.0" + checksum: 10c0/cc982d62702847fb16c4ef372a8bd243348a80c2d5da1649a860b0187b45060a799a65582c2d36f1a32e31d5d68dedcb037698c41d3b2f171ea5d54d73453cf1 languageName: node linkType: hard -"workbox-broadcast-update@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-broadcast-update@npm:7.1.0" +"workbox-broadcast-update@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-broadcast-update@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/4a6e201cedcbc11b9d2f63f63477ba4564a35ce07bd54640198db6ff6a3b8347a65e0b4973c8f8463e8a622fd1ad93d7b3bab42338608811d23c7db01fef475e + workbox-core: "npm:7.3.0" + checksum: 10c0/25007acd3e845b5ca1f4c9ac9888ce661431723f7419cfa56b3029b6c56cbeca24902dae015c42a2d6f554f956274743e331d03ceeb4b0e3879cb7b908d0e82f languageName: node linkType: hard -"workbox-build@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-build@npm:7.1.0" +"workbox-build@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-build@npm:7.3.0" dependencies: "@apideck/better-ajv-errors": "npm:^0.3.1" "@babel/core": "npm:^7.24.4" @@ -18263,163 +18263,163 @@ __metadata: strip-comments: "npm:^2.0.1" tempy: "npm:^0.6.0" upath: "npm:^1.2.0" - workbox-background-sync: "npm:7.1.0" - workbox-broadcast-update: "npm:7.1.0" - workbox-cacheable-response: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-expiration: "npm:7.1.0" - workbox-google-analytics: "npm:7.1.0" - workbox-navigation-preload: "npm:7.1.0" - workbox-precaching: "npm:7.1.0" - workbox-range-requests: "npm:7.1.0" - workbox-recipes: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - workbox-streams: "npm:7.1.0" - workbox-sw: "npm:7.1.0" - workbox-window: "npm:7.1.0" - checksum: 10c0/c482fde713bad582bd7d4861113d7367ab4722eba9c102864c71048815792c623e9117a8f79957e0388d0c08e8303962d1fb23931456da73909e87d06638d101 - languageName: node - linkType: hard - -"workbox-cacheable-response@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-cacheable-response@npm:7.1.0" + workbox-background-sync: "npm:7.3.0" + workbox-broadcast-update: "npm:7.3.0" + workbox-cacheable-response: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-expiration: "npm:7.3.0" + workbox-google-analytics: "npm:7.3.0" + workbox-navigation-preload: "npm:7.3.0" + workbox-precaching: "npm:7.3.0" + workbox-range-requests: "npm:7.3.0" + workbox-recipes: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + workbox-streams: "npm:7.3.0" + workbox-sw: "npm:7.3.0" + workbox-window: "npm:7.3.0" + checksum: 10c0/cb396f9c2a53429d1e11b4c1da2e21c9e1c98473ce15f20ae53277e47bd7ccbcb3f1f843694e588bb70b12d9332faafd098ca05b93abb0293d373f38a8de3ca8 + languageName: node + linkType: hard + +"workbox-cacheable-response@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-cacheable-response@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/52ea73bb184c9ef9280cc8f00a1ab7d103d495e12a7a6378fae02fd0aa1a9b893aac5d8074f14ed8c198527123e4401f4703fbfd2be98e184ca783b9216cb4c5 + workbox-core: "npm:7.3.0" + checksum: 10c0/192c8a8878c53a205c55398bac78f2c32c0f36e55c95cab282d8a716ddf2fa72563afaed690d34d3438cc8df5fb0df4d98dcb2d93cc6d67c69a9ae592f7bf246 languageName: node linkType: hard -"workbox-core@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-core@npm:7.1.0" - checksum: 10c0/fb0b6e23a52e085da00b7a74b1f1854f06c695eb2bd4c244aa335165f59156a4febb4f116b9893b9fb7e0e8bac092d32eecceb4d00f930a93f64737cb2be9531 +"workbox-core@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-core@npm:7.3.0" + checksum: 10c0/b7dce640cd9665ed207f65f5b08a50e2e24e5599790c6ea4fec987539b9d2ef81765d8c5f94acfee3a8a45d5ade8e1a4ebd0b8847a1471302ef75a5b93c7bd04 languageName: node linkType: hard -"workbox-expiration@npm:7.1.0, workbox-expiration@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-expiration@npm:7.1.0" +"workbox-expiration@npm:7.3.0, workbox-expiration@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-expiration@npm:7.3.0" dependencies: idb: "npm:^7.0.1" - workbox-core: "npm:7.1.0" - checksum: 10c0/669d76f87c1550ce9b425232c3202a26fdea4c4c9bdc1b71c1cee741a5d011423098994452e508576174d3c0b4bec0f4b35012b6d7257e300684c87fdddb7949 + workbox-core: "npm:7.3.0" + checksum: 10c0/6040d72122ece901becfcc59974586e9cc9b6309840b83b652c9f9aafe32ff89783404a431cadf6f888f80e5371252820e425ced499742964d6d68687f6fad1a languageName: node linkType: hard -"workbox-google-analytics@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-google-analytics@npm:7.1.0" +"workbox-google-analytics@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-google-analytics@npm:7.3.0" dependencies: - workbox-background-sync: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/4178d94fb7f3f7b789f117c104b2ff33945256dc550418b0e9c81130c1e2c2bcd72ec6a1661d91326c04de360e6592edd505f0e2142e8e1043fe0c45f9c1a3fe + workbox-background-sync: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/5317a4bcc01f1aa87480f9708d7d382c15fb37d6119e71e0a2909dfd683f6060b5cc4f7b016a81fc67098f51a5d0cfd1cda20e228f2f3778ee3caf649b59996b languageName: node linkType: hard -"workbox-navigation-preload@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-navigation-preload@npm:7.1.0" +"workbox-navigation-preload@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-navigation-preload@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/b667a3ba0cae4d43a53a6e211f0f33f6ebc1d9fec6cbb93de83f72a37b81cc39d887b969db9b1cd5c396a1ce34636c89c3b157cc64a5265635d0b274e362db0e + workbox-core: "npm:7.3.0" + checksum: 10c0/69e4d43c68c06889987e9fa437995378b0632c83bad8c7044b4ed812b05b94b3a4aa8700ea4c26b2ecf68ee6858e94ff41dfa3279815c1bc385ac19c0edfb200 languageName: node linkType: hard -"workbox-precaching@npm:7.1.0, workbox-precaching@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-precaching@npm:7.1.0" +"workbox-precaching@npm:7.3.0, workbox-precaching@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-precaching@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/53b2d0a658109b4d83ee2b1913f884ee1c757a12b8931a7102272bd1e228d29f9430e7d060f328f465bca2aa24bf0719d026eef4f4d21395fa1f678f8d6a3c06 + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/15c4c5cf5dfec684711ce3536bbfa6873f7af16b712d02ded81d3ff490ea4097e46602705548f5872c49f06e3516fd69f17e72a7fc60631ff6d68460e48f7648 languageName: node linkType: hard -"workbox-range-requests@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-range-requests@npm:7.1.0" +"workbox-range-requests@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-range-requests@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/bf4aa597d04cbb533796af64f4006a1f472f8a14ea91f96fe37b2d5e63ffe86dcb944dab9a41317e69d368d83bee20f03ff32b339ae5addef50f325703ad4b77 + workbox-core: "npm:7.3.0" + checksum: 10c0/d48e1484866442864d66b1891c4965b71e997a83a7634f11452ec1a73a30a5e642e6a95d5cff45578bef4dec7a5f57bc598aeedb6189d17ca210e2c5f2898244 languageName: node linkType: hard -"workbox-recipes@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-recipes@npm:7.1.0" +"workbox-recipes@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-recipes@npm:7.3.0" dependencies: - workbox-cacheable-response: "npm:7.1.0" - workbox-core: "npm:7.1.0" - workbox-expiration: "npm:7.1.0" - workbox-precaching: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - workbox-strategies: "npm:7.1.0" - checksum: 10c0/5a8c2444f6338c6092be87cc6fd69c8b0cbb413bfc0a11a8f10961bfb2b8059359c4be0264ffa0c01deff3ab5dba15bbcf61d4dedbc93d8bfe1f8a2841b1657c + workbox-cacheable-response: "npm:7.3.0" + workbox-core: "npm:7.3.0" + workbox-expiration: "npm:7.3.0" + workbox-precaching: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + workbox-strategies: "npm:7.3.0" + checksum: 10c0/c8146ece4247cbcbefba36a14f2cb65b5f74b2412f64cfc7955ff75ff653857161a1f1d94c987fbae4812f5b770eedcf99af965e512cc375fbc7fb5421bdc99c languageName: node linkType: hard -"workbox-routing@npm:7.1.0, workbox-routing@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-routing@npm:7.1.0" +"workbox-routing@npm:7.3.0, workbox-routing@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-routing@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/efd630fff594bd50276770840bce274660972587e79c097a9f1a84e8347351736aac13f11c6d7655ff550b13195d370d5c3b81a075bf452f358fc144ee868ad9 + workbox-core: "npm:7.3.0" + checksum: 10c0/8ac1824211d0fbe0e916ecb2c2427bcb0ef8783f9225d8114fe22e6c326f2d8a040a089bead58064e8b096ec95abe070c04cd7353dd8830dba3ab8d608a053aa languageName: node linkType: hard -"workbox-strategies@npm:7.1.0, workbox-strategies@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-strategies@npm:7.1.0" +"workbox-strategies@npm:7.3.0, workbox-strategies@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-strategies@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - checksum: 10c0/b08712a69b1b13e354345cc228c29f0c759043f7ca7cf6ce9b82fe79c9d423142bfa4a118f91f1a57054047a730127fa4474d59d9306fb2ed42fe9ef568be01a + workbox-core: "npm:7.3.0" + checksum: 10c0/50f3c28b46b54885a9461ad6559010d9abb2a7e35e0128d05c268f3ea0a96b1a747934758121d0e821f7af63946d9db8f4d2d7e0146f12555fb05c768e6b82bb languageName: node linkType: hard -"workbox-streams@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-streams@npm:7.1.0" +"workbox-streams@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-streams@npm:7.3.0" dependencies: - workbox-core: "npm:7.1.0" - workbox-routing: "npm:7.1.0" - checksum: 10c0/1d75c046fcb7b25e1cf85457e3610309dd5513f68752ef333529fcf155df2114b72f3d6f416bb68393e51b5396e3f6df7171e8e2889d0e9e1805e315754b771e + workbox-core: "npm:7.3.0" + workbox-routing: "npm:7.3.0" + checksum: 10c0/2ae541343d187eb7a50da2cfd74051f15771d1ddd1cad6856ffd530f7cccdb8eed9a8af94ff7540b710fef73eeec37d652123ae42b0206fbbd0679dc25e66ff4 languageName: node linkType: hard -"workbox-sw@npm:7.1.0": - version: 7.1.0 - resolution: "workbox-sw@npm:7.1.0" - checksum: 10c0/2084f1b58c8509d7ca53ce8a13d93e57d1f13307e0279fedc87942e83c8cb96bc2e5ed3992a89af6245ad2a66897a92908cb60d0717fb90492056eb6fbf20dc6 +"workbox-sw@npm:7.3.0": + version: 7.3.0 + resolution: "workbox-sw@npm:7.3.0" + checksum: 10c0/9ae275e31dd5ec51245773b6d90fda16d0b7f70d59f3a71aec732814b5aedf08aedc7fcce57739e7e89d9e1479ef97e3a202a542a511d732cf5e8b5d1c293870 languageName: node linkType: hard "workbox-webpack-plugin@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-webpack-plugin@npm:7.1.0" + version: 7.3.0 + resolution: "workbox-webpack-plugin@npm:7.3.0" dependencies: fast-json-stable-stringify: "npm:^2.1.0" pretty-bytes: "npm:^5.4.1" upath: "npm:^1.2.0" webpack-sources: "npm:^1.4.3" - workbox-build: "npm:7.1.0" + workbox-build: "npm:7.3.0" peerDependencies: webpack: ^4.4.0 || ^5.91.0 - checksum: 10c0/516fa68a6a6958ee1560299dd1146032dda68474a2ab01643cbde78fc65b75a3157aef60cb45dcc1984cc458ce44d4e3090cda08dd7cefd0952351270e963a00 + checksum: 10c0/dd3625544fe08b099fd2b783584c6c2c5da3f0e0c3096fc1a86a0b96a26df5055dd178d3c60ab4cde4099474ab23d51c292356c6910dfa16a974c8a95f351c93 languageName: node linkType: hard -"workbox-window@npm:7.1.0, workbox-window@npm:^7.0.0": - version: 7.1.0 - resolution: "workbox-window@npm:7.1.0" +"workbox-window@npm:7.3.0, workbox-window@npm:^7.0.0": + version: 7.3.0 + resolution: "workbox-window@npm:7.3.0" dependencies: "@types/trusted-types": "npm:^2.0.2" - workbox-core: "npm:7.1.0" - checksum: 10c0/c989a6e3a0488f049eead3892f8249387604fb04898aa79d0cf14cd7b684f0758f1edf1996745f4755bd30c31c449f628803e507d39b2ea91cc9c36f7d5e9c72 + workbox-core: "npm:7.3.0" + checksum: 10c0/dbda33c4761ec40051cfe6e3f1701b2381b4f3b191f7a249c32f683503ea35cf8b42d1f99df5ba3b693fac78705d8ed0c191488bdd178c525d1291d0161ec8ff languageName: node linkType: hard From 0a599d08d8c1d10d3784b3700ebd27efe9e6a468 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:02:02 +0100 Subject: [PATCH 406/467] New Crowdin Translations (automated) (#32695) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/cy.json | 4 +++- app/javascript/mastodon/locales/es-AR.json | 4 ++-- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/fi.json | 14 +++++++------- app/javascript/mastodon/locales/fil.json | 5 +++++ app/javascript/mastodon/locales/gd.json | 6 +++++- app/javascript/mastodon/locales/gl.json | 2 ++ app/javascript/mastodon/locales/it.json | 2 ++ app/javascript/mastodon/locales/lad.json | 1 + app/javascript/mastodon/locales/nn.json | 2 ++ app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/th.json | 2 +- app/javascript/mastodon/locales/zh-CN.json | 8 ++++---- config/locales/doorkeeper.fi.yml | 2 +- config/locales/eo.yml | 7 +++++++ 15 files changed, 44 insertions(+), 18 deletions(-) diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 3c4a6aa40cc6a3..675f7a203ecbcd 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -13,7 +13,7 @@ "about.rules": "Rheolau'r gweinydd", "account.account_note_header": "Nodyn personol", "account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau", - "account.badges.bot": "Bot", + "account.badges.bot": "Awtomataidd", "account.badges.group": "Grŵp", "account.block": "Blocio @{name}", "account.block_domain": "Blocio parth {domain}", @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich ffrwd gartref.", "interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.", "interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.", + "interaction_modal.description.vote": "Gyda chyfrif ar Mastodon, gallwch bleidleisio yn y bleidlais hon.", "interaction_modal.login.action": "Mynd i'm ffrwd gartref", "interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social", "interaction_modal.no_account_yet": "Dim ar Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Dilyn {name}", "interaction_modal.title.reblog": "Hybu postiad {name}", "interaction_modal.title.reply": "Ymateb i bostiad {name}", + "interaction_modal.title.vote": "Pleidleisiwch ym mhleidlais {name}", "intervals.full.days": "{number, plural, one {# diwrnod} two {# ddiwrnod} other {# diwrnod}}", "intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}", "intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index e1803aabdaff0d..e8302a4c75da44 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -386,7 +386,7 @@ "interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, podés responder a este mensaje.", - "interaction_modal.description.vote": "Con una cuenta en Mastodon, puedes votar en esta encuesta.", + "interaction_modal.description.vote": "Con una cuenta en Mastodon, podés votar en esta encuesta.", "interaction_modal.login.action": "Llevame al comienzo", "interaction_modal.login.prompt": "Dominio de su servidor de inicio, p. ej., mastodon.social", "interaction_modal.no_account_yet": "¿No tenés cuenta en Mastodon?", @@ -398,7 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Adherir al mensaje de {name}", "interaction_modal.title.reply": "Responder al mensaje de {name}", - "interaction_modal.title.vote": "Vota en la encuesta de {name}", + "interaction_modal.title.vote": "Votá en la encuesta de {name}", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index af2bd0e528e533..c73a64c4e0bda9 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -398,7 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Impulsar la publicación de {name}", "interaction_modal.title.reply": "Responder la publicación de {name}", - "interaction_modal.title.vote": "Vota en la encuesta de {name}", + "interaction_modal.title.vote": "Votar en la encuesta de {name}", "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 0455e4df29ba63..fd971edfd3bb29 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.multiple": "Monivalinta", "compose_form.poll.option_placeholder": "Vaihtoehto {number}", - "compose_form.poll.single": "Yksittäisvalinta", + "compose_form.poll.single": "Yksi vaihtoehto", "compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta äänestys yksittäisvalinnaksi", "compose_form.poll.type": "Tyyli", @@ -386,7 +386,7 @@ "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", - "interaction_modal.description.vote": "Mastodon-tilillä voit osallistua tähän äänestykseen.", + "interaction_modal.description.vote": "Osallistuminen äänestykseen onnistuu Mastodon-tilillä.", "interaction_modal.login.action": "Siirry kotiin", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", @@ -439,8 +439,8 @@ "lightbox.close": "Sulje", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.zoom_in": "Zoomaa todelliseen kokoon", - "lightbox.zoom_out": "Zoomaa mahtumaan", + "lightbox.zoom_in": "Näytä alkuperäiskokoisena", + "lightbox.zoom_out": "Näytä sovitettuna", "limited_account_hint.action": "Näytä profiili joka tapauksessa", "limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.", "link_preview.author": "Tehnyt {name}", @@ -529,7 +529,7 @@ "notification.moderation_warning.action_sensitive": "Tästä lähtien julkaisusi merkitään arkaluonteisiksi.", "notification.moderation_warning.action_silence": "Tiliäsi on rajoitettu.", "notification.moderation_warning.action_suspend": "Tilisi on jäädytetty.", - "notification.own_poll": "Äänestyksesi on päättynyt", + "notification.own_poll": "Kyselysi on päättynyt", "notification.poll": "Äänestys, johon osallistuit, on päättynyt", "notification.reblog": "{name} tehosti julkaisuasi", "notification.reblog.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} tehostivat julkaisuasi", @@ -572,7 +572,7 @@ "notifications.column_settings.follow_request": "Uudet seurantapyynnöt:", "notifications.column_settings.group": "Ryhmitä", "notifications.column_settings.mention": "Maininnat:", - "notifications.column_settings.poll": "Äänestyksen tulokset:", + "notifications.column_settings.poll": "Kyselyn tulokset:", "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", @@ -586,7 +586,7 @@ "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraamiset", "notifications.filter.mentions": "Maininnat", - "notifications.filter.polls": "Äänestyksen tulokset", + "notifications.filter.polls": "Kyselyn tulokset", "notifications.filter.statuses": "Päivitykset seuraamiltasi käyttäjiltä", "notifications.grant_permission": "Myönnä käyttöoikeus.", "notifications.group": "{count} ilmoitusta", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 3822fbcf858e02..14c7b70bd299c5 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -129,6 +129,7 @@ "confirmations.discard_edit_media.confirm": "Ipagpaliban", "confirmations.edit.confirm": "Baguhin", "confirmations.reply.confirm": "Tumugon", + "content_warning.show_more": "Magpakita ng higit pa", "conversation.mark_as_read": "Markahan bilang nabasa na", "conversation.open": "Tingnan ang pag-uusap", "copy_icon_button.copied": "Sinipi sa clipboard", @@ -190,6 +191,7 @@ "explore.title": "Tuklasin", "explore.trending_links": "Mga balita", "filter_modal.select_filter.search": "Hanapin o gumawa", + "filter_warning.matches_filter": "Tinutugma ang pangsala \"{title}\"", "firehose.all": "Lahat", "firehose.local": "Itong serbiro", "firehose.remote": "Ibang mga serbiro", @@ -218,6 +220,7 @@ "interaction_modal.on_another_server": "Sa ibang serbiro", "interaction_modal.on_this_server": "Sa serbirong ito", "interaction_modal.title.follow": "Sundan si {name}", + "interaction_modal.title.vote": "Bumoto sa botohan ni {name}", "intervals.full.days": "{number, plural, one {# araw} other {# na araw}}", "intervals.full.hours": "{number, plural, one {# oras} other {# na oras}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# na minuto}}", @@ -256,6 +259,7 @@ "navigation_bar.search": "Maghanap", "notification.admin.report": "Iniulat ni {name} si {target}", "notification.follow": "Sinundan ka ni {name}", + "notification.follow.name_and_others": "Sinundan ka ng/nina {name} at {count, plural, one {# iba pa} other {# na iba pa}}", "notification.follow_request": "Hinihiling ni {name} na sundan ka", "notification.label.private_mention": "Palihim na banggit", "notification.mentioned_you": "Binanggit ka ni {name}", @@ -270,6 +274,7 @@ "notifications.column_settings.alert": "Mga abiso sa Desktop", "notifications.column_settings.favourite": "Mga paborito:", "notifications.column_settings.follow": "Mga bagong tagasunod:", + "notifications.column_settings.group": "Pangkat", "notifications.column_settings.poll": "Resulta ng botohan:", "notifications.column_settings.unread_notifications.category": "Hindi Nabasang mga Abiso", "notifications.column_settings.update": "Mga pagbago:", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 47a90334408422..4f68737b145db1 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "A bheil thu airson sgur de leantainn a chleachdaiche?", "content_warning.hide": "Falaich am post", "content_warning.show": "Seall e co-dhiù", + "content_warning.show_more": "Seall barrachd dheth", "conversation.delete": "Sguab às an còmhradh", "conversation.mark_as_read": "Cuir comharra gun deach a leughadh", "conversation.open": "Seall an còmhradh", @@ -305,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr", "filter_modal.select_filter.title": "Criathraich am post seo", "filter_modal.title.status": "Criathraich post", + "filter_warning.matches_filter": "A’ maidseadh na criathraige “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil gin ann} one {O # neach} two {O # neach} few {O # daoine} other {O # duine}} air a bheil thu eòlach ’s dòcha", "filtered_notifications_banner.title": "Brathan criathraichte", "firehose.all": "Na h-uile", @@ -384,6 +386,7 @@ "interaction_modal.description.follow": "Le cunntas air Mastodon, ’s urrainn dhut {name} a leantainn ach am faigh thu na postaichean aca nad dhachaigh.", "interaction_modal.description.reblog": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a bhrosnachadh gus a cho-roinneadh leis an luchd-leantainn agad fhèin.", "interaction_modal.description.reply": "Le cunntas air Mastodon, ’s urrainn dhut freagairt a chur dhan phost seo.", + "interaction_modal.description.vote": "Le cunntas air Mastodon, ’s urrainn dhut bhòtadh sa chunntas-bheachd seo.", "interaction_modal.login.action": "Thoir dhachaigh mi", "interaction_modal.login.prompt": "Àrainn-lìn an fhrithealaiche dachaigh agad, can ailbhean.co-shaoghal.net", "interaction_modal.no_account_yet": "Nach eil thu air Mastodon?", @@ -395,6 +398,7 @@ "interaction_modal.title.follow": "Lean {name}", "interaction_modal.title.reblog": "Brosnaich am post aig {name}", "interaction_modal.title.reply": "Freagair dhan phost aig {name}", + "interaction_modal.title.vote": "Bhòt sa chunntas-bheachd aig {name}", "intervals.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}", "intervals.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}}", "intervals.full.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}}", @@ -461,7 +465,7 @@ "media_gallery.hide": "Falaich", "moved_to_account_banner.text": "Tha an cunntas {disabledAccount} agad à comas on a rinn thu imrich gu {movedToAccount}.", "mute_modal.hide_from_notifications": "Falaich o na brathan", - "mute_modal.hide_options": "Roghainnean falaich", + "mute_modal.hide_options": "Falaich na roghainnean", "mute_modal.indefinite": "Gus an dì-mhùch mi iad", "mute_modal.show_options": "Seall na roghainnean", "mute_modal.they_can_mention_and_follow": "’S urrainn dhaibh iomradh a thoirt ort agus do leantainn ach chan fhaic thu iad-san.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 822666ad8c7905..e89d386c853f55 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Cunha conta en Mastodon, poderás seguir a {name} e recibir as súas publicacións na túa cronoloxía de inicio.", "interaction_modal.description.reblog": "Cunha conta en Mastodon, poderás promover esta publicación para compartila con quen te siga.", "interaction_modal.description.reply": "Cunha conta en Mastodon, poderás responder a esta publicación.", + "interaction_modal.description.vote": "Podes votar nesta enquisa se tes unha conta en Mastodon.", "interaction_modal.login.action": "Lévame ao inicio", "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social", "interaction_modal.no_account_yet": "Aínda non tes unha conta?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Seguir a {name}", "interaction_modal.title.reblog": "Promover a publicación de {name}", "interaction_modal.title.reply": "Responder á publicación de {name}", + "interaction_modal.title.vote": "Vota na enquisa de {name}", "intervals.full.days": "{number, plural,one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 68201e18ded4e9..a692fb7fd33836 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Con un profilo di Mastodon, puoi seguire {name} per ricevere i suoi post nel feed della tua home.", "interaction_modal.description.reblog": "Con un profilo di Mastodon, puoi rebloggare questo post per condividerlo con i tuoi seguaci.", "interaction_modal.description.reply": "Con un profilo di Mastodon, puoi rispondere a questo post.", + "interaction_modal.description.vote": "Con un account su Mastodon puoi votare in questo sondaggio.", "interaction_modal.login.action": "Portami alla pagina iniziale", "interaction_modal.login.prompt": "Dominio del tuo server principale, ad esempio mastodon.social", "interaction_modal.no_account_yet": "Non su Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "Segui {name}", "interaction_modal.title.reblog": "Reblogga il post di {name}", "interaction_modal.title.reply": "Rispondi al post di {name}", + "interaction_modal.title.vote": "Vota nel sondaggio di {name}", "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}", "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 147546c9773146..563eb3b190af38 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -191,6 +191,7 @@ "confirmations.unfollow.title": "Desige utilizador?", "content_warning.hide": "Eskonde puvlikasyon", "content_warning.show": "Amostra entanto", + "content_warning.show_more": "Amostra mas", "conversation.delete": "Efasa konversasyon", "conversation.mark_as_read": "Marka komo meldado", "conversation.open": "Ve konversasyon", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 6bd16f3cfd01b6..cc567541934544 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -384,6 +384,7 @@ "interaction_modal.description.follow": "Med ein konto på Mastodon kan du fylgja {name} for å sjå innlegga deira i din heimestraum.", "interaction_modal.description.reblog": "Med ein konto på Mastodon kan du framheva dette innlegget for å dela det med dine eigne fylgjarar.", "interaction_modal.description.reply": "Med ein konto på Mastodon kan du svara på dette innlegget.", + "interaction_modal.description.vote": "Med ein konto på Mastodon kan du røyste i denne avrøystinga.", "interaction_modal.login.action": "Ta meg heim", "interaction_modal.login.prompt": "Domenenamnet til din heime-tenar. t.d. mastodon.social", "interaction_modal.no_account_yet": "Ikkje på Mastodon?", @@ -395,6 +396,7 @@ "interaction_modal.title.follow": "Fylg {name}", "interaction_modal.title.reblog": "Framhev {name} sitt innlegg", "interaction_modal.title.reply": "Svar på innlegge til {name}", + "interaction_modal.title.vote": "Røyst i {name} si avrøysting", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# time} other {# timar}}", "intervals.full.minutes": "{number, plural, one {# minutt} other {# minutt}}", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 304535a67c5907..7824d076295713 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -398,6 +398,7 @@ "interaction_modal.title.follow": "Följ {name}", "interaction_modal.title.reblog": "Boosta {name}s inlägg", "interaction_modal.title.reply": "Svara på {name}s inlägg", + "interaction_modal.title.vote": "Rösta i {name}s enkät", "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", "intervals.full.hours": "{number, plural, one {# timme} other {# timmar}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minuter}}", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 9e845c35e7d34d..b0ad6e1c66e1cf 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -44,7 +44,7 @@ "account.joined_short": "เข้าร่วมเมื่อ", "account.languages": "เปลี่ยนภาษาที่บอกรับ", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", - "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", + "account.locked_info": "สถานะความเป็นส่วนตัวของบัญชีนี้ถูกตั้งค่าเป็นล็อค เจ้าของตรวจสอบด้วยตนเองว่าใครสามารถติดตามพวกเขาได้", "account.media": "สื่อ", "account.mention": "กล่าวถึง @{name}", "account.moved_to": "{name} ได้ระบุว่าบัญชีใหม่ของเขาในตอนนี้คือ:", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 1c233a64034358..603ec5d791a6a7 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -383,10 +383,10 @@ "ignore_notifications_modal.not_following_title": "是否忽略你未关注的人的通知?", "ignore_notifications_modal.private_mentions_title": "是否忽略不请自来的私下提及?", "interaction_modal.description.favourite": "只需一个 Mastodon 账号,即可喜欢这条嘟文,对嘟文的作者展示您欣赏的态度,并保存嘟文以供日后使用。", - "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你可以关注 {name} 并在自己的主页上接收对方的新嘟文。", - "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你可以向自己的关注者们转发此嘟文。", - "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你可以回复此嘟文。", - "interaction_modal.description.vote": "拥有一个 Mastodon 账号,你可以参与此投票。", + "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你就可以关注 {name} 并在自己的主页上接收对方的新嘟文。", + "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你就可以向自己的关注者们转发此嘟文。", + "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你就可以回复此嘟文。", + "interaction_modal.description.vote": "拥有一个 Mastodon 账号,你就可以参与此投票。", "interaction_modal.login.action": "转到主页", "interaction_modal.login.prompt": "您所入驻的服务器域名,如:mastodon.social", "interaction_modal.no_account_yet": "不在 Mastodon 上?", diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 7d44a6a6b92528..24228d54a92862 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -60,7 +60,7 @@ fi: error: title: Tapahtui virhe new: - prompt_html: "%{client_name} haluaisi käyttöoikeuden tiliisi. Hyväksy tämä pyyntö vain, jos tunnistat lähteen ja luotat siihen." + prompt_html: "%{client_name} haluaisi luvan tilisi hyödyntämiseksi. Hyväksy pyyntö vain, jos tunnistat lähteen ja luotat siihen." review_permissions: Tarkista käyttöoikeudet title: Valtuutus vaaditaan show: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index f21e0bc7247d85..12cae075f0176a 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -239,6 +239,7 @@ eo: confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}" create_account_warning_html: "%{name} sendis averton al %{target}" create_announcement_html: "%{name} kreis novan anoncon %{target}" + create_canonical_email_block_html: "%{name} blokis retpoŝtadreson per krado %{target}" create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}" create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_block_html: "%{name} blokis domajnon %{target}" @@ -248,6 +249,7 @@ eo: create_user_role_html: "%{name} kreis rolon de %{target}" demote_user_html: "%{name} degradis uzanton %{target}" destroy_announcement_html: "%{name} forigis anoncon %{target}" + destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}" destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block_html: "%{name} malblokis domajnon %{target}" @@ -282,6 +284,7 @@ eo: update_custom_emoji_html: "%{name} ĝisdatigis la emoĝion %{target}" update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}" update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}" + update_report_html: "%{name} ĝisdatigis la raporton %{target}" update_status_html: "%{name} ĝisdatigis afiŝon de %{target}" update_user_role_html: "%{name} ŝanĝis la rolon %{target}" deleted_account: forigita konto @@ -788,6 +791,7 @@ eo: types: major: Ĉefa eldono minor: Neĉefa eldono + patch: Eldono de flikaĵo — korektoj de eraroj kaj facile apliki ŝanĝojn version: Versio statuses: account: Skribanto @@ -1106,6 +1110,7 @@ eo: title: Ni pretigu vin ĉe %{domain}. status: account_status: Statuso de la konto + confirming: Atendante ke retpoŝta konfirmo estos kompletigita. functional: Via konto estas tute funkcia. redirecting_to: Via konto estas neaktiva ĉar ĝi nun alidirektas al %{acct}. view_strikes: Vidi antauaj admonoj kontra via konto @@ -1155,6 +1160,8 @@ eo: before: 'Antau ol dauri, legu ĉi tiujn notojn zorgeme:' caches: Enhavo kiu kaŝmemorigitas de aliaj serviloj eble restas data_removal: Viaj afiŝoj kaj aliaj informoj estos forigita por eterne + email_change_html: Vi povas ŝanĝi vian retadreson sen forigi vian konton + email_contact_html: Se ĝi ankoraŭ ne alvenas, vi povas retpoŝti al %{email} por helpo irreversible: Vi ne povas regajni au reaktivigi vian konton more_details_html: Por pli da detaloj, vidi la privatecan politikon. username_available: Via uzantnomo iĝos denove disponebla From e1b7382ea6b8b944a363914490d6476726dd7075 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Wed, 30 Oct 2024 15:38:10 +0100 Subject: [PATCH 407/467] Add userinfo oauth endpoint (#32548) --- app/controllers/oauth/userinfo_controller.rb | 11 ++++ app/presenters/oauth_metadata_presenter.rb | 4 ++ app/serializers/oauth_metadata_serializer.rb | 2 +- app/serializers/oauth_userinfo_serializer.rb | 31 +++++++++++ config/initializers/cors.rb | 1 + config/routes.rb | 7 +++ spec/requests/oauth/userinfo_spec.rb | 51 +++++++++++++++++++ .../well_known/oauth_metadata_spec.rb | 17 +++---- 8 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 app/controllers/oauth/userinfo_controller.rb create mode 100644 app/serializers/oauth_userinfo_serializer.rb create mode 100644 spec/requests/oauth/userinfo_spec.rb diff --git a/app/controllers/oauth/userinfo_controller.rb b/app/controllers/oauth/userinfo_controller.rb new file mode 100644 index 00000000000000..e268b70dcc0609 --- /dev/null +++ b/app/controllers/oauth/userinfo_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Oauth::UserinfoController < Api::BaseController + before_action -> { doorkeeper_authorize! :profile }, only: [:show] + before_action :require_user! + + def show + @account = current_account + render json: @account, serializer: OauthUserinfoSerializer + end +end diff --git a/app/presenters/oauth_metadata_presenter.rb b/app/presenters/oauth_metadata_presenter.rb index 1e4d25165c7118..7d75e8498a5421 100644 --- a/app/presenters/oauth_metadata_presenter.rb +++ b/app/presenters/oauth_metadata_presenter.rb @@ -26,6 +26,10 @@ def token_endpoint oauth_token_url end + def userinfo_endpoint + oauth_userinfo_url + end + # As the api_v1_apps route doesn't technically conform to the specification # for OAuth 2.0 Dynamic Client Registration defined in RFC 7591 we use a # non-standard property for now to indicate the mastodon specific registration diff --git a/app/serializers/oauth_metadata_serializer.rb b/app/serializers/oauth_metadata_serializer.rb index 2afb4208fbc5ae..9c5f7365a4ceb0 100644 --- a/app/serializers/oauth_metadata_serializer.rb +++ b/app/serializers/oauth_metadata_serializer.rb @@ -2,7 +2,7 @@ class OauthMetadataSerializer < ActiveModel::Serializer attributes :issuer, :authorization_endpoint, :token_endpoint, - :revocation_endpoint, :scopes_supported, + :revocation_endpoint, :userinfo_endpoint, :scopes_supported, :response_types_supported, :response_modes_supported, :grant_types_supported, :token_endpoint_auth_methods_supported, :code_challenge_methods_supported, diff --git a/app/serializers/oauth_userinfo_serializer.rb b/app/serializers/oauth_userinfo_serializer.rb new file mode 100644 index 00000000000000..e2f37ae02e5e98 --- /dev/null +++ b/app/serializers/oauth_userinfo_serializer.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class OauthUserinfoSerializer < ActiveModel::Serializer + include RoutingHelper + + attributes :iss, :sub, :name, :preferred_username, :profile, :picture + + def iss + root_url + end + + def sub + ActivityPub::TagManager.instance.uri_for(object) + end + + def name + object.display_name + end + + def preferred_username + object.username + end + + def profile + ActivityPub::TagManager.instance.url_for(object) + end + + def picture + full_asset_url(object.avatar_original_url) + end +end diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index c530693a3f3a41..476f1fb07a507a 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -23,6 +23,7 @@ methods: %i(post put delete get patch options) resource '/oauth/token', methods: [:post] resource '/oauth/revoke', methods: [:post] + resource '/oauth/userinfo', methods: [:get, :post] end end end diff --git a/config/routes.rb b/config/routes.rb index 83170fba0f3180..0f4df757da155a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -64,6 +64,13 @@ def redirect_with_vary(path) tokens: 'oauth/tokens' end + namespace :oauth do + # As this is borrowed from OpenID, the specification says we must also support + # POST for the userinfo endpoint: + # https://openid.net/specs/openid-connect-core-1_0.html#UserInfo + match 'userinfo', via: [:get, :post], to: 'userinfo#show', defaults: { format: 'json' } + end + scope path: '.well-known' do scope module: :well_known do get 'oauth-authorization-server', to: 'oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' } diff --git a/spec/requests/oauth/userinfo_spec.rb b/spec/requests/oauth/userinfo_spec.rb new file mode 100644 index 00000000000000..7d6226cd412050 --- /dev/null +++ b/spec/requests/oauth/userinfo_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Oauth Userinfo Endpoint' do + include RoutingHelper + + let(:user) { Fabricate(:user) } + let(:account) { user.account } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'profile' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + shared_examples 'returns successfully' do + it 'returns http success' do + subject + + expect(response).to have_http_status(:success) + expect(response.content_type).to start_with('application/json') + expect(response.parsed_body).to include({ + iss: root_url, + sub: account_url(account), + name: account.display_name, + preferred_username: account.username, + profile: short_account_url(account), + picture: full_asset_url(account.avatar_original_url), + }) + end + end + + describe 'GET /oauth/userinfo' do + subject do + get '/oauth/userinfo', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + it_behaves_like 'returns successfully' + end + + # As this is borrowed from OpenID, the specification says we must also support + # POST for the userinfo endpoint: + # https://openid.net/specs/openid-connect-core-1_0.html#UserInfo + describe 'POST /oauth/userinfo' do + subject do + post '/oauth/userinfo', headers: headers + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + it_behaves_like 'returns successfully' + end +end diff --git a/spec/requests/well_known/oauth_metadata_spec.rb b/spec/requests/well_known/oauth_metadata_spec.rb index 9c86dbedfe7086..01e9146fde63d9 100644 --- a/spec/requests/well_known/oauth_metadata_spec.rb +++ b/spec/requests/well_known/oauth_metadata_spec.rb @@ -3,12 +3,6 @@ require 'rails_helper' RSpec.describe 'The /.well-known/oauth-authorization-server request' do - let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http } - - before do - host! Rails.configuration.x.local_domain - end - it 'returns http success with valid JSON response' do get '/.well-known/oauth-authorization-server' @@ -22,11 +16,12 @@ grant_types_supported << 'refresh_token' if Doorkeeper.configuration.refresh_token_enabled? expect(response.parsed_body).to include( - issuer: root_url(protocol: protocol), + issuer: root_url, service_documentation: 'https://docs.joinmastodon.org/', - authorization_endpoint: oauth_authorization_url(protocol: protocol), - token_endpoint: oauth_token_url(protocol: protocol), - revocation_endpoint: oauth_revoke_url(protocol: protocol), + authorization_endpoint: oauth_authorization_url, + token_endpoint: oauth_token_url, + userinfo_endpoint: oauth_userinfo_url, + revocation_endpoint: oauth_revoke_url, scopes_supported: Doorkeeper.configuration.scopes.map(&:to_s), response_types_supported: Doorkeeper.configuration.authorization_response_types, response_modes_supported: Doorkeeper.configuration.authorization_response_flows.flat_map(&:response_mode_matches).uniq, @@ -34,7 +29,7 @@ grant_types_supported: grant_types_supported, code_challenge_methods_supported: ['S256'], # non-standard extension: - app_registration_endpoint: api_v1_apps_url(protocol: protocol) + app_registration_endpoint: api_v1_apps_url ) end end From 01e25af2e320bd79955b83cc986eef2cd64b3e2a Mon Sep 17 00:00:00 2001 From: "Renato \"Lond\" Cerqueira" Date: Thu, 31 Oct 2024 10:37:31 +0100 Subject: [PATCH 408/467] Fix 'unknown' media attachment rendering in detailed view (#32713) --- .../mastodon/features/status/components/detailed_status.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/status/components/detailed_status.tsx b/app/javascript/mastodon/features/status/components/detailed_status.tsx index 0bf1bfda8bf8b2..5811efb1907f99 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.tsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.tsx @@ -152,7 +152,7 @@ export const DetailedStatus: React.FC<{ media = ; } else if (status.get('media_attachments').size > 0) { if ( - ['image', 'gifv'].includes( + ['image', 'gifv', 'unknown'].includes( status.getIn(['media_attachments', 0, 'type']) as string, ) || status.get('media_attachments').size > 1 From c2b498a2b0035bdeec1028e58f4914eefcac80a4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 31 Oct 2024 10:38:00 +0100 Subject: [PATCH 409/467] Fix IDs not being serialized as strings in annual reports API (#32710) --- app/lib/annual_report/commonly_interacted_with_accounts.rb | 2 +- app/lib/annual_report/most_reblogged_accounts.rb | 2 +- app/lib/annual_report/top_statuses.rb | 6 +++--- .../annual_report/commonly_interacted_with_accounts_spec.rb | 2 +- spec/lib/annual_report/most_reblogged_accounts_spec.rb | 2 +- spec/lib/annual_report/top_statuses_spec.rb | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/lib/annual_report/commonly_interacted_with_accounts.rb b/app/lib/annual_report/commonly_interacted_with_accounts.rb index e7482f0d52a792..30ab671d8a821c 100644 --- a/app/lib/annual_report/commonly_interacted_with_accounts.rb +++ b/app/lib/annual_report/commonly_interacted_with_accounts.rb @@ -7,7 +7,7 @@ def generate { commonly_interacted_with_accounts: commonly_interacted_with_accounts.map do |(account_id, count)| { - account_id: account_id, + account_id: account_id.to_s, count: count, } end, diff --git a/app/lib/annual_report/most_reblogged_accounts.rb b/app/lib/annual_report/most_reblogged_accounts.rb index 39ed3868ea06ad..cfc4022ca79019 100644 --- a/app/lib/annual_report/most_reblogged_accounts.rb +++ b/app/lib/annual_report/most_reblogged_accounts.rb @@ -7,7 +7,7 @@ def generate { most_reblogged_accounts: most_reblogged_accounts.map do |(account_id, count)| { - account_id: account_id, + account_id: account_id.to_s, count: count, } end, diff --git a/app/lib/annual_report/top_statuses.rb b/app/lib/annual_report/top_statuses.rb index c5abeaa58d81d2..74b129595ac1a3 100644 --- a/app/lib/annual_report/top_statuses.rb +++ b/app/lib/annual_report/top_statuses.rb @@ -8,9 +8,9 @@ def generate { top_statuses: { - by_reblogs: top_reblogs, - by_favourites: top_favourites, - by_replies: top_replies, + by_reblogs: top_reblogs&.to_s, + by_favourites: top_favourites&.to_s, + by_replies: top_replies&.to_s, }, } end diff --git a/spec/lib/annual_report/commonly_interacted_with_accounts_spec.rb b/spec/lib/annual_report/commonly_interacted_with_accounts_spec.rb index e99d3cb4a78495..0e31827912b58d 100644 --- a/spec/lib/annual_report/commonly_interacted_with_accounts_spec.rb +++ b/spec/lib/annual_report/commonly_interacted_with_accounts_spec.rb @@ -32,7 +32,7 @@ expect(subject.generate) .to include( commonly_interacted_with_accounts: contain_exactly( - include(account_id: other_account.id, count: 2) + include(account_id: other_account.id.to_s, count: 2) ) ) end diff --git a/spec/lib/annual_report/most_reblogged_accounts_spec.rb b/spec/lib/annual_report/most_reblogged_accounts_spec.rb index 0280ba19928755..2f04934e47799e 100644 --- a/spec/lib/annual_report/most_reblogged_accounts_spec.rb +++ b/spec/lib/annual_report/most_reblogged_accounts_spec.rb @@ -32,7 +32,7 @@ expect(subject.generate) .to include( most_reblogged_accounts: contain_exactly( - include(account_id: other_account.id, count: 2) + include(account_id: other_account.id.to_s, count: 2) ) ) end diff --git a/spec/lib/annual_report/top_statuses_spec.rb b/spec/lib/annual_report/top_statuses_spec.rb index b956b039735786..af29df1f651a0b 100644 --- a/spec/lib/annual_report/top_statuses_spec.rb +++ b/spec/lib/annual_report/top_statuses_spec.rb @@ -39,9 +39,9 @@ expect(subject.generate) .to include( top_statuses: include( - by_reblogs: reblogged_status.id, - by_favourites: favourited_status.id, - by_replies: replied_status.id + by_reblogs: reblogged_status.id.to_s, + by_favourites: favourited_status.id.to_s, + by_replies: replied_status.id.to_s ) ) end From e78db58b654b58c83f583ac42e141f53d0ee4f60 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:01:05 +0100 Subject: [PATCH 410/467] New Crowdin Translations (automated) (#32708) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/et.json | 7 +++++++ app/javascript/mastodon/locales/fi.json | 8 ++++---- app/javascript/mastodon/locales/ja.json | 2 ++ config/locales/doorkeeper.fi.yml | 2 +- config/locales/et.yml | 3 +++ config/locales/gd.yml | 3 +++ config/locales/simple_form.et.yml | 2 ++ config/locales/simple_form.gd.yml | 2 ++ 8 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index c360a3aa23405e..83766411798d34 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Küsitluse kestus", "compose_form.poll.multiple": "Mitu vastust", "compose_form.poll.option_placeholder": "Valik {number}", + "compose_form.poll.single": "Üks valik", "compose_form.poll.switch_to_multiple": "Muuda küsitlust mitmikvaliku lubamiseks", "compose_form.poll.switch_to_single": "Muuda küsitlust ainult ühe valiku lubamiseks", "compose_form.poll.type": "Stiil", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Ei jälgi enam kasutajat?", "content_warning.hide": "Peida postitus", "content_warning.show": "Näita ikkagi", + "content_warning.show_more": "Näita rohkem", "conversation.delete": "Kustuta vestlus", "conversation.mark_as_read": "Märgi loetuks", "conversation.open": "Vaata vestlust", @@ -304,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Kasuta olemasolevat kategooriat või loo uus", "filter_modal.select_filter.title": "Filtreeri seda postitust", "filter_modal.title.status": "Postituse filtreerimine", + "filter_warning.matches_filter": "Sobib filtriga “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Mitte üheltki inimeselt} one {Ühelt inimeselt} other {# inimeselt}}, keda võid teada", "filtered_notifications_banner.title": "Filtreeritud teavitused", "firehose.all": "Kõik", @@ -383,6 +386,7 @@ "interaction_modal.description.follow": "Mastodoni kontoga saad jälgida kasutajat {name}, et tema postitusi oma koduvoos näha.", "interaction_modal.description.reblog": "Mastodoni kontoga saad seda postitust levitada, jagades seda oma jälgijatele.", "interaction_modal.description.reply": "Mastodoni kontoga saad sellele postitusele vastata.", + "interaction_modal.description.vote": "Mastodoni kontoga saad sellest küsitlusest osa võtta.", "interaction_modal.login.action": "Vii mind avalehele", "interaction_modal.login.prompt": "Sinu koduserveri domeen, näiteks mastodon.social", "interaction_modal.no_account_yet": "Pole Mastodonis?", @@ -394,6 +398,7 @@ "interaction_modal.title.follow": "Jälgi kontot {name}", "interaction_modal.title.reblog": "Jaga {name} postitust", "interaction_modal.title.reply": "Vasta kasutaja {name} postitusele", + "interaction_modal.title.vote": "Hääleta {name} küsitluses", "intervals.full.days": "{number, plural, one {# päev} other {# päeva}}", "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}", @@ -506,6 +511,7 @@ "notification.favourite": "{name} märkis su postituse lemmikuks", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# veel} other {# teist}} märkis su postituse lemmikuks", "notification.follow": "{name} alustas su jälgimist", + "notification.follow.name_and_others": "{name} ja veel {count, plural, one {# kasutaja} other {# kasutajat}} hakkas sind jälgima", "notification.follow_request": "{name} soovib sind jälgida", "notification.follow_request.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} taotles sinu jälgimist", "notification.label.mention": "Mainimine", @@ -564,6 +570,7 @@ "notifications.column_settings.filter_bar.category": "Kiirfiltri riba", "notifications.column_settings.follow": "Uued jälgijad:", "notifications.column_settings.follow_request": "Uued jälgimistaotlused:", + "notifications.column_settings.group": "Grupp", "notifications.column_settings.mention": "Mainimised:", "notifications.column_settings.poll": "Küsitluse tulemused:", "notifications.column_settings.push": "Push teated", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index fd971edfd3bb29..2222e6038c08a5 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -439,7 +439,7 @@ "lightbox.close": "Sulje", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.zoom_in": "Näytä alkuperäiskokoisena", + "lightbox.zoom_in": "Näytä todellisen kokoisena", "lightbox.zoom_out": "Näytä sovitettuna", "limited_account_hint.action": "Näytä profiili joka tapauksessa", "limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.", @@ -529,7 +529,7 @@ "notification.moderation_warning.action_sensitive": "Tästä lähtien julkaisusi merkitään arkaluonteisiksi.", "notification.moderation_warning.action_silence": "Tiliäsi on rajoitettu.", "notification.moderation_warning.action_suspend": "Tilisi on jäädytetty.", - "notification.own_poll": "Kyselysi on päättynyt", + "notification.own_poll": "Äänestyksesi on päättynyt", "notification.poll": "Äänestys, johon osallistuit, on päättynyt", "notification.reblog": "{name} tehosti julkaisuasi", "notification.reblog.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} tehostivat julkaisuasi", @@ -572,7 +572,7 @@ "notifications.column_settings.follow_request": "Uudet seurantapyynnöt:", "notifications.column_settings.group": "Ryhmitä", "notifications.column_settings.mention": "Maininnat:", - "notifications.column_settings.poll": "Kyselyn tulokset:", + "notifications.column_settings.poll": "Äänestyksen tulokset:", "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", @@ -586,7 +586,7 @@ "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraamiset", "notifications.filter.mentions": "Maininnat", - "notifications.filter.polls": "Kyselyn tulokset", + "notifications.filter.polls": "Äänestyksen tulokset", "notifications.filter.statuses": "Päivitykset seuraamiltasi käyttäjiltä", "notifications.grant_permission": "Myönnä käyttöoikeus.", "notifications.group": "{count} ilmoitusta", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index c0ef224b70e664..6f319dbb10c7b3 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "Mastodonのアカウントで{name}さんをフォローしてホームフィードで投稿を受け取れます。", "interaction_modal.description.reblog": "Mastodonのアカウントでこの投稿をブーストして自分のフォロワーに共有できます。", "interaction_modal.description.reply": "Mastodonのアカウントでこの投稿に反応できます。", + "interaction_modal.description.vote": "Mastodonのアカウントでこのアンケートに票を入れることができます。", "interaction_modal.login.action": "サーバーに移動", "interaction_modal.login.prompt": "登録したサーバーのドメイン (例: mastodon.social)", "interaction_modal.no_account_yet": "Mastodonにアカウントがない場合は", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "{name}さんをフォロー", "interaction_modal.title.reblog": "{name}さんの投稿をブースト", "interaction_modal.title.reply": "{name}さんの投稿にリプライ", + "interaction_modal.title.vote": "{name}さんのアンケートに投票", "intervals.full.days": "{number}日", "intervals.full.hours": "{number}時間", "intervals.full.minutes": "{number}分", diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 24228d54a92862..7d44a6a6b92528 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -60,7 +60,7 @@ fi: error: title: Tapahtui virhe new: - prompt_html: "%{client_name} haluaisi luvan tilisi hyödyntämiseksi. Hyväksy pyyntö vain, jos tunnistat lähteen ja luotat siihen." + prompt_html: "%{client_name} haluaisi käyttöoikeuden tiliisi. Hyväksy tämä pyyntö vain, jos tunnistat lähteen ja luotat siihen." review_permissions: Tarkista käyttöoikeudet title: Valtuutus vaaditaan show: diff --git a/config/locales/et.yml b/config/locales/et.yml index 1a679af87f1f87..3be9add91ce76a 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1166,8 +1166,11 @@ et: use_security_key: Kasuta turvavõtit author_attribution: example_title: Näidistekst + hint_html: Kirjutad uudiseid või blogisid Mastodonist väljapool? Määra, kuidas sinule viidatakse, kui neid lehti jagatakse Mastodonis. + instructions: 'Vaata, et artikli HTML sisus oleks see kood sees:' more_from_html: Rohkem kasutajalt %{name} s_blog: Kasutaja %{name} blogi + then_instructions: Siis lisa avaldaja domeeninimi allolevasse välja. title: Autori tunnustamine challenge: confirm: Jätka diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 3495a070ecfe57..a05ce6ed3cd435 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1202,8 +1202,11 @@ gd: use_security_key: Cleachd iuchair tèarainteachd author_attribution: example_title: Ball-sampaill teacsa + hint_html: An sgrìobh thu naidheachdan no bloga taobh a-muigh Mhastodon? Stiùirich mar a thèid iomradh a thoirt ort nuair a bhios na h-artaigilean agad ’gan co-roinneadh air Mastodon. + instructions: 'Dèan cinnteach gu bheil an còd seo am broinn HTML an artaigil agad:' more_from_html: Barrachd o %{name} s_blog: Bloga aig %{name} + then_instructions: An uair sin, cuir ainm àrainn an fhoillseachaidh ris an raon gu h-ìosal. title: Aithris air an ùghdar challenge: confirm: Lean air adhart diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 4a9245682d4f05..a2ebf63b11c716 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -3,6 +3,7 @@ et: simple_form: hints: account: + attribution_domains_as_text: Üks rea peal. See kaitseb pahatahtlike viidete eest. discoverable: Su profiili ja avalikke postitusi võidakse Mastodoni erinevates piirkondades esile tõsta või soovitada ning su profiili soovitada teistele kasutajatele. display_name: Su täisnimi või naljanimi. fields: Su koduleht, sugu, vanus. Mistahes, mida soovid. @@ -143,6 +144,7 @@ et: url: Kuhu sündmused saadetakse labels: account: + attribution_domains_as_text: Sinule viidata lubatud veebilehed discoverable: Tõsta postitused ja profiil avastamise algoritmides esile fields: name: Nimetus diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index 9b6c156de79c94..af1f06a3167eb2 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -3,6 +3,7 @@ gd: simple_form: hints: account: + attribution_domains_as_text: Loidhne fa leth do gach fear. Dìonaidh seo o iomraidhean meallta. discoverable: Dh’fhaoidte gun dèid na postaichean poblach ’s a’ phròifil agad a bhrosnachadh no a mholadh ann an caochladh roinnean de Mhastodon agus gun dèid a’ phròifil agad a mholadh do chàch. display_name: D’ ainm slàn no spòrsail. fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu. @@ -143,6 +144,7 @@ gd: url: Far an dèid na tachartasan a chur labels: account: + attribution_domains_as_text: Na làraichean-lìn a dh’fhaodas iomradh a thoirt ort discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh fields: name: Leubail From 75b2ac49fb75cc9a842baec207325ef2b3a1335d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:02:47 +0100 Subject: [PATCH 411/467] Update dependency strong_migrations to v2.0.2 (#32705) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f1088b22b6010e..0166572b3cba8d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -823,7 +823,7 @@ GEM stoplight (4.1.0) redlock (~> 1.0) stringio (3.1.1) - strong_migrations (2.0.1) + strong_migrations (2.0.2) activerecord (>= 6.1) swd (1.3.0) activesupport (>= 3) From 87aa3467cf1b494ecd85d6ffcc94c2cdbec9dce4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:03:07 +0100 Subject: [PATCH 412/467] Update dependency selenium-webdriver to v4.26.0 (#32698) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0166572b3cba8d..febc42e401d555 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -782,7 +782,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - selenium-webdriver (4.25.0) + selenium-webdriver (4.26.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) From b3b3c0fe9606147fd60e6306ffc384275bc97616 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:28:20 +0100 Subject: [PATCH 413/467] Update dependency core-js to v3.39.0 (#32707) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7762f961022c58..0b24803e6c7389 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6373,9 +6373,9 @@ __metadata: linkType: hard "core-js@npm:^3.30.2": - version: 3.38.1 - resolution: "core-js@npm:3.38.1" - checksum: 10c0/7df063b6f13a54e46515817ac3e235c6c598a4d3de65cd188a061fc250642be313b895fb9fb2f36e1e31890a1bb4ef61d82666a340413f540b7ce3c65689739b + version: 3.39.0 + resolution: "core-js@npm:3.39.0" + checksum: 10c0/f7602069b6afb2e3298eec612a5c1e0c3e6a458930fbfc7a4c5f9ac03426507f49ce395eecdd2d9bae9024f820e44582b67ffe16f2272395af26964f174eeb6b languageName: node linkType: hard From 516c97a112f6b9e9cc34c56d7300d04b54954f65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:42:18 +0100 Subject: [PATCH 414/467] Update dependency node to v22 (#32689) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- Dockerfile | 2 +- streaming/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index 10fef252a9f178..8b84b727be4119 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.18 +22.11 diff --git a/Dockerfile b/Dockerfile index acb7631eb9b502..c6d8466f43c048 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM} ARG RUBY_VERSION="3.3.5" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node -ARG NODE_MAJOR_VERSION="20" +ARG NODE_MAJOR_VERSION="22" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) diff --git a/streaming/Dockerfile b/streaming/Dockerfile index bed6b637380dac..f94c04e7a2adef 100644 --- a/streaming/Dockerfile +++ b/streaming/Dockerfile @@ -9,7 +9,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM} # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node -ARG NODE_MAJOR_VERSION="20" +ARG NODE_MAJOR_VERSION="22" # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] ARG DEBIAN_VERSION="bookworm" # Node image to use for base image based on combined variables (ex: 20-bookworm-slim) From 917a799c673ea617beb9452c5fddbaaca6f406f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A9=20Dupuis?= <1518299+JoeDupuis@users.noreply.github.com> Date: Thu, 31 Oct 2024 06:46:07 -0400 Subject: [PATCH 415/467] Migrate from the deprecated `azure-storage-blob` to `azure-blob` (#32080) Co-authored-by: Renaud Chaput --- Gemfile | 2 +- Gemfile.lock | 24 +++++++----------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/Gemfile b/Gemfile index 97856d78255c93..97f5c7bcc5ad6d 100644 --- a/Gemfile +++ b/Gemfile @@ -18,8 +18,8 @@ gem 'aws-sdk-s3', '~> 1.123', require: false gem 'blurhash', '~> 0.1' gem 'fog-core', '<= 2.6.0' gem 'fog-openstack', '~> 1.0', require: false +gem 'jd-paperclip-azure', '~> 3.0', require: false gem 'kt-paperclip', '~> 7.2' -gem 'md-paperclip-azure', '~> 2.2', require: false gem 'ruby-vips', '~> 2.2', require: false gem 'active_model_serializers', '~> 0.10' diff --git a/Gemfile.lock b/Gemfile.lock index febc42e401d555..46a6766e5b7a35 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -115,14 +115,8 @@ GEM aws-sigv4 (~> 1.5) aws-sigv4 (1.10.1) aws-eventstream (~> 1, >= 1.0.2) - azure-storage-blob (2.0.3) - azure-storage-common (~> 2.0) - nokogiri (~> 1, >= 1.10.8) - azure-storage-common (2.0.4) - faraday (~> 1.0) - faraday_middleware (~> 1.0, >= 1.0.0.rc1) - net-http-persistent (~> 4.0) - nokogiri (~> 1, >= 1.10.8) + azure-blob (0.5.2) + rexml base64 (0.2.0) bcp47_spec (0.2.1) bcrypt (3.1.20) @@ -258,8 +252,6 @@ GEM faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) fast_blank (1.0.1) fastimage (2.3.1) ffi (1.17.0) @@ -350,6 +342,10 @@ GEM irb (1.14.1) rdoc (>= 4.0.0) reline (>= 0.4.2) + jd-paperclip-azure (3.0.0) + addressable (~> 2.5) + azure-blob (~> 0.5.2) + hashie (~> 5.0) jmespath (1.6.2) json (2.7.4) json-canonicalization (1.0.0) @@ -424,10 +420,6 @@ GEM mario-redis-lock (1.2.1) redis (>= 3.0.5) matrix (0.4.2) - md-paperclip-azure (2.2.0) - addressable (~> 2.5) - azure-storage-blob (~> 2.0.1) - hashie (~> 5.0) memory_profiler (1.1.0) mime-types (3.6.0) logger @@ -442,8 +434,6 @@ GEM mutex_m (0.2.0) net-http (0.4.1) uri - net-http-persistent (4.0.2) - connection_pool (~> 2.2) net-imap (0.5.0) date net-protocol @@ -958,6 +948,7 @@ DEPENDENCIES idn-ruby inline_svg irb (~> 1.8) + jd-paperclip-azure (~> 3.0) json-ld json-ld-preloaded (~> 3.2) json-schema (~> 5.0) @@ -969,7 +960,6 @@ DEPENDENCIES lograge (~> 0.12) mail (~> 2.8) mario-redis-lock (~> 1.2) - md-paperclip-azure (~> 2.2) memory_profiler mime-types (~> 3.6.0) net-http (~> 0.4.0) From a20ac20302f14e8cd14cd1abd6d02ddf528b58f5 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 31 Oct 2024 09:27:47 -0400 Subject: [PATCH 416/467] Add model spec for `Tombstone` (#32697) --- app/models/tombstone.rb | 2 ++ spec/fabricators/tombstone_fabricator.rb | 6 ++++++ spec/models/tombstone_spec.rb | 15 +++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 spec/fabricators/tombstone_fabricator.rb create mode 100644 spec/models/tombstone_spec.rb diff --git a/app/models/tombstone.rb b/app/models/tombstone.rb index bf666c43ac1993..92eddfc626855f 100644 --- a/app/models/tombstone.rb +++ b/app/models/tombstone.rb @@ -14,4 +14,6 @@ class Tombstone < ApplicationRecord belongs_to :account + + validates :uri, presence: true end diff --git a/spec/fabricators/tombstone_fabricator.rb b/spec/fabricators/tombstone_fabricator.rb new file mode 100644 index 00000000000000..b4cab086af0fe1 --- /dev/null +++ b/spec/fabricators/tombstone_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:tombstone) do + account + uri { sequence(:uri) { |i| "https://host.example/value/#{i}" } } +end diff --git a/spec/models/tombstone_spec.rb b/spec/models/tombstone_spec.rb new file mode 100644 index 00000000000000..ba0603fe3dbb15 --- /dev/null +++ b/spec/models/tombstone_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Tombstone do + describe 'Associations' do + it { is_expected.to belong_to(:account).required } + end + + describe 'Validations' do + subject { Fabricate.build :tombstone } + + it { is_expected.to validate_presence_of(:uri) } + end +end From b231c3c1bfb701c504d3d17221cf4a758668a49e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 31 Oct 2024 11:12:08 -0400 Subject: [PATCH 417/467] Drop support for ruby 3.1 (#32363) --- .github/workflows/test-ruby.yml | 4 ---- .rubocop.yml | 2 +- Gemfile | 2 +- README.md | 2 +- app/controllers/activitypub/outboxes_controller.rb | 6 +++--- app/controllers/api/v1/accounts_controller.rb | 4 ++-- app/controllers/api/v1/follow_requests_controller.rb | 4 ++-- app/helpers/media_component_helper.rb | 12 ++++++------ app/helpers/routing_helper.rb | 12 ++++++------ app/lib/activitypub/activity.rb | 4 ++-- app/lib/rss/element.rb | 4 ++-- app/lib/translation_service/deepl.rb | 4 ++-- app/lib/translation_service/libre_translate.rb | 4 ++-- app/models/concerns/status/snapshot_concern.rb | 4 ++-- app/models/session_activation.rb | 4 ++-- app/models/user.rb | 4 ++-- lib/mastodon/cli/accounts.rb | 1 - spec/support/command_line_helpers.rb | 4 ++-- 18 files changed, 38 insertions(+), 43 deletions(-) diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index c05c8333b2048c..770cd72a1baea5 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -124,7 +124,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' steps: @@ -226,7 +225,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' steps: @@ -305,7 +303,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' @@ -422,7 +419,6 @@ jobs: fail-fast: false matrix: ruby-version: - - '3.1' - '3.2' - '.ruby-version' search-image: diff --git a/.rubocop.yml b/.rubocop.yml index 965f56f3e703e6..ebeed6ea4900ca 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -8,7 +8,7 @@ AllCops: - lib/mastodon/migration_helpers.rb ExtraDetails: true NewCops: enable - TargetRubyVersion: 3.1 # Oldest supported ruby version + TargetRubyVersion: 3.2 # Oldest supported ruby version inherit_from: - .rubocop/layout.yml diff --git a/Gemfile b/Gemfile index 97f5c7bcc5ad6d..0c3484a7aa9fd1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ # frozen_string_literal: true source 'https://rubygems.org' -ruby '>= 3.1.0' +ruby '>= 3.2.0' gem 'propshaft' gem 'puma', '~> 6.3' diff --git a/README.md b/README.md index 9c0b0d20ed5d02..17d9eefb573a9c 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre - **PostgreSQL** 12+ - **Redis** 4+ -- **Ruby** 3.1+ +- **Ruby** 3.2+ - **Node.js** 18+ The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, and **Scalingo**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index b8baf64e1a59a8..0c995edbf87277 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -41,11 +41,11 @@ def outbox_presenter end end - def outbox_url(**kwargs) + def outbox_url(**) if params[:account_username].present? - account_outbox_url(@account, **kwargs) + account_outbox_url(@account, **) else - instance_actor_outbox_url(**kwargs) + instance_actor_outbox_url(**) end end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 28acaeea051834..f7d3de7f946c58 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -106,8 +106,8 @@ def check_following_self render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id end - def relationships(**options) - AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) + def relationships(**) + AccountRelationshipsPresenter.new([@account], current_user.account_id, **) end def account_ids diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index 29a09fceefe82e..4b44cfe531d26f 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -28,8 +28,8 @@ def account @account ||= Account.find(params[:id]) end - def relationships(**options) - AccountRelationshipsPresenter.new([account], current_user.account_id, **options) + def relationships(**) + AccountRelationshipsPresenter.new([account], current_user.account_id, **) end def load_accounts diff --git a/app/helpers/media_component_helper.rb b/app/helpers/media_component_helper.rb index 60ccdd08359038..269566528aab86 100644 --- a/app/helpers/media_component_helper.rb +++ b/app/helpers/media_component_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module MediaComponentHelper - def render_video_component(status, **options) + def render_video_component(status, **) video = status.ordered_media_attachments.first meta = video.file.meta || {} @@ -18,14 +18,14 @@ def render_video_component(status, **options) media: [ serialize_media_attachment(video), ].as_json, - }.merge(**options) + }.merge(**) react_component :video, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } end end - def render_audio_component(status, **options) + def render_audio_component(status, **) audio = status.ordered_media_attachments.first meta = audio.file.meta || {} @@ -38,19 +38,19 @@ def render_audio_component(status, **options) foregroundColor: meta.dig('colors', 'foreground'), accentColor: meta.dig('colors', 'accent'), duration: meta.dig('original', 'duration'), - }.merge(**options) + }.merge(**) react_component :audio, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } end end - def render_media_gallery_component(status, **options) + def render_media_gallery_component(status, **) component_params = { sensitive: sensitive_viewer?(status, current_account), autoplay: prefers_autoplay?, media: status.ordered_media_attachments.map { |a| serialize_media_attachment(a).as_json }, - }.merge(**options) + }.merge(**) react_component :media_gallery, component_params do render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments } diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 15d988f64d2ef2..22efc5f0924e44 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -14,8 +14,8 @@ def default_url_options end end - def full_asset_url(source, **options) - source = ActionController::Base.helpers.asset_url(source, **options) unless use_storage? + def full_asset_url(source, **) + source = ActionController::Base.helpers.asset_url(source, **) unless use_storage? URI.join(asset_host, source).to_s end @@ -24,12 +24,12 @@ def asset_host Rails.configuration.action_controller.asset_host || root_url end - def frontend_asset_path(source, **options) - asset_pack_path("media/#{source}", **options) + def frontend_asset_path(source, **) + asset_pack_path("media/#{source}", **) end - def frontend_asset_url(source, **options) - full_asset_url(frontend_asset_path(source, **options)) + def frontend_asset_url(source, **) + full_asset_url(frontend_asset_path(source, **)) end def use_storage? diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 322f3e27adb604..29411774a1be3c 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -20,9 +20,9 @@ def perform end class << self - def factory(json, account, **options) + def factory(json, account, **) @json = json - klass&.new(json, account, **options) + klass&.new(json, account, **) end private diff --git a/app/lib/rss/element.rb b/app/lib/rss/element.rb index 7142fa03965bdc..073fad12341d58 100644 --- a/app/lib/rss/element.rb +++ b/app/lib/rss/element.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true class RSS::Element - def self.with(*args, &block) - new(*args).tap(&block).to_element + def self.with(*, &block) + new(*).tap(&block).to_element end def create_element(name, content = nil) diff --git a/app/lib/translation_service/deepl.rb b/app/lib/translation_service/deepl.rb index 925a1cf1723c15..7761dbe626d5f6 100644 --- a/app/lib/translation_service/deepl.rb +++ b/app/lib/translation_service/deepl.rb @@ -42,8 +42,8 @@ def normalize_language(language) subtags.join('-') end - def request(verb, path, **options) - req = Request.new(verb, "#{base_url}#{path}", **options) + def request(verb, path, **) + req = Request.new(verb, "#{base_url}#{path}", **) req.add_headers(Authorization: "DeepL-Auth-Key #{@api_key}") req.perform do |res| case res.code diff --git a/app/lib/translation_service/libre_translate.rb b/app/lib/translation_service/libre_translate.rb index de43d7c88c0606..0df8590f870939 100644 --- a/app/lib/translation_service/libre_translate.rb +++ b/app/lib/translation_service/libre_translate.rb @@ -27,8 +27,8 @@ def languages private - def request(verb, path, **options) - req = Request.new(verb, "#{@base_url}#{path}", allow_local: true, **options) + def request(verb, path, **) + req = Request.new(verb, "#{@base_url}#{path}", allow_local: true, **) req.add_headers('Content-Type': 'application/json') req.perform do |res| case res.code diff --git a/app/models/concerns/status/snapshot_concern.rb b/app/models/concerns/status/snapshot_concern.rb index ba624d943e46ec..02897109044e44 100644 --- a/app/models/concerns/status/snapshot_concern.rb +++ b/app/models/concerns/status/snapshot_concern.rb @@ -29,7 +29,7 @@ def build_snapshot(account_id: nil, at_time: nil, rate_limit: true) ) end - def snapshot!(**options) - build_snapshot(**options).save! + def snapshot!(**) + build_snapshot(**).save! end end diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 8b8e533d30c980..31f18fd7ef09be 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -35,8 +35,8 @@ def active?(id) id && exists?(session_id: id) end - def activate(**options) - activation = create!(**options) + def activate(**) + activation = create!(**) purge_old activation end diff --git a/app/models/user.rb b/app/models/user.rb index c32a575edff71a..69c5a01569774a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -405,8 +405,8 @@ def pending_devise_notifications @pending_devise_notifications ||= [] end - def render_and_send_devise_message(notification, *args, **kwargs) - devise_mailer.send(notification, self, *args, **kwargs).deliver_later + def render_and_send_devise_message(notification, *, **) + devise_mailer.send(notification, self, *, **).deliver_later end def set_approved diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index e76735298f20f5..23c907543f2884 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'set' require_relative 'base' module Mastodon::CLI diff --git a/spec/support/command_line_helpers.rb b/spec/support/command_line_helpers.rb index 6f9d63d9390281..09b2b70ba10261 100644 --- a/spec/support/command_line_helpers.rb +++ b/spec/support/command_line_helpers.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true module CommandLineHelpers - def output_results(*args) + def output_results(*) output( - include(*args) + include(*) ).to_stdout end end From 080b3b6ca5dde6426d0f5f44345980dbfdc569c0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 31 Oct 2024 11:13:20 -0400 Subject: [PATCH 418/467] Update `rails-i18n` to version 7.0.10 (#32719) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 46a6766e5b7a35..fae39aefc3c7bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -654,7 +654,7 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.9) + rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) railties (7.1.4.2) From b06fd54c305915527e3a6edc575dc23b623143ef Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 31 Oct 2024 12:00:21 -0400 Subject: [PATCH 419/467] Update `zeitwerk` to version 2.7.1 (#32723) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index fae39aefc3c7bd..c7148381704ed4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -893,7 +893,7 @@ GEM xorcist (1.1.3) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.18) + zeitwerk (2.7.1) PLATFORMS ruby From dfdc6b2871f21b2c381e2c4acfd4909c432134e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 09:38:20 +0100 Subject: [PATCH 420/467] Update devDependencies (non-major) (#32761) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0b24803e6c7389..094af8590036d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2206,8 +2206,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.3.5 - resolution: "@formatjs/cli@npm:6.3.5" + version: 6.3.6 + resolution: "@formatjs/cli@npm:6.3.6" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2236,7 +2236,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/f3fd57de6df3ef0cfa668813c49acd7dcbecbf52444f30e8edec4ee7bc2d8c47c2e6fb4b7ce3c9c5b4595bdf8416c37953ebb05b400f99874a7f810943f6265b + checksum: 10c0/55f10699644c8b879d7fcf38660e7d9b0642c5f40ca59076c25ba190f350b48d7edb7f3d8481cc6139d3a708ee73f877c2c0a7d1865f15e80a73667270c9b7e3 languageName: node linkType: hard @@ -3445,8 +3445,8 @@ __metadata: linkType: hard "@testing-library/jest-dom@npm:^6.0.0": - version: 6.6.2 - resolution: "@testing-library/jest-dom@npm:6.6.2" + version: 6.6.3 + resolution: "@testing-library/jest-dom@npm:6.6.3" dependencies: "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" @@ -3455,7 +3455,7 @@ __metadata: dom-accessibility-api: "npm:^0.6.3" lodash: "npm:^4.17.21" redent: "npm:^3.0.0" - checksum: 10c0/1c51390f97063ce8b06a7267534aac0d6ac9b1f27042a0ae43ca52d886b32c9d2b0ff85e62e7cfeb7e1f089ef03c4d75fda4f2b7b1f08afb4bdb09a5d56566d9 + checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6 languageName: node linkType: hard From 165710647353c6fd1deccb2b2309c4a7f5a4e7f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 09:38:32 +0100 Subject: [PATCH 421/467] Update DefinitelyTyped types (non-major) (#32760) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 094af8590036d5..d753de80e626c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3776,9 +3776,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.195": - version: 4.17.12 - resolution: "@types/lodash@npm:4.17.12" - checksum: 10c0/106008f628ea3c74ed7ee7842dee79e230c84e3721ac38c293700031adb5bd130113048c22f476dbde0d0c119506b0fc447d4bd62eca922682d11e00e1377967 + version: 4.17.13 + resolution: "@types/lodash@npm:4.17.13" + checksum: 10c0/c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9 languageName: node linkType: hard @@ -4151,11 +4151,11 @@ __metadata: linkType: hard "@types/ws@npm:^8.5.9": - version: 8.5.12 - resolution: "@types/ws@npm:8.5.12" + version: 8.5.13 + resolution: "@types/ws@npm:8.5.13" dependencies: "@types/node": "npm:*" - checksum: 10c0/3fd77c9e4e05c24ce42bfc7647f7506b08c40a40fe2aea236ef6d4e96fc7cb4006a81ed1b28ec9c457e177a74a72924f4768b7b4652680b42dfd52bc380e15f9 + checksum: 10c0/a5430aa479bde588e69cb9175518d72f9338b6999e3b2ae16fc03d3bdcff8347e486dc031e4ed14601260463c07e1f9a0d7511dfc653712b047c439c680b0b34 languageName: node linkType: hard From f2763d978c645597217163b64ea678ac0688b570 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 09:38:46 +0100 Subject: [PATCH 422/467] Update formatjs monorepo (#32751) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 176 +++++++++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/yarn.lock b/yarn.lock index d753de80e626c9..d54e6b3172dc8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2251,14 +2251,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.2.1": - version: 2.2.1 - resolution: "@formatjs/ecma402-abstract@npm:2.2.1" +"@formatjs/ecma402-abstract@npm:2.2.2": + version: 2.2.2 + resolution: "@formatjs/ecma402-abstract@npm:2.2.2" dependencies: - "@formatjs/fast-memoize": "npm:2.2.2" - "@formatjs/intl-localematcher": "npm:0.5.6" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/bb0b01282368d201d9bcfb3232963af90069f6048da5824d38a674118fd49a0cb92b05d19d2526fe6d035428b2e47e1abd671bb59a673317f1418e67974253fa + checksum: 10c0/dc712dd9959c9caa161282e3fb8f4a45c7368c4ada07576619d22b72678ece83459d6ec8b5ac3eee7def3b4398b68483c0ee91b49241024b41906333fd94ce21 languageName: node linkType: hard @@ -2271,12 +2271,12 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.2": - version: 2.2.2 - resolution: "@formatjs/fast-memoize@npm:2.2.2" +"@formatjs/fast-memoize@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/fast-memoize@npm:2.2.3" dependencies: tslib: "npm:2" - checksum: 10c0/cebbf632a6ed8798ed67dba59d05be8bbe81c9ada7bcbc8ce69798fbaa5e0117c35792f212097d28b8b06fb99cf73bdbc7754702c06cda34f847e5082814643b + checksum: 10c0/f1004c3b280de7e362bd37c5f48ff34c2ba1d6271d4a7b695fed561d1201a3379397824d8bffbf15fecee344d1e70398393bbb04297f242692310a305f12e75b languageName: node linkType: hard @@ -2291,14 +2291,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.9.1": - version: 2.9.1 - resolution: "@formatjs/icu-messageformat-parser@npm:2.9.1" +"@formatjs/icu-messageformat-parser@npm:2.9.2": + version: 2.9.2 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.2" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/icu-skeleton-parser": "npm:1.8.5" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/icu-skeleton-parser": "npm:1.8.6" tslib: "npm:2" - checksum: 10c0/53554edc7d41f6bd737dc3bb3e03dcd4b4081b4fc9a70383612b87993c1639747d1d3827d8ebb13f8bf3566c60442549a0a42df4959699eef76633d4c7b49b25 + checksum: 10c0/5f65377e56a2f0426240f05c015584b629713f0c9e1b7bc6db78c6d2e94b4d28bdd4c674ee32be695e493cd2f80a8168b7cd3c64a23ec36f9e18db2ae080e51b languageName: node linkType: hard @@ -2312,35 +2312,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.5": - version: 1.8.5 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.5" +"@formatjs/icu-skeleton-parser@npm:1.8.6": + version: 1.8.6 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.6" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" + "@formatjs/ecma402-abstract": "npm:2.2.2" tslib: "npm:2" - checksum: 10c0/3e5ddd26e5dc983547320ca09b4a5daa692a00c15382e85474a9a539c223b581dba2290708d71aae12589c3ddd053b3bfd0dab0a07a11c44033fb313605566bc + checksum: 10c0/16993372de234aed52a75877247d911125e063aef77daf779e839a3c7a1213b37ffc8c95350375d303e43e30245711a0db693c4d856e6b0c2f3402644a8fb72d languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.8.1": - version: 6.8.1 - resolution: "@formatjs/intl-displaynames@npm:6.8.1" +"@formatjs/intl-displaynames@npm:6.8.2": + version: 6.8.2 + resolution: "@formatjs/intl-displaynames@npm:6.8.2" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/intl-localematcher": "npm:0.5.6" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/6d39c7bbc3cf0b1398463d662662e5c7c8b873fe977e93b7d702a337f1ed639246492b71b7138c1f193df9e1045add5609edb3fd3efc76c6174ce134c02a186f + checksum: 10c0/52f3e7f74f9ce114860e235d66889f0cea559df060a879852613f76c673a355f0fc7ebe7d173f058dbbd9e760b57816a3b09a1e447448fef262abc76332bc132 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.7.1": - version: 7.7.1 - resolution: "@formatjs/intl-listformat@npm:7.7.1" +"@formatjs/intl-listformat@npm:7.7.2": + version: 7.7.2 + resolution: "@formatjs/intl-listformat@npm:7.7.2" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/intl-localematcher": "npm:0.5.6" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/9ac38d34956ee8018c000bbd594c84f1de283d18441f1376b072658844735a4ebee61ac4711f824dd0a89f4a855acfc7a24159e4cd8a4747609b1d2153316a61 + checksum: 10c0/d42fa043380252f11e300c696f6b366f817c93cac6d9aabc6dc96fb8efcfbc2873b11adac5928e4e1ce7eb1482bbb22b76a5a8520ef7f742ae23863b6edaa088 languageName: node linkType: hard @@ -2353,43 +2353,43 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.6": - version: 0.5.6 - resolution: "@formatjs/intl-localematcher@npm:0.5.6" +"@formatjs/intl-localematcher@npm:0.5.7": + version: 0.5.7 + resolution: "@formatjs/intl-localematcher@npm:0.5.7" dependencies: tslib: "npm:2" - checksum: 10c0/39fc454641b7871f4b37416a01c7851624db6f1bf6cdcd5c854dfe06b95c0ca7540ec7c803a654140fc3f1c758596a684de8054bc95c4d6c7962091c251f5671 + checksum: 10c0/1ae374ca146a0d7457794926eed808c99971628e594f704a42ae2540b1f38928b26cbf942a7bbcc2796cc9fe8d9d7a603ac422bd9b89b714d2f91b506da40792 languageName: node linkType: hard "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.3.1 - resolution: "@formatjs/intl-pluralrules@npm:5.3.1" + version: 5.3.2 + resolution: "@formatjs/intl-pluralrules@npm:5.3.2" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/intl-localematcher": "npm:0.5.6" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/71a87aa81d5d69d56dca0636144f8f9714176b95fe3bc92ae1e455322c09b5b09ba0018315d81def00e89fc95e4fbffe41110104c86eb189ba6d58ac09efa48c + checksum: 10c0/c8fde868650b2ac9fb9799791a517b052bd2eb8fb2bcdee225a131d20dd300125eb608129b47bc955e8fdf8f90f7b981bb889485fd6f9bcfb7a267e3d07a495d languageName: node linkType: hard -"@formatjs/intl@npm:2.10.11": - version: 2.10.11 - resolution: "@formatjs/intl@npm:2.10.11" +"@formatjs/intl@npm:2.10.12": + version: 2.10.12 + resolution: "@formatjs/intl@npm:2.10.12" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/fast-memoize": "npm:2.2.2" - "@formatjs/icu-messageformat-parser": "npm:2.9.1" - "@formatjs/intl-displaynames": "npm:6.8.1" - "@formatjs/intl-listformat": "npm:7.7.1" - intl-messageformat: "npm:10.7.3" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.2" + "@formatjs/intl-displaynames": "npm:6.8.2" + "@formatjs/intl-listformat": "npm:7.7.2" + intl-messageformat: "npm:10.7.4" tslib: "npm:2" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/83baa76d1194dbaae38c21d28cdc4e1ce024f8c49a37e2c02629a9f6afe18912f640435e346fae11af7d8128dac6355b36b93cff37685542ab3095edf3ec6d19 + checksum: 10c0/4475b1167c1cc6f2dbf9e373d4ba964032f80a25ca1ba18eca03dfa1730fcaef2c7cfe046252aaf3c23cf87e0968d565d3b7d1c2c336aec097193914173583c1 languageName: node linkType: hard @@ -2413,13 +2413,13 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.20": - version: 3.13.20 - resolution: "@formatjs/ts-transformer@npm:3.13.20" +"@formatjs/ts-transformer@npm:3.13.21": + version: 3.13.21 + resolution: "@formatjs/ts-transformer@npm:3.13.21" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@formatjs/icu-messageformat-parser": "npm:2.9.2" "@types/json-stable-stringify": "npm:1" - "@types/node": "npm:14 || 16 || 17 || 18 || 20" + "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" chalk: "npm:4" json-stable-stringify: "npm:1" tslib: "npm:2" @@ -2429,7 +2429,7 @@ __metadata: peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/0c1a203ce2e0efc24b9c1fc087771330f9630ebb4220e34dd2fffe64d5ee94816554df8ed8402a54dd588c186617765efb6c200a3373cf1d5dfb093ba8d70416 + checksum: 10c0/e83c8ebd210e451743745e939193bb37a1bba3acc5ba1e15a509968bdbb98a07d0761133cc5aa2375074281d56d9987f782af712111d82ee1f7aef7ad30d88fc languageName: node linkType: hard @@ -3803,12 +3803,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20": - version: 20.16.13 - resolution: "@types/node@npm:20.16.13" +"@types/node@npm:*, @types/node@npm:14 || 16 || 17 || 18 || 20 || 22": + version: 22.8.6 + resolution: "@types/node@npm:22.8.6" dependencies: - undici-types: "npm:~6.19.2" - checksum: 10c0/7f4fd7176db0802c62e11ebbf7a66d0248e2dc8ec9153d9fc8bcb164d9aed581d91c407046c823c522e60d0babfdc24a1618dba7f2c6920ef1a24e1d416c9550 + undici-types: "npm:~6.19.8" + checksum: 10c0/d3a11f2549234a91a4c5d0ff35ab4bdcb7ba34db4d3f1d189be39b8bd41c19aac98d117150a95a9c5a9d45b1014135477ea240b2b8317c86ae3d3cf1c3b3f8f4 languageName: node linkType: hard @@ -3998,7 +3998,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7, @types/react@npm:^18.3.11": +"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": version: 18.3.12 resolution: "@types/react@npm:18.3.12" dependencies: @@ -5180,21 +5180,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.22 - resolution: "babel-plugin-formatjs@npm:10.5.22" + version: 10.5.23 + resolution: "babel-plugin-formatjs@npm:10.5.23" dependencies: "@babel/core": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0" "@babel/types": "npm:^7.25.0" - "@formatjs/icu-messageformat-parser": "npm:2.9.1" - "@formatjs/ts-transformer": "npm:3.13.20" + "@formatjs/icu-messageformat-parser": "npm:2.9.2" + "@formatjs/ts-transformer": "npm:3.13.21" "@types/babel__core": "npm:^7.20.5" "@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__traverse": "npm:^7.20.6" tslib: "npm:2" - checksum: 10c0/c35ec81d89eb228d23d3d62e7e4d0e5d7216f0d09f91b1dc3c46e049c5515a201fcfe77c1079924c6bfb9883b2941af91431f479a0f5a24a0574b695f18b64bc + checksum: 10c0/1484b6a18beea114d800754c3ffa6296a52676eb68b7f280f9e04e34efed12bcb61ecd881ba042907998bc00df0a5eb9111932c7b5df2fb6d6eae0692984c633 languageName: node linkType: hard @@ -9741,15 +9741,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.3, intl-messageformat@npm:^10.3.5": - version: 10.7.3 - resolution: "intl-messageformat@npm:10.7.3" +"intl-messageformat@npm:10.7.4, intl-messageformat@npm:^10.3.5": + version: 10.7.4 + resolution: "intl-messageformat@npm:10.7.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/fast-memoize": "npm:2.2.2" - "@formatjs/icu-messageformat-parser": "npm:2.9.1" + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.2" tslib: "npm:2" - checksum: 10c0/7ddd118c04023c9ecdf9a2270753abd876e90a428d5106ce8373622ddefe72ff1daa33993b12065a3339b7f838e9266c3db9048aa7dd20012c8703c6ebe26fd4 + checksum: 10c0/698e1b020f744a1790eb0a68edc86a8d215c3d3df3d67a1c77f50ce0582af9fadc8656ff988b7806708f997e0e8462a044602f28d8f334f4e8b3233cf3b03f3e languageName: node linkType: hard @@ -14474,18 +14474,18 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.8.4 - resolution: "react-intl@npm:6.8.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.1" - "@formatjs/icu-messageformat-parser": "npm:2.9.1" - "@formatjs/intl": "npm:2.10.11" - "@formatjs/intl-displaynames": "npm:6.8.1" - "@formatjs/intl-listformat": "npm:7.7.1" + version: 6.8.5 + resolution: "react-intl@npm:6.8.5" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.2" + "@formatjs/intl": "npm:2.10.12" + "@formatjs/intl-displaynames": "npm:6.8.2" + "@formatjs/intl-listformat": "npm:7.7.2" "@types/hoist-non-react-statics": "npm:3" - "@types/react": "npm:^18.3.11" + "@types/react": "npm:16 || 17 || 18" hoist-non-react-statics: "npm:3" - intl-messageformat: "npm:10.7.3" + intl-messageformat: "npm:10.7.4" tslib: "npm:2" peerDependencies: react: ^16.6.0 || 17 || 18 @@ -14493,7 +14493,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/a6b417c1cfb36ffe38645fe9daaaf3e1a25660468b8dbd4ccf386be063cc7c0fdeecc3c0490c671721408696b6578262b8db5882d00b76d4ec48d94601b14eab + checksum: 10c0/73707912c00a646460c1497f7004bf511b58ec28265f0d8d65b1677a43f62a957bab40f2b5a1759b7f11cc28af10754e8552890b9b485d3f9505c0a36a692fbc languageName: node linkType: hard @@ -17339,7 +17339,7 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.19.2": +"undici-types@npm:~6.19.8": version: 6.19.8 resolution: "undici-types@npm:6.19.8" checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 From 5bc32c47a23ce56ccdae9c40d94cf8d711f977ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 08:40:52 +0000 Subject: [PATCH 423/467] Update dependency oj to v3.16.7 (#32741) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c7148381704ed4..8b660b976bcdab 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -448,7 +448,7 @@ GEM nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) - oj (3.16.6) + oj (3.16.7) bigdecimal (>= 3.0) ostruct (>= 0.2) omniauth (2.1.2) From 074fb04c6a84e97959ef1ee0d7092ae90ad14635 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 08:42:39 +0000 Subject: [PATCH 424/467] Update dependency utf-8-validate to v6.0.5 (#32738) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d54e6b3172dc8d..da80fac3bf12ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17599,12 +17599,12 @@ __metadata: linkType: hard "utf-8-validate@npm:^6.0.3": - version: 6.0.4 - resolution: "utf-8-validate@npm:6.0.4" + version: 6.0.5 + resolution: "utf-8-validate@npm:6.0.5" dependencies: node-gyp: "npm:latest" node-gyp-build: "npm:^4.3.0" - checksum: 10c0/f7042d94aec6ca02461b64e725bdc7262266610dbb787331e5bbd49374ef6f75fe9900600df3fc63d97906c23614a965c8989b4bf95d70bf35dc617da99215e7 + checksum: 10c0/6dc63c513adb001e47a51819072cdd414158430091c49c21d4947ea99f16df5167b671f680df8fb2b6f2ae6a7f30264b4ec111bd3e573720dfe371da1ab99a81 languageName: node linkType: hard From e7a93915dea95790688edf798de3f948d2a0acc0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 4 Nov 2024 03:44:59 -0500 Subject: [PATCH 425/467] Update browser to version 6.0.0 (#32728) --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 0c3484a7aa9fd1..22a8d86c3c3aa0 100644 --- a/Gemfile +++ b/Gemfile @@ -25,7 +25,7 @@ gem 'ruby-vips', '~> 2.2', require: false gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.8' gem 'bootsnap', '~> 1.18.0', require: false -gem 'browser', '< 6' # https://github.com/fnando/browser/issues/543 +gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'chewy', '~> 7.3' gem 'devise', '~> 4.9' diff --git a/Gemfile.lock b/Gemfile.lock index 8b660b976bcdab..392acf36bb67d0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -133,7 +133,7 @@ GEM msgpack (~> 1.2) brakeman (6.2.2) racc - browser (5.3.1) + browser (6.0.0) brpoplpush-redis_script (0.1.3) concurrent-ruby (~> 1.0, >= 1.0.5) redis (>= 1.0, < 6) @@ -908,7 +908,7 @@ DEPENDENCIES blurhash (~> 0.1) bootsnap (~> 1.18.0) brakeman (~> 6.0) - browser (< 6) + browser bundler-audit (~> 0.9) capybara (~> 3.39) charlock_holmes (~> 0.7.7) From 2271b39a5c6ca4d762a45726aee09b58cd6ea8e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 08:56:11 +0000 Subject: [PATCH 426/467] New Crowdin Translations (automated) (#32733) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/eo.json | 4 +-- app/javascript/mastodon/locales/fi.json | 4 +-- app/javascript/mastodon/locales/fy.json | 7 +++++ app/javascript/mastodon/locales/ko.json | 4 ++- app/javascript/mastodon/locales/lv.json | 11 +++++-- app/javascript/mastodon/locales/ru.json | 39 +++++++++++++++---------- app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/sv.json | 36 +++++++++++------------ app/javascript/mastodon/locales/th.json | 16 +++++----- config/locales/doorkeeper.th.yml | 2 +- config/locales/fy.yml | 4 +++ config/locales/gd.yml | 2 +- config/locales/simple_form.fy.yml | 2 ++ config/locales/simple_form.lv.yml | 2 +- config/locales/simple_form.nl.yml | 2 +- config/locales/simple_form.sv.yml | 2 +- config/locales/sv.yml | 22 +++++++------- config/locales/th.yml | 6 ++-- 18 files changed, 99 insertions(+), 69 deletions(-) diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 7abe0783c39f43..ee4d733ab89f00 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -45,7 +45,7 @@ "account.languages": "Ŝanĝi la abonitajn lingvojn", "account.link_verified_on": "Propreco de tiu ligilo estis konfirmita je {date}", "account.locked_info": "Tiu konto estas privatigita. La posedanto mane akceptas tiun, kiu povas sekvi rin.", - "account.media": "Plurmedioj", + "account.media": "Plurmedio", "account.mention": "Mencii @{name}", "account.moved_to": "{name} indikis, ke ria nova konto estas nun:", "account.mute": "Silentigi @{name}", @@ -142,7 +142,7 @@ "column_header.unpin": "Malfiksi", "column_subheading.settings": "Agordoj", "community.column_settings.local_only": "Nur loka", - "community.column_settings.media_only": "Nur plurmedioj", + "community.column_settings.media_only": "Nur plurmedio", "community.column_settings.remote_only": "Nur fora", "compose.language.change": "Ŝanĝi lingvon", "compose.language.search": "Serĉi lingvojn...", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2222e6038c08a5..f06566df752f20 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -158,7 +158,7 @@ "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.multiple": "Monivalinta", "compose_form.poll.option_placeholder": "Vaihtoehto {number}", - "compose_form.poll.single": "Yksi vaihtoehto", + "compose_form.poll.single": "Yksittäisvalinta", "compose_form.poll.switch_to_multiple": "Muuta äänestys monivalinnaksi", "compose_form.poll.switch_to_single": "Muuta äänestys yksittäisvalinnaksi", "compose_form.poll.type": "Tyyli", @@ -386,7 +386,7 @@ "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", - "interaction_modal.description.vote": "Osallistuminen äänestykseen onnistuu Mastodon-tilillä.", + "interaction_modal.description.vote": "Mastodon-tilillä voit osallistua tähän äänestykseen.", "interaction_modal.login.action": "Siirry kotiin", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index e1c090cb0cb8cb..3f4d942b61e3b9 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Doer fan de enkête", "compose_form.poll.multiple": "Mearkar", "compose_form.poll.option_placeholder": "Opsje {number}", + "compose_form.poll.single": "Inkelde kar", "compose_form.poll.switch_to_multiple": "Enkête wizigje om meardere karren ta te stean", "compose_form.poll.switch_to_single": "Enkête wizigje om in inkelde kar ta te stean", "compose_form.poll.type": "Styl", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Brûker net mear folgje?", "content_warning.hide": "Berjocht ferstopje", "content_warning.show": "Dochs toane", + "content_warning.show_more": "Mear toane", "conversation.delete": "Petear fuortsmite", "conversation.mark_as_read": "As lêzen markearje", "conversation.open": "Petear toane", @@ -304,6 +306,7 @@ "filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje", "filter_modal.select_filter.title": "Dit berjocht filterje", "filter_modal.title.status": "In berjocht filterje", + "filter_warning.matches_filter": "Komt oerien mei filter ‘{title}’", "filtered_notifications_banner.pending_requests": "Fan {count, plural, =0 {net ien} one {ien persoan} other {# persoanen}} dy’t jo mooglik kinne", "filtered_notifications_banner.title": "Filtere meldingen", "firehose.all": "Alles", @@ -383,6 +386,7 @@ "interaction_modal.description.follow": "Jo kinne mei in Mastodon-account {name} folgje, om sa harren berjochten op jo starttiidline te ûntfangen.", "interaction_modal.description.reblog": "Jo kinne mei in Mastodon-account dit berjocht booste, om it sa mei jo folgers te dielen.", "interaction_modal.description.reply": "Jo kinne mei in Mastodon-account op dit berjocht reagearje.", + "interaction_modal.description.vote": "Mei in Mastodon-account kinne jo yn dizze enkête stimme.", "interaction_modal.login.action": "Gean nei start", "interaction_modal.login.prompt": "Domein fan jo server, byg. mastodon.social", "interaction_modal.no_account_yet": "Net op Mastodon?", @@ -394,6 +398,7 @@ "interaction_modal.title.follow": "{name} folgje", "interaction_modal.title.reblog": "Berjocht fan {name} booste", "interaction_modal.title.reply": "Op it berjocht fan {name} reagearje", + "interaction_modal.title.vote": "Stimme yn {name}’s peiling", "intervals.full.days": "{number, plural, one {# dei} other {# dagen}} lyn", "intervals.full.hours": "{number, plural, one {# oere} other {# oeren}} lyn", "intervals.full.minutes": "{number, plural, one {# minút} other {# minuten}} lyn", @@ -506,6 +511,7 @@ "notification.favourite": "{name} hat jo berjocht as favoryt markearre", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo berjocht as favoryt markearre", "notification.follow": "{name} folget dy", + "notification.follow.name_and_others": "{name} en {count, plural, one {# oar persoan} other {# oare persoanen}} folgje jo no", "notification.follow_request": "{name} hat dy in folchfersyk stjoerd", "notification.follow_request.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe frege om jo te folgjen", "notification.label.mention": "Fermelding", @@ -564,6 +570,7 @@ "notifications.column_settings.filter_bar.category": "Flugge filterbalke", "notifications.column_settings.follow": "Nije folgers:", "notifications.column_settings.follow_request": "Nij folchfersyk:", + "notifications.column_settings.group": "Groepearje", "notifications.column_settings.mention": "Fermeldingen:", "notifications.column_settings.poll": "Enkêteresultaten:", "notifications.column_settings.push": "Pushmeldingen", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 3462675e3e0e1e..dbdb5062cff331 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -113,7 +113,7 @@ "bundle_modal_error.message": "컴포넌트를 불러오는 중 문제가 발생했습니다.", "bundle_modal_error.retry": "다시 시도", "closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.", - "closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.", + "closed_registrations_modal.description": "{domain}은 현재 가입이 불가능합니다. 하지만 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.", "closed_registrations_modal.find_another_server": "다른 서버 찾기", "closed_registrations_modal.preamble": "마스토돈은 분산화 되어 있습니다, 그렇기 때문에 어디에서 계정을 생성하든, 이 서버에 있는 누구와도 팔로우와 상호작용을 할 수 있습니다. 심지어는 스스로 서버를 만드는 것도 가능합니다!", "closed_registrations_modal.title": "마스토돈에서 가입", @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", "interaction_modal.description.reblog": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.", "interaction_modal.description.reply": "마스토돈 계정을 통해, 이 게시물에 응답할 수 있습니다.", + "interaction_modal.description.vote": "마스토돈 계정을 통해, 이 투표에 참여할 수 있습니다.", "interaction_modal.login.action": "홈 서버로 가기", "interaction_modal.login.prompt": "내 홈 서버의 도메인. 예시: mastodon.social", "interaction_modal.no_account_yet": "Mastodon 계정이 없나요?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "{name} 님을 팔로우", "interaction_modal.title.reblog": "{name} 님의 게시물을 부스트", "interaction_modal.title.reply": "{name} 님의 게시물에 답글", + "interaction_modal.title.vote": "{name} 님의 투표에 참여", "intervals.full.days": "{number} 일", "intervals.full.hours": "{number} 시간", "intervals.full.minutes": "{number} 분", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index d7507ee8843dcd..30fc0ea3484f1b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -36,6 +36,7 @@ "account.followers.empty": "Šim lietotājam vēl nav sekotāju.", "account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}", "account.following": "Seko", + "account.following_counter": "{count, plural, one {seko {counter}} other {seko {counter}}}", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.go_to_profile": "Doties uz profilu", "account.hide_reblogs": "Paslēpt @{name} pastiprinātos ierakstus", @@ -61,6 +62,7 @@ "account.requested_follow": "{name} nosūtīja Tev sekošanas pieprasījumu", "account.share": "Dalīties ar @{name} profilu", "account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus", + "account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", "account.unblock": "Atbloķēt @{name}", "account.unblock_domain": "Atbloķēt domēnu {domain}", "account.unblock_short": "Atbloķēt", @@ -191,6 +193,7 @@ "confirmations.unfollow.title": "Pārtraukt sekošanu lietotājam?", "content_warning.hide": "Paslēpt ierakstu", "content_warning.show": "Tomēr rādīt", + "content_warning.show_more": "Rādīt vairāk", "conversation.delete": "Dzēst sarunu", "conversation.mark_as_read": "Atzīmēt kā izlasītu", "conversation.open": "Skatīt sarunu", @@ -211,6 +214,7 @@ "dismissable_banner.explore_tags": "Šie ir tēmturi, kas šodien gūst uzmanību sabiedriskajā tīmeklī. Tēmturi, kurus izmanto vairāk dažādu cilvēku, tiek vērtēti augstāk.", "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.", "domain_block_modal.block": "Bloķēt serveri", + "domain_block_modal.block_account_instead": "Tā vietā liegt @{name}", "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", "domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.", "domain_block_modal.title": "Bloķēt domēnu?", @@ -329,6 +333,7 @@ "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Ir pieejams būtisks drošības atjauninājums.", "home.show_announcements": "Rādīt paziņojumus", + "ignore_notifications_modal.ignore": "Neņemt vērā paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", "interaction_modal.description.follow": "Ar Mastodon kontu Tu vari sekot {name}, lai saņemtu lietotāja ierakstus savā mājas plūsmā.", "interaction_modal.description.reblog": "Ar Mastodon kontu Tu vari izvirzīt šo ierakstu, lai kopīgotu to ar saviem sekotājiem.", @@ -505,10 +510,10 @@ "onboarding.action.back": "Aizved mani atpakaļ", "onboarding.actions.back": "Aizved mani atpakaļ", "onboarding.actions.go_to_explore": "Skatīt tendences", - "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", + "onboarding.actions.go_to_home": "Doties uz manu sākuma plūsmu", "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.", - "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:", + "onboarding.follows.lead": "Tava sākuma plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Pielāgo savu mājas barotni", "onboarding.profile.discoverable": "Padarīt manu profilu atklājamu", "onboarding.profile.display_name": "Attēlojamais vārds", @@ -526,7 +531,7 @@ "onboarding.start.lead": "Tagad Tu esi daļa no Mastodon — vienreizējas, decentralizētas sociālās mediju platformas, kurā Tu, nevis algoritms, veido Tavu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", - "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", + "onboarding.steps.follow_people.body": "Sekošana aizraujošiem cilvēkiem ir tas, par ko ir Mastodon.", "onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni", "onboarding.steps.publish_status.body": "Pasveicini pasauli ar tekstu, attēliem, video vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 2a985a1f848221..d75b5fab262b1a 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -84,7 +84,7 @@ "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", "alert.rate_limited.title": "Ограничение количества запросов", "alert.unexpected.message": "Произошла непредвиденная ошибка.", - "alert.unexpected.title": "Упс!", + "alert.unexpected.title": "Ой!", "alt_text_badge.title": "Альтернативный текст", "announcement.announcement": "Объявление", "attachments_list.unprocessed": "(не обработан)", @@ -95,11 +95,11 @@ "block_modal.they_cant_mention": "Он не может упоминать или подписываться на вас.", "block_modal.they_cant_see_posts": "Он не может видеть ваши сообщения, и вы не увидите его.", "block_modal.they_will_know": "Он может видеть, что он заблокирован.", - "block_modal.title": "Заблокировать пользователя?", + "block_modal.title": "Заблокируем пользователя?", "block_modal.you_wont_see_mentions": "Вы не увидите записи, которые упоминают его.", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", - "boost_modal.reblog": "Повысить пост?", - "boost_modal.undo_reblog": "Разгрузить пост?", + "boost_modal.reblog": "Репостнуть?", + "boost_modal.undo_reblog": "Убрать репост?", "bundle_column_error.copy_stacktrace": "Скопировать отчет об ошибке", "bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.", "bundle_column_error.error.title": "О нет!", @@ -144,7 +144,7 @@ "community.column_settings.local_only": "Только локальные", "community.column_settings.media_only": "Только с медиафайлами", "community.column_settings.remote_only": "Только удалённые", - "compose.language.change": "Изменить язык", + "compose.language.change": "Сменить язык", "compose.language.search": "Поиск языков...", "compose.published.body": "Запись опубликована.", "compose.published.open": "Открыть", @@ -180,7 +180,7 @@ "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?", "confirmations.edit.confirm": "Редактировать", "confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?", - "confirmations.edit.title": "Переписать сообщение?", + "confirmations.edit.title": "Перепишем сообщение?", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.logout.title": "Выйти?", @@ -196,6 +196,7 @@ "confirmations.unfollow.title": "Отписаться?", "content_warning.hide": "Скрыть пост", "content_warning.show": "Всё равно показать", + "content_warning.show_more": "Покажи ещё", "conversation.delete": "Удалить беседу", "conversation.mark_as_read": "Отметить как прочитанное", "conversation.open": "Просмотр беседы", @@ -303,6 +304,7 @@ "filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую", "filter_modal.select_filter.title": "Фильтровать этот пост", "filter_modal.title.status": "Фильтровать пост", + "filter_warning.matches_filter": "Соответствует фильтру \"{title}\"", "filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни одного человека} one {одного человека} other {# человек}}", "filtered_notifications_banner.title": "Отфильтрованные уведомления", "firehose.all": "Все", @@ -382,6 +384,7 @@ "interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.", "interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.", "interaction_modal.description.reply": "Вы можете ответить на этот пост с учётной записью Mastodon.", + "interaction_modal.description.vote": "Вы сможете проголосовать тут имея аккаунт Mastodon.", "interaction_modal.login.action": "Перейти на домашнюю страницу", "interaction_modal.login.prompt": "Домен вашего домашнего сервера, например, mastodon.social", "interaction_modal.no_account_yet": "Еще не на Mastodon?", @@ -393,12 +396,13 @@ "interaction_modal.title.follow": "Подписаться на {name}", "interaction_modal.title.reblog": "Продвинуть публикацию {name}", "interaction_modal.title.reply": "Ответить на пост {name}", + "interaction_modal.title.vote": "Голосовать в опросе {name}", "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}", "keyboard_shortcuts.back": "перейти назад", "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных", - "keyboard_shortcuts.boost": "продвинуть пост", + "keyboard_shortcuts.boost": "Репостнуть", "keyboard_shortcuts.column": "фокус на одном из столбцов", "keyboard_shortcuts.compose": "фокус на поле ввода", "keyboard_shortcuts.description": "Описание", @@ -464,7 +468,7 @@ "mute_modal.show_options": "Показать опции", "mute_modal.they_can_mention_and_follow": "Они могут упоминать и следить за вами, но вы не будете их видеть.", "mute_modal.they_wont_know": "Они не будут знать, что их заглушили.", - "mute_modal.title": "Заглушить пользователя?", + "mute_modal.title": "Заткнуть пользователя?", "mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.", "mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.", "navigation_bar.about": "О проекте", @@ -505,6 +509,7 @@ "notification.favourite": "{name} добавил(а) ваш пост в избранное", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", "notification.follow": "{name} подписался (-лась) на вас", + "notification.follow.name_and_others": "{name} и {count, plural, one {# other} few {# others} many {# others} other {# others}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", "notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас", "notification.label.mention": "Упоминание", @@ -512,7 +517,7 @@ "notification.label.private_reply": "Частный ответ", "notification.label.reply": "Ответить", "notification.mention": "Упоминание", - "notification.mentioned_you": "{name} упомянул(а) вас", + "notification.mentioned_you": "{name} упоминает вас", "notification.moderation-warning.learn_more": "Узнать больше", "notification.moderation_warning": "Вы получили предупреждение от модерации", "notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.", @@ -558,6 +563,7 @@ "notifications.column_settings.filter_bar.category": "Панель сортировки", "notifications.column_settings.follow": "У вас новый подписчик:", "notifications.column_settings.follow_request": "Новые запросы на подписку:", + "notifications.column_settings.group": "Группа", "notifications.column_settings.mention": "Вас упомянули в посте:", "notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:", "notifications.column_settings.push": "Пуш-уведомления", @@ -600,8 +606,8 @@ "notifications_permission_banner.enable": "Включить уведомления", "notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.", "notifications_permission_banner.title": "Будьте в курсе происходящего", - "onboarding.action.back": "Вернуть меня", - "onboarding.actions.back": "Вернуть меня", + "onboarding.action.back": "Верните меня", + "onboarding.actions.back": "Верните меня", "onboarding.actions.go_to_explore": "Посмотреть, что актуально", "onboarding.actions.go_to_home": "Перейти к домашней ленте новостей", "onboarding.compose.template": "Привет, #Mastodon!", @@ -619,7 +625,7 @@ "onboarding.profile.title": "Настройка профиля", "onboarding.profile.upload_avatar": "Загрузить фотографию профиля", "onboarding.profile.upload_header": "Загрузить заголовок профиля", - "onboarding.share.lead": "Расскажите людям, как они могут найти вас на Mastodon!", + "onboarding.share.lead": "Расскажите людям, как найти вас на Mastodon!", "onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}", "onboarding.share.next_steps": "Возможные дальнейшие шаги:", "onboarding.share.title": "Поделиться вашим профилем", @@ -634,7 +640,7 @@ "onboarding.steps.setup_profile.title": "Настройте свой профиль", "onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поделитесь вашим профилем", - "onboarding.tips.2fa": "Знаете ли вы? Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!", + "onboarding.tips.2fa": "А вы знали? Можно защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не нужен!", "onboarding.tips.accounts_from_other_servers": "Знали ли вы? Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!", "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих подписчиков. Вы даже можете разместить свой собственный сервер!", "onboarding.tips.verification": "Знали ли вы? Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!", @@ -665,7 +671,7 @@ "privacy_policy.title": "Политика конфиденциальности", "recommended": "Рекомендуется", "refresh": "Обновить", - "regeneration_indicator.label": "Загрузка…", + "regeneration_indicator.label": "Грузим…", "regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!", "relative_time.days": "{number} д", "relative_time.full.days": "{number, plural, one {# день} many {# дней} other {# дня}} назад", @@ -800,6 +806,7 @@ "status.reblog": "Продвинуть", "status.reblog_private": "Продвинуть для своей аудитории", "status.reblogged_by": "{name} продвинул(а)", + "status.reblogs": "{count, plural, one {boost} few {boosts} many {boosts} other {boosts}}", "status.reblogs.empty": "Никто ещё не продвинул этот пост. Как только кто-то это сделает, они появятся здесь.", "status.redraft": "Создать заново", "status.remove_bookmark": "Убрать из закладок", @@ -856,11 +863,11 @@ "upload_modal.detect_text": "Найти текст на картинке", "upload_modal.edit_media": "Изменить файл", "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", - "upload_modal.preparing_ocr": "Подготовка распознования…", + "upload_modal.preparing_ocr": "Подготовка распознавания…", "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "upload_progress.processing": "Обработка…", - "username.taken": "Данное имя пользователя уже занято. Выберите другое.", + "username.taken": "Это имя пользователя уже занято. Выберите другое", "video.close": "Закрыть видео", "video.download": "Загрузить файл", "video.exit_fullscreen": "Покинуть полноэкранный режим", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index a1bcdb9ff9fd0c..dc31f6100f1ee1 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -194,6 +194,7 @@ "confirmations.unfollow.title": "Prestať sledovať užívateľa?", "content_warning.hide": "Skryť príspevok", "content_warning.show": "Aj tak zobraziť", + "content_warning.show_more": "Ukázať viac", "conversation.delete": "Vymazať konverzáciu", "conversation.mark_as_read": "Označiť ako prečítanú", "conversation.open": "Zobraziť konverzáciu", @@ -484,7 +485,7 @@ "notification_requests.edit_selection": "Uprav", "notification_requests.exit_selection": "Hotovo", "notification_requests.notifications_from": "Oboznámenia od {name}", - "notification_requests.title": "Filtrované oboznámenia", + "notification_requests.title": "Filtrované oznámenia", "notification_requests.view": "Zobraz upozornenia", "notifications.clear": "Vyčistiť upozornenia", "notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 7824d076295713..e404c2244bbe1e 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -82,7 +82,7 @@ "admin.impact_report.instance_follows": "Följare som deras användare skulle förlora", "admin.impact_report.title": "Sammanfattning av påverkan", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", - "alert.rate_limited.title": "Mängd begränsad", + "alert.rate_limited.title": "Hastighetsbegränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", "alt_text_badge.title": "Alt-Text", @@ -271,7 +271,7 @@ "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.followed_tags": "Du följer inga hashtaggar ännu. När du gör det kommer de att dyka upp här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", - "empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den. {suggestions}", + "empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den.", "empty_column.list": "Det finns inget i denna lista än. När listmedlemmar publicerar nya inlägg kommer de synas här.", "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.", "empty_column.mutes": "Du har ännu inte tystat några användare.", @@ -383,7 +383,7 @@ "ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?", "ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oönskade privata omnämningar?", "interaction_modal.description.favourite": "Med ett Mastodon-konto kan du favoritmarkera detta inlägg för att visa författaren att du gillar det och för att spara det till senare.", - "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.", + "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se deras inlägg i ditt hemflöde.", "interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.", "interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.", "interaction_modal.description.vote": "Med ett konto på Mastodon kan du delta i denna omröstning.", @@ -405,11 +405,11 @@ "keyboard_shortcuts.back": "Gå bakåt", "keyboard_shortcuts.blocked": "Öppna listan över blockerade användare", "keyboard_shortcuts.boost": "Boosta inlägg", - "keyboard_shortcuts.column": "för att fokusera en status i en av kolumnerna", + "keyboard_shortcuts.column": "Fokusera kolumn", "keyboard_shortcuts.compose": "för att fokusera skrivfältet", "keyboard_shortcuts.description": "Beskrivning", "keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen", - "keyboard_shortcuts.down": "för att flytta nedåt i listan", + "keyboard_shortcuts.down": "Flytta ner i listan", "keyboard_shortcuts.enter": "Öppna inlägg", "keyboard_shortcuts.favourite": "Favoritmarkera inlägg", "keyboard_shortcuts.favourites": "Öppna favoritlistan", @@ -429,13 +429,13 @@ "keyboard_shortcuts.reply": "Svara på inlägg", "keyboard_shortcuts.requests": "för att öppna Följförfrågningar", "keyboard_shortcuts.search": "för att fokusera sökfältet", - "keyboard_shortcuts.spoilers": "visa/dölja CW-fält", - "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen", - "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW", - "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media", + "keyboard_shortcuts.spoilers": "Visa/dölja CW-fält", + "keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen", + "keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW", + "keyboard_shortcuts.toggle_sensitivity": "Visa/gömma media", "keyboard_shortcuts.toot": "Starta nytt inlägg", - "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", - "keyboard_shortcuts.up": "för att flytta uppåt i listan", + "keyboard_shortcuts.unfocus": "Avfokusera skrivfält/sökfält", + "keyboard_shortcuts.up": "Flytta uppåt i listan", "lightbox.close": "Stäng", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", @@ -617,11 +617,11 @@ "onboarding.action.back": "Ta mig tillbaka", "onboarding.actions.back": "Ta mig tillbaka", "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_home": "Ta mig till mitt hemflöde", "onboarding.compose.template": "Hallå #Mastodon!", "onboarding.follows.empty": "Tyvärr kan inga resultat visas just nu. Du kan prova att använda sökfunktionen eller utforska sidan för att hitta personer att följa, eller försök igen senare.", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.follows.lead": "Ditt hemflöde är det primära sättet att uppleva Mastodon. Ju fler människor du följer, desto mer aktiv och intressant blir det. För att komma igång, är här några förslag:", + "onboarding.follows.title": "Anpassa ditt hemflöde", "onboarding.profile.discoverable": "Gör min profil upptäckbar", "onboarding.profile.discoverable_hint": "När du väljer att vara upptäckbar på Mastodon kan dina inlägg visas i sök- och trendresultat, och din profil kan föreslås för personer med liknande intressen som du.", "onboarding.profile.display_name": "Visningsnamn", @@ -642,7 +642,7 @@ "onboarding.start.title": "Du klarade det!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", + "onboarding.steps.publish_status.body": "Säg hej till världen med text, foton, videor eller omröstningar {emoji}", "onboarding.steps.publish_status.title": "Gör ditt första inlägg", "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", "onboarding.steps.setup_profile.title": "Customize your profile", @@ -733,8 +733,8 @@ "report.thanks.take_action_actionable": "Medan vi granskar detta kan du vidta åtgärder mot {name}:", "report.thanks.title": "Vill du inte se det här?", "report.thanks.title_actionable": "Tack för att du rapporterar, vi kommer att titta på detta.", - "report.unfollow": "Sluta följ @{username}", - "report.unfollow_explanation": "Du följer detta konto. Avfölj hen för att inte se hens inlägg i ditt hemflöde.", + "report.unfollow": "Sluta följ @{name}", + "report.unfollow_explanation": "Du följer detta konto. Avfölj det för att inte se dess inlägg i ditt hemflöde.", "report_notification.attached_statuses": "bifogade {count, plural, one {{count} inlägg} other {{count} inlägg}}", "report_notification.categories.legal": "Rättsligt", "report_notification.categories.legal_sentence": "olagligt innehåll", @@ -829,7 +829,7 @@ "status.show_less_all": "Visa mindre för alla", "status.show_more_all": "Visa mer för alla", "status.show_original": "Visa original", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} lade upp {attachmentCount, plural, one {en bilaga} other {{attachmentCount} bilagor}}", "status.translate": "Översätt", "status.translated_from_with": "Översatt från {lang} med {provider}", "status.uncached_media_warning": "Förhandsvisning inte tillgänglig", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index b0ad6e1c66e1cf..5cf95554bc0e4c 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -44,7 +44,7 @@ "account.joined_short": "เข้าร่วมเมื่อ", "account.languages": "เปลี่ยนภาษาที่บอกรับ", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", - "account.locked_info": "สถานะความเป็นส่วนตัวของบัญชีนี้ถูกตั้งค่าเป็นล็อค เจ้าของตรวจสอบด้วยตนเองว่าใครสามารถติดตามพวกเขาได้", + "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", "account.media": "สื่อ", "account.mention": "กล่าวถึง @{name}", "account.moved_to": "{name} ได้ระบุว่าบัญชีใหม่ของเขาในตอนนี้คือ:", @@ -97,7 +97,7 @@ "block_modal.they_will_know": "เขาสามารถเห็นว่ามีการปิดกั้นเขา", "block_modal.title": "ปิดกั้นผู้ใช้?", "block_modal.you_wont_see_mentions": "คุณจะไม่เห็นโพสต์ที่กล่าวถึงเขา", - "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", + "boost_modal.combo": "คุณสามารถกดปุ่ม {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "boost_modal.reblog": "ดันโพสต์?", "boost_modal.undo_reblog": "เลิกดันโพสต์?", "bundle_column_error.copy_stacktrace": "คัดลอกรายงานข้อผิดพลาด", @@ -386,6 +386,7 @@ "interaction_modal.description.follow": "ด้วยบัญชีใน Mastodon คุณสามารถติดตาม {name} เพื่อรับโพสต์ของเขาในฟีดหน้าแรกของคุณ", "interaction_modal.description.reblog": "ด้วยบัญชีใน Mastodon คุณสามารถดันโพสต์นี้เพื่อแชร์โพสต์กับผู้ติดตามของคุณเอง", "interaction_modal.description.reply": "ด้วยบัญชีใน Mastodon คุณสามารถตอบกลับโพสต์นี้", + "interaction_modal.description.vote": "ด้วยบัญชีใน Mastodon คุณสามารถลงคะแนนในการสำรวจความคิดเห็นนี้", "interaction_modal.login.action": "นำฉันกลับบ้าน", "interaction_modal.login.prompt": "โดเมนของเซิร์ฟเวอร์บ้านของคุณ เช่น mastodon.social", "interaction_modal.no_account_yet": "ไม่ได้อยู่ใน Mastodon?", @@ -397,6 +398,7 @@ "interaction_modal.title.follow": "ติดตาม {name}", "interaction_modal.title.reblog": "ดันโพสต์ของ {name}", "interaction_modal.title.reply": "ตอบกลับโพสต์ของ {name}", + "interaction_modal.title.vote": "ลงคะแนนในการสำรวจความคิดเห็นของ {name}", "intervals.full.days": "{number, plural, other {# วัน}}", "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", "intervals.full.minutes": "{number, plural, other {# นาที}}", @@ -855,11 +857,11 @@ "upload_error.poll": "ไม่อนุญาตการอัปโหลดไฟล์โดยมีการสำรวจความคิดเห็น", "upload_form.audio_description": "อธิบายสำหรับผู้ที่สูญเสียการได้ยิน", "upload_form.description": "อธิบายสำหรับผู้คนที่พิการทางการมองเห็นหรือมีสายตาเลือนราง", - "upload_form.drag_and_drop.instructions": "หากต้องการเลือกไฟล์สื่อ ให้กดปุ่มที Space หรือ Enter บนแป้นพิมพ์ เมื่อเลือกไฟล์ได้แล้ว ก็สามารถใช้ปุ่มลูกศรเพื่อเลื่อนไฟล์ไปในทิศทางที่ต้องการได้ เมื่อต้องการวางไฟล์ในตำแหน่งใหม่ ให้กดปุ่ม Space หรือ Enter ดูอีกครั้ง หรือหากต้องการยกเลิกการเลือก ให้กดปุ่ม Esc ได้", - "upload_form.drag_and_drop.on_drag_cancel": "การลากไฟล์นั้นหยุดชะงัก ไฟล์ที่กำลังแนบมาถูกยกเลิก {item} ได้ถูกลบทิ้งแล้ว", - "upload_form.drag_and_drop.on_drag_end": "ไฟล์แนบ {item} ได้ถูกยกเลิกแล้ว", - "upload_form.drag_and_drop.on_drag_over": "ไฟล์แนบ {item} ได้ถูกย้ายไปแล้ว", - "upload_form.drag_and_drop.on_drag_start": "ได้รับไฟล์แนบเรียบร้อยแล้ว {item}.", + "upload_form.drag_and_drop.instructions": "เพื่อหยิบไฟล์แนบสื่อ กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่ ขณะลาก ใช้ปุ่มลูกศรเพื่อย้ายไฟล์แนบสื่อในทิศทางใดก็ตามที่กำหนด กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่อีกครั้งเพื่อปล่อยไฟล์แนบสื่อในตำแหน่งใหม่ หรือกดปุ่ม Escape เพื่อยกเลิก", + "upload_form.drag_and_drop.on_drag_cancel": "ยกเลิกการลากแล้ว ปล่อยไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_end": "ปล่อยไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_over": "ย้ายไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_start": "หยิบไฟล์แนบสื่อ {item} แล้ว", "upload_form.edit": "แก้ไข", "upload_form.thumbnail": "เปลี่ยนภาพขนาดย่อ", "upload_form.video_description": "อธิบายสำหรับผู้คนที่พิการทางการได้ยิน ได้ยินไม่ชัด พิการทางการมองเห็น หรือมีสายตาเลือนราง", diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 2dfc72cd6ccc9b..3b52e170ea3eb0 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -60,7 +60,7 @@ th: error: title: เกิดข้อผิดพลาด new: - prompt_html: "%{client_name} ร้องขอสิทธิ์ในการเข้าถึงข้อมูลในบัญชีของคุณ อนุมัติคำขอนี้ได้ก็ต่อเมื่อคุณมั่นใจและเชื่อถือในแหล่งที่มาของข้อมูลนี้" + prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ อนุมัติคำขอนี้เฉพาะหากคุณรู้จักและเชื่อถือแหล่งที่มานี้เท่านั้น" review_permissions: ตรวจทานสิทธิอนุญาต title: ต้องการการอนุญาต show: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 8ccedd2be17753..a6656f91b84cc1 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -21,6 +21,7 @@ fy: one: Toot other: Berjochten posts_tab_heading: Berjochten + self_follow_error: It folgjen fan dyn eigen account is net tastien admin: account_actions: action: Aksje útfiere @@ -1165,8 +1166,11 @@ fy: use_security_key: Befeiligingskaai brûke author_attribution: example_title: Faorbyldtekst + hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoe’t jo oahelle wurde as dizze dield wurde op Mastodon. + instructions: 'Soargj derfoar dat dizze koade yn de HTML fan jo artikel sit:' more_from_html: Mear fan %{name} s_blog: Weblog fan %{name} + then_instructions: Foegje dernei de domeinnamme fan de publikaasje yn it ûndersteande fjild ta. title: Auteur-attribúsje challenge: confirm: Trochgean diff --git a/config/locales/gd.yml b/config/locales/gd.yml index a05ce6ed3cd435..c804f425232877 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -262,7 +262,7 @@ gd: destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target} destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target} destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target} - destroy_instance_html: Purgaidich %{name} an àrainn %{target} + destroy_instance_html: Phurgaidich %{name} an àrainn %{target} destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target} destroy_status_html: Thug %{name} post aig %{target} air falbh destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target} diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index 8a753dcc898d51..c840342db5cf4d 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -3,6 +3,7 @@ fy: simple_form: hints: account: + attribution_domains_as_text: Ien per rigel. Beskermet tsjin falske attribúsjes. discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers. display_name: Jo folsleine namme of in aardige bynamme. fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle. @@ -143,6 +144,7 @@ fy: url: Wêr’t eveneminten nei ta stjoerd wurde labels: account: + attribution_domains_as_text: Websites dy’t jo wurdearring jaan meie discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte fields: name: Label diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 974008b5ebc5e9..106e29d2de1aa0 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -61,7 +61,7 @@ lv: setting_display_media_hide_all: Vienmēr slēpt multividi setting_display_media_show_all: Vienmēr rādīt multividi setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs - setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu + setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis ar automātisku plūsmas ritināšanu username: Tu vari lietot burtus, ciparus un zemsvītras whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam domain_allow: diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 7280ba6d801626..5318059f4a4ccf 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -3,7 +3,7 @@ nl: simple_form: hints: account: - attribution_domains_as_text: Eén per regel. Beschermt tegen valse attribueringen. + attribution_domains_as_text: Eén per regel. Beschermt tegen valse toeschrijvingen. discoverable: Jouw openbare berichten kunnen worden uitgelicht op verschillende plekken binnen Mastodon en jouw account kan worden aanbevolen aan andere gebruikers. display_name: Jouw volledige naam of een leuke bijnaam. fields: Jouw website, persoonlijke voornaamwoorden, leeftijd, alles wat je maar kwijt wilt. diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 36d1def01244d4..72c3f000f60cac 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -74,7 +74,7 @@ sv: filters: action: Välj vilken åtgärd som ska utföras när ett inlägg matchar filtret actions: - hide: Dölj det filtrerade innehållet helt (beter sig som om det inte fanns) + hide: Dölj det filtrerade innehållet helt, beter sig som om det inte fanns warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik form_admin_settings: activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka diff --git a/config/locales/sv.yml b/config/locales/sv.yml index f3ce6443f6d65b..bd33e837bda0bf 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -59,7 +59,7 @@ sv: delete: Radera data deleted: Raderad demote: Degradera - destroyed_msg: "%{username}'s data har nu lagts till kön för att raderas omedelbart" + destroyed_msg: "%{username}s data har nu lagts till kön för att raderas omedelbart" disable: inaktivera disable_sign_in_token_auth: Inaktivera autentisering med pollett via e-post disable_two_factor_authentication: Inaktivera 2FA @@ -72,7 +72,7 @@ sv: enable: Aktivera enable_sign_in_token_auth: Aktivera autentisering med pollett via e-post enabled: Aktiverad - enabled_msg: Uppfrysningen av %{username}'s konto lyckades + enabled_msg: Uppfrysningen av %{username}s konto lyckades followers: Följare follows: Följs header: Rubrik @@ -268,21 +268,21 @@ sv: enable_custom_emoji_html: "%{name} aktiverade emoji %{target}" enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}" enable_user_html: "%{name} aktiverade inloggning för användaren %{target}" - memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida" + memorialize_account_html: "%{name} gjorde %{target}s konto till en minnessida" promote_user_html: "%{name} befordrade användaren %{target}" reject_appeal_html: "%{name} avvisade överklagande av modereringsbeslut från %{target}" reject_user_html: "%{name} avvisade registrering från %{target}" - remove_avatar_user_html: "%{name} tog bort %{target}'s avatar" + remove_avatar_user_html: "%{name} tog bort %{target}s avatar" reopen_report_html: "%{name} öppnade rapporten igen %{target}" resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt" reset_password_user_html: "%{name} återställ användarens lösenord %{target}" resolve_report_html: "%{name} löste rapporten %{target}" - sensitive_account_html: "%{name} markerade %{target}'s media som känsligt" - silence_account_html: "%{name} begränsade %{target}'s konto" + sensitive_account_html: "%{name} markerade %{target}s media som känsligt" + silence_account_html: "%{name} begränsade %{target}s konto" suspend_account_html: "%{name} stängde av %{target}s konto" unassigned_report_html: "%{name} tog bort tilldelning av rapporten %{target}" unblock_email_account_html: "%{name} avblockerade %{target}s e-postadress" - unsensitive_account_html: "%{name} avmarkerade %{target}'s media som känsligt" + unsensitive_account_html: "%{name} avmarkerade %{target}s media som känsligt" unsilence_account_html: "%{name} tog bort begränsning av %{target}s konto" unsuspend_account_html: "%{name} ångrade avstängningen av %{target}s konto" update_announcement_html: "%{name} uppdaterade kungörelsen %{target}" @@ -569,7 +569,7 @@ sv: no_ip_block_selected: Inga IP-regler ändrades då inga var valda title: IP-regler relationships: - title: "%{acct}'s relationer" + title: "%{acct}s relationer" relays: add_new: Lägg till nytt relä delete: Radera @@ -899,7 +899,7 @@ sv: review_requested: Granskning begärd reviewed: Granskat title: Status - trendable: + trendable: Kan trenda unreviewed: Ogranskad usable: Användbar name: Namn @@ -1826,8 +1826,8 @@ sv: tags: does_not_match_previous_name: matchar inte det föregående namnet themes: - contrast: Hög kontrast - default: Mastodon + contrast: Mastodon (Hög kontrast) + default: Mastodon (Mörk) mastodon-light: Mastodon (ljust) system: Automatisk (använd systemtema) time: diff --git a/config/locales/th.yml b/config/locales/th.yml index cdc56d98ce0f17..ea039a2b9902c1 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1148,11 +1148,11 @@ th: use_security_key: ใช้กุญแจความปลอดภัย author_attribution: example_title: ข้อความตัวอย่าง - hint_html: คุณเขียนข่าวหรือลงบทความที่อื่นๆที่นอกจาก Mastodon บ้างไหม? ถ้าหากคุณเขียนอยู่ล่ะก็ คุณสามารถบอกได้นะว่าอยากให้คนอื่นให้เครดิตคุณยังไงเวลาแชร์ไปที่ Mastodon นะ - instructions: 'โปรดตรวจสอบให้แน่ใจว่าโค้ดนี้ได้มีอยู่ในบทความของคุณแล้ว HTML:' + hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon + instructions: 'ตรวจสอบให้แน่ใจว่าโค้ดนี้อยู่ใน HTML ของบทความของคุณ:' more_from_html: เพิ่มเติมจาก %{name} s_blog: บล็อกของ %{name} - then_instructions: จากนั้น ให้เพิ่มใส่ชื่อเว็บไซต์ของสิ่งพิมพ์ลงไปในช่องว่างข้างล่าง + then_instructions: จากนั้น เพิ่มชื่อโดเมนของการเผยแพร่ในช่องด้านล่าง title: การระบุแหล่งที่มาผู้สร้าง challenge: confirm: ดำเนินการต่อ From ff490daa5801a0d5b8c78480faa17ae5a7f5b2f1 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 4 Nov 2024 04:00:01 -0500 Subject: [PATCH 427/467] Reduce factory generation in `AccountStatusesFilter` spec (#32727) --- spec/lib/account_statuses_filter_spec.rb | 38 ++++++++---------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/spec/lib/account_statuses_filter_spec.rb b/spec/lib/account_statuses_filter_spec.rb index 77745851248331..351d3dae574052 100644 --- a/spec/lib/account_statuses_filter_spec.rb +++ b/spec/lib/account_statuses_filter_spec.rb @@ -52,36 +52,24 @@ def status_with_media_attachment!(visibility) end shared_examples 'filter params' do - context 'with only_media param' do - let(:params) { { only_media: true } } + it 'respects param options in results' do + expect(results_for(only_media: true)) + .to all(satisfy(&:with_media?)) - it 'returns only statuses with media' do - expect(subject.all?(&:with_media?)).to be true - end - end + expect(results_for(tagged: tag.name)) + .to all(satisfy { |status| status.tags.include?(tag) }) - context 'with tagged param' do - let(:params) { { tagged: tag.name } } + expect(results_for(exclude_replies: true)) + .to all(satisfy { |status| !status.reply? }) - it 'returns only statuses with tag' do - expect(subject.all? { |s| s.tags.include?(tag) }).to be true - end + expect(results_for(exclude_reblogs: true)) + .to all(satisfy { |status| !status.reblog? }) end - context 'with exclude_replies param' do - let(:params) { { exclude_replies: true } } - - it 'returns only statuses that are not replies' do - expect(subject.none?(&:reply?)).to be true - end - end - - context 'with exclude_reblogs param' do - let(:params) { { exclude_reblogs: true } } - - it 'returns only statuses that are not reblogs' do - expect(subject.none?(&:reblog?)).to be true - end + def results_for(params) + described_class + .new(account, current_account, params) + .results end end From dfccd207bb9c0b9aa893ed6c80912acd0674751f Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 Nov 2024 10:04:55 +0100 Subject: [PATCH 428/467] Refactor common checks in `tootctl media remove-orphans` (#32720) --- lib/mastodon/cli/media.rb | 57 ++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 996b7fd92ca3b6..68420fb15d8839 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -6,6 +6,8 @@ module Mastodon::CLI class Media < Base include ActionView::Helpers::NumberHelper + class UnrecognizedOrphanType < StandardError; end + VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze option :days, type: :numeric, default: 7, aliases: [:d] @@ -120,23 +122,10 @@ def remove_orphans object.acl.put(acl: s3_permissions) if options[:fix_permissions] && !dry_run? path_segments = object.key.split('/') - path_segments.delete('cache') - - unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size) - progress.log(pastel.yellow("Unrecognized file found: #{object.key}")) - next - end - - model_name = path_segments.first.classify - attachment_name = path_segments[1].singularize - record_id = path_segments[2...-2].join.to_i - file_name = path_segments.last - record = record_map.dig(model_name, record_id) - attachment = record&.public_send(attachment_name) progress.increment - next unless attachment.blank? || !attachment.variant?(file_name) + next unless orphaned_file?(path_segments, record_map) begin object.delete unless dry_run? @@ -148,6 +137,8 @@ def remove_orphans rescue => e progress.log(pastel.red("Error processing #{object.key}: #{e}")) end + rescue UnrecognizedOrphanType + progress.log(pastel.yellow("Unrecognized file found: #{object.key}")) end end when :fog @@ -165,26 +156,10 @@ def remove_orphans key = path.gsub("#{root_path}#{File::SEPARATOR}", '') path_segments = key.split(File::SEPARATOR) - path_segments.delete('cache') - - unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size) - progress.log(pastel.yellow("Unrecognized file found: #{key}")) - next - end - - model_name = path_segments.first.classify - record_id = path_segments[2...-2].join.to_i - attachment_name = path_segments[1].singularize - file_name = path_segments.last - - next unless PRELOADED_MODELS.include?(model_name) - - record = model_name.constantize.find_by(id: record_id) - attachment = record&.public_send(attachment_name) progress.increment - next unless attachment.blank? || !attachment.variant?(file_name) + next unless orphaned_file?(path_segments) begin size = File.size(path) @@ -205,6 +180,8 @@ def remove_orphans rescue => e progress.log(pastel.red("Error processing #{key}: #{e}")) end + rescue UnrecognizedOrphanType + progress.log(pastel.yellow("Unrecognized file found: #{path}")) end end @@ -364,5 +341,23 @@ def preload_records_from_mixed_objects(objects) model_map[model_name] = model_name.constantize.where(id: record_ids).index_by(&:id) end end + + def orphaned_file?(path_segments, record_map = nil) + path_segments.delete('cache') + + raise UnrecognizedOrphanType unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size) + + model_name = path_segments.first.classify + record_id = path_segments[2...-2].join.to_i + attachment_name = path_segments[1].singularize + file_name = path_segments.last + + raise UnrecognizedOrphanType unless PRELOADED_MODELS.include?(model_name) + + record = record_map.present? ? record_map.dig(model_name, record_id) : model_name.constantize.find_by(id: record_id) + attachment = record&.public_send(attachment_name) + + attachment.blank? || !attachment.variant?(file_name) + end end end From a139dac18ec6e50b35a51f664fd5b02b0f9f1c47 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 4 Nov 2024 04:11:00 -0500 Subject: [PATCH 429/467] Remove cookie rotator (#32289) --- config/initializers/cookie_rotator.rb | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 config/initializers/cookie_rotator.rb diff --git a/config/initializers/cookie_rotator.rb b/config/initializers/cookie_rotator.rb deleted file mode 100644 index ccc2c6b21f786b..00000000000000 --- a/config/initializers/cookie_rotator.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# TODO: remove this file some time after 4.3.0 - -Rails.application.config.after_initialize do - Rails.application.config.action_dispatch.cookies_rotations.tap do |cookies| - authenticated_encrypted_cookie_salt = Rails.application.config.action_dispatch.authenticated_encrypted_cookie_salt - signed_cookie_salt = Rails.application.config.action_dispatch.signed_cookie_salt - - secret_key_base = Rails.application.secret_key_base - - key_generator = ActiveSupport::KeyGenerator.new( - secret_key_base, iterations: 1000, hash_digest_class: OpenSSL::Digest::SHA1 - ) - key_len = ActiveSupport::MessageEncryptor.key_len - - old_encrypted_secret = key_generator.generate_key(authenticated_encrypted_cookie_salt, key_len) - old_signed_secret = key_generator.generate_key(signed_cookie_salt) - - cookies.rotate :encrypted, old_encrypted_secret - cookies.rotate :signed, old_signed_secret - end -end From 823f597f0009cf04d4ad39c2707e8c8b3adcba50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 10:20:13 +0100 Subject: [PATCH 430/467] Update formatjs monorepo (#32764) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 128 +++++++++++++++++++++++++++--------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/yarn.lock b/yarn.lock index da80fac3bf12ce..e9bdcb459bbc86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2251,14 +2251,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.2.2": - version: 2.2.2 - resolution: "@formatjs/ecma402-abstract@npm:2.2.2" +"@formatjs/ecma402-abstract@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/ecma402-abstract@npm:2.2.3" dependencies: "@formatjs/fast-memoize": "npm:2.2.3" "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/dc712dd9959c9caa161282e3fb8f4a45c7368c4ada07576619d22b72678ece83459d6ec8b5ac3eee7def3b4398b68483c0ee91b49241024b41906333fd94ce21 + checksum: 10c0/611d12bf320fc5c5b85cb2b57e3dcebe8490a51c6a0459c857c7a3560656cd2bdba5b117e9dd7cf174f5aa120c11eaad7a65a6783637b816caa59a1bc5c727f6 languageName: node linkType: hard @@ -2291,14 +2291,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.9.2": - version: 2.9.2 - resolution: "@formatjs/icu-messageformat-parser@npm:2.9.2" +"@formatjs/icu-messageformat-parser@npm:2.9.3": + version: 2.9.3 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" - "@formatjs/icu-skeleton-parser": "npm:1.8.6" + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/icu-skeleton-parser": "npm:1.8.7" tslib: "npm:2" - checksum: 10c0/5f65377e56a2f0426240f05c015584b629713f0c9e1b7bc6db78c6d2e94b4d28bdd4c674ee32be695e493cd2f80a8168b7cd3c64a23ec36f9e18db2ae080e51b + checksum: 10c0/519b59f7b4cf90681315c5382f7fcd105eb1974486f0d62d9227b6d0498895114ccc818792c208baae1ef79571d93b0edb9914c676e5ab76924dddb7fd6c28a0 languageName: node linkType: hard @@ -2312,35 +2312,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.6": - version: 1.8.6 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.6" +"@formatjs/icu-skeleton-parser@npm:1.8.7": + version: 1.8.7 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.7" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" tslib: "npm:2" - checksum: 10c0/16993372de234aed52a75877247d911125e063aef77daf779e839a3c7a1213b37ffc8c95350375d303e43e30245711a0db693c4d856e6b0c2f3402644a8fb72d + checksum: 10c0/e29eb4151580f2d324e6591509dc4543e2326266fc209a08580c94d502acab14acc3560d98b3aaf9ffbd5ff8e2683601ff08c65b32886f22da015c31ca35c5d0 languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.8.2": - version: 6.8.2 - resolution: "@formatjs/intl-displaynames@npm:6.8.2" +"@formatjs/intl-displaynames@npm:6.8.3": + version: 6.8.3 + resolution: "@formatjs/intl-displaynames@npm:6.8.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/52f3e7f74f9ce114860e235d66889f0cea559df060a879852613f76c673a355f0fc7ebe7d173f058dbbd9e760b57816a3b09a1e447448fef262abc76332bc132 + checksum: 10c0/54d3ecaabc45dc8494be4cd9633bbf5eb0bc40c5f62ed5e5073aa5b214c4a9a9620d61d1c8a6f0074618474fd9c2ccc42904605078d2f6341c242bf43627bb3a languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.7.2": - version: 7.7.2 - resolution: "@formatjs/intl-listformat@npm:7.7.2" +"@formatjs/intl-listformat@npm:7.7.3": + version: 7.7.3 + resolution: "@formatjs/intl-listformat@npm:7.7.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/d42fa043380252f11e300c696f6b366f817c93cac6d9aabc6dc96fb8efcfbc2873b11adac5928e4e1ce7eb1482bbb22b76a5a8520ef7f742ae23863b6edaa088 + checksum: 10c0/2683513e86cc7885528f23237079e3ab9e3a8bc7111aa10d4c685dcbe368ef07039573115df240112fb20f2ec0b70c8ea189ea3b79cbfed7e3dc46024a4667ff languageName: node linkType: hard @@ -2363,33 +2363,33 @@ __metadata: linkType: hard "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.3.2 - resolution: "@formatjs/intl-pluralrules@npm:5.3.2" + version: 5.3.3 + resolution: "@formatjs/intl-pluralrules@npm:5.3.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" "@formatjs/intl-localematcher": "npm:0.5.7" tslib: "npm:2" - checksum: 10c0/c8fde868650b2ac9fb9799791a517b052bd2eb8fb2bcdee225a131d20dd300125eb608129b47bc955e8fdf8f90f7b981bb889485fd6f9bcfb7a267e3d07a495d + checksum: 10c0/003d33af6f5d902517f230b7038e39b8336da3a84500fe5f4278fa5cac0c9a1b746de484f1c2bb2315026fd771491eafdc0aa59a809bb25189b63093efb8400d languageName: node linkType: hard -"@formatjs/intl@npm:2.10.12": - version: 2.10.12 - resolution: "@formatjs/intl@npm:2.10.12" +"@formatjs/intl@npm:2.10.13": + version: 2.10.13 + resolution: "@formatjs/intl@npm:2.10.13" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" "@formatjs/fast-memoize": "npm:2.2.3" - "@formatjs/icu-messageformat-parser": "npm:2.9.2" - "@formatjs/intl-displaynames": "npm:6.8.2" - "@formatjs/intl-listformat": "npm:7.7.2" - intl-messageformat: "npm:10.7.4" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/intl-displaynames": "npm:6.8.3" + "@formatjs/intl-listformat": "npm:7.7.3" + intl-messageformat: "npm:10.7.5" tslib: "npm:2" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/4475b1167c1cc6f2dbf9e373d4ba964032f80a25ca1ba18eca03dfa1730fcaef2c7cfe046252aaf3c23cf87e0968d565d3b7d1c2c336aec097193914173583c1 + checksum: 10c0/14edcc45addc181c7a45845bc34cec5c73bb5544dcf8ed455eca916bbd3a5023c7204a8e8e289060545b85006933c6f297c33c4f04a8a4cb3890aa7baae5bfbf languageName: node linkType: hard @@ -2413,11 +2413,11 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.21": - version: 3.13.21 - resolution: "@formatjs/ts-transformer@npm:3.13.21" +"@formatjs/ts-transformer@npm:3.13.22": + version: 3.13.22 + resolution: "@formatjs/ts-transformer@npm:3.13.22" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.9.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" "@types/json-stable-stringify": "npm:1" "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" chalk: "npm:4" @@ -2429,7 +2429,7 @@ __metadata: peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/e83c8ebd210e451743745e939193bb37a1bba3acc5ba1e15a509968bdbb98a07d0761133cc5aa2375074281d56d9987f782af712111d82ee1f7aef7ad30d88fc + checksum: 10c0/42503292248bcae728181fdf68e79eac4169c18064953beb9245097d2c58e5434ae7a7978e6ce2829dfd6eb4b4155f78fecef70ac6820626a338f231c66f60cb languageName: node linkType: hard @@ -5180,21 +5180,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.23 - resolution: "babel-plugin-formatjs@npm:10.5.23" + version: 10.5.24 + resolution: "babel-plugin-formatjs@npm:10.5.24" dependencies: "@babel/core": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0" "@babel/types": "npm:^7.25.0" - "@formatjs/icu-messageformat-parser": "npm:2.9.2" - "@formatjs/ts-transformer": "npm:3.13.21" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/ts-transformer": "npm:3.13.22" "@types/babel__core": "npm:^7.20.5" "@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__traverse": "npm:^7.20.6" tslib: "npm:2" - checksum: 10c0/1484b6a18beea114d800754c3ffa6296a52676eb68b7f280f9e04e34efed12bcb61ecd881ba042907998bc00df0a5eb9111932c7b5df2fb6d6eae0692984c633 + checksum: 10c0/a99c92e62edb30e0b6a5bf1115811eb18336b851109f8c096b5a9aa2be3eb72299eea3a8cb706e03705eb79edfa5a62d69bb52d80a375c1d5a1c963e3d00c40e languageName: node linkType: hard @@ -9741,15 +9741,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.4, intl-messageformat@npm:^10.3.5": - version: 10.7.4 - resolution: "intl-messageformat@npm:10.7.4" +"intl-messageformat@npm:10.7.5, intl-messageformat@npm:^10.3.5": + version: 10.7.5 + resolution: "intl-messageformat@npm:10.7.5" dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" + "@formatjs/ecma402-abstract": "npm:2.2.3" "@formatjs/fast-memoize": "npm:2.2.3" - "@formatjs/icu-messageformat-parser": "npm:2.9.2" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" tslib: "npm:2" - checksum: 10c0/698e1b020f744a1790eb0a68edc86a8d215c3d3df3d67a1c77f50ce0582af9fadc8656ff988b7806708f997e0e8462a044602f28d8f334f4e8b3233cf3b03f3e + checksum: 10c0/1aa173a8c16ace50520af3de7d3f0ce9bafda90d47b6d674eb88cc47c12c3460d4d53c97ca412fae1141b00abb8ff2ba313250997a040837f01a25379165c949 languageName: node linkType: hard @@ -14474,18 +14474,18 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.8.5 - resolution: "react-intl@npm:6.8.5" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.2.2" - "@formatjs/icu-messageformat-parser": "npm:2.9.2" - "@formatjs/intl": "npm:2.10.12" - "@formatjs/intl-displaynames": "npm:6.8.2" - "@formatjs/intl-listformat": "npm:7.7.2" + version: 6.8.6 + resolution: "react-intl@npm:6.8.6" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + "@formatjs/intl": "npm:2.10.13" + "@formatjs/intl-displaynames": "npm:6.8.3" + "@formatjs/intl-listformat": "npm:7.7.3" "@types/hoist-non-react-statics": "npm:3" "@types/react": "npm:16 || 17 || 18" hoist-non-react-statics: "npm:3" - intl-messageformat: "npm:10.7.4" + intl-messageformat: "npm:10.7.5" tslib: "npm:2" peerDependencies: react: ^16.6.0 || 17 || 18 @@ -14493,7 +14493,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/73707912c00a646460c1497f7004bf511b58ec28265f0d8d65b1677a43f62a957bab40f2b5a1759b7f11cc28af10754e8552890b9b485d3f9505c0a36a692fbc + checksum: 10c0/ec88cc2b1d0edf089f04c8061ffda730840fb3317177d0dc1a6df208245ec278f52b4ca8546ff9511b0b28ff2d89863c5837a274d33731d4c8f75a3b3baafbe2 languageName: node linkType: hard From 90f4ffa31d4bda16fcda04fb837bf1c01160d417 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 4 Nov 2024 11:11:06 +0100 Subject: [PATCH 431/467] Fix performance of percentile calculation for annual reports (#32765) --- app/lib/annual_report.rb | 10 ++++ app/lib/annual_report/percentiles.rb | 55 +++++-------------- app/lib/annual_report/source.rb | 8 +++ .../statuses_per_account_count.rb | 15 +++++ ...nual_report_statuses_per_account_counts.rb | 13 +++++ db/schema.rb | 9 ++- spec/lib/annual_report/percentiles_spec.rb | 14 +++-- 7 files changed, 77 insertions(+), 47 deletions(-) create mode 100644 app/models/annual_report/statuses_per_account_count.rb create mode 100644 db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb diff --git a/app/lib/annual_report.rb b/app/lib/annual_report.rb index cf4297f2a450ea..275cc4b87d3cad 100644 --- a/app/lib/annual_report.rb +++ b/app/lib/annual_report.rb @@ -17,11 +17,21 @@ class AnnualReport SCHEMA = 1 + def self.table_name_prefix + 'annual_report_' + end + def initialize(account, year) @account = account @year = year end + def self.prepare(year) + SOURCES.each do |klass| + klass.prepare(year) + end + end + def generate return if GeneratedAnnualReport.exists?(account: @account, year: @year) diff --git a/app/lib/annual_report/percentiles.rb b/app/lib/annual_report/percentiles.rb index 0251cb66ad27e9..2b0305c41554fd 100644 --- a/app/lib/annual_report/percentiles.rb +++ b/app/lib/annual_report/percentiles.rb @@ -1,62 +1,37 @@ # frozen_string_literal: true class AnnualReport::Percentiles < AnnualReport::Source + def self.prepare(year) + AnnualReport::StatusesPerAccountCount.connection.exec_query(<<~SQL.squish, nil, [year, Mastodon::Snowflake.id_at(DateTime.new(year).beginning_of_year), Mastodon::Snowflake.id_at(DateTime.new(year).end_of_year)]) + INSERT INTO annual_report_statuses_per_account_counts (year, account_id, statuses_count) + SELECT $1, account_id, count(*) + FROM statuses + WHERE id BETWEEN $2 AND $3 + AND (local OR uri IS NULL) + GROUP BY account_id + ON CONFLICT (year, account_id) DO NOTHING + SQL + end + def generate { percentiles: { - followers: (total_with_fewer_followers / (total_with_any_followers + 1.0)) * 100, - statuses: (total_with_fewer_statuses / (total_with_any_statuses + 1.0)) * 100, + statuses: 100.0 - ((total_with_fewer_statuses / (total_with_any_statuses + 1.0)) * 100), }, } end private - def followers_gained - @followers_gained ||= @account.passive_relationships.where("date_part('year', follows.created_at) = ?", @year).count - end - def statuses_created @statuses_created ||= report_statuses.count end - def total_with_fewer_followers - @total_with_fewer_followers ||= Follow.find_by_sql([<<~SQL.squish, { year: @year, comparison: followers_gained }]).first.total - WITH tmp0 AS ( - SELECT follows.target_account_id - FROM follows - INNER JOIN accounts ON accounts.id = follows.target_account_id - WHERE date_part('year', follows.created_at) = :year - AND accounts.domain IS NULL - GROUP BY follows.target_account_id - HAVING COUNT(*) < :comparison - ) - SELECT count(*) AS total - FROM tmp0 - SQL - end - def total_with_fewer_statuses - @total_with_fewer_statuses ||= Status.find_by_sql([<<~SQL.squish, { comparison: statuses_created, min_id: year_as_snowflake_range.first, max_id: year_as_snowflake_range.last }]).first.total - WITH tmp0 AS ( - SELECT statuses.account_id - FROM statuses - INNER JOIN accounts ON accounts.id = statuses.account_id - WHERE statuses.id BETWEEN :min_id AND :max_id - AND accounts.domain IS NULL - GROUP BY statuses.account_id - HAVING count(*) < :comparison - ) - SELECT count(*) AS total - FROM tmp0 - SQL - end - - def total_with_any_followers - @total_with_any_followers ||= Follow.where("date_part('year', follows.created_at) = ?", @year).joins(:target_account).merge(Account.local).count('distinct follows.target_account_id') + @total_with_fewer_statuses ||= AnnualReport::StatusesPerAccountCount.where(year: year).where(statuses_count: ...statuses_created).count end def total_with_any_statuses - @total_with_any_statuses ||= Status.where(id: year_as_snowflake_range).joins(:account).merge(Account.local).count('distinct statuses.account_id') + @total_with_any_statuses ||= AnnualReport::StatusesPerAccountCount.where(year: year).count end end diff --git a/app/lib/annual_report/source.rb b/app/lib/annual_report/source.rb index cb9f7b16e32a10..86528731f51080 100644 --- a/app/lib/annual_report/source.rb +++ b/app/lib/annual_report/source.rb @@ -8,6 +8,14 @@ def initialize(account, year) @year = year end + def self.prepare(_year) + # Use this method if any pre-calculations must be made before individual annual reports are generated + end + + def generate + raise NotImplementedError + end + protected def report_statuses diff --git a/app/models/annual_report/statuses_per_account_count.rb b/app/models/annual_report/statuses_per_account_count.rb new file mode 100644 index 00000000000000..05a2f53c9d5947 --- /dev/null +++ b/app/models/annual_report/statuses_per_account_count.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: annual_report_statuses_per_account_counts +# +# id :bigint(8) not null, primary key +# year :integer not null +# account_id :bigint(8) not null +# statuses_count :bigint(8) not null +# + +class AnnualReport::StatusesPerAccountCount < ApplicationRecord + # This table facilitates percentile calculations +end diff --git a/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb b/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb new file mode 100644 index 00000000000000..c8ec30ad57adbe --- /dev/null +++ b/db/migrate/20241104082851_create_annual_report_statuses_per_account_counts.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class CreateAnnualReportStatusesPerAccountCounts < ActiveRecord::Migration[7.1] + def change + create_table :annual_report_statuses_per_account_counts do |t| # rubocop:disable Rails/CreateTableWithTimestamps + t.integer :year, null: false + t.bigint :account_id, null: false + t.bigint :statuses_count, null: false + end + + add_index :annual_report_statuses_per_account_counts, [:year, :account_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index bea9ad46be5a19..ec029366a54bf1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_10_22_214312) do +ActiveRecord::Schema[7.1].define(version: 2024_11_04_082851) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -260,6 +260,13 @@ t.bigint "status_ids", array: true end + create_table "annual_report_statuses_per_account_counts", force: :cascade do |t| + t.integer "year", null: false + t.bigint "account_id", null: false + t.bigint "statuses_count", null: false + t.index ["year", "account_id"], name: "idx_on_year_account_id_ff3e167cef", unique: true + end + create_table "appeals", force: :cascade do |t| t.bigint "account_id", null: false t.bigint "account_warning_id", null: false diff --git a/spec/lib/annual_report/percentiles_spec.rb b/spec/lib/annual_report/percentiles_spec.rb index 1d1df3166b78e9..11df81cfb6c80a 100644 --- a/spec/lib/annual_report/percentiles_spec.rb +++ b/spec/lib/annual_report/percentiles_spec.rb @@ -4,17 +4,20 @@ RSpec.describe AnnualReport::Percentiles do describe '#generate' do - subject { described_class.new(account, Time.zone.now.year) } + subject { described_class.new(account, year) } + + let(:year) { Time.zone.now.year } context 'with an inactive account' do let(:account) { Fabricate :account } it 'builds a report for an account' do + described_class.prepare(year) + expect(subject.generate) .to include( percentiles: include( - followers: 0, - statuses: 0 + statuses: 100 ) ) end @@ -25,16 +28,15 @@ before do Fabricate.times 2, :status # Others as `account` - Fabricate.times 2, :follow # Others as `target_account` Fabricate.times 2, :status, account: account - Fabricate.times 2, :follow, target_account: account end it 'builds a report for an account' do + described_class.prepare(year) + expect(subject.generate) .to include( percentiles: include( - followers: 50, statuses: 50 ) ) From 0a1b5df2024fcf8454638da80a47c336b69e659b Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 Nov 2024 12:08:19 +0100 Subject: [PATCH 432/467] Fix alt-text pop-in not using the translated description (#32766) --- app/javascript/mastodon/components/media_gallery.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index e059978442a131..59963a0a9f56d1 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -97,12 +97,12 @@ class Item extends PureComponent { height = 50; } - if (attachment.get('description')?.length > 0) { - badges.push(); - } - const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); + if (description?.length > 0) { + badges.push(); + } + if (attachment.get('type') === 'unknown') { return (
From c83eea9a581ab30c072c1a0e16a9670aeb949af9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:33:36 +0100 Subject: [PATCH 433/467] Update dependency json-ld-preloaded to v3.3.1 (#32771) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 392acf36bb67d0..617233d702439f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -362,7 +362,7 @@ GEM rack (>= 2.2, < 4) rdf (~> 3.3) rexml (~> 3.2) - json-ld-preloaded (3.3.0) + json-ld-preloaded (3.3.1) json-ld (~> 3.3) rdf (~> 3.3) json-schema (5.0.1) From 883b509988028e52baa0bdaf4397b5d81e2f811d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:36:03 +0100 Subject: [PATCH 434/467] Update dependency postcss-preset-env to v10.0.9 (#32746) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 390 +++++++++++++++++++++++++++--------------------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/yarn.lock b/yarn.lock index e9bdcb459bbc86..c4a35c93283cd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1463,13 +1463,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.3" +"@csstools/cascade-layer-name-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.4" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.3 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/a0f0d6c94122d0a82b0da94ee2619915a9e6e98211de6e1f28afebe34332a29cab1b7905a34b6e5c1df30a125df9f9860ce5fa960c676484417d4ef2c4db4757 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/774f2bcc96a576183853191bdfd31df15e22c51901ee01678ee47f1d1afcb4ab0e6d9a78e08f7383ac089c7e0b390013633f45ff1f1d577c9aefd252589bcced languageName: node linkType: hard @@ -1480,42 +1480,42 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/css-calc@npm:2.0.3" +"@csstools/css-calc@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/css-calc@npm:2.0.4" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.3 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/a3dacda66bde67edab0f2384e85462dcd46b5bb62bc2a6396f0577a006d9ad59eae270353cbd6fe1a5f7081d0546fe4b1fd9b2df242758da54ec8b7022296570 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/ecb68fc9f8d930b861d5c9c5d4fc6eb43dabc619a4cd6c82dc18034ee746f907dba106fa6cdb909ac727fbfc9b1f7ceac1f356641542faeb2fab99c5fcd52a2e languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.4": - version: 3.0.4 - resolution: "@csstools/css-color-parser@npm:3.0.4" +"@csstools/css-color-parser@npm:^3.0.5": + version: 3.0.5 + resolution: "@csstools/css-color-parser@npm:3.0.5" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.3" + "@csstools/css-calc": "npm:^2.0.4" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.3 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/8f05264254d3768e45e46ce10e9355fe8ca0f6e4d2f648a22572f46c6d05b2378c37c2e5d970ed3b7bdfa0b152ea2af0c56a0556249bd85973aee9db7b091aa7 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/535e2a38222ad7ee9e1143c3ef09ba07b2e70a4214bbdf7ca13398388b8d2db9ee295fe15d9d306342036e554d97dd235567a8c8ee03fea6825483f1c4dbbf7e languageName: node linkType: hard -"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/css-parser-algorithms@npm:3.0.3" +"@csstools/css-parser-algorithms@npm:^3.0.1, @csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" peerDependencies: - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/c1e634384affb10c3726a36f090867247005a2a470cb223de88debeab07921b78c0e7875e7847d90949c2b0ba88a290c71565f1839f7739c21a5bf1c870e137d + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd languageName: node linkType: hard -"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-tokenizer@npm:3.0.2" - checksum: 10c0/a74e5829420ed35982fd33be272c2a19cb2380179d357abe750aa848be6d6699d0437008f47a57eb7c6ff64a34b0c8f91a97dd63dbddd08249b7cf7983767e5e +"@csstools/css-tokenizer@npm:^3.0.1, @csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 languageName: node linkType: hard @@ -1529,13 +1529,13 @@ __metadata: languageName: node linkType: hard -"@csstools/media-query-list-parser@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/media-query-list-parser@npm:4.0.1" +"@csstools/media-query-list-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/media-query-list-parser@npm:4.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.3 - "@csstools/css-tokenizer": ^3.0.2 - checksum: 10c0/037f57520b6ca7d58ba1d71a477bd99bdbe3a6d8e7b972ed0f436d649e574f5b429e54fc47d0272daa2ac24ffb819bd9d260a90e154c4a265b8ee4d1cfb1d279 + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/5d008a70f5d4fd96224066a433f5cdefa76cfd78a74416a20d6d5b2bb1bc8282b140e8373015d807d4dadb91daf3deb73eb13f853ec4e0479d0cb92e80c6f20d languageName: node linkType: hard @@ -1551,60 +1551,60 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.4": - version: 4.0.4 - resolution: "@csstools/postcss-color-function@npm:4.0.4" +"@csstools/postcss-color-function@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-color-function@npm:4.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/e7735c6d7c84f039c84dc1b180410aa4db7c404d55477c2e7872bc8306a3150bf37883583ec080ebd8b40b765f700cc78892d61dc167578f76e324543d551c04 + checksum: 10c0/b47cc4567445eb12dd3e67a4298470d62a449a4d754fd4dd32eb78b23615ba6bd1fe8dacccc6c95087ce8749a6552bace8de0b9b6eee0c9a7b7202a0bcb8fcac languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.4": - version: 3.0.4 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.4" +"@csstools/postcss-color-mix-function@npm:^3.0.5": + version: 3.0.5 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/3e01f04853e49c9f69ee0538b817209b630649844039ee5b195cfbae94d41cf6e0d8a50a3d02dbe066f84855eefa1b7047f6750e4744858519978468577e567f + checksum: 10c0/a17d20dcc42d2c1ccd7a5ceb8d1413133ae9461bf973a9aad997a5782bf4cbbd847aef06accc20fa391ac6fbd44a1003e18c30a621d7c77052d4256fe39619aa languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.3" +"@csstools/postcss-content-alt-text@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.4" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/0389292a1ba11483f58db1bdd38cc774b0ec18c73f03d1db5f4a1f38edc861bb8b8d750b5c5b3615a98aaf995c0464dcfd6db5421888be0f868548c69455b5b3 + checksum: 10c0/84caccedd8a519df434babd58b14104c5a92cd326057ce509bdbaa2a4bb3130afb1c1456caf30235ba14da52d1628a5411ea4f5d2fb558d603d234f795538017 languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.3" +"@csstools/postcss-exponential-functions@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.4" dependencies: - "@csstools/css-calc": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/690ac6c5ec72e085160401100cc8465a040fd70d59efadf61ef767094edac28bbb2653f53ea7cfa47d8220d0be0b9e23c3e3c2b80d9e93ad07b1db8031163d70 + checksum: 10c0/b174faa8782b7b3f3a9636412f90963740ff033c6506acf662f002fa07f59b370eb23937dbe3f1a05d7df277373f662d6970237d34ae938cf282a0b8dbde9a47 languageName: node linkType: hard @@ -1620,46 +1620,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.4": - version: 2.0.4 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.4" +"@csstools/postcss-gamut-mapping@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/60c6ff13cc71a0cda7ce184fa8b42924975f2bd05e3bc096059de853ae01d48e36f27d02d7e6286d9e8c4eb4dfd526f7c302ff51be19c5f7949dd6079915a3a9 + checksum: 10c0/a9d7365bed5c323dddad06d53c137ef3508870e541c6275dbdf3a73a50d44437830c22fa62c510d9316441d1e9f3b5552730778d1b73d083422245673bd00dac languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.4": - version: 5.0.4 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.4" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.5": + version: 5.0.5 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/3b6aa4404851be09a083f35b596acc7e3f74f525386dcd2887720438638ca1893f79e699e5dad0e3a35487cb9527e08d0dcd29f1331f87800f53c13423321d6e + checksum: 10c0/0ef258478270005ab3a879132dc6dbf2bf80788c79861515c826607953c551df1c2ef7005ba9592c31c6dad332d12ee247928a9fdd1569a51927a18a75dcc865 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.4": - version: 4.0.4 - resolution: "@csstools/postcss-hwb-function@npm:4.0.4" +"@csstools/postcss-hwb-function@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-hwb-function@npm:4.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/2460cc7e6324f0793d12976de175ff33344c3410ff7a04ca8a5ce0560ee3354d1d8034f9f07c0759c2b7e222a4681d02298f6a29c2a326c76b33060830da83b4 + checksum: 10c0/9ce0a66bf288c9ec7f1fc28323d56ec54d38a30cb2ab722d1afbd46ec070cc5e61121bacb503803cb00293fc5ed117269969ac21071d7f4ce94b385c96168445 languageName: node linkType: hard @@ -1697,17 +1697,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.6": - version: 2.0.6 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.6" +"@csstools/postcss-light-dark-function@npm:^2.0.7": + version: 2.0.7 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.7" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f3e93b58a23f0f01c9d032a892070a18e3393e60997e1d2b57c5bddb2cb36f7ee6cbaeaeb3d531b065a545a03e54d86567d34b45eddf85ed48ac360eb4ab66cd + checksum: 10c0/c116bfd2d3f4d0caabdedf8954c2a25908ffb29f9bbe2c57d44a2974277c7e46ee79862eea848385dc040275d343f2330350394a2095ec30f0aa17f72e2f4e39 languageName: node linkType: hard @@ -1749,42 +1749,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.2" +"@csstools/postcss-logical-viewport-units@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.3" dependencies: - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/31f525e774bc053f545a159eb53bb21465ea2930118e87c40207ad90fa97d3151e6de83efd02f84803fb0e93ed4a4b42a3904b734423410e73ac4c6ce9666ab4 + checksum: 10c0/8ec746598d7ce8697c3dafd83cb3a319a90079ad755dd78e3ec92f4ba9ad849c4cdaba33b16e9dcbac1e9489b3d7c48262030110c20ce1d88cdacbe9f5987cec languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-media-minmax@npm:2.0.3" +"@csstools/postcss-media-minmax@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-media-minmax@npm:2.0.4" dependencies: - "@csstools/css-calc": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.1" + "@csstools/css-calc": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/87c1ed6fe6ed487125e383ae7bc356ba0f68885c41cd129b85c323af69255031a8ac7b2e994d4f9b6b65d6a9f6833aeb1301ca230b592547825aedb3e3acab4b + checksum: 10c0/f9fe1e99b83a0724250f9426335da6f13bfbc28be6d10ebfafbf037766fc5245240ec33be7e68c9c5b60c013fbc2fa0be96fbed0d41383c919ee9e6f1b8225ce languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.3" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.4" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/3bbadd5c79ff2102b4a2e0f107d7f3cbb89d2840b935915531d0a1bfc711d58386e6e234fccb9b4abb37e48f07cdfaa4dd66b5c795dfac9e317fa8b5cfd38e06 + checksum: 10c0/27dc9419b0f4315774647588f599348e7cc593984f59b414c51c910066501fd087cbe232deb762907c18bd21dd4184e7b6e0e0b730e5c72341ab9cc696c75739 languageName: node linkType: hard @@ -1811,18 +1811,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.4": - version: 4.0.4 - resolution: "@csstools/postcss-oklab-function@npm:4.0.4" +"@csstools/postcss-oklab-function@npm:^4.0.5": + version: 4.0.5 + resolution: "@csstools/postcss-oklab-function@npm:4.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/4fd2a5c22ebaf69053e005d9d009ccb41b6879f0246677159bfb6a28208e90af857446c443d34fe3efdaf50bccdd67b16fcd0c1e7c52961396a48bd84e45311f + checksum: 10c0/a49e2ee60066f7da18316c7c80e5b2ced286ec962052f83c01f1952a1c5fe5b65ba9803a04698260125270a1dd47416f0b287a8f42e591f0d88c9a660ae844ce languageName: node linkType: hard @@ -1837,18 +1837,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.4": - version: 3.0.4 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.4" +"@csstools/postcss-relative-color-syntax@npm:^3.0.5": + version: 3.0.5 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f2ae6f9053e976e2431d08bdc5aa40ca5242754e23370abdfd7b6087d7ed56037e46911d1be801cf7e760aa8aee94bcab6a46f4f68696cf6befacf707c1534b7 + checksum: 10c0/505da97e7b219095a9fb6fa0ad6c6a1358ce1f5debada00564e635e1aa11d034c588be9ce2f76263172a8d1bd07d90647fde826f4565de22dcfc0a76beb68ff1 languageName: node linkType: hard @@ -1863,16 +1863,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.3" +"@csstools/postcss-stepped-value-functions@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.4" dependencies: - "@csstools/css-calc": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/31af5a650d4b2de97d3a3ef77e7ad0777b3f013f7463e23455ac31ffc946d2f79f365a1fdead52c7c535176232ab57f6f086ecdbeca1bb0b250161b1302e8c8c + checksum: 10c0/c8413a855a5ee9ad5b800263545d24d1bbd815f5ae0693c7dfd10c5f5b47bae5a9d985efdb2c46b03194ed3cae39f3d82c3ccfde502dee0b35d620fa539906be languageName: node linkType: hard @@ -1888,16 +1888,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.3" +"@csstools/postcss-trigonometric-functions@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.4" dependencies: - "@csstools/css-calc": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-calc": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" peerDependencies: postcss: ^8.4 - checksum: 10c0/a13dd72c00e45e6db16c03e135f1cd1b2b412e83b7681696b49feef3a4c36ab80f5f806f3589d33405e2d14dd0dfb13572ec12007ebe3d294077b0bd3d645b2b + checksum: 10c0/344c07961d24894f315faebf43c0128167fb2e33964c70d0d39d99a051c045678511d7378959105d672c5286a5360fde28fe390cdebfe823f3949e3cd1d50c4e languageName: node linkType: hard @@ -13270,18 +13270,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.4": - version: 7.0.4 - resolution: "postcss-color-functional-notation@npm:7.0.4" +"postcss-color-functional-notation@npm:^7.0.5": + version: 7.0.5 + resolution: "postcss-color-functional-notation@npm:7.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/1e39c47f27610ebf6a6308cfea2904fbe1f157b13654325ada23153a944666722c6132b53dfc7660632406a636479dda68eeb97a246c2e593ad6eed1e9bf838d + checksum: 10c0/5e1771b8a43abd3cb18142842e8ac100b205f37a6757d6686da49e0c61ecf33d09244d256f3802962105e7ef79fbde2dffbfc1eedf1700198c54d2d5e48f3dc1 languageName: node linkType: hard @@ -13335,46 +13335,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.4": - version: 11.0.4 - resolution: "postcss-custom-media@npm:11.0.4" +"postcss-custom-media@npm:^11.0.5": + version: 11.0.5 + resolution: "postcss-custom-media@npm:11.0.5" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" - "@csstools/media-query-list-parser": "npm:^4.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" peerDependencies: postcss: ^8.4 - checksum: 10c0/31e82e5802f6933a15f5fcf64ff41c8107af9c1d5dcba3c4422a6de3fac77bce9e3dc4ed2b79ae7f6ae460549c5da5a013669af05c1ae21549dbb09b66a9492d + checksum: 10c0/5ba1ca0383818e83d5f6f398a2b0c12cfda066b5d552adfc0e030a2c5f8690c2cc6224f9a1832a9c780dae3fd8d00d78c4a5c88eb36b731da1752f0c3917d488 languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.3": - version: 14.0.3 - resolution: "postcss-custom-properties@npm:14.0.3" +"postcss-custom-properties@npm:^14.0.4": + version: 14.0.4 + resolution: "postcss-custom-properties@npm:14.0.4" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/878ffd171ab9bbbba711930cf1b5bd48a12779e3b45d69f41366c2f65d84518f9338a92a277c0e390518c9e12272e06892cdc6575783bcdecfa6d26ebde3d043 + checksum: 10c0/5b101ee71289657cc2e5a16f4912009c10441052e2c54bd9e4f3d4d72b652bab56adb662ddaa96881413e375cf9852e2159b3c778d953442ce86efb781c3b2bf languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.3": - version: 8.0.3 - resolution: "postcss-custom-selectors@npm:8.0.3" +"postcss-custom-selectors@npm:^8.0.4": + version: 8.0.4 + resolution: "postcss-custom-selectors@npm:8.0.4" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.3" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/3acdada43e385c23130f1dde41b189acc7739e5bbd14751ae28b2bd97b0d97f30c2a53da4f9558d108a893cc48717f76b28395a9ff38dcbbe3c3a1721ee4a68a + checksum: 10c0/09d494d2580d0a99f57684f79793d03358286c32460b61a84063c33bdde24865771cb1205efe9a8e26a508be24eba4fb93fc7f1e96ba21ca96a5d17fadb24863 languageName: node linkType: hard @@ -13492,18 +13492,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.4": - version: 7.0.4 - resolution: "postcss-lab-function@npm:7.0.4" +"postcss-lab-function@npm:^7.0.5": + version: 7.0.5 + resolution: "postcss-lab-function@npm:7.0.5" dependencies: - "@csstools/css-color-parser": "npm:^3.0.4" - "@csstools/css-parser-algorithms": "npm:^3.0.3" - "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/css-color-parser": "npm:^3.0.5" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/79ce3cc20484aef0e0bbc2d18c8f91d7362226a3db52f06a931ac8e1c58ffbc60876c6439f364093e5f16ef92260a420230cfb2a9e7b95c6c11e6f7d57626260 + checksum: 10c0/b688f6332ac12974452c97c5a40f4d0a604ce16b074124a1106add9cf9c25fbe7717d23423d6e92d937dc6e288e03e885b70e0793b96f41d28d2f7403bce7bf5 languageName: node linkType: hard @@ -13824,38 +13824,38 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.8 - resolution: "postcss-preset-env@npm:10.0.8" + version: 10.0.9 + resolution: "postcss-preset-env@npm:10.0.9" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.1" - "@csstools/postcss-color-function": "npm:^4.0.4" - "@csstools/postcss-color-mix-function": "npm:^3.0.4" - "@csstools/postcss-content-alt-text": "npm:^2.0.3" - "@csstools/postcss-exponential-functions": "npm:^2.0.3" + "@csstools/postcss-color-function": "npm:^4.0.5" + "@csstools/postcss-color-mix-function": "npm:^3.0.5" + "@csstools/postcss-content-alt-text": "npm:^2.0.4" + "@csstools/postcss-exponential-functions": "npm:^2.0.4" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.4" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.4" - "@csstools/postcss-hwb-function": "npm:^4.0.4" + "@csstools/postcss-gamut-mapping": "npm:^2.0.5" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.5" + "@csstools/postcss-hwb-function": "npm:^4.0.5" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" - "@csstools/postcss-light-dark-function": "npm:^2.0.6" + "@csstools/postcss-light-dark-function": "npm:^2.0.7" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" - "@csstools/postcss-logical-viewport-units": "npm:^3.0.2" - "@csstools/postcss-media-minmax": "npm:^2.0.3" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.3" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.3" + "@csstools/postcss-media-minmax": "npm:^2.0.4" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.4" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.4" + "@csstools/postcss-oklab-function": "npm:^4.0.5" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.4" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.5" "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.3" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.4" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.3" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.4" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" @@ -13865,12 +13865,12 @@ __metadata: cssdb: "npm:^8.1.2" postcss-attribute-case-insensitive: "npm:^7.0.1" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.4" + postcss-color-functional-notation: "npm:^7.0.5" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.4" - postcss-custom-properties: "npm:^14.0.3" - postcss-custom-selectors: "npm:^8.0.3" + postcss-custom-media: "npm:^11.0.5" + postcss-custom-properties: "npm:^14.0.4" + postcss-custom-selectors: "npm:^8.0.4" postcss-dir-pseudo-class: "npm:^9.0.1" postcss-double-position-gradients: "npm:^6.0.0" postcss-focus-visible: "npm:^10.0.1" @@ -13878,7 +13878,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.4" + postcss-lab-function: "npm:^7.0.5" postcss-logical: "npm:^8.0.0" postcss-nesting: "npm:^13.0.1" postcss-opacity-percentage: "npm:^3.0.0" @@ -13890,7 +13890,7 @@ __metadata: postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/3f7dc8eb2e7f4e7a5eee0a9456972a5b18bd40109d1aa3328f60cd645d352f3a70c83c507ea58f83b820153b0f5c3f14af3f376573c56599c36d5739c943b6f1 + checksum: 10c0/985ef4cfd2dd6a94d8a802db8e392c4b4c47ae0de8fd5224c60d8172cac3d7ce9011e63ab80470cddc77f21f09b2be850f97ac2478f651bc0a8956b538b079fe languageName: node linkType: hard From 933fa81bafffc9084c1f2d96161f724be6777458 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 08:41:09 +0000 Subject: [PATCH 435/467] New Crowdin Translations (automated) (#32772) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ru.json | 13 +++++++++-- config/locales/doorkeeper.ru.yml | 1 + config/locales/ru.yml | 29 +++++++++++++++++++++++++ config/locales/simple_form.ru.yml | 2 ++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d75b5fab262b1a..9d937939a9b463 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -158,6 +158,7 @@ "compose_form.poll.duration": "Продолжительность опроса", "compose_form.poll.multiple": "Несколько вариантов ответа", "compose_form.poll.option_placeholder": "Вариант {number}", + "compose_form.poll.single": "Один вариант ответа", "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", "compose_form.poll.type": "Стиль", @@ -222,6 +223,7 @@ "domain_block_modal.they_cant_follow": "Никто из этого сервера не может подписываться на вас.", "domain_block_modal.they_wont_know": "Он не будет знать, что его заблокировали.", "domain_block_modal.title": "Заблокировать домен?", + "domain_block_modal.you_will_lose_num_followers": "Вы потеряете {followersCount, plural, one {{followersCountDisplay} подписчика} other {{followersCountDisplay} подписчиков}} и {followingCount, plural, one {{followingCountDisplay} подписку} other {{followingCountDisplay} подписок}}.", "domain_block_modal.you_will_lose_relationships": "Вы потеряете всех подписчиков и людей, на которых вы подписаны, на этом сервере.", "domain_block_modal.you_wont_see_posts": "Вы не будете видеть записи или уведомления от пользователей на этом сервере.", "domain_pill.activitypub_lets_connect": "Это позволяет вам общаться и взаимодействовать с людьми не только на Mastodon, но и в различных социальных приложениях.", @@ -507,7 +509,7 @@ "notification.admin.sign_up": "{name} зарегистрирован", "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались", "notification.favourite": "{name} добавил(а) ваш пост в избранное", - "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", + "notification.favourite.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваш пост в избранное", "notification.follow": "{name} подписался (-лась) на вас", "notification.follow.name_and_others": "{name} и {count, plural, one {# other} few {# others} many {# others} other {# others}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", @@ -530,7 +532,7 @@ "notification.own_poll": "Ваш опрос закончился", "notification.poll": "Голосование, в котором вы приняли участие, завершилось", "notification.reblog": "{name} продвинул(а) ваш пост", - "notification.reblog.name_and_others_with_link": "{name} и {count, plural, one {# other} other {# others}} увеличили ваш пост", + "notification.reblog.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} продвинули ваш пост", "notification.relationships_severance_event": "Потеряно соединение с {name}", "notification.relationships_severance_event.account_suspension": "Администратор {from} заблокировал {target}, что означает, что вы больше не сможете получать обновления от них или взаймодествовать с ними.", "notification.relationships_severance_event.domain_block": "Администратор {from} заблокировал {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.", @@ -539,10 +541,15 @@ "notification.status": "{name} только что запостил", "notification.update": "{name} изменил(а) пост", "notification_requests.accept": "Принять", + "notification_requests.accept_multiple": "{count, plural, one {Принять # запрос…} few {Принять # запроса…} other {Принять # запросов…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Принять запрос} other {Принять запросы}}", + "notification_requests.confirm_accept_multiple.message": "Вы собираетесь принять {count, plural, one {# запрос на показ уведомлений} few {# запроса на показ уведомлений} other {# запросов на показ уведомлений}}. Продолжить?", "notification_requests.confirm_accept_multiple.title": "Принимать запросы на уведомления?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Отклонить запрос} other {Отклонить запросы}}", + "notification_requests.confirm_dismiss_multiple.message": "Вы собираетесь отклонить {count, plural, one {# запрос на показ уведомлений} few {# запроса на показ уведомлений} other {# запросов на показ уведомлений}}. Вы не сможете просмотреть {count, plural, other {их}} потом. Продолжить?", "notification_requests.confirm_dismiss_multiple.title": "Отклонять запросы на уведомления?", "notification_requests.dismiss": "Отклонить", + "notification_requests.dismiss_multiple": "{count, plural, one {Отклонить # запрос…} few {Отклонить # запроса…} other {Отклонить # запросов…}}", "notification_requests.edit_selection": "Редактировать", "notification_requests.exit_selection": "Готово", "notification_requests.explainer_for_limited_account": "Уведомления от этой учетной записи были отфильтрованы, поскольку учетная запись была ограничена модератором.", @@ -597,6 +604,7 @@ "notifications.policy.filter_limited_accounts_title": "Модерируемые аккаунты", "notifications.policy.filter_new_accounts.hint": "Создано в течение последних {days, plural, one {один день} few {# дней} many {# дней} other {# дня}}", "notifications.policy.filter_new_accounts_title": "Новые учётные записи", + "notifications.policy.filter_not_followers_hint": "Включая людей, которые подписаны на вас меньше чем {days, plural, one {# день} few {# дня} other {# дней}}", "notifications.policy.filter_not_followers_title": "Люди, не подписанные на вас", "notifications.policy.filter_not_following_hint": "Пока вы не одобрите их вручную", "notifications.policy.filter_not_following_title": "Люди, на которых вы не подписаны", @@ -788,6 +796,7 @@ "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", "status.embed": "Получить код для встраивания", "status.favourite": "Избранное", + "status.favourites": "{count, plural, one {в избранном} other {в избранном}}", "status.filter": "Фильтровать этот пост", "status.history.created": "{name} создал {date}", "status.history.edited": "{name} отредактировал(а) {date}", diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index 1dcb2093d517d2..c7ea94c2e34fb2 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -60,6 +60,7 @@ ru: error: title: Произошла ошибка new: + prompt_html: "%{client_name} хочет получить доступ к вашему аккаунту. Принимайте запрос только в том случае, если узнаёте, откуда он, и доверяете источнику." review_permissions: Просмотр разрешений title: Требуется авторизация show: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index b7a10269fa9425..41b74c8cb45e04 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -25,6 +25,7 @@ ru: one: Пост other: статусов posts_tab_heading: Посты + self_follow_error: Нельзя подписаться на самого себя admin: account_actions: action: Выполнить действие @@ -462,6 +463,7 @@ ru: title: Блокировка нового почтового домена no_email_domain_block_selected: Блоки почтовых доменов не были изменены, так как ни один из них не был выбран not_permitted: Не разрешено + resolved_dns_records_hint_html: Доменное имя указывает на следующие MX-домены, которые в конечном итоге отвечают за прием электронной почты. Блокировка MX-домена будет блокировать регистрации с любого адреса электронной почты, который использует тот же MX-домен, даже если видимое доменное имя отличается от него. Будьте осторожны, чтобы не заблокировать основных провайдеров электронной почты resolved_through_html: Разрешено через %{domain} title: Заблокированные e-mail домены export_domain_allows: @@ -625,6 +627,7 @@ ru: resolve_description_html: Никаких действий не будет выполнено относительно доложенного содержимого. Жалоба будет закрыта. silence_description_html: Учетная запись будет видна только тем пользователям, которые уже подписаны на неё, либо открыли его вручную. Это действие можно отменить в любой момент, и отменяет все жалобы против аккаунта. suspend_description_html: Аккаунт и все его содержимое будут недоступны и в конечном итоге удалены, и взаимодействие с ним будет невозможно. Это действие можно отменить в течение 30 дней. Отменяет все жалобы против этого аккаунта. + actions_description_html: Выберите действие, чтобы разрешить данную жалобу. Если вы примете меры модерации против аккаунта, его владелец получит уведомление по электронной почте, кроме тех случаев, когда выбрана категория Спам. actions_description_remote_html: Решите вопрос о том, какие меры необходимо принять для урегулирования этой жалобы. Это повлияет только на то, как ваш сервер взаимодействует с этим удаленным аккаунтом и обрабатывает его содержимое. actions_no_posts: У этого отчета нет связанных с ним сообщений для удаления add_to_report: Прикрепить ещё @@ -902,6 +905,7 @@ ru: sidekiq_process_check: message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq software_version_check: + action: Посмотреть доступные обновления message_html: Доступно обновление для Mastodon. software_version_critical_check: action: Посмотреть доступные обновления @@ -1198,8 +1202,11 @@ ru: use_security_key: Использовать ключ безопасности author_attribution: example_title: Образец текста + hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon. + instructions: 'Добавьте код ниже в HTML ваших статей:' more_from_html: Больше от %{name} s_blog: "%{name}'S Блог" + then_instructions: Затем добавьте доменное имя сайта, где вы публикуетесь, в поле ниже. title: Авторская атрибуция challenge: confirm: Продолжить @@ -1411,6 +1418,27 @@ ru: merge_long: Сохранить имеющиеся данные и добавить новые. overwrite: Перезаписать overwrite_long: Перезаписать имеющиеся данные новыми. + overwrite_preambles: + blocking_html: + few: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунта, из файла %{filename}. + many: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунов, из файла %{filename}. + one: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунт, из файла %{filename}. + other: Вы собираетесь заменить свой список блокировки, в котором сейчас %{count} аккаунтов, из файла %{filename}. + bookmarks_html: + few: Вы собираетесь заменить свои закладки, в которых сейчас %{count} поста, из файла %{filename}. + many: Вы собираетесь заменить свои закладки, в которых сейчас %{count} постов, из файла %{filename}. + one: Вы собираетесь заменить свои закладки, в которых сейчас %{count} пост, из файла %{filename}. + other: Вы собираетесь заменить свои закладки, в которых сейчас %{count} постов, из файла %{filename}. + domain_blocking_html: + few: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} домена, из файла %{filename}. + many: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} доменов, из файла %{filename}. + one: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} домен, из файла %{filename}. + other: Вы собираетесь заменить свой список доменных блокировок, в котором сейчас %{count} доменов, из файла %{filename}. + following_html: + few: Вы собираетесь подписаться на %{count} аккаунта из файла %{filename} и отписаться от всех прочих. + many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих. + one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename} и отписаться от всех прочих. + other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих. preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла. recent_imports: Недавно импортированное states: @@ -1728,6 +1756,7 @@ ru: delete: Удаление учётной записи development: Разработчикам edit_profile: Изменить профиль + export: Экспорт featured_tags: Избранные хэштеги import: Импорт import_and_export: Импорт и экспорт diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 1bdffc6f1d5634..37626ff9fd1ec2 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -3,6 +3,7 @@ ru: simple_form: hints: account: + attribution_domains_as_text: По одному на строку. Защищает от ложных атрибуций. discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям. display_name: Ваше полное имя или псевдоним. fields: Ваша домашняя страница, местоимения, возраст - все, что угодно. @@ -143,6 +144,7 @@ ru: url: Куда события будут отправляться labels: account: + attribution_domains_as_text: Веб-сайты, которым разрешено ссылаться на вас discoverable: Профиль и сообщения в алгоритмах обнаружения fields: name: Пункт From d60ef3f17e37661fc9285e427f6a3a58fffe9d68 Mon Sep 17 00:00:00 2001 From: David Roetzel Date: Tue, 5 Nov 2024 09:55:34 +0100 Subject: [PATCH 436/467] Disable `httplog` gem in production (#32776) --- Gemfile | 2 +- config/initializers/httplog.rb | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 22a8d86c3c3aa0..bc7a219789a941 100644 --- a/Gemfile +++ b/Gemfile @@ -53,7 +53,7 @@ gem 'hiredis', '~> 0.6' gem 'htmlentities', '~> 4.3' gem 'http', '~> 5.2.0' gem 'http_accept_language', '~> 2.1' -gem 'httplog', '~> 1.7.0' +gem 'httplog', '~> 1.7.0', require: false gem 'i18n' gem 'idn-ruby', require: 'idn' gem 'inline_svg' diff --git a/config/initializers/httplog.rb b/config/initializers/httplog.rb index 02fcef4120ac06..7a009e84d1e07b 100644 --- a/config/initializers/httplog.rb +++ b/config/initializers/httplog.rb @@ -1,7 +1,12 @@ # frozen_string_literal: true -HttpLog.configure do |config| - config.logger = Rails.logger - config.color = { color: :yellow } - config.compact_log = true +# Disable httplog in production unless log_level is `debug` +if !Rails.env.production? || Rails.configuration.log_level == :debug + require 'httplog' + + HttpLog.configure do |config| + config.logger = Rails.logger + config.color = { color: :yellow } + config.compact_log = true + end end From 20a147170ed00f1c3cf3e41ea30dc12d989109c9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 5 Nov 2024 09:20:27 -0500 Subject: [PATCH 437/467] Remove unused `usage` method from `REST::V1::InstanceSerializer` (#32768) --- app/serializers/rest/v1/instance_serializer.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 7f9f21c5af18f2..db83af49074ab3 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -48,14 +48,6 @@ def urls { streaming_api: Rails.configuration.x.streaming_api_base_url } end - def usage - { - users: { - active_month: instance_presenter.active_user_count(4), - }, - } - end - def configuration { accounts: { From d6349c0e9aa93c3d9f70dafb26cf792e874022bf Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 5 Nov 2024 15:40:07 +0100 Subject: [PATCH 438/467] Add year in review feature to web UI (#32709) --- .../api/v1/annual_reports_controller.rb | 11 + app/javascript/images/archetypes/booster.png | Bin 0 -> 635021 bytes app/javascript/images/archetypes/lurker.png | Bin 0 -> 1057477 bytes app/javascript/images/archetypes/oracle.png | Bin 0 -> 1208409 bytes app/javascript/images/archetypes/pollster.png | Bin 0 -> 727543 bytes app/javascript/images/archetypes/replier.png | Bin 0 -> 805191 bytes .../mastodon/api_types/notifications.ts | 16 +- .../mastodon/components/modal_root.jsx | 22 +- .../features/annual_report/archetype.tsx | 69 ++++ .../features/annual_report/followers.tsx | 69 ++++ .../annual_report/highlighted_post.tsx | 105 ++++++ .../mastodon/features/annual_report/index.tsx | 99 ++++++ .../features/annual_report/most_used_app.tsx | 29 ++ .../annual_report/most_used_hashtag.tsx | 29 ++ .../features/annual_report/new_posts.tsx | 53 +++ .../features/annual_report/percentile.tsx | 53 +++ .../components/notification_annual_report.tsx | 59 +++ .../components/notification_group.tsx | 9 + .../status/components/detailed_status.tsx | 8 +- .../ui/components/annual_report_modal.tsx | 21 ++ .../features/ui/components/modal_root.jsx | 2 + .../features/ui/util/async-components.js | 4 + app/javascript/mastodon/locales/en.json | 20 ++ .../mastodon/models/annual_report.ts | 44 +++ .../mastodon/models/notification_group.ts | 25 +- .../400-24px/celebration-fill.svg | 1 + .../material-icons/400-24px/celebration.svg | 1 + .../material-icons/400-24px/explore-fill.svg | 2 +- .../material-icons/400-24px/explore.svg | 2 +- app/javascript/styles/application.scss | 1 + .../styles/mastodon/annual_reports.scss | 335 ++++++++++++++++++ .../styles/mastodon/components.scss | 6 +- app/models/notification.rb | 6 +- app/models/notification_group.rb | 1 + .../rest/annual_report_event_serializer.rb | 9 + .../rest/notification_group_serializer.rb | 5 + app/services/notify_service.rb | 6 +- config/routes/api.rb | 2 +- 38 files changed, 1103 insertions(+), 21 deletions(-) create mode 100755 app/javascript/images/archetypes/booster.png create mode 100755 app/javascript/images/archetypes/lurker.png create mode 100755 app/javascript/images/archetypes/oracle.png create mode 100755 app/javascript/images/archetypes/pollster.png create mode 100755 app/javascript/images/archetypes/replier.png create mode 100644 app/javascript/mastodon/features/annual_report/archetype.tsx create mode 100644 app/javascript/mastodon/features/annual_report/followers.tsx create mode 100644 app/javascript/mastodon/features/annual_report/highlighted_post.tsx create mode 100644 app/javascript/mastodon/features/annual_report/index.tsx create mode 100644 app/javascript/mastodon/features/annual_report/most_used_app.tsx create mode 100644 app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx create mode 100644 app/javascript/mastodon/features/annual_report/new_posts.tsx create mode 100644 app/javascript/mastodon/features/annual_report/percentile.tsx create mode 100644 app/javascript/mastodon/features/notifications_v2/components/notification_annual_report.tsx create mode 100644 app/javascript/mastodon/features/ui/components/annual_report_modal.tsx create mode 100644 app/javascript/mastodon/models/annual_report.ts create mode 100644 app/javascript/material-icons/400-24px/celebration-fill.svg create mode 100644 app/javascript/material-icons/400-24px/celebration.svg create mode 100644 app/javascript/styles/mastodon/annual_reports.scss create mode 100644 app/serializers/rest/annual_report_event_serializer.rb diff --git a/app/controllers/api/v1/annual_reports_controller.rb b/app/controllers/api/v1/annual_reports_controller.rb index 9bc8e68ac2430b..b1aee288dd8595 100644 --- a/app/controllers/api/v1/annual_reports_controller.rb +++ b/app/controllers/api/v1/annual_reports_controller.rb @@ -17,6 +17,17 @@ def index relationships: @relationships end + def show + with_read_replica do + @presenter = AnnualReportsPresenter.new([@annual_report]) + @relationships = StatusRelationshipsPresenter.new(@presenter.statuses, current_account.id) + end + + render json: @presenter, + serializer: REST::AnnualReportsSerializer, + relationships: @relationships + end + def read @annual_report.view! render_empty diff --git a/app/javascript/images/archetypes/booster.png b/app/javascript/images/archetypes/booster.png new file mode 100755 index 0000000000000000000000000000000000000000..18c92dfb7d57cd5773a559f51bfac689e145dee3 GIT binary patch literal 635021 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�&!@x*AyL_kV$jm>zY4wiX|b;U-R3VXn8(DgfOrmUTi+>ILI-8a2{7V#rp z+BBhX=p-5PMf{d#JqTWhy&&zZVbG{($|M~hw_(=T-t7&ax>`TaH8C|!bZ!69WNVs9 zojO>e^;aUvqD-@Ox%BTc@%F(i_J+r*kYlF{x0#ust7`}ff@{q-6d5+ku(R8}43xeh zz27K7=gODO<2J6pJHBpB<3!ziI9@D9F-D7WjqVIu@!sb2m|a0He@;->F#@m88D%IF zkuOtQNVjpn^aO*4hYt>rJ(J7+Q&Dy%E?dN!fk5>PpQY@+(igk%G7=-QFEhroFkfL3GCSM4rIgzMY8#U6+QX5L35KtvAaW+Jei27luyv8YcwX=RC`PGo6QsZ8Xm#H# z&3@H7d*D$t)TdgUEeEo*%Qh`2Jh?lMYIocOmlZ{Yjq*fvBs zKMRU$Aj4w*gsW&~4Ng~xmTgLX&tv$Rk!=8}gZ2a{@KgiJus!1JMFpCqOW$(;fD?)( z>&p2LY~F7;M?n2G?2nI^Hkr;lXGi{3urBBrp`Fq{7bEHMgQ0b`RB8HZdebM)$p?&} zrZ&EN{Y`$(%Oy-BSxo@%s?Oa>*nQJCz2i(^BoIE>)m`f1v6J$@d_%bei|=LhCiwm7 z{yka08sSH4QM~)xP2OD3F*1e0y zyv|v?nvGu@n=SfEg+sw&I{qIN_$1R~5WZEo^s(a2|2hTd5D+$af|FeKO%v5qk`nuD zy)Kv^5owt$x}f!s^Rt+BovsCS*53A`=UGZ)n%LBRY#AAH_|TWAE+3?5fAcv;x8oqbZX_uIjCB%+4%Q2#GP;qUp9q4 z%%<=+YGz3Slv;m^XmEGOdsA$5|Rtj)pE{g_VpiS0wczT^De|w7?N$|vuekK{ z=Oj~~k*}OCiPtGtrP{RQ7@c_AF$}lpT`HT1$GYt?LE{}`SGuWEd0G4XN`~e>wxR0H z;tQ;{xYxHxqCF*0FT=&UF^@m)Y`fa-j&)@Ysw;b6>hHj|X_C%Gi+d_m=yIm#DP3Lk zgI{hp1qO=Zb7?XroXmar4GlvcXTLnNfA;g}1a&E^JNis30oM8bf`0t!x69WmkS`Jy zY8qR6EaicgP4Lxdco`mWX}hJI{^my9bMx5|sv34AzCJ_ml_7iHfB3K0A5p#DkqFyT z7zFa_<(teU7m73WnN_8m@V1PMrr20E5M#KyI-kdptqBT1#h-c=@wrK8Xvn=*GIL~ACjWU1>E`d zUkm>dDqohVt~!GUmD~0A|8q-Na=%Ea;yFG9nytO{W?ekmon?iMx5D!LBG@{#UCX`V z`jMe`Ic&+Zx1S3ddn4dY%QC5q^k$Ujuhvybl$}j?XcBt%l1N0k^T1Y_h(*@rZ0SM{ z;%-qh^Mt=#MNo8JL~)E{tHky><3P+FnjNwtAWEUn(2u-T&xJ-3XmTrHFH;uKpp;;| z@xq4QFHe&}yo`RNKITmA@Bq2NtTjto-NO7=@RYbU?u{eJqvNzj{MmV)iEpIpPyQSc z5SXz#95C0+nC1rJ>~|_Y2@0&}B0iiIm{-;&NwiY=!kJjvNQ5#0*Z6RjYd>4C)P=|y;x-% zB^;Yzq2~1jg+ZnjfsUrR#VL59rlGbAKazei8S5uescTqT{|%%((4eDc|D^4_7*WSkDy&apr+4o)dh!|v_C_iI*U9A3BFm?aOovI`!B9K*Q zck3N_iYrP+Z7BwI{X$3Q;p~dx1Os92(J-%v0%1YoMImloOthxD1f!~v(8(?T%*-7U zH8pvw1_X_i;G7)&Rl%U@ZxKf#KIOXaiVjBNTh8!t9NFud*OT3zgg5SC(3QEia!!QOax=9a-f6ANcPr+U%5mn-b?&k#%(~sg`k<`2yW{$u;t7e z>2YAcyF|TMxh3)uo(LtJ6lFS+){gR89HFk5ol0C26^s+k&H-5|s1_9^*8bRW=$^HI)5F*kSbB~)Uc zP}LmRq}A)DP~5@Z_qGnd<~a^q&C4++3W$`Rk2g}|=3;~^Ih7A-js5cM#Tee~sL_ZY z?rR;kuK1m_q~DVqu2^xiXN59G5fW|9X3S3vu38&9#T&zOC|X}i()69Pg%jbJ62Jep zW+PJzrv5(Fs8Z;yxy{eKlXKGwb@izQs+^<-JF$zKo9}NVkK6I2@F9Dea zR_Ro>Ur{n8s@IHr?5+>5ou1|)de6_xY0_Bg3(a3PfGMb@i~k;0cBwYoeKLwgVe<-| zTN{%54f+up5ljSY6NxeO0!x#Rn^ia(9*sXacVagcj^hwu{iBi;{lwo#|2^+2X)< zF}mUSxD(7^M4`hxD>y$o><{)uIL0Kp3%}YYb)adT%~oQ96IaYwtzD2fLqO9VBprc6 zM%saktMVGgM*ja(0c}41}tvRM0nALlUOSaaSkK-m}iVo&0{~(AiB+2H`w1YbR^pR~UJNV;&uFi>1 zl50tXjqZbM%3CgvSiehkkLAxC{`LdukQrZF-z2-^?v-a5giCQJ;t>Uh^>S${xPyJJ z?_13dEyurCS4mbsY*$6GHV4gbeZJh;7j4dCS3Gu(rnMQaIzimX=?14Zoc`0QTH9O= z1+RX1ENmfLLoNO*`6YvC=t1rY{NZwyt_pQRmuX5yxA9&QPl+rdZA_zn5H)$u&gc9Q zdW4F7xcJfSKkqmy&?ZBAo^(g>64{+}y+8b{H5Hl&BL8$#o? z50KJe1$i)fKX-rZBm8Xcz|`_V^x5~5_wbYFqF&8jwH^i=*NTFafIRJiw@92lG%=G( z|LgAug4ARIcdyLno>xXppL51>JLnG6e(b22IMC&x(t5x5rng{!f6hTW!W&{_!&Z)udZ>|Fq6mQU`V61_Rr5u{ zUbdDspsRreWXe(KWn0f_LPp4e=z3&cor7RLr!?PMb}M)jye%D{X=YU-~XV6^t)LTMs0X z#H7+txH+qCAy;SMJQd;2=kE+_HNyv9Evs4$+@0am(!q0sog$viLd9?bYoGc?jxPcA zoGLoKv3K40xv|!Uv2N7(otGyC*E-2oS~r?MF%-V7D>ApPx|=+^d@nqC2MvvYs09r# zFp1X!d0Le~TY$}ar~cCwTWx}rD3LmS3k$*FIjjALGqq%BtbsCzL4{tUt~TLYWWwe! z2?+CYwj&NW-SkX+5K~YgdmJvW6J*$xieBxB`Kv}#Clz|+4ze9S{206W!Zt1BZSz$Z z##V)@H()Au@odNJydyTNdR@WaDcgDGKB+6nk%;=xJ}{$=^Rw3rsnOFDu7ICuP_`Jw z)Q=yKNhhH`E8%O9W2*^aZ~pYLIy5N@Jw?Fk`LOLG^pYrS=_iB|Q2y8omhy`gYw6hp z2KOXAl^dP_?oPnjo(DoDO2V?ddA+&!OfopV`BQafMLrK=+(1YU5;55+CFz~_|G7h% z$yX(_U-K$n$$NGpHk?yr6|i*L;iAaCf5OQ?-+pv4^}?;1J)E%Nk2+}Uh`cu zY20jgWf1!o0Y1Hky+5vqd+GZ*;_*66BCTJ^BXE#wV~rAj&A2p%9gD+d`X`|%Uzuk5 zH=L{44CL>8YrWfIVx+u0(v+Wn=~pLBrf6#`0{u)QOLMy>=8N&s`o%TO&5JcT8w|a548+b$5PUg5f47uT%I&ojCXp0p$>7==pZ^fA`FN{YR*sAr!5`{4XP1!|YR%xWMP#Dks6Qnzu3U z#}ljby*PdhR@Q_+khxB~_WyF@$*O0c1+Ur=5kSF6sbq%BWGS~1coIn$izXgctW(ld zV*sIkcp$q#N2h#&ZgKxPO{GIuttC8G6O{FZE?} z39Bz$bG1KR8arhS0yr{Dcg+0-1TYXxoy~(#*G4gBYRHV21n9^=nH9<)JX6J53$LRx zj4?kiy9WL#Eeq-QYv=2aIX&6V{MvuAydGRaZ(jfH?;$07!*R9%`*2wU5bxt&Y++_* zIr(UkT?__ufbvi8^@!u|4rba2GOLk1buCu>$)A(@d2BiTmWRA7!l$#J)OJNT9fjJg zp9|OATEMmU6^)ap!OsK1)|LDUXsxj=pr>+;`Sewx$m+{epHhvV=n+La&2wk=*AMxE z!<}=x_(9Eyx;OD^{xYg$c-E*nv*h9THvq`xcZ`#h5^b*k45JFDVbp6&KMWnxco+hg zYHKUakzwMZxBqdD&Xl7l2)Yk=Do-*=mzQU}LdtvRdp}j`k)hXEat6~yO^g`R2wxw1 zKZg3h!*^Z|`QCtryIBT@@g%58uh_Z%_MdW}LJk74Q?=%x%!xbdPtX7q{P@2vCQIX- zEYC?%?d*kkU)^{ml#d|<3w67^N9taBjTa^u7TcK%lfic=bDWKj@jRb+n2EFs#z9p(1++JNy4G)U6%gq4=e1B{GV>ij3PmcRxD73ROt>Fq!< zH!Tk{VtCrDT3xnL4Fz=>(X?+r3G19K3v~C+r}C`68<7)TxSZ-?6g_bKY&Tm#If_E1 z;_JmOMaHF(wu!&072e|KZI&=bS@p23Y|+pUj|8p-;7+9I|48@st*Y%WL&AJyQ!e?OaCOEu&9WCGu2rJ&>h$<%^$AS8r^r%r(Q^%kv zn?(Js48hV3Ar)hz@ED#Qae%g>Bd&DRlUg4cUJHH5k}ak55ZRraL#4agJ70{A%C^Rm zAwtB+?V9a-Hua{sQ|Z><`&NB;teEiAo7lNqIgY?>u5Eg_XXL4CO>kw7M|PSlW$We{ zLi&QF_mV$5UA;VOK0DWZZ$JyGnrUYno7h?- z8Uob(im`pl%vds6>wHhliW&lq3Pi}%ME&8-vfO@#6S9{(bCvJfx`+|E-il=l_{i-m}G zr_I-$L6PBk&nK*xiDllY?2L-_OvYru_wj?o)yvSrjgY1BU$SLCEZySDta|#v_pjgM zU%~zsPxD{#*pIbS+iY~8(+3Tu@k+i&pZ&m#!hbORPq^YflTmy^_xL{wPeSMPiT8@v zyKY3mxrC1T7j}F-?9VC&-j&)WW6}WnQ3MWQ6{DZI%0Us;-*aTH)|ZKMwRQU%8AUTC ze|=8g(flc&N=4Z|HD&#C6%lbMOFDr*4XQiwG_{MjH!6lJ^@>YqssDVMT)YhIv?3xhO}jw#yD}cJM3P+`CoBxGgKPzCm2F&lz|Kv>)e0eshAAT}iTG1X zmc1Ikh{DX@YuWPJ54$yr@qCQ1eu8nJc`;b_ZZR-pv^#)g<-xrAG;k2e%;fuR&Hc;`^f+CK`g@Fy_ ztPb}MD5ai`*9_@&UyW09O}6O3Xa;qC`uPGqIvLJ5*)dO-VLCi4RIEvH5SKlc7ZugDoscXIa>az&ZIvS^0v0#(K& z(9|^SIge*@j?fbM$@Ph^@PXqNRh<>K2M&9IA>ole!6aS3y|K^#Wse2AE>l>f$?Kc$ zuNM9xEB~F-mz&Zvi}Pxs7ok)9miNr^nG9s$%@#6urwL(lT3UvlyrX%j7QG}B0qjyo zX`VI5*4_xT%YRCxlCjQ=DyR3k)|*zNU&tN`z4`R&z44>c3PEC_Gt3J`gNaZlFVFnN z+h}{c=h-*+IgO>3%{R`r&EwmB(}vb|ZQgOs7jQ$KCx6ey_4zK@eRtsOEc1(BP5gh6 zxTj>my)}9eclLClY4oJA_gsIW>o=vfQxWwP&nV(*f!^PL8%{11&aY>x&KslXQGLEWOLEs0 zM9s=8=0988x^f{f*Ak;?Y&ruU$q+1XZ`qk-$5|hzgx3uQ~#ihWwk=QR!w3ef%+k2 z&b+-!{G!)DOgH{9R6qjQmgbQ6(McEyMqpNcM)^e*ZLfNPdGLt2KgmUY1;iF zhknivX*(^rD`NjR#oP9wYv^0Q>iX8(C3XXfv+k2{t>#yBmFBD^ibvq-EKTFDUYBvQ zO23s))GtUS$))?r!`(HY)qO7jte}gFLoc*z8s#gi>r<@SSH8H3O0m$%7Va5wdi&?Q z=DvxmUa>#qv|Km)+3#ITxDRQ=^Q+h^S&cPKE|tuK?FGw1B=CM>jM4hW(uzsjISRoX{6 z*f7T}J2$N6B!IN+;Xl(Qi7(WTXxQpNuPTU0_=)KJS6BVh(~X(azLH*DhjD)qy|p19 z&oZv3^Kf=*e3mrQB`6lnkb{!jDZ(${jORSaP8sn&R43%=8tdCdO@=PLKP#jAm-hET zOz1^~OhSW;Ps?$ogfhSq)RNzIYCiCRj^tPk;g1w3P`uCwtm%x16tR7mu}uAo-Qk%D zfHVg8XVJDtK8*_j(n{cstyGG_T&CP3|2n)1V<){(u!*aQ6(whz0?n5JjUBU6vD_G9rQZ7mnw9%vzuoX8Tzn0hH~GUp=b3D(t;I=dHJP?4aQycg!q0xC(ovy!%4HYH^I4foPHZ!D31M| zjdGoFkUej7GY9FOhOoT5JRS{Rl^%aV3olCd>c|h6whtbyVpUkxXAt?_R}H zmt|5+iWV5BM(uDlf>t#ZNjVt(lS{g&j|hQP$t;S@*530$S^W*flpTBD^co?mElO~7 z7|$k@ermmEL|it4E)*ztW%w8M_n|u+xl||$S~3GcCo8iW48PhckR(!NN>G2XOE4?c zT%C*(PvscpYnSKS(U;Q~Ezm?{e$D^0zRk#o$h~FVgUE|d=TJ)Y6$6s4Hj%8>(Gs<3 zvv=043nPV%KxlEP^9ri}dx}llH)=S5O;U(Vr$V9|bS;apBJudBNdk%gt;E>N zyWwcE0ICr?9g3bAYIAL}CESQ6y+E#hJZ;ob~*%F4FLmv zUYSyg(D|3rY1MM|<>fgUs@-r5hwEdHT*L4G1(2cmp!fW}cM&=SK$5U?@ka4>UE>$B z>bN9D`*6fSPBV^EC!O#WDNLsLTEHLV_4QM+dilj}GU0!-uh0h0F&S(OwKX-1%TfJ$ zhUTW_zw@@mP{|Obutn{gId9$`yd`M;d8D_{p-wT4yA73@68000_qoLMI3n@y?F+^I z8NJMuNYk4ie_XxVtK@%Y==YemIqAI#6zp)n$HsW>>ijPv+;LoDRP`*(T$6XCp$b)1*&iB%s?LXH=|m-rnUP!0GBIqqSv{ zl>`NF6J)IqruIV|v1C9nGLz)%82(To$=1|CfId*I&n;DB?SC?(iGY6!qfJoRLwwUA z!l?2~^co=m_eLDXK6|B~?tX1l$8LttNedx8oAj3^iF0)or7MpVp*@_VTev&Hr9_B ze+?9VU#zUQf#v4ZATl9#-mM^eexss!l5fZ%5*s*+b*4mx|Q-yWkv=k&A(CAF6x5!^kG$UQgF=R3kLyQ{5W==csA)eOg=o%DZ?7Lf2i z!PO2%uWT9Ck-_Isoyh*9kF{?8^0zZ}j%f_ImvY$wLh9}KIjHLTQ|a=yOs0gLxUgMO ze(|!xR_@@}DBJhE_^wNy#rwM*Ee*?K&+Sr8LX{ERSvPrg4ha#_cAR)qZ&CdHQ7*Co zn?OoAJoIRvg@Ib~l5y*(MkXoUX5GDti}ix)*mnDyMBOZl<#`_HZN&$9imFIY_!%=ps2s?jIQ5oYkQ z%Wr=A8G2**&-0xMhGqtOt*8N zTV35u`k`SCCz6wUhKzJ~2RyCA2A!UWXyMnlQ8HBUQXijPK>aRg{oQ@yEhvKq2c5b> z^_(k%XTRKl1C&JYjx#DhQykl}{VA;v5$RT8;~WP+Fby~bYBT*?SIlj;@8F8iUvdn1 zur1VO6ya~jKf~*4`fID-_@R`vx+qDmLvHn881z-$*se|wOX;OEJ!5P21ElZ)x8*KD zH>UUW1{>r4Q`ws{$&K9!@!?LYSrLM3%5|C+?avBmSb9$G_+?cMtWRoWY+V_>(Veap zbAeAeUQhJJXe;dv{JuY5mVpklu}K11^xN<1+`Ic4B3APj8T|?Q9_V~dPNQgOYU$?- zZh)eSFdM+Sn;BFGWFZ)Ynn}OaHHOX?Jr4?i6N@#l3$iGagvQ3_Zk*h$rK$hnTKlBO z%Tmw%yf>Qomsd#J!+gs~saCUiu61VLfi+>?!vNXKP>p}Um-o639%z(*YAWLXF804c z%qHb3*8P$%jkicQB{cjrgqG|}Z8)6HdotC$Y=1C*F!uI$Gs-|$yFix~Xt7G_Yqcfl z?{ze=n={~tQDU36Z(M~ps>e$oq9X9DEsxe!Gnbc)?#YJ%N2${07zQ}tH7+USP|GXr zNjs=`;R%L!!f*G`KfXkT*oc&y?x>lY>N0&QHrOlIfR5Ff@+E&GMRC4}d!_Xw(@7*V zlO&}GGO6cE+g&bMjm|<_CIa%@i;f+dwD~L*n*#->dD1(TXShRx2s#7J}qm` zq$;D9cDgP_^2GPf4nm{a{Q>R|$`S}A@<<0}@#YC+n8g2L)@>Z#t9Gi<>`$um{CKondN-b|=3)Mbx@cblUu z)OezOFe2cZgwAo0d_CWiKa^I_;3KwufA_||3q9Yk#0ML_(;B_3rc4;TSf$z9bb{CU z@|+dK*v9jAg7uCyYN55EENj&=jZ2Ld?l^Hsd-({|jgtc1|DD6O^rDcU*BW4zhvpS& zhOMBFt3jL+_RarpgMX~PqWk*wB-ydsjiL1HC_8x`wNY6V7M4KTT!1|nmfD!r&rCq^ zSDlX2-z;u3rM}z@PQSZPG2gk+mJno+6A+}2G;Q6c3feo$+X2;C=e+0fdK$h*^Ba(C zTNJFnk5$FRMV!SMM)d zzL*=L%vnCKFsueNX$tjz3M9f0qu(tdQMaH|o@`!VN)EqPgNfMs7lA0+LXX$b5){+# z$*OgIYQlVh;Q1;6%c1IeuT_U%S$s1$2W`JlJ2WYT1r^^%;X5C4-bb(f?iI4rkq(r3R$Rh6af~(zR z|33@R^c(fwm-eH`7{{SvXDiqcbL&wGP> zf!%c8v`fA+&^pS73Z1EuNw!WCOal*}odaE0*s|m~%{9@gqcjHbQ?6fAg+1b;ZD9Xk z=yAge!PNir*3(;l*0?A)xFT^kgtM`_|DChRjbU|)-*_V($dE{%CvjpDW_r| z*K%y3%+T8E8HSp;vJU@3X|L%RiB+Ba-}y@>CZlRED5Y=Sfo%8g>7Vb9%&`qgL>2W& zNeeeqT*Dm9-T*v_oN;3e*nBCgGKpCG0w(#KusY5Q`YRFiH9~@Gd4sQswbqXEbFHlC= zx(5=#Y^tAbqRf_RnsRQZ+0SKdEnsQ~d6^&wF{zuMYBd8bzFCyC|6`T4U1o;qagqH< zo5p%4R(^~z$1MIMk1(lj)X5(C%Ge$5iCV~PQTAx`k`9wbTu+S&ZG=FrPrqm4v%Ffi z+9GFjwVlQ0*#cBD_ClgAQ@4ZO!#h}FR1$E>t_V&(*;o)0>pw=Se=C$|(giPDO<#qw zynHDs{TQ8a@QS%HHvB&8+t|Xs8IFBMJS#oS<(iTCi^tbI$vQnGv3h_R~pn{E?SNwdtl;-$@d&mBAFwO-FH`Ta&m@IpnF3{@qvpA@zPo=PR_ z&GX{fQxNyzUQpUS4*9p;WbQ+8o$uZteR6{mJVQ9BZ2rXAa}i?$aIww)V%RoeUM4O@ zFTo7`Lk#ZA&=tPg=~RwewzXBo#+fI*wecz{$veBcMx@gwH17<=5Vg;wY8N4=!t11< zI&E)^bFzlye=jjR+WsuRryE;jW=2X%)*F>&-|Z%N8HTX(64G1IeIN7-O0F}4yE-2x zgVkj<&Q4Bt)VSCFl)HZVDo$;!fc&>)bn^66K6O0%)0a~9GB#HWQUq5g>tR+mx)8N8 z_+XgDK8?fQ3$byS$|^c_Jg{3s1|UDbO*UmpwIXl_de@w-SOP6Ko?ExUTM;^*}j7 z{ucMyzey#kW#6+{zH#}G`K|lz?Cgb;axT4EcOd7FF!}(3afsDim{X}L#)H=?@B{YI{b3)MPzsKL7&y9 zJgOH_Xq`k;b!N18typkMgbZWpjAr2SjY#f=(t?s~%8$O=UuoTQa$4e?tTttqgdwC= zE3&a`4P_w3NyQtM-2X*}u0#kN8nXWQG)-!|gb^H^?DJ;i7uz4sGWmXnZ@;-V+4Ho1 z-(VpIIo2$5%0SFvj3o(diYaHvPgR{5aMFzQBA7n(dyO9~=DE!{};I)W$p6 zvC)(^?R&TGbCS0{UeyBK;mb>Q`Va*zo`oJC3N}~OTEwtL*$#2!dYf$7y3z&az|qm# zsB_rk6nS~|4UXKD5r+f{k%*bN#A8ixENGYjFVmn9lNr)@T<#df|McPGD2G|*A8h630;cL@jwa>g+j<9f zP5R5CH&|!mg*eChQ*`UFZu!9@-;?EqPq32mOn(|e>yjP3l10CeHQor(Ap?l)|P=M74+2wm}9uC$QJg6efz-b!-yt@$pY=Ey8 zL2Oz_QFD;!s+gbggHhQZ|EyV8_81_X(ISZIQEC(9vG%Kqw|^hq;beWTKaR~ud3;m)ho25R_)y}49jy=A!-VqW)j&*KZwcD8Pl2dZwiH8R2^Go~0ZI$u z6#8(IPR}#QHM>au#ZB~W6}T6kH7PNYwE)5w2W@k+?7aAnP0@JUz+sB)!HAP5twPPa zV=WU97|YpLPW;;YXQ=Y*+Vdg!OgQl+Q>tK7WPREq<9qfKb!-9dhmppB1D ztjSWXV)?%wjZ5>?dO6h8*kn;;)Gpkgp2Kw6|K&5d=e6Y=8o+@a`33gbfA@-bK7+Q} z$0r5j_F9de3c=xcjBHa=+iIci6%0Za4B+_Wu})X}w;=BS)y#3W5px`Y$6XgmDJz)Y zc-I3-#4Fq>&(ys;@jhkiGfgU$5nEDKh{)4{NaMH1<71)eP^oW^R@yjt8&mZgRdIW zq@aR!>UPbO8@aIBZt?jSaNjkdOcr&ICpdO(eO+ONL#x^qFDS;QzN0v_zo-apVp4@^ zk?4%1$WDv|y=wWJ!+@^?=Wc?Q#kU>Ay=H`jf&g!}k4P*db2=*<>VHNmkhM}$7XOhW z>pnf6p;p8C+;<%_HYHtNKc#+KR)Zy_+C#Uk@ndmSSsvVKv!uGMD7qWbIHkP^Dk5Jh z4GnM*(S-MVI~w1>b#s%XCobyZ?Ee>gx&{F2{;RQrMY7zNjftBCZ2u(+kGpp{+dksc3HLL_j{#^QfI?Rn?) z1`jcM5qd03wD8-!Y#ogwt9ZCo68d8${LFgpdtOy(v0Z^ zp$Ac1f^k0lv?3^dl>amM@+C7qtr6F>?-&uB>X;O1VJ&A#rxoq zqM`N!zouO;C1A#+tt*E6vUG7w+@gyT{#X}=DoMmD#a4MiNqu9u-uouFlOF4L=s^+J z5!0LDZ?*nSmKBFDU<4Q{Db)@7Jzm&*lKpE{>u>wG|GqH-mJtLEVo%mq26M^QIXJ1y zG;QS-2oJub?_OLA84CDhR0ON>1Xvttm&BDAjFW6RRQN?oSu7q~U2Y>Ob@_^X;OUQ9 zX0UPE!ffLl1=@VOWAv-3ILYc<#C65!38jHsNk;Y*O2Jt>XRp7m__^_QSiv^|ny0B055UFYC>QCBHJ=U!u4moGLo ztT?Z2hT3RpnlCQ>w1_ zZ}onLru2j+DQ@#yctW<38aQ`DIUEJJfld&5{Rg@FashxVMz9dC_V)x;ZB5Dsh zSXbkey|IDq*yAg=i~Xh+7Z`~0cH8qvZ8e3)ydU%se%=#|*?FzNVZO<8WTk*hwL@^I z9y6RPP@hiKpkB_#n*rJI1|>{V7n(al8+QB2`|ZG015hH@b04kQ0nEb%1P50xyU~n> zS%%y_>0?zs`%be7u1pW6$zWMC<#xL z`hm$#R$CHNQ{~Nx@u4(F{8A0$b%WCl*|CHARW#|;8P>8xBsS0g1P+TJm$*?jr4?ZS zf&XFoUpVsk_6FVluA=tqZKRYmrXr&vWb%(3ACK1eiRC2+Y$ab~p^%%-wNkZk)MXxV4YnkGWR z!$ydy4Y+G4661^*{G8X7*vGeWZ@M+xraP zl{e=zb^PJyluu6`V{n*!kelG-$;RyDT@@5iQYWi@D6xvtKO%u#T>2^IlKoOIGs)yD zDKH^&`&Ld?m^Zdkw@>#GKW5&?xS)tOFU3oFd?nim&LFU-Ng*L8e6y|hizYv8O+z0L zd&XTO+Kd6V+N6rNPkSUH!GaObSHPNLTxC9RlNlaw57@ONuM5IJi=V#QlfnS*UlDOT z9GA3F5HE3uOdkgs^RsB+7-QF;|2~rD<^b7Se@%`8o~)5SntoUXwYu8;RBh{Xc;-r! z)}CeA%oD|n#{ca9Li_&e{}LcujN!|_^64Qh&x<>Y+qH8$Kdjo0gXhjBMYA`fhJiSLv)^Z{vWuFjpopuuyHuV|C5dUBzx4(Gs3qvm@YRE(s-hFGuW&-YC`@|ZMwq+M5sH^rRo;)FiW%*A94(k zSj%y3^JwIfoPgU3C}38SWY`##LrJb9+3y=0oxwgk6B`-CQwj>R-0ZSb0GQ}>l@{sC zjc_4)El6xA?0)0>G#Qx6O(wY zMHT;#rn3yHv+db6#T|;fySqz)7I$}wyBBwd0*m7A#oeJ;i@UqK6j`{-zWco2p5Y%X zW*9QLlJh*0L>p~3MK5>}Cb6;6$oGBACe+pCV;4~be-pl3nA&HbX~SASSxuo5ocEY3t9=l^m>4i)O_MD?#c?$n}-Kx4zD7%0;UgF%&mn z#xP4H3(@87KNQRUG=H*5vKL(`D@luGKW58as4ERG8+cT!pM4xQI`P8Snipy7pjhW6 zA;^2Gub^ie?%UNjCm)}`Z4Jup8X4vc!IINRkU^TAVl!w)X0ZBeiQO<0Rzn7JeoMuY zWKbg?MGQUgI#9*7v1wdA8&AY3pP(||Lqz@*s|9lo9TUB%Cc=mhHWzdcUYV%htNRXy zSq_BuDt{K+N#1C9eg))+vJI8DyWvE$S?BYO_LKoTii>uC!89`-*5=7uYx0#8yDZgP zy?krCV{4j^ocz8|4EyD=_N!U^oYH!FDS8e%r1mv$^nJg7LkHaCl58*4G4g>ziV;L^ zrbI+8s(Gh>D0FR)=);RKStN{8dEP|zCXL+oInI|WbSdw=J-bV8Z2i~OD9lRJFb~ik zc%HYpE;XxZg(#smxKHXyo4M2=aeG$jl8f^9{9aDwdwF=bcwc5c31KzkUxA3^nD-EJu>MWqRjz<;+7 zDYHY9+@U=lW(%xA3rEeUJ|877a~>YTu|)@!U?|O?208jNXCJIlTyEz13oUDgN?GAL z=xhC6hQI$3gHu^OrIV03C84cZGy?iDo=W?C z-KO-kF-{?#(M!${BH`)Dr9Pq*je8_sl&Y>RnwRGqyOLg6Ov&;*UA$4sZjO6~j!vX% z>Azg?(3tfBVKPL=d76^DobIsH)hLA?c_KLo+xVln9xGZDkKF3BZcRj}L z!gSdM=i8diASmXxkEA1M;RbZ0p(tFYw6_2~bENhELev|1lmiG+62BYthK4T?vaXyz zU8)+ZmoJgdPz)=Q(zEgQuHs2AcUsv1S}N%#f1*gvyr=|H5C%TlEMF6n)wd^DOXZsa!V8(2JZ<`dM~Jk5oqG z1h)^N?UQ9lVr#7_T(dKFAW-bZ+7_9{s)dGt!VH_Zs8c996>40l)z#1)e#@D-)$%_ zDO_N>=-C%^LXr&uU!}$%OEy`1od8r>s$*e)?SPBg5ihXk zz81(BhoGmKStr1)^(|Z8|6ZqJSsy=ZhqcQ!GTk@5rPGUYb+IKrGM&-pT{?%CL!;X! z=*vM6>9@)9FXA5f1mP14O;uU#LIeAMWQYchZ5Whh&bjv4> z^iT6iPR;#hTOwM(g`#c-hvSmVM{)GHOrV?up!-mhGRRMD`n})rff(k&KwyLv` z6)NRWmTJk@yd3fE~1`KTvcJ~bx zVXDi9nWxaE%Ln_MFHanbJOfRR2kA}_oI7wEo)c(t_9gx~JOvN@5&n}I21ZlZiQq3z z`}L1gYa1IAs$ZJFnXpiyi!r@cpD~5~bx_(fUqGt{3nWAp=3ASY$Ykuq?wPQ|9u_Z& zdM59hnwl|1gUm40kh;&Laf9`l2AYd$nz^~z4Vhf5Ey5FbP3KN^2$+xzqK&NtkRDl4 z$fpjG8e9z#s>5F5YitSnbz@0yZxc)TxYk?0dkS>HGs3V5CLbOp(jJM5{65eJDV=YO z|FXl8a5fT)qU{|h)<=c&bg+uF8K)6d`>9OV;6KP9KdLOwx(>C?m3uvkG4J)-!aavT zES4QPtrEzboUwA*DApnzO-gh{bBzp1=U=<&;|PK*FIC?ZcTpg4$+gu+{R&4HEt1U6oF*8WbBiXoq8)OG4$Eis(LBF?+s!-uofEcI*p!P-|Njbi_3ZRoiW z8cLVbmikM1fsmtV=-XmvIq zllx<3=W7Unn$g23inUendl90j?>UjEcNy;J)Z=~&xVVD5y>taz#9rstvAh0OPZ=tp z`|L*G}qE)=P-X+c5@!1sYDU2iD8KzZo zdbps5g{4VLr)To6)JysJrw|A)7{uARVGE3ZZ9d=!c<2m8Fdgm^%Pj$_QS%nQ2t!yiv{Q~Yd!3SER?yN0q_2jbd`2RIP z1V|D*AN4M73;i%H`FT8 z7}cPuR%Gw!PW|a{!3Z2&ZmM%mNBNH2!H0p~fRTqj>*nuw?=YdDc-7>3NT+2>={R<5g^z=lWlgBuggqu+Z*+lEF4Rv z_IPHRLg$wf=H>)ng#TtS*Ym0_ZpO+=|nd15N%%og7D`u?E^&2t{ zpW!_3uCT)ofI_XvP?3l<&r$=kmwpe!V%>&gFzI1giDIprtrj$vQ5axlOyrX8%$50P zJ(BteuaBRucc!Rw;9#Rqt)(3llK#pB3%eyPw^4}0hewn=-dJ{xOif|U&cclBGk|uP zQu5Iud#7Zm%Wy=fcpd{CsAENbobc+rGvqr0Cf zES-r;HAb@@E*Et?dOQ0P(ie*f)|^X|kj4~|**)*f6-gg>{Af{`8U%IlD&*BH&sH=y z?z{B7Cfgk?W{VXG2nw>`0I43ZsphA^dJQK?s!dIn1ugRH+-M`XNjv2~4KoOBkQVn= zir((tHXV0bFWSCvx9Y{7%WRY(h^@uUqC4gZr*Dm%LW|<#ePzonA;&4CCmGZa(rV4O zjxN7Yh>g|H03h-?EK3?GnG=l!i|=U;##WGOnCkXNiu1`^-b18+k#aNWaJ=6Bl08Z1 z+!Sl7rt^UUhqv)T@9X4GfK%aPNlUui9J|nWD{7_n#4Itpw6-+lDj|Wqe?4cz1Jz0S zt(t<5X#W4R0M_|s!o1xOWM!N%pW?-E)6b$>P)0B`SD3V}M$`{8p!t{}6irda!DbwLcSo=0N1Sk{f^(){p#hMK!PS1aex5x!Rr%3ioI)b*yr9k6})#xQKOr@<|2BKPW2q0xBHJ8 zVgDqTqJcBs>h1GRTNxUYXgD;2#22A^;#|w@@)&b3w$RCj_&}cKhxRXvM-HP`r}=X7 z0B(lLE2MQ{Y z&|q@V<(DO4F0TGH{V3TYfm}XthEtz2kqvjINnOv;5i($;9>hzbUdB3h{eFA3OwSl8 zw02W=$ngGI9|NfTU*XAXnX)~{_AUqGlzQ3+{V!>wy)v^X zIXOc9p-$w~av6iUsA_v@TTf&w+pJ?O+uwPnSfg52Ym@4V`eBaq(GI_KpNgXP3rJj$WMj2TFr|y zR71HMT1n9)5TYG{;^tC2;j^tHRPg1tBKO5lAbH_4IOU#31O><%E*PfS3#}GGU>48| zsRFBc!$ozT_ks2WNp*XdljnFSzs|_#!`J3;PG#7^HrR_pV^2Ab;eldFhohsfa&nxI zf8@*hhHi)sSz|6{h3xgmEis*fxz2C4cd#p#*E0IEIC@1y2e0?&|p}*=3@sTOn+0D&d&tl*$^D`o<=G0 zw-ku9iPXm{4^-#VHT0CS>*)wblh<+@c{MaYJJAyyQ6B=G95};mVHn}X`eVL*n^;`X zy;_4k210cA{ryIaHNnv@NvuWE*Vo;b=>YFgMy&ye$U!FmYg0$d!2^xHO1k6S9?s%8|F;Q5 z5&)Di>?J?;+cF_bl;o4kfQwW>q~Hox_hs&pFr9_dwoFfsXmrud!yg6}$^h5+w=I?b z<(0MW-SKY$3w=alD7 z&X;;W;~#@YU)s%`6f9H<7>sH(!j0D9zbspcEN(Ze7#|Qor!tpXWk?EGOvlUC6;>q+ z6Q6PQneH)a6kmN|xm9vHvLagb!Fw*IDo-hhm(Cbif&MJz~%kXtEi^}#+2-88y5 zFshuYMfS@p;?s}&40{>U3mV=VwJ#BM=NEDUC(KAe0pj|}MqH)ILkvpJ-EWNIDJ7@B z#Ij%JYJ7tSa+7sCrD@wi5{{eD?KuSK>dZB7f z>spjvXH6$qTt9b(u5R!Vix9~?fpum@`Q-TYRz_mLvsI#Gv>*5W;0zS4;_w2it}job z{(;qZL>V~DY)rwF28GI%7cFs}(q;PD?U*&EaV5M87V%(_xM1x3Z1x#*uEXZt@R3BK4+)E7D-n;&2wiqFzNe=5SI3(^k!b!-q^r$tfI${Bknx|RWmH?bn%`=n=Rnpq77U&G8s*9? zbI=o`&}w9qb`!Oq=+(m7N<)P>{m5!1vV~fm?YQm8+NYPJul9q>WDf(Skt#tR$I{cw zEG>F=){Hs2*^Hx6c%(;y-2o3UpR^aJeit2E16r-Koo`H;OZVA4+j`t`v@1o)BDgVn>(WZyl znd<&7*nld;=}t&7l0639v{tr?SsawUQKwOvXBX`5i|*v;KiOn6e~_t^wRIfQ$%ncI z5WmlN_EaA^KlXH^l#cW}GJRqPjdp=8S9e=ZXq3rCHs1q$FEDy{8?X?~f&J$+fVWyl z(RAfD2t55Ixgz7dU6+vaHYnuK_rMy+h)s7)g|=_%pU(Y(KfpOUI#r6#tvZLSp}jDk z^=%dH+Lp8{H-cnoRBxjrThL*>hq%RI`+T+eYRixJ;>}}Y`a2)?-@JPIMnNxDRk%Ful6(&F9N43 znkBP9|7TXLx_!Dwm1;qQH#RvHFJH@(No7pXg@aR%U^m0HoHcrRFrnz)(s*$ILKSKB z;smeP2F<4AckjZ}@wL)~>Fhr4B$ ztuRjoE1rKdmeQiBCr8^5wx4pAo5ed+#1LHVfjEZt;56*|xsOZz+BAMEFKDgb?r5}D z%vCVhVq$$&N=?eef&4m*aq+802bRt}XE#G>-D`A#Mw|YuD`3@Csh+37GdEG=^bbY` zWyHwFTOLAC(a9cwl5rg@txr!(EZ`s;m=-91WiTqZAHj=2y>ro@;$vZZ}>P zSfbS2&_3j&LOri}*>*&!$+31?ftz^S!j^bG=;<|Gr-D5tj+Iy}aIxmiW*w@;TGw91 zE1}od_j*$w$p?frazfb#6JmYPClIM)L_NQ{D8mhuT)k|k=2+Nq#O0s(KIC@-^i+6V z&+w@%hL884?6z7?&!HD)v)?EVE=_T?@7ZOc`~;RWQ3M>x(s(!uao?`RjogEPshwRo z>ubM~=Vd=qbl#z9w+k!pnW5HwYMhD8Pc?RT2ZJwF7MKn4A~zQz8}Ac(*486TALf5m z$4Bbz)yoL1xY#XE4X?M@@1~xw_5#68p7@=UTaCS9d)RkuxL{Y_ak3%ikYl4mVee&jvgp)$jK(nZ6$K zJ&pl8Tmk%r*8jzg2F|BUV>DW6JnUx&F){zf^M>BTspZD_pr}7-%X)KEb94Aqv-N-d zol1v$A?lw)OPL-{A6HF|bX=Fnt=GzMIeHeVL8s;Vp_h=$AbW?VLYkm32eN8}*v9lc z`gm$n0{tA4!}JQMF%5=qB|uKL{c=ZFTs)mD>#S!<%dNLNwucqss+L7WN{-ubBwG|o z2>T125po;&kqqhDhPL!hdwaW)eXGcR!+6LwG^TJBjbDYr>3y)M$f&B-^J(d0Y79xs zwXWRZWvoGl#-9o(%UH2vrZ2P@yi^yt~Y>$=?3GpIG!57grLl)amQ<{ecd{3j;}ELum$I6I+`*ejqrw8&>axW z>VN4B3s(XG0Dmt7qJD%Y-YXQ!6epzOQ!`21)x7rm`7LMr)qbm1L$I`H^KP+b6p}u+ zP^-Kiu3%z8&%sWgrLMM2z^hw&7%S)>p*UsGIzA)bkC#Hb+=<4OF4=8twveF#mQw;6 z@ilz!RMenCj^7=ZpWiOT9D|!}(s@-2x}1f-%^?f!Azr6%0;T8!$8-0cR2KgQ@l|5) zQqxMpC4GGDQkNfg?!&{Y@7p!_0Q`EDx!hoh(x%TqF#Dg6W+=#UTld9;}q zDb;1|ntD6E?Qa4?hf`U@B@re9e4-BVQlLlxGB30dYc!iI{7(26(}JLd&%ya^ zGKP30CVaUi-045r|49!ky6|E>Y)e1JjgN3ri%X6&Gq;b9=*(9w{CMO>xQsLc{nisd z<_`Pd?np*i9nRXU=k*`*lSMdnMEi2Jz==VNNpr6+dy=;*0y2NJozy*w@f!t77x zWD_4-P9H%*oy1Yqa?Nx)EPT9-or`II#Vq_jce@0HX!W(vxk}HiAAW}WZrf8c=!^Snr4TKtG?IU0lY}mN=tunfX@0<5WOKv6G`~64 zS(7aXhPnsYHj2V0z@>O7;Ca-tO^7e57~$^heA~cr*-(j&aOxahrQ07VtG*vuVFqM= zrX$hy+jckiW`2F3!~)2o&r`|U?|qhHERb0c+N)4%Qf!iYdrne>@nNZ239w)FynvGu(=`=^?7HL3zjc`t5( zZq+nE7n*JgjvaGq$&~DHaZyF}#|+U>f2Z?Lxt{O}Ycg>4+!@9MN@?-mYkO?Mg6CxG zb3w)3-g(Q_8beBPoPhde=zlut`OmWmOU=z=6As_iPaL++$g5)?U)^ZVRC?c#@cqlX zG4Xm2HXF~tQ7zMMw8HsMM-V`MB}pazE+|ILV&vpeAj%8j@f@=2g_c5Fbpy#+L$D|p z)d(RSw&!~V2cC&4IDgE_Kc*U|vL9wrKG=^pHYCB%XD2CPOr~fKj;Kcujxn$AWFKrE zkd#F9Vi_L;4zU6CYdUv2GX7{eZ55QET-?G*XG*JaEp_VdanOf>?_U5VWjY99!4Ak! zNhy#J3Ntk77aBMmbd9hEOWi-xiQIXLTI3w$701!Csi0;g>}2MruFC zBTh-obGFXcvHWom%b|bN?*Y4;0+fZzPCuxV$wGG=q@F6@b#1aE(9Pyid7}RI#AZkP zL!3Lg`r*@9wsZra;R$A%YxxigFEfSNRH61plz2W~U;_k856;w&DARsIOxXNye=wRpZb${>QSKcXRyr$?WLF2^Qkn==IzxR*NnG;1R}Pw zKi1cA4ZTU2`?(4WrlAtG^=Od_ikInAI^e%F+;8?QxY<{lf!b&G3LfT^e$*S@={sRf zq9>oJ8o+N&@pAQV0;$ubNLEP-v-`CSZkUIr5aG>DGGF;%D1Ov;zb2@UisDDqg4&P*9CNutfV>YukH6z}oyAKFfQiB7nY{KIi^5M;& zA$Pfp#Xo*<`opS=iJ-gVoO22;(XLV%NlnilX>bDz$g3GyRBUZb*th4!k@9`(uHFW7 zgCONgKYf>-KZENrpBmDt8+Dngypq-u`-rc7cV4gDE;Q8dX9T#<*S0;6?46NOcXz z;^O$Ie(g-#uS!yc6$JHI4A=vRFtFhzeBO3}NLmAID6!uJ6ovflBV_SxkwwF*KiLP7 zGbYyh?=gI7h4-X+h^6#*JMI*@*Dlfpmg}@4$>K#%K79V&y48}0$;AR&mj0SFuK2rk z7}2nWdeV2iM8s_H_9WoZBuw=2?}rI}0+_r`{&8B-Z-iw(v0LS!bALHO=9E!2;^UvaWTc%m_{?ptRNTQ8z z^kE+9pGYcnz4*==LGtVh%Sw{3%fQ6Y9fsa#LPN;ge0>?WIryLWlpNp$x7t!ekr*W< zSon`UrQ0BLRzNsU|KgqO-~e$hO#{vl2hle0B4iLDeH1#D{J_dphZX7*xBsB%1cT5^ zK{z^<66xw}lk}=pqgtxDoHiP-g8&bQtN^I}mU?QKkO1j4kv=TLqNq^UoF6pcNhG%@ zVXyL@{=$cVz@%QslWE?lyfrlh58ws9PKdoTI!#5c&cPoWH4I_x%^+s)pv$XX z%b}CpKM4Y(a>jLP!%q>=dDf+gV17hA=uzxHhDwgYTdkl&fisBO9g(i8BOeDO%=FF> zW_qc4&=0c7ua1H$LBn}{UjEVK73J%XFMQP}Nc+ukf)LH5Rs&Z3$k>2$xzUaYInu=# zvMjw)W@Gt-bPYvyWyD><>bw6@W$k#SnJ@6FL5JhPvPAf*N!_>f`{;Oyzxu^b{Y8l?9&kH;d$D!!z-@Ou0sv2uHWAWuGk30eIpE6a^=_bNxd%5QIqvc&d zW?4MrQq#zeVkyi+m!%R~?o+JC#W4VphID_U1jy;nyKetUn}lpP?YJ1G^;}{_Hamx{ zcB)({4Bf=lWj*VI&Ig-G&KV0&_DwSsW3CMnS5d*CZ>K?`u5Qh9`P{M`Z3pm5PU$@=O2Hy zu#1c9%Ie||!^4kqvwNMtwmJqkpG&U%%1ohq?U13jC)KW{Dl0=e@YLuO+tQULOU2D9 z#fTmbOgpfa2yMk>bwW&ZQY(_wq8>)l3veKH5Y>irNv>K<)GV%b?|lz5T`I+X;CXXL zHOBbv?Lkm_o(b`(gh3DG5iw!JB@`sV#D7G3oZuK>f!bZ3UNg!&OuTt7tY~ zM=3#rWn|8MjKT&OmV1SZt8J0+0m~^afK{flz_l$Nk%%RI+sF-EVyGqo4jJ=Z6tm05Sn2j~>8gy$inNsm0l7iN39 z88tEobNEN=Tzlc6TO5rh1@9bs%Mpk0zkd1Kk~}b9k@&Kl`x^Q7<{jK3&oD9gzU^1} z*QRHRGCDTb1IRW8XR&Kdj*K21)<|lzUe(AkDpdxARplC)NVwsTZ)l(d)+C*#@^pC` z5}lubY@_4~qKCe0?SJSaniTeM*k~RC=7>jDgdNG_tv_46`PJ&uvkQt06%~peggL$< zO#1D1yBrV24J*Z(ta68<127=Kpz@$r_XF&*t_)F`*YLYIPRcu7Ef z5<|lNp{>0CD?bYv^r&++RH^W7lKUwrfLH&DCa4iR@C)pf{Tu>}`LMY8J+_(Nb|;P~ zcefF#`wu9yRk$ZlTuHl^*CdTRrXvDl{)=lyBT+f@?ZC8hRY5I%qHpR5=(r<44`xwS z8ZE(1faqvL5)QU@ETR8sS)gs^%Q6|Z!EWgJh~X!prd_PaU~H@_AZ{h+zC?yEXKt^( z&>Vbf^3t&vVyE!JR0EGUX%?-*!AM?{AzFGGaw@3KBkkV?`+@`0xrm*l6&TpO=iyim zBOuC%ts_`>8L{o31E%<#4W)ksEZ*t%4oq*u$e>wjtILiP^2NMNtJ|?Ooq9ILCHiWP zL@&16GWKRoK9bC^>AM5nsYN@*9ow>5pWW`^*jL;16wxqnWk#>^Fz}BBy*pH5=TC>r zYvLcR>3DblwUS9udqogzAJzIrNsH5Cy*asxu)WpOI<#(hnc9CFxJ-7KBRD7r$660C zNwKlkJI1TDidOLD3P#dW-o^$ zumQR&(sq#%+6o@SBFm0RVWgH{n0+AVkC?oIsT+;N8e5NJ7;bQ=bv=D*A!G8+#Sxuf zLj!P_vrsU*m@-|zQPOK%o~%_QGsO)B1yGcM3|P9t!wKZ{{09F;hEViH&P>w#{EzFYIb0uhNgws$V&f7rN9!DIUYS6i~P{<`tvd+ zQKM6HH%e$=+9gV-a-6%ip(@#qX~3%Mw^`TkenwLwkr}DY3oPK<(%Mue;oo+)V5&2A z-0-!VvCYp8IhlR`@>d$s5a4S5e-^+!%?Z*_OXsd~Zs#*>HTRy)dmaq51}U-+%Hp;D zk61ayPom0aeV5Of=x!Ci7InuD0s>CR;6VC++=-af4hz9uQJKviHA5T7xph`W?{~Jn z!6!UZm-EHH7gawQW!EsGJ!?z9wIB5Trt#&(o6 zHpv$(QIv-~TdG7Ht?C%(hl_nLN2g5PqP`3R4-7dAoZLx}fvJN@T2~?*-^0=S;9JeB z)C3VQSlOEj+^>xe=2gHnYmm7+TkY$97&qFv&J92V`+%$LHr8YWh#&p_8)yH#?TxxF z=oqo1u*5qli<7(t$~|Ug*>6E|vU1R9h0hsU&Ox|>Ofpo@6C6#n7$J)~Xk!`Fd3q14 zHF!Ieqq$=F(prr$W09pVB&F}l$1gG#-P_xT5(2a&H;8^c3I-*#iTOaR_C4?ckP{z2 z`=4KSDb?!0^0llisZd|$BRoP^etcW_(be#k3m)+rf zq%_Z3CeR(0RJSV?h|GYxe&?Tm3MepbA%o4Wgn17sjSn$H1tAA3zZT8&0FgzOw*LTu&P(RzW8R*8W(Y%1 zZX9z#WMn}}Nkuk!a?J#Jz6sv2f59$hkp6YiN#LU7rd;7-ZW=S;vLy*;a@`X1QrfiVA())QSm&I`X-J`ok*XdheL+aqej@CUVKPMWapsVkd z#Pd+`?xF##*n((%Kt&Ehxr_QOv#2M?ObD6|tHSqqm6cOiiweKt0T}jM4e=+V7Flzf}I`Hqxa;_yBFtTBkR^Gjw#c9w|qIGf~fYY1K(e!+}m z5vHeo)_NsT1`u+#cK~*YmR4tT>XRJBWyTde+R8!=&~XEkp;v`({uU$V4Eqe2P_uS3 zE9i%Ee6HMC86gKlVv)>2{GMCigDPT|u4_B2OqDe1B1Y7GqWN&6otk2V4J6dXIAQQi zrtje9e&EcBv^(V50?o-UzZP@l^*;efox4zH%1N<>5MJf?2nc6fO6#q-RiV(HFx11> zf~kwB;-L_7s4kh%;QMvAZ5UVM)VvNSb=c3zxBC#3*sa>i2R!iga0$sWOH@9ir{4cq zmc}C0Q#;%30g(HOs*J^``M?#-6D$q?x1Vv>sZzjF4!{&GbRG#0&Y^ar%R8dJrb_H#FI0AFfh!i8h_KY)-; zKw?p#Zlb^=7h*o&f)kOYu6O-@ zK>BBGV;O(Sl+JA*2_`(lRz9V#^ixbEW6V!8=>Dm0fvehZ3cF}wy$s<4AstwK_%XS9 z@H&@=bpN-@l9%dIkM5#DU6~qxPMI;=9%ik9+I;(VA|=~L#=r{{w5M&1RpswL&9UDy z=G~_fBL~^!(Z)1f?$W`qvV{Ac%>d=5MYC*9?3^)9>2YYT{@nCvt|gY2X2;ITW@i9| zDllVxFoI2k^o0dQ-sR!~8Q7sncq2GS52LM zEC~)=fRmuT0==~`MgfziYD9S$-|_=tV<64RJH=ODNPrUEJq&+1 zSDH|+nm@9(-!nzqP+YtE)L9ON4aXsnHr;%ghliK8#c1S};@h>+yijAkyWO(>S&b!l zs~bMwnn0nAi}zH!SD}4z+Q&S!qBk+xa2o_=YT6+5_V97XIT|P{ffWoN;ejc5Ep~uA zQZ2g-Atfr*tjJ`Zh`9qCKp4fBhm)}w)US)>*M7|o9xf+Ugbxoj8Usb3`$7?49pY$P57NW8mj6M6?MkpgJxsjGP!48IJ}niSqQ=%AkV1tD2~NubW7$WqWpV<7}V!@D>k z!!CY>b-ne|)bhv%o1c@qja5{RX>pS^K}Udbr`d()HNZnB8va+An?_rYSRoWX*O-+H z&7LmS@#7YWdX^Sx$h{}3skd0$YHdWUl~u0Q_5J;43?5?>^&Vq;nYt333rq_phAVbg zr;>@T$vidS##Uu}S7%z2E}W0_@S$WkeM_|)utL?e*2T2YE#qSsdovhF?d?`o%S+4K zDH0KBL;J8e1oGTXNF>y&vXd(Xsa#X$#2nI)+>KZT1o@hJr4UNT54*t#}q-7Bb3kCH09$j#$2+UvbDcqY*KWQm+~tK;?wg=iw$G)L9so>?WC7}jKO=xH5)I5E+n=BP3Rx91`f1V)Kr z9)2RS{6luuWp6(VgBMol7kR>0!c1Oawgk6fQDPRd#PT&;pt&R|@hsi)09#tF!>995 zaaCvArkjV3k;qZ?SK(9d9cEqy>gdFch?R5{`avxq{>Ccj@r5jo2r4J zC>6kii(OH*`t@Ie;HEU%R7Fx^(*XiJk!uT4HC%S6@6_lYi*o8IAKJY zuy0wiqt}%!y!k53WioCmV%b;OXnd9>%h7KalOxSN>xGF>FcwVNhc5ewlU z?1{e4>^WWa@If#Ki|z-sitvLe6rK!B6K18YK-aDtOs4&u>Z0k33ue=bzw^@ zBb6H7YUfK(pjVPQ4z#J%R&bX7)DNJVz&MaPYXvJ4Ao`UBZP=A~XO;ZnV%_hI`LJwf z<3jii3toKElp}Zd;F$hgur@c-ve=rjU$SaqWr2mYyM7Fbl@+5bEy{P1rvE;ism87y zubTHgP%b+=1#7+$UM0qI&{Sm9J6|;?k%!Ehg(CJ>z$#uQZ0>AAL2+5?EY=?1li~`v z*Pd3`?#y`3?dYRv$s>3%x3jP2bz^ppz&;e6Xie+DG2pK;>RBdH#boPL+aAf+V*)n zh+SCNSOF{h3yzNdp|2`@@NY|xmf^*&JDUL7@T6cD{z>6`qFu+gShVZt_lJnbDAE92 zk2PmLy~zIy%2ibGbSSZ`>bSk)!c!CrzM~);j`EitqpVO?j}^0O$EL4i31LvmtqG>o z*y~Y5e15g|f-NY%w}uy?Kk*c6TaG~P34Fhx?58MV+bfC% z<_Xn3{d_Wa5p0v*gl$Tju(doWbM)<nbCYibIUOl&<;F(Xjf_*Gghq9|ZJa7)>@)G;v9+{p=^QK2$1RvS&H z2|oXv7G%G)A>`f+9#tp^!zq{vhyV6dP;a2<6M_$gG;We?gCu*E^4OxhIiLt??rLVP zz62Xw4BU{rdqtUgDP8GzK|!Xo*(FVOGqaZ=$=^;?F?W~zagX~$jIg5eR``h<^fW`T z6f?!T@X6NJWkw~6+u#nvMn2L~Z>w=xCavpERa(|~XnL5#1H3uN+`yR~+Hxyko7vuR zu|vU{qer3oJxctO2=128#&44nq^O_YCBBNg!en)`^#!UrPfigY3quh(1O$;Cn+Xo`^((7*+lh<+ll)usD>9_(oWHk zt<7GxYW)${lgrmNufOoDT>_I=D|bx}`COKhhUT^v1D*ForZx;v+d5{K*^z8F%iRIr z4|Ce(i&QC7uf6u-S08D+A7uQuaYY8;M4V`)Kw}m%EDb~d^6CR9Oq4BXp*OLDifh(e z`2#Ak6}^aQk`cSF_K z3GOK(Z;^lj7ESNTI1Q~Difw#3P6U=Mp#@=mVkGm}zH z>Si9Lbjb^PLK^ctLf+^O$7ft%Y4~=*gew(_~lCX*y+l#vJWx=T)Bw5hC|-R+|eg?|!RJIByOZWMjV1kG$RWOAc7+!?UE12n%-L+@jIpf(;h5AW0;WK1S3jP|&;uR@_wjG_%W48K+){Dbx zvFgZqgp|YNqxGJ!q*40a_yq5|tFv#@Bs|f(yzkj=OP2qf+DkYG=4r{!B(#WhMg4@m zH%egq3&tw<@+b8ezmF5eJS~q!C0^K2=*J*z*-BX8Hsw8-eICX z=Sc8ykgb|CE^LcnJJS>~E^IzmfsblFm#!Ne=X}rx!^}{#WQ*VhABbyC11^&Bslrd! z1H`%HDDWPQf?n}!GIfv7B&Dv6uH?%~E7g;!BiOja8_6%{)4qVFoND0TY7s^+X5OH4 zi*g)8%TIHLmdOfoK|j95&3i%IZB%@@zb+7re1bIik$oxsleR~JaMzy4*xG*Wj;V7DNW|`LeB37F{drc&`K}4OaY35C^AsqGJ8FaeT*zU$$R})E8`Uy2?2$`c{&AFlyuz&!=fsW!+*5JP0|zuc_Yma7BmX zDH}Wu7x;l1VijRBam{^I?Cr6}_q&#%4jH`f#w93`h`*jz&+7kDI_tr5qIxjxpQJK^ zGo=X(&WWE2h{%j35np3kVe@>xZ<6SP!?1eMrQJV>U%9R*C&XoJ(Iy(pQbuKR%UFzn z{oD#+m1JpxA!i>cf~NM5|L4pj?TmLex~vJ5vW zw3%XmH9Z=EEja-1hNcM{=ADjD+%KP>RLEkH4-}F^w7q@QzOUN!qv@H9TG}JBmG-zS z&tK4wA>y>xOwC~c7sEMJXVXX>#JlI8zsA3`3)7WVoaw~7s~E;CR_i(OW~AOOg|HMG zRb-m8PiXafsoM8KN;2d*hPPwkJePNxj<|TD-P}fv=1gS$sgsDTnJ2r4x zwzkEhX;l+&DyI?qhb!Vc@mt-3FSghnC$j}7^Tm5FHasqItDxZ{#v%#Ohui9~0Z+Tt zh)W8F2xoS?0gZ$|*W@O#1RZ>SEC(xkZ^CLO0~?|8bwG046u68%}}QaHiCOFYjo_GHUjRQBiAd zuMX%2x!B?F5&zrB8HNWGBEma^%zoeXQcDGPbw5qB4Nrj5IpMsv5$h$mHr&A!y z%jI;d!=2u=lxc5Yp7HX3LY=fnVRs$Ue`RdOi1wu_SBs~Q*fSFoZ=w2LN0g%T3*L86 zV2OzX2L&$p@xkpB+Tg^tt`viffP|=1|09U@Zm7Syt98)V%Z&7gc~-+;*gVF4w~{BV zTX2WH)Fsm-L#zv#yifA`D4W)Y6D#6(yd2ad%~w0_$h)==7HObyM9X64%3T2 zf(a%TE2+DNxpP(%bB1!z6yktro?-PPv3Oa~8gux%YsCN=x0y}R5|eI>F8r1xqrzV= zp7&BfhE*&^uFygNV%Y+7O7Du7S?$1AVF+TD6BQt0IR+n_YgsS*+jY72WH*8t?olQ$ zeJAz>%Tuq($i6Xv?C5#J=E)$f;XBBTcWh3lD5qeQ5;4UX*4)RJllHCIl?qSXE`x1q z^2Rg=uN6CU$*XJ+6j`M@>+Yer!KJmlE*h+U`6<1ah2+Z{_S8i#%JIhY;$rehs+=F& zdGM6jag~|xR>BTA^Bf(W0nS;rc^&=pgMfaa56cC@q|w^?{|MHo7H(cQ~plNy!BVdz4>O<+{=6;^79nW^9mr%uC@F(U%~S=ufq8K0;T;pO)~ zH3)xn-v9D%&LJ1b@&WH~Eo+Cyh7T(86YSuB6Eycey_?SLdIOvDLt#=5L)Z^lDqZ&O zb?&Q|X~^ZASXj{cddr+Gi*aGv`?+@fGhLhh>UP%Lr)4EKONSUO@_4-duOZqqGw>ej zYZ3VMT0U-P73%?uXr;+E`4~jr`1KDPkrkk~IM2a&w3g7|7rYh)=EoyxLcIgcc8663 zMRLa)mYgm=>)~{F8Ex%8d8ni*A$MT=E$kT}gkZB~rjxBN#`V&rlDy&=n{ZcQR=gTQ zG^CJQIVaYORh=!d8OElV`WYVnArv!T^2oHk^h1(@U)YEsiDg~q=0F4Q-&czdDL9$! zI%^}KeU?!TOZ2W$q#mc+d>vMfA+WZ2laAu0VWh?2Rcka3`eaS0Quy1Z*gfVaw?5H~ zY$N^A<&qE)E*B?Zfv|JZB*B~Tc$?R zkMVatB9(J*&4Mq4Oasmx$g-7!j?mZo`krQ%NS`UK!?r)#l*X)h4D*@3ZRs7Xs(QMA z-}D;35R&<>hZ0e}6?{+r*C5pT{}*BaPr$JM_Tp;7HOmp^yMwH=w}`!-{4ynqAHTeL zW%njB?F%xI?}n~)R*Wk+y;ys3Lw=cwco=5F3$}@#eh5|=q2^D?w^Zl;Y~Rwq5BxN# z$4^t_r>g~ZMY@y#?+oJxet zg+w0m#nMTcH@84rsp?<_xh{Q&#BvJur`qjrAh%!DGtI&d{gc~)?W6)u*u<7{{sM^9 zA$Dw6JIsDSA+3rZ>3bSR%XLf4B|9#8)~}lGi4rbqTH=Y=}>6YhB zrw;;FF8l2uIATLhV<2M!}}Fh@{?tpL|qA>?>Fz&i7%s&6qwlsB# zFK|46VtRa}lN6>Na1|6!l}$b7FBN+lm#D=nB-TgW zLcIY;Bsgny{su!<0T-LGmlCcon7g~o=S_a#|G~TdJ$z=OZo93#rRVeQuv#eQ)Ac8? z3LB6msPIc{lNbnt)^^(fyzfM}LqH>!q9e!Q7Kh2k_`IP5z1sqA$GQB(D0vEOoDD98 zzva97;d_~JrLNeY>jxU_aBLaqt(YOVN2|`}(GXfJkOBr0&Yav~g(-zkADX3BAb226 zpxC8H`=4|{b+hjc2b?CY7+R(B&)n!_#4r{egnj+2BlOw4C~%y`d=jSz z^%m2<2w%I_8LNcsg{}I%dS@MGkkixbsrRAyC*jXJLGgo8jd!d`dF1UbGj)rl2cC1G zRW%Tum60u<))a`vN|o{(r^|u|)Pw)i0$4A|o9Vn_2~Axj`MnM*Z3y+ti9>qDLtMf4 z7hC?tyMh-`P_>|OZAf|Df6{yMdL|#@`HJW}hXN(pBA3*3wVvGQJ?}yPwLu0$dkV)- z*z4|u7U~sswpU9|f(DQZH@BdaG8mb`%F<8r@YG-U;7k0~h_2^;j)kFx&Mf3MO?p7*@u5Jz&SU7#-U`WsbvzAVxVo z>q&P7`&u%?`l-k`4B?{gWMdJXVXr~5r-A(1=cLCMwVJ`6hjEenE$QI2@|;Z9mpuO9 z7Z}Y3poP|bdE3}!HJa}bdu;Ki_T=$Rddulva{5hNQH_Wp!OKZcKt^|GO zdAc`XhX9|~boE-6;P30H_bpo7WQ`^W|9Shm+?;wPFiZ56ScL(;#y&Bnz48NP7jOd# zvwl?jA~nnKIDtstkK7N?^$LTn`h}@(7mzthU0U(Kx~l2V9(93Dwe_))z-7dwOWLe| z;tzjRIl0*Y;KMR%^%J)4j+PaT7C=$K<@jT1&XzMO(~|7F9*GRrOK#XSTWhXr0wH5l?Rr_66q^9T(5(!G45w!uU*ndyE}% zdV`OP$Wf{n4s|q#$-;ySW%=xuYMd$iwWn%wk)%T2wpdPNg$6?vy>{W zq-zi>h!ZgmDZ8Eqn9Fr7|81diQ`3XAnPPBioxCq@UJbQk#ffWe;;^a7dHm8HXX@}v zo>DXJPluaA=!%KkLL?CD9Tms(C0QP9E%-(-PB$Ds%#wb)?&(+&?u!LOgbaa-JFR5DdrxYLUu_*r$BkD$_i|@q}M^NZ!DED(# z+o?;!8Qt09%F2#+@GV>Rgs|bSzBYTBpfh1+GRq;#9_>9Ca$(4^g;~qKK+QP0b z$bece`>z8z9E=B+l{OzqmQ_`A<#H8%^C1!nwFOWRuHPIwXYC-nHvD_zHV zI+NbOR%2#b=Vy|zx4;c-uX4d@k-^a%HZpc;7Wd+~1kAc)YwG2?X06=*@zv@{t1wn;dXlC?s+J zNFwzjr$8UBC!tQv9&v^@VCCLm1Io zf-URpQe}4(g<(_HIz`~{5My1jVn7c6yGkZo$ke5%4kx^sZO+wjkva&GdVv;=ST$aW z(-|8EcqmjLq}+-XpUv``#b%x{?GVJc4k3Jbl4n6lvG{GvV_Hn`p?NFwNnmDtLdDx{ z3D|zvLWaFA!ewp@^JdGNIie0PqHUF^={wo@jx2BBZL$~d-J0j}lXTgxguoY1;*UD9 zgSJJ-3B9kg9^nVQFy%Oiunm=Gk)zB&S~-uZL7lc#O6i$O*vCsxqtzTzaX&f#c{Zz( zsREI=BfM$T6|q>LRe{z1L-Np4$R-PTT%H!$DSUx~e!XC>qkEqh10`w2wGM&ZrJXi80ojXPMp57(?a zEleg2E*&&GKDA5_RW%9OTZsd?=6uwmkV7na=}RXpU(N+_ti9ztv0vAv1b_&rLs5p| z-i~l#$)Da!vh=%>mow2z4oL3X)a0lW$)UCT{aaoUBc(1}^5dju!22eGt>Q6K1<@h1 zjGC0gR!!nd@%-RC0a!Xd#!1gLtMvUd`ft=V8zgB}TNz81lf^>f?qC@oIN>v^U3b3h zI2K6$_ZMwo2=YT|qSYeQ`n-!QBB1x&%0t3qmr##X_-~zF6%IQ@2=2*+u#sM7QT%tO zqJa9xuiWc{ql6~5yv+NvLplR}W}nRQo5#|8G7t{}=*A@+9n|+*zp&!tP+cFLa{5_;1YLQ%K zJxdXbOjRQ36L`4!dpeY>iIp5rB)o{(KKH1h6IR6ZZHEZ2JLNHE@%}+En@03XMdsZQ z1#$8HR6&%f^yHBSehsz%w~MFn4LI!l5U?w!cX zxS@8ND)LteZbKG|;D>d?vwALfLHL;U*Sn|hV3#{D^>NRCZ72$QlYaW$wxM*3z%-5? zpBn!;a4&*0+}yKdG@~bgv_?p?*yk4FvNcbHj?uF^7|97ur7tPg8F$-W=M27>BU`Ky zdIJ;c~+XxDDd1 z5lS94L5|EZ8ukyG9r>K~^wGo8#z6aY-V?FtcF>4 z-E~oW1QB9!m|6q!0P7sbPt3%gp@godT8V6D{bFs6h&B2}B9H;HobtHxLrQ3a(tb-5 z0m3Wva`&zU6}s%wn3HRkCaN^e-I1V-bOh&A3W}{$dpgmHlR>ooanKuucW-mNThYRi zx~64&j6K4nGuAo`N|*T~*`^U0;vcAf1435wY^j7US+4^dPb5~b`6Qe2J5Rld>`qF^ zQ8(@Tr(`hLvQ38tYYq~$**a@wBTE_?vGuslkkw9&(#A{ ziO_EXY)L9L$->_c(+oa5BW=j66Mf*zzaO6w%mJiMkE@aSJ_NF4v8#U;_)aMppw2Jw zsdz5_?r)3fA*8Sw!UyBwygd6=mYI{&f7!VD--A2o%*!Yzfg~`L<b6YX^t=d z59nj(&tf%Z4rTU^zHVyCwlqo1o)is(w{%D#N4Gl@<*i$KTD>TSl@gjJq@r+&73E4I zAl+3!j7(CNaqr+U&g7TC2A8btLaInBRSo}`Gvq-A+xdmI=B5cXkEpDECT$DEKd2v+ ztgav6SeM*_O+heTw7-*MIf&!|9*OO#@@0nbv)ZovQa z>6Y*2@+H)#*?*M=01;)IeoQ}p`3JR4rN&D+Kt@juLwF&!>OYT>WI>HUwrRjMC)Yw& zx&*&(FfzWz*Gf58KQd~zLop}ljWC2L!~F~K5A<7~{q}@e6aH3`GLUVkYxDJX!^9z` zWWs(xUP_a|N<&@Iwh6SN;g8+f=D}N7i}1*U)F9m+6A9_G1u)!0WL%>gWBTXWHS0G3 z$gGGkYIE(*X8yB4-2;_%8nEv~ArEjdXRE@;i@b_;#^yX~7g zPX!g2kp4T8z@LQOb197DMi#E{t^&KiM_nJD-!ES@sMmc#7#nMp`yv8)oQhf->XzIY zC)`4-y*1wRm`Mthcp68oCdj)ch4fPbMa{(L8|qci$EhgAzITa^B5a$!<3Y--)Srtl0Eyn8_Nos?Np_*x}pTa9L?4)~^Q1e!L8&)UXg2t~ysw?XvAi_EO0)J2pijY1uAb3Uv?o0 z)W2@GdCfoiyx?-Cuj`6n51)cQ$J-0oefk{Yv<6CV72Gf68Q~?gmctTv(#;%`=uk3SjzmK84D@iS@sWq_(`w#(X zA2cwfuw(P7i8pi#ln^>JAD4s3&8+K6-GRYYmMVjXN9F8B} z4PF^Q@jil#MQ7Q=d$3{6Wd9^?8Ciz@@@mNsY_>@HZrJtkC^WO`N(ilt&r2Zse28Vj zN0_*%I>H!4veo>HK9*^kWHIKP6gs4Nn{d&u&LN#N4ch)DYyon)6eZ(;Jm#tZb&OZjgAy1c}Q%d93 z_E6$5ycO@5p2y!$PancgeeBFdPVU0VBr$ewaWEDrNHah_2Nm%QtxGXJU~y|PEA$zy%|rvf6SLuZzA!8eBFJ#CxJfSq)>^2qUe4vzx&4~{V%1I!`AuUzl;`A zIcKoAy79P+lx!l)GmwJVeTDWrv>5^TTr9pnl6&OH@zZ zp70FdUK zsbYVJoP$5b?qa?tnHCRNh*P@tP10{vk zj?^V#7i);D0!4AEyvZVI%d}4Ymfy0KaZzNvQ12Y+c@^;aK~lj;bFr_}eh%ekm4|=l z8Q{gV`@}?F)DJMSK=u;;5Zu_~7k@~~_QdUL%!WcF(;KRl)Nylc<;4Jo*Oz=(-(ilC zL{Fnqv7kQ-mI{hg9xrG1fcZ04uDf(`Gq8CTY4>FU+}&3v5tuz(H#u{{-utT;t|XKkd^xj%n7q>GD(eijJ~iRSso4O*%9MSqxMNId+ReIJa}HQ0BX42I$)LNAyeZdDsvI|rL= zd9FW*z{Q1ga{%Z|w>Vn{_S$RO=l??z;BZ2>z}iO8)@jf|gHlc3#gMT01gTyn#29MI zTo8JSieh5j%2p)M7p2_A1gBrp5o&71vYMF|bV%!=w_p-deQvZ+&(l_NB6lKUoC~y%|y^u3;6%zb{TmZAIoQhWT2+lUo0%P3uT4ckMP6u6VJI z?!HZD5_P*>=2A>aS}-q$I)?|jTAscCAzUlC9zOzchp+OzL(QlXIdQ%(dU0XAh>%7+uELkeyDUiX@hzotJJAeT@;bg|-NXa;O!7zvW(znT z2I8F=?_K_ka^7%xzI#u#Xhc)lA{bJwJ+$aH)T+6|FtjIN&;I3-obZ;Rdcbm_SSUf- zBU;+;k;JlON&M4hgL>c($&|sKJD1e#$;~6L*>epJ#WNSDPpvRd6hw8&Yl;k>x*{PR zkYm6jvWxXv-pDxa7Fq)QO?bD?ng4R(p;LMNe29&mv*L9qqn7(tk(=x@>i-hr|616& z&HeK;?Q zb_y9^i`>DCut2~qOlnrKTkn;c1E9AspEU*L@t9_e=q9?y6XL_LWOFLo-f>K`k=JR7 zz?nnNbjC!~hvJWgs_S4BU}Ya&qg!=KkXMRvTE2q{r_Z?r1dc!ui5Ae%+$z=wGu|{F z?X#~zxg(~&mg)%h9WEv4WC8_@J|u?qEU*o;GU-;aBpwt*v#flW7BFU>qJ+eoN*qlK zH`TW1k#I!*!JH0p&;;{jd?4X_h<+{8cPtS*6{s!Vv=TN`W7-Jow?i!?7NSPKklNw$ zds4rjbG|MOTYuOiC<)`7UZUUDhthzNGNZv$(sJA*+ z1-=NmsoJliOG?(ctSEIzb$%SLeo%7b!)Q?T+-H56N5ofa&lbgWNWm0Nv1TGb$x~Ca_ie^Z0^{ ze{ z`?7g(QWEGFw*b#up5G)CKNi-$H}*c)z+HBa{&Pddod>%}750|?IGsY;{+BEsmWl1x zzFf(%!M;fHclSvdsvkDq-0k2fQWWCZMSXtvDADtHW&iwmfHc91M2|1aE06{2dHDHo z-v-Zr*ss7m)Gwv3i*tlo9tsq3rVMd4Y1WzXFoU?h85>ldIrh8=&aE;>@UEXeEk^kq zj{LHcEbA%y8Cn{qgu;dMGvr+_PWg8@I2s_e4)=-1*VIsGR@(s?p)Y6DD(WO7a8pk2 zZ6-u~kVw5}wEsf)9?roKCEi9At!u{CkQ3)l2W@l!de#8IX>OZx2^|0jFelCBJAg6e|M78}5H3Xvt;MoY*^fEohiC zFE+FFy(uC}TdoBQjDF(l^s!}cnee+F_x~p72aF3UMeYS$BRQMLX-;k}!pwaWwzFM2 z9m`dfEA7}@R9kaO2SnDaDhGf?(u>Q>qEh3bsl*;)&Ux9J@qxK~me$@GK)fJeZSbH8wN!A{|J@*d!EBUw=b;6L37dcex1~4@S zBkA2QlMZ%Mql&Vv8BBBjbhjS7B;mu#^wq#Q}aFT--wt68<}MS)uWP97hAIHB#-0?5a$5s_13sQQZB^m0 zI;@b2B!6+)7Co0TY8#V-G;dJny02x+P?BcwXQuj%`qKC_*BTTbfsCr>9jX^7JL}s= z4~;@LD&-)A>EQ1~NzFRjXc8+R>moDjXy6k=*LOv%Rk#n`GuP z>uVjM7IIGT)N5QhwuzN)^N9{VpRm1~-l>95CV>wr?tH^hH0^2dq%ZHwbrXf8yf5jw zYHZ5K(=Ce<-fN#&MCq7;_8j9?O#*FX#HT4k2?yd!!ORi zT8i}+r(SFQpBCWGYxX`E%&>zNx?!=$Sh5{!Ch@*zzIgRy1@``SZ4~})HCS1M>&*OZ z$9_m%z9p-xzBa4Vai9`!FRMfQkEY`HW(OrQey4OFVVLo{hpSiegR@u|>|@?r?`SV0 zIBxrTxO&#{M_u*#-+76&zZ6PBQy2^-nkE1r^lz~ze8&RzH9|?c&70qJss4OpG<3_c znJuLesu<=vIA#Wxe_(X*GL6liZGRCiB#kSdyZ2uyBpFteVaY0!Df5SJk7SkF|FP7b z-av4u%{oq;7HQ+kcQk)Zi22Unthi)YPNRSr#kj`#Y-O1OZUC9zx5s+kqWb$JNNEbrGec_DkfYe!UT7E3mIuHSW0CmX$3j5#`;`JgbxbxC`XRuNI+r zyzfU+a$I&BUu99p|8lypdns9emgK&%^^VEjSDixes-ET77q+TlP1S7ZwxotNK)p5P z?xV$R-YE~toYm|O+N@&fl8)oaIn8Xjn5ecYq7#fNUhoC%{1Ml! zp+4Wna%VdpoHC-9-W^K+#eIHIm-?Obr2Q1J-t5u87v9ZK!aW2a zav^r_s8#rW2bEDWJB?FalkiV_d5jPcGz2hX`v#rY1$@_5*o8_6zp4}nY9#6NTDcGQ zvFddNr=%+RPUaeI50b$&m6{qs6aOkR+Ug;ZUmJ04j{r?-Fq$g(vBcJ%Wp>^1@YC}& z-pcUyXGAsu<<$SQ$J2vbFG`eCbr5iO`hvOV@6xbupl`~>EU`$gL^Lf*a}h=jF?=+M z1)7-FRbTp9hXR+e;%-N6IIdh((&5i{@t1jss>3lFq=r3hh?(-*(<`US zc*)e#!Zw;C%~#iptW7@)re&SC&{FH(zz@E!sWM*4hJO&s0l_w|92e;6>V2Ffqy&D_ z^;%dgchLgqRw&>cXv#4<|M|vX$S%u}*oeI6580YHEv`igpRbu-K-BtMKY`Ht-oc8V z4F#3?SI9j#1`isd!k9I4n0YY+I3u}DHnb}O30zm>=G&qq?(h%nk{L9W&qG9N9u`W}p{HAIF@Io>7d=@ z3`E50%PZi)%#^@(ZLE+qIWWkHs&8!O(T=X6254KT_b(|kEJI4xF_AOv-b&SE7!4>f zUJ`!)@G57aTGjK%XG-ojtrM3kCDSU<1Xn75s=e*7Kit69im(>ywOAn?%gqc2*Prow zwKiGe7)}}xub|6Ldjx`MZ@dtrbHIG)z8RofN{Je8Kb;w&d+SaZJLd4yVm9m+?(d4E z%3}98eHMcoo8Xp1crCY0sOFiOekjVCfQgGc6z`onycV)70Y)`bzXlD8G)c(6S)yJb z%1=EXQgL>euUi`a$o3#;<_ignJkIvK^&fQTn#?ydS=Y<=&3l1IWljQ||HRb2W+!n+ zJZ(Q^e$L1bEbPn%Nd@wYDORGl*%ykH|!>Wv@SU*JVL+$ zDP*QbXgIfPeyK0}3Q%>veE-Y9OPzP`Jvp^NjCPJ^A7C*5MUgfQjNdS%?z0G(z2NdJ zCD%n;ViZklnigOFgsAfsW*SRYF89S8i`nkMru@rwO^pdn>kA5t`U#k@#OD8#Tmc!3 z*N{bd;Lxem^DFgkcT{@G_%%O{C_Gw3M4(~r1n^TjDQSfhfUw07-nOde4m&&BWF|Z0 z`fk~LXvDyWtcm_9A8N#1joFr0^A*_`YNCPi-obvDqFv5foNNO^9ccrHf#n54h800x zH=U>2SV+vj5|;wlG5Gv)=gzyvFyD660Zl-9Ihuh_ZKfODgHTuK6CGkIcSQ z9MgX5cS}}+P9$D=(v|iLsb!psQJ2rG+b`Zs+&|qN|Li=+rF2D=B1?EAZ+z!&s==yy z_VAz2>Bp+RHGe?dElpQ!h4D}A^hJ_r$u)-(q6O==8=B7s)e266BtLo1hIQI9HTLw| z#^JtGZXI^klGe`l(T27_x@~;cV*fZ1Gj)>oJ4uhL!1V&5Z|Mw% z0HPj^_kxA=92tTMo)BPW$g~RYTeU)sh}DyUQe5GUyv8dcBg+pt>VDaCs;6B^f4Bh% z`j&bb9gpiKw{!mLBY2saKeiR1?lB#=$6EozB3ouI z_qm?bJ+Hd7e`sq*{eqKxz>P=Q{W|)or6t2S;phMQ7l`yU8Nrwhn>1_A^LyO0gC8Qw z>=X#l6R50T`rf15Qz6M@jtPhf4fYic+lf$C*VQz%H_KT&#@aM}t}|Z=gn9uu8g)|=lGRxa>_`VBe45F zM$Q{rz|k@@@!|bBUtH3$mF`>75;}!s3df^#8eOw1l-7g}*GHp692!ix;;*wI+<13D z>PkXQP4%DFfns9%?~stbd z3V<&Je1C_)&$T<=jZd5@L5b@=2$7v6B}j0 z6#5{2UQ$3Dx#Djgzcr)X`7|XXbvY`=?c{v1{fJbj$KLs}Yt{Kunj@;u&A0KuILwjb zzFJL-_pll2TLX%~SNy0ZvDpb4s0TR?X@a=Z+Aqa2v}i!L^F`n8bE(yMYR>NFd?#yb zn&zCmE_|8(YOVVp<#1hWc(0DKK)umf5{}z$Oc1?su`dmcy==G(oG$&SmK5d3-jgEcjsYLDvB4( z2~Q7YcR9gZza-A#nc8iQlgmT6Jx^J69xsx^V$H$KIi4%)Nnlioi>YI(MUlbBX`5iR z>$$q_@nyrb{e1?RM6SsH@QMK~{aAfQn&bao1;M8a&)Cvg6R)sEU9m9IYiVf=K#%*-)*9-*OdlnPUWs z(WFT9Z@TgA=rO|Od}u-!LaRm*L_o#vhK|d}!fxV))CvW}$E<~*j@U|FO>yy~SqIL! zL*qqgDG6K}AYpUii>s0J1YQn=vYM75bHXsMLnI7Wu&3<~?i za9*5Mtc}(8#W_s7iKSctkY{GJsR#bCK`U{F;F6WqM=9fi0ylQA+n%<5h5uUJ?e)D| z*ko{R^@@aNNFnVP^Ekw{H01EBT4~>0tuU>6O14Qo$jZL*#q;%quFyJmA7ExC;Qrtf zLrMA3NnvyUdtBoTlJRJnlDGZGuvJIKyz^V~4yBo9@n}v2JY=ea0slbkdU6NlbVtDy z|Lj|*=M$t{EvDtnBniRk1t;rNG=o^XU`NWVOMC_Q@?T<)aJMVAW7sHD`A6o{W*Ozn zK;d;#@pnm>V#atdYJb#ew`AIYD=%j;P)0rWH>U+#L&dBuSEtwhPGSg79XQjZV@{qo$L?#I z!87SzCx)4e)wB2g3zGzce0iw>kH_Bbu3i`Zhmi8pCif0XZ+G45mY-8$jSElb;_oEz zZ;F{+k`uLDPrF3Uo1`BwUXI`=0OX4%V9$pF0r0GX3%#Ii3wMje2?^(Q_}8|lIRBYd z;djtps8*jgJKNhQmYVd$yqsLn`u^98{ZACz9m|K(2b|}0*13!0k^0azhqm7P^Sz3y z>Q@-fyF|wWak&0YB7qlgM=NPb(m#5WJoSL1ua1oz)$j{l`;|n%{`IG_QcDd3^TY`y zi(WlF40j6*6G$TTvpYCXvKaz^{~7#?zKO<^9~~8NkQ^8pIq6jWFfiM=8vPeJuzMj0 zAAKxc-0%e2M&glHQ2>^_Y!)xsukel$A;gh2l+85Fs{66c5ua;CN4h*(8X(RW1MuzY z;2w6Lf7+2?wd1bvF`qCr70$s;buDq#2@3?L*Ti+;OZl2y0!oP5Ag|G$PbLHUeFw`xKyoF*$hP;>vUrbLeg; z?oEX7LMu0>WK!MKD|Pct-KBq`V)Z>U;?|CPUjE;aD0m3A-hGp_f6}U9irM`_@c0ID zQ@~wPN7ME<5g+0UL|We~nxF>(v$DB(gl~nJbph9J;IZ4dF@wgsivOn%_&~Z=LLRnW z!@ApcdD-db`MO4^Eg-K*WNif~^SYTc@h^oarQ#hcO5W+leI5z3PdsLRV=q0C{xx%( za0dqEJ4%fROqnU5;eMdA7nr75YnBoRclOZf6MM6+o`I1WtYkuH5>VrDctr#CS||1x zG(g(NL!yo&y30P8D>iKK1|Y9@cz5+*@sN&hD|dRHpeO^WpSLfpA5H(6ruIcLNYh*J2f00Jwu5- z<%^%4C--~sZhj{_g|w_GS1lNdD$7J~>4Zr4G?2LJc)%v1`YuNYCtGQPyo0B1f>G3- zg{wkOc_W<2kA+HLfHcyZa?j||i_#0`-=3D?@d{NsgH0H<~RtmeOWCbn1cmpe2 zdXqa}*VJ9_6iWwX+qQ6xaFp zFUQXIhLJ3wr|Ht-=b!EGfpdj5I%fBxXH+MD15dNE*H4V_;CH9;w)?~r>VwsN=`xU8 zFEQ5lUhGE{Cfs_n%Za?T%pfq6kBuhBC<r0x4SaQ#<#g^Fl!s@)lY%>9$_VDVliKY7yC++RjpMVDcNyLOGLdEr|~Vgcvk*i1?X( zlxBFSOM$(~697g8%dAMzz8SbD7Ht*gUsg zat57CBrpyqXw$qNbX!3@4AFlQM>#9z4<*fx;k)V8?UnB>;GYt_*M6ZjWIk}<7tYBI z0ZgC1#f8sbmOp#pcUo$)UYAnf=<4a&L0d;kfS;EC7(m_E=f1U$RL@Nw)X$bUZ12Cul8Nb8oOMewjfOiXPqmz`fwR&` zq`qt*sdKHaoBM`aS)sF8H@^2`jYrk3^t4Ap!@dr=RvJi!ooV%Kfk|Rb61>|X2fui! z%FT$Fgnd=9-_U{Qn|$2UOV&jiCPBj-Mzjo5tn3GrS;$in?K z7hd#qEB8)7)*0nDCD*n)`k$D0qbKC>00*};_tMJ+dAwZ?|l{W|EPNBhe+VJZL~IHvo^Qc+-$ox+cqcH=FPV4 z+PvB3R+H_TYyrkA>VkP;Sm}$HZeYLc{DcJV^^D= zp#2;S?|?tFf9~^2z1I}#?Ywcq5-8%)3zEfEFhbBLVqnv_IK7-rgF#tq>+72q^%|x{ zz*6k65H|d)N1Q@ibu#g#Y5FYZZ#6jFUT%>~LQe5;ij(z@m9k7A%F4a^=o}fOuQKL# zy2{I6OQ{(pGgkK;kmg!U*KjKBI=Ek!Xer|a-9w`^HR4rNnD(FA9=j8KA9R;p$UjWf zPz!3Y^67g$+I6$nH#MjY-GIBSgpWRTBUSq^xWSGlW^7Db&pFi3Qav}sAJ0PX$O(=?15K|pwImm5`NdP$jjT*XD``| zeVIB4Di@xQoed9HYtvw628OF8uH3TiG#=#)ic2pjh`y#F!>%J`lqGG7j?dgJJJl&} zthclW%AVx0_!E&UY1vhg*-zc_zD{W*4xCI77+HszfAKp&^?1;+k382!p@F`9S3K z#11PG7CDdyT{2TljLL9GglrWDdwb>X#&Ryy6yi1TZQphs!u9hmr}A|nQ~;l`E1Co~ z0pG*kKNQ9-^%LsoUlmUM<_qTyYH;r!h`vo*%57TTI(RTbC>ah)tF%`7NjgH!sg#wr zShjC%7@6@ap3wPjx$|h%u<0}0v_JEFoQ|st20Y_~abuqMjzqW1EtTVPPh2Z8e{Vqo z9p%>LTJiFB$yb#~XtYzUOKYeqeqOp+!IGV`P{jZ2L6xS3>+IUg6a59^#d7&}SW34Z;F}tLDKvUbo+Ph^ z^z?1!ud4~OvUaOiVwmOMnn`){w7aeWPQ`OT&K8Xnb}C5j#y8HiYH>GC$R`yrs~*^M zvT4fiyX&;2akfUK*8JDtuOe#Lh!MZW?-9hCYLK6M zt@qg?c}2A+5H<5vUBLUyO6?EyFB*$2s_-9-ctfJ8T)rb4{5M0lA;zt^j`lyiu7}nL z1^E$*H?RKhRR3qRJ-)+|dNywCup9Et+#k531%W;OZ+fxP+)(4HemA&PDe79qGkq_! znrG!LK$+@VXf^EY7W*qYh#v~R_K0$-E_KSXL4YjpMwu=H%hyFl4IEtU%}uIHuk74a zsm+P6@=T^8Ds~;{!4e}*mz8vz`wEOH`=Rfzm;+aAd1HTicxS3gTRiP{@c$#Qu;fl$ zSB}Z}a;-ouxD&>zRlUvmJ=SYgIsa$KH~Ezo?^iU5hd^GrQVq6aCP9c8j0om>E#uYi zk^iAc2}z=wOyNkp_n00FiOHapgv1VN+h8&@I}?d) z^Nd!8vmfmp5{@E@uSl3>`};JA3{ohWCIvWKL73dFQU!`Hhy_W8SV@i!aaO~QD&l@1 zSPM#tH{iNubEuw)4yoB@Y&=B_Uf|aF48Ep+9kp8RY_FZW8H`?N-YB)O0TgJf%_e-D;qe~4>y@p-Bh(jb=hsx zD{}gvb``-1rEZYBnIH4JMOA=|t+bEWt@w;)Hj(f}xWZRiNo)y&5VNqrlz*PY0~{nA*HF0?7P8-_gZ*6X;>)U#F&4=}RG z68-eDRCg1`MOc+^qB_y67B30DgUK#Q6&sh%g~7!A0Q+w`2R@T6-eZ`WYq2Rnjf z=r~cgBb0hJt>$NC5l{YvFyrRD)7zRL`8eY|%_WwMACyz#!D+m1i7Im!(9q{NIe@H~ zDTURls)fbH<#M2wBPXpnTQ*_V_TUpF6;e|2`#RbNiSjLNJ{Ur2_J^&+s zTp9ydRGT6r^_>snUo^a9GrBHW1Li$J>6p|;U-fP@prQk>aF~x5%>tg9Ro83TH&GWt6>tkZ*$jjs!Cu;4-$M(uCf4yharGP(fT}Dp9{_F2ev1zrf z*n`Zw>pl)*iVdW&hwmkoZmgC6;{_-tk`zF<6X%21w&rZ>ZX1dM5$J7#Ukfc$vPEMW zr~nV|h)Q>f$5~fd88o_(-jjRFEmvCHM)_zQZWg}&6I1qVe$J`B74*sj!dehTW%+@e zQJPEuW=GR|SN23pxlvEi9+uHG;q|O1LZRHQ%w-rMHxtf2&=s}tr&3Rl~;HD)d zn2%Nj1UCvdQ6KYiM3>e_%I_MHeB+n7%aA9PByGnw{!2_Xw|xPh+DwMp;IC3;+s`rJ z*FPK9nsCRyQ8T@VshFP(X4cJo8t%F5~6S4^0P}Y@yTYPOASpEN79<3Lg?y*YvGI)GB~P!_Gd2P;Ay^>60VhPDuQ- zQLt$R3t7)9(%wv=j}&9ffKH_INyc;+pw`C%_BDLYN!(I7J5w5K?Ds& zI`OYpuUJHm!KwIihry@&+5`=;1K|qME(+b^xB$utc)Mo4oTn2`+pfYX3t`XO+x&b2 zLfgU)KF5ajTiAP)9(can5B2U}Ba*{MC=d@L%_5t2QTn!}ny?F>of}?t2lJgiUIO=@ z>MD;Y@|mPCAa3PEdJrH!i{hMxu@XrdKib`|`>zJ8B^hN-Y~Qd3bEV zzXqu#Ds|ODFHLCpO}7lh|E`s4O-_`g-aZ7xRQ;zEW_=$}GYuYUo1!tvDv6r;0!#_N zItT9=fqy;M#Jy<^w#IX|1ETQj1~;-odn%K!YO*}TbY4^=a+A?%+}uLr|NQnQvhT_Mfx( zoiC^olCc`K{rBzb%$u?+BYP_TwQ46Y*I>NbTwjnmFx1@!e3U8O4AluLVaez%?GQP3 zr@bl>Q6xFfyL{lpsE|!8h=&62&p&L_m>5gPSm*!u0eWEsp6w#w&Yq#*#3}%a3|h6Z z(ag7}2S%sadzSh!7B=ifSpIf=v0y#EtO;iB_|(CVuS>x`B7_v#s#T|nmxyz5$(o7r z-}16ijYiSGlX&zX8_tRP1aynYB6-{q+9%5Kj4$9{D`P^7DrgSUCexY*Rbo-OUkDa! zL4meuW06jfW`t=cyU?gJTLWdxLQ{D?S6_-&7=&DA1SWB!#v)!qjQG>`q%PXRZP(WL z!7wy#!#B{TWpwA1VJO=1US&(+8OJA`OKi-7y6}w8Y`v=>mg%?iOVS%nWY{zfa{kXy zd*V|2y@8MIf-gJrHipLK^c#-4q0H?r%f+&&jA-(q(%yx_s-oiWf2k&LFd1)>BDZ5QIYR#Yy3d=P?9ZR~$lZ>c6Tm?fl5;>`$&dtp=zT;>jgRC?RaQenPwydFLBLz#?o-FXh}9$MJlg*^udqlM5yEBy~`GWQp1$6X}0 zc+=*#tt__)GsMg{Z>)`n-`ut_SlfPi%Vw)l&RLy%AuD?1YJ48U6c&+CGo=9~I9}yZ z8wbA}U)fLQcmFSqDhV*ywzrRYm}AQ#0NHV6h5Qt!O)@qt=rt?oH#3fwt(9GzQkmQz zZOhpCW`q1V#Day5^P3#23PH+h?AwnxCnDtI%g~(t(9@Cwfw<>63dd}|VavMQqfdc= z+QFg#09f1e*XBMSDv;tA34I;2 zL(8|BHlMKVU?W+ykOFiX37s{u=Z#WCDVcqIpXCt%PHk$mTKEs%Ur5W=N2ffyOTfXL zO6<^6Q~Tfunxi|cKgU)9jg-Loox~SyqV6c--mkzslRq^X)m**Rl1qWzDAEc@xH1TA z?(roT>1fL}+$`Bjj7s-@?J!A*GZ-jszN9wAY}f z`?UaX&IZJmhNjG%I+6Qb(c$~^p^U|st;NugbL2?i7CMp1EV3{#YDdg&F|@};!XG$~ z=>U-NVu-%>c23Y{;J=Sc#^a`YGA8Dp?-Lkk_`3#DJ8Tr9L%%IRJv#gPMw?JIHqMJz zvEy2Wql+k|FeWVULE6T^GCR0o{$#Rqbgf#1*~mI)I(C3D4meUl{;M8$QNY>=*Q>rv zw3cY*U3pP&6IgML0cTM~D8SOE4>z2VRjEAcajwt5)TjC@dMqwCq&&Kqutye663bPP#B*t2 zGFpAkv8nFQF*KQ>-v#35VcbWeca?3#ju*<-XLq>g)g7733J1?_tIK}FH$|eY5zEg* z`2gbv4cmrh;Mr@)e~FOd>zgpR*$Zg?oVS<9*1NgOwzIL%nvjG(zO3TcWrt(2>PT87#M&7G6O!?4X7QPQ%*4cf74lIhHG z?D~Y%Ana@Xxa_07jtrvaf2?+epHgbl6%}35&E1<``gepv==qQ znn}-=O8=m~Lbu?`kmQ@hIH^Nlj4qzchT_vqdw$6upU4sotG3<|h@GSmT)Pi?&88o> z#5Twh4z2C~@%(xEfZiV9Y=>P?m7sv=fTu=ZHPY}bg1Vf;Qaue+-+vFuiEMBG{P2W> zKcq@@dE@R8t zXA@%YPw+DZPxkbkc!o;f$Yn*F`m(*M!5Tm?!_Fzh_^sjGs9pdzv9rrQpw+9Nnvx2b zhfo?au;|^}xt)IZZpCbKomL2sD_n$qwMOC-be@a*G#1?0d08-Df%t}vqavHz;hYul z?31@YeB&J;0vfFM@_&Qd99)(@h54uP=KNNib?->EFK%K^~qAaWeF-Km~WKP(g#X;~%{mRW$2nT;8!mKgy#ziizla87= zgvEXVu+W=y7HocKXlg9$=$X0t<#>0*BqxHGCuY&!S)Dw~&va7I0j;@<*@nE3SF(ey zQ6@r`aCfB+iL4D(b3`-QPYaR;Q>De$q(RrGMn3CE*#-q5nOt%5P?;tQZ z29wxIo41KQ#XiK2-~?8gQqFF$<&2BP0jK#Ve_c*jc!em!zm6&`qH5hWqc6X^gxtO_ zTS-NmQGO5uw{si(gp&WoZ%8FFLL)N`hNNQ>4)?h2!oaasHvm)OD-R;Zf;GB`(~OTR zNW}03%jk!VXA=i4aLsPwH0$PzPu-F~mJFK``H=s#BuoIChnaj!58t$>rTaS2)3-%s7F40@&yqnKxPv_)Zel=V>xA#78P1GcS8oq+VCFBO0Cy;e8@kI8@RNck;DZWP$X8QG`2R!fk@EkN>=-!8 z>z3}o-1a0+Vs9MPg0ai!b;l|%79I01l#}?%cn~|jf;nKc#1WxRJ(i2I_FblH#mLV- zCWU~joRP79#cCEsY`lABgS?2aTAp1!lN5wa12#dKz0T9`KJ;OWWOCI{9~>+dw&Ot!IM#b8B!y#q#T zNW{Gr(+KLiJ1$Z)et^^Ucd$}p#GskKO;oaLc~YVdI#QPl^5nJiHm(}b>s!NwUfMzr z`==~Ati^~3i1WteXQ%xLxe=kAJQeODRv)c_vfh}J>S9{DBHlpKYfk=U+;jQFD;kFT zMP61?K*lc7#-;r0cppV3XRqna5lqLAFxtMHvgDe<&QW8Pm?}DxCjWHkiIAODg>!Mo ztQPSSF=ah%ib&V*vrs#9zvArnLJB731=no&e&fpU58QLt$~jwvb@Y6O;|X~oQa6q; zK8d>RJcIAk)dfIdJ__~jn#Q@@BE_i~{*5?ugT+K`>^NfA(dS9WRkxc}h7TOISb4m7 zWVzLM9Aegd2`)qy!*9iDd!Z&VeqV14nSvGH_*aGL-UmP~C8vlzV=8uN(W&OlT(1QF z)vs#Qt83JA{Ih9O5436Au%1U2<^3rQ5%M!6nj&hgS@4PtQo%LhLMzoRk8;B-`B_hM zOh9FfT~NiyqHwZ1gAUF@Dm|~3O=m1=#@t(QV!U^8_IgJNT=`b^ zMabPL^-;*zu}8n;di?j4cT!xyGegf~+sMfs&VC45=et6g*GSf7iPmUo=-oL>-;JJR zC5-P@3GiZdNBrkt$&n*EbOn*@|0}!{Ckzuk$KuG0N!Ij*+O|d%Qyf{+s*me0|Kjn= znDS5$m4L$3huN+CrSP65=(T8UL_ukcHfzVBWuQ~&ya!ta0@-n7?dzolA0Wb2B~7N3 zj+&3Fy?x1LPal<|+pMe4)M@?J%ObO6`KRE9YQ;xEGw6gx?&q&zdRH8+woZah{}fvn6l^@u(=jO>LI~2sLU~-Y!$j*_EsrHr)6-eN<;? z!l8M1JW8m&v_|Ahe{e_>v9h>Ib}y_l`iEK$>j!$3I6hf1qN2ju1-Y2Ou#hPTvtU6t zfJ_XfyL7-D+aPniH~E+HN~Fy9E22pdPLK!vWF!+)Tm65jCaU}#( z3TI_7B@m>e9?%hXE0O9<&e2p*%qkgvjsm!{(ZLfYD3Z6Ag1dP^fz0|E`=V3MsFQ)U z;oYx@iMCj0=$Lk`G^6H_flMwH>+<;cNeUDTN8idf4?+u)uNdrZ?F!yq=V$&%i)-*Y z`TldJb&K2TpUshg2`Ef1O{-|HcyBLh=b^_;f6# zt!-%8v0+gK1lR4CZk{M#x-rUR3g{*R@cx~wB$c0@=Ui)E&>9=-DfZ_dPJ1#v>xHTG zmFY~gv+9_+RF8hFpkMHEjJ>Iay3j5?-acTB#>`nLbST@+Fj#w)8h<0{&0b!*^D_RX zdB>Zaj`i6;y&j&i73akQFA}U zX9nH1DSx4EXVd1iCxQQ02>%b;md4i!px#~wO0?il)slFYMDKb3jZOM%ul+~}`*nLv zB+g38>Vd|^(gc@;#f+OZGkz8U3cndYs@36Nw|~w-%-2F16OOdKyEFd>O-ovHDevty z5PdUTZxY_aIS%Z0$v`M1Ogf&1PbSqrsu>H+1r1y{yOBow=8H8An(akbLW@XKeh!aF zz#T^%(|Yml>)UuRs!O@vupER@?w-?Ml^si^yu;N8&Y7CJ>w{3a=)+2R>~Z)V?# ztH%O+JA*vrm7eA_*q~R+l=&%M(9f|tW z7owN5Og5zURy!obC2P|H1S|Je!w;rnK4yxJ*@4~PcYsL|{Qc*w%H2bX$ z6OuufWN4#wzUQc+l01h&J_-A^F`1SrCefyNK5%`K*eul%q|8#ilFoO*{9I6i_{N+Y z>elDlIB(qi&!}F*vQ5LX3uyB4B;q z2iBgR13y5|*)ucm$GUBo`;ZOYX*dh5KmW#(=H0@rj-H+ZGV$2|cO3UnLYGdV`MnRl zR&&sHxT6*2gFttf%91$B6pT(XN`j@LWZ1AH2)IP7$V$5i0IaZuQ+EeOrUt+>n{8GW zJS~rMt&^KsSj8O2kbFXR+K|Tvq|yc1758>gjW9hca;Ji<8gPwZ=yZscX62qDR0h+R zt3`vgms2wX5_G%H?ObrN6^$0XFU!yEmkiFD^>hMa+DsBqv-!v53uYfhx%$bM4!|J> z|LaYkXWTfU>7jddDqQB9_O?Cw{f>`qo4Fn>RziHz+|xMUMq-v6*GK3+N@Rsog?u&5 zyUbYfulGAN_vMQco2&e9LhKuERU z8=Pc=n{c~aBT>*YMlx0hMNEkZiP)*9NA42@cp55I_hnmIrYDY6d4_mR2eV0@r)czS zy$uB}$~aHZ<9~~?7n(c^4eGukXYx1Qo8?^#a6f-(tn>ex^tkz`0J(j-t;*{Z-{F58 z-gc$iBV+1?KualtCBiIX*6Bl?h!#SodtQ4mD%rSlJLAx}ajFbzs%TzY;3cv-N4ZxN zrbo7dft(^G{IwrylJL0$_X$}telfme(>yNp0yI3JH+-i%n$96m-ZV%S?xt+13F+#{{k62lMM3842mq+O5 zRDS8x5~-{z=dVv(T_{8YIozpNsFlPF+F!ftY1^7 zQ+6CLrEpd5_^8=c@2*8+?I)>@J@Q9aJpmL&(=HLYIxKIb)5U}uEh8xdA$0lXc_cJ4FVxpQ$*RBbii^{TV zU2XCPkOxK|hx}yzSA52pKW4BZO)k&Y9AnZp35Cl4$MUz^?jXYEYwn}d?V)>S46o>2 zqNIhuTeQ@o2kpKeB2S)8N!2EC6;66aH4B%jxl6S)>*XFVN-Vik_Qkv;xZ$cKoMJ_8 z4LaU_FAcjzdzB-sUfXb#o%Z(Yz{9Lo0d-t*s(*4azot<5dAFU0nU4%UEyG@kJa=k$ zZ?ah(Mtv)EQHu`_bAdlxzIN4sl%P+TPEm}o)6F)+)_c2;b5BN;uJv1uNyo}AyHfU1 ztI#dwY9#8Dz{uefFfRc0^=L$uAlY%iNgvKIa9b39_52sjsUYgSM8bdPFpaAdfOgg2 zFN9nr-Y$A)!ulHDD0`G#aspMTtnFYn@l4`|C$4JCV@VhdB^x2T< z#R>NG4?`Jp(1fb=oysiy$%I+x4KLgZk`mD^Im;W^K4;p@I<|@4e+^ zD9Hg>rx=a9D{A4+S(j-&%O^v=M5_A1+17gNv#p$9thbV_aEOA5q` zEg_zgai;Z+uf2yq94q%I(7;7~_v|))fWqGidynyXnIC*Up4_=3cOc@!e*vEa;5D++ z9UkD}tcst9R1f?;=29G>xAe`E@nMmeguu91#}DDE@8HP)Fnoo}g&7_3V)yQcKP`{;7)xb3vAM3^%qtuLv5gr|(M>C4}HBP+KDr9fuuJme#&&p&(wU zD0P)_hdGaoRE7V(RC3@iSLg6S%@=78CKVwdFHc#Q{&-{cl8y;zr5w^K!L4_3|8|nr zLRe~Kt%n}-)_-YgcggE6)Q~0Q$O!cJ zV@;AQZiY@3lV%DnNH4Z3C_c$jk(q1Qhh~wdKTyht?`1lFb*32`nx`(wJ6<18(Z7XT z<{FnOZ-0!*xYXK)>x!~yGTiJ@D>?zpLv7b|v$eY?J-g+pvPKe2@Sv>`1Wkbf$Plf3 z=z9r+TSFL>YHHiHAms7__ur>h=khSMbZCSSh|B5|qSsnW#eBRvm4`bm!;^}P|ko5pXb z|9s4EA%DT4s9jTl$e8kc>Xu_lBg?zx^65fvP*K5_IL?Hib`xk!k3Xt-r>II zIl1<3zgLu-!*Hda;QQ6lqU71lD@W<8B`nbbP%|W9d2(|uiW}iusp~(!uNa60;9Rz3 z^)9q1uq+)$IeI_H)yz~N_~}2iRLN7^b!=cLt{OEZIWeqt{SLY0D!m~dC1?oe%xDre ze(@+Of3(_eHhPV)7n|bWo`4G2l%f7$&6CFp*u#G1;AFNXU>(&@o1w5y9+WlVw)M1kVor8Vp5+gc0c?U97-EFGDQPBTx& z8U#P4>*}ufj%L`^X`KG(DQ1gX3dDt%mOa0Y#9s5^PP-{B^GMnerbd26{HMpsmruG_AZ1o=3e3_qQu4+NM~owCQ*FH_xQ8Jma>@`+ z>9*fA)%sZxoSFZaX?x7aJL`;mS} zCT3bKdI);IGaf-+uX7G$XobvUu#vr>wu-YE>3~AY55{e!TNJ&5g1>kNWm)4g}doA zC<8ae)niU|OVoeWZc4rJs7qYHhe!B^YR(WA;WRz3--8HiG@h?9sqrQbs=tas?6naJ zIW6h)*EbC=rKLUhPsw4uW4M<5)Z0PUbM!4pSPmSw(bcvObu)9(`2)af0G`~{>ME;X zcvZHLaKij46Cq~N)k|+V8xb<4VM^v@p%hUKtRU6?@l9tt4sk^uVhYyhUv1xlVP7tm zN|&Kufu)sHAS8e+95a%)KR15H?JI9Qr-*2hlH+e}NE`1dU~k?O>UyfMGX6082ph`7 zgp};+Pk0p!+45$c_0`owuxy5;t6L2uu;a|K{?2=$pw-~WCV-80=YHl4Hb&tb2B73%tx~rJ*f65y!yM&GIWf2x!Xj8x@c+bA znm>i+7QM>sK)KosS1d8uu8X&7;`99g;XZF0`UYxHANL3f>g?vd?RvQG_hMzpSKhq? zVrw5;IdN!P0{%;GTX%Nu2zb16=CBOTSX4wu3p0N!Fil@>N7lh8N0V!%`&|R+2Bd!3 z*MzJv#+o~E13SsbEXKTf2uFxQJWSv^D>hf18w7##E6{psSJjp6?#-Unh`9av4N0(+ zorJLSmFH2l-2^&X%LlJlv(Wk%%dy<}@JsKy0wd<_+2^WE8RUujOnuH2cNww}x86c&vfPWU-~2B&rHy*q--jfbpx+ zPb9Q+4x*qK1|mWL;(OAm`o=XWwl1meu4F;X*B61%^d!Xb5EuENQkijGKVP-{uv<453`cCs|D@u+uE-+7I_gS}&;MqT5kRl}y$pMQ2g9b2vM)z&v8{^ktELj^|| zXpS2h$!1e}L**6yVv(vRan|drFAAr@iDI4*qex?Rxyd!H-n79SD>v*hG8mQ7`O6|e z|Ki7uxUAP9-_abJS9Nx>x;mx6dycP?IWKjJBwZRx_(vCWOn=y#%NSYtRo2WZ*vMe8 zaUFPn- zmxmnK4hcLNV!sOyre^);kaXbmV&iemch^E%sT)ybZ9sB!s zqtp}C%I^!#JnCp}U66r2KyXr?BPZb3=}(*g-D#O z1vJ!C`dyx@s%eHw)Bcsk3Sx5jfdz5$Li-ejW{T2cwjx#L&A_ja8FK4BolgF0H6z&f zVwKW=@1!h)5zEsPklJafxJ>aY@$&Ytji>wd%Gm$0A0}6)yKm=|g2y9Olxkj}l}v;d zKOerh7*mFR6rt$1YgH9k0019p5mXw!#lT+V1m=$6>V?)*^#GD^-L?#*bZ7rCp62)E zKl!yMYQYJE-=bq|L(t)(fbbitgH~FEysyF_KbpcdjlCS~mv?bw>dr>WWmgR01dd-! zcp5=#!Yx(NhV9Jt-BxIZJ~WgfcmUwKKyTNdwxRPH##9^kMUXpZro!oexQ#3TxO@-Y z7|R{fqmKOnBoDP|Q#kVELDnwQxUfW6_BsQ$k_F@*ZF@2K4^t*xj~?*L4lx|a=DN_1 zNH_QHi$`Rf{3Q0@d+fF|D2m81+Yi#>N>A2AMgyxi-2rvykAW&lU*jMPN zCIk?i49~fW=e#HvPE)`%+1Im;;p*zF@|@MeFRf9uSf&-^Ra{0fj4X(BFlN}z`CY)e z*!QlqOqesLGL(Ke(sLmnwLE7R`7z79bQ`I}B`Hf$B+omvaK88~wc@{xS0We1d33(y-sytqDI99;u6hFYnR$G?jE$lL=EX*yKQ8@$+qA`3`puI@f~)SPdu_Wf z-7y8r(D?t$&zYk-R&9#HixjB!yA$%WBJY~Sm(g?CcX#vRA$?mHtX5psZ%2626K*FS za*0@J<5{dVIJh2?>zsCWmTNTYIwM7%O&X_lA~=f#X$=YN-!gdQH(76*sGJRrvAXM~ zEDNomKh#|Ny?(_W1p#P~>9&%R?N~YDl4rj5qL9&8-mVJ(;%fjo)M+@+8%VgznoO?M zI?XS^NJb24dzU19!?-v&o&fh0=FLv&AG%~94Ifg+KWFaBm|MCu2Y*6knMG-NTH9sO zBuI^#^iB;`eMxe^u*hfix%b-Mt~U2oN`H26K+vtIcY==Gzg=*NTJPcgiW)10n6v>H z|MeKVDvU;8h=4}hvpT@qib7Zx4>Lt5Xfm!Z%8m1T?W=v^xJR%K^pI&`#yi!}%zGRm zq(vBrM=Nh$WpH$KwY7~RARu6HT+*rlRy6A_tlIM$OQT6b(OrDJOYOJ_h`cfR>`O5800$E;OE1Glvt|L(C_YWEY4xkib@1XyVSfn~KmR5!_ zvrt|4r~L^zCm&{1TDux zJYy^cb56U>l{MjfchSM4Tj%QMoG_#355DNhl|eV7It6&|(>K?s5H*y_ay~U$;V1x7 z?^NcsdS^r0BE!BXxU)(XKSzKfRSAmK>=g+W4r({UQP6j1c<|FttHyltTzx*aQRTO$ z0A*9ANJzdQ4$9cT;QzX%-Z2UMQJQZ}!1 zq^WXj9K&-cZdqhmUs$cVLTT%Zr;rF>fpagf`sbT^=bfia(D$F$*Zjt?TAcTe$q@O3 z_WbC`Vqo%(yq)+~MK&`B#kQGu34F7lp?$o67{~UWH>-wfN^ur$y*;zT@G*6$?=tQ6lf(zwb$y<`$Ms@ldYdr_>|PT88G+&-$O3?+hdwC{U?PM^Rgc# zxeS6sBN1dHOrp1-fb*S$21iGW#2LhD({@4=ya|3V`6THY?2Cjb!9T;e&z_c_M@pYJ z4B()I6ud#e4ZI`29|voOJ3h0LTmNtNG{+lIz>Am76yWo|`tmx8#1n4ox)&trUKQ-~jO%{-Vh9e`m>DMrr_j38THeK~ z;}U+)#{^(E*A|cl)9h+=ZN7Ja*naTxLOX@PBuj*GQh$XQJ#@EKu?=%^Du8N7bZQph z#!*fxrs1I6MsEJhg2=R~FZ4OjB2_p0%hi<=5@yTg^F{Xy4ZhdrCej*zety z{sUMZ?Cuwx-6}-acn&N&#G=+LFl#p2dVSZ?8v8r3e308-@}0 zm)xAfvX%$GIMD*6zg0l~gWMn=yQa}Wwa~E$wiMZ1QP#B{X6C)!wrSxkr$4&nCkI&C z`T07Ur@J!H+_7>691)-w<~>t!j1c?6O?4ECw4rQhZHhZ%X#?>@`)2*E9^B*8MFwz{5djC!X9m%{&EUkxy=GT%x(ZhN^z zwtkyA+Rt~LOZeG0um=w>!S}yz`mQ0lDe)vA4uPrG%CSB1Bw|UPi8Toui0Llr=RB`d~iwbxh$=iDlH9z1> z+qQS)9YXE?bdOe3AxP$E|91hsuCtoIvRW_ZOxSm#`f9-0(ePgim;-je7LLq-O00zU z%kP4S0^STD_2~<=qWWzHzYq|i7-i4|4<+7RpRK4UyYte&R?k17#&+rH<%ZENTk95#NUWrW*qvCK~Ch1>FNm>&&Le*N$jXj!9J38^q>mgT#}9> z;_2#YCokJ1YR9f#=@xM+!wc%esDgSmTx{>7uP^C#-2F5rjT;x6X?rXxOkYJ%vA+*T zv2HTu%cxs~!%7=B9y|Rz^B-i{{}X6~eZ`GTT@JcrIM(m6DKSy?014}~BC;|cFmmr!``VRXD>QIOokb@LJKU{veM0r$&?g;N2BO8ylg+=N3**eYqygD853mEK0 z67@LDxJT0|V)SN?k!&_WCy8-SPr!v0{sP!`)WLF{L&!Gl_sxdi zZSV%C3S*!Hv<$s+YhpnAH>UfDwi}K(x*#4 zU8P$TWWJo@U5v5vH`;dt#iANgUt1`FFdZ)hiMXP6EsQb|qDhHviOP;G080WWg?IT@ z@5TeWKLLs?jYnE`ea_rvNmKWtgHg4o7`%CrFl5e@oIt@WP-~RBW5I*Vp%-OU(bX`g~lYz^ssDnOJ$h1Jp8x=$-mT zEE>F2Jo8iXgx4_j_~c|POOIpnGdQI(r8f4TSmL%fO81e@B^ScYN;RPy+J(u3xCf)D zePV<9Ii`xFc$bS8_*6?{w`50KV6w}o|HuNY!VJv2!R%_jvqxyMcn($bw1Q0*R}7u$ zyVt(aV_FNPO|!OP`gX&*d3B36X5hE%D1nw>ihB-(9;ws^@qYK94aC8wd4w7PxycTR z=q&`W+rbbKLP^%f`XwL{QK;c9Pygl2z^1-&wwhD!t~%v&s8_qPX+aD z5B^n=QO&%L@z0mnywU<1pZDky=J$O*Zm&oFm4)5!Un%jYPz+yIDGRME!RKMv&$jZs zhyUxzUaz=5;%zF1KHE@#w|mTQQvI;}$=oG_fyo5I7bLvurjO2-isI)~^vmo=Uy1*W9|T=E z^#iMCL|n;BUe&?sXY?|UqOZe`yW-#%FDy2YMb%eQs4$M@E_|gk%a@E)dvyB#-evzKETzgLAwrUSvX<-=3l^t#9+cvk= zcTY!w?-?8F?`fcVwg%h; z|0a~x=RwrDNwHv|Q26Ma6xV^$Qv}_MgBxu5RBgbNP-37kYu`%@KI_f77|(V}efZXa zOiM}MIx}zQfP4_C{Hj@g7eygaThUb+Wncu?&-sec{7G4HTohuNH2d<$x=&WfBQdO`1glgg_v;LvVL@3n93>yABS6L$E-w;64!CeQ>wIHMj;3E`h;0^X>k-d#>kV zZu;$~yQ;b>xr%0)p8O=bQn{~ge#f{QJR&RR9-;i<_uJk_a-oT16*A?{o^zKkjIH3N zk?zMsYC{A4)j#5KTd|ny6G1l{i|TCq>fk_P#5yg9i@&W7hzkynx3L;k`08&#{}V}n z>%)orXu{(4+~fDbFx-uNdS)x^?Ea*#A>1h3GtMmER^c-qFt2t5B-`% zsu^zKu9)11ek$FuFi&=$9#=1u%K6wlyi zn5b0ll(nDnocUX}^yDcluT2NCp2J|Bn+o2q0$KpFMZg-{;~pFEX!A|9rd5;Dd{u~3 z60ugepfQ3j=U0lPpqlsOf4+NnQXGR$+Nc(09wZFerj;1*MYGVG0%?9CVyIbbNy?OBI!o6`Sc4PKY?wt!>-$W_ch9w>9U57 zI~KKR@_Lf*=+C@;py7p79SM|g4*|zN**~^K+;(I^n(a8{Xbfur9dbtobS8fYZ@-;@ z?iPwaE7u3lRO5yf(D}2dDykM6%gXU3dy&?rTIBUj+me)sGPEL+4 z4PKz-ZQeL-`V7V?)hlLPEekeX8$o_rzvm`8pjvw?v} ze)U6@I#Y;C#8%-*^t_n>V-|*xCQ{RT(*Cnxjewf+H^2doo`v~2Cfpeu*EV!Ni}T_} z9@@%S^d4m{$FY2=p!IxdoqovTnO)DA7a$>w;Yi=@6ATP!)>~QIJvw4qTwKsQy9X|= z0{UP-W%dMj+XL&D!0fK!5&{@q=Uz!_%3fyBx^`;;H^ZC0kvH_+isMlb zc=ARjy3n$akK|iRpr-_Rw|LV@T`&K7S45Z>Q}F3TRwbK>xzlFFk^ynAGmAOi-R-_o zJ_8|fyP}+g5-L_*uv9>=%qFd+x=I%AFS#h%o9p9tUPt-;X)bMPt_x3=gLuM8pATG) zn^fol%g6_S?yS+3CJyU{)LxE_70@x_PB914QNq?YC^0<6g6P|g z49+SBCHBMJ^`g%G67|8`z8^6MSE0^6yil?XmF}XA-){>dqxqe#|5;3rs=Qu3#dj{b z#h;8iZhH%Gul`8M5Qom#qxiqnxg*MPicamFItwd_otLyD|D#O$cj>_fG${exQLC^W zbec^K(KG;#|N6rKY#Bluv;4)Qr%At?KpLhHP`cZKJBEjW_x)FiO$)f?%fbG8r<$4u z)po^&&Y=WYd#Y%N!KWh{NxdMg!K_p30gEM&siHu-hWh+pnFvwFZrxigiYQqFIhLHyU?< z?n$7+%IXU6OG+7fH}CjWYKTIgCbFgmYm{w#F`rB(+ei;~;rkY1R;howVn7p&kEdIz zjhX;oTLvdo-$Re{b{5C#2u^lZs}r(u{Z;+7TwXQ&3t5DjU8y8qqu=amO52VU*nfrq z-Am!A@nQ5KDgfru-~G z`!BQRU;1xS!8-!GS42$INX6El1zc=Hq#?x_SritQjgc;I^fpQAT{-md%;2;iyz?uP zlKf+D!r>cTr?i1TfBXLOvPS@6wZ|~03eEW! zUyL_dyciLeV;=17_ZqUPZYv7rYMmzX3im<{%DL_T(E>yqRCmomH2Is>;dMcH#a^b5 zVj;hY%5U#~KA~_}!Y3zxARUi>hhPho61)0iqieW~jQU6~d*9P;EX$YVtGM}Rsl53P z81(X%z?p?{GxyCuz)0XW>>9}yoQ^QT6Jc&=m89}AKZh8&RZt*v)_xAR?6^|%|7{7H z-f`3nI_00LpaR@g6;JKnq563Ft3gjSQM_6n{jcCF9ad=Z`EOdFit{;CHsvcf`arf!Lk^mN{it_k$cCKgRRGLvH-Ngwj>f6Qrxe3QrSzng`fG9@V} zG!}f=gl3RYocsQ=*f^^(U`dB7wP(*;G3lvA(7h?*m3+rbX-yF`oa3c{83x5k_%4Zb z^TS5CKkAQS*E-g1p}&-HSJ_0~dMHNXFRs}nVp>SYyeMn639bV9x+F4qrl*J2cYZfTIQa`6iH_4X%`b~!}+S;qQa zMB2LXY32>9lCY-Xn81$iR@O+!jba^%x;#-kyYGL0XX71k&PTML!U zFmB&Kn!;xIOykXBG$5rv53onb*X67d3X}PbEE*N=kI$1(tx^h2(^4J2V~@Hu*Us-a zfllQ%c0+cdHtaW8%Q2An&K>YtLy*vOgzvY4<+F)L2RCn`uW$(`?x}JQ&XnPP-!(r<*K5ZuST+MxUA!RpKN=OtAp&t7A$aF) zF8lMqRNH5{DL+dyr7gb7sf6o-h?UYBy~k+KMBv5oX?{j6@%%mzd9y~nTr(X6G6Mio zNOWq{4fMBA>4$_%7ws!AC9+}*epWbz)_2QUI*i|uihPnMlw6{;FRWg9TK`d{2 zjql`-Z#ro^78ZZZc0b_n*10jBC}K*Xp*Bcm9s3yH#|Qdo&B6Jm%{7D)m6DPY-nXcI z&LQ060W%TfkB2t?dZ)HaQgKx5DcsjBRLA8v)FH@Y^~LIC`}gw|{FqRXyVtAhd8_m0 z=JToh7)?(7?z4eH1?bErLNupc{IR`TT==bOv_(jlOuOO?Ajj=W#^k3hieyWp$1>n8 zr=Nk}-E9EyV!2`JvL@FjBHTKOe|$`zW(y^b;-G9$X0md9cl&{ALO#b@ zohbNXmhV$vWQtc7L26nZ{t;McrwTuTQ(BJ3XgVKUw0)xp?|@zGFe=M0XZ_76{$V?S zAQd`gz#_G@9+u}+Fg%g>9N{+^>6TK1wh`ckR2HnjHl9j8ri$QRRg`0OQpm{9&)3q{ zFtG{U);Mbm;H>PKIys|T3%9S5a_E@+dqVh#G3f%i^uZuo z?O%h*v1xzmpPv1S6upT?80O)iCpfAs<@OmLMywbeW!G6LnBqezQhG>~rHW%co^AFk zz8mjBFa)_>_TgwA!;&~JmGcj~*9!e?{K5%x??ts!m6P_Cdvxhj+A^Cxhc5ccZ%;0I zWhbampS;vplqsqz1Dd{cUCyWVXkG_F$u#J4kd01H*m&Yss$&$W7`e z4eF?)vQZ50L>a=w|{Ef+&$3{Nmu#D;{6Xo zH4zxvt6(u~>_%O^>;X^il>or`OK~K1;N2tn_5|jJOaZy0s#K)wsD7#r-~HXW$ml|o zLpb&&0W2UjCU!oQ!aMQA!Hps6*rd?t{RZ= zK;IJlkb_dWT2WAp;+jHGh=W(k(x45mm6w@cKJ7Fq!_-D}K#e=n4?QFdTy3hlo%1Rg zwiiCC-`1`wPW6h2JlkQdCTwbK6+I5ywCVCebY^T;puhwdBaaygP}d@c~o-{yQKyHQ?t}ZvcR*xe^MsgPbjTMyzAu` zfxYEK+JH7_;tn)9O=1*9qHt8VK{r7TyXdGHE(>nEl}tG>}CcYngB=V2ma z(-D-FQY+!HTD{59TYR0gv{qQ*F^`R{tsOG93p3iKCKxC<0d+v%o8UxcfKwZE->LHj z^0ifLc^qO?_|mh9ET;N!Q81_6whl>m=2*++VmKoTiIWJqcX3YQ2%6ro-NUU&kZ2B3 zn&ghl!(|mO{0;bgCi3F|dSfw-(_+tI(ttLz65_qKFUXvW)BzW< zG-Hhm=76Eeg?Bpa;)CA_02L8a@GooT-aVcZbg6Lqpmq7U)ni;T}x!CyCeQFOjP_tEb80 zKDRs+&nE?i%T9piOx~ACm9Dh*xKp%Le98!_sdlD|_`oLxmKvv%7v(5)iic^KBk`+8 z?G!2&)xS%zWgvM|J0v7KoSi5pnybxY(} zp9afh*ePBYKLfAs-KQ@9!4tcd^~kexOA^qTbu&}mZPwNH)Q!k>`C25DRGVz|+>sx- zBBa0Ec*X-F;0Cp)U>1pE>9&07Ss8S3`S2>%sG%_^i7gz1T$NX>Vp&|-KW5X$=K*sW zw%stB?t+cMmIa1ZBIGXOmgJAq;pYO2B0t{D=?m#0FVwezCvH;k*jQLy1FVXiE$Zi; zlJ;7U7L6F%3x+*J+hcnNBIId{XDT^4*Ujy{VwO8`PQ*pVUiuppr(!kAv?8gcX`?th zeQ#*p6jL6rdez_i%Zb}fC;b@_N(wv{`=OUDtuJ9KZ;@d+k5ot8F^2T%dQa}hV%gUV zwN^a;1(MSoPvuxQ(V)g!#|uIhNpzteNu?H$ zb6AX_W-Q;YJib0l^6&fRC-={*7I$0CGR^M>>-AvjW>Peq+iwNB>l^r2 zH8{f%r&j8rG(ruH-pA2r?MbB(?&`{1TMH$&p;Xx9R&dm!_#qD*9y!CuhImkau?LyD z*u74x(3Cy%WXfBI-c0J=s zf67o}1%mR>W;6mLr?tAU??&aU_k*1+km-BF*S|QSyH<^^fkb0e6k(}N1Apd9^jdvW zU_ueY4S^B=YpNR1I%KAdI%aXGj81DCgy3bH@0k6FdrRM%bT_L7fYSGO(tHn)X`gSl zQ0Pfyv`W|v2u3z-7(=Dx* zr$hu5geLjUo17U=ru;MSVbZJyu)w*u`Q*%nuvYqmHt#bRf9L^g+_?hsw-ySApE*UQ ztOloii#pmZ-WE|~{AqgnCKeWc->ST_c*ffHat;EPI#(&%`RH76Z_I#+13Zu;MMeIM zW#QhwuSED5Q}r$`5hG=EDfUvNvIDL>jUV9qqqWuL*nesk#~`*MZ1H$jPr0`%rj*^^ z%Ks>0P5x4Qurh9mzVdTe=x=WWmuGWWTLJ=lQB}MeTsF%&l~4|V&BXV6%3k!zI*=Xh z@vK0w=^IU%8HX;5-h!FmG2NJgO^eswv16s7Wl87P)BC_NBOKx{$yPsa%*=hRhpP>F$cxd}=s7UE9Lwh@Q=we zTZMx``_%LB1;Oifv-?5LwPwZt|7v^5s+Y}k%7lD*GFSl@sv?TRrN{+@fk;`fabD7A z0`rijo4gjOJH%1(7I3iN-Naj<$NJ`s_95VCXt1!a@1A7Lt#$aOjKQqgR)q$iV#hkX z&MD)R$*npT^06U=<9R|;7*gFYKH(~Y@4}c9wYI-fW!jIU@FD*y?c4qo65Izdq|-vPbJJH zf;?hMyvh$KtRMZ&s?5Hgvg~9O(Jly+B?@f!fJE0>hlbGg_Ha2W#}R0COp_Ju%X;V1 zB~yU#Edi)!F~L4%e*VXeuH5Knjk{j;tc`Q%7OcX0qgM~e2LuGIjg14dE5r`4G>Fqi zI~$^f75F7Uj+e1w7u6h?BZ`^x=5tEaAG$d|x+S1(1fndIBM4TJ8TfM8K!EMGq{7GM zm?E8qRcJsS`_*5>_t^Jvq-&XdT74{KbT?%+>qyB)XVR=K}%)ue!c9M8u-&m{B z5O=nko{6Z&Uk)qayJ;(035#6e)Y;pj&ihJdr$Og-MNebo@Uh9Fy|5ovr`LT8_}Al+ zV)?Y8UJ#jFVAB-WKuLLonM%NBU$Eox%AMKedF9>b%fidXEJM43rox+C4&obF44jnQ#$?kA?s*coMRkcj73llyh{IXPg^yf!nc_|0#iD>Ub^ zR2yL!of3q!P~X@wSrc>=e_tSLLg;0_S;LP4{`-FAI~H& z>QQTuy?7#X3h0TF<(+lri{Y(s-4HgBk1x!Im{Ptvlzztg27&mz z&J;XRsEAMeNs(czTrbSfEXx`_^Zbq!0yAF`Kf3>_bIf~tx-5+iF&?&-hl>akj)J4f zK=}P2j6BetIjVy2gNp0YdEhMM)2~OjI_aOe9CLyY?M!UFv7uXxwA9p=TJO+`u`w2B z$J)Bi3FQ**hvb|uSF{t87!-i#IQUQmDrsZdv1z_)|+OgptQngKZiFOsKn z-)X#JnV>0LINE>_D|OZ8HFXbzEH#NSl*$W3_ewbKO(^e2rX(_Z@`>5LPYP>?FU*~T zv^>}IQ7UD}sY<(o`=%&z%PWTF?(V1-`Rg*O4xD@x0wC5u?)vK~d!L6dDhhailEYz;J*a_M*JL`m+ULaupXE3~@iz?Kv!Bo81EfgjQE>P|IJW4aKbvObzgoV*5 zgqLD=*vi*Py*DmRTc5&rsrn*hmqO$clt?VYL##v$^TM2)V_{{xnpJ=)hFgZ+`C(Zj zO{0i@(97~x;S7MXMl92AC+d&CbQHm;NKe1$p8MDeFnw{Eli(%HfoA26K8MnaeOyBr zxfQB&1RI-3a1`lz(dSzEVVzZ?A_74_#06flDa3se{fbLk9emrIb2SDmtA-xq$@iL# zg(iw(--B8LpH*Xq{F zsmt15Xe%8SsR(S>!bwj%GV#VG^p^dBu2{dC+?czD#XReg8E9#|+*Lo_U8`=D*-YFH z0drQ|tH!0Dw534o(2g@^S(DDTy>f7nPgN%Nqjq(#4fif$XP0Ge!B))zioaEk--=ST zp+#|{k#K&cEbZTMqAEuy>&A%tm`nsqv;Tg)irY~i_JY1Oo&MAAKnCxx-~Kc5`Qyl_JM+~Jc>~aRUX9-u-)pYVPPN`Sjn)#YYjC#7@jeD;Nk(Jh zPHRY*<DsPjje9lp3{g#5nU^a3O4XvRZGj>-yG!r6L+-8w`fbJ#pEhAnC_%UfHTRn zcX_bnr+N2oXv40z$r0TkY3a9qE894t{A#gjBb6NBNgjP zlcvXCYH4yhX8&$o?F_Wf}~9S{6H%9Z=H z28$wNbj7`_URjC4gnqaz3sNYn1AL; zp?_*my1F@FzqszcBN6etnhpN;baF!Yy3Xz&Ed9;8oiFI$P~SfbMHeGg*#gP)NSZJ# z%q6O*V*9oXy(mPdL7t%}--^%>L(e_(y3I7NhS=k&mYN%#%di5M;7xnEw#7#|>>&t5 z&~^JwLxX$AUEj4~w_CUZ$+7>#_+qQGQ-aO}nN5?R0qS#rguA%PZaf(5gdHr_Hw~riS*5~4jEoIztlX0(asVr2@a<&G zI2Py&D@MXe!yg8*QuMdNR`N!2Ro5TRSw<_pQKv&Ns< z_;8<_(QSXj{v{$5q>5W)0x>^vS+&@Q*RzsSqRn$V7IdH73k{2W{65HOg{@*2o)G1i zyjfJ(nM#X%BME$uFQ0eNAeV4UpnrxeXuLam8L&W?$4)vj$RrOEl(x{9Bbl$R8poIR zE8YWn{YG56@;`gb;EJ<@94E84|?coTVmBENcj!w&Ub&54N*+IKK)X$t{!2+wRg2cEBH*dpWIoyHV_ zm0sr0{i8I}2vCfJZq`xmqbPjR|BPts7QW^D09#Y1I=wS;Uk5k0RLFx|;ez?Iv|b*& zUpqVYSb-Xt(e(cm{*1TcAIC2@y}so zjmTdmogM9X^Y8nJElM>j#!uI!9sFaiVM>CBUyKX;(9i&0SP+>#)i#&f5=tCgd1Sta9*l{Y+AMYeM&ob0nl?L?_!(IprY^mZej-h zU06El4ij$YCn6?B9eqI^{u!Yb7K)7a7kZ z(oZm%dk}TJSVoJw>GedoGeM_@`@RwD*iN>(UJ%+7{{@Z|nqCJpAQzPe9qjT!beH~k z=)#PpAFjBfnVDItV6-E6(0Zytc!J9f#pCfrF<*e{`#VpdqI<`N7Vtc4zvr@(w9EbL zpUxdk2fRoaG|lzqiYGcfT~Z-t4H3Azi64Zmu)|34exvB{=pY}&vsbteK3iFDf$nH* zjFRDEBkykucUgvuT_E>sBXjoO3JxLS@PeH_wI*t|v+13mfs=j0#yIC~P$==%x_0hQ zq? zUZ{dzgYE_5#V)CQx*Wb@L$JheEu42yf-Y8xC@@Djr2io({?)aXsW^u`;K@SEA&MCv ziT+IRUP%UJ{wcOruyd}!#kf^z`ff%~ za11B9lm?k7CysAJfhO;rkWCgp;-4VgY`YCHzdy?s>lxXT>GJ-Ka4zCu`!)oTrIFbG z4kUa($9$mY;Cy*QLXc6;OQg^Sip&6av~-Nq8~bCy`Z0#<(==sy%Fz!uezOaZmEUY$ zG!~$^+pkAoNL0&(vFDqZ_3=qtnH~7zf{m&kp4y<4-j1C?$ga2O@r$6I`6jVW5;KwTG|l_c>ZeEPXZG zw~~POw(aB-*x7dSYD$BD$|txzDzKL~{IxM>kq2xbAA#D#k3ZUF8!bClLf}rq`)vQC z1wdzOvmCV_b#p}wsBKvjyaSD9gz;wpL{T&*520zGHy3W!!Y zbJg&$>QJ10+h$Mp6h*Vgd&k1uczfV5W;JSGVQ5nw16^^)Dq2sKGy!5shP-lhdu_Iq zhp%bgnzWe2Pb>@P;1yJWAK(FPFk#x0%Ng8$G?% z?RfG4Q0}X2cP|>d(HY`J{<{AZv?DI}(Qk92uMgLiG+YYpf0KXo8^}AEQ0W9Nv%fxb zqa*o>iZ(>rTn}5}n2le0un^0Vb~(K?r^AI-Z`#;?O<`jXAUy0!SfbC%hyQ66Jfk4l zxf+b_@V=rUVP^iP4hC;LUsPn|W14%QT{yHS@iDa7ek+^X7cv(vO|bQmxD` z5dteh*SNnf`ga)}CyR|U;Ql3ls}^N3RDrX`3;xDk!Qax_sU*fJNn`8Vkmv&aOS4(W zF=aEEv$s3JEW#0#{5%mU{{{wZ94jcmyaco2C~O{<$Y39YqGd#|?fzFBJtt1SO{3tt zrdM|S6}!>fTYTnY*gaWgLmhZ<;T8iHh2jWYXszjHW3H*oExg z0ki9GBqhoMZ+++-dgL2?U7pK%hZ(ezGM_`Hf`qJ>vLYE2CKM7En6K#ZULTebs&{!^?b zeuzdH$|If2iCvuXU}Nh+>c^UM;WM9H-xsc+i$lh%wb@ebyNmYj96t=!Fq5CnShgF6 zo4Y1K56mL2M}5KXp5prb?#nQ{lSCVKKB=i*MI1f^nRNIk{X;iARm2B^Nca~~RumHl zIu1mkm+`L$6x$cSTWkG3{+o7qi?yA_lbCL{IgapFVV;2eg6gL{eC%iVctgbq@PKJ` z2s_l@8E#h3jKB;9Adl|r){c-mcv6lP?M|!qY1Y;aQfC2sMaS+NY+7AjM1+rz|Diu^ zU>vz^*FaR6C~4-BY=Mw6ZMkZ!MIr+wr<%#k`_Qf}#EU*D()UvK4#4N$sta8HL$MZV z`+#->zQH~?1VuC8^E~gMP>*+2Z(Ugci&K?GtOfg8de!2;0N%@OBt9X74*S_@c@|-x z&zUwIUQTiMe_UTWV@v7q_?m&WcHd5UXves&Sm>2BW<}`7xMq2ZlDwAefQKGJj=;9p zrnyG6hB*woR3MJB^}73R>uEn=HR~eeG*zbNBLEX*U|5mPw#%15$rT~+{Q)UQ6X$4x zIJS=1qQPSPB*${U2Ny=~bJf{o4}A)SMX+jHRB}ptQ6RPxym_1S@*o!dj+L?yIa-#s zo75_HE5wrG(4Bx0+oSeOp_qPb(D!U}tGRGG(MkWWAyVF>zQS;2N<%6pCH|hKwJU6k z9M9y%x%&#kxIQc7q4ryt@E{;OoUk?urJ!1jVQb{aTr%98uX+|5g?2c-Uuy?YT^Y*8 zb!kXy94kb#v)f)b(zkdr;~v{>=AG|f(6-)mqU_z%eV!LSM2!e|M)@lf%q0URa#d;$ zVGM|h2X_}>oiG|Xl}&a&0%?jE7i+Opt)_dEX9h;Vfl;j z)8d`ol90;xtU|b<<(9vF+kCUvUflqRG$UEpXPUb*Jr`U z+!i=mcjhOua=i}slqDNe?6!&XVrZ`SFVxrLnC1=up5T*Ktr>|H1f z=Z=N}Ci>!xU1_%u?+zt?8GW3EOI|Dc=@T{fDQwnWimu4xHT6Q3?XwlSe){lkK_30Z zxTr-i+MdxJD+F~yof3bsbUuOokJ%81M{<)WHpl2d`sZX6`GALybm#_V!>-zFQp9_n z7xcf!Q{4AKmxK{`J()S*9e29cr4faFMW)hAcVEFzc*HSa+Ra6LGyigHK!S`^(1pS7 z@H$eL4Ee<>@iLahw+<(Y9)4<2IKxi-+DsAa(pM)R_0&cjR}sM1>1~wLs|Sf@+RK}u zT!=7j4T;J!I=r95eM61O)=bGHOiohen?ezEE=_8b{=QqnSz~v>4d4?SbUPw$>FU{k zA8X|eF*w@`-F*H$1R?I7y0;=+&{xjs{G7T+Dqf$qJ7ve8e2`jo%E#W}krDrVTkv!Q zAvbfi1N6MS$y=_x{EgY2(hUW6XHm=UzpNen_l13XX+r|zoYAkG)3$4~A=7!F$izFQkS-tll+6h0|6Sa%+KJB)CdlE6vBV2YicK5)5 zoG}uTHCPl-)w;Ftn5_+wU}_^ut$5Jc8r!Zlfg=Gy5dsQ|e>;xa&Ie@apKE7bgwRA~ zDIHOYL8Gih`zm>`+E4YGX~LShOvl-DTMn`LLf&O>2Z9%1R zRKl#a?v@oa#5V5r9J{BCT+jpl^))I1;ZfBzUWJGWAVKvvESyWQdI4ya6%DgRm1m}z z5JG&iS3V{(@VB2N4SJpKDGkd%+x`@@DQl!5n3d=@HPBMNUNPl_@YF=aRfu4~v)M9v8OGS7c@RT;N3TIs3dvED`ASfA~rM1YU9m6; zOQI+IlfF4yt_`cXdKOou<}bR3G8-!PsWfg!jcFa{Tg~}0#6C3VlV2DsAuZo+Cmu|P zXL}{U>XaFomX4K!Gt}So3=9rdz!fYoH};1IA-(pA&zbcrPOx-JRX~_U?A3Vewg36$ zqX1t(Izu(Ol#*-gbZ6jB$3ER=3{q)rJ9@i8e4l+$yQ=9QOUC0Iz=D@{Yg^sG)ua%! zuz{n8P~&w>4vU4b((;J=ODnigPp5ZXN!Q+Q(H!M`ri{~~twtt%J+ffn46P|Ai&f-T zL1|hG?^$`x4h>!PfMz+TT$L1fBYYKHCp2*>G%-TA(_o=^mSJjMEK{UL8&@Fa5}644 zPO?reiO3{&huYtc%#)WG)%9_;DvYTb1&n!k=VgC~%`nqUh6M~61Op&I3!OKw!+kB3K>GFn`bRsf;- zs*jP99km1WBCN#=XrJaK>}WuUT~FAvB_e&@8fD||#>NFQ&5y3RQC&zgF$Pc+C@WWt zKH<#S{6P>%qw88ifktnio$Xj+Y#IKgF#QbSCo*IVKcw<%E&g-%REZaRyLOAGA0dNI zr~{;7;VR?x4nai>7$wroAhd+u&XIuGs*;}q#&UADU-B?hfH#|ru?hEk|@#6rv6!|2~it+Q=|BgCUgO~j$D>G zbmm^OrCjf~PK2Rlnx!;&N3pQ%74F9Kj->upkWUZHC)dL)Zk1I;~yc z5#JK&)C0?WqouFAKia`-(5X1|6i`r86jeSARrLVPd>Bk{sa~TB&@AP1_@&QFyyIza z;Yn=aSzbka;~QS6O<6XiX^*FftyZJMF&{?5CHi(YEeJT4V-)V6J@8R;mF-s~(#32? zc9r@faq`?#idwJ{%STg9gdLt*I;|0_5%xVF9@~TC61I-$6hH7u`SN9tjNP~GYZhcO zYzKMh+iuymeJHw+3oBwA+h1iO?e52|PHW6Q);^y1$q&f~vrdxC)XgI1uA*E-b^}%S ziD`P{!(EmPI#BzaQg*dcWIyUXUE<2Lcg{P1vaUejD<~`J@S9nyjXg1ja|NCX@Lp-5 zA{c5p2@i`w%Qz@dBoZ49RPZxmb4g}ggF$y!pbr50E0L1Z$hzY3Z2&IZH@6DBQ(c1U zs;lE}=o`CK9HRbq;~>oQpq)-hq`<5`{jr-p-k1B5uAcDYvB`6q{%0upKICQFfY2E! z@7^tTFGY#m@5tj7dUSO}H&&7LEEKrQJmncwLB}bFjRR48ZO}`d`(tV8voXcU&9nbG z;{IMv>?+}Wx8`ZD+5KV*ecoP|lq;+?LhkE&saQzaKS~T{nLufyK z2&fLOGsUI1kRW|%`8bRuky<@23KXdW{Co>cQr_O21Vum2nM!Y#4@#J$)0Iz`YQn)x z%S@+0otAnl3bSw3&e2yLvP2$tH7d^>ui82xOZS;`Qp3vgnX> zFPC%hiirxBD~76YcXG%$w8?48wY}^PdHhtgjNB;|zBDBamN(sLLc^Wj)!-w>Yz(=2 z6LyxbM6*(WW^V3bMMa*6EadXdY~JbQE5Pc*I#MVx!`#--Fa@s0Ppty4HM9{)aK`#1 z$uehucJwnIdb$_l1JKAAZWu*7_71@799D9F{e{g(HIIpdJ;zj<5P>mXV=FdDKUvjV z&_Gslx|jZJ7EAT=4i=w%;)Y=+>Sm1#fdRMV`m3oDJlhMDHI9p0-|mSW)5`r$$*D(E zMhjNb_Q{-QSY7>pq$j%HR~I?Q(%6y^Ea{pBUk8xo0 z_nO9?xig!EWY-R%)0f2{O%G2uj~={BXLvDTA~Skh2p^*8UtEhxqz=*#NMxCJv^$q3 zZe((#UX$xm^hlMBkOxb}j!uJZ?1nIiz%6|n`)^Vh;2Zof)d6Kj?Ra7v0mA7bB{?>0 zYsSC(j_`~PyI`VCEtu$HRs`tZ+D>cxZi|d4UtX$8uZVX&Uu-!~Y$k6-0e3mub~@dO zQ;Z)bsEr=gjTQLb_Ok5y#+Apk9V_ZM(NtE!Z6AStv6`9yP|Nb0K{h&!e5~aNLs3S|fP1sT`FEpZ{EU zbs(&G5-et`ff{RCv?oA)B`cHJ$KQ#x(feziJl#{djjr zx}K&N=bUl%e25y?QC3tFicW+z;^_L#OHQ*cx@eyor9EGFPzLHStc4E(P3pr9u;UVn=am=2gGnDpo9 zs@&WSimRUinaGH^9}#z758B8z#K@CgN@I3|P?SkAx`muIEPW=U)2jcGon1Q$!ts2E zi5$^3dxbaM*l+Y{aes{oRDu;__#XtV%2UD^_>97VsX_ga=$**AIw4F^j}Xk)rB&}^ zgLCUCP*mOv#(yv{Zz9=5k^(32H?ysMDY1-QZ20V58eL@<@aa8Lk6iXt`$1BYZ-rqJ z^7nTJSc{1MzdrF>sM@incw!@mm|XtpD}1@9mR7GwthO{uVy;ip3BEH^BxC{ zWepskAoK-Bc5rhwL|2SH644^_#o-A~X`jNE18;A&SXhO!@p^?kZ8a zX%+(94*@1;$Rjga?XBvVTqa+Ilo77040 zKDV~7CrUKy8mCs`o^5>m#69G)__OorZ+v&O`!Vy=NCCai@B1;9&9%aHx%PGnKVcpq z0I9tlk0h1}xFI;zzHwu}0o{0PeLM>oACFNh8|Y=C|1XARMJ~6Sk#1kkP@!mT^o6-M zT$nSK=oC<{q)uBYkGr)KLb{W2NYYS&P9R8Fr<^D+FAGj_lX;`x$~FvhMkk*`LyBZXZM(YV=fc6bQ?fb1ah|HFw}?GKo$4 z#6Zwwq<|qV(keq6Az92!+!ZKYa5=r>oZYX+j{C+LCv`X^doTmizzE) zsPxUOU36l?^{Z2-9CO9m9G}_)!l5wRE*mB*V=1w@E=?^%?rk{v&DonAhl6Q@>QZDx0xE`;wLXZnRrGLT@aMLcBkXLRcwt@1KcxJHUAxBz^sx-~jNwDhDGM1{dBB zq=86F`?VW}*q{DFU7m(FexP6DeHbE~bp+}) z*bH^eU43%AglXfb^{a@l{pbY){b9E82kF_49D>V*%a!4S3IBIr@+neBm8R1qj_K}4 zkIKVwUu|Zys^$=S-}xGM#;*=@)<9buq^%jcgI2CTDu6|55qAl1CXqg{T-Cn8`?lw> zime5SFf`ty6ehGs{1%@xmgp>In5@*iQokhOFz{!_gx>11byes1{d`5Xe%BD}3ZQ8& zd3+_1O2I;r-__ERBZ0D-PVp>vd&?o-<<3(!Ls&>wQwiCheO<^UWzu!zCKR;W$ihe& zqx>t?PvSe;T;crpsYhOHi74aMUdS zwa=!M9u7l=vHC%a*iJIV?t8OdQs^yg7g z{0&DGu~6G*B$#H^s&wmK>HDTOq%?6g*lf#8Kun~DnNZT1LMxDhCMu@&m%j~7QVhpk zg@gt1WJsgh`%Hx`Ir)CD;Ft3<6-$ivQ2S=5Hz4Kp7$?3SJO_hT`8NWRDFPs&M#r@u zUgryvtUFvTiM#(^PBnCO&OsyihAv)!8&iJW*J8vs_NsSX2>D-}mZ7hc?&D2XZoKAK zcesyG6$_P-?Ye)D;B{{GaZXa zzX~5_lU4~5>u=znYzT5pwKt?Zx+ik7A^T@b?y4JZ1s`V{w~kEYkge!_UeWNIYv7mL zZo%v%NqSF*G466PkFxxF6smag|A>0ahB~4pSQK}6C&As_-QC@N<4$mQ65JsKcLHqO zosARR-QAtbdGDTczswJqS<~HBT~#Z;M6DJnB@vO|pk<3n)SXe+M2GTxqZDys41-W^ z{tv+16uWE}A|a(08Z+M^_|8-5%Bgeln{Q@1BNDxbsm}H>$ryBx+IvPJvw$s_TnHb0 z^!km=_2teLaIr6jy!W!4KDfLw<@(uD8g!}_%~+jMWuv}8t4zw0FpcRlWcD_idXsAM z&(P+V-N6WCZ;=|wo1NDAN`b*T(=dlFw`2Gd5qGfITYFckDeZ9Y(zdlpgNWe~m&&&|RDSk5NSc3lf6l*^Y7r|AU zopZ_|R@}qo!@TB~%GXcP*H9kIPWq10!DXbmZ2LBmoARDZ4!-N3((_Yk{?1-2p$_7| zUF3id@k_JIJMSl;58)SNiJwRQ*mn}{YdEaA+otIuj(ogo4tQH1pNNZuimd%DLwtG3 zF!eVxd=Mq>yyt^}ic4cBEJoIb3sBJWKZx5kNCw{h_!p*TuZUUwx5`DPfV`y(s4iqB zocW@N3z81Rig{P0?dp22q{FUX)5x&FJw%JT3cbU`BZIH;5aLL0DiBntSLyO}MC@K; zdD$7bKLAnS!>Mxg9$)X%WXgpo$-?l77#Y+BZ#FjCJ#yg70 z8nzGOkECak`e)u)davx&(qd2y-76)oEV>DXz#5787cSe1`Q3>Gg zi-<{4+B4v^v1AGqjf$yVcUqgkWmZBrRHwKF7CL(4 zYfR$gsTQ(M7IVvnT@)(k|M+ZyaVzERMORL_c|J27E@8!w(>JZJTkEh%#9&f_v2X-`I`b2W0VF9M6J5=hW|B&(#LpAT0 zdOOYp1PC}ClNvyNS!jR8D1QS8$_A{y33tCj#d34A;9UrDOl>~(=!>(BuVUGz-HtEQ zzx4;+lIpCkY*f>mKjmHiApXzF{EJTQh1pNly0ncrJ}(*PfBL2NUoAlFc|LDlYVR>) z83CR$1l<1!)F+(yq71MR#z71)t327?s$Kd^bT*j&`E0H!%5-!vJ&)RKYopEEByCn|M$}_NOw_$O{Q}x?Q#nj@GVN|R{ZYav+ zdQ;K9+ONe-)|^U_2KSK^R@q8(yp6%a=gHFLRD1YX@#OwV0#gUk*p*of6UF#)%( zBXxzgF3>FI3Ix}buDVuTxZ|z+%=6V3tehs4@7?~RXqa!mmSIUO`~mP>YX`b6F85Yrrk6i0|SS@nF<%3LS(ZqvA692tA^CN$tWC1C8!S{9p&NuF&g z+Are(%Y@mlRS65Fh+F`())0nq=M#oA4x;birlaw%`%>L4KXT`Z=C6-9cjdG63RZJ4 zb>0AQJylGo%mT_>&}x4%Io3G??4HjnA=fG49z(=F<2uKPD?7gp*2d(AH1S|6v(}@g zA|&+!Y)5q)l6)T+y`PeJ#ChM+&xe{tw)mSoNsNhYd10j}i&HGqqc*AZI=`;NOT@DV zaxvk`kDVD;g(GTfKQ(uMYH~HNN(^0H0hF)aodOtTud=!r|F-@+cqH-9QVw{I21i@5 zcXv>^5bF9VhY=a_16ry*`5|>nobGeHZvt!5zV|N-hdAMXHN|01TCo%pZWW!Ru`6MX z{VZ>3)AH)tE9l=!$F&CUZA-Y9Juu&Gao}dfu}~R)ZE@frT&^MTV>eVnO&xz^-v_mn z7^Ebh^@$S#bT`-bR=$R9VXwSm!q~IM)up}$G?v5yF0I2W!UUJacH@b&znvOH-EtEk zutUz{UAo{f)GY~!C7T$7X$P1!NjT(h!%xX*eJoX}J%&xGQKsFdDW2O#$t4L3CJDaw z{dH}^4{N7o;Y4yZs`6SDl))1@z6tmmIqeHfKBFGbb6Gf_V&T3Dt>!&ZO{GBoW@6h4 z&lDl70{U>^2W79vL9mTVUQaEO<~{;e|3Am#7=86$uRZw+MJ!);+fnC;E!*A2pVJ zn=7c&Ef3Xq0iz1Qn>0i!p$rGdzeo)IT$HM^-5i@eJXyXMz17^+=YV#Lo=anlHVejU90~ivU-70@4hQ^%6Vpxs7k!4L-V-UOpwt@{ zIeht}3a-PT{qhWrtxPs!^ zK4SrxU+I&-8P2^HOk=TfUXvedpLfYj(qDBqnINvHpYN72Y!S4MtFs%j&$L23;khmA zhh=OdJtg=PrwK~e+a1J6)W_@rJeQ156_CeqseC1!U13i4-pdpZaDQTI&3pjYF^4 zua-I(IRcqRVe=RCjIebi=1we}Fd9 z&%vgi(flWYRlm*^E6RZ`Vq!+{DVzWdyoglSxMV~_*3cLO_{ieGRxM+p@S569I~EtL zac)os6ZU;qSSbsV$^N68<(vC(qzvKXwfJ+?jU?ixHTxUM?v0V(D0y$UZ&;G+?8#uW zdLP}n%Bk^ePDcfS=lSwo9Kc@XE4w+*xmg2NUo}KGG`HR z-eDp2xy&wu8u_7b=3$<#>~{<=^e|$+hXUrr33v<5e-F6uo&R3(UGMv z7$i}tMERhTXMvNZzO)=B?y;nQPBnq_UltYaIwoO2Pu}W0h%zDv?(oS}zXA-*%Pccm zwpJONDm5w#p$3WK0D;E^vsrQ{iz5n+9nJvRa5Z@?(^fh`P_6)_c?djJcXD>eBQNj( zzs9g#Dy>8Z5KR{PM0B24lB%HYUx2seMK=mWPWYKC`D#dsxj_t5o}YYB<1*%z{cntMid<@=M^)}wAFdX z200!{)+I{t`{j%$m?Vu*<+7c}G!r!S#OCn)|Mnaf#6jG0NVdZ0s-Dburj-?;wg-I9 zc1fO+*E5(drRzP&Z<77I_9HD0*h3+B7Pw~Yks-v-|7>ldDNikKYL^pY28P2J-{|ss z1_c&~MKogEEaPUP`~OS1<2}#BpzX%=n<79idp-N%x9gS=SOE7HT?l;i+tr{RdqVvw zF#M0YHt8@e^O`E~5Vk8h)VCyLe#jxpGwXVw{Prz*^G#s&eBHRj<%?G*eL~rI&3&A) z|4%h`Cp;=TyF1yy>mT>7TzeI4uFL$IfprwOO^}C@Tmu{b$9JJIpUNPBT{KW9(y@4j zWYA6z(0v=y{BAd#+=P+{CI;tBL0#YKYWNp|6l4+u#ily-`Zas|T6wE&ycevmW8{|5 za({u_yI5w|dk{8Xt`cd$u&kJW+vr;-Ebl`J=6H_IZ`PS_2?~MeqJ88OFrq7wGGp+@ zWa7qR|LQ4XRvs<6~*1yK$h5b>RxuDWZ&7bMXZVb7iB;=GMw(DV3e_=nOvuuu+$#;d<0$Mc9;z*{| z!gyDgPDm;}Kl?=)vgG-^m{FV{SlVBgZ*n@BE;9qevQ|Pi%OvrdyO0CCnODPLAb>AP z=B)>>%&!E00z)>b5Z$lJ&KnaK_xL03Q(Ch-@QbTQiLtYgBbjX}jz9nhBx&1rOMY$+ zeqsmH`tbw!yMZ>#O~QFD`%xeuwlGCN9CV?ZCcC_ofPd{blVtXS!H6pO%INn#Sn0RZ zU~KM7O__j1>Ua9yaftk%^?mdADxiU`-hR69GxVf^;mSmV8PelgYkvN7^dpPlGQmS6 z%5{t#)^^kZ3eN7chIIG3oV(Nr)Ll5$kN7GB--n>#l-!Y)7k2 zmwHffH>{EhBb=LRElYQODEz1+Pt^3 z@?WwLrPB2a>*Alu8PTEthyq_Ld2UKD<0j%U2WNulSZ`7i8xyY;_e{Ofd+1okt>MA@ zg+{VoaElqSSY*`!fD;|OCX*Sg>Jlg6!@U?YRE10VprQvFTn$W@e9 z{X|=z$F=q!^zO<%i0__}$OitF?QW0>AAcVd*ev*rG26CJH^#?g`%^EQsVkpu-zJ66 zO>;xa*6l(GYS~EyHqQSvYuwDsRbe&h(8M+NuZSZn@6uY*gBDgCa1Y09)jyZW-Y!~w z^)vA10!rwFu`RRX)oX?Rx0&i>)p6V-j&DEL)E=`LIgLUw69UHtlq4&=?c9`s#Neu5{m*P#A;#`_|nG<@?hn&Es%V zR=&})S_6yBcFR5akt2PmYtb#$4rvHy2d};|m(3k*x7V)H&V-}DC|2{4CZs?TxRkC_ zeFiXpbP*wAP8z46Q~K;T&@k!#$qwI_XpJc2uvGYpYlr}NRe8fT@HM0o{R>>*UWwP7b#K-t-QZU|*E)Cl(vs13Wb~>PBlc4# zUwBUczu&($L&meI8Q<$n#h|#d#0*G6!$v1-I9WF+y=~WwA6lWwmd3FiUUv;l>{?Ot&_M!{ieO zX{^h_RVglU)>Q`M<6_B8=^Yo-gNtWUyI+51{n}b!)vNC!+fc`TD`?& zGU~dR(uEQ6!hq&#sqpLm_*RZYk7ty@{&0ynR+iDnvAx#v*C7ty`sbOF(#Btl^Bjs$ zfzw&LY`qbN64-{=(DqS9MwLAi8A-#DLBVDvL{2s-^8T(aV+0t0Q0 zSu4sE&oL&^=26zX&vbsd#?u9`s-`8{+wUXSiVd*I(JuZzWK!ThjKk7jZ(b`?xA{KsF2j@N40F{FMkLl44$an#=Bl0P>t@UgY_dTH^?$HKcC&nNua>*f5| z`}`ZC8~IBbIhE7iC;YlcTEBjACZxR^Mfx7heVZ5A&PDUxX!-Bo)``s9McIZ6<~W`h z9v<%ZcuG;AyLNu9mkDENE5f+8DFX_N!2cFy*chXe3kyNi-kAth8CY6)Fr^n^sz18h zRzcMe4}NscUN?F!35l#oc8wBIvo(@pSjYr+vU4%!gFZtClPKEEhCAc2r8>G@vJ0=h z#FAg#-|}sXV|derIdaoG?!X-pFy8ZSvr(e>rzbapG@gK8d3fG29k_f9-fc zKP(KV)0=8EYq8{ijExv?wsL@F92Jw4O0fy79!g>AFAc79FeUE$#(gzc=Aixl9>0%Q zNVaI!L(#%HQA2LOl2W7j=nBri$-lN6;mb`tf$28wXx)Wi9H+;tLZo&A?-Ke|^_{ne z3y1g{nz^{1$S~g;_HzBa#*c|vxFbe_$_JOMpsF+c1co@s>>0@_q%)+Hc_+6*3Sr{+ z|AbGO!C2ZqFgnNAw_QF?Ep*bBxHB@Xx>&ANY^86k!@?ZXA z&%~dnIDp;s6c&EFg52Ne|Napey{1>QX0T8C*`0sTw{z3uTibew_MadFHhy*-dzCI| zv(m48z2ZtNLhuUN@iU27yBlOGF-DT6YaF@Cp>h_a0Zz_L7+TmM@w~sSt%Ja^bRORm ztgo0T|0m*M^i-+Ta&uqaho<)B$F{;oD?O9(>Gw8tb|f|6o(r7GFWR6U&BGy3*v28^ z#qGvJa2THdtM>&s!;KD;%*;1sQ+ABl7Z32N+8PcWvh5leebAW;nY;H-2w%UvlX~OU z9=ahX%iY^`rUta@VCHhqIZyFDBwuwvJEV$9n#;+sARJ*~Rze89-x~=Nz62eeo7|rM z>ux~vh~dNffFK*pto2{kyZ!;$lDbZ=*N47JLXe- zTu{|$W4K~|aikyBXs+OIYSZ~7Gyp$z<6oIu*F_BTG3)SqBHuYY8ew@^;zJOp&uVP= zU@@}Li+3#_~t~;OA9yclxgM zLAh3vipnO$-!F((?6&yg83vRSE7U7^$#39Eh1BQG*$gg5IV<-}-Hzv>nED@h@XnN) zUEcT(^bwxQ6e;Ba_Jx0vik+@A20khvgZxUDMLSoGa(rau=UPT z#LqGZtRX05%Mzof*H@d*If5NmxEx4%?^>oH7grg^WUQsP!1aeqOpEa znKq-YjZEz!EG6DoP{zbl%7|{3Z$&iXf_Lz9u63pHz7Nv)qejf<)GGkn{=LMPsHC%u zT5A`G8W^*U5Vdu!uKH}ogf+spH{S~Faq;6c)iXU!GDbkSdqHnzNp~S0xwT!jgKhoR zhm+l}UXb>iR(%+S>lT!!GIDdUtis!E3@6Uqo8u06*krEKuc8E4XAB~_6?#o1ey<(Q zC=aut3)TuN|0)=3K)vXQOJVIv2f_Dcn#Dq&fH6r}UYIAamL`@T^m#Lu=8$=9V}kx9 z#R(#h%?l=t#4`(i6)x;M9ls%Mb*U_4%Y~d=k^cbpOKD%+qyaVIp!5GgjJogienq=C2T#{gKT zz$22c)hbPyQ{vL{vGew<+UMsm0Ve?vLH5l!Nb9iat2($5I^LN)ZOGw9MAndgQM6yt zp^qr(XLOhDn?SGm(E{beocU@vgtRcQ=p0c9!n!MBXYV0%cCH~Fme7f~zy6W<7rDOi z)@P@zp}Tmfy?7SM6n}cYiS*Gl&8glNwcD*bJF+$qOc6J}mkRQ+S z@>ewix;LHPyU1c_{zQ@GX{lB$R^S2Je+Qx7Q-ob%=lCEne-1WCl-#A_piP%wr4F7l zJkvQ~Ij2p-tC_pcw|+hnKb|nm+ok@aRl-`MlAorj zT`-zvHBqZ|;v(8uL0*Y9S;7enAOt1iuovJ4C>lCQv{M|#>|(5cGgj|QgF3s>>{9z% zyPmJ1Ff3=h40bl#;VP=l`ubQAOgOP43DGb>Sg19goW>~^Iu4Q!DeG`}&JqrUvyc}|xWvFn{cJkh62xKX? zMgJ6|I_BYIoq+xPs3hVQ{5$i<6$F*G~J7{x!TBY-$LFh=x`1g?prz3 zfAB|o)SL&O|I`hPlhJG%#aA~x{W-c}3ob|1@M6EvH<0m0ff4Mo{h7x#guFf|@ea5@ zVxh1jhrpH7g&Y5Xm5H*W~%NHaCMs|DEg(lc8Ed#|H_L%8_Q1TIhKvpKB5 z>+)9~Zcb$jBy9(yG5*afv7v~USf@nXZ*)MI{BAE?UKKVj=vSimBHE4lw*d(&h|+*==@4!WP%mT?0Hhc4oW?wB`Lt=OZ}~I`)yKP zVrP{IallD zN4;w;p<8p`1dJH33#Y@22u>)kbu(wWPutsy0ptPkb8q?L{K#T-`_m{SnP}$_;WfG( z93IY1QoHsIM^+XlG*pIqR0Q#|FlK)eGs?IjFqQZc*>TDH&{kj$GS1jPh4utT10yjU znOI0Qc*L7a+YM?P0TQ~qIP?^B$^GcDuipIodX2BM3l7zS49`9MMOagWKeOma_A{~2 zn<8f>cT+BT0|=XhY8NntUY23K&wB84LjP_D1RPe^S`ELX3Jav#q8}2=+WBntsD6w| zU!K&7Mw9h-zeFEi&+6CE*sCzrmuZ~l@Cb@_=56JW#~`Iw>5CdaOCQZ&_Fp}7G|1{| zMPTn&1zCaj=XY%f$|CtBwo*HHB#3=4shg(#>Ms9jF^ELPCu>B9O8I6M%k@lX=a7v_ zH#_)hkxWg%P1wepL4IZEDp8DblnM14S+q1h=~){VR-wu5_g7xu6N-C1MnHz^c+ZXL zg770o(^^OJS2*wr=qqnD9|;|cSZj||S0a(&udte`RK!^9XwF$d-E zrAQJsALD2Ta5cJ?IM>mNgO^SdiOOb9VDf08mFJir!LW4+BV;m7Pc>m$i`*(&C%)=3_!Lk=h(S{ViD{+{>A~)ZNekK_x$2~BqyKeuL9DNc-*zN=Ok>P#aqZoD+Rn$;kf(#0Lom=E_KQS1#{;D1m%w6Y{NT?6ETr{}47zshCoArw^~4 z`YwkUt`)nVD&OO_((6j5jO>4NhZOM0r`$;`a}Ah9{kQ5Q6HsQCVuyD-X z-vCB62CA()FAEur<92)G>5onfTPcmiE(W&@PJ%nobY{Vv`+4n?SlD@cw;^G9Jl=SK zddSv{F0>_q_CfbktGx&MOcPsPPSHylD4f-pbz_eUp5QWMsU2BuxbEK=<_EKgqqR&_ z=m`!2y<)Lt5)U~~H_bsibWZS5X3!%=pbQzTqdkeuVKW1QV#YUCdpEEYhPkqG|Mzv6 z@Amq(ya_nj{A|})hdm`S;6g%R>F+CiGI~=TEw(s+C|p{yD09a;TF(t) zGMkGgO&K$DlWdG9@}wcPS2|a~Mv}uV-@6qD1o3B3>T4~M#6t(aUKi{7$(D-Ra5oM- zEGHQLOtohdsAZ-~^G2YtU{y^5=gZWLy7?-M5a+f#VO@%3w@Zl@2cE7sJId!+pGS!$ zhwf;L-%y2A$U2jR(F8wWepi$`nu&Wu!g1g3Nfh|*0eT@(djpKFc94~!ZG0EmI^>$} zF5nW;^#!^dQe!BZFj4<1c~GIFk6upmT&SWF`;;p3iL+` zeGr#eRZ0vw_ZMeB73(|sxNhm88>&`QuenTxzU?-XUet-=6P)cX242tGZ+67Ew$_QZ zE}3E`1qw7BnJ$rqnZIK%aHg&72fUY02bf za-7!UTq&(XJSnYXs{7_UNr>=*z`Tu9DCMN&@bQ?l$!yjBzs4njt}K=UM%U1wVP$

%-}mE(;reb9Fej+ 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

>JidtWaFCW1>x-p2JIl zfeg)S2P*g(ohKhM%?Ulu6B1fAj!ljlqh5DU7< z^47fWoReCmJ44oBqYK^9f;l*NE$D6&wVZChyLViD|IWkIpD0T<$nyC|T&_C4(~V&d z4!jgUJh$}LHi0KNDJ75T@>)V)RqdB(`@uWIc6e}i-cBYq)yLe>Qy$V--ZeQH{-mub zt{NJW)G|9jUQ9<*)S*UtJ`^chtOQ?=a{WN8qa;2|60643M_JZ`^xXz=wqyQ0O7sft z%P;Olt1>Wsx?nEdv|xK10%VW<2Xs8jMA2yq-Osa#d3%Vz*DDcuvj{(>^BWp;Cm?d6 zac{?5Vz>z~t-JktR zUlm$2KHWV{cKcIgKeaO{^^_ney*gpi?S8KhbTZBg0N0NkrnZwqDQ4`BG#-3GrGHwy zpmy!oE3Xjn$7aGa>6=%L_rsHU#X6EIwL396{B;t05t{Y;0`9uHA7F1~CpG1rwgg=9 zre4wpkn&#RnCD)QS~l9zYU8S8+l;c<(M%Y3-H?HM`3@M+{yF_G3&rOq=2hPziKk}g z!{3f~AqR8t6P^ew)V1|^rhMo-EnXR|iVdHz@Zj_NeO8p>G*c9piRV<~>VLJjYfHB$A2StU^!KsW zQNAJz`m>x$J@$bS(M@<|@+q}4-<^~9iBREZ`D1xYJ?7z#osj7rp3OHMZU?QaM8vH# zf*=fS!*o~Q>pjJ99XnGoa**A$?c04C2M4Jj=Tzst@YJU7p6*TJ zKl-K4c#zd*30UiPBIACpHC`k?PDDat`Xd*DV5K(N3~ND_#(LiUE3_0hJjfsCNN?|J zc8=vUUx&zt?sE?2xBH_Q^?!lqw}dmL6A64KGx&mt(q2bv{e1X3EHI?=znXr49S_xh z?i*jeE3^2+F{e2HLUqzzLjxl?x};s+LslNp5&NVA-dR+OriB{Kdxmex`$bD|JsV31ldWTz& zpu+fVZFiC*4lafa=wDFbm1JBVyw#jP?(U@3ryTBv7O z*h55>0}tYg+WQQ;{fFy~|H1>Q!-2zt*?uiBNP6wsIBdl;l|S}lY>tw7_{TiTkby`` z8`rwuX)hjj6)zK5I)H|4xA@HKHOId-l=wlZ>E+jP)obHC{`2a$UCT`0fpacpksi@Z@SGBX4$aF`e& z9HT2N{m?dwR2dLcD@W^koLqmIrPv(Q>~4!pOAFDVbt;upe8=4Hf{qGLAFYGSpe~5! zm+t)8NZ05sW+%9P`al{ZWTsf7u=mee@Pr1M9WfQVpZY}0+b&B%cZ86+&|MSi)3_=y76v{>@$KdEwI zDg?o*=>)CnKT3mn)2nN604%F!wLgo}*=K2c>hdqkJU$@rexA8`P1hCW;a=a07Tx@5 zKR8ntf0Q5#(%(cni5-P7 z`1~7WCkt1IjZAZN1 zYWoMEx|7N0_*<-^;Sx;lhC3@6C;6`wbSLF≤h=w7;j8(g>AJ0jewf1=JpgO`5q& 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

5Lm|;5iOdtJnVax&}0n`k%fE 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 z zjDM&(%;58_EWkEAc5@@IgiA;)NCJ#R%}BfztRPR+Nx4QDddJwx;2}U-X~&k!1=vhH z9F|#ipc_@hHE|vkQZH0D+lL5<>mDBB7+D!ma2uA1I@doGrW_^xQ+z)j zlq;pA2|X6#u1Pd(3D9**PscNRfxQeE$eFBJ%$F0Fa~LZPI>-h5Kj-x0VkxzUI|(~v z4<>p}z}t7gCZCuGlv)CzKGcAQrvhd}uMdAHk~MF1jAx~#Z7=tkZbe7yFR!^+1)klH z>()#@?5%y!{mNK;$_QjmuPItc8Rsbei&VUm&iP$#dBP^l*JRmH!o4MJe82l7$EZcD zWCxjo#`uC3Gr?d>!7i^Cx{G#*XCIix=B8-0xB6b+)qEF`5v~=J2J@lnP)bUgK2nic z%};<(KvX2mXG(5E!DJQj&Z?4T)ogyV6+=ik!{M(h>E%Gzvy#u|_4$w`q-l{`w~};B zCB|$aczr0Y^Pg7Wf^{34fu9~q^Wr0i}EX2z$!&;2KeGA2(7-Fby znZ^LaA;cQ{4Io;!C<0S33Ur>mE26aWK?tdp{zingY_leSCAqVh=2OG&W{PjOk_=)h zk^{Z|fobW7R4R-yS2ZUfhdBFi@#Nl?@c;4j4eWKc!Pbo$+qT`W+s~_@F+H$*-Y_CkHPx_O3P_Of?HHPvE}>q z2w^E>q`}d26Q9~8v`*T5em~`bBSoDbf;^toLThGVW}8)Ef0}~C8K5lTIWc@6XbZj| zW1&MVFk+FJ6{L7N7(dPHBAQZH1v{qp`%yhC4=K|OQJr2DEz3(NWByssI|GaEm_sFB z?I~JQ&c~6D`uL@}Mvs2QQXHB>8F_KR(#1rrepo8jCuW`h z&v9Kt$U;wR%O7+0#?SL2XV@Sc3+oYRUe~Wg1x+C-p3xNnL3=3xx{gw}y9hvei zL=FIL{o$9L^HaW2mW9Rir2571ci4?Nf z>HE15Tja%C)86zBAaz^;{DAS5HxIjHa8Z2&vsYT38HJ-{EP_Q~0L`0fS8U-qlU#eZ zLPc(~=VuxLbXf$Ef(TO4_3#JV^T{Oo@Ech0S+4h)Ooi`Q5y&r&d16Y2=}MNYuO-YO zVtIRA+)rq6mxmt9>q$V@%%d_UrY5hj7EX@oYF2B|CES*M?QdP#Ls^S(mcQ2g9Pafa z14dS6+9~4w-UbF6pIe7u_g zu5CVDQ^@Sp{98kkzOTWN=*SV7gepHtHF7Qsa=o1#VM&F)8hQI@>jUAk z^Frg?|E~}$tIO)^KW%QDR2~)EIss z`L*o54FeYv;>ku$`D+S7n+a)j_*wZ@8t7e*k#^(e}_TW78IJZ?$ zSP^t;nmDh^`{fF~iu#THMd9oK#6xgD1TVrGpSo7AB_5mp8M|*P&w>u8Zhvrt$cKE8 zYfmnf$$XR3EQglMR0&~{RM`8pxN7fXXc=YuEHBI8os?5tjAjQ)@ca~pL6PeHdCl~d zd_0}z4`N$kLl5lrrB??M{9~0n_BCD*z(LC-cz6(84oeD46m|gD%4st1E=Jw;F>cNE zZT-rxq_rkZx%{YoicL{*OV{;uU+@8RkC3egp+P3zbDcW*a?ZN0Xwuu=F}k*$h9Lx!8Mi7mFO^(5uEjv1&s&J)U>H?W1Sk#2#M z%7^>iGo7HdKq>N=G8rwlVf8mmT>A*E7twz^)aV>~c<6a^D6K{d+K^@~2RCrjBaLh@ zV>#C(! z2-Lwhn_P+DRkFoFPHpPrBZ>jXsTmT(hI)Ipg+o%-9iS{K4F-vQu4R4pyyK=L(W%N1 zv$>~ths9&+Qiy*XjNWP0`4H}m`|RGHT`03b*L7}#IlPR1g&0Uo^KI2L+~UXo;u&Kz z-vZ;UiNc>kr&g9{_NzZSnvY%QAi1r{*|Z%_*lguXO2=ah!^)r9Ayr)+T=9D8F^1!! z%FZUt2{&HO6M}AsN_HWPtjtCKjbTtfTr@hVHGyfyYsm1>TXGVgiO>TT6l zCK8V^ErHlFaSn{lmQsE!Y5)Yu*uP_)MH?w}CcFdki=#ecIk&i;A^_!6HiRGr7Druq z%>D6Fr%9l}M-@7$d2CLtKH?qxR|GrCPAppv=4>(UI44;(y6>D7x-vB=v$m9lgMU1y zjM5!vGe&g4`D{?|wN&$|aYDj|6u&5A)cU-TO!PQ%~dv@2mZO_2bb_W|!A&y!#?C$H^qaF9WC-O|ee~E(4hJ3pA zfXm&qb#!t{*8sXu6{r|~(y9hZ4xkz32@?!KigfpoQ~zE(EwoxC9i7C01Y^%Y8R{hV z;(wUdq`kQxo80k#Z(6GRs6hSLvbf6Cut%k)9U3f)R#?<#Kov5u=z@leY(DFie2gzC{07jUawmQr_QEpGi)*9t&i%u&nSHuy-K5_!iE zUh>$Im90NDIHM^{y-5L^m9OhC?AC<2?e@~}BjB47nFisI#)_yHXrW5y{cLX^RZHEc z4Iqo|A}z8JSc1F{3vR`V#(i4|^|Sxff-?_~#stQzQvBRYA`OCFR1a-i=aWOGYiSTx z#&DK%NUw+U!Y|>$hNp9cmUw(BnO12Dsm|JA#2Z(VkHYu^p1@actiVkMdg${gU3Dal z%d885;9X^MhxDaK$1MFoC18O*j0O{)UH78lYEo>dlrudGF|;aL-6H(j9PW%>>E5(p zs8pl|$8k}6%wwTEd!jDK7p!UH@r(aW%9hdFBRPfis-GeotSU9K<5r5$XzW{8&z${V zs7e1tSsa7T*xy>WNyj@oHQmp#c8b@NuXK8u{<0l}kzqrsUmnb(e1{~Y&3!0?SPI#> z#T_E4ivMU8YFR-qunn?svdR~%6k_J2Nxr7bi`AX@_6TIRGTY*FRqS@PzhVBJto|gR zmk8zE8jv3SKv!M==JwIemK~epX8n8`487R24M!D7fOlxcS2nEz~pp+a9iCJ#s~_bA^|v=9N5IxBv)dEe zzMSa`bs^0^;@VetgzfKpNsnBytT~a7&QLl@kp5-&Yy?xYi6@Uw8)ZkAxb*UC zG7b~g5{(@i%pwY%DDMmE7U^_8f;}M(EgJAur|FtOJcqCR4<4j&C)J6+)grTOVio0- zZR({|3WWZo^>#{RAXFD^Qm^kN=Bv=wI_}YJzAj=ro|SA(cyGNqP4e1kQ-f9}6Ve^@ ze*o4U$Dp4V4Ljoqk$noUP61Itm6u~G;ji%xg3fbU4 zNnmJ@5riGALmjkelyI{VrRFW`xt;!USF*8in`1p!Yus5o#Fa3?g@ixYNP4_w81#qv zeVTJt7_t^9je~Dft=E}x>AG)@9Y0H>jrFNeej8`F`s4Ncd&>`)Km#)Db&5ub`F$wI zx;dwKzE$T#G8?_f5eEAvd%@upqGfq{D^(#`X1%`epO<*~ohm6!4ZeoPNu=b4Cgrv& zJXX3^%Wy7h#rZ{vV;WJb6y@^aqeo`hTUuSRLUu87^=pe%Zj{=Fxf!{xrBTYODys2o zOOUZwW?i%3nWHZ3e3>X&zmmn9WE|kZ0eR95hcA1s-V+Hev z2ATR{D0@lQS_vw+*@r8@w0U*tAk2O`Y1?_?#u;F_JzNg_Rzq6fa+PRvzS#i( zC>=u%Aq4)^Ah_#)+?dapU~5FQ<`64C*ed4FUe#(e{i*q}W^uzs?1ir>bg^D#V&@3F zUC!RKU3C*08j72X)U_tzdwFY-)k!qBRVwWGNuT;7n@(LfbNqXDGYPDlCNCZ-?4O5e zoSZfb=!6F>6c&d?6(-*eXI!0*LNOOvD7(XxBKF2<`& zDH7mgwN%G~3sgr$C&bkNyb;bN+W=9D0DE5MxKgW6A?Dx3hm}IuX#fJ(RPI5pf{#w7mm6 z8mZs{WO}B#&=J_kx!BQIn7^c}U9=AKr#O9M{*_ZNpQ`w4;`~#R+Irn-$qgxP=?e{# zdh;!ImB|36h5K+>U_)x{d(y>^V4ZBh7&KoF@K_;<|LbBM08OzDDD92aTqkqgaxO_G z`2hg3C|!oNEMxBU>8EO;brZG!PYW`3nKdmr% zCs|#l(uF9p8$KDT?Gn$QY;dylMO8-D?urp74lyW4nHb{lk^d6Z`9iuTawhAh+x)j^ z&T~>^`m8SwXh(B-#=`@$pE%r*rSTs23#Unn-d@P+$y~PQrs^0vdb$+USL;g#?4{k6 z@>OQ-<1k^9FIH>Mwg@VyG!k=5WRCZxGqbXw_ASy8SO;RWdSrf0l!02T#NSD(_QCRh z!Tt7N7wMg!UP%s>uYdNN5b(4{dDR8<{Dxe;{YVwHRC6_T z%aSdnn*)l6yTwQ}rt(y|#-FafuQVhqQ025c(<5I9hyd~6d?}ecR@5sxU)!0yA+Xa3 z3d%FsZu!VZioSM;hHdeR&vRU8KA;xbwOGwL1C4{B}j3T zWdT)yI#b0@MW%R*5qRjzct$pX`xJ4EtkP0V+s9E3T9G=XM=hsEPdAZoE(q!1-7$|8 zO)I_M-ZJ`K#wOB6K1pb4REe%tO!71SplL`2c*kF9r*fP0qCsEAd>+}Z4x9YWEI=-zQ4UJ4s8uhLU--G_X_ayg9b1RtXQ1|p|)0uh~SAQxXpc97nRK=2gr;t zvSv-_KsdLiI<9$!s#7smk(EckXeE+1CDOu_Pfig(nSm7}D&Q)SNYN9N3d(w7}V?R`7|SmJWF=Rbi3`|9BWZJY&*^ag>(Ps1&DgO+J#<=L!+iuCN+MCXWD5`5hTq2 z!zWDB5&Y+nHH+2>5Xh1*Pl0)?v9wCzVtOE}Lm}059B#nuxJIwFSORc1*3B?|fg9j( z^KEHw<9P7S#&(gZ)(;(TLp?|kFCL@oQ_%f7Q2#!T3NVG{N;&|~8lT5lPG^)Nxy7RK z-8u-#rh6y`1P;r?@I2bu+hCK@j+H~TEu3ztho093Z<1tw-S`lzQ;hdz?)P;PzEh(v z5gJ2B0?o{cZ!J4yd7b#hpKJ8m5M3Kh`h?!Obi~?E zRE#}yYUy5062pK)bp#qm8$HFNJFn#pkL0HH27HyH`jZDf26u5hNkmkVs0fFHSLOi9 zRds&vP6keUNq-j%{o~f`yno)@tTbqpE1NxuZS7q@LbqJ=Fz-d?crlJG8H#)U(0Vv| zxW2yTCcM+c35`mId15R72X`yE^Hwe0sPccS37TopWQ~y0DG}ja$_2+rM2QW>&Tt3$ z_MEwjb=XPy65z*u4-_TctyqxtT+;PR-+GV9F=@dJMpz9P_G|Wp4@0uc*T|r12;>eC zwxS{_rVwKfDRQGQL<{89erC?2xs`HGA#Qp9)UbZOJcRJMi+^X|3;vB$b9(CBat=DA zz^-;OY9WEO7Fylur(vfj6fV62jM&5FKE<1v%#)H;6&v%hni{@DPI^;SmaG|$($I`o&#nLzQMXFK$*#e?t+;I( zw?^#nuMtmQu%6$mdMOfGF4>&mxJ+430HJ0Kl`dIj{HIQtQC|>~1nrJwvypz4psl<(>J?{j3V`dhcI9Y6RpwLVvFL|Xbq8AW=Y}ehT?q#+ zQ0(#qcWvXJdY&=)zhn#}R2&y&c8`}SVl@8lb)@32KGK-53GTF=Daray%f-zF(!gnV z`usW)sJ_7dsEPaVuIl`!}B}#TV!+$>aG&x?Sd`6pib9#3Ty*#Nm>w2E9nY4@?z@phgntvx zSJP`_V6q)U%t%arL~9I*tfWCsqjWB6oujd`X~cZ|ETRlUC_7g1UGp1PQNQ5DBpI{y zwz8mTkZ6|SXjkKx%&!iN6-peOFRJ7};#g_d}yIHT$io!B4$>hr34rx$)niDo?eoP)~D z>z?K5eNXab_46H*=BCXZxPJIR z^NR$@;lmiC%JEv?JD(N~<{LF!cbW_H!&K0LLuY;Zw@CWu%0_k=c|ZM@*+??{A6F zUj+BR*AbI}G}5X>%Z|Yb3t=t0z2#cpSj0)$1#Uc#>IA6cW@UT(6=Yv^js(PH#SZ1s z0wY-YTc0TW-H$Y4<>v!__Hf8HpUW??I?d=rlXR00vE5>{;r3*4-!exuMgORS6`L^V zWonYQrqjE>}e5F1eE4&ssQP6Is&%0TZ zl}5`K${VFg-U#o#+}mbhPB!|d|F$*oKn<}u%$MI=DkilXlhn))D3hL3P~?!_;g823 z2}_INul=e{T{?tJVB>0g6;7YS1~E^M@=I*zP8bEhiu!yBo&I1_%Prvbk95tZFhQNt zp4)VLAe_z=K) zw13QSNbh;5Cb0ON-y;}0+atL2L^{3Zgw&3GA+KY58Y4m=ipeX;_ArJUo3!!(k^Z6| zhx3B?V6RDN@*`mm2O%jQjLCcNPWx`$88-h zT%hKn)@t8`?6hx_B6TcX5?H5V6gB(EVq=t`k3V;@cTxK}eX6`BE;FL}ETf_xi=Wsk zGouJK%qg45D@zDSETKvEY*eJOToekR$7e;CpP zPo@k{&j{7?{9t;^R!a*~J=7?*xkKH*>#oYJ*lwJf3HL6zmra`@LD1s)hF_kaR7ilI zlb=NK`6}c_SbdGtsJ`||Wi0jnI=OdG5-F-tfwS9s#&j6>d35%&EVIU&3N3_338N^aLO(jTBYks$7# zyN*xyvY>6ROCLT~uz>vl$$5^`VURr`fg=!9``MZILLa!@XjuN{Y2! zTUNA+XHRqF>0YL>(8A0eU`Wyu_+K^i8uDE_zXWF&~ zzmzbwk&H3B;Sc|P8pBN=13HNceSvk<-viRUm*mtR2W~V~A~RAu4(ObUec7!|Qa9X{ z|0*e{A?2v{WXk#5_Bk9TbWc^)ylX2{BzlAaIjEFDa1d|rAIbcg<3HuwzFsivUAR4Xc1Lt2wD z&u~ewFe6)~aFhV297ii;bnKD{mc_@EKe7J&PLsPPy}Tr&-d4;ck*JB*k_$Z%Y%sfM z=1V>zZ^dUK)c4(EO}t6@7KP_E`O$VItS}@TYkH>9y=LS>&g!aGQ+isFws6!#+93z! zm*8oDO4n+$6KX}N2}9An-SmFU3jZ9trqUorR_dY#e`!HSLwB)ThU~3&c~d(t?KTqC ziVPZF43-EAN+?*lCL%f}`OyhRS~a`H=KNstqJk3yN!*tuj5k_4Vs9R5>kQqhMuo%= z=ojk;QBvcJQ6qW>l5;_yTWZ-rce?KSk*f{YWp>0c{AoD>+)Kw*l<%ZRnRS6p?FS{# zy+{5rpO1XiyX(%HF7T*wqy07S>vsb}JM_eUd>Nge+8}CyGD7!%!if1-V)Y@rUMt8r zkh({JAM4rFG_{HgC!@-36G`U%J?lqOiBDiS*=S!M=uMg*GJ?)41j)%SNzL6O*kS+H zSliq-K)kG3HXNQ5vcUX&_Z6C&>N;OZj0{1-jmPWT&_%jVBEB%HSUslc+^E4M&Qt#-qLFu%sk-vAaZTeZM1%B6qJfb4@q@(D zC=I~iEqkhQM`^h~`9Cv%sQR#xQSPkb(77 zEf->D?O1onfIgArbIv|s#;_q*9<8SN&+$%7#XlM3F?>+vVr@@Bv zX}n((uFN1|tJM{_^**6_Gn!(s@qo4%iQaj)?03286>QCxJtxL<)%;ga@^8^aQ1N=b zG%X`dCTl1Jb;*mryRFeuGnF;GDjO}5KE10z{*vGJ)%Uh1f!lEMN#UO}|F2=e~xeuCdr>2TCK z%%7Z+18JZaQxqO{8UpVNGoulBYf=@kTY>N(F3Fpt+Co!bQbYT2FRdENqaMN~^tgvo zzw82XW0o?jAWlk_z&)AFBz6hwYrapFAUyt``YcpT@WB0EiV9V zz&Ott?qv91-{})M@+H@5TO7Vo4Wx}r=mG-Q`}WxLy1K?WmTdQtg|2x&J`z6TGwi&u z#Ke-SY=9aGL2E?YYs8<5J{MD)1B>3BqxZ|Kf5##~KqwAs=i8su5|sav?GL#{JpOi* z&x&12m}7igQf_$}ho3BT(@nPhw@`5_jo!%rdKUW}oe376lZ9;}i{4h6?RIC4TfVMG z=l18;u{QqQ;xk6Uw?0Dt<}>aFbN-T3<+mf1JnJr5SDNF(D046t-i>YaCZV2!H;FYY zns+nK&3m~?&lUAx-y$YMn0OpGURkB;-BURv@3TBq%vlSMhCnrX!hu!IK;*9h9 z2o6S%0tuHDPl&Agm}AOCaLTSmfRyQbVz5@(e2tnjNMK-=7Rmp+3422Tz3U40@ZF-hTGqQqUsvw+M#^kH?aggJ6M}JVG zZf%~-0i%NH6XwKQF~AL)y?=w)J3;fU37jx>6A4laG3Yqp%R z`H%N7J}GAqJaE#2w3bWvA`-3jiYAlyLy*q>g;g8y=Y6{-mRMDdL4_s-wr`HhrH>}R z))aOo8Y+r46wrpu!m3Ug`yN`wHMs>2JKOSw0@MxR1~z>CN)Ex*V~e-D4}kW&nz(AAM16$0HE=W8OcL+>64e_(D;gg0qgio@_QO_9S^o9C6l2`7Z)p(D6|jZ_AN@#BX}Dl z=B54`pggGMrZ^;=o=eeYRJg~aHmmxr( z1WELd`eDws;pS`CFXu=ecV2?MSX*l9T4tzm8XrDpEoGa0674q9#+xA$0QPEaX29E8 z6{4hM$p8uDB2Qgz2fmigaREJW=&Bs)6RA3tD{1Iv`Yjc%N{4OptkBkQZfVq-f9ATC zyOubY!?tEF{w7+ScpnyhQ^_P1R9L#xNhtX;8suHdVFCl8q3P%?-QlqY6BEW`nLUtS6%siH%rn748tm|q=ugqa+!>7;poBB9d zN3Oads*)R7{6obIl`aAxFKxGFkvLFM-}CE*W7iLtM!7gh-5r*AfDNTt?&1* zjV0sEC`B7W4Oif+C5J$6N@>J|gojv5lGK99JB60uyG(ff0OkYd+tIXq`#~s~jIrFh zQXp3BMp* z+fPQNRbSX-BXID~hoWTDxa@b0(;!hNPXz_`PEKCJNMpVvYg0PheT!K~mnji7)OdcK zOj94xWj+VGoHlFwnnE1M1`z~->Gw!EwVmRBA_1xoJhTcbA18So>s@;^3+A(XO$aY^ zsxiyyW8?%wPb+LqghWTG?f{ea)&4JHM-|(FnnGb8@nHF1WLy$-a7VIMGKbmODDHKn zOe0Uv-7|j0R)(bL6GOEIsjWWJX+2T9BpkWD7i#FJs9U2yrpGzajhd7j6>$U~hE&CS z;@%KOOvOBJYFOCNX=d=tioZ28u!ydM!Eij-J$hEu*Xf7R+U2-U==3wm=Fhiv(C*x7 zN#3(M(65*o&Syh+Y#v0IAdCop>F7~6o1W%RYEXVP;g&RL@Jr4uFGY9h#bVtQEwZe-$zZ)AwE0PgHh6aOE<_2cBAuQqRWrou;_>(!#$vD5yZamnGNU^cTG0lU{Om9YNsFL~SQt@7T(8H(J|^z0X-HaaCN4 z1BCBsX`X%ob^~@JuN}hG8=s-wWUQ-A$=_9xFO!Ynnt&))4o2V^1@7pGr zu}S#eijH(b;(TP%Px1{Ki>msZq(jgT0{!7qWz>H)yT{jEx&7hDNf)yR#jbw%$wcXa zQENS*bQHobulh(tSk&-~;Y9^v4)(l>zmMA7R^{)vl|6P84cX*-=ZA%(o42l~yY<%- z_q#zZgCUTGL4S0TJ%Xpvg3aCM^xfxz{K|L?+1})~Uu3pF=Nu%J<@TKo=R_g?^P6bp z{_8&jjsMX=MLiOmpX+bOq z+!h;7n@?lRN9T3P?j4qdxEY6Y?pNE(;#tW`{Vn0T69pOuDesw4rm#QFGjA85pRSKP z697(aDyDnoRYntRQ zo*ZOz6+s_kq2|rzT-;juUE`r<9L|UM%FFoW_Wd%TM_w8XP>U?#@no0LJ}{S*X_67Z ze4pHJ&mH~|;~5~GHEQcZPj=!>9R96HCf)Nr_s-v>HIS1Nk99D0eS-hZG@&pcJfT;?m%Optcyoku9DbFzT_uplZX*8tAE%ehOuYYk#(e1i5w~;~5!V%y(s_S^fRNa>XeqtE-<|ySe3;V} zX76*(wS3bJV&?fGSq(<^b{x&gl=h&O$x6OIAf4f__nGYU;Pja`^i=gx^X6dEW9A!2 zknq1#c%VRH$e7W|Cc6n{q*m10e1hT0`zJDqRhokyCWW72_a1^si`xE*X4aJV=F7Ly zqCk$Yp1n7apd;p8%BiET0mH=6L}91DkJG#WB)nzhSZ_E$+43=7hN=PXFaoT zPGx~>3l}~y%gA3NU#<@Qej``vmAqy4l31qUO`0r^&)U(SFTYN?D;R?@$=?ofz>BLi zLuJP1q_V0zzEmPG<<+C{Ys{;m3z^_yuU5E5T5e^^^j!w|zGd`B;@`e?(~9@Djib6p z#l+fR7v0^T8QqEROv5M6>G_&vMGf86U>*1{I<2?CKNpe7ycRZ{#vx-Jvm+g8??BY- zIWd@BwR_u@^eHu}=Ws@oN|Dg_nRDgc6YC(;L$w^)tgOTOjC1O$MyQQZsk5l67qv&k z7}FHze1wlOfY#So?*qLGz~DntRD~9&Fvi!^G{n&Np&==(vV(Ah+?U{gSe6-Nrduda zxvovoACUY!XY|=u+!}XX(wA$|qkvi6gE6t>C_DFh_V&3@^bfKB81P=X8z!7D8L|uH z!TmokfDg!dlIeM#Fv?m~stIEFJTj@~(-|L$1V)}+D(jpLwQK7O`u)D4B*`FD8Eh!; z*6#*Ga{#J%R@Bw-$G0IW5JqtiK9rL2)8}vgH%)z&+Ao9xrkk zXtk@Fie}|+zoKZ`?8qvWfQP{m^vA>ob(_5bPAS+;2;DTWRJf3AZB4XTDokk7biqY* zy021UY%g>)4}nr*UiaYj=C=fS&>V>}0Noj;3kvo?t_DAu{4uHqTYQ9Lq)ZF?TnNbx z8zHukcKN@d_jabsX3BAH!g+-g74MoB10fDqx|bi2Ix=W$&+!5- z$zl%1e%hD_zgmRl$HeTVt+>)&P9(fM18fW)XOq9L{Y*b|iKrI_n#e82nd1ZL_UK^5 zMi0nlqC?h?L5<@?;n4uSJsV1q-9^pOEyxPISQ}@FA0ZL#==9oN0ln5aNHhm#SB|@c z1Ds;OBL50Kicyj93j{N*>UTpXX~(}#kK3xa&Horr*dZ!`K5&Xh#Mihk=F%Tx%z4EW ze4J@=nBX{4Wx{SVFi3BpZQS}q?7ZD^zwPLH^F^|4i8J?I)yxeW!i^jtBANS-2SQ0$ z`1)kGB374FA7mT~1~HZ*L@UC|m+-x2xH}RvI7D=a_%wdVorOoA@qz$mV&i`S~n=$GD(wq-xlz~x)$CGg+U5Bcvr`?`h8UBoz* zw=4f#^7%+2!dqoVOkNw#C%Scs#wfo@m-{9JvaeNb6dvQ_Q*yYwq-sJC;4^N{Qhxb)MMq;aY2)#cI_o%ru%52HZXjMDjVlvM5*H1A2LFI)aN&C_=@+N}h}hs?fc@GOaQ6-sC6gfX_TZ7#OWR-#nuy_@duQVqN7EPmbp5BUogEIcbiME-FhGehUa$oG)HGzv0&VJ)me{| zZ?!mzJ~>E)dP5%{*$798X%e^%dM*>(m;Do-)(j|VlzqsPzjoHj9BQE$iG}C(<_ol< zxv$!j+7B3o21@Kbu|Hpgw)#U6>3PLdSihR66e|$z22}fHt_j|AUcQILId~kAgA}o6 zlPV&jD0C+J!~x!Y0T6br>HdY+x2%>_2_5SuNUuhRLGK&9lfY+Mpb`;)Nzd2CmCo3B zzAoRfWAS>w&Mk;p9lLuHL@+P`lvJp zG*Cb^^ys=WRb!o?d$~G@+(<~JpxUbv@W9*}tv=O}y9dEkDU{1MUC2L*+_4A-6izzT zZ3~|5T4M?WEXA+nN+H{qeo1!yRaB{+y1a;UyBfXCHCk7D+X^mfy@+3`BDfYwp$aEk zE6}#2VFVrf*ZN}`=#lc0fJGDFVeZyJ$j+9ZV(GdPzU&I_towrF!iTX$3&V$8>oc1! zvD#1J%y27oAi`!IS6dPCDKf-BCkLav6rh(V7 zp?rg=$XMKpNOBSE~v8;Eyb`i`|0oD*vsD| zzZmz9v#mc~4?re($OI}mg0=s&uQkDE&daU~X6{aV_)3Y1f2lP;Xh%-v$`cI)bprAh zEoFv2owWBv$>l6>Ei5wP;wHt<^1>Sfo{mJZ$0T8eUcJzVBn?>u^NJ7PDt` z8t_jdfW}*H&BWU8u;cchrPKu z4xxuhsfeM3R`^XyOtzg^%Ot5_v(k*{=<@!BA3=Jq5S6tOl#5KF|Kp*}&~qovixpqc4eZEgd#8Y5(_Xo30AH1a16 z)A60tvz+2}=JA~`v$v9y&~C4^FPt1sAH!{550RuI3M$QfgO#O9)kt8#@g}e;HGt*4 zi-W0S+2XOd0CbsTN%&vV3TcIiQ$7Yb7o2Vr3$=u(CPYJ85&6G*KD5!=H=`pG3T>Qs zN=NyorFJaQ8x=tI+RST^RC3ZYtrTLxzo+MSDr;i;STI&-Y<@1x zLVtI|UREVHCl2`pr$Cw*MU4>D`A&`2k7#Aj;(^gCkN*N`l&`Y~o#E~Z{sC#!-94J5 zScWMR`dcaY8~-}&v{kgx+2lKDTWCDR=9`$Y&pHc_l~j9D_7H9$sQtJ)Px9Fo>IenR zF|>A;bL#k9W@i!LWKlKRD%&=zHKlWihJp;2W60-+Hpmx6i_x$J;h36$?OiVZxK2vn z!XAbb@(Z?ei{Sk?NLglQX$*_~MtLS{gWU)z<~D`Z_F)n?AdUP0hsuU6x_r7>Ace7s zm%vzE`*-7+-%t>V)>;{b358jJx%`G|iXryzZECytUL6g2ORJ)*PErG1S%xVK!4$vp zGH9av-E-H9aN;E=PN}CNhiF{U_Umib-Ie@3`Xc`l65V^D0AiW3or_}-LqPr za^H1S5YwA>j8a$~>*M9iDDTlOoJ`2-4CDP<*tbmO8!~CPQ6Em>>}cK;1MLb(A#g@J zbMn_-DUJ)92{chV0+hwPAe?1pRad8^&~#LP;uk3b?>vc=>CV8`gX_oW`Y{ol1mRBR zSr1js>|`v$i*BRQ_~j9;tmlu?Ge1gbOB*J-+q;3D_~f24fRnq6)!g~{i}a<=5i1kT zESHCvFQL$MbrGx=n zGXkW1*AE5}CZ`UJ}7DWMIkx6hy7>v>1RZ54aPZzSFluJ_h{FW`5Ad4J>zgIY&Ij(!80 z9mlVEDonS|%pIZrPqjAT`71>d)(GzQ0^@z&3e(YZp57DIf&yHHjY8k8| zI4nLNbWEOet_WF8wSC#9;*s(M)}}e~>}#77x0YQ1M5Bb$S!%wz!|4j-!uPN&?9$W) z1{PaURi&=a_`a=9(Mnf!fP`%pW4_es9!kl z5Qbpi2w^G6dI3=3SAYk-gSttb!7;-R1i{;qu71gn`;=zTNZiR;2BH6dLP#>PUr4pj zGvT`D7_pPfQUUwf+&`K%J8*cgQ9cwJOpv7*q*;~@fpo1tK4cc2y&6JDupoL3v?LjL zi&+{BT&Bn>3Dwk$5>P)#nK(?El=Oqx{obKBhX8!dj%$c56nl#i}>wb2=!57 zXD&SGH=y1jgZ$~srX5k;(=cok5L|tWVkSN}o%+$58K5G19g3;($c2&9-gZw)@?^Kfmwa@WeUip|cQSc9g_?rrBv9yM6r-cK)e^mCZp2RTsxT zDLkQ2^sL^A!RG9iYWefMinWLAqwT#2{Zl|wuuStQyV>NtTC3S$5`Jd0fkV{yX|)!^ z`*0}&N7|B(5zF9}@gA`D=JIA#_ph%M-S{)wM4*1R*y`41+L8*r&kjp;d$i%Wmpm7{ ziUAI9X2h;ijFld6+HegUEvo&Pb?Se5VD{E|tQ#BS?L35g;(1nh86XC*WgCR~+e`jX z`jpTA5ORZ$=Yy+<+*kAWQ!2;(rHS?L|BwKPQrrS%E)q-lI$PO!1z}@ca^q3AKkk&m z!P6LGrv8!Dp|x7F_`fDK05WR09ux|Fw}{9mMHz zd-HL~S!W&d+qX;zC>K`B;7SW;aL?bPN-w4NbDi-0q-w1<&pn33XdwYYLihyeFr8C? z_CF_E2S^sGzu&*;@^cHucByD{^oCY-q~;?p7zK3_q)*dQP+bX+-K@}Z*M3W?_&d)` zUxZ0~B0#WYk5yNn5>7&l)jT9cb^ZIxM17jauOAkrQDE7gbc0;S*w)nco%}}zSvgG% zsnY+HU8bFuimU=L?E5-asUxHWzJfLav;L;kb4$z0Cw5L7P^ms=>P3v?Wd;KLkpxTA z8Qq!B7_Zfqr5VI_bxmN0`G0BfWM<1!UfcN7o=_{VvEm#i5~nc&m(nQRmDWSoV4qwmi;r|QEqy87cFzkKy|FM!Vg%W8Wu)y0O;PFO|1MUNAi>| zFMDotP|k)O^@T|qKBC|kIU*u-qsIv8`ASVV1lYmNWr>=10%N1`ZABiV5RiIvLY#e6 zQD4VJy#@X^M_!j2Zb_2)U`_n&Z^DkQ^;cKSWCxn@eY_rtZJ&_6@c>0HS&C)ijR0iW zLp?jCpIF%UP3qy|{Vo*6ZoJ!9T2AkpK(;Ci+qp~v47YanX3*f0zzDO^t$ zi)5Pu`|%-euST~uPHFfNDdRjH3@fP_v$j6V^Yw9l|v@yEuu>EGcX<|&eu5` z2`a>{3bSMhk~t1Vwk|8IxlEQ|Y921QI{P`3GJ2jMjl`rcZ9s;}iio($Awli&uS(kH z88lP$C$maS1)4{8STBj`$VVE0k-8r(RE9KWWKlvx`iki9I33y`#-FrPOC*ndRd23u`u*2yI)**2R674Ker)giFW#Q8XS`>bG zJ8a@-0R@2@m2+9b?~f9|b3u6c$|eh{lL;MZ{7`-C##XQ-sG_Tac;aRrJ^6|tio33z znGe^@pS)zFDfym%I1A5-Ti(j9U^x5Xj5-c$n|kj)y#5;0Lb@OQ@rv;vS{+`h6HJbH z$dpEpha7zq|0kb>*;O#Kx=}F(FZjM=l8spevfU6nlv$Uz6GyZBpr5G9>}inv7(cUI!R#5nxcgZ-K2H98&=itw#aaA^O+H}!c|>!3D;DZJ?k zb;9y!`n``Y_kY8SaUKrcYJ)pl?(2P9UE=-t6NCk07P5p1l{1&v<3WT@lujC=3OC+w zQ~&`smy|n#@&o-g(kpo#BogZ)FTZwSZIMQkL2w6VY<}-Gmv;97)0nui=Wo0^ND}x? zea+_B$Q1d1*{52~lV&g5#t{B-oYuWastntwX?jDRRjrx-;g`ytj!Fsu5b=p~WnDCH z=Er^%$e}yqAyG$qW}%!W6X;i1C!I}SOV)Nz&KBw{f$k!r|01W;G-J6HuvCdcP`p4= zNMl=nq5yxN)P6B}0>gHqHL{~8x|n#F{3c#sMKTCrG_j{#b#Oh(IzKL{6y2u;^WZer z51A~4cPSdc%dHHb?6u`jPwcuD{;p|h_b7b^zo%Ow?=&xf1B+5x(d#gt;AitYH&0GkY}Sln;~n$Bf-U z3oo?~vFuO>0w6jJXn+YaFwd>zZ3N2;o z6*T7Ilhc38jMQ#3$L{#^?MAEF&1fp+f6i=VSO}HfuHD^`qXS zc_dB9>GsQ5xc2_SyPiCr*U&fX$ijr_`-gwz}dbdt1-wSfpoHk^bvZCeI;jp&(4(K^l zOF?M3I3V+Xq~Gv26QZLnCipLz;6G-7d*i=%&*lz2y(5TMK!WN zXwk_iD;HLZeq>&jGqD+;{lUSG_A3!XziXyIfq8z0e)S6+$O!m~T?4!WockFOA)v(q zMIC7vDta$(QAZebZJfq}b|2M(l~>>Sh2j;A0@~Gk^q%*L@C7}-(P3CvItMFJFO#k$ zV!Ja))z;ZzYX8B_Uq~g#SqL9?PsDavqpHBSvkFNe;pZxX^x;G>_goU1=qrqNFHMOG z9@_FnabBbCN$!*^>fF#OjAfwfH4V*?`uXox+VjHh)h8c1B1LlA`v6v3DVGW9U*CJc zo|MY)RtpDTKsOW&&M`0qn*jLlun*EQ^v{(V8`I}f^GVXX&4_MkH9E+z^tlNoi@cEJ z8RA8;;hy-@KKvfIgQ|VVm6JXz^_Yp&Ac&vd^_CiP_(UI< z!7@MH79=vAM~w_K0_8HSs#)4O%^zoD6y?HE9)=+|ARJN{ASC&?z=-D-GTTAT$UG$W z-8qgdmpc3Eh>zBM`_S)R_*%r~MpVfpjOld`yizm z)+M~RM>)<4s8lr=8jkD*3?fqs;|f3s@Qx}4Ls0L6qkjm02I#x85?`aw8>a@!-Ivfn zxj2P6U7xL->{p``V@#OPc1pZf2zK0TL8Xd)Pw#6UAbjSURX+b(O5<$J1h5Bz)s*BN zok}Se1~-&M#`K7|8pImpD;TS$1}Bmof&ht%^?&q`n=K8?5*Dr>MjwP#uW5og@UJ2Li@pzPmF#dk5i9lSHt`{{og)@r)qgXHmWTJe&u#pZX3%tWN5R&42@jq-Go_E{c>vZL z6SH5@6NY_v3%@786N{bAJo4WYlaFkoHGV^wFbKGu1ti-(c@P^HQ9iXW`!Cm3ldVKc zDJ32PWEy;hI7?5jlVdXt7%E zYIZ<%y5fdsoypnghSTTL0TK6KY9Y4v&f>>!Ts@&7k-|ciX_)71{v+2f`Qg&b=blQu z`EKUC`4WolnUZNv=4*G$-K9X&-J@<8zxp|_5YSC5e7cgTx1Mb)O@3N+UYt+d<(NSH z7qAj5RI5yo@hl{*C}kwP@#X#ORK%&^#`AX(Mu@O)k4u#5Vunx+K@m=g&(r&w&)b$S zcT)0ykmwj>ww)kN(P)#VJWR&v!j*Rgc;)1Kf;^@=dr&>~IL#6LTQlf*73V)C_!I?; z9QC|3Gcb%{GvaZ8fqXo(ueP5xLxFa!l?G`7;39Dr`3Rgi^j+I~M`C$Us-T@_ig9IZ zTsPv}G3QG+T=S5^%SVl3(Ls~O1gkvq8CPs$>YJvJ0C{jIyqq_z+)L5Cat0sEV!m$$ z(_qnvt6(pQ*7Uo`gsmQOx7C3%)daZi;QA8HWf@^#L+Aib296(S7euz&Mq-L$S)tuO zlLO?1f!V8k4T*b3AvRtAHa%g!#+gQg?t1Hd2;O!sU6jzAKKOE3S?>ZDpE40u@GAlI zrUwBTa&B(x&4+7f-V_!xXNfqR6Q^UaAVP}0E|M3|anL~x&`fq9%=U_fGlQaMre1Ma z3c3^`mPzQux{mP>HSK4{5{n3Szx2~uQRkMw1Rf4K?ct#=7TL&OA3Q?&5R{sp03S7I!>bYyj79H*;Ly$Fy&DXU!u0Gdt<-1g)J(*sVqxFz6)@UAr zx5A`)AMlxVuX!{$IzXyaQx?{ix+0p~74C7yX9BAk$xtlwGW zFywE!^4PRY;wqHaU!{tTkV6|+*_x8LW(k5H%d|n|uHIa|d%mJ+?vZM5Bi@u=74aBn z34-S-ynBa=on9;Ba>UlSjQZ$A}QIv46A zxR#wB5C-2=qjJ9f?DaJ8suY%19TfM^sGZR1=VH|zaIISI?040ewCep$T!lHn0BODs zsy*P8=aFyCanVL#zcK z^sLim-q!9=@>~qa@Be85sITs}svA`qaesD!(_HpImL9&M`i@t@6*3V?ZoG}=HW1$F z<#9OvemVjxh}`J#Ro%{K4V(xLhf`E8XSe^+drt*r~}DXpaP z)wGDbf=!C!fO1X{?ay>-0=;~}u0US}z4AAr#XGxRv6outwGuRpg(31>=^<~UJDH`l z(|Y%WJbL@+N0D!ub9A>}-jZwy48es#q;_-X@tjs=8u81GQgwWC>-q+}%l#qDBYLF! z^uE{&{AhVv5z9bD_&;;-&cE-IWuw0Y4Azb`!-6hsaM}2$of)>l-T+mDWWm|~kW>F< zk>y(Or&ia>lHR)%mq6Er_{%6FwgVAIUkWy_^>2{Bv)yqe&~(=F6k!4pKTn|W^M-ox zK#8#>sI=U|B25nC18Wn6&ivCptIr{iOn?IzBnH64d3Ot9oFh65td_<4J;`*fW9 z%K6}P^x@+6U2Oi9~$x9bdQ29J+Jj$&K)7{kudi?&|zMEp2X9*7iKImDa!`P=;Pp5*JcZDonk zQ#IjcB}+KJz#6$Cs;tdpS8C5|k8ewQIUiE@FB-hc{TjZF&dIPnSgvE9tj^g%hpdRy zVS8P7t0cON#97*Ddw|f(I<0AJV+WUvjy1JLjvX?ZcO-!ju2p>+PyjBo!U351KwSdE7E9NG-EA5(egwc()6*|ic?V&!uMfL1x}cOI1- zNX4s2l>XfM<54(DE&o#PmBZAieQ<{RHa5+M{WS^%4dH&vz!5vMr7lX&jwVHN0(G&7 zP6(pz+9DJ=S$Rp@fjkB`y!!j{`&j~&LqB3#B7B{6QBcvAJ>qlOpI=7w+~?rmHy;egAo#e3!DIKxe`*%WM(Nzf z$Ga2|igBXptmk64%m0~4iF8$I^)`qRa=fpJyt(nXaKaGA_=?)p?a%PSh5v7j{WM%y zlq!9BHN8g}?w+rK?+ITDw#yx#=Jj6$d~SQ~Jcai|dB5av^6uk6W^^KuN#H-1GY?bR zXge%HPjw`rGBI&s3gP*xOGHPDDYEGtE&QQjLkzP2mSCzu9b}C0`aT#lSv%J|si+n{ z`o}`@BEp_hMbKTJRF9Qf&5!q-*7z5Y{ z1hAD(7e`!E-zNS}EN^)Eqj*kRAU5JcG*Ga9zECh70q zR%GmoD(XYC4yHHQHOY1Uezrq{yGmYQc0YUEbIJsoOFJ^ei4MkrJ=4N26@ZbwtW>hk z%k12e&O-FJBfOtC<_zpD>k;v*(W@A3?Mbxp6VI_+K>^iX%jZOv`#j+tIgdsQt+0cV!giT)t171YVJS%1>LObhI-B6!h z3o8|my}tuC=Ql6Bm1sI$oFmF5yXk4a)O`=Vye!zWOtQm!j0P5NfEUg_P;eSe$^lcH z&)SS><181djk=;DCe3g3-jeXBwA7i03A| zCEqR_wK>1Ia>Eyo$>85MqANNrwzvfKpACtaZYWgp7aByrHH;_V(h+t=9g4Y(zWLv; z3y)Wx{<(O|*+SzXlNKPQ**9Mu5$%H0vvpxw-p<}fR=n=t<2!Ryv>EI}TL7kTPbi|! z>1=y2*rY=5eJf3dp;_cv_|&JYp1-}cwLX6S=s1#UED8x8xoPTn;qklS+Zfp&lax|j z{4GO!M_BlhyPwnXioW_@Lbe|o-rjp#nwI%g(&~A0KWqf(FJi%@kInwUbOX03;pDh( zAeqIa`SUSUGDdNXS12oI%Xs_i)$g>g)@W8Pp3n0Yj=)UW#OukO2~MGoO**2D(3FvX zdaqEp9h$4w3at~y{hu50t$~#$?Rzf>WJ^8%k8cw<)78$OK1;UgJu7#_gB=&8@!?q_ z@412bW78=vaGVmwsORQ+jN7Yf1nf%>(*d$bta4$V;w>n0!vv|#$$o>CB-#sAx(lf_ zRJ`(fK?w|JdG-2ANNy{g*4e=M*4gs;Pohh-fLy|5D7BRVULql`tgiSyHbq?MW%tgr z`{Q1@)VykW6R8=?c@y+6M49U~@*mnT$!XJ^d~x`xF;0bb!EL(Gt3!<7`dRKe9tOOf z^yJ1)!!fpLy37uqC&Gp9Z&rO=+XOr$+lpl}#NpU2guZ$pK#5vq0VK7 zc7)72oYU5RcNsj*@a4b#77+en7w5_ZkAOSP#ThmpP{bA-GISK$Hzew|=NcjkW!RF0 zHDeS+R@IpUw?ai_c z&$#97B6>tgcwRf|;e&}R!H_0m5lKm@C*eCeI8zjFG~%t^A?NvW(xP7zPhox;8jJ)= zISL%KMGbu9w>R95O!k*wWb|H|S?oHjLbAQ%csp{lnYe@&CIgwvkGB$Yy|8T8-H@1T zLW(LIlD|!+7f}d4+LBosDx0cG3jIgQIAD>;EO62o)5Wq!aC&1WE>KKjTAmDRYk z0AMM`izw2Wg1?pd?uwC7$aoQWq?|^RC$3puJ5Ag=S3FWtNSi4xJ#hT=`uign<^o5- zdf?AWK%ZmjG+GU_v@n8k_|J1{GLwtpNizq%%$e);>rDQ3=@TU>mNBpztSB{S>z8t&b+8)ByCAxP`i8(RO1ro&^XG=Q}Y zP&w~;^fC>?!jk5) zWKQ%bbKy-z_VT#4>aoFUVIil8YtyE)-}_!7;C|>C#%nmP?)ZjOum1sj4&zH;a`U9~ zx&dl1Tj}b3h8D(J&Ej*kTu9_L-?-w)S@thl>gv_kcdH_$jG4#{^u&POZSg+T0S`mh z$O*T2vzfC+UayUbpo~uN;ctNwEknF@GwN;f!pXc|ctYl-1W%A}+P>9ye8k%M+?Y$L z{s+;EC(T)KtQe(2A_{^dd0(d54a`W$qHgTxZSVbKf%b=u?%!qO;G+dwfEG(0fQ4oF zOwcUCHeq5PgLZ-Ya-jdDgf5G=+1Il5W?$b7BLHWc{iUV}Qv|1^P&%V_36SIzSijSm zsv?m*rxa(ywMe6qH90P&WNqm$Ki?dKK9o2wZocvm2{80jHXkmKD;v~DmyYx#5UaO~ z>BnD4zswAY*+)m6O^cS$@yY8QcQNAgMhKKZ2mm+EY$u}m@saq2_nT~V8hKDb0W)1( z+%k14)`e-+Doa?T0$GJ>)Pjb4RawUjE8o>y{QgQc?N%>W5)ePIyIFW5j98JK>D(Zz z$Hgfn6o>JnH2K^JHX|RPZ|#DKeocQb5=iSD`h2RJEWczJ6q%`9d~{a6IH|&R;k5vM ztx|r4&V4R3+#m2eg@1mIiX{m^rH(5y*qQA*__@jTk+Je|tGRU7d5}RMbj;J!<|)Lq zD7l;n$7LE2&g51-6TG?J+9u6gtFoU{VrT~3LQz?50J1n&|6I2hiTn%)&+A|#*GMfp z92_s&vpcHy<79PZqyYu7N=+E!+j z_LqQ~2reTb>;ZA6$MnEJoRbEN4{4^I)%Ue|;@=}}2WDBu| z-Q?Dy0;P1&8lksd(iXeiZyN;t&2t=@y@)b$9K$gZ|Dak)8j7HcDV&k@JV@Q zo{wZ%b)G|f!Z@$bgYGF2w78sERfsmxG!jH(V$@V#y7RGF$di{ z2Qg$ni1f969Edp&41Ay>koI#xzTe(HN^oe{{`PxXoa^Bs(mYyKL7CPi>brhA z2RoN3Vox%U?boQjfX)liyZW!pQD0eGeu@yySD1X{C$V(kEZiD*=fOp!xZn|NW)|YW z&KKcRYuSz@FOplN{;r8*-7>BXplM8olH<)HJ`vK5qsDaqJ7PoUYljATT7)eD)-PU( zG^Y@CApbgRE$xv>n!KE`l$gqXME+Q+ zpQ&zm#j4z~;`ekzDJIo28k}c^3B|zRvR^klwJd;^c0ZH6(Z>Mm7Pj)!OE!X<(wZ!hhP~Q;fG#e+3cBOz6WO8HIRo+ZM|8!iWxPYC2#&eC$R_5I9Dkv|#J|NFgc$C84Jg8^b zJTTZY$ou9#Q>!B9@69FBJqeku!w1{#J%E^)Jf`5LQd9!t*U53Q$5`gR#|^SMska5) z4KmHf=EjKpQ0J^#@E3y$FX_gH6m!Wkuco`$wE9!O(uE)WIbvViaxgMAG-?$NEnp}J z%T%G&c*zMOyMB#P#`RtCVpRD$!o)>#4%T4l%0-vgEOyqK<*blf09(!S<-?kYFNZ=R z2zzwoUkQ->>E_>P3b{cd#zkiH@FYHFX+mG@Q7ViwVbgx>rFUL6ti?$`9S|}T$z+&~ z4yFH^7DV(XT=u|P6vBa~X+H(dnZOAKZ?GEucpkG*AL)Z}8i}+j-vQB5>FB~X(kOB} zEyua*9_S@C9#L}@?jilMKcB8a3-A%OnEOKtSwe$o=e}q^^G3lHq^6v)t9|9y5F})8rh@#mjl+a;Y;FwJ@63|?|*vmlt9)L*Dh*1 zP{*N$Yq5B9R&_Zi_Kbn<^X$Q2{UG}Xq2XQZCB@5#<@(_bBlrK;^ulCivR#40 zb4~LBwm@zeBEByN$iJ)9HX2oojC!Pl{z6SajJ90^Ip(Lg+}6i3of|X6J)O68#y+b* z$yZmRYQBmNpttTZZu8e|uQ_=ga2(&@By!tBl?mE+EqubuP*XX^uqD_1Dug8fjXX%3T3K&2O?KKVIDPFye#N2_53$AvbbsDC**#?@4xXvF`X zGLYq{pgLbab0e{9byl_BZ{+w()IB5wm+>LV$Z|UZYci?SX4DGr7qjmv^e#XLlbDk!x%wY}BX21lIF+IY2MLXLjbJp)DZ)n62pA1+Ow{DM;ubd?-_5+<9nR*K7cl&J{YHjjL_Fh7- zv>8h*5OFiSc?T`%yhFH}M+qL8GUDpp!cdn@vQ0lK>`NLX77?=<>}tEI_8!U=kj_SD zPnWgVOmw;c3{{wH@6lGu($=;yw&gau%f0YB_Vtd;@R7W>tNlWDVUF1vDwFWrJgH5z ze5Nl3tk_o9M1;udNq-aUTovmjlL{trk)4R?Ob2Klw*OSY=9v@d$tr-Tqj0lIx2wvt z&w$CDWhb@1EQ$^Ka_`@b=4sXnpjrX%QZPZ_kc8!+7-5Z<@-uuyV*B+WG41SYXQ}F6 zREnq|K#EPp`DjYPQM5d&?-{9E#G2Zb-C5A!IJmmw5Q$yu|bvwJ-O<1Tj-xq>|DU)f%a?5)%OHL;|EDY3yatE1>}c)djVRE z3wR=*(0jUeaGR&MyM3kF*1P2c2QSacsZp~gy6WMH5F1G4G>&UwZftXZY^>{hMUK+| zOgtpxe{X5ivWt`4$E5og^*Y(QMt_mTPj|8fLonF=T~9fE$v24F`j*HYdDST}Wipdq zB}sX3R0%%=s)kb{+pNRJ2$bzqE623y0Mki8uDOHKBUFr|mn5rW$G!~DU|-)j#+u5B zv*eg5g;+{y5K?YgT7*SBLina~aFfW>cH8lBR1M zmhUgE2ddRo-ch4%XJvmTn8vH9zJ7MRK5*iDq^y;t&WbD_)}H4PHFD6NX&QEv{63|6 z4jVREz8;%OjtmPg_`Y7kze#JyB&#LSp}0}PhoD5qAM1b$(m{q8i-R>Ry}Sa8Qr%*{ zrTzZ3nh}6WbnmVw-rj#5J}&r}eVzsU87D+DttW?O&Ok2getS_b#yBTfSYnaErq0o? zGJ3FB?-0S7i+!U`+)AkReNzqRK8G+T0uFIEx{2+32#pBIXpcCk=P49}bSuH*w#&~ecJ z|0b0b$F4!)Ir;U7=NMrqcIygy{2zBnh5W^iYhDGf1Yu)2Ffxm6AMAT_bA0bh>GDPF z90{Dfsesa-kji+o(H!OJcUhs?VAm)Aqo=o4<~t+LSJyBC`w>wy1q)s2uh6vlk3yz8 zD}=nB=wYIrjU1%-X_D{-)09!t|L};obhiM zIZ0%gs-&4vwuZYwJ&XQCUu|>|HJQGZXB$`8D>(cy?ZIlDq;e%gDOz$UUf-3ihYf1m zh3)TS1X?>33a1h3>bzeh?i?2BqN3_w=I8gLHBrk7xZ8x;uxMklpU)~mW$(rO^*Lz9 zjS|z3j>#S_z7x~&6gn%`VniyL597oOw7WTN05tXI1e?yD#6}PwUl^-9@-^{yuat=d z!2Pk7B;3=2yC3bT6yOJh3H;wl=Eg6z`-T`khBn+Ro!zUAdY_*P#d{9 z_1{)<_!z9ZJcPv6Mw)t;E-@dg*B!`v#};Q zamj8>ocn=;0v+}C2KiT#nubL-{C*!TJ>je*v@fSpvx~0(k}h2ksqR{NvTx$w zwr|jr@X%~G-{iTO=C{aS9@J72%A?E}2e3lxfXlfUP;`qWh6SyR>R^rSe@*pC#RL$0 zVM-&BTAu0+@q@ecbO~Ws#Z&Y(by@r0*WsCInE2J;!)wkt1xjY?#?5rNfBjKv>5Wz} zi*S#dFTTHEI6JklN;{ssO+K6WQXyVZ;m8V(R9%*(Wl`+ANPPQ4gP%-Z&%|Lump9vY znp(q~nd9>3am*r9hBD4vJJ?)-9h1fZL>#5MEeG@ShnqH$)Y7g;7v_M~K+EFC^4so1 zsLyC7&)b-v{p}-nik$sY^9t)_OHzNsyag+Xm#0Bc)?F+BEp6RH{Drc}mO^62zJiqXzoi>1BdXc3Vt(C_+k7SwY3Yb8r_z=wsyd=540qpiBEuVIOk zoJYB<29A9~K+Co9Gt6eGWfxR5ZbUEO61RruTsEpg-INnof^oI02P+(>1y1lvYS{#> z99Sr5GQ>ll>GW$23>@a=y)~d-uIQ|Da#&IxPjLqHq53UF!`0_BMLRP>xgnjKyx}5s z&~_uZNQj$OXQ2&H_^>P$-m?a(Jd&2h+Kb5}WsZ{Z7S<<~hta+zfWfe{`R)?5I1dUb z6FMt_S*U0g$U@S+l}!7)wM85YXD>F$4EI5bl*?WG+W^t39frjBKRDJ4_zJ0}Z*tgGT;%AMa@$xwdQ@;@DvCjZY~q*;uAr zV;7Z6^$G2)=s~$cNmPVLT$V|Y64(mg_622+@FR*s%FpSfq81L4F6)m6k?QuHE>_1q zd=zFqKGL1<#|h<_8|QNzDA}mToxbv7$=o|VRb1@+Y48o$V$sCxGawwwY9L2s$D2GZ zMCgK))Rb~S+0ASIj&R+LI2QvTd19u+7-s78G%ZSD#QB`$Eebl9>o)AC87|26%pO>( zw&!}%bLji@UIhj*C@2+E%R*FS`3T)@*$psN=atY^9Tr3ghJ>~?U#6+eEiUMTHSNg9 zcs9Rg`P#!w@QOq7he-){=KJhM#am){DxuWwAL@a%u>O+)UrD_IWig@QCyrx%^N%wIfj@hG4KE-go6HTGM+tsh39dFlIKKHiDs*HSy zxUM%i?<2YELnl?sz3!S0yW1>1<+>}%{>op1qRSQo{}jPGKL;#Dlproj`DJ2|YtinjkSBJX+RR^-?x zXdW=~f_L)hgp$Q;ic_-n2U5i6`wmmx6PZ0VMFOgBFX&n zBpl)ND<`CP1cAyB?=->yU9FRUCY6~F+;XpSdl*(O?I_i3|mm2KMYHdm@Mj270s z6}JeswBNFHe}%LPUiVyL^DRm-Wk%AZS07RR%bQ_9j07s-#VzSR;5h?G6f1r+P$F+emi~#skN#_HJFb|x_-ga z=N_GSKh=F4QGTcFc#OWVlPmfJVRx?|{YW22{rBUPUj-p}(};Z0&z3wz6IJcRr4+`d z%itdixiUzDK#RMS6Da$8p>a%XYNl}KWcprhAfxb z%|)K{a?zt|1q|8Q`79yovaPLO?d<{d*G2G-2U8(5agAHY6}#IJ)B-S)V^`Y*#-6>HJtPLGT4ZY-A)!_{u|O5TlNzV6n9eOX z&n14bTaciQuk$tITKfSq;APS_&9m4nrbREX=C+N|l+w1-PEyiYNc=`jKhRspIkxvz zoOyXx$qOR$FU0oI@e8%6GUCl3KOM={29+e`IUjR{9YMvQe82+}&e)&fKjmdRPTr z&D6#o@T17ab`^!`fX5FPQRoINJuj^3-ig&fwqz7c6w`gFT+ncT4M2Gh2-*6X|r zvt!rZjFK!DmPGf1F(qKGOwvUFJ;Yl`3<5XK$D*+FPmUdy9_>G*EO8F`z`-{!*Wb!B ze0mXDa88WPBw>Q0QuNRn{xf(I%xY>}JH+)@6S_2mTqA{xyvZ!wVj*F(WbAk9sH1LN zx2R^#K2IkdLbGS2QO8s@ zY$4IN)6VF`aU<6>U6UKLd}*)jgC`mc2huho3&S@kL?bhw7lA6Qorv5>ezy4N_}IG7 z;bKs)=%vnatl7R0*VH*Q6+;##FD-`pC_t*|4puFMf2E~6D4oOn{4{@M7=UKrp+o%( z8HF|b4dTDD&QyrhSO9H*O0}r6ttNAe7^9Xgox|GSABhE`L9csX@jfGak`jsZ1s)OL z+QjySx-|7yw$UwlSp8-p3U566bM|_SzBY{B{_fI@oCD`)pd(kNHXQl6TnD!2rA;l0 zuOZa9^U{fI9s(HbFyRs$cU_#7`ZbI}0KqVF|n~_VnbL99=b}#BBl(zP|(|XQw zVQF=2`YOW? z!Beb97-_U%vp-pA6Q9_2S_ZFtLP&BVRq8AkDWm}dwSiRc`foAv{XP6XaHtINZQjZ* zw~N*>9Cqu%y)4B-Ze+e zP!Qr3F7a}G)31g+QT{e-?WR?=WRk6WeQ{i>3p|-enKGnj|4{*uJEktBPy{F`v;BSP zL?ZRSV&_7}(YOP0&2C5%ds6m42~|V?DTWHmt?W^Njttamd<=MzsNw@{ph&{QH#far zqqg2vXilzZ?oQ@&?C%eAUv?zxSjS=6*iRJ+=6`zqiB6SS_ubjJ{Q|x2Ia5s4>R+8!vw9?wOoGZq44gS)RST zy$Sa`e(GVVUhOc(2~Kk)kD^ldqI_Wu=H{gRi&|_(IFuO@8S<4ISPBmdzV$fF)3-^H z8MZMSXk4sM++#}e08Y=>LoKR3cCyyO_ga|4lknFDs>GVx!dOw9$+8Bc4HP5~h|Y^D zK?mySk}uN~knEl$pHB8E!Ra&79b%xfP9~#W;qV_9u~=E@jIfex1{Km@fl_P*@=8v$ zhIY|}9@S0LZT*s;ZwQ@Ebr3z9_7=2`@^=JMnBTd1e)Eg=ov#gWz{9_^Kv0V@w+HOm zgMqmLYaw*Oz=0a{PYtu*(d(+{Td+33HsJ3TY6*D?JApppGC&24UxKU(OGb~85M;c8=(>R$Fj zaC~7sB)N4aT-Phk5O`FSPhp@)0ojiH2s!&Xm!^n>1V4vXXCX(=8yx)2#p)TwNNjes zeM|oK1Ejb!zhr*HJdZmsmr#cbVMnHUM&#O4ugeRDF$Het-(XvW$D!QTjIOR698E*? zf6T+@mBS-~_sfe5i-oNz>BK;Gv!4T?+t_mbY5@J%kUTzSpMZt5@~>H&Por$f1O{^x z=6K$`k4*M=f};~eiLjsHA}A+5KLF1&p_F1LF7Lc^t*7!v9&icTor#Po9E^2sK2_2( zP|%Qa|CNDmAq-$}52V4bprNZ=}MI&pK2&qBKD8R>AYTZ=L^L}yQ zeFvO63*I4>ZY>U3i{6C}@bgSfLSKv>JZ{cux(sc8QpM*T;Avtv`>V1UH5c4!yr#qZ zaL=h*#-UxRqKsO~p)i*A)9iub+{=dVhbwXn%Kg-eI{5+3^SGltO7aXmlTQsi2)iH; zD(oc`%`plmTHqg)_ORx{(6H`BpuYyE^gF#kuQIVXwqbsCRyOYZ8Er3P<`&g4&)aCQ zw!5w3d)cTmpZMjHG%I9?(`s-C$bB!>#V5X1fGBfX+fd5put?Wj)5V^qeUty7V(@D+ z*W5=jG2Gr^!ZKwcLCn&s#6PN%wbRof&LfB%z~oOCyrIaV^6t`R)qfysNm7uS&EM{u zCwL|ZX71{Op;2*j#O7n`3_X1)>GG5gc5IJnOs7N9=~B|YriM|aW~c7rVKL4((~wuR zKuT>+{A?lqOa56Z>FDo8iuF&+%$a(>CgJ(_4Fe@G&tLnqQ|tz_F!?I&=Yh$}KKop{ zi8=AVh#t@qFT_oa7)I3v$U(t}GPDdQsN_&cWp9$6{$91Xzt1l=WHa{b><}1u49nrBs zoV9ad7C&uJN-Xgn$18({n-AEXu{j}szB0$fK+!=9L7s&XYhbD1C><(>Fdpyw!y|}~ zL;388;jixt;>FLGl-8SU&1xHWHaaB*4n9pB{{^Rme! z9F0$u+m)5Y=yBQj2kqgxWs#pJRBo*L#TXl;%*9hZBt{GI*zBSy_y~K9c?-jpP3^DV0L7umNNCIYYII3oODR9;#*cQ83)66+>1Za(NU;0FNZor{7VW%l5G6)WN*; zj8J?p4}xdYXn+TjGU7Zgk39j**E-X$a$#1PJHSzzLjYd{r$^$PMClA*hy?7t_?{q( z%|l}2DIzHpY%rs3=&*E}&L_uQGVBZHobIw@4OnzoQ4>(E&wfP>-*8H8B^E6X&K3TwUB1 z_7H6hmjk1TbHqJ%Mf27+YuUv)o?gY=PKB+L`k4&Symn%T zXlVg)B=Q2jf*_5aV2D64zmhUfYjA39Zdr_WPsj9c4I=&!bu4C4@+QM?C^MMlJ=sxA z*CPu7E4V4{C4>rQUVIiP!i+^WIGZ}I04g1x3R4||a$plDZqpci+K|W@=OQP3VqZ>R zFf02!Yr`$yZ&?+aTIc-ijNGW}<#soks#ze^_s$KA=4JC3YeTEQRq73|i7YN0y4H$;wk^Ny|8lSYzKGbGKFi*;K(SZAeRCu-mpWV z@a`V2u+j{=FE+fm$Xbu(cyI49!YTUkE#%D|{N3oto_9L7Hhi|_A!ypCnH!o9fWa4f zG!);S1$l&fFxVyW%ySuxedB4BT1s79P zLDlr$y;eWgZAjj@hLccHKL~9cML+I~wA|eT29 z;v1&2yK%As0tE^1s6{0OSFv;gq=$9tm%H(om{Jq4f*0|2)Hp)=1(qS)-9AymC%Se7 z?0{2BFMrwHsZUo5`^%`e$1W=6v|&cvT_@O%YHw({fPTpb&DB0M*rY2c=Jb(ykl^L; zwunvEa`?9V1gTV5Itl3%BS%ImtH74=@P!o_lFRr{wxby~owiYF_#j=9{`+>~N`j{o zc@+ly4T5jy@>eDLnlEF18v1f(rdS%udXd^alWy6@ppKsY*h_{3@QTbY5cgF3g}vCI zk@=*N4@Xfu$aT6KDh|1sXgLBiX z+sHOEFD*93#{--@V)9&eKg^GfgnxZL)YKdJugaGjZkRzKKD9*ub@f$m(nIsl)#7JT zgSO;#StT`{w#LTWH4ZkPG9*@(uB>NHL-5!9+tvLLu@`uJ+^;_>-nF$-j`OPFedwVZ z!C8g;uYm*xECu>fQ__spC|r|pllRpF0}jP*O$yX`6)z6=>sz%ya2{8GPR~+7y_fgG zKV_G85X_Vyz5bhkRiLyym;-G;U4zt%)xLg3u{`nJJ+H6li&+u7qLP!7=f*N#>AFA( zuU#HV)2JnS3f`&pMJ1ezv49VxmLxoFYoQA=$y>>3;K8WXUQMe5G85-PetXztd2mQD zl`EABM`e>_#IS!|q4S#?Ar~)?s?LHOZ5TsdXs_9n=;zIZ;3EuHNPHnERC3zxh07Ei z_AMCUj<(=LZHprM;2fzpO&@j(1}{lNtxH_lRzuc-&d@J280Jgv1T^DoqF5pGOm$2Z zJd^jMj*a3e5KofS0TwI-1r)-}ixZTZU}9>GZ~BSSc`B_)+|QP%66N)MlL|WZBV_73 zy1y`TGzj#67i&fH1nS20)A`E&?x2)th<+2iJ(Or3Xe1RKy7g9yEsE~&2d4}2mK(^r zv)IL$=0FC+6Bpgbe=!*A*K0Qm_xJ6se_I&0--|w7P>af!X^!6BI)eGUuXVoy_}^%M zeCR4Wo7mKp$X=WaHG*WI#?>PYpDsM{Dm~fObgfegLM6inp0i1x;f#%=gWL4mgY;gZ zKS3KmtlNXy%B5Vyx{)>PI`LlN{wwg2Ow{(%v1P~o+eg26BYDj2f0BcJma##Wv35-?A^7`p#&S9#?XL|pQL=10Y4Z*uN`~W^t!eT!5BZKXOXhs#W^=V zNQzv)Ur${iLRuxSK_xexb1MbaX#j0YG7vm9Q`MK(=jNb(G+|AeLbSki+EgtnIpIfm z1=m5>rajbTGO5eQeQP&O#ZV0#atj0yc1eNyAA(>&R9Z9ve643P_&|BHy7s1=01K9d z+B@Abd^v1p9;($|Vl~=% zzSQY@kv|meq(zhof^?zoOJ>Y?LJO(SQNDcUz1by?gS84q0r_*|+=(D3&VGrpBE?d0 z`kI$8*b`=Xfcwv?=V!9bx20`&?=X}YttqU65%X2LkC_)>VS$O>d9kphts32cgO7_> z9PCe82q)D(bldfwmn=J|)8D9DE!X5)W~-(R|FpKs33(lkw;<5}WbN6zUG86vG2L?& z>Qvr#Ilp=wbgBB?6_q|swc78aCfntvOg`h@%U7YGRDSW?J{t3zW!&<2M5uv!q zj8H5lpkiKf&zmJ9IK?(0hb(8xU51b-M?<;kJnQmmr<-!_#1&lOdA+XqZ=T16pz3Nk z&b8435AS;B7|Iu~R-GmI0lavpa@e8zebkdW`{K(2$nCrbu#v>n%WOiK z>8J5%*A=);$B-!ElPafXKN>bQYA*f`dGO;XSjm4ZB)N2J(?hB8bxo&Q_0$OPy}**elh=Dj>N5jU1r_HRKf* z-KkvLvjG{0HTn7@OAXU;Co=ND`hn}ew2njZy~owkM$ z|8Y;kiQ+QJ<$SjSZp+3LWbnmt@LSR)qxxm`tTL|qj|6~IS`&CW8Uy5~Oi4IY^Z+1B z&I(&?Sj4*(!>oaWq%+fWQ+iVptd(xN*0ofnhTO#V=%#EFAb_U=#?{tgHpxG(BTg(G zR9hwPk@{U7nuMDkXR6Sq;KG^Wjcn8uI;uh%64!#Rd-c1e=n+aim0(+Y`M{HbIaYtzd`bWpZ9y>pYTCX{e7dg_a83^>Z{Qt1(83ipS`7vwf) zFk*I?#Cx@UT44q-V0Fa9np$dqdWvMdt`xc9_q(6$?0TQPFzwL0XTA8s4Z*{f+!dfE z$>~$n@wajJT%u}vnqK6kTF~?5xHl5nn*5ZtJfB#pP%2`Y=^Vyx1J`i_z`I{U9$0fQsmI%19vB(sBo{XyMJWrvM0EhVN8mI zY1_rh#YCc64rf{;!wK}Wv!QCkDwVt9j`rsBVB@i0Zr%el$8y?QASYfFl{Y|6$ed(6R9p-H=N1&>q6q|sEOOdJ$DI&_jXqjW!#oQ zrrQBy9dyORy{$j&D4vIWkx(5VX3K(5yJARHM9_|cy1@n!U&_bAF){o!P`3ek#nhV1 z0AS#1*r zj+e8n4c~I_%5`Nylir6+6Iw{Vz9_bv8+tfkIZ9XlWYu9808HIn<~!Sp80P#8Yi@=U zd|Rpx&X*+wKJA%|oY@3XXHk*hJU+DRwr`ANDysKB&4$S_*7HD6L1XGeL=Olwh!dxK zmQxocY?Xiz5Q)j;-ISTP_2C3$V!W5T;`AF)sv7afu!2WVD3%A)6oQJXiDp^U^8%*b zGAa7)G0P+9sq=rLiTx)ig5a*>3@eoS4cC+FV_)X993hjd&mcS7m_(MH8Lk4=gY_2_ ziKDiNUs#q_)JQDLl2n6?g974MAil167C3UyKX<2BqzJgh$Yj1;VJCAf=eG5eYPAq+ zfE!sAL{Kr3P|DI1^KrAutCQ8#%!+J4#SV?mbddd{P*tU3YniT;t^Xck4Jji6&vE_F zu`d4sW!UWqhHkeBuF0JRrmJrbs&TVDAz~PgoC3mbxhe)c;wJnt)(4Z0cy%A`AQDjk zi1Ae~oZ=^MU7A7r1;NLzBCpf?5St@jAbUY%tH|fk<>hwq$Ed+g#A;{%b%dqzo|aq^ z)UBK(?VDid7s zk=a4>c~)3TS}NszLb&rnRDe!-F0lxEoYR|!q$s%Zpy_E)LI4J3vO-qq5l4coGr=IUZHnH@z%V!%HFb?v}{Wnrup*S=h0 zVEjrek65(pc?+LtLL)-I-bPaR&1#l=ACO`tztcfpZ9RAWJgYzV%sf z4#DoyLm}$OY9zK(9Moy6RpQG7ax1;;Z@VbVRrpiJd+xwWw(_bsGXkx>dtu+?>dvp9L^Ej z&aXG@)(dyD>xr}oP)f=ZoPxSEY~`kNJ5(x0SZk5kX`M;&fzxi2Fh_!HNu>!JC3+9{ zfPFBg=^1V>>KJPh_d|GQecYRMdBQ3s0C?EmJP<^N&f{L$gn+pp(%`r3x_yAk<--$FUcljizPzV?4+MDt1c zM1t3tKaM^|EzkPZmDxV-jqu$e`z_vDwYzFDLf3ef?U1`Zr`LxbtK+;^NxVO0HK!|E zvR_%pLj64A@&5ft$>xQD3?`RS6=Q*a_7M|7cSLa{!U(NKwsAlA zn?h5uMmhOT1jfhX>nKhtEFC0E$71wAxspuZw$v|1*hYkVso$7(4OV|(v3yJ~YMMAy zr7t&gfEC=;>a!sCGD?H+RU>G}@hZu6hdSB6cg!n2VFPb&53?~#Q%j#Wsk2=NT--$b zBEyRpK3O4ZLHML$OLEEWfo8REq79^3ljc3uN!rU(++SXK~ zYb&t5{NYfS>0b;vIjK8d=4qcsG)e4Py7nW5^*$v<2T!7tF=R+sZryTSTshcjg11M` z4&T(z$5)qq;#fdUkEyuytnyx5g(^-zk)(C-2En8B6eri%*|2I9``85Y)${7b_Ka&n7gqxVd^Gc@_>xC15AcR_%Y%sb1Fbiwdk<+s!Ek?b z+1)9AHJ%7i)q7@K(>Ysre>rejw6AmX$TRl~^KKFjNfoAT;@8(z-(hKHW*LC_F3mp*Fl$vhrJB5RAXbH zo_npY>;M&jR-l%atjySleiEW<8nB=aQ$qfVDG}rQ%fN=EVWR;Ue~c#7bly9%1UnNL3NCWSD7p0^OGi>`}yJ4pAf3Coar0YMMo|KSQ)i_6?ID(ME64N6{Ou%h%k-na$N* zVpoyWY1-K19R-1L49;0C>j|17xY;)%Ejr2AcTyMzj13`w%rm8P=KZfv#7q-Lgi*C9 zOCpp+X$001_8rM7c5GX_L^#NhArv@~s5Cw-ix3~}%#=}5l)=BcUflKMs*4dU)XD`a7~vznKr3qgCP_Fz8t_tvxT3seMraym~V(FTMW8Z(r*14}JY^X(*FD5=Iug@MxiJ7Vg z2_F9*q%o2^8W#o&>saDlyfUph=qoO{{oQoXl}->@FGTy#AJ436*jkuqu5G)KGHnL{#5~uSz%}+7d2|i)@cV0rsnh`qr$)!2%+;RE8 z^?N_RYQ5oaT@ik`jY{MCz1YF&&DrIFH7?XBJ2Ei+H9~MDV zrZ+#pf8hH{5^7X@4d%5UL6|6zLsqJdAE$H%-z}-ZgelmXw>vc)ao`@(A#&3${1d4k zmQET|xYznfw=wHDUl!u;_fwzy3HavglhNk09p=3^s2)#lUW;@-f=9R0uMk68z-H7w zJcK@cX6(xx;+$>)UKh6h{XWkU69d44@AXP5mx5(CQ{WCNSz9q}&e9hZIuEh7T?{4! z0);N=_W3a{Rs&_nL7lO@T|Jb^sAii{ON)qSs+0@{h=_5RBw$*(F7Yf{EHm}A;b`nP zhgCS(+Lk4Vl(r;&xO7Ns=rNXoDggS5Uy)5SW(hP&q!ZqXxSR#7ws9#5zfPgKL?KDI zxo%(=kD%y}l`fXXDE#z(JA+vzJ3RUifQ2#+1EjiO9K(?sla7Qmm5oGlxN6NK=((CK(l26CB(KWPbfy*N>Z@QOq1m)nndY zA+*}?M}@BMJA>=MfO%>q`IK!kdi)=a!&v!z*98f-$zU z&oSYolh=s?#~2v39YnQWREgScNU>i1VPqWuf4+-kOY2^|j?MQXdCngaYWEE9rZDOg5` zZ)7pWY5w!xOdS57Vwhb1F$96dparlo31OmMm_Pl^Ev=7*+PJ8FY4V^|M3L~*s$M2< ziY_oK3z)S5N0&9}&DPegh;mP5Nf-?KoTBF*z=n&N;-=CMw??s2@5@Ox3+F?%6uq0q zvK)Wrk>1Y)X)*k};gU4>^gteiFZYM6pbL;ct;jV~BS(S5TwN76b%+CJ(S_YD`l?mo zFa0RN)W};BB7oXjxS*CvUSmuuyKrcIYF)IxkY(R9UTIeV8r&{fJ>;sSJfbtRoX&K0W6rU$Bs@{!!3Qsilt_UCj;hrPZ0j}ZUlg0u zCHZH7Va#eN!cl!B%yWUAsaWynmv+{xBlWN}vbnSiyNyO;LCJoj)!Kjk70mi(sLX`O zN8;us6qFXdrYw!;~}?h{eEsyhOS4orWJQUl0o zmrMBbmu>wQKJ2F7{kVPT>}DW(e|fF2c~R^i#evac(6gsx`^0a3OaJDiqEM&i1)2yf z_kF~#+JULxV~ANX&z&H7y5gqLLQNpbip)>rp~4+lSH4woL;vF#;5~}6Lu6aDgg2xf z<@>TP3+Zz9DhF4=92BchsaiofO0T`mBUbr50w?cyho9-~0w=*hs&E2#3@Lt#8T%U`%2mm=*M!5)z6#B>-^{dJY3T`Amsj*~z!_a{~ zT`kr%_xUBz7Q_|1@bl~&vF+tdAi9)pv({EcaPELAddadaDPuy5o9m%=s~d!c#SDoM z+kiy#LJ|3;7ktY|9%QRdkKs|-=|+jNW4(H@Wev@JLP4l7yprSUx?l-YyzGr?pEt|K zz-g#PLZh3?h;(7$&t#5|3}mdB4(Zz;@~w9uUmF~lGM2B+p6@z-x2Tnejdp&}yisN3 zxS@sw%}ihm+BK~~OS1n1eD)49x=4RXiT3A==qCJVD%Xh1%?S!iduF2J!FKQN+cxR? z0!7eFtraux+ZFt=c6}1r6-H_!a+x5frS4kgUUP|m5BNzy)+nbv6LE?+-knvvDq0d1 z%dMOQ4y{(FAB@R@>`mwk+P1W!ODtt>740D-W9d_5lb!9J zkN=b_vY;(@NcEV4Td>8DGk$1^M_7@gw`HS~P6k$u(gsY5fjIMiTu9fLb0<~$R_OmB zI@Tl%aTykPMy!5VsChzl7VNUl++|$<@n66)`Aavw}sRTQlKBFjk9RJPT}d~cB~N1 zb&sar0TXx0Vy@vGM^vME$KrqpEUC_4uT&V-*}jXj`djhD*6C^_-j6XHq6T)1>3~%O z7o6e&^Yr((Xlq%I#RlfPgIi|y6Qfk# zE=JW2LrX)03o!@gB=8k|_E$#SvKaYfE6d8*rQfEa&k;C&a&cC%iSGJ`vRam~LlpYw z^5OG)XKR9fm~6@1iC>QA28C>w1eEM(>{Ii|vtdHQtYc?BtQ^}*1*=ES8|F{!k~|D{ zj||koAnXXGGRe;H;U6y7u0=QZTlM5iLv{Pg6MLfl#M@h&!(^C2{W8y51p~Y_Ca+|4 zurlLH84OZ_%bxz9aA!7slv%zTpT_LqxwcZItMcvmu<7s^H%K5f%WGS3Nh9)t1R%e*T2NH0I==3I?OjwhA0vuFHFjJoMj`Id=4U5sLAc1E zYBq}mr0Re)70b~o$uSGEOlDmQ{O~lGU}j44|1v>P~6_?I(pV#L<|xL9;6o z!Ehro@F0Hg1^xVKfH>i0&DcaLxbBhW#Jo^ zNis5a#rl_SEL)~mphJXvkc}>LNpYkrQziBwCYV*YyXV28nivD&i*f_XllV40)AphU z4w6N*Du_~TBp1C^tPWbgHh^s!a`82vQ+NhXVa4fW-$i~ub(tnR%wMTUiUb$p4hEUF zD^E}z`tb{{2q>o2KZc&JKu#r3I`Fw_e?3b!U_fA&sZ z#Z|6N0*YxgnNIEcb%jHYTau;tlMkr|s_ZxE{I51U2EZ^?`lQb06`b8$wSket`a(k= zaHCD1Zy^oFxv(?xe`eQ5i+Qh}4{T$iY(C16c(Al?bA7!g@4z;qf)`=P^^wi#dA~12 z;`SAqHFIlpvn{(MRhu=^X`@YMm3FRTPd!Ijg&QLun^8$nR#4`3f_nC5eeT)2n#*>m zAVVOP!;8Yy?V)EDxpMx52|-4WAOr($qM;r?<;Fiqm!daDkkDnki!T+#Dgj??ZL}jO%tkMG0(GD0BbU%dj8yi z-=4P6tk*Uq<{oXC5q^tu&g5F+%u*-=rJ5D2ks38tOxM99@BMA7%`DS8XbtR=^|DCj za||fs>sb6sjWuZBAR2Aq9!<^iZed^ma5;vdurP17etC+cYg{`g+Z~;Ux31w&qh>0% zX5NKgDRkh9U>%2VZ)bg9?IvweMk3yY((4DjNHGhJI4?0 zbuJUtw#-@{e*Vc~k$1BHm;~@O--MOT1FQ!axd3_M+G|TU2B7fYX-r(S;{CS_=?r`%@S6Ka*d#x2hW_AzD|5!;2aC3`aT`RIEBSDazouz zs9pCG8gt01c9HHYj>0&gI+`0Nzf0*j{>f*c(Lzq+Z;Nri{+3I2GWOELh zxT4Peg=LrLmZ?6hiChcAz{&Vuy8iB7pY9{ZJ2Ma9^iBtShb-1M4!E#++1#zv!~CX5 zoQzZ(59;jbNnvogbRQm$z{qrp?EKUTRLHLj`{n7xhPBo|{Rc1XQ;%R{c@wP93u(`P z>&=|xeSPx5xi-eN-#ytTM^Y_#$Y&YN>6dfPr9;r# zobCN@=D%EfgWITb3-)kaw5ZQ=m{e!I`Hy)J@!rH%7#n*HDB!i<%%_$c0mqlWeUSPj zR#z|6H1SrMaoRss`^$Z%jl%?l^?@z#-tMp-;9uBpxJ;SZcqO$DDsjuUsOEw%>Dg>C z?Li%*B#nG*T`P-W7S)> z7DBgkPig(+&iixlk9}u&1)m+wxDcN}H#nhM^J$N_vv+t{yAm6GrG7Nr-L3UGnMJ?3 z>U~X{RLi*BX>osNvTpbZ*0p=nf^$WD4B(ivh5wgxXshvW!NX}2v*-{I8MFz!=muLN z-+rHS{Y;FZ|9!Ms70^Adn-p8BN|xU z#6TYzMht&8e-xNSa4Kgh;0q?Il~*Wuf^>wp`=Rq~H{C0V$@EMBD_hBPm<_8xpu#yw zu=m?g?nWR42_;4NvFumjQmB`KSdOyLzvz+o3dji;R6hBw~F~?Q>2Zln2l0c>ex?ogmGab7dZP`K6&W=LD6!`3pz?gP?~Td(hHK!HY^|(U zr9f~tySP!#+2%@Y|1Y|{II||w6%iTRgFuoxTozJY7?m9ah(9VbBLKzAW2?Z`&1~48 z@X|#lo~XiOz9Zvusj(tk9=$36Dd5v)o$`*ahMaB6tk9OYVe#vSy&T@HAX-rnQoO;d zywcH$ASMIe>h$Pqv+N)ofi*0N`6&@1vbu^ZO#$7} zvwFmAfwx9pD6nJcSgN<^U#>lioWrjk5hr_p7sFxOWgGM`}Sk&&gno>O1FF1K%2Suw`l7L8!K^qEQ{qd3W6;L$QV#ANc&0T2y z4&D27t(?_cvT;k-)FrMt*<}ftsDSKA2>2tYF$Q_k1GN+$E^WmvP^p>z1qm$i1acNb zM@7?*ahvAYQ~)!*m6PO1JhP-%0?t)iaZcfy?+t0qQo`1!#J-ZNB&M_Bp`S2jA6%}4fC@}i?l?UDaV_cLSs zOO@%OoY2i)Gk*8O|JMSz?cMZeF>ZT4MJJ9{wKO9-G6RL&Yr;-R6~$bS*R5VYRj{a0 zVoR7hIc-&@U#Xv(P*ok}6vVp)t*x)qOOtl(?OPE61Sf#UXeBep!-UG+NO$3wc3Q7( zL4GmwiGMts=-?5+(r3R^dADZ{5r-Ux;E;J>z~Ds~ob=0&k7GX3bNx;JFWFy+_Cgm0 z2lI)H<4CANhn+RpHuo*5xLk4w{K))gWnTc2nB?M(+x(Z)7k1R-&@g%dX=+$ zVSDq9FT#)JHO#6w3;4v)ssL&ZIe~Hs%Y9eS;1G;q5d_J1r!=*$q41vN4T#-cXJmv) zv)d)#Eu6p{Av(Z%9#42m83e;!&3w?2Dj9EE81$seLnB&&Y6RR!(t`?`hAiw>ew4lv zhxp1;!eJF~w%7oDUMg>+BZu+rz@0DU{jVga^R zOBr#=cOnT0^GUSro)A@>qCgoZEZViF5nH4n%U&KsZ9E@K0$#;y*t^RhvF*83aiOOr zjXQn35H%zD6`alnG-K(7sL$9OlMZ(rw zl@lxa)$!L}O8o;DLaev?cP8W}GA#2!vGHa6^BIX-E@Vxd=D3!-3H)vCmwXfG(Me{* z+=`0fiv`38ei37lgVRlhNcB18F>Rg}R)Z!4>+EkpY+EfhiVc0)b7uGzY2l%Oi`$ zUILPdSm81C(E;)+G|1ZT)QOGcI$C){mFyCh!8MnD6*SWJr0^n1+W$>I$5ggZ+NkgH z?mNV}_ur`S5$GDC35~$+fRfzlAt;Tt+ujBs&sN+C)b%i3OgWz3{(U(r8~r|q z9OH{tRFS@7S@ILB_*BeeE;P_q~zz(!TfeIal{;SQQtEwulz*8N{$(c8c>cUIkebjR zGQuRHJg-{Hn9eyoAbLKOJNaDGxg#(5r4PhiFk8XE+~w8BkeSPjy(K zs=2xrjt2D_KV7{4*}b|Z**ipn@`%<2$rLHJ^wD_t5GNllIjY9P&O_`hf;zv%jx%Hk z5*k|20sW&(p13uQ4VQM zj*|L$u55F6F~$TKixl-iSw5t7#VD4dy}(7xzq^4mf&&`U1NX*$2m=;=VGXg9meO0m*bytN}_Pes$H z=O|S8=RkCroFFFJfe-dy`~RN%FF`$7!o}8oq1A^kgk5sNe$;j2|!lKC7?&pz!|ZiJC`T%p0q46a)al_IHPip_L0 zXa?=yiacD32Khf-DjS-ZV9C=XkWaNZaPxfJT$0bOsWz)0j4ivOH-kviu_VT{>2bOO zw!nux=vf>nDeSxCb!Bp_!xYCPpW8=-{1)#vG9zhg&3Le0h4xcOq&`-4$^8iC!u!oL zG@X~nkBOzt% zV3fwN{+3|7a3@wRNsK1Dgj0Y}0Hkt7A%>vzy9dXEgRFC!R$0W^AO%j?Rsj2lxvDc+ zyzGe^!ovXjcv%sd{!r}UU9PKx47?om7?u?1_}lGY__ez(=rSCHA~me<9TM;wB_@cl z`xXxBCxcxxtdMPYGQg3p!kH^SB&bH_{GQR8!%qB!w)gnC${*W zE4qjii=!Yq%3h+#LC95E=a({~A9uF|G5WV_lxAxkev$``$vDpFIQT(D~FKt@6jqVr*&nL4>xv)Em z3tU@=AH|(gfJcUJlfyZD&I9$t1bEIY>CoMo{H+LtnL|7G>tXCdBHAq)s~e$Gw&$+% z0eaOjBeyEN_97>Ot@5ppu$zOE8%u%78*72n?1SN{_2QgHn8bzkh$-DxNHpJ}&5)t_ zFcJ^`w&{=8GbTe%WTLXMIh;dnCnR{b-7JVa`KiGDe9=J+u1R_9OhVMdB1&`Ug&}g5_xkOftdhprzGzY)fg@M z-8B`JzlmVqjl3AyL19{~_&@@}p36 zZ}IEen|p&I#NTV6*W_^SSWR@4!cIwX!|pcNA)f1^w%U90=Z&C6WBs=W#eT-#SgPZ8 zX`Sc~%d?DxrFceL^9eIMUrA$+gLUD;Z|4&7TrO_C0ICdUmV|ya`nt-W(Jqq4$16`# zUqxSrotM0i_?$dxBb}%ZUsV_Lp(dn-kuf8`Ykj?Hkmfe4YWkAQmYLj2bmN)Rsr<`C zNDa1}C-0-5unMiMz4({&L^%2aVB_Fk0@M;zqSv&5cOrBobWz#gO}bK@ z>?S9HMS&sIpvoq)B7s+3bdHhZ7Uvm(wa|zOvcm!cDhBOkG0z-%3{ua%MpY~dSkUSI ztN`G)$ew5k?{=HhWq`}jobc2&eSuiXO`6pkHp`Z&8~XaYTX2%U;Z<_UoPQ+kz-$+*lGB`RKZ8_F-R&UBsC7+bro z_8jl0*Si>E@V|(`tL7i0)&EKm+3BOPOf%ZT*`Bz`OaYgeiPm1bO%?yZ|0&C{%ZK|G zh9wJV_@+Y`xoxbU`Lt=T^QRE?p4!34!v|~A^91!R**m)%JiNuZI&W#~rdsJO%ua`HVzfoQbGfNGT#p> zBi;IDPl}cypxN?Oxj4?wDmbb+-yylyS!td($9LYUFMhV=)ch6hO8HSV2D^B&r*k1B zt`bw7vxxfUL#b2nwZ4xL@jeM&JDA~8o;^C$ZiEwSM-;js)X zd;?>VBHdDIAC0f$aNQq>#Fj144|@VZzG#m$H^eMR=3hz7x#`>xm4j$f@Jd{ePcOcz zlMAEt339*ITkMADGtZ#mCk!1N)|$w3MK>Fxe)Y^G+3x<6Qzr?%Zrei^?aIyf_1L1- zWfw>a5mViLNr?Qq6LZ00f^|K_o;dK0txz5B#6?>8%RyHPLmspAad0nNV{^(g&}f9r z$IO=^Mwvwi*xCC2b!}+{#hyWO*#}b8?^^h6@bVpJ6)n?6?5T`N3Bp7uhx$TmtJdcI zJ^yJ#pLKVudm|prgJCv2UGx^-;zH-bL?wg2)Ql;Ofa&lBkrF;o(3wY)Fg2x5@HNKR z#K*3TD8n&`GL0G5D$9g%&jN|Kg3vyr`$!lo|+^u^ax$44d@JSlO*x7hb+57 z#Cqf1`mEzs)HIHO-eWK_@S(0`@Sy^DA2P|QQ>lYEd~hBzOt`^6%q3n!1qfn?@!%DZ zZ~{~^Jpn;lPWNdEVTkWvbK)L_^0{gy{5~1Jtc{##^3PV z|C#@$39KU}HDlAlJF%ZDqBNa#CQSWeV|dloIQXQDKftD>Mm3_`AatT|^PM54AFvWT zOqC1j2?=1&;F}H`*2`spNLr2B8i^Wd!h;4-cp2mWT_ZXc=8clgS_;K3W&wSj;;rM_ zH7M7Kcuv(ZPOq|+(d2YnRU!}WW@|q7tY=ruJNP>PG|n@)y&}q--vnA(S_$lIHpLcM z;U=vvK~1pf01onA_I$b>QhHcVsz#YR+d+9zGt&SUU}BwOM{HL1Oh_h$ZbdFS{hj3k z<-Va?i@azvwOpf7&EOwWnNQdlYs-B|#hyBIc2*3!9oU5O@CgLqHeSk-&s8L1xe^l> z=0s1hRC-3hq~WrPzqff7{!nBw=$d8i3`yp-cYfK@EJ?kSjXo<6KQ;V%Nuv!hOOe`o zsZ+*}gOHs<2esXt(LzJRx{J*(bUT9vLtu63iN$=1D@J1kOo6j^$zg^0<&y%f4Yd!f zL325VU^Qi&-3n=mlIL^0Q9)yX-Qot)C;aFkB2z@C8?KMTD}pwW0E7XFRnY3V2D)n9 z`OobcJhw5cXx;>21YL8gx}J!r)Y zE&?g=nDd>8={+aIiPRp9;S z8S-CSD|aQQ1176X7Aa{x!T(3oSw2MBeP4fOU>G`wPU-HJQb4*<8tG2yZjeU0n*j_O z1f)|M8M;GSO1hu%{{EhS;F>pQ&fa^i&)SEjKeu0-0`+)w0rTrRWRIMzKcAqzEU!*i zEJRzHu5=eWqw~9Yokr3lwrf7KXFa&}0Lc<1q~}a4!29~Km*EN<@KXlUlzuHKg7DjI-!!E3hQ$`PA3QGan{O|GF*~bTPec#Gux0S2B5!5O&86WA+^n(xSPE*u7yZeuAtHITiCi)+;1hE9h+?LDL|NLCYL%@=@h+)`QpQRW*HQ9X2h7A zU^59^H77v+GB0IvLzQSRu#l{)XhKZ7vv0-uz{@sCJ10;;ofFZA&#Dw+KE)>bHDJymzAdsNTUqcyj% z@H<~%0Jh~kq=s)nk~p> zd!4KF6E0FQ%?qKP6younH`F*A)=O6}-`u3tWFjvTNDY5`wsOPvd3xaP2-wA#Z@Dt?y`G%7}wtaRr+q*|i!to=2-|0EkF=sg->aL`nM0g)c3L~2F-$<4 zoR_Enr;e~c3@7L+9^!KCmg8#LmlxOOj~W9Ydrj2rHt4W$<4siE(Tam3apReVIsCcc z{;hlUE$-$}!#{E7ttne_zroJusp`X~JdvCbtVFfV_?4(n1+UY>Q!DJfG@0v7WdlyZ zHU^EYeLXm!h?V=qjeNO+?yUMpRq6+HU1)3!Qc1~$G5F6{SD7|AGOr89irrLsRZ-m} zT%Q?0e1~LFuT#xF{Bw^!@NW6t?{m0%RTAjvJNqm4JU}Tkl9KSGjP=1m2(K;W^krko zunuI%9iR$PW+BjqNU$K~D!O_r=arpg{Pv^dFQdWJDG;&xrZy$VAal`F#5Z9}iv0WK z+T_*i0q+o7>y5^?E6fQ^L5Zy&AT69OfC54fYhr=C)X! z6Zt0HrdCNa~?;*EP&1dl96YWlLbrfOIs1(6@i>dem_s# zWqc^J`c!GOlj8S%C=}qWX<{sgM8x3`feVTVP5fq%U}|I0Ge5Vqi8()jYN`v!1{k!S z6))X(;E6rl2Wm!Sa zSV@utRTMZUsycQvksQ-;V~v>jrW+&K>dKL=IfRcJ*cycTd@ZiFRV(CWV&dMTqRkb> zfIOK6z{gh1;$VaNQ;7RgJ+Ect_f1ZEE1;A$`Z3HtpRc`Xt%?R;<%+lwHHzln(dRNE z{_o@Jm@&7r`6Y`^^)f0-u`lfel!%ndChII%{*CzB1)(Qf{ok85qlwqLe*Vlf?>6i< zg%eFrH3c_>2veY%f`&u@gI5U$Fu+{COiWdfs7MjFn7hYtF%(?_o9d{4ha+mZY7mab zzdVn{bzIwpMjV{TYk;vX(8{vc1LpqC|4F(=+xln<;P)blgoM!m-%2W>uGS-qkQEDb zw344rl$Ym_Op42W=yV9^M5CB~WF!qb7+uD-nR(uoGETgifd14VdB8@YFIIL)Jo_P2 zc7Zu#F;^fR7LL9n`px`q2L$%Dr5*snKo78(#+8&cEd}g=ztv&qu=RL;N9_-?vT3f+Z2$K0vM2ymd;8pxX{tEXN!s2zx9@Eu`CnKorqV4cfTI%n zG!tWav*{>g8tBMT%52x1|8L%3xkc@GO383-4f;72!L`3B4RAy&WC=V{!QD;5!cN#) zyi(f`GjSd|LaUtA0T&@FHdR^v@S(a~q3kkpuKh+gkYr zcRsXWTm7VWDGAK$kNTE=avXh?w?J;;3T}}~Tx1;`U#5B=v9kw3Ozgz8#{IjpBl!vE z(2s9bHT+Lo$0_Qw;K4fw43;3IG#c`>&dF_(*CNp2Dy&RV1%YaoAInU)XzEqcRbj;&Z>Hp2a4dCb~8uMkIQ`-Tteh5~_O#7pwa9j^GqbO8r+*J7s1uKtasYhd} z63J#T6#-R{l-~F5e}-dW+3qJctK@~g2)g5|;Ey(Y_^@ZX|q@{F1>%mJ{~JOM&n6vizaYM{>4A`_2e7JN)V-a&{S!#6EEaL^Tq}iaO7nE+_08hia@-_ zRyL*Z`i1z{r=QiP3uB!hWmNM1UHN?aKiTA2l(vu`gQ~LrcL)aRMcRUzA?7LYZY#U& zob~=KH$j^&0Ul~X(Eh-i(f3|-_yUb(hvr);&4=AgwH|XoWo4_plB#JE{eA(bqH@eN z4HpO=##>VW@n&rHh8GN@`^OK?=acR4!^>=ap4q7C0z1%w+a z{z0`H4?P#?U(=&Lm!*#>7MsEQ&STPO&UyB*Vq*Fn_o1|l8_e25fax2oVsxF0GFJL( z*1hv4@~((4uGf0N6#?EXd zB*`~Vfo#k_(%hzV7dZT4(Czx2k-}1>znoi*Bpt-2LCTzh^sHhKuhxwwu`Zx6rI zBe@d`hD4W;Y&G!^0Ui*x-TtfP=RH3X5_Tsu-`DHCdFN;QWl9LGRwhBCZusn7cbhFR z6X@XC`)17HPs1%BT_mcKGxnnx$aD6k$!y3(-_}ik#L7*Mfsm<>InwXxRttpg^ZeLN ze0s!W+`IquLP+7UFg-~Y&^GJFeyUeTqb}@!!`|@}Z~bdcQnPh+z5`b%a1%p*?z`|m z-_{DdLVKOfjdb;ccsQc+FaDGvs{SK}Dv27?YOYBGp9PY-ArFF8s>q=^+o*#RIRBQiagP8`N=6{oKG^y~mLsy7p$6gHS#33JW|p;O}P9F>pocUxqttxSulFCiJ50tGT$OZ`Pi& zk@z~j`cQGH6a(bOkJ);9DO5;tV8Wd*p{^fe6nU`}I5xwOeOw{>Mo3&(J?_9+>6G1= z+KSQ&$oDcUWd^8)ZFr~LSrpJ2E`n+YsCQ6IHH-joRhyIX35&c)F~qmL%(2K(euh7U zcUD&`ZOj^E6f+tjCr?~pn>~l{Wln=EP)7Yk^r%!dQPzP$Z~<&>YO1U*rRt->kX~!0 zYc8jXLByo@#u_#&`sUpaJlU{o6lJ6G%dQJfxUZzTet_1_8jEyJh^etTJXdIp4SDph z*i3FH0U$X)3df^itJ-<>qrg}^gKcV2Et>!S1~I~_cV1s!|7fmHH@WivS%C2O7iQ9c zF;0>lhown%4V3K_uf$Y&=$QpsPT=iYahV^uEi>hn>&~Cz*#ns;8B`7Z#Ics+Wy0@# z)-!r*lgv$2VtQmQmh1`HJ64d;_Z)dysq)iSxN7A}qyA;kD{7JG6UhhY9Vh0C=EVz| zoxf6cz-r~#zjpj;`@44CC^Y(v3^7=oRj<~f-Z2B{deJ*1@Aol45vy*}&G%0_8q7DA zXazxocBT4<0G0&;VD7YB7l29oFcYN#(`5D@>$0-Nw+N|Rn>P$)y2SETRwr~G^N=@f z<5Ybp5aLZ~mRQ;?Cz4d!DVL#frl7B!y)0TN-))yynI+dEhT&K)vE_%8mV*L@QU5B_ zxAD8wU`aDYCn77%eXOegc^MC&{5|8b7H~T1Gn}9kw^rGQuFkS;8tbNxwP%$A+RPl` z4`8Hb+wp=0rY`BO3xY#g@7*|2Vew$6*>$#07d!Kb^0Nf6$*iA6m)We|uLt^MuarB7^Xhfeov2CIj_)(v0igY5CBUW4U1m_lMD zsvZeGScTu%__0jWP1L5V(IQYHF**d}^xVhYou7^fQLC0la=vdt62;=-yLWiPD5Ghl z%3pNVGBe$pWEsolFnVcI5FH0=6i~Md(!Bejs^9A1o|fG3Mb6uLs{NN4T>0hh8qA8 zLb3}2W^2SnGh z5Rz|67~qjvHE_r8)EOXxA5A;7xgKJiD?T#3jLT}(t%WtI523XDUJQLJ-X1JnMxI&WXTi} z)6KJM6}3D05&?tMY@8{y)t%EYy4`A)C)wIZWqd?Z#d-K#vwS0rqL%lXol5Q~nXtmv zHc#K11<~vW-aQ<8Kitmoh;4=<87UBOA5tRW4W?nyB&!UBBh8rtYSp)YNd6Sh=;ds> z+BrwxGOr&&K}?hRe8euhIPYaR-!tdfjQt1@vD+1TEw6{ds!5}YFBx7a0M4(R03rP> zsSolvz5Qe1sSjS zRIm?x;v?6mMQFp5pWJ^Au`mAoNl)c%!k6!B=NFwvrc~+zFAt>7V{-~6Rue`bexAP$ z>;GoCd`uJmHzCedvXr@)T3}Wmi5Z&VVX%C%wRdYZ*NMKp6?-#LAnj>EG8FlS-eB=p zt&@0i7AALDw6LH=^nHOh@T8*?XNyyPC(T|m^10pQ5 z*w>_yF)DI@-kd=`uA{E;cBYXkrUOlzALatuV(*Yy)Q1>}((ksq$K|&HnC*c#m|ggw z?>wiY9|(d=4^0p2*eT?zOlI-sLf#C&D-RJ>3H)oaiaMpY9J>6)nQ`7d2csf&rLd6t z@moVf5IVA39j)jdW-3ypl*ptC>0<7?A5WNCdMGIBF`)$%U-Ya;4>dUrYb0B{rK*3$ z0}}MmQ~3r}fOpKes!Pgp34Cnj5?!ievF~WmXig1pfX&h_)x%nQ= zLDC-`yf%dVhL(X8M>h$1GvR{Y{!mP^D}j>f^qaF};@R2ePCPDX#a<%Z^1DBNwEKX_ zP*y#T39T5dY?X)#0{^Mf8rebQ?EHXHYHARd*fO~M?3}ds@%+q8@Sp900dDWV^x?QR z#to=v?qrP|9GRVgNSj02m2}h;RJ|F``+;qDSDtZd%A#vV!`=1S#k>!cm&z%gj3zi8 z1GN)h^txC_+u>Dac4q}+tQJf&Uy*;ZL;Wu~mDGt@3gpc0akW)^C+qUU#BfNHKp-LYhXI8|si(EI2;B|A*nIN?_H5FOHYPZT^vf7!!x z$iinlQIM!;lEd375{-o}1BpayHJ%HAvHNSv?MFsEwFE12I1y@e_})&AffIeOyCBQR zqfDM%HxO>VhZa$}vELKHwsOmrw5lUHcTwhy@OzMSy8zFOy?sja*#P*bMKW$N3C%g8 zbXe4b%^%QJcXQ2uxG|wStUCxAbj=rCC*p2;f*DS?dZx(8fFZxRZvLPM&4Mm+PJ^UN+gf}EwDAg%XwpEJ$VX4y2&v<%pu z+#j)QsuePhmp%SqJ{<;3n4Ux%-*6fyv~UyDp$1#$Vh;ba5H7B;H|^gCp~xlVvhiqZ zWxZK`*q4-o`E>l(P$KoRpo5B)2@Fw37rgDTk-c`(&FVwl%#JQ4PM%18zAP(q*{`LU9aMROFQo~Z`&#N9Ye_uw-fVuk9B6o z`eWuj268de4AI(n4-y zkPjTE?pi36)bGP|RX~~_V+uVeOuhsSu2f?dct}O?)?fM-^J!sJV0OqK5<+}|+sbAE zQf&v)FR(BU-czFP zf)oc#(#Z-J7pczD!i}nEXeQ9JmL*t)w1pXYGe4Yl@kIn2`N1orf`2d7U-(TE-@Pn- zm)KQWaMd4Dwgy{VUXH|@i-LO&%-|p{iUAa~AIliuFmgLVJI2`bFq1lk=LN<=Jn&|E z*;2}${$!lxh-i$&6;j*zI36ZWV#bX05(`U;e_T9|$_WQDdQ@U=Z#zzBY{wHG^V`%{ z3-hayiCll)1kiSa{t#}lzQ|&crsT2RhkV2~rewh>0j@J}2OebixECsqd(Gstm;4DD zYOn|1voLT!;$&3Y?FuxW2}`ut0H4gZ;wzN;ilFNdpz(Yw&ikN0gt=mp>lPr9STqx3 zkd2aXp9PVlyF31b_;&&|iI#8lV>Io;v#V!%?(9p!|AR{wAp9)iQn7A2(?|tBC<_j! z@qm?c??J^-A%qCV2!(Br>;BNqB+n zI=8{8HoDCo09?*84kjyIXM>~z#4z;LzEJ(h-|efY=n z^U7CMgA&B3bLctASWx9|ykbf`)TuDoE?C_4g;JWtzsB&`$b_39^ zX!_UQ*2EyH{Z>ZeoRO@0rO--bT--7&jWVd1+PGd%`9Ec<9w?-^vAm9YMIotm05v-k zo>EasQbo6H^0T*)d*kxd6$oWyR7X&#i1GEO?$hWh0XfE*hk`9lPs1{@Z>y zCKE;GmQ$GHoLa7=M47B+A>*}YpTY15AZm4&etqLk)%0 zAqT2NiAO4IihU0A+!^=jlC6?2xYY{U6e&893NdK@>gx=g#TWi8U!chTlLCkq^VLb& zA1g|W*)Y2U8vZoPQw`2f#rE`v>*-JAMmlX${`N%O@ z;izi<^48>Y*sDGPJf2QlRfe-$!jaRnDphaOw%j3#j*HXS`L=6jMmHZJJ*<~GaS(Pz z!fo~3u_<1)qViqPe{N-cdAYl|-cqo^bALgh>yxJZ1m0Ax$PfP50Y&lC&B$7exP1ho zYE7^p=1DCXR#a;nDf77qSSwQ(*SPm*I0u25RO~_r?(RSRoGxGSM~Rg#^mWlMZ0)j~`F)~4PplJZ z9|%xZu3%$~-n<85Q@@OL4tNIN=;LzkE3n^Opp@|&!RRdC9O%SM$Y)kGzfa zR@p#6lL;mf8yjZwg&d!6Nq4u@OxbaopZGMqtN2dzVIk6^xwf$dnLq!Sx+mzzi3o*g zz$$nc)1!;HELgN0Ng_v3FufnH)|nVZ9SDhd?V5@|)w}poBI>wNGRm9x2mvrIl>K=^ zJ@?~ODi(%LWbwsf#jC708X?@vY$*DRe`9OhV6L0hFVNcHO$4I8cw!>z3qpa^#KIbg zM|**+i50)M*o>BykTB&`egg5fUP6?ZV@U1uPqabQ&X0|+p(LiDTxH)T+D&m z(`w9Xj7$NeUF|FtN+hn(bsfeG1l8Dlo=@z$vuvW5^Y#65WO`1I&9uwCLT2F=+~I&UvGYUiR!WpUE(6cOt`--Q4ML`!~x)csV^jgGd>jkr44SY3&WG-sKfDkCi14UTXW&|H)TOWr@Y;eL{ro}k~ydSV|)A>!MCtei77 za+_-&=car;>?I;M@OvKC^NDSn4$f!AW4%h8nxFde8-sw zbInE!{2yDwrov1=|DDh{rzXdpaJ*BRM>2TFx5f)RZE95~Q_{vmeQ)?aO0vzBLmytr zLe1>3>V^5<=QqQ}1(tE=-8x9h5QL#6Wxotuuea$ytVLg?@;?s}i`v+To@%RYabt11 znYTvd)Lx-N%n@VkeygO$EG$(sNwc{t6M?WN{)3!2AgZa1;XUW-ON%J`BDnsu$}GPJ z1}44sXwYvd$cWix0(SlT@DU@b8jYS#)c7U2`qGsC;y(M0#HwEqS4ZHr^t{)NaNV)6 z&7~~fnGfTH2KQk|4yd3T)Z7iQo0sx5)svqP7}7}zR4dM3)utVR}lG3zR zin`w4zfk9_E|!#r6u1+46^bvFo_q}x7X3(3nCwcKo;Ouor5cdLbu-`o9kTX(mP0~8 z#wDSI>R{(Q=v-wK@6*^AjQa^Fxd7+UqN%5%hc^`A_b&>COg43ue4+_{Vf4{Pi7#tQ z8%I8KL|&WcdP6X%=LA7S?KHi6m|)AGBV@Z;y$wx-ykCj5UR?^?I2$^2(_{lrQbBf@ zfDum!9=x)kS+T#N5RWlH&rpD%5zMzjgEgRyZ*?1uc0nx?_o=>Jeom;+=M29uc}5n6Sd(^T zI<6|7Tm!yrsDJbuLqgDbDU2)N+Sp;u4L4;W*X@FVpEW>p>~#{-m_w{S0f9H;MCN|z zEm__+6e!qPffXnsbd#njJSP4fiAlv2gx^BQ4g?k-IK(``u(-Qn#e7&YI1Mi zJa*TJvCAuHiv-(2A3$du2wy`f9Rv6WOFW9eu;T3Q6wvb99re8{KAwdx58KW^t-xPAI<94?D8ZxiD5l(@fLr7 zT5CSX;(vWSH|ghDAp_7`SPqw5ZJ_#+O%^L!6#0RVXC(IVY1%rL9{u|((EN6|!?wKI zy^Hb@w>SezbDcAQWkd|}_J$#I!!Yb%iA`w@m~xV}JIjE7bFmq5GoLCU42V;ZrK> z$uyPbG+!8$d6oJvoMWO>uXvonZ zONYB$T3T_9zpT{!YdZafQ-F8h>iUNycSAX^HmGawaAkkDuAUG zs5?yRRnHDD%_dO9ktXb5Uw2Q%C5A&@Q})3w`{l|?Bk4QmLY!GkHj2b-im|7%Ll3j& z6Sdv4;Yx|0C$#ltAS#afKdFYZ+EZ)4t(BC=+xcN^N~15k6_Qw9A?~I6FO>v_f6z@^63M@S|LE_+e6$4?PXLofIywR&3l9bbjx> z)t*N}O74}As4Fy25<|QBy~!k1V=zg?1cgZb!DE5`TN-^x5H^QIo6_ zE_3eQ{$R%Q8EKr_?}jF(N#8?F{;#CSXWQn`Fh>=ym6rCwHKbmq_ zWh#$Kh%q)d_L{wUh-Ok`PMm8piWI{-IV|I@57L=s0dk1|niO^4xx@TIZxk|O(If{k zJ7yOU<8ee?g$LygNlO)^1lq^c`h4+sbH0YZrVJvZcmYT=VYxO8=#>dZ?9 zb`YIpWaRKM^Jxgh($ZnAEu2>Vh59K{+v649#brE=x<5b{`$2&7F16>Ac|h~->UWpD zpDp-+RsEEK&XzM2hXWgFGsULi=}w?kVM}U|MkPeG+f}s+RhcqAhOoyGv&KJ!5HAZ6*UtSP;`6ID6Eb2$g&8FbeK0ybZpS!&S*Iv=r4EBA}C-T;q-EZOn{ zoVf<-=R(8^rSNWyvpqw&t^M-Kq2qbvJ(7XDvJOk0U->2D8K!O~J0IRpc6d{^dH0A6 zXVs6u0c@NKEZjQRuPG6%ZC3Z2fqF!ajvl0fBet^qr&Qgl(j42P>pX?PX7Aw5NOIZ7 za!uk#`4{cQ{KK#uMBFNHVSG0_-|c4j`uM-V)yA*dLm_!}?OGaI+;qz^)2SPnRNRq> zM)#d^tT|z=NtC6AA4jUf^!00KNR)pEbLly<0tirx&*;Mkt#O$O5`NI|$Z^%&c&s<1yuc|)bpQV*@*{Cygg zl&akVg@$kXQS{Nns#yvZfSz}1L2{_SqkNb1Hy(ZO$4l@>%Ms3xa~6DR_Hy8|Vfdp& zlwIk4g$2@K+*`_uiy;B*i`~p8-vDgP%a|)`{@^d1;=Pw?Q2vq*b$YB^r|*f1S=8u@ zhey8>ZQ%R?%h9+5Zn=nj`xZ9j&MgNx?G^Gu+;C~~5k|Y%YFu!@%d(6(_ZA15xFBIS zE5J+7Tp7Wf>iLS8p91Nrm z)a_)h#hDUct1-`m;@{PO8h7-a^axV;B4%bxXOcl0vhhS?mP>?p^7RTz>Bz=dD2{wb zpt-rbHN4v$5_)4$bA+3i9n-ku@-3u6rE7D6Kj7+pR)>*FlP4&tem zzd*#Q`#Gk8)Di(?L&_+QZ0~3ha2C!YpAuO@|Iq(u0jg2My_}XmMuIVDN`)FpH23z8 zdgqRP0TXS11;^i$xJS4|&yqLwXFGP6)8@Zm?~3A}obi9tw|SX;v>Q4?7nMA5Ki_tV z+u<{J&LBQ$=9jYfbb&I>VH>sUV~J_3+Dn9t%&OakrOLD@En=SoQsD+L^Si*DGr3(0 z{VSqXfRljjWNQ9zz){ieT(QXGm#TM#QeE`J1GC+V=-T^$f8A{%C-{`PP|f3KCD)~O zL=clYnoW)r4Yy@KFcub^Cnb`Ep&j~e85Z-p?5d?o=skC;5$>-HALSM9p;xZmq?dm5 zTC1tsW3_eN7v&OgPQ+|9HNTh^PZ|611Ae-v66rX8n`a%G@Z7no(2okWg-pO_UgvyM z|EMaF!{pCmjd(k3ojn4bVxvQ<^TT}aWJ>6j-VEj6My{Moq%IiCYtSS2G z*Z9G+C84j~a;>7D;`&(!baRlSHAalJ1F7qJTACa|tu4U?8s&gy0wjmK8TVFP9vtqF zzb1F){S9nRNRoC5FHBJ$FQ3Y?MRA9JF$2C;LIdq*(A_QVl+BKhJ)A%Z_ z@I-ae6+jsf02kChS8OHm`R~l&q$IcgmC?$k;OPAxYhN-Cv&OMKbs9eU%wAdcu)6g{ zOCpGK@te- zHeV^Y^b@nSJ%pLJR)najs*#dp5eg2o{Q)_{NW(@`A2*zXkG9W2r4nW#L#aSwDXlf_ zB7E`Gg_EM>+i`^yb*ap!i4Z;Ls9;{?S#(gajo{}{A2-H#viDnyY%4dDK;QN%S1ECM zDhH`1?wgcZ4^_noB*PXs1tTDH)=fW3h5TC+P4qHaTI3zS#KQ(*MWuoi%lgk>=kraM zB#h@qbiK|OXQKDmX_iMBItVjuo3IM zwSr{1)(=Nxf4I!~WHX*BSR%+>d1}E(iRm>O-pE$3#q;qf*@K96v6EdefPWYmfPV&c4-Tq#Cp);_8Wdxtk`H z6!Hsg`S$nWUOTtgcX=9osdfmv!hibeXBFk&r&CIPF1vY>(nYw+-$umP^@AYqR-V}8 zXQxfa?RbUVJO#etpmk4z2i$l5h}Qp#W?x0{eF2PgAR8h=?5HFfVT(tT0^ ziJY`Gadrl~tXN)$vUsNyZOW_r?8d$28oXMII^;i=Za!j9J@z+uD>!D)8w6!^z2n6m zUHzE(ruu*!q94mW$v-3yDlYqfyH%wwlo`$?Bv_tZD4lE>NO}WrAKb}5<@dD}ypP!N zSUJU~qG3%eU*cC!Gwm@0VKK{B)<=6JDUx(yYSD*O)9Zo=OZ;O}WgwD-%03_d5^dCr zaCnL9GF^fp4iV%pB)r?5(4lwSBNLNeQ)r@=D)7Q^!O2hg?+Sz5>Iie`F?Cc!iqwcA z>wX1E!_B6Uzwc9N4YaLxxO30KRvh6-IG7$a#W(o=l}^daiq zKM&OJ9pX zGn1dSG*lmDi=09zX@jm$UBI}DeA&+(z<+IuE1G*(3A=_?*bajdPtapz@$pUS_FoC( zfZc$H-tR%-V@qD*n>l#Prfj!)3Ia7kpEER?vzf8-N>@}I6*(*R{cEJLF%y$n3LW&Z z`7hO}*aNc6^cT_ zv=#L@H$}@Hyop*0FD+=fs>CcXwUM6Q4eXPY(kHb?zh?vmj9QOK6t;9`8U1&Xi*KZkY=QbbQwa#6Y zxHwgW%$Awj-0mjPQR6AFV`&F`@%57MBcO$jDAV%t&6)XI0M#UMq^F7`oB$stsshU| zV}VJ`V3HorjFKzoc*n39bond3e#@f+F4Y1`=6g(qbPsvM{%B0>wd#UQN}F1p=4pegSkiyQQhhRbdWxL$y(af>3&``2Xv960H#srNfFkB8xxT?^6#1OFo;h6~ z6rj5Bhdb^&A}mb5{Q@i*iPZL>hs!gu{vd6c2OZVlww%aGmj1P^A8b36lSDWUoCob_ z$-?mFpxU$i$60qT!RNL}T5*J?&Bg`t>+o3OVm2*a7T z5jsK9PyMsfOrOSxVJH?M|D0WK|MBBUBNd_>352WXvayFJrPxrV8=@?CPnc1Bw&^-O zR*(q(9*Elb%@Nf{<5i){?>^FpMNwLaB(-j|!Ny|&OZIK_8mf0!{y(&NG5#rvXLh=D{S z6(TKaTck-wF)5G4b5KYDp>kOVr+q36CYgB!yVSEz(vo@?L}Yn)7r7hW#XCrQJ>=&u z?((^pBkKb0Ss|HGr)g`D8hJIguYn=mQAy={<8MlRqAG0p?Odkl){`|Hya3qgQfC?-;AN@tmxcW6Z9n#lAuDc-3E`Mc ztirz<=74Z-fLD}au|I-tM13c)(*URaSeG{|9zumbI;x<65h9z#CJo2rG!`X@j|r+6 zB&M3Hf|jE$#s_p+?MN}lpdZc*Qwgr=HN`%SXWc~?+%KpAtnt@42)L>>H)zG8g)ksK z_vde!yz+kcT}aPkwL^E6xixpzk2hPJ-XNP;;#a4c1|wrlw}HX=`51_ounOM1Uz4|O zH(HtwK`bqhv$1)Px-WvJi6GGCTh-^w!~C;lxfYIW`aW36Bed&)y1-<&;0<@a1u zd4rf#3uHM@KvvmA`Y^g}#uY`pvpBmj*Qu?M7(KB!Ae zdHDP=@tgP0S5e-Nd5@L=go)s&lu_7HM1H2-hU#8O(F}XFChUVo(A5L}0xuwb`i7KB z@gptNpQ7*!pRotG9>fs|R&~&Q4#@8x9tu^jBqV_In+)p&bx`SQ;5ZBoO=MPS>Jcnft3R<-@Is{-8m`GcyHqxCU*xeePCeAQHZkWQxLrWxxZPfWs2ro-mUG z_HWd_l-KG*%jwF`1N$RxT;Jq$tO)=n-rgWJiAG9m-zY`Q zOU=h?Bnq*4#Njz5Q_ag>Z7wLN?C&({#I`puz$LD`c&*oeOM~d zVVvtMhyNdrL>OTbivD$k=ih##1P2!f(949YRA3QeZ(S0iHhs88?7EKMcnEnUIXskZ zt;Iu(Lod=5#|~VD_k9q_=OX(p#)faYXk1iW0YVa=`pqZWBcHFSgW~e;v0vnjw0y|j zFdIRZnom$f+F94F5i21>p|@&wfzBl*zI|J!p11uM{6}OmEa=(mdi~Ptif(c*;59lw zmwxbgnmsPDLPgI-s5pu-NE&j7UZW)MQYXZ}{vOrv&Z5WMd@Q2#oLvfMW)+*AfGxp; z92Y>>rlyt>g$TceLT=nWxh$EY{<4UwlLXHxzI~qLHz)2m_#TjA~_W=a{{Q~Y;p==LMz>s zCA*U*V4HETW2AA^GuvTuSN2^IjO2h^jme;gK5=0_0wBp5Qx&WM>|F(4*SnlmKP!YL zTE99hG2Y3`Q@QDrG>Da#DFGHy-Yk=J4eB$6g5b`vH7O3 zl_==c6(zb$_l?WHJab}leqlJ-iG1>F7o?hFTQ*GvxWM}b<#$!&iX-_++Ed`$EFy!i z_*LRds(ACN?XtF&y{CpwTXJtjrrdl|KzrlUo975)Fy&)L@M-zlN*D)3%|tAx(~~g= z)DOrUu@7$81(_Oy1rg-!j}xka?;Vezx`lnMISl6;)PDfm^t8~+e_^RAcO4cB4Fdnq zM`$mSl>3yJ`gXGa^}c*#h{U9LK-eDn)I}Fu;3I?9zvEMvT`*z(ueHfLe#MRe*OJTR zt$20%c_>~WCwq8ges?nBF|iUgBBTFs3o;Hu>|?C1_Qz3cZy+T`iOLfj#++kn>Zj|n zzl`|^u2R96ZRqMC8JKSTZEZRhaG5@~T^lgx`mnIJ9Ivywh_O}>X&IhsV_XZsa9$0! zP~rH0JiS$1+kevpn&1uvifggrE=7a1xDzDrU<#K#_F0|s*VZD-OCN+HjP@9Ip8kgXDiQ8Qc57@L0i@LNgBWJB5O>`H zIU=+2NvSdDzeYToFgu$y=9NrK1Ib=(h1QV9Fw_(*`M|MR47c0Fzko{EXR zzXK+#!_5X4?Z=MLk~q))BApTUdD7)n0p$P^F7t+1ZVoQwhKd81d4W?!X$hxjY4r(R zs-uv!QG=x*rk`bY6dLPupOk{(SRJTIoK9NfgmoC8-h1i%*x~8l;1*~@B`zu+bteAI zIEjNr*Fv<{iU3mo&wmgw4ut6h!?Ox6wgc`S1am*Cs$OVD;~|tQ(K$X`ozczm;Ytb5 zz(bXEI@*)*jYRb#0*cgKm?F2vm#$3;ll0)3nIw#SsnW`dm|sOtJ&QT_i>wt;J6;do zz-bMKU4^g9B2~iZnYujTaM9>@!0d$FA7xbg&kCD6hi-SvhPbeyc(M3dt4Db7f=@DT zog+8$V)PGM?lr&KU(ICaPx>{sp!}Z?!?p7ED?SuKH`Hf?d%q$_Nnq*pxv$YTq1 zIc4EY3^J0mLV2=kYLzcl^37t&POu`%0zQ8+Oz%!K1RU(Epxsgb#;b{3rqcMI4HiqNokuAADGff6eO@#Qs6wI@vFN z`)yd{SiJ3LTgBO-pCy-&&!zzw3GD(QzGuI@ptGzEU-Y4kwrDO*4|V&|J{?>tXtg7?GpPzMEJ|hiI zDVMq_jaUN3sYCI8nY74Hvi^nfuB2}QTyaQn(RmFp+?HBy(_JG zDMF+zsXpZw;4USy?shLh-c+k(e4zfA1u`( zib!0byT`{iauE@wDc+5h28KyI4<-ruUD&>hH(Ts?g(;P01>*cI$Z|Ga(#;gu&PgWa zHW@OK8dida_| zq3|vavjl3>3do#ALaK-BXS2%EF!1hcOxxjt8l|HcvlV^$yPo59;RCkmzC$cUS6s=! zy{FjO34sYM&Bx3T&0uYv(IeuB4-qKg?-7mlM?pgxbMrLMl!jBtMP&^*g7eTjawaCk z&@&fT?gnh3C<;fa>9L;9NP8^Lfl58ivKZl)tJmrC>=v&`F8jrU_Aw8797?Lbv!_W} zE+O6ib7#SuzZAXsn_m4spJcl#^!Ah^!D zu*X+3&4XHT)1L(LGm+&HAB{yfW#&BL#fgDSxFrvLb*HeW;4a=4S9jl0WhXBdy0<#o zEBc?R+ga&xZm!{VCQBP$R=r@y|Mb`$1Wa?9=)vtp^-A1EgH$J?&C1Iu;fDON1y1JX z^mji##MgEiImEzmg`up=)ogdXeQmSFNxH6CRA>C76fLaS4UC5;1yTr>+T8rJr<%~& zkN+KmuN;YYbWjm@TlpATUs``WQGB88EELEG^YZF1?(rp+QC*SGT5ne%lGjC@k ztE#EZ<0XRKUl8_~IOxj$K$4}3_4_0`?-(ZyyW*+?b_LH5jeQZG#SC#zTngH4CC=@c zEEdt0t9AvN5cYP|1oo)SMoke}#J`O@GatVS*EU|W1U_uF-%-Erd}(p_X#4n2Rv5q2 zZ;-3&mAfeVqa5v*ugYp#P^$QY2HpZo@^Sa;V!R=ZmO&EMyki)LrBTIdfxhD+RB>{6EO*J?u z{}ak45=?{ggGqM;7&70YY@e#^a3$*`9J{ez zPtLiX**m^0+^e>^(@&opcu(Jidu0M?KR4mv!NjRy%A)V}2itpklD?h=`4cTvP4G)7 z?zWxZIX%7cZ90i??7eE5Q&_1w(Ww~KABqJI{%D$LhLZ94o9Ts;3rD_LtCbmpV)|7Dsu=Hx7MBNDKMMq2VRG9~L7KJeL;I!_^>oEvr(RsrXe6 zXitvz_Fb;>%V0ftNvg7sMeSb`Mz`RUlQB2%reM6s#6heWNfm@LTm2^RLfSy`05A zc{+yFMb2po&TyqJ@`6NT88nFQIMjn$CH4hrNs+BK;#ZZ<`OM*18L}krXIWEglDIUP zlC#KgN$|`n8&Q?x0eBx3RouDKk2CAzYp&SheXS~li*FSx{e5vwU0YoDOHcisV9?F$ z<~4y;O-si=HO7fmEU5j={a(6PNi3t6L5_L$pu<0< zPcY9H{q_0vX}^U(pi~QCz=O-(n|kn;TDnOWsmLDDAuB*1{mp762>Iv7y^y+SW-uCx z(5%EQsk0nv5c9VJUXtr@Jk%p~2QR$;&kK+VHd5KpMa^I~u`qj9XU4_RM4Hw16)UJa zyycRYmAUooQS1j?KpIV!1wbM~R!K}->C3?uk}N%n4bEVmG{_tu>hF)v*6%q>mnwPX z8D^dM-a{GWi+3C44;J?XvuGsUsX2aE;82Lbf=wVf@}oIn)3GSL^t_Yc$z2fPorz+0 zGKPajT$H`=2wldM6!KjoKwV_Q?8r-h2zoxr!|(%X_C|oTe3p_~w}$x0{bQy+nxU%BcQ;Ezs z3_i{OJvjF8!@4Xw;8~%>M1|IKQPkX9=MY%bptM;OzrD||7{N*74I!c!{z0%Y! zc-_YC_B1%RgB~SbalViJA~zgz<95G$6LTsI5KIfjFDN#2k8mR(%&VqtQIDwSTuGI~ zMLLLrvZ7P*#fp2e1>Q_1%)Dfu-FP=&g_G@CX-QdwJ#1AH z22T9wN`TSms}KV;`9uIT{f*&JSw$$4K{8L$QHgvHx-db&WAp5^$R@ zmwc>jPD7-sDSm<4m}+dyJmx3_E$*pk;H#ZB#Fz|1WZL@^qM{TZNsBrttZgu)TwG<{ zS5d81$8Bc}P?izjFoHANQBzEQB7Oi$6(@M+2(Y^z4Xw5`U8l*vlX0>Gx)mtDH?g%u zSAAV`5q+%ZJ%7eiU@oFW%_G|guBH+N=NnYP^B+V8rvJ5DPt`+_%Y(hM6Uk?NU&Hlh zM)vBpDu|ldy(F2A-)KC#soPJFLNp&6Kl`+Tbyt1E%!9JrPn0h|XWw`;fqhpqBLh#- zf;-m?@76loFV0jtFeR`yQE9s_S6!ZNI3=RjrEu0mp+tm$e=0f1rwovzP%}3-*1MpW zK2?{~)nAN>1qoBIDC1W$^$djhw0*pYSo#b+JatewhC(==l+?$>544cpnrnAYw^@$G z4P=?;M}Q`Ylme~oQd$7hKg-=fWDP9wt%P@lA`-PHl%{`Yj`C?K@0H-cgdDY*bP)i|LSxbMjs|7u zwrA|CAW;+<9w8UNMOO=L-_DtA85RvBX8=ATAVj#zV>8QC3;yPGp zWIqOMk=kZmU1-!Hz$=qnINxTl5`hBJOS3@7?m_xe6FSM-7TC@Qs1!J)#Osc_nssRF z`vLTqM!`c_X3&EI9NSb~upXwlQp-vN1E>$g`?!Awd$K!M1u*+jFK2J+4vLVmIWHvI zQ@f7%e~7iz$V0dM3-)=Huj)?e&AHctpK;FezFC@82CSyw=dCmn7>oEKA>LZ>7Pffww zT*x>Lb~et^xVd~lPebzWM_+BOZBiS5mk4{WU3~hrq#_!1~|^R)DgG~d^IUjCMpnyNqOyrD_$sHpVe zWMHI*v0Wip((Iv$DM0)~iSoWSH<&8L1kXC{3=&Xq94rgU{R(QwyXp4@RC8lBpn6In ztj@@UK5z#_f;R=6=Ly;HmU+wbgvJA|{HFU;XLw!?OlFa_kyca5rYq9; zX<)w4yPr7YA`w3Fc-_t!frxPD1&anjL9UvXQ!@=patV(xMZy6WfQ4N!jZ0h5#s^hx zgxb-Fo7)hWdvS^g(?bi+Z0AZ@3)4)GU7$bm-oZOf#6`=D*>0dkAt-NBA z?kL0`AIdXY=ra=Oqu-5iZ-aMK<|W?kxgq;GA}3KhXp`YYTrh+~b!p>Y&2CkmjD^Xc ztcEVKs70br{ZS@4|AiIOfhBQClo*6zxZmK&;{IOiX{q}aU0ZvUJxIjoM!0u&K^UQl znOx^JBVn|p05XOhldQJmq|%Np7yA1ZFRVm zRC`Y&)PaYpKWv0+e>o}^^W^%!uy^=BD7cv&P*Tgn!AM+|b;t%UKoqT}sRn$=YXu1b zgg#PB-Y$}?YCh!uEXBh&68J9l3dnXR+udad>)P;dtxTT3*c++$zL-do^WkX1#-Yht z5(cKJ;M-t~4Nfx})3CvYEqm<$^e`IxgUF51Anjk?JbkONYv=h(3a>`4HBr%snPT)VhPTitk6A0IdB%ilBmc*g**5!#Wxnyg%G%L zBZUYsW(xWWKQe9(KxsX5jv{3ke}IBSSLTZ{aQixyEq2_OJO=rmsl-xDXB1Pp&q#Xg z(Z=kwir{e~3*1eyaQ4Bk+2xKC?neX40(Lh*2NMA3Kw>sSVZ;q7xvYh@Bob7LBSf;REepu^n{gY^#!;gR}}NH52}9?HJq zqCm+<1|Z}B!LJU)C?9bTNk2nP&o%1per}e4{`=SVR&(v=jpWKLLqGKK>#dFGVu*AO zp^bGJdEV<2_m1mfWYt+x@|!3I6qE9XxNTxbnwWRy>hBgLrhVraYi~t+7UmbYyzcRz z6iC<1SAL6h5f}+ys%h(>1#807u%F{io(kdR=3K*IV>yBAygiTg690N-_;e_k+h2Z3 zp!30r5ee`EVcX~qwWr6M+aaxwDr%it^NzTQuxu|bk}W|oemLD!wc7o4x{)!X+v zQ$4p|W;HB*F&AC_x?IINMqa5W#EPI|4G+|M&|%vGK@)R$+Py?z7KC`Pwx!pVADWR7 zJs;q+fvemo3sG6UuZJg>a+_RZ>)YjGt+Lb)4Ss4RRUC9u!O_#O(!|P-!*f}Pw9*Z{ zTFkKWV}A_@KN4<2){d&XL?I7zLoDGoYx1tcZ1w!Jq;bDGNE`JN^J8WfC;jY8G&Au+ zi7$YbZ(MIiJ*{jt`QyZO#k$w3&_2DGHQq<=?dZ`$q;a=Hl3kUf>8_G4Vo#xih?)9{vwl(Hmx;45bgiiARN8~`+Ix4y zNTYs@=>KTtWcDzL5yE9ux7C%-6zsrEbH)g`L$o|>_zq_UHiht|(7x6)?_3`GfLq91h1a2aBlLj^EbzMhloU95U-?3*k1~0tys@7<@l5qR-e|?NJ6r8R5%uzd zApVdjHvF|i28RKTG*#@i^EIo?%xoQ{aaUauMt2Fs&i$+#T}k0_+`1WUu}WUJC^sje zX%pgCq&;hz7>0#~!|qlmb2F*e=}d#G&sP|=kyAy4C$pY z*K&uxMHF3ulAz}{VoF27sVRs~l2Bc-vdw;gya8mu6sj$Dw@CupP*Ev&Zd<1)V<3^( z-K&ElEFMmk{$LWgC&_%$1gC8~li+2L@8{>Af{xJbQe$U zxhguddFO+#)sgSbP}I>p*VBl&vdNiD$Nfg>&Vh zD!rr{fiYg0(qSUk^lT0b@)=71K-qJcIer3tDDhS7-c*4O_DDf~_bf!C7VnGCZ;G?L zFMB;=u&-$HQ6>Dzt5`3>rzE0JPbnCg zh`C%WP!tvI$~65oS@@A8ztNz*iSTeZK6s6N_N`EoDPxc=vR}ZKcS2@HUbZMt(TWQj zb#FlY{xuHYBv19yFmv?h{_*c_azoX;w-G;m`x20+`nbZ9XNEEMPA$gb%ad*G zL<}uMn;bf+zt+c?4v)FaNi2*}z43bgZSA4;<+cp#x7EXb-N!<|!d!K_@*klBNGsz&g6`XaDcE*A_24;(+Tb?Sg>18vVrT1$U3r|x zVljP5pyld?G1X?Zq-Ivxrj-29Sf;z|Q=RjImaZN{swl#fZ+rHPs1dEk>StE^uj4IY6PnF zLNyUlcZ{Ow2=EV|8Vn+q{|@!N`h7OQzd#FOST|5a;Pev}K3sFzNn~9ec?4;4@rsBf z`k=G-pnXvr==W}vFL9r>5!8hOZ2~y` z@cKsA4k4Egz>fewQfh-h;{g4Nq@M*=WoGE*vNtHr1hHTfI=7Oy-uw>QC^LTc8d?HW zwR#rQbQ%$L2H1RQ#`l_^%+`AKj=tG9{SB>b^iD^7SsRh9>!!2u+s8}aU4 zYEv^R0MS!#u|G#RJ-iIH`c|QS*a9s!yp9SbDCgsj9CG=HQ$XN=G-3i9>3PZ}?x*ZaDG*2n}|{$C)d@5F{G6G0rPvv^7mEdCm zBGiyHmzDiwElQ>JuyZv>Vbe`y@O*XR%lk)hsbV-ck8aS$|9x|P>#-D@1BnX;?2N)1 z4Yl_G{dx`q?|*=Eu>)p||7q8Xe*+qkkW}r*Rz`hEtFv3{@-3K<{vn1YIKs7R&hcu^ z8s}>kc*Vf!CWzMphj+%WMwniU>st*g6}Y;1gxRY^L@oRzgwcvnrDD|AI0A17tP{!( zt?C0&^=U4fqu8RJ))Ik_nB5UWxF^!aPJ-&|oPo>QXPa#*78*+U1mBiG2p6&e4nwJ? zKok=o2i4WHj@X3-vY_J>JPCE9A2;xZhp}|;%Oc(z5t_B6p~Xbm-y(bnf=M>>ll?Nt z%f)o>r^vI@1r3pZ=P$~y1ih6)6>Gq1SoMJ{LjsRch zTMa=BbrOP2n+d)g?H}Q{;^QqG*5ADp>pd_1_2l)ouMz0_4iMd9QXS{3b z(l3(}8?@uWp+e8rRdFSL;6pcRe@6r;7E0579l|MF9I3V-F-Pg)2!9#`J@JA%!d^U zGsTGZrJeNO*ET~vwJ+j-&khI6TYUh~ts~*w4}nDSr=)&CAZH*1Hm3*Uk%SV!RiA$R z<5he(FUju2YWKFo?cUN&gSJSfsksM9^{<$oT7{|4kpPjCL1fy9$=$T+*S5Ci7%U7x z<>aKv(N+67tH-b1IDPmY$LquvzDn zLHP3znd8*>X83|CtejdRp1j#=8Q*w*Up%-fhmK^;jpV*dT<8=u>#WO3MvE@;3Nz0SS18*KdA6rM}q??=Tc$8#u!(#MR^qF@T?OKH%=8N z1F}7G6^w91V-J%I^DejTUS!+|^>R!cA?y)1AqY9wF<&GMzD^7J;HdQ3Fi2RuRXh=v zH1lro%oMmURbqfMF7NC>Q_o@A-|1E0o1#6xSt7PW_V;7b6*|@l^=%iIApuuld!7DZ zIl;n3j#F36N;7d*&%aZ5vTm<)fVh}=T$Ov<@o5rmTAAwdL8y{Ic zRRA8g*6;VIHNhU9_^^^n_fx-;4kTa5FFl>HH-TSPW(2lDb~qg+-B~+H_WI9FG{MYx zr6y?&QTAL}J=JHcarKy9YM9bUrr*xGT`_{r591-t38BZU`yO4a;7!5=FMJ|zvnYmC zU9&8|aC+s0MeQav=JD!eXFt={@{FAl-g6#3G$zxKZek5nxPC}sIhhlVA$1jVCRI{F z?uyxXyxc45NF@=cVDnZDBW~Md>dxpd<;IFqZ{k07lE36KI{BC@&9SCi4@f2ZRxrUI zR`39cy0(bCE_aIRJfZKZ{s(AXPfNx<`Oods3x@XV`;yHQqp9h9ply<{oa7#N2PXUN zb~4OGip!@?QKsczI?sSz1!O^|DcF8>4m3XSg~f3-_ah$CU$5CUAFPv&$evm;xm{N^ zP2M;#3S-XK9PYo6l%-+Hq#@0>jvvCtKd{db3d`;FRW=_Byih?XX^O;m!4e2l*R?o~ z@Jxwpwov7FA&6Z{<97O%l<6})yHJF-LvT*0wkMl~2J4*O3jaTYl|_w+wqp}!;ubD> zz4RZfuHes_)RcIC&Qw=Y#Er=Yg)F$Te!P~G&?uadCt)G(BPRDaC{`>e4K=H4g>k9jX4&7~QG4%rn8r+rgQPqh` zDmryP9b{~pPOfx@Kf9`m$hI3D@3r0);q)?qnV$8+4s)0tfs-Bmv^c=SZCdrIM4eDE%5lVJE9QPv#?#)+vGV# zWSxr1#SF1Qc_>C}{8KFf-c}%Z?e$rV;yLJ3iWwTE}MQT0mHqul2sgwa((GozU85X;=> zU6E=IO#!1F^9&63pj0ZX>FQa@pd8A-5HX*3$|0!d`bVomGeGCjrg_pOwfUhH%hVPmXGEo&nCv0foKhWyZpbwT@C*hvQ}h`W)E|6EkkftAzO^w0&TlH;s46c##t?R zCZf-_6%Vf{+<1HGp34G;1r!kL-xw#AAKz}|4Wtw~AZ%=B(Gy%LUzVk9p4s*Hv1cEt zBLo^pa-4zelR@_~em7rB=LCgDNVE82n5QX*BARphYp#>zd%v-6sBwHZrd*5YZWRiK zyzzfsNmGGcs#3_%W_1O%+EW0rO2A4|+6w=5HN~f@PlErS7r_296%31Vu=&FBYx_^V z&Ktfubxhg>YKk!T&LWrfP~@)o;t~1ey}g9PBdOQ*PPyI7FN`%X9hP+AXAbR>(#*g= z8?*6r@f4E6DVBmJATe?e@w6dtUkbzk#Pr;(p8i;LHV#e!-f%>WF;=^~k?&4hjb4*5 z^LWZZVu?$13b7j0&b5!;xVpWcuc@k|%t09>BQ^Gf4m1EWfs~xlf{yBKcC;F!s;!%G z3L^;@A_?CYeuMOuV1-7@aiY^A1Hw>LfJSDWDHLNE`M*%)zN`p-X3@$# z{zf_Q?&Wxhy3f2%dbsWMQ^??_nNMh!?Q;Ehm{@1(V(9d9@OzE>-`yv7+|OGHXi6Xo zMc67sXgbs@?b*i?HW^Hk4=M+{J)bh(DW4}0juIjrT=kQY1f9_zI<7vgM#aQL>*b*< zGnT@9?yhb=Kb?D9R*V#4{V8md*zP6e^`O{ zQH6K0s;~GsCoA_L>xe9Y00Azo0sr}t2+lZ{uBC}0oBG)F*qukyKs-o;_Ta8v(p_oV zdjFKMA9?+yms@?7=<=b2%uRNNBCb?cpc< zCVDT8G47jej-G%5F!T+3W*4K+8yi5PkTV^}63dX9-yfyVW`hLfwdBPA;`LV&*B@s(alQEYT86AA2_ ztpO&=-{>O>t`~M}H>@1G78)Fjh*>}M^xXobOlUS%EHihFjGZ%7GrnaCm^(r7tm@I% zhXelL+ly$e8uGI_KGc(_78|zR&~bQ~)kPkr%c?a!n-y7jNUE5w*X2G5Iq75Q+|}Kh z@MAXdwS6OT7ukHVT5qMsynvVyhbJU79UtUz^*#;`CWOtTQcb4jG%167Cx1I;9dXmr@wVGx-7s#;?l9vTQ!RQu(aTB>s@Panqbi zJ*DkMMs6#GnXwc>v;9bn^P>K)Q%8!^vw>p`UNr?%xH3T9>4Fk}N+rz*cUk@U#CC39 zr}{t0t@!tp?Y~A>N5m4Ia?QiIPb4_6or@}%wWJ=KdS_yu*8lMI~|d9_0~5q+8YPk~wkeZH=EF4qYf6{6!kvJtkSZ@)YLjd-_J8iYQC^S1|NJjIEHrIXbmz>%+M0E06A!oTfk zXD+m<59kg)fB$=T>mQ4XaZ5;E#~q51&oQC4!Z8{-lm0=zQvK=(!&(~e^0h(#)`7=Cx7saPTai$#T>9yvF zF0G!}zjL_=#=SQ|8Z4dCLzFrDA?f$ovukOo_se|MnYxqiqVgr{wBxX|W&O8?Yafc# z9lw|WV=Nf^qfReu-}`sPsg(HrcO?{qK6HL z8T$D0jw;#_QwLLR-TaSPAstvG*p?hM*LKzi5|dW%_G+2czRnsDNBE#dw1U73qr}z@ zp+uf-G(61Qfy?FS|EP9Ub{Fv>Gk^qnoWZ6So*abPyx%!0|04kA$0=-0zo{{cK99;j z>Eu1W_x=8%=yaEi&ny_X_{Z1u|9hR*8X0K3&A!aTxg9q}hRRRAFa$WDbv6(L_MFW; zxsrNS84n$e^Qqs9`g)y2q)j+xJaDS64bC0To>%;NKss&{s(E}9gB7bUXyURb7v(Py znNzq8hvLwkD|UlcpSNQbW6BxHG-$PO+%#q6L(WMZMC|7kw~3keL?V8(XlhSQDkGlO z8T1fCR3H2;=hR1uO{OtwpQX=o1!>uRlqeq2`t_W^9{tntgeYVGG+>fSeU{5#}A^L#m0Ma7dWmP#6G0%%eO-NN5X zbN#W;Iy@TD!G7vng@tr?obgmWr@2%@v0g%~TE+4y={rK!YYt~~sV+tOm$(AgH9dI` z>fBwR05GDJM-%@?QZy-Cc;f`)qoucaGd1WD)wTkv04GBhx@glI?GT3rs(||;3x_XrB2uX z#}C-qrLb_UWqxcV;#*2OG$RgEid$TJD@TmTO99SpKM<`E)Ti`A+$ zUG}!L;K(Pg=Y`6DOIr4#JYFL1x!ns=U5c4;^*A=(ET7arQkX8VnyD#tLS$<1Lcw(;lR)Sp}LDWrN9{fP( zp1XK;O93aQ<>!WRlLurO6r@xy788{M+aIR3ezz5|ZTu_7iwg=a_#bi(A|oSQ5y?Fk zR)QHv=aMRg--$~g?q|6i)14BAmp?0KzSLA!k*&@C;C(6t#LQCUF z?_4@~-~Z({@jK@u7nEI$E%Ne1_+>Q_@!M0kbH zf1Xh)a%q>9;nYOQ@|3X_kAIYv>}&w+`zQy*6=&~P)1r=cC&byk5f1}+J4%?^;}YPD z&bTKv$mxg>8S}zJB0v8K*VyfRse*3DFTMA|7izrrNyP7KaW|!9se0lPY2Dvm%9Wl5 z;p;YzJUB#bQa0Pf_(dGlJe^g{H&dHfIAAxI>^nd0_=rA^W(i5SAnq!>HMN#=KNLQX z*1P(<7`L8JIZV_JD-lH-3I=mAiiYm;QZD8L3b^d6l+oWYe<8toUnqqfREN;YiJ6G+ zP{%@KqhF|rgv#M8d&7Vj0xsu8?gEJWFreCF?!8cyp*JvjBIyU)S53YDhS|V7tt@+N z^E%!3QJ(38r3eXRN>)Tpafmqu{9964<8kJuROuGalIVS@q2sKyBjyZ5Y=o)weiZ>P zasM|=t|;Y{YlC+}#23(48zV6^-L-0EU?zis^a+T08Y{UgeKm{6=Us^U9r7o9lDGle zl*E|E;nSEyW+4Dn_TZm2S)vcJbPU|$J7Dn zJ90&1Timlqn$uQ)Km8zzZ^G1SXeXEs9EdB&#CHCFZ`FF%|24tUKX4$Q>A+@-4A(u} zy(H;r?n>Cpv}?UDQT}sTx_g+KY|z2SyjyYF$xz)}eeC-EDN`HQ(4Ier2fc-;@w9mp z8_oL|w6Inx^^dsWQozE#!gS;8p+8wV++J2VfAoK~e*BE_{+E{X*0@E7-wQ_cJ=@LM za&Wv@APF2?4IG>UeA_UGEqHKcq?8?JEkus6(n(Di0WuwtJZresH=zK#V~g?ewVn~T zw2LirCg-hH3pS2l@6h@Lew_`Y79G=wEXJiF_E*~NMw*F_G#fgV;N!}WA3Q9vq|T#)9fo$Cbun!7#Iej)Qv#?%L7Eu zwvR%$-(Mat^0H@%#9?8X@f2Uy8!hph-ATmJ&scLO`kirvaYI1rn}xFDL`YKztK&H9 z4W9iRbi`)&?BpO1WDi^z$tK|0R;tcI%A20)|ABHLIRNl7cm$l(@mw{0%A!EN(?CwX z$8A7$Mi@M6?b3-j`;M~?EJ-3Yph7SOJV6MH_U8!DLUB)-2T`RB>?sI!Q;`FLX0^XO*-i`Jk-i=q~kc{sxwx)`(7n6;fbGR@F#`mf@Lc~g?XC=^b zS_n=YPCIQLVop^5WKzt&SDfh)`L1X=9&0g6M#F-8YfpJKPrCW-!u*e<$TWlp+axOe zHYRp=s*_d8f)|;Lg0`lj;+u4Un75lR5e8JhHM-QuA2m;?;kYvtp0llufLQL0;s1Xe zXVic$LI_in#V_?sZV#*0+A^&K^8tL6p04u!Sm!(iS8=TiTD08 z|F~fr+S~c&=OuTd$Q#N}syb6*0da7}P{xo~G-=WV;sqy>PEA~W@tdtm)i~1L{ETIH z#|zUn;Mknd*uS{R_&!`D7K4KetCfDd=ud>7HZVs*>|7h(=aDNF6*@Cl8%E*qaxK!; z6R>0S)GcK@Qz5m?(Z`D@`{Q5vD-B+x==)4n+yBw#C%nWpEe+9`)HP7S=>*Y{A~h09 znT-Pu!bgR>TYbN0{}u`rx(5^r&~~!cjnP@HGCfaW62c_n}ZY_LbeR zy$~4y=Un}(L3dWj+lIg&7r`?Mq}5&CR2#4B0bW`$BE%%yi$g z#HGK*K7blhc{wBte^E;A5flp)eZJy!4hF0&BS&~eDgWqea^$l4JA^EUZru=0EoTY&e<= z^V9r1(OXRp&Z16=b3q=KWV2Q(ebsYG6~b|$&+WJ7k4?3Hu0gYdD@a0e%!y-P6DPiM z&q;(mA2TRTsci1e(G#T+Z=wde)&EMCf>#%Nii_zMBZpB&|83AegtllO(K;`91P+z51yn0s&$3gIcG2vQhDei#SK;?cRm++W*#6I4pUp9&N$tQA%K{>+^+ z{!-(JqO(YG9l@hZbw)Bdl)rJ;Ekj#OxUvwi}_UXOjT>lXWNir~d>?VsI#)WDqvoHohu@lH)xGTX4c2tX0*@<&2N& z*a+3OzOr6*AKN=7v7uTV9?`%Jw8(MW^mIy)LYa0d{)GrypQc>7B*aJe8e=X9i3!TO zvWXbUD=+Yi?}}V{up#_Lsy_E+aQQ|!G5~3O1`B5#OHY`Jc`V1z5e=m9o6(RyLpU@8 z*8xkf@U#vgl~~bxci__dq1t!|zJ#UlhZGiiFZy!6_}Smxo^U`jI^`#j*O7t`pfeZj z{Jf>|Rbq=|`ET~(T^;^OAZ?GLuk)F$N^_ncuDo(caT3qU`WfvwL?lN<_`~x6_w3uP zBn!_Ukd+3_P?FyP?4t2 zW~2-obS&Q!QuY5+`V{|i{Ev3{0jC}QxFXx_+7b}D&twSWas2qGT}q_MqMO+f)!3@n za)+0%p@Ctugs?%nyOvi?=RIx0=gH5A#m&zGAW%6qcXJ#8Uc|)U%V;PWmocP>q(CW09beP|> zR;F+WioyUI_VrX4CEt@u3Jc{}ErwCmmK0YHrmd*QNzr!lKdaP*mx9P8?=O0bl`G6` zqdXMZ?8yZUaA8jah@^1E-AV8Hj%^X{ntozGTMM*tJApA&f65OlNb2U3b8JIIhOGGZ zKP&%!-n%q*1hh&BSCb?8y9SS^CV~W<062HOVJRjR;k#7g^466P;-RQ<-|W-~MlPFdcsYalXY&_Ez)4UR=hQ zxk~~jsj>U%YPPJj$c9D88=}K+@}p*6#tG*Fwl2;QXUmWMVW$zYN|K86ZkhwF z1Ger&d&m8qIgiz~jbWKB#44kzmJRibJ=iXDoUl8;ES4J&PR1>qpGxxlfGZ{lFdd$h zGUSOdPOO$x8g{*&dFzw}JIcDwX|dPq+a1p5`Ar_DBO%eaQ3_SP>xjbgBHm>K!|qhl zCby@ROW(^GgXM4EejBz}SOxIk25R+;`VU}S{cun!092Y`> z7X--uvP7<1M(STqMa0InvkuGxONu7E`Dk8%W!jY;7KmdrA!r4V6}2zRrAkP)LxF@p zOxlX=FD0Zb!0WUWj`=_CxwB6J;@nj>o6p~NJM2bsaLY?0Rup{Uy>8sRYEZ>NaAVL> z0ZQQl*fDOCtC5@pUJJ*+oM=uzB@fYO;@s?yuhVMU-Csk(e%*h~mC*`Q*IL>~p(It# zN-HOb$Y|$_Iu*aBUk$u|8z#X!4_ih3c>aq*^lSJtoI;zL5hcKe?V-^s=HdFsdx}pt zs&*N0j;9#k#g&z@?S)`YNw*a~w+}z;MuNDyPpgf)Qup{;&O!3hmW&Dt-BMrD9HtOp zH6{K{`}oAYWN(GGql1(Ymo7(;WPkeTxZ|OQziRj8Sy_$d)7~OR%Jaj3n8z_+mD;#v zVHaAAgE$-nx&sD(`lan}LzmiRx5aCX>D z!DdVa4ok@Xef==f-sr~zn%*zySVOrgR3K|`W1#al<4*LcgWv{^cq4@YzN-nA?7TE} zdcVXt;O1mGy5X94WG%CQW|;?8Vl^)vkbft5`jG$4G1BiDHxmsdG!_36$R3_!`P+A6 zKvKl*>dg_+KV2a3lQF@5itS2!W>RM6flX_aeYlNqZI^*AzXgPL4NId+x2Cl*Zpx5& zy6#dS=$tt&Pbg}5p1!8J{bQ=&mj^i^9JNJR=W47^-5>D$qY_5(p@mx5ad31p!)Qw% zB$UAOOOf5`v~?(Y1ZTrDjd&tOUl7Z@o2ekQ3~ST?cr@O--8m@vVAH^ly(3MAJ}iJ( zXbFmI&9z`Z`tAWajyZ!>pjvv=n-N}WAc_~Z@XtCd?lYz9ddbCMc;9_!4HcMXA~zx> ztWIYGPQ^@HBG=L&3W}>6wm%Q{i^Sc;r60sNm^Xf_h}oRVQFmK3mqy=VpP%|>G*(lw zF9eW_&zj-())K;Hw~bEJRXfP$=CxzxXs4w$-Ml3s+<^fULt(^NmbgR+8ab3CyD?D= z=0mW&3PxdbI(h`M=XJ%N20h{%3x%|yfJ?}b;xVu`vEnHDR#(NEVdRhfl>el;{?f8) zXDLw^&gXO>s#8#bpd|c_QnX7iT_yZwr?Xg8kW12G2B*0pf5gb&TDob1M&788ui~gu ze*v!A?soc%;fT3{u4bOqCqE<|*ac5)=42C#$dMicT5CEqAVq)ZU{9S}O}od{O?wIg z`uMQIlmQ4xdy4wd|4FdI$`WV2jfItZ4gx{Pd{W0T)>Tb}J&F=%Y8ARno3PN*&&iBT zAGb7Ldtsvq*ZP+AXQZVL`RRcPH1FnSeoI3{LDpIR_=nEuh&B^v!a!?qCsGaBHy3IA z5+-a+F0DkL*SJ-r&%=TtBJ2IHqGi~%M z@Abr$P2Y_@ph&GP8Ekf7+^QSctyKu1FlJ*)I>=X5nP1djFSeX=8{ezXgRSlLFZw#Q zDD<;|Bu#G~_9%hpp9b#|_n)umX}U_KIu6&d)nAc1R~%6ny2bF2A~pAjCFu3QDn(S} zNVSR8v0>5m9k5svI_OB+VC}vCmv|5*E`x4Gr;4s2DzV z_t|(thKoKENrcu0U+?Zge6mxJtWCZp(P@F-`KQI}=Iiy%=pl_UX$w8XgtfAdgi_)@ z>hi}0jfMIa`)lVFf?H3f{R0j|K|}e)C?eMnd-EPg<|n41)-emmmBW~vDD2f5oX3B>$vtaB3_HqvK~?*2c4 z9Cct-s$XLKRh4OOPqV{!kEb1R`(;HBC8!GjifCA!^&ymU(X!1L^*Y3hVQ3IH9C0l> z_jhUciOLU576(g+SGag4p;!a%$8gc_`YPjfbi^mC`pJDrR5-5_N3yLBrW?J|`#|wT zhZSN1N9Z4yzR9fodFY#o!+BCfz(ihi982C4d|p5g_VOgHVr8SzK>epxPMG?cTwM} zC@H@9mlLs=_#=rH!@i3HuHs!A4pH&gDMJ+M0yA=W>ahH;Sxvhfg1qs0T{oChOjtpp zvN7?Pn*%ffuIA%v=vZ?_+Q$8%DL9#)sF^8IIztYV8ibr#>jJT^98h}m)szFLEhOMi zUdq&u_^BT;B(ZYr3cxs-_0jyq?)>SbuB*U~DoYh*d0NXjc%@ZuR!)dNAh62h49kZH|XB3+k zW9o<95vz_c4vKaIN-?L$r#Mau=W^?-W=_5Gvma8?JkBDymhgRBP%zt5BK_39n~2FJ zG!_cIV2(ifE4##QT`w@RBRL5Lp!GSMh2?glL zI$SZ!>$p`9)YWT9qi!hLe+fYwG01$bmh0U(L%p5yn^P1@v|t~`Ei|GNN~xAwN|qx0 z5!Mk4n_$H9BK(;rZ}Ricbe)Z+-HZMR$uRur`k4F77^&*;N5XJ^iEw=Piz)i;?FYvt z>^}J@&Y87nV?H=0I;~tZCOTLkFQ||(^}KBgrFIOee|@HsC^D38F_vx6mBx;QVL+Xy z1zP1FK6(TH0bA#0c$`N^K6rmX@gdNw)~(7ntfWT94};_m)EeaWvFj@U`#lo(*{Jvh zK3kk(bA56ycgXZ$gc2D-WSt8Ri6C6K!f^+TzX6eeN>;;euqU3*Hcy+vg(-ZW(R^ewvI2q2|;bu;+WzE5YvMddRXc5Eg;1C_{hbrOFE5o62h*m z#2Q+*Q?1Z#P#{R=6M?JjyF7c5hb#3gtGTTdVrQO67P<-q<>V}A>UI0H)HBBp&g_Hj2>awH$2@5J+$X=$tp z_HzqRrs{Et!z$Xa$ZxuvLI#0|?Uf&_mYHeX=u*qDzL8S&nINvq8)e(Q@?MQ-X!{IF zJ|6nJfM##hillp5cLBZkN)QRm-@Ux&TJZ5yp7e~Qgjc=a_4AxecCo{UyOk@ltaj3g zq4qeijp%1Ek$Aos@b@ji0|1}qN0#P~Cf&9aCSp8>#Sv_tJOR{x2Q)<;No#H?Xk~_^ z;s}5BL$|JL?$lBz>#8;F9%M-t;OVUNz&8Hcil;>XA(R0|F@B-*cKNSige6dY=1P9O zpg29Gf(V5@L^p}EsV!BQ=|GkG&fNS|%y(fq&93PW>3j_bCvbLRc&w0Hp!pWN71boG zRXzJjarssTiB#DWkmjky$3$D09=2Pg!HQSoWKNW7h+ouzvvV@CesiRwEpN>9Cu~Cr znEEqbY4(?c%{bdePjBVJa}k(^t`P4`gs?@0PK-k)>hWc) zeb>V1dqk`gws7~UcS*)k8wyPyr&?Nzl3K%dUkOqu;!ZGy?Rk5q>XeW5g_J&MGuK0IHln1H2RSHi4$``gfr zyJGV%FCo?)Up-0~&aaYxtsiXL!%OPB;8ItYG!b@%Tp?4CQ%KEuEfM|B0i@A$@PVSF zk9~xY+*O=#|2lpvp&da>Pz%!a)-anUk^kjzXjqU~ire1%6~%5RaJJZ%qQ4%|(Av%Ll@LfU}`Ozl%@RI{5|%@y>|N9c08r5I`z^5 zhA8mL@A%D+|MWqefcSr*H9@pgsWM~P*)?cq%f3oZVkQ{6<9!)avDTuUF8Kxo_jp6I zCJxvadzx0TcP98(9-JjMiSw+s?RSQ;*v=28InH)M3wT*o(Uw?YKy)F+fh_?{cQt}c zPsEND(Z3BrgmWy`6&383-oXSOK06wQX5o}~tc;yCA1XsA;Js{k0VyoJ6%|#|BWR4g z2-Gs7H7O|xQV=(*aO#sDH?roqh{L&}_k|VVGvB=_1d*k6eu}{=dBZms_-5e)?j1uW z1Z=u`l@^6tJlG}+$;LLy77MIp9mL#SU@n@T^9Y-#%sBUX;4uoVeOtsZki!5dr>#+CN6OE0UwoABw3qQ^@$*pAUt0Xq zUNnUul_V~DKT5DIPn1d?i?q>{zp&jrGe3}4s9>2PzsN#D9EDq3lha9_PRWk=y0c($ zzh{EMzfIGdlK~FgcKFr26*!}} zcZW?trOEmH69V5=w(Z|pmSNPkQ5j`=k|2uX?mUIREE}Kf7ZsA|1J-4q9 zUL#|yyle8go6z4hGTV2JOHHQ{y5&!O>UT%I;21$r1e$M<4 zynU|u*M~KLRpy*j-Wd`@FAZ?ksKmh5Kn?~x>n~Qzon?c&Loec#s>w>~a4i#)Kb6T0 z8m0!olrU@%jWo^Qu7Hr}wCk0{m5Ng*s!01flwR%t71A|6hzfFZ9NN5FqN?qL(NW*t z1oFoQlA&2tT_qNMePc+@wrt9ru4b9;n@DOYe7@(w9f!$RCE$mYj5>-C3H#&c!vH24 zMO>711%>(0bXDs2Bh;zy-Y(5Xdv=mKGh@tqtv9nr97-u7snL`beHm2d&wL}%Ymd!h zb2%0?Mi)K(i*Sg0Uv zO3wXk^%1QQ=)Anz> z+h?5IRmd(^Q${9fBU{yMQ zCP}Ts)$(8%@g&LK_l&g-D9PGEG!it=;IFNUmiG@x@FK6!m1YDq5v0LTe-z=UN2m~I z01^|}nNWf5vG#w&NXNg{#@Nt%%IRnpXEcGFiSLmxEs?lee4obemQ>%^1~A$&2ne*k>ezydDc= z{;mETLOfwqXPVbR@SXAQ4Kb-x%(_bDFkeEpr9Dom5_RpDgGafB7ktv1@-*Fhm<4Pj zau+NrSnNu6bwVM@ycVm{iDt@&HLfhpgA<@MAL_aMa7r?qHQm%Wn4$ss42R?e9g{5g zj8NRnxzQ$bb(r?xy~nVYJp6(f1eah7nulFgYzKia@MmUGpMJpE@{AsQ_8|3$a~mFX znXpPL_TJQo4goIq+{sfW$+)69m@B0WCa1Ve1-~GhNQH$dXRCuMA#GSxpKh!Y{JSP^ zCYQ$G2M))5GW|Y-7EndX7iG&+zEru4)@+sOiV_xXT(D+%ek$9FvwG4n?88Mc6*Pcd z#rc6W-h;X8fm@AY)5)J>0fo4a*$VOrrUtx$ZnrjPBRq&UZ{;qJbKD8_@0Bp1HBY}a z?@KVdcDq~@3BGG`f%cN(o;_FJs}Zx|ou&ScI-8v2^eobL@-VCmeq(8Le(L=6dK`4` zVxs81s^_&fB)d$fDJ;vDVz{!I8N+~S<4EL<&ESTJ0)m&zhKR!>Cx|m4KS?K;WkW1! zL~AyQEp^o$<5$XORLk1vG}}sJ3!6ndw^x5Yovj8{_?!rOy<4JD^ z-KqK2;DTk1G@Q)Ur43ybZBC{2FLc{+=>HJ_X@4&0y=#PGwLqB)bWx`pNaEtrH>YRQ z0bseh*u1so=wI2QaqEVd$fmOpEAvn!Gy+!rYCTIJJeD`K0++$JwQ;?gA5UraV}ev7 z-;!e3aVnuc>`w;Z5af?~xa$p7c-vZAA2HkJ^N{b@p!H|lBb|d!=;jl12@c2;Wn>4U zO?k+Kg+31dRY~$z;@of+NL*!9iW3v|mYO2s19AF$=3%{?H5BxK69wAdg+%m~Jx!pwvIu8?4m>CXs| zjWc;Hw(oSK!klHPk*bajv&pE2)+)S#4OxFiiC))A?W4q-ZJ<2Plrz~tdRjL)UHkj% zPEtDPe(=ILdLV!X_*77fj~f24&NN^wrOOwl{88R(P_Xa2T$;7oF4ylEZndne>hSxXq2wsxstl3Vt#Q&7}`-=}1+^I0#*nzlJn8-O!i8Em9So1Y=dSQ8Fy zQWuiz&YM}>xtoxHX{<=1UbSL0#!0c?pE1TsOt<*LPK8gtM?Q+_;S@102;cx|V4?I+Oqu`c z10ho!K{9I)SxA>SL~Y(p%)(<)3Ap6Q!Lj(HCGSyLYhGzIAiOzZqABi8Iyg5~tt{19^;OT{lQkWIR4};f`!K$c*N-;j{ zDCM*bl0lqduf?I|rfEs2r203G{`` zSE+^wjI|bCg~n& zxhzG;It|#*INlvUyIXwk`OU;hy^>drQatw3HkeZgDqEpYtHP0=h1ZNf`Jw1kH`l!^ z%z6jozCejf1*DGnGB7VJo$PWgJ$oD#fY<-9 z>$$peDo-S$pRj{=B51#0S*xicsbk2GIkIy#PM728d_9rsQaiiNVgTO!f! znJ>Aka#GFmVewB8mMX2%@QC714azMX!H?aPboT_KcR2wx5=kl>JEDY;7lPQ!N1m)|W_po2|#IgX!=$7B< z5wb&@#>YOi&*h}gP)PKLx+T_TQ8Q#TBv=v6-iable_eRZNU23D&Z7+$u!L zI6nu)IAHEwhrU$N^GEo&c`!BgZISPUpBq$lXlV%4v_YC=`G7x9&;Iy$#2gZaKN;h9 z24!4Vyce^8Pe6ceEg+B;;1&8>W{45r)C2^O#?rssJdn4$`RgKfJCI~BA`$pj{}VC+ z)&yK?@WQThUvMj&j*kw2aE$NEHJH((LPr}EtFNDkbz#pCelmn}2_l#*uG!jFRi}|3Wy5BdXNNxkrI-$h5(5e2XM#1qLpq-yY6C1XbG8pytxwQYP zDuty~_v7>H$5dwKZPbt3sLYxudqC(nR$sUyRZG{~NzvtiK*~Nt9ZU?%gFAzi;cfQc z*}&Om8P`bo!{u86CU~mh3LW^~#6koJ{HW5N9{(5W=XQ0YlrTFyS}v6qt%(7IW~Sc@ zscEhT#bg=3K}BrgTc)@>_E`u<&G|XW4Bwxnma-0Pl)u;r^7+06NQn8Nvw$%d;fPwE z4{M!p?+n7&?M&Xjgsz_MRffvgk^a7_JRd=cv=2dDmVtWtnn3;{AkY+(3#M^BSK&kG z!;jW+5a`M(PPqh zwST08;)W<4Ce-KNT|LLziWOR-^=%9m@IKx9yudJ|wNnerj+!=kB8t9{z(cmDu@*m- znZqDIZ0W#}rp}vgV{}lFu^+3wnOWFTs7z8W-|UFt))Kx^$p{m-5zC8&q6NOg9dZBJ zUG`&eTzdEZ{_i?D5*y648}5Mx2jZ+_?xt*69DRa&;en@Ael;jD!CR+uIj9Z3Om;TFP1ihkX|EMOOLm8S21=DyHTUJm-2xyo2Zv$n zDWc^!(Eh8sD~_m6{?xGbJ}=r4!fX+Ea{1+A&DNrguwiyf642h(V+Yy+eW8;8WupqE z<_;(SFV}}@;~pgrYh^4fM!>t!!IW)Q&dU8`OpfdCPBI3&D838uLZ-2{tlA52>`iy- zf6x(#@ykK4>fi~K!KJhqR-zuvK6XXabtV`92i6nVp=Zk1+pZq7=WTgAzBVp5$f@dv?r!t3C2^qh-_QUOX`&`*U5vdTssGHhZ(xwZy8LPf)6)4WR#@0 zxn2g3-lWu@^b_c%Q*3l!^41Hx-Jm6c`i2ccpZ-^72<`q~7u+)Y*E-Arqo_@&yStU3 z>6?CA2<1{a3*&qghnF|SwttY>a6WAgW^Rx>+&jwUsAIb3pYsRJ?(3*F^d)9Sf?va8 z&fvYs7>7bp=5T2hA5z5Vf64~uGl-UyE@aojcF~r#|Jj+NuL^4Y+@}Ty;BY@+q_FKL>f?v6MmTebR1Q+@#-OQBf45$M zIKJV%mKcV*qlk2VEtlutPuEk3ZhuRzBlRgPd7t~ORjAftJPx+Zp%rlmd~FkQU=(c% zz6!3QR%7ib&=&{MN;#zXVUJ9EX0~~!zKjl{fR?WeGGLB;Ah{+7i}yl_Uf6%3{DS906UJ z2OkYQs4O;!jmQGB4veOEn+;FMdaSzCol9^tO=Ty1{2}yXmt~$2A09L;njf77CL(@h%eAZj%FId@NE7DY zWw2VF@KNBWm}+GJ7*-NdcK9H@9%6-r3FnFK(?jYBuHA{df^JxYPe=LPYyv?=6o4_{ zt?VTWK$P5-VK84ksh~6^@<7xMnm-uaDT?fqKl|F@j^no2eUnz$eAA;r5NgX(S1CCs zK@;QV@5^{BT4-dnksCeG!1zAfAV;2~x`(9qn6hwphfXc+=988|?cyFP_cckCit1Ge zAp@fL!x^`uu$%tt_U~4fPdFPj|0abSR5mcQ8#CL$Vbbx`^!FhMN`m|iT0LiB`%IS` zbb*qjMrzp~XSp%Mlu|w$WO8~fk9EHF@HT1e1b_El`%=Ke;v{r;w6?7D*Xvz&2iyKRmDS zRQqIckPp}XNQBd89Eg!+{~o&OZneQ&4)CatATfIq=4* zYnt)&+{JK|!kq^9r?#yJepP-^0Fv`h{uFlJ6Nvs|rr8mEAkB`ff}1(TNgk@sBY!B% z+p}`>10pcX6`vuN=$x-15&x0ZV{=usaB|?|lSi%Kvj2wiTuBCBvE>r#WvlS&-ufG# z0eX9?wqvHyQ|Bbb(NPqFzs4&)STEy`cLlFEmaO82hYS!Ao$~eDHGkaKlOa+8H@kWk zKcJ~_u5f8X&%=i!b1fCfJHH)acyGyIS?2ViLWL-dsqgH1aiRAENwx;TqBVktxJ~T$ zMCa^)lVpl>#iaWiVKFKLX|aeB>jUm{CvVKH8zr#~I1z_db&7W`E`y^{o#TWxlkUW8 zBHnn3G+!>(kE8S#{>m}9t!ikkL}W;!(*2hgEdI+2eTJSJCIWKyE0)y}v3ezwkb@~4 zZdRAzoSv z;Z8G=qgCbGN9-ms2(pQzQ}t@4E5i)0aOOZjDk@)CmXw0eJU>m#oBMP?tbLDIl}B@? z2ohv!z`)%6zbrt^ogY$;4`04TR^kuX8dYo2XX(u7>@|mym~1Q!d!pZ0AySKMz+XsJ zBKdFl#{|W2CtVfALcU=y6-l%WZUJF*1pL=POwdb3zS0x|kW_s6R*sT{#Um!$k9hBk4R z}3CAP$OrAvy2baA7J=2r49|5Ab9ZCJITdcV#qZrl}+1D{VjP|MB+7paLTfaHGFwRfp4tf>I7b1cE@?WKQ!xi8O!NbC`z&xX7N)k_@cJo zojhFZy#O`N1u}I-;mj=pL)fclc@wUiqLpmHnR;KV){^GhPaBhTF#}eI9t(av(mIo~ zJ#<_Fq?hXiqTuM|)B1L1B=H?>TM-qS+V*ngP!5%HMTYY!8C76JE;+^G?7}In?`_>< zTa!C4m>OdS#QNsnATaItbc72l5X83g_D*(KfNFY44@Kp73MAGBm?s8~SR*rlJ{Nu3)da|)LE(_9n=7mxSd)tAg}h=f0?Bo)ml9c&;WH=u zfq%ZXr(1q&OT(^a87t#waQTqIHRWABR;-2sz?ofW>>>K0;xbyF!=i_S(s}RzkMzxc zON2I$Y9^n!|E3wfcK7xg~arE{H>}``lBFG11!>w0HL5qepjHwF-Pg$Q3MpV`ED`;xkbt2_|npIKMGgl$xmBfm1 ztlb1x3$D#Wt%aJssOof!zU@#b68g@8)(mNb=2IyWGoV*3eofoWOZ+%>Bmv9n#91NT zTHSfQ??00ITdMdC?JH-nUJHu^AP+_k)3tN*hK|pf-W<4`cOOUnRZO-_=z>+U^3ex1|J7Hug-}gI*5qtzk{RsDF z#&($?X$;~LuWCTMgwA3`8o@bXRls141uwU$Kqe8Yacl4qXxX{VPW^eMmIN{5yMzeG zK-f0GNI=XI!cbWhOuHiH+Fv7Vira6dlz^31N+I08v4y$6C-R**uh8=EbJZjH7$wiX zkI-1`#7%Zz1GOdp#T^eBf zIAyFlC4DT5aLE<=n@Wi-0_E>IoTX^a8 z9$Z@6J|6r!P#z=&oHrL@W!nSqu;)CRZeYr^ zi)nk9Wt44~hINCW_+w{@JD5LDMpCoSFfm`nf)pQPi*`=il={YzEBVu+ndWL0F*iTOg4Fh$rpJa`EyU~GVzk|TS_vV4ULxG zP+IDh2~$Qk;D-ttl0dWdHrP`&5Ue~zD43VH$lF6jYLs}YWq`%B&wx}q-C5A7v~Vgx zP*^0i?U~I8Z1xB>oS$#z99ZF7*Kfx=`_UCC)3(&ut=OdF|7M%e3rKzG*u#5I%tp*cPcKHxi z+LVNFi0M{tETN&@H6$}|it=ok+@@@FOZYbvNviSL0cAew;n1m;4giPb&h*|}9lsCH z4_Xx|My+Ur3po`1Oo1(-pWbYwdSw%Po-!Gv)@9m(bwB3;!2*?MUyn*5Myv=;^yWMZ zC4^&cGubA}%yo*e%hH+@K4%Wvx4nIA{fPJBWP)+XupraZhpRkm$*v#8!cwE^WB&i2 z7vv;yPad{H?a`9+Yihp|Ho5$!MJXN|gKcHN@$VYS*N>hpTJm*!j zftTwd<-4KD0wVTwKPMZImXS?6b8+Q9a33Pjv=H4bo801LENs<@>$3H*Z=A^4gWVYa984c zy69yiaw5GaZC|l7x8COyie*DrRkeKDQcURtpirBAGH^J*=nfL;2qsr-TR~9pgmprf z0s#lC^$**%8eb3mc7ftJ`Q`3mRFrL{3a(#4l9Rh1A_$!b)uM$JaRO_vm?%X2{vtsf zrlUB7UlD&66dc{AGMw#rezy-`RwoyTbd$=>p&E|x+I}Oj56>Q&h9ewwR5_${y8OrH$2|Ik}texe$_t7y|fC{8}6(t~13j1hiegV1R}ifzz=;cSdY| zaG1qVH4AhC=JNVfstqoVF|-V4&RF|11_`x>g} zwYEZ23=YEv;Z%lrs7YI2n+Oz~kMk{AmCT3{-~Qn$Q;qx8ib7&C#|6)Uq#}$Cb{#m_ zUkrPZ^2%Wv{)>QVc{XCQ$Pc@XdLs@0k}uDFz47;DSwA+yZMbI0zJqa3rn?$mB6CKu z6(6>BzdFI|h6d!R2>m9@xnr|PfQRk_G*R>a6U3Lgu>SDX@32ne7C6WN+yN7sqtgjA873+w!`g%>A5*HhLzussrCQvaud(;%nY-LGq7g8>69I36jnpb3DT%>o`Qp zSTiYTS2qx|%>^vLOP1r5Duqzha_8BxU*XHhbW+KsP*dF2e%S5nuiDOU{k80G%@}6s z-mRCuqx`ClS~3t^Q^6}YWL3e2@VHVBGK?eQ&pPcl-S|J3R7E%k4ua%0h zz(&bOQ{7mf*}parRF0}vtaQLRu=T0u_MFY|{0L$WpMp&d$?@V+9v*dsh0J7`LNUs_ z?B5N`p4=ZGm;4R=fIlyAtI4+=9kg}J(e`%+dsa)PRckNsIn8iI;8NYb zb>(ypzl|&KQS1c(MdIeGI77~NqUx`3c({l}S`<`L(rVRvwYq{D2ETs=DJ{&`$Kk*k z9E86e>_4J_NRQTA9-Wh-QPrr3#>xhkpuE>)G@(GOHh|R`F1T-9jkwa>eqQ%A>gu@4(!)C4fR=S!x18nVb)*UY-dJ3}xipI4lC8jS#~6$o!D-9Gq}teNUV z{_GQ@rz)Eg@UX~BHO6OGM8C=1G>S$7Yk_Dzv`oN(qywo&UzXvd2aL=V8OVAb_$O>S z-YGj;pg_|XrG?PHZ>wU_U5vmmk(V-$pH~*ysXoc}t4sNlqHg&yL(i(wC zPDL~J4_#Re1Ubh}BCki-;%e1k~c*|>l1()JnI)zK3@ecY@M z<~tGA#owF-9HR6=?~P2)(iu`~=hq%_er<=Ii}exRK3!L0u&%bp^}&P?;Yv*Ty278E6?fZBf z4|C?Uh`B!NSm=952zFqsH+CI{q-3gN!7tx@P84M$<&OMiryo}h#U2KF| zSq!^Uy9%gJ481PRZ~|;Gua&Xnflp&N!4I~S8?eEVqa)(45>t#W%iT4%?V0-S`1-&A zN4*yDJ_ZUrg}%BXj@-UPIH|2zkcs2@yteI?;z>Na_9y5$6m(kRByHUk=pfW&mN18G zKmJy<4aYv4g1kFw+|;wbp7ZW*mCO4lJ$&(hbVGyTzjOnO{F}I#(*s}@Z76ReS{Nnx zf#H~Mj#9j*@4|AAv1cn&P$x3-b{h!hMPyNKs`0l)nail6_biI!e`nf#)qB->wAS8h zBin7uWWE(9zXcCDgRc>jIK9-bTj{wr;;-&(nM4wjQ={l!Z$U`;IctpJm5Q722+N1g zZ)(w<4}q}|0I3{uZIM_ic&`I~92*R*%H~nnN%D4AJT%5;K{%?{Fw>hVkO5sNco{$| z-rW$z|Fp(_$Cr3lVnQJGeXbqbtx=?csBB+B(jLrXWSrX&E{q757KM{1x(DvS`X4 z5o9Za1Lq}rx3EVaGw81_9}LQuQB@wFMS!EY=GyWW?aTI`X#I>#n1b{zvG`08A0x#G zgRAj!j+2QpG%H_6P{qjsSbpcmMvnbR)J4)Ze!@^CQ?oU0Tm|$F_FU=}LV24S2w|Zs zVtHc} z0nRuDhu)6x(s2s0-@|HX{mJk}T6mzD|H^|Q>%VS8k&3Gx?lK9S13LEcscMEI&QZJZ z?`R|b4@vOaCFAB+Hi-UtL-~$kL0?Pwoguw$gehO%vW}Sbp40Sq@pug+3nx|;KS+?E zxauN=k)RB)gN%1;#uIVD;V9WAY1&D&cb@y)%Vxm<%eE+r)H2PH+^(?20Y=iT`>KzR zD&g~8*NW(_4|7+7Odi}}teOy@+rF*f0wyFczg8iKE+Lc!3BkWK0>K(rd(P)gwVG1e z9>{+G`c=$sT4AE4CEVRanzH;WX1S<2dVg&(Rf+Y3QfPXbMqwA70YTHNg;nM?i93$W zfiM|MjwLd~0M{1p7F;SOA{L|ZjdSmaI{sM`voTf5(2GpR?Svm-0EWbDE+dSX5F-)l z^ACJ1)^_p{iVMWi#mN|srPIsGu60>~PqSZY9q~jk)y@&FPr-!n_$m^rA(26eFI^wl zv6>5-@S3v_sIE0B%+#F%IzmY)mw#iuT#<_e)FV#Q2-y{J=>A%7+SxsKU{K%K8$hm~ zYvE6~Yr`bl5;VUCFC)OZ&w7gg69x3}pudf3~)XCoAhX*P0C=c(7o>f(3hR7C`V| z2hPeRjj`eSt|p%`Fr5ycNoSu~yt9Lqr6t78CWa@cFmd`cO10X)tZRFF8&9t zFKBtWv7(uF^(8TN>*@lyoJO^AHg^eAE*D^>Y~C1IHm>__SDJ#8Es2l?(%kpBfN{e3 z5@mJ+Ssh^GY+O0H5f`9MNdHBoOjP>BJfY;UK!?dQesn1m!1Q^ zT|af@MGWKH6x{OVE{K@T{cP?DO!pz~m_P0;Yfs^f#wEW@BKXl!Y`q?-4?$)XM4=sSW^kxlrJBOA0 zu>5?+-D;55Pbs1DfFD?X-$7a6dHWLTSCZt6Wfssp&GRD6Xbv=%B-2Fc5|Xr2Ifoj? zVS)qs$#s4ELTRrD_!IX^IRm&cNe>rQPC3h3zYYf_rZR~dlJZ?6zdjB3amzPnh)i8bG0&0iG zptRn1b+y*w#m&#K_56810G=3|z{30jD&@+Tryibw%9lJ3LNLvJ&ZjBvOF&svH<|;f zD0reEYv|^cJN@pn)fZU2c^&OemnW*U!qmC5m^^mMn>4U!U}=TG*_DX^0mqD|Z>V;( z2A?d?1%V9HW*ie1O!+viV+y3IoWNKDJ1Dp+^}P$OB?6!(fm>jLZw_SdzoRE7kPwz8 z0K`w)NIC|UWC+o06-H%2cO`&WZrP*+lvKZ&f=sl`kpQIZMW)7O26J^te@Fd->S}W! z2L}Ku&$v*`7)hm1D8T5G3Go4JZjwxpXLBrGuKXM`KQ9?0t+RXJMYXaa%$0P-rH4H9 zCW%G%0D;RZK(*fUZjZRXH>9n6y2ueTFBry;IoSmR{x(N~Y=U7&*1RLFcj2)go)&rzI+Gby4jm+is;mHc_lJB z)r4K{^DUpBaof;XntnLV$slP<=drTEtUW%TP5T6p+2AIpU6n9y zr1^>SdAA%=xm-PSRbc*6IsMD!CIRFGwZ8qH4`?rPdkz35s#W~T^b{U#ZNpd#V=R8~ z!;kO>fAH&=ni_@HAwg!aV8Ma~d-WDT@L&hdDy0%;#zvu>ZCl)G0cQUuXEAY%&1X-s zy0io+VDiiyMh+iAR4(to%36!{2M_S#)=gN`h4*UJ8m?S;17o9OU(PCdf^R@(D_Y2j z{ffLJkCp0^QOOIwxujH5LMEw<>1S77uHfp853#+o4Ok1UHAYV##muP-86P(V1Gb_% zm^P;$eD$zQ@a@wk_Gx|7V3Y$3zyKRQt!}RD(zS023Z!5eWp;Dmd?Ek_X<1WHF+x`M zf%=Rgoze$Mdxg_!Qq0vD@y#Zb)`*UlSrErfQ0TUgFR>^mQDB_5Z~;8*VGMEOGi?{z z796N5CBcMKM?*G+R6mvjfauKxS2h9UnJ(}Z3H6d#p&YPG0d3AlEwYItIS{vqjFdF* z(pw5t#=-RoX|AS{EWUY=N|q>LEO5C8B>5w5F6KZ%jckHW>Qmf7m3t$AjsakheXoW7 zv7WlEuWsSPzqyH@zWqMdUTpRczspgCOEZV@&n{fRrI{I2dXje(w6=<0BPE}t^C;i| znLW_jD1Hs#4vDz60dUyCDm&*#%-YHMvl4tGl_^mk-}S8n-1zV&)OLQsB~+FUcYVf5 z^$hfpbAVthzZP3zp5xYeX>9oNWq4WK>5WuJ7DXwc{c_3$6q9U`5-j`bZFBYjlK;|Y zj+V>#$FoQ9y?YN}dSmp)jmLQUbRDy^{}+dH3^#Q>v;a@C+O@nFnZ)D#!sHyp8z<3#@Z^DKfZ>z-R=h0QH1lS&tZ0E z_RHOmLXas1y*|qezj$YnG{QymMhKoY@-^l;-B5$9 z<}?L{wD3F15;RQx6nNQ`log%=At?Z4p0&~5PEfuygwmPXKvFVEXF88@%YoG#NbE`@ zL>~X+7=}~|2*@U#^o>If%uk<7S4UlE?yXA5LUz!M(OZMsZVF_7T6Pj3-N|m?? z1&uJjP$?M*K#p5J?y!bq_valX(J{&Og#j;R!D;wQI^Pibi@U+VttIpTCn0l`o0!%B z-Xz1^jTA|Gi(^9r{4Ejs-A+5k^T#jo|Ni^~eE8SBnOX<*sLUlR@pfSp7pZdCzc<>+`J$i9&*4xT?9F49qs7@fIm<*)|qeZAkYqvU*)aa zVAe#%yoVn8a+=mY0)Pg8b7Y|X+?zn2wcRk!gRmz02nk&MwP!CylVbwKbF9$49N^df z=jM*jlY~4kS-S6;l_kEqW9r;Fl!u0) z)c(76*l9NL^!jx)*VnrNfKoUzbr^G}=Dw8ml|T*&;Gsbg7aaP4XrI2N1V;PH?hA^G zFwFBn^Jcq+#hcgheDy^a09Ojt$x$4?^i_;Z&3K>TOZe$ycli>i?oaKZ)5b zwKrvh0)rrUOMym^eD}~uZhwvZ1`c?ey!X=zIbO zusg3TL`4;)L`9$2JKC9ASew9LZ$pw}-QK+$eHh%=;O3d$^NNUGbh`oXNdtG@fSBR8 zM+Pr2?y+-}KFvVCFD`bA`1OZpSYbiWN}q)W`WgJ7{PHC2mjRKIk_UU4n)BjfLtNYp zl^NVBwc%LMY#TmO3;R-kSyS(BHbl%Ph{RHxsXp;qlkJsUh*#a);t#^dcQX#*rI!eOPeE9irjm`TcWLW3W||Q@Z11?~ zF9$yQ6Z$pn^Jewq^pIs5sV5yJ?5v%=y#T2+gvP^$S@V`ogG?Uj_l%11FIRjLUv*UvD0Qruy5%A+0sn zFIQ&DTTJF?ViHeydzqex^*-1ue|Y?>??DbRyV1c+7s?|M;rWYy+?jZiNLb z8(`I=?GxNGe99)~PxM6fEiRki@26M`w>?Cz6mJt@w!RJ_z<==O^bc+BEr#IybiQ1i zGfF;8T|eZTfIoufL@d!d8fv*nIad=25`Ue+c_$^<=#PxU-w~#5(v? z0TZ*hJ1!?&0_eiQX7~LF?vrH%kv_fq3lB#uBkI=2$U@Q3DCzH%7O!i+=q=E)eUPQz zRwO0D6qkIIzM(XoyZGXvC8y=%d?M9wz7Lj?hiSGM5=!j33g&EDI5vKjqUUMU{UIyX z&i88{OntHy)qgW15t%t-@QRd70^2BHw@u72n$_x6*0;-VYQH^xKQX<_{<-x%aS4_N zw)KGAQmoG_v_0qT&eo+vEM&0FmwuZN_WOYV?+-syVKjybJJ%J@#T@_sVM(cE*~JW zU|$tkxlS6kigXw94pP3nVdG2-Vmn}>l8KLVH0B&MIN0P zqyKFCWnUCatR13>=~~Yp`7ixTMu|$g=xo$8X(fGD4OZ=4zd4%LRhl81BN+{u(6}TG zM|~W%0rfjdTA9vo^As%9G{whcctt&m_rw=1h!aA~rOTuPyEGB>s-gLr4C<&ihe>Pf zwJ)avQ>2SCj{leqeI2SF{%Gl9d1<-7#<$izj60+~Ol3j9K}v>0MoczE#-5O$fR=EY z(35bC+R?gO^t?z=t3k_YoNxU8xON491)a-+i?{QhbAk)yTC_{Dv-00HPxs6dzm2GKCS${=H`Is5|?=-d#q*-B%mFC*&6Ni;KHZx@5$kl9G@QLa&5ZvHBi?ef%pHqp#^k0rd$J+==hkCcuKPdQG1pNyX%4>xzIPXo_X&joi!kC)HgFq_dD(dy7CnFqDn zv`6mWMu(%jVG7+Dz|neqVDyTX=S4N`iNz<)w?1#}UeIuG9hk2qz8WnlE5Yt|iNlR^ z3zi9L|HvKKCtfZ2RWeL0K@1sQPnkv98on0RCJ`*jEzyVE(J1w5bq`aORr;Nb;A3=B z)6>nWW^fsf*XYzR-RR_T))AZRug3o^Vk+pwHBINEe{r`v92I<+wD}uppx{8kvzQce zEBNEy$4;@}U%DYGQu0y=sX-lXTh3#XGB-z?JsoL-uGz1FL!X95ICQjh#_3b;vILIC zAfr=aguWSmQTobSHg0>kHO%fU>|;dxwT7)+MTGcL_7KM^^b!+4KMy?-|EaxEHDoJpvuL|HV_IsnU8&HzF=s`S zO@pAJlGe-`ZDc*qUP}zz#F;qnF6_Ry(Y*0*v$}lHVmZojb+3M}R2QvooN1CjZ0DNB>ajYhSAue zM&S-Y_p06kWP@H^;~v41;z)W9-Yj0j3|pg(-Yx&5pHZ38J<_!iCcAb&sTf~PU@tT4>V44rFh!Rq&dv77yX|xpH-x0E z)~Jq3C#>GRfUY{{I(jCHF;0+0f5T-}(5-d0Yqh{tT|w7KXT91M-q6sOU%W|IkUD-= zbUuM?jm2m8cY1|PhtJ)$!(ydH?l>{d?sT%&$7^i!2Y>hW+Ms!qQ0ts-0%m!`_rzs>99wvH>_!)N#~^D0MSzLvzSTW ztq-e5$S3B=)CYM|)G|T6O}gzlBUzvNt?$b3Qt?n}+h~-oNdcc^;Nin7OpI^)7ew6R z{D4AYy_b;`gIz=ar8VTlfNyZ@-)cI+V9eCeA2jzYVOQ`awzHI+IQ9xICf);JkRLixs zW9r^V&J{@y+q%ZMKWL8;BRdVH)@F0j$e{@(YE87}>TJZP=-ZzVri9_8`P(Yb^~0uF z;wI%_;aI-ENbr5AE>gDpCL6B&h{1|)esOjf-v0leQK1AB|NE?1e)|X7|2}hm{=csw zQ~aMz{x2Y4FwSlxC}HeTzvftJ$mT+6=0YVh9R<}>mb*T?v$b_NQ1IGT-}~9|Rs#G( zi{Fb*ExLbFcp_R~%|712bo(bMwNcoICmp`2oyK3K&iB|KVZMIC*oo!u*fgTWs9Er& zOCjEsv~x(g8wNf|Tbw_f*)_6d3m&v!c{XUrJcq{)t} z^C4oXPWA*8qRhpR>mM^?9>-0pTNR-TdkY|!yBuWu`|6P7LO~lgp>0H9>A6N9|AD_w zG@kW;A|oUJYW}GpJ@2({cWs4Xx8E5Ta(GX*d${(yc&V5ya=pvp@gu^vpEbpSj)r!; zS%$V*6RKxpEnlXvxTsz%2P{6hn+=~)=Sx=NLn!~l?lShyQlU2)@Zl2cTWESHl>OxP z0*^dt*s_lu!F1|2HrVcI{7xen!4R(ue$ysLZ3i2A{?KQ>ZpBh#qjgid>N{O8GPY4X zIPMXQ&@tFL_c=Kkw4jNhr!k9`?tRWF$Qg6(g*CDyOwe(eqDOyf- z>(*E*4$Hn-fX58oCu|t3IYZ?3J>aV3N9`{jgmip%4;6bB+M4O8s~%4v^OY2JPw;n=jr2xSedw6xtQrT1RA^%ome#zum1(do%@H)za8m1 z6yU7lqEGo$fGQI2R%0IQLNTJ=A3CDkP>d;`0wbq**dk8djf_Ioo%Op3Py^ffC!`PE zUyKCJ>w5BA6iP5E_L^7-IUM{Isnqlme8Tzi?Ic@2--i3GM|KnvlPr7Yqx&Nc` zySG6yZtqWgG`3R$!Q1F21CO#)ETG@f^fWP2G-fRZf(TjqWN9l;ORbps7&5BFKYw?= z(YDcXuyaxi-!3ay``Ii=l0@P|b>eg6s@55Ad?bqg!5O&T+wmp>M*SSZ5)#M}=5ISb zixGv36MvQ@4i_K(^Ed6NmkZ@qRp2I9TpQ<_mszJP$7I;N;h`t=_cv<41Flc%9*az2 z)(H{VHex)9AMh)E^&HW{MM=`D{|fH&yQ+;j0Lx(E(;o z6bJo--LK|vbBoI57}Z$R`^s#K^qRDi1s_}5Sg8u!?<-!5eMgkWY`Pm%9o9nNmEO)r zC*Ue~cugKx;h_2AW$}R>-;B$C_$)%8t^16-=6Ac&Zlj}c?B!Y);yEvak8K?8xXe!v zqdUFtUgU;MV)NCEFrN;uuF49%N=>+{o~#fiXYOtNhMGi@gTwu`s97+FqlH*!{8w~e zS7I-NqKl0+#~J)RCX1C+5Za38H)Wbx)J!2qE0%+i>~nrzmK38}@t-bKgVtb^R<}Ac zBe^4sacS@jFLHhFRx@!;QktM|B3oj@64!l~#aO&v-0Q**J#tP3EtgO3_Na7zHO)5T z5ai6$jrm>7Ohx`^up>)Jm$W|3DW`XJ za`nf>+MYAR<0F>7O4HI2h8TH9ge+k!1`PI684Bz)W|T{19;!&Sr$|n#Hbc@1d&JVf zs>xHm_)l~MO=w$&YPm9bt~$c9LK*j)4lYR_PR?sRV^_YRzmvH~$hl^Ll39u5*8~d_ z`OnRw6H<~!ew~0glH_!B5F-g@UcDH5ikB={EJG4hPVRMfr;Kp`;2ACZL;?*+$C%C+ zI~Z5@L0lm*-q-_^41!b`8Xw8ej-_>Rb~Eoe8`f&FNFK4%D~{N5Z6$PQv4wdA`qwb3 zkCg7ox{iOn{nOEf_(H^${f~}8%0x9gn2=YnZg%vc0Z;14mTUsbOuDyuN>iFUs)m)eNlQnq?2h{9oWVz!jm6FkcPj_S zMi}#qr3YgM6B3dJh88NaX|p+4g`)6>+JoA`hxFA>i&LMp=2V-h_gUWdDY)H(c@@fe zM6^?{Ja9b%~iCaowqbXi*5%~HEZOO#Vz7$q8J&! zxLj!2yEwiRu-~#?h&qjB^ru2fE6}J&)2fWAF2^KLq(Z*I(#?%5cjs_^qrsZP#h^0v5TPNE4FPXuRlb!)+=$J_;E1615O;|h zlMU0YX_)<^I|0r{vOX$`)Pz_IY;0{rfr|*DN~g|U3}Nfl=w0H!uQ(Jyh2-Q-wwYo> zraOs}2?*wv)Ag-^fRziAdl9qglp>!+eCxGO79SiSUo-0Fy|&-XUnbz!^Lz23Tn)lU z?6h+5Cb)7N%H^WWKguzp{bNWZ{Gz|LiEF#YJNu4pbbzM+ONV}(z73^@rY0sZDSk`O z8;~Xmx6hOC!In?UMfu^s?m>*pEYls*6ufj@Ae_eMPCO;>4`w>lX3G_V?W5mqeASM)A=dI1Le$2OA+ zS|8Z6B--y$4X)0cad5F^zhht$PF7+dMn37YA>cF1R04_b z>+}u+0DDenXOxvx`-8)m+ap0X~IaIB3LI;@#a^>3;`)dvBP<(x4CAfJMI z@m3FZ+0Rx2jQCtnz6G(|HJix01$a}BEFD71>~=dEESDXM*MFg)R4uA|6l*lRA+NGi zyk0ugLfIm;v=SGq?*-g~Rc{rdX7B7h*?65I4N`$CT}JfhY}YPzyURiYzRT`~xSX79 z=P^c>N?r*{noXSN9!w|RM?XZlyzI|!M2weteLmwZ&Ozb8(ij$gI*@lL z1Si_cE6A{S@ZUn5Rnlvyye6#!Oi{=O-R7D12=3vRBJcI!c0c6iE)H zo6{Pvd)Hv4WcZ4pOZo7;G&ORk`A>QR_H)43|@ow*sZIH<@xM z1V3_pr%z~Tbv}m^n0-N3n(Ovg+3c@LQbB_4(8{Z~AY9HR)cd8Pu8>n3=VoOf(^R=J zT^J7XF0)P)x%|Kr1GdAu*y3Pi#=V#nFK@XpSAx}-G};*{zq(Tw>@v4PFBcXp*v`Hh z2Ej6*go73>4xr>bg(A-K@X7W~Y=azzsK8NTrNw@4xYlr$bV%E+bZ!_-UDI~aeRg!` zPS4Q;1zJunf$VfBdp0WWHF#;XM^cOe2lV`YzL>)fAnml0!Jq0?31E!_r>swTU@(*k zuy*VbGsu?1ag=Wym+eeiZ^}K7ly=|{dyKD@s-3!~7>taG`ouzjdO77_xomVeJoY@t zNEY-^%lw%sZRQo86P;&I>`}Q4=BpNfJUQeSOT(l!K9SkO&uwvhH8oyu6*JC1ZcL%( zg#jzkKy30N?Nxf4vGxWVvuSfUybU#S6q1I6w|#S|x8b=^%A0yhbgn*(;6u*(b6D32<=W+0L z+IRiSwAVTuFGZ+0uQTrz1*<0E#TG?aA*ARoneb$%#XgZ+7rt zA`P9G^FIF=V|vX2_cW7F8OGkG7?~(;%mfi^>Fu1P2;lBMn4)9_6nv!YU)yL;q(4hP>QSi*xgRZNu)U)Y9Vz+i{|066``JN5+t zC6xwQ|A)zKDx;{58?+*bf8;RO?}7@1G}MN%K}BdxW%;0-dwMVtduAX6U%}kbTX|4r zR(kiz?c1$rup3#&uhmhJOG3sg&T_w3u6DEWa=g~;GhZ#AF@*|8JSOnXgBtq@QbHt= zLKdeG7ZR9xy-0m}M7y}Y$SJ4K!qQQTU1e4x@#7rKFCoE>5bV+32=&sUzpD{ZyNFDz zxK4p<@s~&-*V$eH$V%wMoP13XG-pIT4|ex)+Wl0nVgIZSs#B|Zz;kkpH}nY$52lEM za-rX21|_0v9wk1r1vxt%w5SRp3tX(^HSE>wg9JO=sFKHTHJLcvJU zK&7Cz%elWc%H-G-c=ya36uA5-ZJLx$W2o^Ewew9=zgir=VA$;pk;*bv-h-#=0c(i| zL$0*?o>`y^CqH+dfS;p|j~YPyix%5~;z4LlfP9de^lfM?#_X_7VR{Joa3my?juYTu z{A&Cw0y6{;%;5eLK%)LJtgmeS0jqHC%h?{;x~v0bvLhdwWY8Pxvj~!_)h7u;A=tB=^Pv)_nK|z-BWYfy}RpO5Y;enswSK z*MDk7oBGtFPB=|~^68e31o>B^y1uiMkv|?yuM+T!Qgh<`x1m5AsZ_J|d zJ*H_m9(k%uQJedYO`P-|tUCWD`0j%C0iaO%mhXnpl=rfnrKQEQ3vkciNO zsmd{h7eXtjmcQ|b%ho}f&p|TPy5tO8icUxXBDpR0ux4Uv5Ef~EB)b(J?X>W-eSE8# zDei(ARQ%2Bu{w+Hr2=$V7rx4CypFssJf0Ey-ao4Z$_TLj6ExUEh!*;_AZ8fP)z+@s zw}z+iXR<)&)&kj1{MjhKK)meQN_ynMl%21B@#P99UJ7rqF`Lv3cy&EwITxk};pV6L zi%@peUhiT+jp%;}0Q>wErRLK%8V{nnukTV(_-d;gu(q$+bY|uVbl3|>X;zG*80{~c z&Vot{rT3hV&1B^1!S{aeu&Op zX4`mPe2%o7m@fKX9K%#W6CxL(u!f>)KrUZzVLpamQ-idoPtLaEf%!r2m3+VZP3^E~ z=u&~=&t>FP&d8D4&6dfc*2#s~*)t*5uzbCa>$(3gvDW_TS)w_*NHS#Vp+K6)GR^=4 z4p&pXG%mGA29Ke|N-U12eK%F+yPCym*eTjx0ZZ=xH?}WLqhg(b19SNVy>l?5G}m== zBCoya;O1`)fwncs%zRN3V*8o+LIY0MhfV8Q+YN=d%Pb5ry?@v#U~9KQ6;9*Aw{HVR zHaQzwrW_De5CWQw>wf{3Mmg5ZkSxFccXs})y~#r!`}#Bu(AF0S>3&*F*xFNS2sMTh zKzwdaH>pGl9)dT|(6>8iT;c)HST01dwSfw{3VC>vJ9V@`*i()Ki>1t;7B<8K@=By< zM?e8iKDySNc?`k>zhsvN%1E#+zKe3|v*7D(s>5*^;bDNtBDu-_M?N=Nh37(zK zxN8B5KX&o}jKM7%u>?iiuIVhI@$&jAVA|tSS1wGx;}{O2IQQvR!cpUOGpHN+n#X&# zf=8{A2cMfx!_FrCriJw$hf)yzFmM9k!qlpJZry@+7B zkbL2nKkJdgwK@4c$7gll^TY|CzW`G)UjSVMIvBa$Mw%Ivjb+nhkysn&vcAz-PDb@O z4)1mgS{fNtQXis#vH@Q!$6xDi+N}VzFzXsxtL<&0uxC-9Mh=QcMy9kmKobn4lg?v{ zNOaie$6&1n{cBp|S$%^0-&4-A`U*^>*f$lxF#Dg6jD|+WvJ-7*GN0UbUizg;lXElX z5i~|=ZN+jlM*lP{<>Hj?FAQ?x=O9*zHqzEPRtRfl)DKn;b_XjY(fq{2ZgxdW3|VT~ zciuwqWB~(E`dk0NAdRo}pK?^!)hq$A=W|<2Vm6t`{PdCn_K+CFcXLJ=P;=p{qm8-e zRCNmd8ed_68^As%uu43hdOYsYeGha_K!kdorA$Ab32S}^!Hxz8pBLZZ5R0!KHf4>v z-mm|HBqPo$asbGwfbQj|m%eU~OiEMWfxUbNd0E^LAmmwBlaCfY{OGlK#(i{9vS9Cs zjluvVfT~sC)^q2vu%nLA0S>mGI7IyHe=@CVWc2wgvU{HRo)9rML*nHy#i-JDf}YKI z>1&cc{ei4>8R?usXb3rkFZQC402k+Ti0iqqj}J28z8?larZr&X=`rLcw@pmyk;~d& zNL7Zmf(LD-+HkyX{IFx0Y9vPgD(pSZ&ANs_&_eXrrSBmp2iMB4{+NW61T}(NckjV; z%%JU%Ka2ge+Ndy-$#OB!2UMM?8>4Y{es*7*Dbs`6ki1BF3v1(~CloLwJ7i{;Q6RVR zZ#BsYU#}|^WYz`zH=@UZqDTX!ljvqU0JZdPri%UwAWBDZK>+-#-FudDH0AQyXLd#? zGpj)c=f(z9VM8PRfZtbH9?a!}K1rQVF4Z1ZO$lZ2=y1Z-@LB83g}PQ%xN@BGPAeaPJxAe*;XyqSkA)8hj8VHaa;_hq5qm z8{UHUkL)Rc2OTHSy1EJ2*QJ~-_7$X;`lCVTtwgrp#>xw|LD3)VXuY4zFPJOK_p=$+ ztSSM$rV^WMboi`i{h;`2Q@z4^k&Ub678rDg)M#jOpb%;*EZU)c(EUZWPdC z)MghQ-1`+lHrlb@xtH~Z;?b->*tUoVM17=E~x$3$7kHvSKJj2=U5*1 z$8ph{+r^S2aq-nrvE|@Vcqq;LmuzT$k^7!q z1OS+q5)ZC=)(>0tPd{kIR_tIs218Chh8b~`Wa&3uHC-fdZT|&`+H!6Ut9}FRpdh;_ zQx2Q5PGOxJIUf$BL~txfn&-Rkc{y%(9eP%E;M7I~(}9}uX4U&45)dt^T~D70PuGFL z{<{mnZ$fdCU;ivw+d6n8*0~N=3z{w&p+%a%>}nx|Rm2MFmgmAUrJ9vCZU7W0 zIv5e_kS=kywtbNgw8EJ68c-5-de`Yh!J@x|Ty>twJT?aes89lW9+|E~aD@w%&th$w zQJUM>ewh0FkWuO2gpDr84+ReZJc?1@y*b+qf7EWi%*20y@VzuSEL?dCJq?A1P}EkI zuIEOc;twz@5V>!P*_GGPs!Y=vri*h`w?l|KEbW2bQ#2TrHpjzZ~tP;rOHK@)QDG25RoozY>Lj)7rVx-M#D5c;TxlP(` ze!1jwHdpKo9grGROy^*T+=Gy)>mCI%lc|ntJtcViJ+>!!*dPj^iUY-FlUr)a$$*ii zrR_6dx0eIBfRL|ltPTYLjux?X4+{fYgjg6WIEIY$o;4Ia7{f-qea_=V2)lt2bdY5~ zN6-K@i{Tywk2XI8Bq!r(I#eoMr^|HpK3@HU-6Wm$rmjuxxr$qUO;-GkGai=qZry{Q zjy8Qqz!@!!Zl`VSGTeq$zXUUGHfsT@5;OhbW=7MnC@2xw(pWCLNI)g%^>T-~ghTa0 zGeIlS`TVj9@E*j?ocSPSfG(hYnAazi3kZ)E8G7!_sAv!{4guhF?+@=ltx=LR4w(2| zl(|5Dd#aBtzulOWuRYA=^K+niq-DoSOr5XR4UbLzFaS@%RDY3X9z}2o9(JdW0@u8> zL{p4&U&Mg@zRn(F)oQe?v2Cyuw)+O6){g8vx;NzA*RUG(;i6X$g5ET z*qP`V>%tDjiU<1TcSTyZhXXsFIKFvb0h6;$0f+C(sy0AL`+ z{^%o`+Ijzpzv7hOvE2K}^|g`nqxB_zyE(X!U+rrEJTJO|KC`M{9|jAzg_ z9()7D#A60OEgPC^$=udrpvP^h5P*vTcnZeZK}tPO3Ngy6={j(K;Nxqw|E{?>IUhKi zcO!cWv2J#t!$CPro$9Lr)X<$PDv=(D;1Y$<&5c(W#ef%(-UV}|wEm!1xjoKkWx4>LWP>Sw7z{4q;sn^@o-Tco@k~)3Ey7*Ih!|Q6D4k4dm zLl5UkLP`P_w>GSUj1b%F|e^NioKbuQ!}I8I=@XBLj0 zs|OHYaTy|%wu5{%5#0vRayr=Ca`Up30C=Qpgo(4m@=3sghiWtgy1GCM1B02=APW+= z{ua<|7Tv}2%ZF;b3lh-k#~>IW8sx_t#;R3Qsor4asmX(pW(k5%M3Cy1j%1Ha!Z6Up z44_F~KSu#@u0*Qq7#u*8LXxat9UP03^J6%If8&fgt#$m3f%rPA%&$0L7joR z@3OkfXn@c`Oud1`Nv%MIn_Vju3SNia)%hcXX}@ReNS$$v#Cc1&Zwj|&lRoO8C#vnS(1(J@W%D7^j!^(9u{4n zPXHzR?rpz(s4sCT1c`WgbiKP>VbLz}Nc47u0vC?&cEj;O8@b&IYE*A<0vmsA=%1z> zt;*hIntcirbxi6CDi!iY7twiu|Df;?0k&%Gr}G_KF>u2aD|n1KlB<)Caaf*MfY^TBIXaGS*Jm3`~L zYDI4nZ{~8UuilKuEGGQ;beWTl^=V@AOUY*`&r))pl$4b@hIJNmF{ap>T^F0XB=q=N z72$1DcN8g>?_G+FjAz(Sx;(By=J@-g!H>#Qhvy@Ok>E4U1033=G@(>4dFq&$u`aef z0d8wE1DmU|F<8ApnWEz7MGf*J%E}QS1(0iCa;c}5S2;bFL`uTZN6WGW`(jY9-7^rZ zr}!y0yZ5WCACssxrWUPc7}>9~#w8$SM!*#q54Gzp5?{%jh-6b}d!8V{9)E6~mo5RZ z{AK%`jDlil=5lIgHF4%5ThDV>yyyF1bPFQ&{%F)XpQDbXUZt5i&r_Bw24de-m94Tj z{&>b1o%r4+Y>nQ+;I13kTVv`#-F9Q<&tUxZn&p&1_CA43Nhv}Cvdfy4Wz8%rc zEhK~_(f3yB6FM)vnwYt6P>z@7!8z6u7XWj1IxHiPdV2z7mVX8sy04m;&}~RKF1)p^ z-s7M1*bA_KlhXMyy&9#~X{=mazZZIsN~kaZL}-=IdezYAXwKW`E#E0zlv8Jv8Romc zz1levFq7X&E@teZa-5JR`BtMJ9u{V`@S?Eap4ehbG#|hU@{L?@K?(3Y`H1tZKl`zT zQ|EEuYd2(=O&}SIC6#U1~yAp1*=+7AwkeRZ#|+r^yfZH zp=*y~HmlXfCd^sH)<9>m7hb z?DUe4hnB7G6!!QkE{F@%AhmZr?3kC!S`L1Ht?^Gj|0yBS#_AXrW23$x&30OOXNYcx z)spW4&ieSiX?Mv^v! zGbBrcikuHs0ZgYzZPaZahh* zvU2o}-i0Z00vRJs9+KxO&yTD?Yd}kzYwqm)ZszK!>aecqyzcDkxG|?rl33j z5#L!QlP=`n#rc>ich%!wHbNnbp^8r@VURgXxid~r{~$Wbrf;q~B8=z=KPTG?sAr(@ z^Sa)_0QX`b^uU9_QKg4Tu6B9w*nDwZ?~VQM+4IJrpr8X1-(8Zksp}Iemz6(HJKq97 z?P_q;)p7`bPO-~>$I-{Eg*oeNtK=>f(tGJ-!K3F6&r*A_pJhsO zoQnH1JnVxtBjy_6(7|LvgaozYazTJJn%h?2K1!_9M^PxL~+hgj? zT^%o2(8O8{41S`GfYO{ADJ&NtzFJ%5}BsMS-RCD}G?Z0tii-#xms%j=6&7a#Mt z5%Yl2F+2=kqAS@Kwvip)QKKg8((lp{0b0n?5xq zVPL|psYv5xb~rgV17##gui=s9e}BG&84-nm+pYB*v>r4j-_GrG5Be}?;${|-&V#RS+31E8rQ$yx)AV)z0MA~uh0?qY?~&bLQA9!$MjOUk$?dWu3k6N2loym$@ywVwZ&>BRzI~ls;U2Na3 zWPpJ=V(ICrwOzj-;pypF0dfoUXhL`2xC}2-1s+-?m8gDLC$5mrt*Ei)`paCcIX3a` zt-w-~&r@PghL4G6e2%|2LhaWGUGxY0-}+=O^J2GqtpEP)WH~Hg=vgy}V$S?-Q&T*K zUrAB*qd^a0g181lh3KWV?R_p=(7seNpHBM*q!dFI@ zam8@CdBPaS$&%};z#NbTN`i=a~5}fm61)C0})*R{V%XIdBB{3ZYA=>&fQ&O=A@1L zK)>>UiqJi={|O9%I+`ykZ?2^$i5Y* z=DCbpyKscy>V4S&4~z?wX2C@;yOkw+I{q#aY$FBNtRc1Z$NvY$niNKGdVjk^t6+B4 z@bXaq8r66N)?w|f12T*=KB2XLm+m31fY_pX@Lorl9kL~JY- z(LhFvJHJ~n>5_G*N{|}|r$BUd^%l9(9lK=;DRH+?juHP;A7ZSlpk%TW4GrJX3V~OkSmRc1ktuwBVirGm9n* zIzdMq@0G*_xP9{-9Sm$3y^A;mncb+ImZuO)E#;S=<&>_sFBW)5g$0^s<3i8;3ycwk zQBlh^p%T<=5`aUW6*QeO3SM9A1FCDJ93ifks{Ctzp*Dg-<>H5OW0927VjfQtv!G~8 ztd5x~!50Mma%lH!o87)xCet1#$yt-OkC*4vWB3+%3Pa*@k}U~WzouSyVa_kws*pvH zP<~`tCS2P%+;8~4FyllzCF1W%oZOu z?YYi$`Ge}hUx>%~t(vmHLnV&72kc3SvDwDr?6dZJR$bf}%o~sOkW3b{-U8gG_#5a2 zovQT(`W8I4ExMe`wuKg<++$(xNS#pxN{xg?=TCW`PyxQsiAcO`5FOS-8@T5f%=_qW z$cMF;JxG}rD;4@IHkxbQ-mN$%bVn6$->l=}ff=i=$@I?A{B`Bj+{lCocfF&+g7rUC zbpxgpi&uWz z1obJJRxVc;9+#(}*U{s3S5#BxSXr9^|Fe1c`9pvyT!wGwuL&kAgw4 zcb)4GMS0N9R{VD6xB{|9$m#sM$5?cBCm_WtTbciBMnEBblfPsQ z7rpw~y3CAkt-OygSwzin9}l?qqMEOi%)n9tXd=Bx^oszIb4m7T|{C1@|7!%1Y5U(@MckCTwUqM*NhJmS5KvF`Y=FGB|#GVzNWj}rQ#nJLY!PD7N?T& zvbW5)(uwdaBb7yZP}P=O-iX2j$=IGQq-4Zt(?U6>UU7eESgra&y$<8of#kw&c&MO) zh~5_Uu8ua5Wvzq;bW{yA@=}=MW8T~U^BkWvM_HoRRIg^?@akaBVVv)2oacTxcMI2x zs80f;Oe?cCUB6vq)V=$X_j;#I8)t;wClkS<&E6vCW1>Zy++WpnX#?N+fn6y3Gb69>6-R!_c&)u?cgr4=X1Hz=%h(>gcK@ko zV9#Nf9ggBG8~bsu%~%CIg+C^2zGI(ajS!_jI4YW@kT0X1_PdJLv__3y{SURkF}Rne zixCEnv%X#*-|`br{m(Dkn&C+6q|7ih=pLnyx9l)ikq&?3J^V6LA~O&V zY?8d~EeQf!K-2!``k+IYPJ3r+jge`0e#x&TBms-1)q5GCI=02G3faUMhem%GaiB@OU~eWF=~V7Z1G3X>}Pnl`|~WuAI0{VRjkp= ze5dRsxvOg_3cnt(iqEqGSx@!JCCtwgKG;P*QVY5i`DDJVrpt+@;Xqtbwl-t#;H0`e zuS&UGrgG1T*pG9I=(}Ux%lw~f2QDUlmwVTlx4Qcb3Tvkq1%#qEmIS+7$bD?k43CP= z`iHz-k$qB6af<8xyj<7F^Zb<)t$xk2Q`SQBSKRA6%bPXaViG{y zk8m)4{`l%2#^phd@bIr+w-m@G)6Oa!b?GK@^qqu<=yfjz%@CDEI{7pR1b%mS;5xtz zM|D!w@xNs&apME}dS`wNC@r?Ku8|z0T!nXba*Tx*qYleoO~)#qj_&!ZdS0uK)79_D zyBil*W6L)ME+eHd{~6uhvLz6C)4*}7Eoa9|KNq9IX3!y=0{=^tC`TASR<@| zV81*R*r~7pHK!N*eOB)7-|#=%i>|4(eN22qrXob1qT-nKv{KW6P)7TrD8BeD!(gKVqWxeMx#SF;X*9{pctK^N=B za~3D~>?6t{=R-E&(gz zoxO%SIaeV8a#v#HgQlcqof>%6L(53zN%rAh+fdCie^aGsMcbHW>BxeG?Uh=jaTvPQ zO_%)>UwG*E@4E_=I?HEwTgG3)lPif+>KElZUewFggw<|5B68hg=^FMJ^TAVFR1ai1 z2~|wzv1x5G)<~UQS2e&`BUIHKjF|s@Uf6`(-F_q3dFNWEcCGGUZy?~(#U*jNne&*dqFnW+N>OH?h0t2O`88{Oe*yL+v}Ov8A$ z5m()p1nZy4@}IGDygSI3Ho?)__iY`~l9S;Z+3vwTUFWW`jjUZovgK-`qN0$D!NJSh z8G}8F5~86Vbx?KQ6W{fT+OHa5W@>k&*S6q}z6jQ$v5|6g(eqrAG;G?99u1n)(#~y{ zj!!L8tUoPj4LuV(9Coh6cC9IkMLNNRX1soM^U4*h_}O#^FC)+oqM^-TsN4zW#q?W) zPK8`fZHE`Q--uoEI4y;zD~K*)DrT!SANPttMoSU%t0es{>6hhm8}9xJmRYa@Nx z&SmiGU$e^-dGx0uj!vwPCX74o;ShR@qSv@>EpQ$qCgY!qvf*@plxil$#>UWtZU5b~ z?cB?riq4AFk|{XOigoJUzEYat&FSSGF3VC=A6?#zo17X(r66=A4`qPw9Yw0B-?ucJ0)*j?Qmiqg3f%JL>*RcASw*eEUE!11H79cu4xaq=mh^ z$3UQZ0pF6uw?E;mZSRCz#o!sMmg6|12Zf{|(Ia@%x!wFo{`$RpZkKbA_lKVzg%>=+d}&XWpxAe*@zP9L83N}_RlJ&;82&+dG?>dS{UgobTv za1E3S2oYyFc0gm2H;nIFg!@MqoN z*Gr@8B*XaIc$^^N_darGxA1JO8sL5&NSCx4ViZGPU*Z{;xBT`>Dwr?j4pkS^ypZ}5 z`_7b>E>{5I8EV9}qrjgj_wXRy!p=v=AjEU{poNwi&fgkd;NGQ)f(4+U!xb(!~%#{u@si>Tgs3n5}f2WWQnTdZ<3N8olLK))X_r@Fuo7jPR^tv{I!Y4$fo9 zr^$N_;YE2+YA*GvPV8k_gJ~{`McoATSmG?U`D&qi@-f*(hvr|%%q@?$o zBHZ1LRKa`99hFsw8`|TZn51bE(%v(k@~hVB&5R#)J5=_%F1z8#K-X@9rTL>&5Yk-o z{Xv7G$vqHsGl{zo#(tnHP}46^Q*dG}CpIQ#n#>3gpAavJr~meD%1dlP>C1Z?>PF@a zjNIg?4XvqJ*=vJu_IKMft*LHT5gux!Sw$oYxoL^iiMK4!AdCI)(D_AOOD1JT3{&}) ztl#qR>?eWsUjDoHpJ7UV$ohd~lA?xCG-t?cRb#~j!(E}uNO~hw_cNNl;*Acp4F0g4 zZ(;xI!hVTtpZPo8mg)&6`qgW~Rl0Mdq19EW)IUiQvHAjQ%5)hpiefzS_+dB1hY%EUt1yZ8oavmFhwS%lijf_H>Qi+b=zf?%%i~ z=DhfCM`x$f9fytr@``A&?W(3~d{>{Ew(}8P~Z!N^m7b=p^-NP{`BsFImE1`KLNT=ds zobIy^@}+)x%(kJCw_#oJ??a19sdf4ymD-=JETNa1c(rQe?KDC>_42%ie?=eCN7kq0 zWZ z%BxS<@25Q^8DxVTT{mOoW6B&kWmQ#cE35pypAKwh^J!-&+E@@oUGh31HB;IQ@%O50R~`82tM&R>oe zk*VgpLlHEW>ldmH+2vqM8kp6~i?bzWzP<(^%o*jopDV^Oo;@Y~;JC2*sfnG2M^hHL zt!kcP?^v*Hi{YYPv!xyPWnol`hv|AGO^Pq0Lc-~T(|T^8!IpzB776H{aAz%Qx{dAAxy{6t~qVLJHA%DJk4Xw z)DlZsvas9^?c1XE-P(!|mH{%K`f9>15@69%K@O|DU9@Py)GHY*^YqA9>RX%Xx_ezT zj%wSC8cW+*%<}HDI}5qc``^f?Wb7krOec+x>2rk82BQlxQc(=6lxj+(%7+t4G5RTh zS)=Q1E$dt*+VZsiZ1z;t86$)$7=2==jjF62kRFe*{ygvVD%!Me7S9LoaUV<3-xG04 z8~m3!lJK**bZzH8FUj{U>k_UbyVC5u^0j_4X*1sK%<1VN+6zt<1KERcXsepi_>lzs zhPVUtZt>IV%SxqvWvFsr~sAd`gi3S}%@<1Hg1nu~xi=*#6H=L)9DQVE?JCQZ)fj)hZ~n%^T-zuV@_NOi+f zgW80(jH(3rdt+$%69(mqq((A3JGhZ=+G?3A?$u91%o! z<(lm&V^BAPI=jKWoXk(px-xG2ilJ&33R!u!N?CGl{8>{4<%k3w-4PTnwPrc^!=uE8$(`8w6x%K%z+zl3RK>M{W-2E z8+y{PAXb@GH|gZ@kvEr9PJr_ljHwj^!A`G^71j+C;2}?|fgM!k_t-){1vMN@;1ru~< zovO?(tk5SfOs~4o3JC;bI@}u)o2v_pNuK<*1eG!K5lLGWD*1czN=Cg`IJODHdR*(r z5-UO(-F`tV{AZ*v3s%ULnf_Yp`o3nO-_!cqO+&};`&IU?d3^8Ma{W`CR*c0$7K8be zj@&ubi^Al|NETau&sO_&J{*^1HYULzZ;ZVd<4w^ON*bN0vKjsTyNih|?}yYvcSjIy zXBdK*>+$rAy#6l~u~W20-JGMCUIx1}ccvsp@ti76sj^N`tVnwQWiD`*!4}mV=7-axEHe;&tlD9#ar zo@<*&R&$B(&#CTogc=DYo~MiJ)8(hTo%3cy5L1l+}E3A!Dd7{l3$^YalKz z2Bpm1fAR6->1g33He+m~_NMsu>7J~COByCv562iqlSB1IzRWX;;W+G7-e?Ai)RMYt zeCNlhEBfTUV&Y;2YP~xvQv_i+L-^_ynwJJ49>Z@qEz^8;EoI=NYlA{NUj24@LOTFe z`wjI*=xvj5C8g(7)_{uLWM?Wj^Kzc{KQf&jf#}A_4$WKvo2j2FoPrr7f>{~v!%J*T z7GY#mir<#f?|2RkCCoY9dH0cu;(blAfPF?~3JteW@ja!u{Gy^z@$0HKhz~5uc|RUm z{E-y({+Z2RsJ5is&H13S;^T@IODsbUZ=Pt*6;z?M#Nf--Rya_&t0vmBiJN9fA#)QqiaN zzai;zv!v?f1cbD z_GEi~%?UI4bD{IAGPgZ{6fzWdxhy%WKou7$)WY7r=SFTaW*DfE{+dn;1lDkCA`x(R)m=z6xy9P6_99>|@kn2qnRtu%&jni6V z?Huda2v_j1Zq0DBtNh3rGCE|qIbrXm5pO6xpY8YRg(>=nvenbx+Kj710_kr&Gea1?)VsG*If7l_MgL^?NeL~jYa}o!BQguD#W-PU9U;QXfB5ZAS48Q#m8Pwp4=2p( za}6Biud&}G>@mRvi2epf_Cs2CjAvQHxJ|*L={0y)CGSMMuv>PsLnDV;W4HMm>{dnK zbz?26I4d1bt9{QG{(2gROxQP7b14-+FZOo?5ozy8sx{(zZe@k?AfK368XWYD^Rl)(}^!2C6>bQ_7Uev4ZRYy zvm-D`6G{|I$&=JKP)C*Rwm$8a_l{E4RD}7=!hA7hjiO|*3aCS>az0dB@yH;RV(2an zk3l{;PwkV0oiM=2RG~3h7179|f&KH5;f*P);oQ=AkI=-+LL5(IKap^*-_xG#CxaI) zsC8ESJ9CH?;Red|CMCQz672aES+ZzDj})j{P?^0g&E+WaGbg4~Ms9uP|+DgdX zFT_5{VJTMHOAbszTp#xaAf%9m`Mh%6t+F(J?eDrHS2IIL#>UunxiGuLDR9LetKZ}O z8yc&IsbmI*27>kn!2juVeXrn8OEGL`vM00TI)v%0YE8&aDUa#>Hf)adY7EPEL6@Ng z(FSd{8oefnY9)>AES}tI+t#@Z)Wy1LP<}UZ5SvJN##-&GJZ;X#g!ySyQJc0cX-`-2 zMKM|EOJ8pv!L4!3l-YT!+%VJ`)2s5RTn}V9Nf)vmSNC3k#kUal5KZ;*sT$g$D(gfP zW9e}9i}H$Q>JKoJ$OWDLt_Sp?os!IKZr|n2jw%&ci@M)eX>V+Rwf~lj&^I>HAowVj z$I_l7vV@bATQ!#xeCVu~en<&Qk{&klVn9pkAS2|XklYL{?U3(WMEw||SKE)s60{k! zTIdL0VxnPKoq~@H(ape1F3wgZ|IXg*BCTr-eCLtnwCB`Rc5yaibF2Av%!dtUKKRom zHaT?ky7y!GiEnehh91*ydPrAJmtDREJUo!~rR~JkwAFfC_W|5+u4SQ5bPXF&D(uTHSKlf>uc7MmgDHhOpBZb#3$5FowfI! zM|^;zCf}88_ICDOiZqgUqc5+@NXx=>E^j%BzR8XP+#Elac(yi6?GcNtEJOFc8ptTn z_p2ic#W;i!d@ne?I@Cmrsy}Abs7Q7ODFkO1Ql{{@7b~`kW}654;kUaB>yil1sL`(G z<;(KzpI;fWAN|v;ykKkFsv}r@q}g+TxLL3!n(0udArToU=VXM%Y7PG%;=j9;j_uwO05cZSq=ZdqH7d16} zx%E6Ir~YKZcVe2`4Vf@{K!y?nU(LdJCMy+L2!kO|<*(SVV+R&>(6ICT27{(eIF?Tj z7OSSl#%)bk6J+!){!6as*LBI|>w@8$T+2~;JgHO{AC7P=%d2pm1=77Z6wUC{$n$BJ zx-x>sB;?=L_XE?AwDzV1?JI=F_|nVix_^(X9ZBOO10!I7z%-zmH>U-8L#Otek0V$y zHO`VXV)JbFXi<@UHi=9Tp5!8ya&3~$3`dhSZhaAvzLDXb6b3Dt|yca2TzEx)7p+|n|yw08bV!xFbc6kl%T zquBLJNR!|=zHAs^A!!VG z^R>_Ro$3<(!^b?=)Dkbx9ary>QDA^mS7SY~YlEk*`EH&?lFE8B#Z`b|*C*N$nJt{H zy5#u98n*co@$Csg7)VG znj_ob%sX`-ebcH1HeG#sxbkZJ>{O-kA4PRhEm8M}OyeyMx!cRi687T~OtE(ChmFR5 zB`q$S28%RGWqAO>PfhxL5jL3UJAnE%d!He*{h?mvbF`6931q?OI-_)$Mb&{bTB&c4 zv}7p7_UKE75OuxpzXePdCEVO!-Yy(0F1+7bHNU8kmHmnAm+Tv_R*@S62eCc0i^x(o z_|d1EgjU+dbmOxnV{H)OlDoXo9?ioeyzI?|JY|yd6_F?fDy6fTpeyYiF_Gb1dCdpx z+w>QC`QY$=Y*wU$%^N!W#~*qqBa@l)^;#tk#QVG6?%`vT0-S>0g%_ML2U_=QM?c3T zrutk7&XlltPizJC(G6zq9KF93LD_rK{amC%?Ia?r$_9-EiQTbJH@UhiT0*1B?^hYl zZXHqwBO8^ZC*udj&4=oPPN%cCCfTQ-vR1Sefh!hF+Z=7~q46;TH(!X`bXWnSNNB(u zOP&t%o_<*#NE_%Eu`ouwaF#5SV39bC`tamc?BOk=B3VtTaEfpNGBi@-fyi0Kt(JsY zAy-v6bx(9*u>f(sK;|#?wD=yujX0Z$$QxmbzF6g}#nChBpR_%?|J_DUeopN!tSo)n zc>S{m$|XA1Ia>6GE0|T>ia7)@u-B{>HsSvDT|TTz-rTfr*iFHW@SgAR7Bytaj@2w} zT9w(~c=6~@X&5&du13DDZQ)=x%cV&+)I=WH%({|#h}deH$d7w+--xabs}B%=-_qOY zT{gNBy($fVLY{vigG2qxp0B)??3@-32)&|A{TQ52%YeznMtRot)rUAe1Detdkz74^ zuKmLoOH=DM4N^3q1Td)M_E&{xH$JrwTd~U`GUco%F45e$8dnltmJn3aa$V=*qbngx z9H`wbc>*hFOED;84A4ZmBu24w0Fsdl>F~Gxy7gzgzpugu--*h$MPUo8C*(YXY3E02>mL~G2j|;EV*%`@X`+qJ!yWCE z#F~XMa?so5;C0ZXa~u`#Z4Hu{B8FJWXLAkorVbh%mb{Jd6e68Yu0;5c+68b7AgblO z77>RRNQE=>P1bNWDf#;$PE%(6j#O4;hL%KYZoY;O>^DrDG*drVB)6r4RX`0*mG?0R zRVH)34ac-IIT5Nf?AC%23;8uQI+kgOY9r5WIVNd813#}n@A-1+KZJ-^+X-Hcyfikn zxwZDknN*G8&!x06y%N3(`Ue@FYiMozAx$acv-{Om-PKiV-&KU)GF}RpwKhR%fU9onaFEV+iOaBGGw2ML{>Tt} zebcrics{nRxD5L|Sf)j5$gODFZQ9Tf`R9AjUZ?*_Ct)N{D#xW?RDp@fcZaCYFs-p_ z$G6GATE63zRL(ysBr~4MFGQ|8FlyZ6{zV)9vxq1O{GF@JAS-rA37Xh*6(2wR$ARZ% zTmq_vN}N)Q5mKhgAyw64-TAA?(XFIJd+v@~N2z5B{)G5yhsl;pM1zb2ZIB5?dN1Qw zOLUA1wQO{TGElAGe-}fA!5~Ym!NkM_C9HoQ*7{<;uK4UsY1}gUEz0W_GU;qt8}6Dl z5j4GB%aq?u>2~^NE`{)dw6NsNw&#w?kek*+(X~7(l4v zd@#qAp4+C&7&Fz870(}1r#t_~=y@eZ-%@#1x-d8wF0)HO7GG|_o7)MFa3N#2>c);# z5bqOJfiCinMr+L;;TMsW(Na*PKRgJTlC}krDw zbUf#Y#I3iTDkP~hn?6$#Th{74T)&4E91PK#L)?Yxjzws|B^upjb@rYFc{m^H)=%M@cActuF+L%R2 ztj?Y*dgEaAIp!as%K^E~`W0Y?SB~n9CS9JS;yBm0Vg|9GjFpC4FWaW9LEFI_m9*E( zKLB-<4a!nUzDlGudRVyn^}VH8*kii9y@9S*mLWPa+pC~-pqWXSGRNIOfBNVEp?_t5 zTI0St*<{#@(D04lmjC=;Er8oVQr>8h&U#@{>9EhtE;HoS4H59`f(|nhpcm!rTl_KJ zYtPE7-yJ>$np=Tau^{qT)vi*eWM+QFOKB)TT!N)uY_e`D7yH#_h)_*G-Zgd zi@1=NnajVFNEycA(k;hC@gs`~(?SUMGhP!blcK`zq$siNY!T)?0<*GfPa)O^mk3jogu@1#T@Q zv*Ozov-xbJ(NX7Lc;_&(KdFM z{0o+C@%~GWeR0@|>wY?vSyJ!lO5u6cBKD5|*u>h5kEJ@x7I@qnEDf5B-Ij}O&nd~t zp$;XULI0EErjg;BO22Ra3rOLho=cY%RlAvb zT`K95Z`JnGh149XuRQwgvis`B?DWq39dqHm-3Fs6+dItOR^My+x-BXI%sY*|pCq0ii`P>;X1w$oeSd()(Zf~2`~mow<+tiWOo%oAl&qfkk8nEOw=sQhN2XCg zQWXWc>sZm!hyr-M)R-RA6gp4e{_H)0YQN$sOhDlb3O7qOl6MD&zBZnaq_~`k+Fliy z;u~0U#^P}3v(w`$p96cSlwqO~QAf!rlHSttbjkS#c1nHyc$7pi+I?J>_eHnQ1~@Pq z8Vol!HXwBcPB&u%s5>47zCqz`zqlG`4jKhcUcBg)@vU+U<5g^;hMp075i1pNOsQrzUy zwi+$ef^a+}61gZs$-tZrZuv?~>`17W_HJaZUB81kIw#yMcP<5AGv*xw!(Meqejs3AFs)Pa6nv@8C+AV;>A21Awhu zC=DFsZ2tIyrdpUaeFb1w5!(WlKkP2HS79np>Av0+U>e`w9Opp0ji$ma17~CY%#vgcGT!!Sdm~e5osI%`<@+a{5FjW73x20h?;o%^eaZN#9q1Oc^`~{1ki&&Wymb zB#kBV!XD{EL3n6Ih|HE`JHWuR$|mQ(Q1xm^hl}`BB=_0fxZT%}ZkOCEyG#{pbWfwGZmfysZd)KkOtX zZ|Kc3_#Z$NfH5A&58Hc{c6Pu9U7_#&^1`J>;gW)DHtsS5G~&rGpym-QZz%4-`aXh3 zs0#{-l``>ee!+Xa0i5Nq^xhX`o4&Eoig1J1JQ@8t9%SU@R|g6+{{DXeTLD0HdZ-6% zoK3%gkL83&4Xko@&9AC?FeE3f^Z%alO53}7HDnq?yVTm+g&bRk2c)WFdR<=3S zSu71+1p5+8`A0k-bXAo{!qVZ;V`MryJMbsb0{}-7f@miO=Or*Gay7t)=p>&3vx3^> z13q_cb8dKh)pUI51gi<=LtZgf_?dV0D6hKQ{#rmT#0+$KTSBcf^6F}HW8hygrndt= zLgf&u{houv?E3-BP_KMGKcH`2 z8h%`z0yb>G%lok9i;zGw!2xE6a83ei{Z~{^$iIyhzJ7>ZQ%D;cVarm7^-@4{f0nvZ z;BbCtW3nnO9NMCl|7N_q)9@XC^M~Bma3T{`h=d`Vo{oM{47T`^IG6jwk%LL@Vf1@R#v0KBQ05$FQ$*n4xETg>UtMTU#b$xutY z6);scXr(&W)vEu!kMePc72tqUliUe&{=xYF#{mt6w#Sdons0#U83ubqYrLyp1T29K zru1}2GL7QGe{WUp8UGcZI$0k~;tWOwi2ibslswwf1hal)28(xr)C)CFW7trA5CC?1 zlD#7sWkOjF91*I_L+5}NV{dR!2)xE z6mvG)Gc}L+m=c?_Vl*%J7>pWRl)t2~x5qjF7PNv7)~gF`h-e`|jNEr1T`JSq{MR5Q z#^6g*eSC{38{D5au7ET6f8*kMmMRz84JYarwEo+ufFKl5oTAzeq%yaM$iPk&{Y$R1 z!yAt%GCS?u8%HE9c|A;pRz(04>J48Bt*czmnRYh(x&byCq(1dLn$emQghe4H?~O-) z&5+gIF+Ff#NP41WA#nu4;&&l&l;MIa9NZQM|B=N1LVcGae|rHuv~SncXrgXc%g$$6 z?uQ(*nWz^5O$cr0`_@2B>I9JgT`lJW;{w=CO0>#fkDN;TJ_+n3HRq<_hAm40ooQZQ zMwS{)o+hSx?dcjxKp(0y4~#y3Zy@z$hPnxG`pKXt3cm${kDNN@2TYp(JyExx8|gh8 zLWTWV{{y;@gWIMll}G)T9YvJ4X@>7oYS%>Q(=S zRW{4}FcmO*@&R=LKNfdvN(^d7Nc^&K_bDF2^sYeSqi`|QsWX}>;a0OX7ZL%Z9x>>G zjnxLAfraiRX8;XwL)z&0BJ66!YD*pS@W{^_f7dWx?t$T~bmKxER@(C!kl;&LKk?=>rj#Dv0i+ z|C&t+IIN?oq;tO3G-jG+{E{ac{0{Ajys6c}eCU~C&WHE^PFzIxgX-0_(n;LV_^(@r zvoJl#kk7{KN~rmG)E9R85#oIZfCmhI_oG{%iJ|uYMmZ1om?JAdnOgu(kvDZ|CpJgKL4rj3a6fWyVusi`w0`+gz-{QMVez-p zMr1vtic5GdfR`S1f7?4>S1A5C(N;tw{Yvsun3)m%48R`M_Ke)9-i0nstJ`hb+RE@D&5~CtfQ6V-dzL_dcOeKNKvA1)u`PaYYndzHN2gwqFHf0x( zI6F>km;LR`X z9;rJT9$A)9oJO-@4vHerZ+66^glKx8Te!gT2_5aE`b9Z+pg$>r1l_83_BOOLrfmtu;;uN|JV{1_L1u-#S{7u-SETj(- ze@4}ymUecMH}YHV5a^P*we^b-Di&>H<1_%x-wL)JK?G!Q}8=244d+9;zB7N=);U>tvVI?T}27x<EX z=ee|L2t_E@cmbwZMob2@pZ{!e;TE_44`t!AArAbRu~%C1)pY^l<^oWY52%KsuuYOa z`&P&M8x!SbAz=Lkz*2Q}b*Ymc(0NIHehJ5ZjC#3c^O3?==cv)yaAQ4eHfyfoFPekh z*ce5+t-C_uEVig@%>1iiuFHVrS9Qkb;#gn=i~M&fP8W|sf7Uo~QDDPH#Gu;<)*oc6 zuf1Yi|1|B`U#iGOIJM`!1#IimqO&NInCtU858T*3@VV?Jg&F|FBj&pL`9nwu=(#A$ zQk>bM3~G%;cZ^*4gFO#_xg_0rOSB`3RY8}dNEKC(s$4UnlJ}TBODH-vO7l$T+`z=# zeCex<1DEd6j`@!kq3*v36z!CLo(a{(7&k=sLpq(Axc?ZOz2?BIvMJN8L}ajU=ET8Q!d_wwY(~T6@b9@{@0#hns|wVlt5?8>L}Juk?#1g z@2c_}xrUMn%x;N1ZX!(1%JQlkH=M&*b*ZoXWHO6+DbJ)D@|b-W>0slU(cAsTN&0w9 zXJ%PzFVwk&15Fcq;6jg=7u*alvI=!Z)G&Tgb2tX{p8(I#QTmDnEGMJlm?Kp~uccTB zF{^T2(=e}iSaH#0`4uxY)gQ_9^OK{dA#hJA9U%8bd8t4iv`BQ^L;Ye5p^ahhUF6yO z#|c+~@JsxatgAS9N0&D2>ou%M z;)Zfnk}5&MAawwi9M@TInvsw5TQL5=Q|fXvkx3$SQd$})Sca6=FJCzw`s!yK`jwkq z1UC2`fa1-~0YVNl#mAd3H-D5+&sp@CD$zE7jvC*it zS7UG6Txu5jd3gp^ulyKLKQu&Qh4zo`mYPX;zjjU1qT<(R;l01IB)A;8>bYIZ-k^B% zM5gU%K0#R?)U-hKVNzS~s8#_N%qWoXud7b5yiL*8UHmE{at(KmWpSM!PnQ@l1N^`O zkZ)rVeAKXuk5cn{-E>wES&&r`NO2)O2Xrc}c5$SQOnYETNLhTN1=iHy<4hyl^G-`A^#&Lfik}s~i^qy}v#5M$i3w1qqNo)40QCL+~^%4eC#ctcqt_GZS`kxgt`)`qfs-uo{SaX*JC3IN-z6xsAqLeSs@Kkn_Ifo`4)R394M7dePgdAboo3V6Zf7? zcTZQ9QLhS5pE+)Ibx@AhFq;aoDofZ3kuC-&%vPrVVg3J=cNr z^_1G?#nqGyey?7_cJ2M*i@0&sx##KgM;9G#2q*+@Pnfe`TvVK%aY~s*QT$Moy_H(| ze7P%`-P7|Bn>%p5<~zMxr)#$7YmQGGF$d&3cD@S!fXNEf{^CQM4nvV^xk-D=!cDp$ z^C?4g?fCVphd1!2{zvcZk0(3?A4@z~r=A1B4g{peyDcB|qwp-}a;Gd!$4y0bc}ZYj za{>&4RUu+EPx`cAvvz?}@^lYH&!}wt>!HnK>@Qa<-Q&mHHpT@P2>{8bY^M0gcR)nxozNNf=%5ZPUfV>y{6MFId90)YYQ`*XoEENfpmgrMu zucbzaUxszq+|Bwglr`TI_c%tsO6R|u54hsTS1mquD+}_USXqw#wXffnH+1g0hg~&! zXO$kSYh#Wm+L)|fcQ{|bzya9sFo+E10QvML+Rl$7w9^{&noe2lhbPMrNzlPV(p(%j zu!3(T=UpAscNhg=c>&-|V|U-6qpK3NOT-AN*-W6V-?(Q?Jl=S0J?O^d;ko32y4;GA z&$t-LU&8beJF1*;C-uf`NdGT^dX+pSjjtZVPHj5keioj4wc6TV(q+``MEIKofi;!( z4|Bi-7HO9ZD@YSwPCK?yAQ!(V-HN_YdEcf4xJPAWCwWb1F8vy=v>p&D&Qd^;MXw(C zpOvOH-_tW%sgh8PcX?QwuOqBNjpr*0^gX(QreW+c=DZOkLa1rEUBa?TmGkO4Jh*)>3_07Smcl{0Og?pc)kD{Q$$e~ zKp2*qPH+?Zd*q=0^7UnEm?~5V+gv<0^gE-cY$iKN>KF&b8`myE-VO#0XdhEO=gANt zWr#u?Oy^}OM0OvTbr}A-zy4N$S6pqyy#(F*$JAU|zRc&5qQH~X&23Ye7%Oxwg(0q^ z#S>el258RQPorB?vsHIc_jxX=i50uvY@43L3uoL2JKhnTk60a@G77Jw-m&$xujP{m zYe;M0_|6`=#*WyDP8<1hPwBpdNkqk%_2JKNXKOv@#iTgD=KzenI16+91c7E24H2c3 zhTHvVsHSt28XS+T05=dM^MR}g$nR50?tN|ql^d(&oy@4gL3Pu^=~Os+e!pE0Rjx|@ zcz5xZLUgPS75a^;?hiP+q_>j94+MR)e#SGKN;Oku%C7LKs#pZDy^vJ z%J0cY2M&Am%#?lj4F#>eY2+^U&z})ce3~VF6fHdjRiVx&G&2f;E581^CWDfZ;NDJy zF^*EA0L^~PSpB*P#a`7^B>^cI;GPcX4j}|Uny7YIegc_e@o^7+7 zzXVlFU)VX;>-HEI^7$tVD(c3p%?{+mip;8z$q_p;UvraR>M*xu8s9wp{mhT22qdzC z`MH|--<7r8o_OZRaw_G_sa+MZTx-7tnBZ1Y4sS7~P^GeMAhqpL53e?Jfg0>Brjy^d zSal1gD{bVCUvPKvynO0))9#J{{}hO9Cu`IWW_-#hnI-Z;U5GVEcSulOaQU}Ndm(E9 zxv^feo`-2lgMq^oy43QCrekO+0Kr~sQb$iX4tZfW*DSJNA{$qN-|ufu7diMYFd&!W z^!NH4{4~oN358dJWu~2gv&c1>( z81y$8}xwMlAR5O-Gz$G7~L%EDob|_xE+i$io0Tn2eUscRVq%lq%kzcL`vHaKitYb zntZqLvwgS4X4>(_i;20Gba6W)&#B8_E6aJp{ZdI(-7{1%1bX+7DvlZ@>dkBk2Id+R z@aI*Mgx2`ej>1Zt&b-~+++J2bp$0%ZfXr(U8}6rD;vR5QUl{;my@AaNK;W4Gn))jr z*0AzP)8RH1R!4gK4!0ii-`kAMoZvnYV2<$3#8j*O;w`+J3~X725BdYb*v)^T>5;}Ja%rOnC+rHYs44r@&gaO%;<{tZ&6YijG=TxG9( ze8hvV3PgdMo)G88e(B;(cw!0)O6maO=C$7IkVo8SH8*c$cu;hnB;~zO2IqS!5+G~> z8W#afFw}4`Qw0169S}gjl1hu*AP7C~7SrXnO3HIfSszU@%rEW|vU;t$UZ(nG#F$A^ zTEEdmAzXGZJM?=2)56%qp^dSW%J6)`gGgdUBnfKrD#db0r&|~)RiuGV&Q!$j-ilNL z`RPR3WL~`vL-bum;Ie@vBjK=9x-`k5QI|p39$Y$eL+Fu`7BekJCkG&>-DaBhSV4d^ zhoW!WO_-xKWTg^!$$D?~=?`WdoOd7N%Ne9Imn_Sl-wKH42SGOE7S~|>>ihs_>)Lp^ z+4r%I5KKpY8)T_+#PVEHyua_Rzn|OcvUOt*)cAPvf3*Ov_XsM?;loxi#U-BtDSJx8 zo~<_-u;0(e92oC6%?#Zgih2-*k~>Cg`b=b{%qc!STqi3<^?Ss*M&@x&WbUhO3=Oru zyonIrs{^qL@ZhlEc9mfcfSGd}B4h57LJ+I`2YGyhKT;N8boSwq;V2?X7=P5Azccz> zPqORU=Y|{ZbU4c&ORf8GoAF7ZuT&ZE;Q)Es<`9#|R0hOltEs73-cs|5-fK8^V?>w9 zrZN)|EXHq`@w2*-NR-h!M8O0-KjRp3=qld6khwTJ$Ja!D2?OW+9v?E?&i3b2Jlp+#7-%rE;iewr6HF%jw1lD^EvRbJ1KiCn-(KwrCnNAm6 zANwT&E|+L^{*hd5`#W>ezD@-cw|@nQ$RaXFb%GGZ6dT2{>!ynK(u?2F>Uhhh)oK*0 zMk}HMKMP?KFCk-AJhH8&6D>W~|Af0j#cXu&#ki`Rlik^KV(ohAmLiWbXnBNB&BkTh zynW!G7f)gH-oLH3{62j5XSBU6b$%~7MzBgVdM4(ic|M`z7PmpII#k~6ic%4VqjFUq zrjjMU8LJWVbA5t2**PE1I%9b?HwD*hvS z%)0oLaW#zc=Z{#P?QE2mYILKg#oqCRTY+0fUVB%DrpkiIr(Q;#(^!WaUpS^dRi~l$I>ysdCKG{~xXyk% zJK{ReyT&&K1L;Pe>VC6yo7ZRjqLD73Fj)@9nO- z+IKHawK5s`Cfd?kc=el9!aH6?eIch1c}|y(yvaD0)3%?}%R!Su`Zw%e*5$fmJ^h}P zy2&2AtF9KZo2XRuKMe8DUoUGi0`TR^y9@Dm8dq#U1tI}!>~A<(voSdGcIPq=ta&Y3 z)N-59^p+n6TmGr~0cZ2p@s&?CPD{rlPdg0}_uWo+If$71t%=E#ztoFI1O7%B!dOkE z14ioRm0;uokcvXCELWX2c0N^jZEAD3@^;-5x@b;Gi}>to^*g+b_d_iGlHle)TS7mw zM4DnFH2o0|m{!FYP~(x;>9B)A z83?nl1rfWv2C&#WVp7+Y6c3QGKdXl5)NY2hk1tp#%TNF2DOr=y@0s{o)VB7oD?&%i z|E4X6HbQ#GHTN}_Yh$=rvutOn&6Db-g``WJA1P_0zI5gbyw3gpQrySjU*?8)LrV4n zS0$atT}kVIp7E>^6euG%1R~Ggeesi8Yv7HR`gG53jG(wxQU+p_{Y7`1?!I98Y>|j8 za^8A%z?s`r6zR8@1z=XXfvDy+Py23KC@F{E@UK@v91~vsq8+~vbG!t>9m~a~n>>bo zc=l65AIqqm!;j~xA0mWJctFP8=U{WR>1@3T3xz5G)HSVZyr)HrG{7JlX)Jt};*}3C zE4tJcJ$;)~r28%{E5matL69E%Qe48WrFS+y)`V?JM6;CPTIL?-loML~4Qmef6J61V zp24bjpH!2fpIF!DTdYn@IClDIJWmBdWVpO&Lc1_S@R}mg;d+7=vq)K{0aG{A$h#?` znC*a6v{|nR;^AI5K1ZI-^Pb6gOgV)_FpAzC*p=zz ze{4NaX`{RH*l^sXynoH8%sx-QL*xY$;Mmaq`OLzNE&SF;@#xvwnCwYvX+^dlqQWBo zkEd%6>pSe;Eq=4P%!S3((lVBp?Pc4xwQSqA?OIqim+jxDz3=<`ue$2G`kv=J2lu(3 z`#h3+#*8f~%M+BMb#&NlHp#ICmlGwT;f2MXQ|ey_3JY#DP1A%zE}M`^$yqAya!Wn% z$YZMwrd5WdHJmo|rL*BF48Ck`37j^qD^75I{*L^b#uh0eClU!DGxd2E$pg>ZRHi1;|Sx+S6VSbDVBf$m&j4UuME_hd_N2Aiu7*9? zDpbm~P&9g265v+At&}G#csI-l9Jm=vPi|a!uZ!sm{>8{2k+%Sb`QO^^Cun+B3NH>~ zk0s~O%rkX4eZCZ=+?7GbxjK6$fVgOwdTpGRIQwM%wXQ)<;9z>BES$MkB@qUh?Ig0LapnBT)h*{Dfk5_-p>>T9< z(Dt(QnCUhlLeB2W&l?QHZ~x|;I`%s|zo8~rGe#Y6T1Iat2x-NiUAMN;oVQusnng&A zEyx3M!abab#e^K1n~=OmB!h9+q?oT=q9C3CiN z?OeCMzLpI6OI&s~i3d-0W;`>JVSiZ;5T0NJ5?huZJgfhqF7+oNZC)otA$`j`@x{Ngrn{ zl&8Mki=@};5^$aK#Q~y2ODztimd(3Z9=o*K(?G@&SX~zpNl%t8KjBcvzSGFbKaq&H zVRqO@N9@Rr$uFjJ#^tvBf}Ic>BrB>c7Y?5#$nW@qO9eB1fvqvho<200Us*5N{CYPW zW&$mElc(fNVGfykzPMB*$m!ZIM+hVWD{G&L?}<$ze^hK5yZW9(j(yKeUMC=})HjfI zNf)R*&0D1i>h%iTR+_j3SMFl2hG=s0EhOrRXG?9o6ofmmHXDHaguZLefpSDe{tc>)* zq;%e8udpLI<5Wi^H($BLGgNnrK6dCoej+w9yG_n zi0`mayJEe0wCfUww5)-PNm*aZ)j3bXd-+|AFNXY^H*T7XL+q24C#dM{qtu;QnBb&! zNky4v|5)FA{p8&18&o(3yujEtk#JMu?1*!_JGN>^)M#v)xcJ@37B03*%C^}wo5DhP zml#T)ViGRtk~S538-E#52y2z2_7M<4ejgYD9V{U2Pz>}km+qkn1{NkS!PV1DF9!{+ zHr@T7&v+b;3VGXpw(}m(U_tG@+f- zy19L6Z{2mAc#awUmh2+E_9U)YQKH-_BkTH=MaD4WbK+GxLnl$p1|+x-AA6NG4btn0 z%p0=vwmMhGlyUo<- zuZ@YYGKyfKa(pWpFG0c3+A?wc=%L>1Cex79pUwWlZwMxS(ykShTwy}D#CH*%Ep2up zTVE??q>Q5S8+c?ds$r|OxGQ|surxMJ%8R4g#=mzks{U#9Y$gYz5NsX}`(%MzUqO_z zZL;bpq-~HXn<{}h0lfp!{PJ6#TGs1pa)_82n*Kb_?LCsO3g!gI;J^TMhWn*hSw+Pb zkYWcH7jY1Jvp!;PM*41mV^3=JWIhk__M&ILaG95x6Q2*i`tt!F7W;>eBwz+&d=>o8 zGxpcs%x5-ABg$fCkiR+(ut=xJ>UqFw9u<@Rq!2&Dm3f|c zcDWjZ)hIscF-wJ7ri+gVzO&po?irbL0liK^-RC%M%=8lYD;15(u*6Rcw4c~NYYFGKr}e1mY1tMZR3vUlY->$ypdp*R4|{u7ZgRdw zYs(NlvI0I{(>R~F^}mn#ozZX8Qr~36m zlo!?0(6a9q=jMJxP*oD9a{Le4&fS|5u-FF=e@YyxYx={IJ$jaIAIjCNYfdr(=z2vD z&r}?1I_NG#EXos;FXfbuy#)TGkSN7Hi3thkzvX4RueiB^xs&l1JbM;0e3kQP{lg>X z*JG+zUiUru%>J!-iu(!~OhIB4P$LOl3HU#g2z^OGY}mUCw4v?Jg=R- z5OzF_Tjk6i{%lAc>q}w@jf;R`GL6CtF`jRvA19k)}A_%7ty`Tk`uD&)6Ap2R~vvC_Y~aH5#yjbX}Fek{efO zmbcF`&#kd}JBgEQp9@|%hSTnhlwS5NktkuAev2oBL?OGEvr}-^V8^oHG2O~09eCjK zdG|_vtgnp4ui#G~ZF*wW_8BP#i9d>ps%rNj&n;6LuNNWF!;q-;-KvxPlw^;OFABKU zWG{=h7gpxOZ=;JP38U!~dlL5IPFP6rO-HEzhJxrMUgjY5yUb6@CTJl4Gp={7UiZKH zM7`J@=TPQAR4$k4`cZ4j{>L3`Hu9$jY0b|%NjO7SCbT_kDWip{g;7ZKNX#{8jq7Ef(Itrc)rrH;uDyM6LwA##=yad3^Hf`TN*>bov zOu!47Zy9_>UAD~{@_cx_fjQ(JS*KBtyT6A$q}Lxv34&*kQs-xNOMAXxQOq9_%-Be{ zjJr5iQZ4vCh;tjFV9Y;TS|A`am~8*J zK{+j64+@nP`z(qE&P|eGV2d{dRW|0r$GFo#(P{S`!YK6BN>z6Pax_nDfhne95^`<~ zz4g+?!QHVY?Q)5Rw81>+`O#cgbNVZUY~$5(wi@}ylZkeG3*W!r{M8M8 z-RTWb7~i8H=?DnS!v>=>+^jg##AzJ3klPpj`|ueAvYxoOo|V})^4v2z2PFDS?}1T( zO^qnYN&*ULN}qY-lJj1%(Zzk{E9*q3ElCM;oKnnVQD=k-F%sX{J1?v6)tn?LC z7e~*+0x|PxW&b=x#vOc;_l>)UajYX84{IPzmV3$_1+f+uLPWbf{c?m((ZT5VNR3)* z@rf)NGbf3SqJSxc$UvBeQijoxdCW^H)gH@!V)RaBmiVMTAK0Y801IsGwZS@Jo>z3e zj;h5~Htem+c~}DGT4>tO&=|5%_z4CYZOaD@nq1rXP<7lPxe?4!w3iqMaR&LG?-Uh3 z=Cs2C!f0e3m_eFdbC>gmDccCMlmTtSG%wEIK1MS@2co)RM1{8@8gVk{&uNN&60n}I z0d}yt-}e#?#M3ID#{qMfq}0@0BgV}J9~5w1l&uxo{fmXSUAy~RUQcZGV|9?PH%$=W zMMx;YkW?rj$Q~cR?Zu}39oP~O_$DPk$R|CW!2QHbyO#)1b>9ToAp)(d6M0NYJ_V~? zFXJ#wCNf<*Ou7l2cEM#MTo1G%X$DrO;TEv8&{e-tM{HXVoI+QcS!hmPIauIqht(+b z6LT&J5~B*4E$1Qc!fy>!TYs@5d)R*MQEMur)L=C=El^1;r~P!oa|!7rptm1I{766^ z7v!t#kfEUjRjuIE=G;nBJjhYw@9aoQOxoWH<{esuaEqcmr~iki#ewt9IzT*aH{|%4 z=`xPK_dagFOugo>YV{j?Z=u$3N-fm22dCdp4W@0ZQxNf?lC$v^q{?Ukt2voZ~ct4wiNCf#2S~P&OlquGKzq! z$3arc^0RItP)IHSd&n$((%DioBYZOY;b8ysHmw$TV(XA34hZVv8_0lXQPxmg>_aDUY{vIWIgZ>Mu7LZ{^~Nl}_;y zQmzPrzYo6U2JVks#y=*Xu~Z6J+dE?ysxxF^*5&fmgC*&1++S=v|E(Sb=s@mZxw*Mt zn53F0i2c16uFhw!7`CsxUZLFY4$rddXGxFI-)kO-|J6L7k_tk;ayx6Us{xi;`C&a# z-QFJYj-Pf7^1j+|1FVUIo0!Qu1Xj}zCz50T?SXJ;|8 zh`kRq`YRV*PbW4jhDC?l`pfyPjHbO3B=fe%k^$FWTXMUz0yT;;J!vF!O^m*7J0(hC zPwteG=%M1d6IHkrUMAjFCVce)KS0l;*q}wylWKoL(wx!YG5godMN6J1S?RCWJVDB= zf`$z7hU4!B`Gw9JJvAF?wqo$)&AyBbqkfi}uWij(dSiUO<{L44x$Ns)LHTRU;HZ4o zk%08o*865Eo4qky_X9zq9)O8>5GdAUf+9eC4x!QBzVC>VFO=Ry&%B2u1pLw5-27*ysG(jNbKp~|RbLV- zR!oNu3Wo%8I(Qlr1UNnfYfsI$2AzN#mw0EM4MRL`ma{*fGb_4GjG_{&1w+Ih`W7@O z2jIo654&oXR)i<^$QOf_)OQujN!1kd3J2K8)o&M?%h(;MWh;h^bS=r1r4yWE6XV^y zExxPmhiHZ#e9$SX5~pvZfHPA(sn#Gel$@>%3XV;os*C5@gk#o>SJot!D?o5lTii>+ zY|HjU%iY7#I!^N$^Z=1mRag70zrCyvHrwr=Pe*xTP)VnG8%(48I)Cv40yU1Ffi9-@ zYii}jvDY0UU?{K!hvB>Tbbrb?^$`R(3$*@J#Npj8QaCLtsGo~_VufB@K79~Q-m(0gq-As+|C{uR8&l3u+V@UXlCAdhI z-cGwnN_1=v)mNp7e228qOYgxjps`Dt=Ge|NJ>Rk7X~z#{NmM!>{#-8M8!mEmejowU zt{6H$2DM;VoI~10p?%4G+;x@k!4n~p^mK$5sm`Yk(5TRK?- z+i0Hu6uu#3zV)o@I9WBm>A?nuDt1plGU1mKM0s?E?Ms7f2ExBnXc9Y<$(46%?F*Ev zV8YA`tzB{L-TbVyc2Pa1rvFT3fC1N|m0FMH71d`d$fLY<_IV-fS$Qtd_C=FLHN&E4 z(>+&WemBH??u=h+TknUbg5O8u4%#8e(Vv1uRI3b)9s_Bj>y-J><(ciw$`IV=H_f;j z*dr$f`#MiUL2bx-zN?@9QV~zVwmLU^z;V559idwScu@PD*7Hc^Gu%5lQODdo+;YhO z<7GI!ABx$i+5N!!8(GI~f1&loUkcLq65Hp0k%$flT2Mca9}}1%K|K50ZB@&0l9U?c z{AMKeO%B4>5b}4#2?Pm7cHM10eQ=))TDIGC)U;nB_ zzAXc0;b!Wv!Ny@1PCAn}AY%3A`WZ~;BNip?th3-1d5RK?88&IQ%#7ji5}iwGbbE{~ zH_2%BZ@fZt$8|%}v+*>WG942F<^efHM{$1^B~TN!)g)w-f-_$sxywLZie2L0b4+&L3Q# zcM}h1zCWPV_!6kf;fITjoC{hDWAo)8D5I_h#OCr&Lx7k*kr$0{LLGS|O=z}<|E0J4 zsXXVn_0aok&`8HP$)TYX_S$8xIZfp0_L&}ck%*4g2gNbX;Lk(>yBWmnM{I zt}$3Sk$w?B`qG|LR#PtSsx_b4m&CL$XW%6ic+7)3#F-%~tQa%Pxzy=ZRuqx_M^rQq zS)Y+CQ|8kpgLvd@W{))j%-sS}R}pJqZF=o_&nK|Wy**0LJ0~yfu&}UufLs|4up1KH zdteuy!y%(xJ-trgWwwsJh+I5z)A)D(#|1!tkb18^xDPD+0PBNb&NdBawW~51siAkC+6vu5|wOjw!pFIKkGP{ARf~mFRm>P06*uRY~A!}_eVLnx6t_0;$MGD zBS2WNY~DLy?|^p~#T}d?J6FZ>^aJny+ekM~F8Yz5>7JNX zM68Bb5_T%%3qaSXmtLuf<<8WOScSD8lmxfho1r-QNZo6|oF=9yClU%zT`p<4U;O&I zzI6kJfIyn6o_QiKOxl_>$X}msf$E3LuD}tVGTk+Lf;|n(8KWs)=qKZGB+u@4OXvBr z;6-o-EHB<<|KcOH2q=!iJ7)xq?$d7%Q*}gIeS1K_s-){aX#w>{(*(cUum3CY<$qcQ z{+@&TPdqR2yd)ABJ>}n=6G2w%SJNgAQ25@r+e$y4+e16wjv2Op*A`aQSEqaS3jqd$^u28l`~DxCi#$9sYOB-p zMn=|Z9zgRNA?13w5H_E9mfS4txirlyEOakM(C9N;eFG$vtKA)-N+ryUPZ}&+LZ$e+ zkh$qj>2*w;Nc6q*n9*x*RNJyIz)VFD3v{ty=i1Pmhg@e+8%sK;O@4o1t?h(?tcHYh z*Yhz?a0>NmSqT7(QWmCF_RF{D$i)dF&DwLQNacTO&*(}PJgbcYOF-FzzFoI9I;~;R zmI$96d(ULtYv|A2?B9iZJlAiE@@ty6wK%FB6!TS?U46hw_AWcTc`>8C`{* zfen<~vKz>EW1jkZ*~VXI0*$2>@0)qklEt4oMJkvp3vEPKbG=nbuzt9zVIf7#k3n%_ zjUQ+(+Qd1k#fFJQ_ro+5W@$c26p-{M<7==`*6*$}X-tR32}9nwR>{%%9ncP5<=s^Y zHPL@BDCrmhnWoEeuk&ycU79s0QN!01pSYE6tZJ%c-k}7gWGHf|Bg3H==em#1n2eHS zpW*T#Bh&kP_fSFwtoNs3$8QSDSjQtfug{Y&N1At?ky{tKN49~tsa&ZVxUsDRV2ti& z$Kwl5y@*YN9hT(*I9P>7v+w(uy~%nL-18yP3m4dMPC}Z7qMFe}h(*t^_0j7s%6ad2 zeP9k=d3w!kU2RhO-E=Eh#As>%q8nUz_0Vi07?|-{eRXSX(B5~5cvGkZ10URQp0Aw= z-OgnP&?u;@{67t5j&HZJ;^~3YsqSd;iSNgx)7I=BID(!}Sg5LQagq4cCNT=*6K!Yi zvfNZ-^TBO3{nrQ`bk`s@F*Wt2=$n5#5hW?k{F z^>SDa3!quAI5Gk>*O$zxUHwc|=kzZp7C8wVI_O+7FY2vv5xVL)kd^H}RQXDUnv#mj zgdc;f;|HC$MCoVr_ewi5>D6n>qBuTUQ&Sx#*X*hO9iG(DS>p%~!{OK^z4w>)YB&}JS!PttL4CLx6<=4fGCwHRnb)Io!CQSTWGAR?+CcndTM|l z>4ysXcwO~dZQybO+*6x`;R$o+sFouO~Z3|H=NANL4P) z#Mfvfk3%$bWGoHE#BY#i9hD>bb6-klngPFJxT%N+JzVIyZtxlTDsg^OXr0oHL3*rv zw3l=9+hdhf^W=+SH|y@rNWezhuhH-+!p}i09)k{t0ytj|68Kf0~3kE~IjPAmE z*r{Me*rfX&3%l1VH_v@H^44Y$(Eu=;gx+tg`qxXNtMKy`7YlzkO<%e{<|25XYIk* z9e@zC4j0=1)gY78Ppm7^J)46H7kp06sNz4=l9Ca*Of!7>O2Xw@0T#e!5we+z0!Re` zy{hF}nLfxyzAqa{zF-;0-FFcFp4Y9*hk8y%$Uw+h)L8FZx`bw1V5@3w2q=&E3>;u~ z{j%@bL*v^G_=gD&M_1scIKXnXpLlk0{%gB74pJFqll@^?w5x6F4PlKDs=|I~7E&x& zCNFVtS_#?T!D?j4*8#chOA!5;L2Mb+=#P?q`2iMebC$IP=b%C*nuF!sYr7t1uU)V- zn@T$K#Jf4v9T%^2=F0OL*D-AtKfl-nZM$$L&_vK3EW)=!O%-mIPHc5QYh5nsb20UKUF*SuFBO^PsD_1Mm zv$w~%y1HWbd}fa%{1)2W%n=?Dp$q&1Fn-4&A`;D)Be8u}@?wMUy5cssFyDT#`W98# z`S>}F!vlIbmCIT)QDOZ(2{cvwe<0f-SsGlEhTjJsjNuABW<=HRvX*_W+`M+u3J(VP zWy=-om^z}#v&bi5v%Dqb4#4pC5%7q31vwhx8oc-V+R{VNUF)O`NJ4+k;lq zznNQ^>zjGNw{p21)Nw8@|LL8WM{;b;-CdTNZr29S!M3liX$;?Or)ctIpfvcfT%^;$ z8HPUoG*y?X1N%^V5h49HvK&nYrdYB@0%2Oy2G^8CT4>J3{6eN}soaztZWwZgM!*1J zTjn_8THvB^@f3X=Ox-w`KNP(gpl=LrvG-a3vUBv&TiPb`O_MOXZs&33Yys>D;v`B_ zk$_e=;>y1{=dGB#YxK)Zi#-k1nLD;Bd;$qd%x1*_KPV8c6hX60E;jkFd~SFB(FH>B zT&keXN(SSvfvGh`H3JTfA(WNzN>ssIU-K=8^9qE}7qRC0`TzhPHCV+9`~Wl^DU{~R z@Anjmh$sB%tdj`X7fT#T#2XnB0y{P~wgHeml2TGg=k7nBulRro5a!g+_LLS*Y#dg4 zz!!Gf;hBvdAKE2CBK|vD)c>8WrMIwOVG&_PTBq;H_(``(GhgL$FOc8qG}P!i=oYb3 za;3tS0zM2&&&|2feBv=T)(V-_;h&s{^?+6Lx;EI?q z@{&}4QPr#bz6J)i4{li*2b=a7XsNo*zr)pLHJi|uDz7NI5qbr>0)%IE+=zkD*85lIht|%=Q4GBF|`LJEx zLB~(FluYb+z%5W!MBuE8<{F;j2Jpy<{M?@{vLtTdfrZNcmc@G{DV)^8^{I8(bV@nU z?VuY~(So%|ap4bNa<7&^$wNNBe=|+HhMp$+j@PI`ZBjt*1nTc_JT1%4aLcK2ayCTh zQO0O@jZG+g?(o-#jwr3lp!W7}bQ+pn0B)j*6Zm1dLAG*%iHj=?Xq&KsXOf?!Gq^)q zPg~&a?Cg>9o}Pw4Mzx+gtwy zUy=U>-!h*B6zf*{qliZWZR|^y!g`>IXm$bH@*X9fd^4&v=>b!HgOA z-~!-L&RdVD;;Zfi~oof>>X?nZL(XE_zjlKYzQ z-Q$>eEgF*{i0sa`%f$R6=gZdz{nCnd*Y$ki_gs8{Rq~=U{J`4U}nRKG3EcA?FFw{KEV>px?hOq5X&kWIIDcLu+9D z<;MHl!}t;4y{BoRE%34(Scinh@#?xhsJGR+e7br0FnWLcwZm_}?#`}V?XnA@{ewY3H} zEQ~mNEtKIE9LeKUi!$y>cKtNW%);+8Cn-%bKx0zD60AXCXCdhdYPN)lE`)tR1S@@w zl_OZAa&VD`U1NyPD2g|hO#l0>I$Bqt2IUN9eC+DLmT|ldPlK}G0q$I(+KV8Yw8w$} zOAtkUr`6pq|4y^`NLidfX=J>7gi(se&}+#t+p+FEDHIsK>>P%e@q>qIzosMZu%fJp z&N0Y#^^!QILo)9!)jQjg?PBO)`9kj)gRNc4x*OHn$L^yAV*{QhYC(K+0wRe0B9Rb! z-y3BEAJi1}!+%4d%kEoKMHt}d8co(83Q(6_`x9u!4bg!eSUnKP+}@4tCl<~J*+JIV z2eSA)?l=HM&nOi~NC|O@EmjsG-5OTQklBBi;fciHc}78}rPTxASlp9jneY4r;*~G| z!)gMELDrjN!T=lNo}YB7wCLcQBk@#~mUm5}nNmvhN2JU-ukdNievU43}Oo#)J#6!RQsqiG3_ zS%~$-IjmWE+wr*E<-Z*bCXYyrDun5ZaNy(kN-aH!z; zi4!OxHrwfuhpnKYgZ?FH0momhLfqg)t zgfw5Q3IN;2N5SXE>Dm9_j{@>V0rk`gFO{Ja10xO&?Fr|0JT~7xZ5N+bB6KU zfbj$aknJu2_h)2f4Nxn092_8ysZ{QUYT5u|hEn4E`OzVZ^X4CU_NN(D^D>K^_65rR ze=wOP?*H4q3;ul7%N6PDp_<6oU^O|4gV6SQo7Ww^JRQp+m6F963{q5d$yTy*;Gr!>e`)r1aX5Z(0-GayfevMtUa z`MN_3(zyY*ugg320T$Y2m2t3>^4D;rOp-1kq1amXB%@F4;DkaY7ty_lnq{|2)eQ}S zMj0;9Ks622Ue5QMK^Lb^ogV=OM#j_DGoJT5aO3*IhrV^mI>I4}<8SRo$fmSla~gle zev^)EvpEN^qOR4uW(mLQh@ED4c@IoJA$vZ<{CD)3g%U_2{ml(7wKO&98@HS2eE0kS z)_aD4^-cqhZp)+fgJ&~*b_(wnFJzX-v}TCMs8 z!sfmA;|>1WaS@S}o(}A`Yplmqw=JhsGSx-txpS{`R98_|>u*k++@6~?vIYQ3p#PX& zS`}^L82%6;b0bL1^_Wiq9EDmwWxL|&aEtk8%#bUORkJ`)PjL;8?A)E_aBcSEmUY1Qr+mj&@g|{vUJkRC99!A|pzEw`Rd4kz~N+gUh+t z1CLAVc1@|#)Z3z$QEGQbrlS(M#S_dY`YIS78-D}e6DN<2ref`0Dxh zg*WhP`=Jy&09XO~q(F~|(0icn!)Sa)@RWW(edBWDfvW>8aTTNCq;dYq*#O7a4hd)o zES#!a+r#GaSv7dPpb{rF2ex)8%&jbQ+ZRL%R|EE4F|6Kcd!R;&{{jTvZcR*qjcwcG z_w~H@os2xJo}%#{z^sJmp;>znelmkpah|}p@6N5TF=BUB*xacRC6rM~n1XvT4utdA_f_DPh|vvQ0&b5>;M9J_`NXl{Ig!qrSaD^P$bGt1KY?3ztpxm+ zC#{&XK8FfAI7$sx)Rg`T3xcmsc*bl zT7^McjX~0_eyba0CrNrhrp`pS+nmxt%(`-niAcy!scNy0>8eYj=L3cGbbR zTlhEl*PG6VM8+{LGUxaWaIYt9?JlC%buWMER>Aa*tVXAaJGb(7IPKdPHpwq1l$54% z#!FH-fwJU&U&xokzaf)&m&htE1s?c*G!+|T&SB*63i&21(-i#ur%$~O#o+2FWJ#N) zb9}J|+p2AiG`&^FbBKpHZ#g~DpSD3!*|J%3sOy|HAyytp)C&1gEi2}>F&1|msMlk~ zL8O@OO;{Vv#~0|MF>Sv~hpeY^9bTg`4lud~2E2mFV}%WapKQMdquV>?(rfbKj(A+A zUL$WYfdNKTX?tnY?`E*5CzA^EUXlJ{?__EG+Jqabz@KwY`1WkGXDr&qzt)`sHc-<1 zF8X*^Ah31QwvD$&86_1?Xa?}~lW;Tpo$c@=Od%pn(HjhmPK*C|=T0L}pfBSEGKN#m zBlw9aUD2rLY~hDXhQjcBPa&fK8-9^d?_=h~h6G7l{&8PKy}AEGf*}Tw{`09fxA}A1t!(hzF-#c*(y@- zPt}_!A(N~@LTCot&~_|mRiA4ixIjo!WR zEAbnU+rOs7K$w&qRhjQWLrhQ=8YKT_v$HO9#doOnQC4Tj#uk~^=DF(za&vEY8JrNF zTY^DH?Dy??-N>h0UW83MA^{L&c9i2m?ny&cT{CF5 z>PMp)PI07e9M{t zWrv0##;VjJlaNN^>WfYFf%H;c(@`llDEz^Ro{O$El8H4cX<$kLa`vZ(E%&U*(+@9g z_m1&YXb2X(1313A<#H4aZd;3+)49 z(MzAh)9_6xWm#C~XoYNnieYHpG@Ku9(MJbK&e=t{uc+t56U}^Gf{S1}NsL`b!Bo6A`8)|s*=f+NhUpP7VHJEajF|3UQNN^F0MX7-<+^h(-F-b*sAwW zyAj<$F4tph2xRT_|1q?N*Z-=_Fh+#xmZs3*Kh!IBmyihCI!ig{(c2+|o&J-rfA*)= z%;bBC_<+36Ei`BaAO` z;85cCicJ#OY~l0VO;IlpVNO#}1U7y*%53Yu?VoKP^_OBGTzRjRK2Ht0 znjuQGDo@`o&AhDl1<&^Vw7`pCKcM*7Gsk!Mq5PaEqk0bm3w~iAlt;9s}X&l9ZWB={O%he93(wJI2V? z)E@Kui&*a7A2ef`Pp6eV!li0+?#?*w?nSe=^XMF2+IG0xp}0p~VVdgWmv?3qJ+Yw7 z^nygFKad7Pyk(YX@>r82gUISS=2ZTo!FzGmcIMbk$?YVWZWs2O>f7n2Ji&?UF zvSKM*uZ<3#;cXjdm}h!~i|P$^X^s_dugi7hFeFS5%6liqPg!LsFt8jL(K6em;((t! zC;K~{l17O_aOXdBwI;TA7hi#7_PhH20nMKWoRE0q!}Am{UYLS+JqO43JRrl6-AM6| zjvqb?Hw~-)_3S7KgIVfZqA566(amPAQh>NzrIR{Au>URTw^J8{zl|o<4ccty6J;--ppLFBmerH{2)_ZKPd=i9HFUT;H_n~Uv( zNMo$TOi_E?~bGh3l* zU*D|6B6;_!`DlXbe_VhO%pO~xU3-4IQ3&&+k)l%MlsH((YRDKY z$L~1Pb!>p6JanaS+r4+%1}er%fVNv|*LMdDht?0vb%)>L-pfjVGe`jM>4_jO+Dg>q zz1|EWbU*Dy_ONe9QqzLh?1W&r?s8FaevpE(_=HSLjsa2kGb_16D3uLBcO43S0%wI* zi*xl9Wvgiz5wG})lLJsL@&pvtEjMzu>!&Zc4ju@ceS(N7TSuX{#8%Dz{A&6T%P-zv zlC$|GS4UKu0Pw-VvS_tuEMJop=N(O}ewnwC&fbuxvyPJx>u#tFw>_69g zU*aqgp6`=UeNU~mJ^|^p#%>nY-Q8U}scZwK=t*VLUDY&959KjlRNag$cMWCrd^OS_ zE%NRY7rwsG8SX>6b)q0T`OCD};UWKLESu;~@+VxyI`J{iU*z(if-n9)a{noJ45Fsh zzct~OtopI)@1w!1O3@U(B!a0EXK*{ZBeg?`kQ6v3AN|W<#F~Hv3Hq~anv7R&B?;z5 z`4#>`{%FH64~*K^y-zVyj$$?xN1Xjq~gA+LVtj?(G4*5K=c30-<*hIQ^Ym)HyjZ6@;HYCr){! zZVpcfVDj+_`5#j6$s6VN>6#K4&NfZ>RV+5nA!;=7BWrg0wXe}HX~A1=7=qvZgb|@b zyrp+G*CXCd`L~Nn>x=rZ4U)ovZ+t-Dj$G)z zJO!UuD+REjVB?wc%`ap(jjO>55kF=-U$p76eY5MQQ2w}?iYpA{-2=6AkYen|tkZ$w zRjqqXpL+ec-($EQ~OnA3&Ko`1(uq z$~XfrmdNn{Beptj2z~yS=T@Tcr~qWdAJ}5b{yZhhK%(o$wP@!w9VWK;*Sl24o@GEM z2@Ai_*R(#;&<-JD05mXAIAtE0Ef*3jpMbXcQgjh$B4ADU6dVMCAZpjbE^oImKQq^{ za)Lj(C2Uz`b6*eBD%01~AY4fv6X-S3DPf8je*A55MM?lLmkx5aovN0XyQQ5z5>yhz ztOdXZ>iziK%cz@zWj-2cz)?l_F~Ov}h7KnXcC=16#Zc`GYy*aeyE4qO(od@rV!;kI z@PjimA8LPhr!G#Bnqv4IC8KPrQ0M@OKsrXqf!S(FtC;fnIlVRZ2{I(3(*(bHLdFTpItnW=ME= zL<5r~_XnMzks{i1E)KL|nTtYr$$St;wOoku5X^K!{b1{1_58B|g=|XfhD)T_t_x`( zN#^grnhDPdu(Qm_hq2zCu?~M2<4XL%!?3P?7^dbJ-}%beRAh{B$BwrCXrVumz`JRh z;G__f$H{7wp3x{gpU;n9?g)QYLMjkn(&7F25J5R(L^n)mfFq~g7^x|kNqsC~kg)4F zpXlri5Bdw`#$JEN&FM*XB16d{YgeL^08xOLp!pms;_;Fw_FLALfri%D+zqF+PZfu@ zPw*>}|H@lVuMV`SBf)mPko|Nx_tYV+(7y}+TgLj`C(Nj5+4m0~3I4XUE}oj}EvyD$ zH{rgWcJ!on*U|kpMGTJ&*SB>gl$W=|!NnELR|96GJ_a1tG>Yuf0AZsyc+u8-u;cd_ znEy~L_+b(|X>%{5_p#%qi{)eEtck9X5kx61{Njp+FaS&tpKmArWp7e@CjGXY)@yGE z&D!cYidrA?jc@Qwr?fVt{FIVY>mvz+T56tyrJ8jb4c-lEc!ac`o;%+7-X|JI#DaK= z_FP!#zBqKsq+sZ4I!YDxC=5=|4HA&Ma|Pfp0p%wS=9cApZcY$@mwIkc!_*Y$<{XB< zJ0x%^OdSyuOs4sEDZ3aE@xR$%@V<6>qVPU4ctT3|H}5KL@}q13l&A~rw};B}o<^DM z*`ptVgv8d})9|h;e>8hW*3ed_poHw#tvJb&OvZ8!zv%w-?HBX62y~@Z#vdVA$GLuchx_c`0HnAVBPl3l7P9<(~s#Q{$-AX^gOTq8*k8NEDMaF6K$M5nz*Xfpu5lYEB*UnIS?`Mza zkp-jA68YBex=tL>cBxS#P3ceb6z=qbD{KW2K=kXbA^3uq3k>N7 zSF&@H($a);IYL9_1>5Jn<%_#(q(IX|!6Sar*TPzq-3Dj9i=xr-2=`rJgtkDxsnzJ` z=!VU;oT{SL>>E(JUsYdE=mvWS13f+h+7m(2Enz|&w72BMod6goP4DB-_WIEDHAg&r z=|Ei^Acowip#wgel#w>r*N0$Q4{bimUoYop!BJ&SMPU9Drj(Rc0|R_a2Swv0q74Py z7yjM{X3}Z;q+$B7p{lyscXzIIaYfDN_!e%&9y+i@vmcNgpB=~jl8#E+Yc&87%_J!; zvmyF67q#X0cI6dy*nFrS3)&|c+}ag>KGEj!q3XORS4vPCe%%2hN&c~VaA9CJMbky>lYK3dy+Au~70?wm{pAwoa@3 zr-!0%s7#RAZI+!?_R}NrVN1bVs^082bX!*__G8XqOe=n6Il5;#t$}*q z?>4x=sOkLjFhh-Zk~OEk3xs=*$zLmRt2@j~t55{+1_MdN{Mn%cxtrCb-Z%J0m7RZk} zZB?Ox=HO1jSlmyO2Kcj(ebT)Yk60W&1Pi4a3SOh=faI(XUtVIRq}J@bzhKw5xxwZf zmDFyg7#enQ`im5XvS@wlr6IQw_OWwWs$bF?&gsld5P?M)^fOjxW?>0@X*W(w&lx=) zBe#5jqLsreF*F4urg%t2ftvpwPdgecYEP!d@{|8TJq~3RHBt}-!hRFUMH`^8t}(Fp zTdc~KzW>ex64G?I%AkQIy8SP2Ml!0>`38ha1t#zF64xI1*JJM>a@Ua!&d!MkoeCgCWmbD&^eHI#O`l*dlbYn{(h;N2O-n-S$0kR zZ#jIOAhFx%ILO2U$KE^`T_{CMtn_~_peRohfo*C2F1x`t7#Q|{70MRsA72X9vkm{8 zAG^7Q^iMk5+)N5!5RbT$Dh^3+Cj;{1{8L2yF*i3B?095#-=L?$x;ohkPo8Ue>t>MI z#m4+~?mhb3Jq(B)1NXA@E2v}sE_?$Q5G-9ESgbs{nV8(}zr9Uf5#jxwVzZKFF=J?J zLg-w2<9!2&_nIDlBtX4xOHTwv+$Kv#P;RkAvAJT^vx9QNIOlz4j(hy0LhurS z8Egj9FSGs#6jUY3^70-Iv%=aNE!THie@QH}>+exe!uxL;wcwdlAtIYv{mrU6xrf%T zs0rHPw+A+JG$S`W1|{#xAF9dUHHakHGE;rNQ=k4&lw}pFX{-U67`}#kvBK@wv`l6D zg^2akiPf28^@A&{Obt?Q5p`=&tGVoTqKO9@q^x0W?)26Fpz#lM2t|V`|IG_OGqs(& zulr_;A2jzmPhjw+FmQ}wWUlGVPk9`ogsIB}dG}Cv%6O^3GAeh&@u^ z)5qYT=rQVcAPx@wg7|`k5fI13Pf!CvLyO^di_pM-eA&tqfEZY$0(|_Yc_b#S3@wgm zIRW_BA_Cs<9J27}iEM3eL*U##d*mZjCG+Mn{SH~5eatr-DPfUaN}W+K@>@x4xqi~3 zwnpg*NFFM=!*qW7z1Ek0CF?R6@Hz zgO0|UZl9VN+y0Xc4%BHgWeh<(v@4N7_{q5DpR+$g27W`O}ax4ziBca_^e(|?81dw#S4 z3KS#D#JhQX+QNiJz<#T8J$3F@%fVh3I6E|K?S!?z`1z2#)q02@Cu*Il$ueePLaK8_ zG?RCWadpLEJdG)N{qCK_5<+-YvcB|@Oq%cf?IS@txiWC22n=<7d!(~YxR zk0C=fwUVYWe?rePT1hW4zEwlDl~vyrEI z{e37fL}q~6UCSd&e;DkRMCBl4p1hE)PaPss<GrUAWdC;x-n`kR&wX2fPN4LYT@koDYZ3JyV19GBoM*|5db}JZI4Gp!C5G8HVXq(|KzxzPg zefo#qJQ8^TF8SQS_7nGk*(O8s1_74>WcKbKa$;lZ39<9t2e@5o&l;OrU;+i%34y-Z zl$`BBDJxj%&d6&KWE8LvL!&0vi1ZO1QBh`PyTm-Dz%ziZP>If8ol0L~v0k$(9zPZp z4KercshzNhfgHY?4eF9(iz_qIddpu)G*2NFYSF3jI<#mt1~+jeT9{iaaB6hG^?nuo z>AyvE-Uh0D?o*lu&fu%kd#}bOSG_0>4(fdND)>pEsDy4d#VLF5COeR{#2YHcejAS6 zENhp(I1g5g+}Su*3jvxF4MYwEc%G`9VZgvJ)l`@4did{p6HON%sO=V-^?Ry+T~zWS z(_InKUcCrHw5{;OPHs-ZxP5(88ZLuUkq%74*yz@(dmkvc6eCOf(6u5PtQOvgW6W*t zkPHw9;d{he>NM!Hr}+cN?lhdi(3@e|>B!=JxmWN0vz>ti06o7XPexNbqd>q34^S@x zF+~V5H2C?*Oz3v4xZ(OWi1RHo$W$|Z`F9tGIO}b4DtbW6HLf#S5DQ@vJZfcf;)k=o zEtL=(Nj4Q_0KCvb!oxVA(d2|=JrsrnnxCWfGA+-V2Iv&J%*Bi_0&UA>X4k=?Kgi` z=m|@LUtxLn58;r}plAYK+3TX{qK?S$3k2Ah&mf70Ua9oqL6GW4Mn)Z;KsGb|K3glm zx44Xu@RJb)IhoDS2-ST5Fo~1L*@u}k##9s^(C|Qqa?ThVsP`%jX=>|_vEY`8 zos!I{7nr;6Zp1+G1|^=IIFZ?~Zpxmdpw`RZ_Lun73Mcn+`6Y)fNmr@|9#N?knRJlD z1@Iy(f}y$I1Gnw=4flK01h;Ptel;=ClDH`jt5;lX+oguPXHvtfiYz-~;gnj%AoO|V zM$K)a`i9lSRyG*wj?@#{jO$FPXj?xism=-}PDuWFHwDt`8X)*G=KC>ON`hQ@F9fE~ zN4P26z!>W=ys#T@1AkI2^dPfQXA(`6>ZqdAsr{J1|3)NWL<7)aeorFeW0YJ6|bj?bYe~nT6kh#=0%oG;?W@S zAO3mqiZ>zK@-yYYR4O?L1Y86NxnE#@nj!bM7-!)-BVV-9=nxfhp`o zVOR>9@D9GwCGrjzft}IK++CnR@N>2A?q6Gi~6LSb~II~M8SK%9W9&c zd9#aFPL#f?!Hl>woItIXjXhx#Bc;LS4OFCmUns9-d#JkcUM3Xzu4WloXxU4`A29|U zNKi3ZFZt|P?23D|ezfBx;Qdsw&LP+!j(a?b_}~@8s>}F!J(n6ZGZSt>t7@tb0YxHg z&j>;o5KOYs7swRg;~RFNWW6wA?u>xmOcSLdq0nquhYjMePrN*ebIRQ#lEOgXOai!71mdId!-Q6w$>TYc(F__*5)6g40(S1?H9^RHSZI@K#am- zk>c5J(dYrjj@pBzy@88f-Sv>Us&f{dhzg__Vz zkx(PAkvN`Ly?hgCr})I+!qlYwHohHu*t0uPF&KwNR0fGbym)4{qpTncRWmz7qmQYQ8tEfJf9->5#s ziX5aedZRh}NL_t1*lc81{$^b$u#3=ej#A-<7_bTW^u8qETsu2yEVf)`7I4H_hzYfMeXlbhT(57C@4(+Hz_9ZJ<|Zh{a+OtxXRREylf z?|H=1M6Hl9rw4Bu04V&y2?q=jrkER@ zi`wy=0?ziDTes=dyeDav8fTQK1xgHthoW%j0iA|mC9so@3M?`>%>AgEV2=H}q5O{< zxLy;OWsUz72!gwB@Ur~kqiE}z4P8W+BF-4k;!q8XZk2P|lkA?g3 z9qMe+qRAqFF|#cCq9yp3LUh*&iSKW-*X*RAR>+E()RF6JMp8|t#{ zP1tAAbu6iYQgqaiO;IUw_0c`)#8Jq&R8tSBd=(CDony{`0Sb6kMdQB+->Qn>>x@29 zUEnv#p%T%PVg|H23njmqI#fU}}iH3@x zBCPwC_i7Mb)B$%Q$||y&2FuFTw%WOFdp zlO$*LeL1-MDVQQ+$`e69s&Qz3&$9L$Q9H@OsE*yHk!`G7(^r)**(}KWAgf#?8BaQF z=SmKfvqy)Y!C}kA<#u#_W#8Td!WMVLv-P>wdQpt4w09nICB3<&~L*wu{DHJNue;*z(s5-{l4ElG#tBfi4_l{7m z?RTg&+|<<4vQxC?8i&qyp=v7`2{!5G4UlUzBK_W>H|#4TWiHyIdGjbc-?Px?L4kKR zUf)NKDDnLkw#zfiS9ka#F<+tYcz_nF*z>PH!*H?JG+3jQtBV z3oX+hA3Y*IS%Qfu_Xa)zfiI|fx!zG1EjOk5$#l$qg*OgbAsN8med1)Q%6PMT_~z#R z0JdIn^EBHC7W+5$=KPrFXLfI|b!kY_1~{Fe@C&uMJcs)jAZy4>6k}fjw1;f{APl+5 zZQXM4YUc!@JdFyDf6&F4=+>|FM;OAbpw^s9AgaOt^8�P{)<#nMUYOeH`UWus|Aa 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 LC14G$x>K6c>E<2z|fgbxhiY0Xn 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

;V#++3i2e?;3E=o#{*BMG3Wjj-dM_6p$r@8B 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

h5EA(eQo7V%-}#XrIcd8^ov=cLTV zbmUKyGRUUBgcdb+=^pr@Vyh^LoV+konBw(B-~4gXRIoVDwr?3t%LXfI?)IH-d=s^q zL9Lci97(jk6ay%UM*xH(j?CQtJTPgKd|3>X#k1ipB_tXH1Xz|BGCuxLei?&SR>m?> z6x~M$DVB|QV79&oGdeDIxNr^*-;J~PkFEtYN5nd_Ln{QGw6DI<{|d`W;QrNp)@!<@=tY!1n34Gu z2Ox)F(!W14AO&7n)0ph#OY}#}D4E$4&?}KD`N{74L$TWzX__KJ#dXV)%agvlBU3x_ zFRN0kqSs67hG*Kh0PZ9J3)OqKKwQK+lGGIVdK{*m{bo5UX}$HFiLq9z8XiL$>Rn;l zv2+0IamRcuTcjjQw@(&9WWsJJ$*W-=@4ILg&)27Jw!i9rzxjM5JZ8mhdd6Jxs@=JK zLe3JJF7SuE^511K3An(G$+yb?A!^&q(|ElzmB~>TBP22bx;RE!C%b+0_q?=IH zkbO4vusioB30HPq9eqW#Gr!nb=!{cNLJv>IVd)zWj+U*VP zOylb5Nt`DPXH6X?r`x1x0LJh&d|PxTQ_|SVm>hNT1L+LJpW#w$BU7K%0Xap2^>zd* zZXM)sGBcyCOOwtB^%9L^cwY#~@>*_@I&b%0^oaBM69ip5%L6;RwcH}*lD!sgHs*>6 zdW;u%n^x!U&!7SPG&f}cUMT?3gZ;Z##ggL<b+76kQyupQWrJ1x^LtSFPwxtITlOITVb%re$&P1=gXlEM=*1e9yL%-vMLY#d z_rbD=&h)wDNvj1a(;4^)5R!os>y=VxjZRML$)mF>eM}Pj{Ke+d=rpTsDi8KQfef2b zm)^$RGBC#aqVn^8@`DL9gdi8+8gGiPvqg2F*{kN9B<(f z@McKD{oe4O*@Am~@71b?5Ylymo>G)n;_uJUpjI*Uf*!8-^{FL&oHxQsK5HV zUjf~b;3^EU{j&$s)#XSm&c-pFWgL%(Tk1U2G{Y14VtkScK}!oGP5i(yYGsEv^*y;H z^zS_d7-`Nl^)mj3Qjm4c4C7U-fT*58z;GpJbn^7*_&;FKUw@;+E@(!bE4-*9(kgNa zvMQ))-%DHL1x&m&f7LJZiJCldRfr@LBdh%_6?aoP4!g|yo|0@++Uizndpz~=>kAG1 zeh>a*rkY~CyLyqe0sBsvhcaU?f(~jE$NX-TGmk;O6AT6#>KYa}P<m%8R!f>|!`8b*z#a=8)v~^5Uj)1 z+WEiX4V$`kz*j?_iM)_9>*dp*W1%)(0b^i&a)_HPs@dtd(Ts-5Dd_pz@HSzc@wpxI zXef=e9!2&T)|JnbjHz*8T!vEudo()Bu@gsW=_rFUYI>LDKl=vlkb^PT((m=bdF1wD z-7EyYvXgAvg$ZdH%^KH1x*W_L-6;~SEOIj$9wX8xdf)=uee+V362ih5L~tl9T=;DU zhdR0RcDFQecpo1tvZlTOvCF;WNRolm(})z2dML!_5A$GF^88}$q7vugC@U(@Jb|(mSKFa}=xW1Zdiyie&lW1@^3a_62f~!lU@#*h%8})R0BF ziRp?%%T{4@>PPetW8y~uaRqo4qma3>EdBAIotG@JaV&+#*r_C z5VM9BfS4V=Ix!Vt4<{rjEEDa>Tj(HH+iaeempTx8PYYMp3BBcB0jG;>;?$OMvgtr3 z5Oj1h8gUmM^Ym+#8?wgubH_Qwp_vSI!G(I67F~7ugAd4OMIHAXd>TWmZ3DYS=jh0d!jmF&woy_+lm4dQl&f_D-V` zZ)@7CWUM|_1FKSqTE$;#+`LNPR1m2KI+<8bSc_SA?8~N_M4Ez8@J5*mJoeNQ=0L2z zv4<8qeJvDob&z7hDxx$Ah%!t3Y&Fwx^hCQ7DlXs8n|m#my}wIa{bdt8F0a$no-$@>WhR#=aS|;^M>(}CloHdpHov);3h<7A z6bK1z^=bC-{rzUau7-x#x@5Sl4L0n*x>)v|vK8I9bIrQHHYXD&<_X0t(2z)~a@d)~ z=w%FLbJ1{#WcnMq7big;vI7du7b-KH$bOb)$GCj>%y{p`2S$EgP8bcR=jH-}%m}KU z2nt_0H$Ueq*l-yuf=Xg9dX&&)4%;#o*G9`&Ddrv>0q$BFa8(R>%rOx&x}~COvlE$s ztWeN~1x2t)^PtIo?<(R9`hrqLgYJR}+SE5B*{X+b%%GM@_EIjl5S2dUk zF*q^HNa%<4Q7Db`;{6!nczN*eFY-7bZB9})uqbO&lQz7ZglKdxt00dghC#JEE#eX>_Ba^?gZCbl-6=x z%T5q#kMkExe97M8EYSH?E(zwJ-#eJ*QbJhWRU8l7CP@ys3UaCCUmZ-a+IEtb;0+M0 zN&%QnBzV$3gjoj~Ykb@zqscgf) zujLR&{R<0|Jm@w#QJ@Ayb0qI_ko$?82j@rM?*_0WduJ$HB0>t5e z4?WAgu8j5luHP?yDb=iu*r-94!Bj%Q?U_RJ1vEh?8Ysp5|ay`%efdVq5ON3 z%fD7Q>Z($;hVTOqgd#(BT-ZwNmL5-OdNEZ@C}a|WXvenLuUST2oA8hZ9)i%QdXSO2 zWm+IH;A#4Un|Z^J=xeT|Y9jLbJe8z>MLn@d-JPN&7k{AATd1ti%TI>9j=nEcNLanZYu@x89|qM8Wpn#ma!2Gu zSY)sf#a-oE#+f(snSrq?v6&IeEpHWWgD#XNt*HLoLd@)z;fScR^+B*w;}%Q>*geD+ z&qAqy9%XorPcPBZithG01x*nWh8m+$$H$-(srib&JrEqWuhFD9kW z!ZVJv3}x4y@CtC{K(@9yF6DC&zi+Z5*AYvoy8mn`=c6D9F-IASFZ4ek-}vS{6?pmG0L9Jp$#!sJLE;_3s&Q))gVC7*QA0EWb6x$ zx=h5Rf%4A;WJI6mKvr6?DU8ZRyvM?pJua^im~s~ycl3rBI>AZJsn#=F#PH-$uFFbdP zC1(pBriQ=03TRJW2hiaERHGhh{l3DcfA9*;m@Z%aJ1gJ3DQ4pX*W(?IgJWZfSfLA2ly~ z$3pOr-#84xctgHcK2-+bDQp}u#i3?2$^)5HwMGFLe;E5FaaFwLTnrc=HH*<^3wMk) zu3T(xmChAg=T7c!1_x&L`Z!dIxAf-01P1D}0f*=Vb3*#P_t1dhXAYU0KTfXz5KqG5 z<3KFeAQ~-(ofrXABmE0yOF93sz2ZOcSCHs5AG9LCx=b?C4GtF*$dzFH-57zJG}eYf zi|Jpm>TV7W?ADoQ7q8m`n*TOLVgCvY@lZ6z(RC|L;ef(dk8VaJ01an`Xt?OCfhXI9 zJ^v>o-ogrE*It0VQ=+qzT~vO)!TFU6YyLEA)s@5!qO&sv-9xtiYAeDgdUF!~I zgY+5AAth|cIh&1y0~Jv88?j@oci#ODY*Hu_cP*LCyZN7g zgIOB-?Hc5M+BVG*6?m$6DxI@UV~k~zJa-%Tq4DJN=xJuxWWhxANR(iO^sVY&9b*?g zTRPYc8ciyQC-w5%pUIT+Z_?E|=BzdQz|#B4?PtWjcOqW;dQNSLwgsM#ht;*xWV^W; zsO*`@(qH)ui~AcYaqEbq^|#3|bry*fa(J?w()^d5qUMVClsb{rsA7HPA$hX zPTqFuw^r!0g*#R=6)bU+D-olaEW$JsmqIrf!;zBORk3BCG+E$}-f(-#cHJ)1yo>KL)-9;v>gRY)9jkJ+(~ zo4O$5Zu4X%OkmqAH0I7NsXj7M6LD2u};O%dEC+;tnY0eqOJ*ad0#J*`Oj1cf0a#wrYWc~^XR+Tw4c!5??Ox{ z5u7_v!A`VeXIh5f6ob^ffleCVFKypiptqc-jp>jdu zSD8KnF@qTz<&$Ruaz3EN;G3!W#2aOjDOBL(m7H3v%XF;=Xrp6VIu4apmSI><<0>eZ z6n7+dS>*V76cQ!3{aI2OsM`bOJQ<{R#=I*cV6^@L&g#CMn@y%3@qz?lWlC_7SkPPT*S_uBh8&NN=8BlUk_!BVGGEB zbIZhDHL)qc`5lAsQNt%#nI}hent)0LA7&b%A(sf~7(rMT@S7jeJm5Oj1i#uu&DSM` z(M)pxs3sgfGvE(etA5*4HX14w6m4f^*c4Qmi^jOIU2eFHQI0W(%Ap0DOkugUj@!A!!jb6qb+v@tSL2%9o{ws?h$Q*=qI>*XB!GQmO^DakP??hVu{_a{=>`~Oe) z-|zLD>+nv1&o2-K{&&49A_29)#Hk|J4Hng^*91P6)ePiS@O7CI>|$|}(!}bvR%YTX zq#@FAc82XK7&(WTz-5s^MV2b75E{zq>FFB*_Rf@oKslJg$3YAa6EN;*dh1PPw2LGT zrhkr|K6aQ9cR|C4u6r>E*3|G3(N9`r{}PRRfMx>$FFQm)uJehTH<#xT{?#V1HOSpw zEo<+ho)^ckg14`r^TQnVh6(%LDK49L+0obqJWn=<`wM34>qS;Wn?Gd0)ha>2G+i2T zp~wL{uGQgnO`VzXctrzm=P+Gw;B*nGqQ&1~OM@yXTCWusYL42`o<8phHZ_B3ez|uM@p1Kd!ka= z=xK}uBIXMIH#lA2rSZFSBe!0ko`|Fl5JcqI6%Qo7z~vVbm(6)P4}Mzj*kqtK*^s+e zWd~qO-Q#m;{j%*86I#-`AP{?e@^IDd+SDP0{?&Cq+ys&yrHu zGiZLuP0c6(?Z|TdV}dexPXV@L_*gtMh}C*dx`|4=KuSh~eRkull@qEE1<2(|=gV?nTGT{KHU0u8*0ff)7FBZGVppbBj+y`q zZ|Sq=gwX_Atnq&asHTr0I*j1Q)A6pM;@T+bjL(%SvsNo3;p{*|Ulhx%NlmavG@AK- za>)~2?OWUTgn9FNXUv*s{G`&*TLsq4%OZ+{K7QPpqvJ>zO}^%CaKekh!}6rR6Yz7Q zg0JCgFEjl)|^j?d;H>A&dHs%C7^Xfa&3kdb>`?8`K#cfBQyR(6P>i4uH+{WY*Ug%?xxIbFxDAqQE@;Q+p$zJ< z%RFf(QY-ost1`(MG-8c>+Km|fGo>>T=)RKCtlW{wcOy&oJT^PMSd*onx!@pZ);10{ zPQ}OEC&)#LuHQG`DAR`cmh5;}`Gbz_6D@Z<%lTrKuBb~mmoRda9~j-si(8u6Qd7l# zWtSGnJ%M_G1A)!u23X_h#;mZIhCWXUvxe?}on8NBYD5Eflzx=9vi&|#jKhz%Jw}eS zPNN`MwGE0STXhR%&B~PiRT5+i8DSpOfb39jxr*3;$~0ao5eB}9q7_BP9A|~P(^uy- za7X+3LIQARkf~uChKQ73kLmy&PF|9Q#g#t{kly?}IaWVeqm(?#{z1wBzxTtBw5@D68?+G4{_e zjnnF)ZOu0o@ZBx%4TA0d)auEMSL!&MoPo}~58@y8Ib!7}uuL@cP$xx5hVEUlvddrC zTj?k6ye}`4L_?X-gv={qpXn0O|HSvzhkFtb1TFPWtoJz?;iVc7gD@&ZFud?J>8dcs zxDp;sm*kmTnqxeh$oc8|(#`Zj?LhSFhq>jyiWd797C_2pfng~Me9`WL-=JOBo4|wq zIB!HHK5uBGLG+YgMjxkfW)ij0GqSrI*3He$(cT#^Tbp+U=gO$oENa#|Ggn4sBZCK5 zSEbUDdbw!{Y}zF#LrBlaBoHT$8O_SNd)i)TtR*ha?b+e{iT?pEeAf33&ExHov2giZ zye>IWh67Sj6}=O|;R4tACy<^n@o)U8R(fp+!U$=}gs$H%F58$jTD*(=eUkt6{PJ)6 z&7UcEw!Y!-;IZJNpU<7KV8FkBk3QMFr~KlX<-)RHAt9qU-Z`Cew-{8*hnWky;l{A2T9F;9O&t(SRT^+HGby;8<1)Xfa{qqA+FXE^{!1_yKT zW$YvAdt!9Ht4x)>117oOCTRgYn=m`XgHtBd{UmUdk#2R5`b?oeWJ*~RhD7RDQ1jzi zk7}lI>82X%3Yn;PB6h{GN5(%2Z45*Ic4fp!W?aOB{z?K!E-M&Tv?3fw4c+{Z2n!Kk zS9&58sf)q!thOpD$yUKssSuYGuy$BcF0h20R^5eD`clkWzSC)_7hJg4u8%+Wzn+l< zWEYjZD#%z#skp$8oxN8bLrWK9mFPnM+s*;QTHVmb8DwQ`%K?6z;7rD*p5U8yg7YZh zyHm(YY6ha?`eXPr7wJj;_Qt&hgFoaufh}8_El-6>J^OCwCwLOmak40m4}7o`bw6^D)3H_{KTC`S z{KW4*2@sMVI(D=!Q2v6=?e;WjL$d-<8hQ=0@3Lb4)_Ff@JT+YE8&$|ZHHvqzYR5}6!7mzru94Ez9nYpbH`=^l2QR02+Ov(h zR{Ndo4;3IoSXsl833S$cz`gJJs}PoMpGNfuGWU^GJ0fvzA|MBuClG&q6UMgQE={X5 zW&cz}|3UQG=Y7)$9$&b4Dd8(38ObJ>jQsn_w|sRo&~_a}y7@y4+(ZHs1yw?UX)|Qr z69a^>#L^0WF-m+i6mr&NffUgpp)Nyg;nMo2ml6Orz~5+P6x2aOOKYIs*xX@vAlYM- zm2uDa+EZ}r`GWUmuTfzyu`#@^Wuf9+Bc_2)X^92b`yK59L9(s2J$M?p{0nSl8?a;= z@?;Ob%h2-IVL3+z$aL*}ksK(xJA{w^ij@Bd~c4F+Z!gUN+K40y74 zzuz|XM`!(B(;e;2V}L6004vgNwEj!HTo$t2`!MNvnh;(rlJX{sZlzYoA9EH|YeE~q|YmE*`DzN%s z3tj#sZasFmLEltS73;8jSy@7Yy6V_H;BV{7A1@(sEUyMR4O$lRW~E^Mh|$wS&p{uTHo7U z;-3fuJ=v>UXm@=XN-E{xW4Wq1IJP4mW2Xfe%&D~R79o4H@1Fr|c#FRWG7C?d&_n)c zEEzYqhV7bQk8>+4@FX6h^fAK+B*kotrm@Oae6@oL7+;vwlDaW*Io;?Oxx2#yE2<_8 z5I?twUBoTn#n1DJ5tKxigQz)7I$ajq6Nb=mh)`yx^380eGh^FEm6f?{KKX3(8J(9@ zXpt`xj$_(}q|{x7)=6=Jk(})rgM9uOz6xG8tK4``0P|Z{*)t?G9Z? z$AI~|c&~FjurLVX>{DatPqST=-V&{df8s3ZwSG*io=-(c%3zg4gPU3-@3UJO-Wm*x zl6fPK@229(nrK=Gy288xRotbwzq9GT}i-|0im>a|3 z!BI2dg5ET*peDpg6(B!a8ym+-$YHM^_K_$ZkA9dvOjX6_^}}7>@6B(X2DvHDxTl)1!ik#&whx9e#E-B{JhG^NY zC#-uMhIq%A$b*rP>l^#6+m9&}L#exiC{Q|W{v>%8JL;4~NX)_Jv30x(%>d3^OO}9Q z98%L)C)1(>bFM*CM;QrwuKG*HdkNH5LQ%wA!%Y^jX$1y%T-VSLrczEcG#q_BbbsxK z!`Sr>*>$tQd$Z*(5GFZG(C^fnwZG+T5HovB@$_7d9p_fx-W=?m&AYNjXw=3#vb6;P zd~Ce;gp9#TqPJ_M@Mc7^`uAg&rW)R?<2v!GOe%RdW|tB>W6G?}*BlLq;QKsu+Ye3> zeUQiD3seXTp{`X<-TX#WNd|*(QIf4H3@gO{!t(B6M?s9Sgsox|PYzKf`hM8juWs#$ z`+mFr!vA`S#Um!o;r4?O{2V44T;F=qdq{t?bcZz$(2$f?kF6qyc*3YeH%~VXIk#jKJCM@zYj*m}8pIDtoyEU&5BK61yg@2}f_! zw!iQOm6y!umbtME(!f|V9e0j3bcEb&?{Dw`$kr3SicmCYZ*vVV?d3<+-}uHnSA+z1-hKrjK@ zI%B%M*tHf?Z3tdrHA0ZTDMgBmrqxOKYXCXb0EUh0EE#)q;>KvXl}aw#>{eaHMO6a5 zblD~+!chbTxzg0Ca=$g!s^c`XQ|5;VdA4l8Ase`J8c@I!!ZBQq_X%mwzPBHC?^FD@z|}?v6qK=hN3{C24`MvNH-cnZyx(9T zQgFTCIuK{3UD?H&y6a!MSHg^5jhis_U;HLeMe+SVVQ`73_*^04C$~(6G6q~Iuew>w_I2T zJ-XuUly)-9^G528kN<`vde==_n3H0v{`rxf)qa*^h9Am6l8?zQe5+-(v%H)ns6-k1 zZzHiloVB&o z8gt~qhoP?ktYS_#lD8oIPes@i6N-S8FJ4u>_N6{$ofJAuv?eHC3)vkFk@`((HM8hrgw)s7hLZNVpC^D6pU)w6y z>*(MaLMEM~D>ecmSa|3#AO{6q(k?%Tt01G0;~+Q3QSe#ib3Bmq->0w~4v%JcT6>*f zO}Pg*wbSSHwMNcH=4F-!H-hKnXCL#52k^CtndCNykV+B0pLF1k+BwkF>MOET5XZ=W z)=;B8zl|x|Pm!^T&z||r;=|#zijal_$^Oc7N#@*`{;3s0d!we-U_XDz8K&0kwnZ!6 zaQP4&;jLkF84Kq9G)KFIB$(3r>ZQ)e*i~>MK!{lrii~@)Cx&QejLenk9_!jgAe=^GbGsAM{eg5+n_rPbF<$h3Vl6rF&| zqH3Sjx43qs@TJ1PhiUgvmU>mZSs6CVJLJM;&4I$fa!2!f+>!UeiFHd40z6qf2RqAt zDE$~<1O+V6E0h>B?nC76ZeRRB0hAZZ^Sz0Hv2lU&<&{C=O`x39mW=&|#tTwV-Sx`Y zJWH(o32enIW&YD7x)fts{H1J&c)CyHd9n4)*8an7`0ax+ zqk-*X1XyR{VObwU_w70GQLNh|^EOB|)_jjrlAb%hFb zf0Gz-7sI*kltob@Zq8=It~EF|wwUX^kIZ8)()@O#(I58O^J>%Mw%z<@;a*`klWJ!7 zArWZH7uV3=V$I+;YeY>xMK7Kw~{~h0)c~6HUx{upYYSq;1u<|6;>vdxn7=WPPr+|28G8=TM7u zr|rzXt1!^vB?n=)=YwTYCEPDYnT5B=WTA@TFl-8U?#lp0{KY(l?bLW7<~%Yugv$W^ z#7yDDJr*c90Z$=7I36~8c6)rFk#a44h2w#EK}+y!A90684|JrD>ue-CgWMw(yse{(qBHB<`dsq1uU_<})&B#-=Et*QnzJ00 zH+EH3@#1N@69JRlKeJ9!8SD-j)R4z}GDE#gk3}}`V5TaUAjHa8HPA35iTjF+K(yTW zkS6xAhHD(nRcOl~?e7j}NTBH7Y8Sj3ylPz08Z%fqx)UY8#e^X-BUk0zFkF!)f-5|x zdC(pJy7o9q$;!b`2xI4GQBv4=$9MFftR-yoDRKxLL9TIeZj< zQw)iT#?8DwT=dXgYLi;CeR>65A19r+o+{979)IhB2V@f`gV`V6g8!`dSHV-elPyb_ zm?YnADpnmL3<@R&Pgn{CqN==ziEbi;IlbMtM5M5`P6cjB%MDkoHmC7AP6Shb7PQYS zxwXqXd#$J@}(YXH5#ge76+zbb`0 z)Z(#UJ$Z8(##mdzQoGKpatup*!w$D5ME+yk2ZyHw=1WTO&L~rr^q9Fbub+8k>ByQX z7$k5^tzxsw|%fKe)aF>e5 zLVCwp8!Sju$`vEZm$>#J3K6e5{!Ho<;Rzk~K4QCHdq^i+pNC~tmRDkvUp1hy#DEp* zdQL=S&|WGIt5(5E<{kjI_(?_v$~8 zyS@x+b}{>O^R}tZOl!{7=!i+M+;i#uw6e85GQI0MHHi~P$P-*nNjs-;BY8no{lhF8u46+;0Ow;w-)Bq`E`AnBih>=a(_%T*zSyV&Vyy##W~VksXzEw zneOm8f}!Jgj{0?y%6a?tkGIX&KB9XZ{k~mcWlwx}?)tf|r6Z;}6%-1%vYb86oxA>B zOG71|=HJs1rlBA!$1W+JYe#Vw>$h?0^Whl1x)J~;$b1Yq=I}V{Wh=7RP6V8zr)Hk` z=z&gzf#BwWJ0=7~EGSd9W5}(RMHJ7XEs^V1)Y8T1Wf$q6^4D}dx_<1{eyD7$;Rk}| z2)aTDzHH_L=?|?{~7O4ndM7XfWc_~ZB4WvY7-+$E~CK^FTGkAT` zyZ<`6eMBIkhyo;SnY^g+^;|$GkoyE+4SuaNxCDKD=?Aa{J5cPu-b^bhP zhA4qo&B{u>`SSOiBrAt@m>xn4CZ;)?*klX^7fe;&^xR-ds4kA43sxeZlbL>Zv_zxhh8)weZhkfUlqR z%dXS_#C$AF>R4`D=`dxJwP)(**AGU1jM)$PLDC;$@n#^bmWu3c~mPE;aBBow&SdXbZ%2t}ipMZi}~j!Q>X(QP!Y;*UfQ`Rtb*tw^oT#0%&ec_ACMANJ73(bVq6WU?(d+W25D zT$@-YRB~@#%rD4MJ=N%~2a4|dJ!D7r^x-XkVpOLti%p!V6Ht1Iipp0}QH#Sh%Gws- zf%o3XY2?9bo&B}Cob=VYO5T*m3jdMcKhfRFglli8hnB+u6+XxK22TteM8q$9m~mUn~@*Z?iDnFe~yvIsC_t|;whNuy6aY%6td15fM})-@BZu8O0`NsyW5 z6oGWKvf!B~f6dbIgAmd|03<6vK&*V?61!=!2|`uI6HH#9bb4N6rkYa%Vx)m)5J*0^ zo4Migo80`*%9m;VR~9?HPK0ZIvqN-Xa97`kf}`6$zE`dvY7H~%lbLs0%Ohr)Us!W0 zna4WWb$|V!d8LUEhyo_EGzjtdam70auQ*b0=|2agt&aN0?psBWR-+%$n2xJ{@Y-FL zv`=huam2U8Y-Xa_{9t2Jh<*BLQKu{9CleV<87<=w|774pn;8jN;M3A=%u@?Gme|d2 z-{!LN*i|;t^*~O+MNqnFGFhOy~6L3I<*A&X!J{#{>kS3(oOcLWX7@_~-IxM;MvvT|}K z;_URXAPrMlMy;aDL5`gVeaP+`%H8Dc`-zl1ebmKk;gA`&j2Ct5F}FzJ5pbG&u5boT zC4%I@nAL_rEs)nisbyWM#p?<*#ss)V#hPjw-{B{im4IEiQ4gkwAEQEu3IrXH9#v4( z{MwkW!{22uxQ=;%j0~c(DNlnpuv|H&(D<9vDiT&htp^}8wqNP}v&k293OiQ{LQ@L| zib-zY_W*JQMLZ2%H^{1PUIwC5GKB3d(YrnRuK&WO*ZF|!_qFT~y+4k?tKB+BRJF4* z4h_WphP|%a<~0K37B{FI|Xlim)My};>q>3DK3hRwl{hO ziZ5!)VrGP{@8DI{M1x-*8kzprw#H4Zp@;ohs2c@x8`5PUX+x#4I+4^z!yRRYAzFxb zM@_^TE{(r+jip5QA4(^{8F zH+H9m^rIef*Lt6vziKC3C+8JCoaVih`vWNldvX}RYDp(a6`mZd3L7i$#AOUf>t_?p zSSYMxetvi)l=W`nr9@j8W4#vSO!3q-~<;M3~KJ4IrDQrvNEl=|S9q;n)Eu z?SrHaFIvA_d@|!Wa#7OPp&(OJE}wU`1+zCN#}@)bfgKZhA>@DL5smb|9QTGy+WQb} zrDwczZ>@C%-MYlUOA?OA*sDUSc{e&T4P2n>@_o(SbGe^6K6HG_70iw=A2c5XUCEb6 z>$w9NT%f0VZ)ua@!e$ew#YPp)wSyn*V;-3x;%QNeFd0~a`;mbq(`d5dM*Z%D@EL@{ z>e%h*+s9B;4m=WIzaa^bm0#{L^pOUFtHUJ)%TqW{hOEA_ME&YbP3%}TPz>Fk60QlC zlSi?tqs+31%Wt^RMZu|uKhkCe!+^_9C3Xpjn|pYh->2$Emm{Qlt=_=0{wGh*-2{bB zhac8+i+jBwQ0B=rV#zdewvGTEUCsYMIhNGxJ6QVe?h2B0#-)B*YQiqD(kXfvch^Y= z9LRbof#l2_WyqCbKXiILB#t_q%rS!#Mi?pNy3CpZ^Hw&0?-Nm;e~)fu^J^#R9{X;u zd6w~RYv2FIV8Y1cWg~r8HCI{J9!JUT9}eit^?!Z=7F>h<2i|H}ddnnj?&kxa>ywV@D#P+&{- z*r7LFN@T2V)-AWuvb7Z)j_}QH@9^c|Qd`K}%9?_h!d#JUc;|T!q==2&6oJs>muDLM z$%DW1HVuoQZUFytKTNZ!DOHVfMRz9MdOT^KkIo>){mnXRnqy7lj+nv?0z0sZ+c3jW z;VG70>%dHlXeoTsU{sBo_J=LqY0CmVk>*qY&8XJK(|pFi6?x(u3>m(R&WO2_Wsj9Q zoLhFDr$=w#Xs8Mtd1;yR_SpZz{C0`=dN<$qbUh=Lb))-{!Hf2MWrLg7eW7uNDsefw z#8tV#>%jVjRJ%#qDlkI2*by7vQ6GzheL}KL=FrnoPa8wLG*i?l2Y`e2%RC)BUwY=|WIxuuzqC@xjmfmu>+5_*vBQ>X=VR8@Ef-#B7ZCl-wrD zHGfP8hIrUvd4Thd$s+LTcfIZ96-~z_hMbwG92Iy<<++6tt?Pl=B9!DU^A^sXAK65W zJ%dKF$ghbx_1D$I7u8{+eVDZ6fZUqYvflGr$bDVXjJFtUs#KKmcp|(vZse?I1PQsB zkJ}brh`DpZ$jr)T>N10D9v3e7mVX+Bp@DtaV=F#L*1`0I+!6+=;MoP;=T+^ z_f8$qK`clsV0M)jhQ|ABOX{tTTr1+5scoJf;Mv`_4{0_xhqokxX>vD*^?XyznX!)U z4$zH2AqG@I-y6JqCNIBLmgWivmuA(%0Dhp3a#3_4%ylSDDl}Y5_OjrH+{?MFFJvT< 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

{RJ--i@Tmvhl1Ah|j{d(L2-YXWo{9A0% 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 z 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

o|`G+Y~xKjk^4-;%R3JP)3okOe&)A<9WBlM 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≠f=nyxqy^G_cLo5~pKK{mwIRD7w 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νHig!;1h@HP7cc@OOmhl+Y=6g!pelkM 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�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 z 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'Td(eTuK)S7Y>># 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%0D6X%1jrrelleG9M;|t#yAA~TNC*yr*iw!1g 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 anIeG?kO~K;;fI~0;{u40mY*w4l-D{EO?Q2d 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�E}pr8YiDob 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

%g|_KSiZV}pZ~vq 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 z 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%0D_P>F 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 }48*A6Um@vt2}0b9WZMR%pY_`L|E$4np$y0! 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�-AJF#+*V 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

M zjE4lJ`Tx(}dk4vJ`_am>xXkJoL&l zpa{d_-yxDs43U+M+a{N)uT^{x-`}$ffArMf;lQ~QsQ6yMl5!j@UN{q*zPK67x2{4e zlS+;e$u)_OK-;_w7(T<1zr^8tao~-Fptc`jWJb>s=3F8#`VlREhr|v4YPl1}Fgi4V zll$Ms;XQ{iHc^1jIVd5R)zO1TZ@UkV-ti!o&YT}C;*H9As6bC{*wje@beXn}rffww zvB>}>ZrE^f%{nEOet}UoC;?#GN~sV-d#OIBO1?71awd}>65gvNI&~mFg_^}I0^#8D z${P?nom6qYki-)$=`5Dbo`>B>4`FP)1fWH!hb?M@L)IM;0NkPeKaJ!v!`Fe}zu_f2 z4$#w;!{~4kCoWyUXg-hLj&3-qwElUCV}?STq;VXI&)CGXe94?@tq(8B+&hi z7`26MMF~MVoq}8K2&GB|`N;x$JGww9nVuQEM7KRY33X>3`46K-0)1_w_Z#ovGL zY5d@|*Kv7x7^QL<Lq>nZQi86IHr&5$6aMWZpTou*)*+KlYfxe#895zL)OP=31DF!S z8f^(Wa|uyfs%&U$Hc7Z-jnaI%k$B2hA6z$gH3Bx11_5#vo7~1v%Nk)yJ`>J33R6W~ z9vA^ZAbSv)T(gga97z!&K6Bf`iC+Q;v)IJ+pED+E3u?uly^HocREQqXXz@X-6iViD|zQDhKsq;3JWP-+;c9 zT09p4?AVn=V_HKL`qBUjK0^f@SrH6U0R{$*>c*sc1T#xnG_7QA@Z^RgVZaGNL|ynE z1X{FAA|-+HXo7C8>HmoD=*q~5<-1K$|t-&fzdDRlN>lV zd>McGy>H>0um1?c`SDtbSw~9_TOQbe8$NdnI{P{k(?nFcL6wgn5|g-S8MCu1EehC2U(>Hhujzx zz=D~x@ySiM;Xgn91S-Cdx86F8m76bM{^EJHdkzw9Byo?iIY^OL@=Ad$N?ShxafJCE zN!?unz;zw;%=PqJ=ViKx*8yxTn$CSs=nsGoG zrmt(KWa5!H<0BEgN>BhL1(@rvg-AdmQAZ{r0U=|?BB?<_NMpt~lGnI~&7UB>#3gIv z8jXm6Z$y%h63(U40*^_yOU8OqZGqtjdtSwVdiw9N=kyU&{A%eGrC73HCboTbJCl33Jmoil9&`;>`~ZVA~BFl2u76Fc(NBWJEci>h~N<@#T9S!sEMM#QC8Cj8B$uaOZ27 zGw-v2>(;8mWWz}|A4p!c=66;=gAMflxhi^Ui18iG& z6WX&`WZbkK@KJ$AHfD2D`2pFM?J zu3rZ?s)4Rbgb~B_b4VqK#f2~Bx>&Jb5tjbU0zCTQC-Lr~_wnS5FJR}p@8ZJX5Q?P| zDjvh&=p=T&eG+fHcNTy6^_Q@2#VkCqb!C+y-h)iK35b6bkCW#|@Pk(l<6oXRfcK7G z#CX00zZ#f0l%lmIhmGr2C@w*o-r70gjv2Q`6oGn$OE{ zXG`#%Nbid$e@7>$XoYm6u?jm|AlznuYl>S;*Jl&+5tt3_rwNFciWTfVcnDL)5?t3o zHj_rNRIYhnHIL@eJf?SC>s1T^xbK5fid4#l>t?P32+mM0SE_O-q{#$t9u^?D2|$qn z1}e#eMgjmEjaHQ*CNyBZ4cKl20!%khh@OG6mtO&Q}r1D$QP&Z_2-|!pFQ)>xHvjk`)*fT3vS)99=AMt8`^u? z66cAM2W1I?D0zy>bnF3Crhws79Hn8d1ki!F>1AwO@+!ar#n`OA=2Y3Lp66ru%4M9~ z_ZB|bdl>mbu?o-;%$U7WK~!HV@3OXCsDr&z8Yz3x;zs>BP;5olYxU zh0rnBF~p;D3RSF4x-lX<7l(c6Fo#(dMYY~3*1+gG5W8HOToV#l0FQjuq(!Q|b|SB! ziJE6d2Y#X|i>PI`LT!A9Vn$aFy4%`t@=6|~6FxdxX^s8tR5h>b0A?NRjcQ_tIhXKK z!h{n?{XF68NvSY`)(nu%r7$*9#Qu}VkS`R_(b5{Y*PD#D0k!$6WNlixU@<eB68c!cru5%kPx#~nYn z8R!3>XK?)dIsEn0PvCcd_A8j*KeOHry4Z~vVlf*6f;f2+fVeJ@$pEesjB(}zUIo13 z#mj$KxOQ*vKr)?MMdCZ#5aQuK9oMK6(2p z+_h;L7R>5GI^{@{D9z*Q9ED;9?|yIr|NNu<_};D$aN)`Xie;}h&Qh*}u8wwWxoIsP zefRL=1u)w%V}4up*Ck%!KND32-vX z2$ujVvA-q2Kuie)z?dKCf~P_3SoK`s1ITQdlJ_oLy{l>-U8h{N{>!}c|@^c z;gWlb%At_t`4d0_k2B-AIyU8v2EE}1UNW{5&92irkoVpYvwIO+D*wB zyRys#)c`X#o7?GZz=#C!M743C5pb4ADoHsY9eYW&f2ESS0+^mDs|*wa%+e?ndcAei zGnJTPMt_S7zpF}+5@G=3RdaxhZpY)GWbIkiv_%ZYZJPc?2th8D!MqtWaqQB0433sC zx6ciXD+T@hFwsOvoYhUKd=9ATKvSVQqzZnGJC?WFMY_kIdby!sN(4Gv&zvWO3My@~k?=OL9&)fl4$L|Of%o1*}r zQVQm_)V!)56R9s5fZS7#x(*iIFdrMYF2Rq!{~mt$*6Y}~`g(kN>mBH7ZIAa?*1(!# zBR3}-?}UJKw1Lj*2kB@F9ufiIF(5w$e{c{O9Sgv4p`9yL!%Ir*8_4=&BIxXD1xUaY zIyZ0ym5K*9TCUGvHj_1ZTtqAEgfUCRbrJ+=H-$NU{rKFDd+_k>cVcjC6uaJe8{d8T zCG0-*LDfvNf>PPX<)J*Def=0-diw-=J6o{v`uX_$-Phyx4U5s&-HMb;oBFp`=@=N9 z#51oQ#Xo*;FWx$E7Go2os@Y|bfJvuP=taBbCaH>V2F14NQBL=}LAQ%eh;^3o)Xv8pFb zV2qhbyUh;OJPaVX$tX>ylQ^9P*fvlwy+;gDlZk}~Lm;POqc^zmPdP4D&0CBuOV;3- z!+UW4%2~|qn}@bsTXMrIBNFrE23Q4_ivV{G$I$4jMv2g|QhOd}o5?nEvi9Qu%8aAv zGqj|rI_Tm8z@UnVq4*3D5LOvd%PqjH*mcQh_lUSeB3a9s0G_yjIuIoE#0eyFC`8^i zv4>?^bnM2HDEq->n+o+ybx9TB5yXh3f;>79NP;|n;4S>eC%%q%Paj6v_doz-(<$6^ z%Svqdr5)&--z)9sHuud@HKLS^59R?Qr#U7rb8ugtOw#Q)qX{DtGQp{&kf54{@O>ZW zPaVViFYmPR^EAh*BeHQnu{{-5zErCIsYJ+TIRGDN68re8S&#f}D zO*9e|x;QYi#AT)es!e9}nwSkpFWgfj8$T7B+9cHl=#4!o>=LsUYp~2CLTqv+TiJv< zL_59gHL5cbFazPOxg6FmT#8o@?L#5&$Hp(Ig4|KFONYoMQcUAFWQ~WK{!!yhhf>V! z&Em`%iqU)?$1j}0g8n&ns0`OUFUZ%pRSOp5b6dCLKmY3!sCXXszIPI<&z!@eWs4%G z;(-hj6myY8T`2k(O5+^GaiFEUp219b69~7|+L6PiM>gX4f%AC(#1;JQ_rHtl7ca%y zCCiXWrS+z?rhY4%msAI(pnbidi{^u5ocO~{IY2H2r@Ia8!WH1cCGbimcHWBT)xa0W zabtS%gi^Hkw1W@=&Nv1~NA=?!&>Q2az(V2m=r~M_%UF^o08Z!3=))K9xepKDaVN$m zC-L$-Z{ewzcjB#s@8fb65HDAJTo{)QEfZ%rfR zHgzz6+(&41`R(Tp;5#qAkE5rDP^x$}(2r7rY&wJGi{{~T_uh%m-+MQfE?gK$?x>`= zU>H-3|7J^f-%7<$?*4DFi@i92h*oQJ&<+3W*S4bDTOWHTrr~uC`{18EGrVe2feZ;pDzI zaA5aAOqBw6Y}awIq<;>+vh6{9aq~Tx-Q5=~)H-$;Gi+Qm{Xh%m!D53KZDdLW(R4&) z2_kG^Rpw4bWwqTfLI9BgwcdcKy63|LL_`B@tJX8F02Fl9N;;EF;dPaNgf00^3F@mr z7(&z_a6;#qNYCGr$>HYZtC4#li%N;3;#GkpLTYj*vC0b`|M@5ryr$8Q<=X%-JPI|=YwR_%pKxVIP+$Lae$q_ z0A6Jo`HaE$S+IFTpaC9@ZwLWeyV`1xV{{@9ujrY;T^W%K@jN#(I1YUmU6dr%}0A7FZ42H)7qszMaA3=L-D{i@d z6@KpF`*Gj4ZRqdqQTHp^nl)WeGAb?Bh&PC>w1((+ASTFRSa)@Ef<(((l>3G*w`wED zDY89m_6{a}bQ=;vBYRz9@!VBDSi}HsH?o(W#!)U;uY5xjc7xg3@`yZ6EGW~+P1veRQjvv@uC4 zY;c7+n2OD+dS8Z1iSLQ$iUz90BsUNNB1b%iGU3RHpovM3T@|paephFfDno*a@F60I zVyiBWNG^;E7aZ$*5{iomlGpwwb_ph3k_X9+geae`8!KD@T)71AA_DVSnh!vnq#u9| zdpD_>sU9Ii-{4Lw@%lCX9 zE9WeV8?wnZji$t#3TSFn2E=AlXkt3acCIRe%mfld^!+m0$Wa=v3i!5Red`#i#BvP+ z>|`LMlcVIjRDOQWHLpvWG1k?A6IbEw)Xz!Kngv>0(-g0m+=ckemfP{Q?>&jK=i!|_$FO$$Wz1PPJD$7- zsm_Ce#6rMaCvq|qTr^ zcN6ZsX(QTOTIB1nYOat0EK$%)rhD(YaAwWa0^l*gd`=&b&jTZ)L1zHqF~9zkjvKJP zBhNb1+ETlOLaAuz|FDxp0pvsgCjYJ}%of{?5Q1zfg*m-__}ra$~g1$^g)_wmx(Cvf)C7)oWYR?S5SkWRUn+1rCVH{Fb%edqz)dgBd&-nVSO zf(F+ht*$qb2Qjw$G8LQKlt_=Vu61iKX#jXv%pWr8Ch2y}+7Cr#s>G8qej_p`ABGig zVuYJO_n%1TM?*3xdAoK0b~@p@7NBNlZ;mp;D>TfV1Y&JU%J_c*qF9meecW!TtP#^VTj5Y}bP&}GTkV^J&VEhut z$Z5I!NqBC~lRz1R8m}dh->jMSfn(sxWgLI|6&&7o6oqoY{?4Y-xN+eM{MJK{V#m5$ zk#SSWF|V2@l{-Jl28vpY0j@ZQYEv71opCeRn_#yoN>UnT(ndD>y8F=qQqTbVI-s9J zU;U#hMQ^mCMPmf5VuQ;PU$HscFu!Y)x1v5t>{&!XO_J0@64AaWOSXDZlu)#{v|@I5 zFD?uZVtA~A?skeyn%26Tc)el%BLuml4DfL5hX1O#sFXd&90dsQ@}!>^F!m1?}wyo5+K+fZbQ|yx2Wbp_(Y2%?2AwaFnb1 z;o5n@)&Nijo)TZIuvR5)aPB37}%j}f@G zz8;ICFg1k(hmNCC@iD8T6$=;4tbtFdj}QYholYa2PNS=jE7efY8WdOJT3Y8a)qFfErw}NkaqIX)5b$;ONb@;S)>OV)u!IV4Q(* z28TFFxe6iyDWM0RWhLcK3W<=NN+L{g->cx{@xyrk#g}mY@^AolQ3tcTdhzAk?#EZQKa6=Z zW=gewmAWq6atS7kAqBWm4(6eg%dhICQe*YXUT$w<{^WigI*O#XhnRE*Myc`(N;$4o&b7jNWiwBZ z2JYK7&eN?cszl_6>5mP3mobLnkx`sFcL^ZCoH;X)O1bc>)e;|daM5+$Dp;RFOG^uS zdwVf|{(NxGtLAzhDwPV#h{g1HE-vlI*%`fJsE_TPFJu1p#9qil{$Jk}?>B z6%Vu1ZXk&wo#_!Tu~ZodO{X8po^vdi=SdSy<8H;gIgf+pqNp}WJ^&+Vz#AHa+`_BowN@!4;bd&g5e$`cvnIF5!2-`Tya2@4XfP;GCnoqZRl4!ds~i8V1XNp%ZlgJc`BYz;KzgP{{TUKQE4h@sSan*!KnwzV#mRg(5ft_V@PH zH{rJ)dK9;=SO=FnmJ$@OH#(95yCSF^1+-;ap3&cm##;>L${s4yvC(6cF6bYG zia{*BF{9>RBCe;JoXhA})*z>zn1qi@y&aH@ueJfaKE zs%DugKM<99cDV>l4s&$O43ZKt6)r{p&b4K6-Hz2bf9L{U+I0lqe)$F5yka%(zx6hB zwYAj~dAcf$X`vFdaquSP0MxDBc)47uvD)2~8?+s-8>$joZ(F}AonkF;!~0 zHCiYUNi1_R4eYA=pk2p7duuDU-LwJQZr*^gi9B{6d=KA!=|$|?yAS8C44_mlqwG~s zD*GswJd974aN^tuo_*sO(kTZ$9XTwT+l`x6&%w5v7UQPXbI{Y-f^5cx>s;HL@p8q7 z=Leec=Pr+7_rdenwdWM}96FEF7e_HMS&C_V2LME1RNB?vjvH4m$3xqFJ4qY@X-A^Sqjz%IN4Q#>dAoF)T&65beEe~gz8?}g6;UF=zXJ-GW9cVN|ywaLdU@fPKR ziVP$hp=dwn0LqiV@ClC61djn{2|aI(xvVM~6dOaF;rz)HIQ-g9oH}_CW#0z@(BILG zU)ug@{OY}5Ku>#TW8jI(_((O+Qq88zR8?a$cWHqjo}}c~euu}I!USrNn=8hg%DGer z80a>J403Z`uG!41zzfl^)OH<^UAt@pFI$@!^lU+kjcY>7U(&P<$<#pe++)cQiRS_# z$YruvHFps@TicK?6);r-a%m1HO_J*#>N?*cTRa4|Ll&(cF{zEI@9;V!yk;PY@H_-* z7szE@jE)v@;Pgopy<&3nVPZc6b`k*9b6mG@IquuA34j0G55PFb+ix7g>Mffvb538} zgSj>@@ksuO)J%mFT~uI+7l%0<2Wamn$x9cON=g8q5cKqSVCz@5;N;OOIDGmt{_KhW zj^*QxitEFTCs3;7gjFn!l^}0C^7~U5LCUE%F01llTz>(8~IDKIh=dX-mXtaP*#fRrH zaPS!L?NAEGq3G`Dz?x-?@xZn%xaYPlShipR(y3JZ88S>yK9MNEWZgWg117o72Bi)@ZU?2bCa=;`^#E9~U;!9oV2q($E~8W` zp;#;;pU-1*ad_B}4XN)ybsOBLBaz75ht?!k=Ifvs=WV4y80)mHzn4u?(?>CcB z%|i!*s{n4mjtTx@9I{maccbUgfzmdN1ELA`bQ=;=P$W5To0GziC^Y zqYXtQvO*z9#TD*WVmXPd?8L;N;SJ99OaXi|#l7p8TDrF6YT!#ckJ*@qDH60{6_3uR zfoQ7fjXL4FwJj!#5(PgZ+E^hF9#MX(001BWNklr&Tb5z9mU9m zhtAfN_R-hIaaI1rXTe#0CTD<$GASwsbug83w6$e0GFrsBp(`ks%Bc9BS_fO#=Trcx z;CqqHr191JK81gM;}r~!k6~!MfD`-oqqqMKI1%P;bZQU5Z=Y2Yd@;qunayy2zwcnAzKnwJVn5-YuK4ZQ}+koHZBOY}))R zb#tVy&)awlMHAiDav&rri(+GntlHZUi}`;#Bq5b4q@@p)5(r0wZLLJoi7`gjCIe)i zA&pj0>*ga{VE)IU5w18#p)iGg2amz?eROxX;rca;aq`qfc)lOZ7n#&g6_^re5mUIX zTLZ^yYikwoj>@bQ3Wb_UXQ)FS0_05wdGol|`#_+h&uUVBsg!fo?uS+7%m@Kohc?Gj z^U#3cy6nDckvC~|M*{(d#tepF*gSE~`E7zl4tot)U4Ui^dWk%+qy(6ma&WO+smZBI zy)i8q+%nKw2I{F^lK}!U;9a)wGPYL;Ombkb>|;)b*FkVVt!u67Te4>?lO&)}v$bH6 zEFrcT8Xmt%6}{S|OTr}&Rfhf&2{KG9HVj=29H%4;1>N>S4ANk zXTjLz7#SME@jb8M{dW$cPz=m3+cG(PapMmB#)DtNsyU0)WwzLyGiMiDySWuBY1$D z)(tWR>G7yOc#SbGB(y@-wBu5AcV=+@Ji*xHB*yaNsPy&+Ah@j=wg`|=7!BrbT(%nb z-?9n+^wRV2n2&c~-j9_x-;D0w&KMgwyiSHtqnOkHK~Cz7a9O;-d0?zPeu<+iO^|L; zge#=pj+_JOtc%sRuf%O1T*UJ~I*1><^%~~)&BVX`}-3*kr;0#+ z3g~IKk6wKSRAo&FNVRJPKjJ!p1Qlbv#t0(SP7!{Fi$J5znyHF;Y^wltclG?!}=Kr*M8?0OON| z0I=}`DUpiDP%L{Gohah+a306b3|C{uz<7!h0>`09ryR8A(#U08v}Dt0Ye}QMHB);n zlXj7E9XOQ0b!koSo^f82EU9=5Q>6-uB@cyS8TmpP6O$zriWN*wl`&PSpyDx9Jij`Q zs~|b*KzZ~zhfU&83fFOv$)wTO)rqAG=3?`WH{kXS8?b8WQq1V;N=|pSQjw~p7lb*% z^nGH{cVy2#x>hF4fGql`34FDUF$wHtDA8aHqIoazvPuWsSizxa0It~r*i-@kB$5%0 zN`Fr0P_()4Gn~J83Fj{jf)IjLs}`WMvlZpC2gW#3E{!E~f7*`_AO`}IP5|ia?8NNZ zvuh@u<#M?Oju#4r8hgB0ETUK}*4~fmkT;p+AI~E+V!f8x;FU@RrP3sP-v=QC*-ZMX z-H+IIO*xe2p$5TKWo|04SM~pOIq?5PttwChEjIeR%^V-kY-J^lF2`@e**ZvS+h{T*!^YOyJj zX*Jtu?Q&E9g_1QVCc0g>;d z-4woZ&!_OOZ@h}J!Xz#Zjp4)xAK<3V8^J+p)iE@Z>}4F_ge#4$d6gX=P? zVEh6@=R68GQ?I;ky|i$VFYi#dj^01?Dw#2-hAAD>lSpjw#hdZ zHinV1Sk3dmE)9Zqw1BvlCG=B8pyE~Ag~6*-s(qkZ3M;c3;B|%-(Zv!bAWlsFa06h; z4Pz(rK9NZgD}htVyco?2DPmSiDY7JuY&wl~Z7Z>6*>XJk;KT5IA7c{}c=zxj>^`s` z`;Q;T*-Mu(Ffxk#)D+5<0D$qUoAf|moyErE@YqzWBsqFtAv2#4MaUy;WNW!f#)b7d z4s-{2KLMoy7*7dBD&?Xjn?YB5J7)LwV%4IBxbeDGxaqpS0CuPwo&fZ!?}@;8g5^!*@+T^#4&8g4$2Gvk zXB9AeIWCnvw7U+{AW4A8CP`vqV~Pw|o4yu%)=@-A0J{^{MFfCbvdd4P{fekEhD1QE zH$o&0t7;<#`)UVhHc+y5k_7x54By}LD*pFx{}m2hI8`$zTf1g4?)=RM&^LcZ95+z( zx0uNt5pV{c#8e3Z$^~Hf6i0CaH3q0u_g;d}sTi>$a8jBo;N<&zvH#`QFfu*~07$th zY+QUDe)r*@$DM0$spr|2qCQvQJmsxzCuT3{{dG2`Ak~nB+W$>ldL?#N| zcc3+s!@9*Q(4NhqRPs=+5coca>kw(8Dm23kk7^#d2I|%{z-j#+qS7d0w*dghA?Rvz zKpl#bSHW9{58&Qgw%9!uWd_;*Ed-9b^YZIhc@T8{Tty5*RyK%XGnM4&K6g_i$aNn=(z?I*75{FM; z#-Bd^->|TMHf~zE8re`E+>}hy0W4wcz&O~@2*|}Yka;sS8TZ=G25evmysAM90A7_H z2aq5pVfA@|S2IJkWJ)NH!I7*Wv+)by4S-e9fL~$`P=ad{-TbPWFPUOaQ~g$j{rCvfg}m@xpeK7RXc{s96|^j8UWms&?>l2kxsd2&1KP=%b~lo9sS*1m^EVt z=FaTLvV{w7R*AIt|Blkxi#TC{fN=Vjhp^);`|g`mU3xQ!#pVYf3GfVW_YY zW%y(yh_d}cxs{nSXVw5y z-}kG)V-clN357zTCb1Hlb%utXQ8sxLFmHl|AD!b`e-@1Sn9QH4CB$1=GFP?j>gMuI zW6b8E1Ho;^nNB*w1hSC^&NtmfnOgunGKM?103uAR4iktZxkn11C*|N=iNLRxaGJmo zu4p?IcqhY-faJyl8oWuR6Q202M9Dz>{D|kH>@%dPqc?@qZ6Kr1(6%4i7@LMvtHk@_ z%|X!L)^$9tk8U}UqYu&Vin1t(W;Ddh5IU-;9c~wSslh(UErmb*}o-oq$WJa7PAxi)<9*1PZ<4?KdU{qyS^Yh41Y5lwCw<}lN1HoBFva&6H-Qng{X z1>02{J1Th?p^K?(%}@d0(9Fpu=`9<{1FmT&Q?dYt_O@L+RBI|zBsT=Gf=l{<${!+H zB_vxrhz@a3#sNf9-ceuFGOmlh?jCfvb>Q^CMT}2+Xlro+&_GV9swb>6dKSAn6Q*mi zT3BxWOptPcRLVi6T*munPoYpMqK8*m)kKjfF^wy#m=hwO$)?hH?5+p##s>#5UMS$i zg&~|daT2R;%5#ig1UlygKyhL?31Fm~a?rnU z2JZR!%^3aj7jXQ-IsD1v-@@-b_HVFi!J@z@QUkW;se|I;21#dhr~&{<19P*^{90Jz6Ju8vcIf6d zRp6#e>?!Wmbse~_gO+R-GrGF4X2~*qX2)GsnG_$)XYe^gv0TEH;US#8cmby`Uc~t; zS1>R#g3*aQ@`VB>r;0T*&Wh*Nz8}2=htirkWy*Dta_b;>XL}oZJ3BF_uMhKQ&%%N^ zvoWi;51nmoNTpK%2eR2r+^AE^+JF+!)Go`+a(|@i3p&F{QzBUll5+L)k4=HG8xDc-5_$q27bB=Gcn+dCh%LgIZ*|kHbyHtW}u7#Qhh(?5VScIqn@wC zBcmHr6I)d!OD&UmkV!x&**FU0dBxsT{yqUb&N1pSv}7GnrU{5YtZ|GkxgyhM)CQU= z09D_Y{?^}e|wZI_(xk7M@MD`@i2Zm2q0dT}wbTWcmP1l>6 zb?*rQe9yy~WAEe8%e!#l@^HXzp$-0iKSZry=Q)HqKBD0R$2z)n-vmTjb} zMA4Ntt3Xt00mjO%k3!9~7HR%busiy2saOsW&3r&@j*v(eY36HU03A$gi%e>$QBMjO z)(B|UCT3Wx#Q9Blp1O5JCZ7^3LLmllKOEambg**;IuTq5p#*K&92WJ>!qJOoF*07k z>=|y2$sB^ZH5^AsUPVoH83$Y^4t%pHSRMh1!@0m`0c)IqqrEMS$$Sat2L}Sc&hwE< zxf(5e1E?6SP*TjPgb>`m{ubP@co|-Oe?LkU4+md(3rkn6Kqi~5&x_UjBvo_F*zgE- zuS26uaBxl%fPdJIg%J)yfwq|hq7P+kUaYQ7sf>%2w=KtxQ$u+6seRb>-X8qz_h;a@ zANew7_x1()+l}^lsj)SHVj2GFbKp}&(AhIVa&Byr<{kqd90fab9w?V<=i~s&RXLQv zubR{q$ErX;s#wcY0-}L7QN@3C<)GTymr#CENn*sZM&f&lWQC37 z0uMCTqtCs)r3HQ6-B`19S?roBo);Lxh0Ls)tPzXcYw$ck0~wz1x@bhhJ?*-n4sA@1 zP`1D;k_iNIl{#XQIkA!5(^VEUqJM2uRVxedx$q&zBTnQNaR{KUs5FJRs{N43h}mKc zMZIY_k#}X|9u$(eEj9rff-`P;Po{okyU(%RKig`%Pva<;D|q#-cQKKl1OdU8>-vzp za1fkx6fT`k08!23f81eWl!r%0M@I}a4;kX2^h&v0MzL6|$*qLocxdt&8h(bLy6^k7 zf1x30lWE@AbNe_LW9IWyV2mN1c9G3?T(!y&uZpWN#+!3d^Duzm(={V8u@6nI;5I-t zH3R{+;JGRgwG9#)(Y;fdAPGl?P|Qxd82A19rd?FY;7I^n26!t$aj0c=RisMO=S{zr zkVmPu4+C(q>|sXAK{k|*kjcx~81|X^7KNRrr|I`(U?ohO1|lG^+}!!OCaVC2^n;X5 z#Ou2P6);HbqHj?~K|Bu!$KUPzF8=VTZ{X6{P|&ASE^fQ)CT#ho9muw2gGDHU9jeBp zjL;M#2a`CE#eCq(A&$Z*m*b{_F`leXtCBW^0L4N9$KQJs`*yvBiOC`e0dnaqwywAV z|NfJY;S(#@)#Xo!0TeaOc{cJtjRGq=gQNt&+`u)M03l^G#MPU@5d4Oa>4>qvb)8f5 zFjZ}@lSbhhkV6JE>o%%@-Ssf&eJEsl@v?C(eoq3}>vY1URYsA@3(h3#gmAA!1bw;W zI)nk=lFs7#g-h|mfjyWQtHATJ;F+Z1ql^h2?OvSMh`}|P6mjYl&lehNI+UQJJ&P+> zCNWl+M4>c=ithy=IABglsTkifa7d63o6*sQM|V7cw~rpiRJnvhCoW!1Yg5(S+3m;ABcLzi3D51o8&o777BP~=j$j}JhbLgcyP-KWGF$g_=}>}9+G$p#G!G33-iT=$6yTt&?3HL1Q*onVvxsv`;HD7}+s5Qf z7Xa!QVunDG0BCV2974bdj|JHxxmTuRte*trK(-9{5KF_w`&Ajv%dn@I@h0MA3eJIo z&rt9fGASC5Gl>R#w$Y9MaY#*=KrF5HFOk$Tn}9pvhZ37so&>H%HdjpRBl;kSevDc$ zQMf^0{M)ZTi$8qo8@M<&1aOYlTn1b3--uhkdOOm&w47uUUMA#)BvB1wLI9s9eDuIQ zVDLCcaWu%RaA6Zf1zpwfZ%WiyX}#$=Mg|9P?5&+Rxc4wBo)1ER8SP#8%GL+*OZR*Z z^SWo6=L8tQXdClO8wn4a{!U=WJ>@9^iW% z#3hM}{t*1F>0V3J4@7U{=&ePI4hRXbR9ZFc>+VQb*{c;?9v;G?ne)_|_PRC0#C8^* zF9E@Q8*jtPrys}O6UR`jRPg>wuVdM&C7`YwlQvDW|UU!fGbqJO+w0#_i^8ZXQ3%`4rGg>OsE_ zaN!SP0^n8ghSDJ&W>SDnENw${X*Ax_ecl?B=aHa*YXVmFy~ma}kt|~B8?v>-G#}cG z9TUk$HGjtf{s!8!k>_RO%hX769Tsgv)Z0>G8rRb27Impr1}thI+-4lvGW}s0zp1Lq zs3C5&d5)2DdcKc=;bH7McpQu|%<65!ibXS!PC1w=R!}ZgYE>SDG-U`rjv#pyAU7Sk zTrL5OiU4*fNhSk)qn`-@@DMx?0rrrM9tG6P<#G)`_o~%M;d|lhGN!r=U=RDV?7g2P zNF83+H4TDK1}51KbwH_m)xc=qXEj+S*P&=);LSq~g6jfUi}Giy&sc88wOY0mAFi~^ z#NM(2uS}o^F$9gmd2{uU-^2_K zN;4DTJN!Ee5da^*b_*Bw5A6>C-~yE~62 z6l3@n0Vh0=MPVVk3so7FIB+w1o`W%MI+z7E{|%iA&e$3Mi;(?j^$ zQ{P5!M<=%5cndmOTk9I?CREA<>@e9nt)6pz=3{&^4?+l9b7@dYK|ljpjq1HP4vlT( z0fS)@g<5CV6dOd7g#>1%xMk&!DsM-)0B~vY+1h$ zZMig@>ReK;__eu~bJk>FHje~|{*&wzGLT*MIYI~+V+jC03d)C{2|@Ev8b)NZNB@QT z>QOV&M&)2W4o0P%bL8_y_d&${_L_$Z1XpRf+A_~UPZt<9 zYUHVt2(Xb@u`#dF0U#O~k2E2enRYQ$@#AvOg4{`heWy6T%=}Wsfpi2*&f_KT4JQ~# zT<=+S4a1&~B4bFqj>4c4`h*MD08}!dg+tBAtG&kMfS>C58W~**=TAZ;U^oOl0s)NY zG7uf{*8t`~8NY~OAeg{5OZf&4j_>bz8UN=~-@v8uVQ|jT-jc=k&)GgRg8CLl!R4Pn~g+5!ZL{wfi6 zR!w3=gX+SN5a1dBUuLWf&HFY6zcxUIO}Vp9-bVL4RW<^;$|Id7wk_ZjyXQc@qrIgS z%Vy8R@hcZ_d7y~?t`=lcygGLTL2PK08D%*~S<+EsA7JyBp`UckFm)~aL&=1OT(cQ)Fts}9%(F6 z&6M&`UtOfu>vWA(W8IW^67SCj0F%XcLUjb!NyUkQpXf3zW;=*Qn-fcb+7`?DIi@4qB3$cap@8qd@G45>3R-h% z+`DB3a@kbPtD@rhRj{2lY5)Kr07*naRI_FZLTD2NZyp~jklh4Q*Zf8pL#0xQ>8Y1W zB}`6EVsdg4T`m^}ZxPFi%epecz4(JCzm5x|0{{nFG8t_D>=tZz z}90H;S**yqMA11q$EyaBI4P|8ezlG)PeuRVobpj027}*QM6^0ok^i*q^STITc8E? zIX^bPo9@Ms5NXZiuwnTcJiq@POpI4h@hN=9;W#8RCy*)=oJ0ccWbQ*Mg^YSPBBb7} zXlNJ-f|SFNN;xQ%Je(f5jHyzo#w5`K54zY%*UrMT=eI55QTA!-Ut!o&eMJU;})BgUCLB8|ccd=D5qAIQ(7+vIb!sI9&9#`$>Q zSGMAx{`eUjJ$D9w^3VT>uC_L;UA!Ev*=*2erYZ_(fJE7Mr~&{(Q2shHF%CiqI$E+- zX%-R;i)sR8s!*3!aa|YGhK)`v$FB+4;u7#%m#h-!Nb%l9%LFZesVMyunb0;;TecN< zvNfw=M8h)f(p@(f(NW38uy|W=iFBbX#;k=#rgmYPHGDcOcPQ4$GXdf`GJvI_~(>OdYkV4t>-eCa1 ztll=PUpX6Yt-=PFDtfiQn*ez8_-O^(9mhc`m5S-9hv0b#ke5m&OifMIfbofm2~12( zU~+O2rBVrm5cs}-?SkMw!_-t6j4`;b144FSVlqjw zU2Gd=Za1PEM=Zf{m9ZGnY`6fmYyq(dU@X}ZS%;!K<=}GBi(kILu8y`7H^i?duSG)T zW#meLL(-lJt=1@TE&sf zTFb7Y?~9w%h%*+CG+OMQBwFAxwmIUUylK4F&O@;O^b!2lxBe7|FP#SC9Jx#yJ3hY! z8z0*Wm(rLXx5%7Q?o)~6C#&COky8JuVUCeAJk~d&pm_*zITGMq+#E%9gMH7(@dLZ@ z?(?r;d~yl^(BILG-}&TY_=WACMmCkU2XRdEiA+yhrTJ;{9x#CeHXF`x?5Glv6n4G{ zA}B>+W~!Su?P6I!iEi8_f6EY0mH4}MVuP7QO(ge0;^2sNxxVeQ)JZ9b@*}!6huOD3 zv6bgiHLa;X3fI?`ZNY}+*P*ke6_Zm%D*3Jl{vkb%vMnvOK=X zkBc!Nm3Faw<5E2I3tRBRzk3t!ojis=`sRPd?|kVixMk&aNT*Ycm-(CGCxyh4=lLj> z%P5u0a2$%hu9gI|n}A?^e4@s<%BIqwt`nC9fg$d*xd)SuzieEH(l1&K{rXZa^Egz? z&`8+eTp}>9i=|EMRvV868GdNvqoV`=bO{C1-ayp;k*on+1XY=ETB5igQ(UR5CNRab zI&eF2915Uiq0aJ*D1A)QWNv-iq5L#b2=fJXP~X@c`eMT%^D*gTp? z^q@*`S+`KCf=wAHVzc3~jWcwmbT(2Zx*%P~3>SmVM$F%I42{TnQ-olq>w-|CO+JWf z3_K$H5M^FRK@6!J1dqqSvMSjGaIH}qh+?*)M`N^HH+udl#!&G5cr~Vt9=GoQwZR@q zf>lKG+*R)JCRVyM(niwhG-Q=914_tcJ2FWruXrI*beITWxr%+S91k3)hc4px|K)4g zf9@E3#*lI-Hs5t4ZhmAlD5dZ@kNLgTnu|-O1zz97=yCwz%aa2fgU2{nC6GKJ5p7>8 zBxAz;Y{>W&frBVJy;3gW$lf=w`pPT|A1Pgj+;rBoNZvp^Z6?`<@2P`%!fLvr40fXHpZbG>cm(w!i-N;vCTdV6IkRo88=r)h+qeoT(_z1 zY_)}H1J71wT1hl(v_j|A)=NTcdMlQi3Lmb?f!~uxv z#1o`*DO|tfI^6xU8_?03!K(-M;m@A@C!D%`0hNlEynoxcP#055*7=fG#?bf}%3cKo z1nC9+RZZGRe`XxxL&LSHpuMF96eNhdWZF3}#GPC-Pw7Bo*=HLBy14i^6qhebNtVS9B-1c`=GK$K{iX;c64WUOj_mLk%yPM_{ zODPr3IYuYO@!cQ3gsEZ~Z7nH0e8*~JGj(9gXB@>+Fz-7K1tCokym>Sa8(^GLic~6v zTrP*Mt}e`;JsXP_EkZV%y=L!=F%MJ45;zBPxeO@1N^&S(odvGKt(r&ksDt1{vw2nl zW3oVxYXF_;nrG@hZ=;LL6L)K7AQA&0ql$e@%m~G%iXbq^%!%Tg!bU{7hoSQLRs^1- z+L1BvLItiHHmhQJb^^rYagFgP5YISpw&bD0xf+1BWsX_txeLxX40`5FA{ZrV&1XQv zxDdpx#UG^vW|47W5G1rLB@a4^IL9`C+zik}#|nUw=i!f^`aA4Aya$|fxQ>Gjo7Ujg zuik-FE?qq}kq=i1!HNjvbt2quG+$912S!eDc%^!Cg}2LC9P|mt2&+CD9{GJHTtvBC z!jV0%;+^MrVX{~TAp|RCEx@0D<#+Iv?Vk!5;M@Y>vYB^mz?>*3rUG6}AUsiQ;AQh0 z(SXvjzM+yev7L`?jUH7%hzjr)|0~mB63hOj2&rUZ(;0o5Ko^zf&d5>fg}hPu}Wf>Xp<^bvt>!P zBRd}1N;00TtXVU060h;Z~H?K_uRYBKD%Am#_|MruSEj5@4i!Z`S$ny_V4?BccJ7Jl!OQ*aF=a0_Fp93a|${L)TT~$M)_Nuy+Ompw>e_{Uj`e0nG+* zRqrnHj1%|hL$JdqMZjJ_o<6cU{6y|7uaJE!M((Ahb02|jX#>E?!qg?6&TWKnhq^$yg<#Oqa zF+cmQ-}>zzUQ5#ib8|H$Ns3Y_MiiCLh&>P@{{MYZ(SAFVAh^u|vjy=XDO5fHi31$l zUMp|=z#$hv<0_;XTD9F(FbVGKRs>;1xl}AZPJvEkfS;=tyvzm5hM>h~r*wQt$Dh>C zNtiQnXQaejlIDv#nSvmf97$*~B^_uZ?LU_uuX<5|FzJdyAf|fX`pJg!l5CPtF(6OI zbY=q$EO)S?>4gV?waqlafBng~@t4~lLOp3h5aH7IZNLYLV<2r=COoX3V;Uvgd(0NSLp zfm*teD%f%|?+qaVqw75>0Nj%f8)Q3lw$)Iu-8W?4CP5L?O?ILjSrq}IPv$pu_bN=76IX^IX|ZUT<8YYkLlh)5tw zQ_R*DT1;>b*w5JmcDS-1G-mkP=w<6;GjmL0YA?{3Z*O~?x2N6v5GsRZY`yDJ+;aD&7#^tL{_RiTtKa!1-aC8% zjb;*dK&S7~Hu8aC%}Hh)I5vS)O2k57Y<#?}iQY94GL@J(aJ*fwLSVzHH7G@~wl>&P zLEPb+x){zO{+mf61s>2;Iq>CBpo|@h*ZP^m_S=~6riYS-ew513dI@@+cshwVKs#D;VWEI zK(#zS_W{v9aL5M?`J6QuTigdMS?(KwFcMR~P$crw&t&OC)|_XR7?~qWk^|(nNaxz* zQcQBYg^Wse#~6uZ?5{V`&{^90JTes#bTRH+jx}ik8Kbu<_Xrqwl{GHN3~pN=Sbu*C zLqXYc0X95WXYR09|Ngtr{sh1Oqd&)dqXqz2wPFcw{Iy#!JU&u9Lm3F57A9NID7CRs3GJ!u{#=!0$Qa>LcCX)TG_dpK?Rfs-$1z`PK!9+?d7JSczxdB_ z`(@WcK={Gtpk3GjT$&DF2!8EQ7cc||_&^@JDJ-^`1A}p2iZeTa5?hFF_s(#eER}+%NpxxtR(Dd?n3JqY1ofKvR{02*#m@|&K}q|*6p8{MU3-TuECab z&qp&!ap1@t8VR@LJleX>XxFsJvQHvGozFY6DearJG{UK)6>drvP@k7T7^sMLwvxoe zQ;)Uf9f2%os|He9jc0uX>^lH%$6pT@+YV+ARUjvlxrqpS7a)CSGD zd(f_dTtbjmn3zzXWlZg1%pB`7@filzKL}%shjGK_uEnh%y9|PW`<{9XU;XYkaror1 zj-(88fDHk9)N}^YG{upVC)x#=1S*v_<4AeNG?h4f^i+G!2yEMY5h67`mo?|e#}2m1 zC6LG8bb(Ro?+cGD;3Bx38yo#=A?#wd$b#7FVc0VFM2}!51+I}$$*Eq!L54#YusCLV zmRsi)TycvjBg9vqCX~_b+FyL&u5JjkbUH?HB5}aD`1VxWIuDh|fx|a2^u4RdDZ#TY zUGb}HBlE?n2#AS$ozn=IU$*eWbJ!xK#KiHFc<8Zb(QKv|AFkkz>n=d0R0O%}jT8iG z6~gNS;QiKbXKiC!&-W z_0mhBJX^3Eav-;*NeecVx&|vjLqN z4cwJQQCr#sW{xnX4seG}&&ZE8wb$Lia0OR>{0e;J-fb8jtm0dbK8%0+=YNW~_U%T! z+3aQvN!VplY&OkdN0Kzfv8hQ&DN&9i#O1g%`3P-2@TpmxJT(snP>N$*bcEE(UVvh~gphhgz8FF; zhT~)J>OazIn-}ae!A}edkyC@mb~Ad=5;tT=>5e|Zk06I+mW4>-AaK5gNT=vstYs_~ z9?`a5P4O)0vM7!K?{vVJ(5z_R-U5VW_*vFWqnTj)3ol{+!3hunTQ6LN4Qm%8j`NOU zl1ePpn_w{FI4Trl?zevHx3i~7*+iq!1QB6$bO=#&W|-hIl_-^BEzIjv!u!qKgwZi} zRXYd5s-D~av;i8So3(G#_c_6#@+Q92PxNqovN)?szYLJT%5q#_ZQC4OmWFGq#mV&X z%mP*s7~^TOEV}frsc@zV=&;q{VFprG*xl1fiBIwXp1{;yr-)0ibl&xNF=DbEA-MZs~s0 z@0h^w;ekP1d(jrG7+;LJg&K}cHqcDCLr^5ql|^CYxm9gz5Rj(a9a`Bf4w-@9`mh5) z91+ST>O9-b{CwAW_7%TV!AN$j&rooSf!nuTk2|(qgGjU_nzldv2KK$XCwH(&%0XmS z@U!FGDUvAJ`?L1qmB6qp{dk>)AF4nnX z@nWo8y3B54eCcc^J1;G3PG}%C8+-&)@mr6JV4R1#BpGXN4Ld+o-9Ab-1EKo(s0RST z0wM-VR|Nf>E&HRbUIPWVPXu#{gC$^R$F)uJZ@Hq;AsI#bVNoyra(lbeKP;mTT&`$|1>zjYd`hpH-#}RL+0Yo;mz|<~XL@=D z-~aKWm|v)2pjyJmZn*@*gXPw~q_ujZWn<$wf)H^ZVd=MiJ4+igqh4=Fx0Hf6Y_uvE-4<9 z2BS&S*rr2nWn-~9&=Udk6bAYoUuFM6%E&1WfeDD>*>;<5; z1*!t>K-iF)Zw0wspa=)p*pR)19RQYOzfmg$w1M}xX}!t-5W*xq;IqvxeQ^rdLqqk> zEr5(oI@xNvY`Btg?>LIEV#zYxc+uq$Byen^jz+>@;;y}66f&E#j3)xM!0}8gTq^q5 zD)=pnfH)B$5)2^(m?h@xHArwca18^P$sV5su5N54w-imXc`~7E<@}v;mwtz&QS1OR7qyMf{WmVbRhN z-1rOE;Uk~E5~D){_`x%eN{e2Thz|2@QGSGfz z(RtsbnPA_`ZzGkh;-43uyAE+=NZ03piL46?>toLjyCfa&Cs4&&QTP zA)p^Z`j`VjY@5vtAvJkogB&@>(8al5HEEo?Y60Y87S>Lk90g~68tc9Mjt|r}UCXuR zsFgvvd*6O+fAI}41M60f;ifCj%N4{_Z`Ww1Ezql4Mij*m;>-YF{nl^&_74pNPf@S8 znBYPX;!^pH+_&Y&i;jQSFOb=9ZV=oCUY|~tZwhogZAD_(;qVi}SrMV^4Pk3_sJHEr6B}5GBKhVfX$oM;>yq8fKs(=T$Y8UL3UZff^O8%jh9a%!FG6O zvNNZnz3ti;(F53E3Xp98mO9@A@|xpq0NJ*GnDzrF=B7R0_|PameC72R9~!~zYy&g% zj7EbyI{%rY+ZjI5-4|8ncE)Zt;W=4st^)Z{TR%HDg;`@lO1QJvY!V+KzKUV&FW+zx zzHsYZD8(_rz-zk>;hmRXX*u?W>@FeN@=;vG^g2VU$VsU(R>k@v)RCac3X!q|nsbbk zdnHc1CoyxB(U|Spv5XNuI9$P%AK!*MKD!O$!-IHu$9DXmfBwgK^0k*SIXjaNOk8u; zC6ORo#hdpWIfPTQvmgS7mX9Keq8wh`XeM}X*I}?^l;RjSUb+>PxNJtj3O7-^BWO%SOOHKSbXu0DT_+2-4n_*?zO&(uV#kNPB40t9^n9& zBjhj!n)9otIC`r~_YiNQ$G#-kB_i2xhZYuUxbMNA;^gEsqFCUL>o#HO_)yDt)~78q znu&xULZw^+k?6B9`>o&3S`eHerGyZKYPH;3eVxApAiNKN_gfeUPUuayyBC&)O}o|W zg!QmtbC3Uaft0;C8ZL44HXf?zVxR`v zruE>b^`g6u?8m?V(O=-`^hp4O6-&o)!TylX0a%gV7YHoI1pq zJjks=moiUK7YYE!oWt#n-JMAsEX*%p*Ry|veFr95EWyDM{L7F2GCqCX9bG4$%q;WH zx(W%{dIg+KnFulfq+|!c;>+l<1^>O+Z`*sA_7E}vK0a+r3S3L3_aP6M<4Ub&lPr)S zjU^;tHuaaQpe4h9NNQtzvu7^4_FNxh-*%wT2J<*T!i-(#b&k&lDivJ3ZUZh}dmieI zCJr85K(i@3Ya0Mk$=zG&!zJ=5kQorJ>H?b1I#Omd)7B5-D8`cEv9MyMF5OsI)}@*y z;K-~aBK*=vK8kG{H-m^!Yc}!351zt--3N^Ovs8)!tBi1!6`ng()HK1f{>lOfBFZ!F zl^`QoXz7KY*duXbH)G~7WBvrAxxh%9gt0|~xawn9;AejII;>l<1h2fe6TkJRe}Hd4 z`hjbcM*sjI07*naR1+MXJc+ce_1=?RRSv!+Bn}-rh95ljIBJbL%B2|Vwp@te4ja7n z%qNab;@D)1Jzpu6@u4fOMjS_W4dcR`=b|Q@i6tuo{N&SNb5fu!^b~kEl4c9y+Yo6PrZ9?Jzn{Q-U51sNMY<92MCeH#Cv%46Y^Xu|-1Lm^n--O;W0Yb9& zd@aNk3ZqtR?)Y^aQn-FykEWwW-gl#C>8F~J81t7nY)*>C;UZ~qWMaM|${ z2L>tynUcT1`*P>LGK&-XSa`o#L2x)W`;egB=ivI-03i%1vN*LI@Ld~#;L`35sdjFY zC-D`jaj+ExfWcUxs-oZq2Zp8jeTnSs?*f4B&}_|J%TNF_myWJ|pU81f%V&+0F_EN5 zncdEb6h5*(CB8D<3)C-5`jjJNo%z23w^%^>IQ+NlqM74%sMiwV`J#FGY zKln|&w0|cgGX@7L_|O+`!Rq&|DW36gUj9Ul0rYpxX)tn^*{#;*tWUR!VUjLGN?lNg z6>vwI7(DF)co|_WX(o90m1pqAD?5=&iGgwzzi|DB@!1Gk$1#)r= zPBt6CDR*>QfJf*-qi_ULp$9b~y2UmCTDQZdG;9|b4>x$zlLo14?K;7KjlE?{VX@h$ z(EZD$_wE~e6SL0-Jo%(f$k8wC*=KE9;ST8owlI_R8WSu50fD7sR9AISM8s)Z4Kx$z|kot$_kj? z{+R?CbBwv;j8g|0$96J~?UXqBHe>E^3F|g(#?8NQGd5p%F5WwG0Kfh9Kf;&4`hVds zpL_tXAKinwW~~Sk+V*{Jjp1Bv0Y825dHkC{`$IhN+|yXTXc2C`?J}IVX+1zuXU|9z ziM{XaLam-a5MkBQrC7geja#qSRyNDw!hAp=?>~*T_P_FA_FTSKOk+u7WtOgsK!97kvD zz8U!4B5+Wb$kA{8W@xcfY9y462hZ<@2KhGN)2F8?5nh1D=9s%22OFRh!jv=xLbkpl zph5!6%Q5yXG>RIICcs_!j4i3QM(jo{FethbDFtBMRyOfp0wf5E@AnaU5go^_ODfO`AK~s-}!#kO7NR025XYOFBRb&?&$M0GtBT zhZxC1#^5Z*o&|yr8!$=b`b3QVyWhdshpmKnejwL})Z5Y7Gg& z0_C`b;ekPvG7#JadV~O+w%RHBb%X{Iw*S2IsvGh1A9@8}z3?b&Md;%NJU5!g`xdiJso{!;?!H!f80MzRZ?Aq}*Qf`4WS6_HhYY*tf_cP9E zrGq6GHxQd`vt`Nnd>CIrK{EI`+B>LwcD7gRrA@5%N>80&?VUsRLMo1_(N>ra>*Q(L zR}Q$R&lU>DsU5*8tC366Q(Z4cScao3Mse8_c;=rk-s=3WC3T0$?vwb|kq`KF)#eF} zNqx_NfW8aaPmAaaawooQ>0n!(mtHfSd#Q2d%C5ECcXnO0)(HP~~p(M<+TauMiaHV-r_qV+EO!;ZCYd%x^Z!wXUb0J5-*X$UjV#Tqk7e)->!96CIYWs62oDz$)ELB$%UnFL6ru;++cy5QM9mw~wI z@1>Fvi58%{P?wOBQHe_^#W92kES^Xj=%ybOO8`;8oR((5t6DDOH}3f?UflII9)JC1 zG?NrhJn$?QuUd^wmt0UJ9jXN{NddqOwi5<>MqI?gh`N2(!hX5M+!s_B*Mbgt6k+kw zMY!R%YjNHM>#*a=m$3KU19)Ql^Vs>$Zd`xyW%$Td*JIP#b1^zNggA;Igg}y}XeJ5f zYc=dTv>%VX`~seP`*rL-bO-~LGH$r$5^TKweOSA06-wn&4x45MCQqEg?)@hqC8Js? z;m&KWZ|ST1z*HxItyUG~Fn`4KGvNR1<3*$s#0Fx4CJ0llXE*pI~!Yu0Jp+XZ@C{(ryqn-2u%0H*^EC(RM? zTAd;vbIiuBayeL`z-1_i8me{ZIxOe~Bu6Xw9Eb#}5n(>%Fy^KW1nJSyG=YzL0W%JC zunKAJCMG!L8NWxG36_^5j8GKb$G$*DI)ETw7KDI3%fMIg$P}#D3V2$9E-iAh26O?b z2D(6e`{T*EY5d0@{{`MWya&vT!Qo+Cckhi@yk=2n@G|x`w>K3ijLQs2&VUsi6R?pR zC4kx#Fm;e~@;)kqT!^+5N+xxZVGmJWo|Dl6z9a)_l49R$&td<8qhMx?4~^n~z59!} ztq-rX{JyW)VlON-7c0_bGfe@$ zDWDH|*3iBb0l~R$jErCs+d%;KfcA76fvSrI7a}1*0ps9fB-@I3y4Y(HVbW2SJ}8_u zwEtW*Jc?T`zZ&nev4n+jgfQubo41(UuM2_Q6;85Kt|$*=R~g zW{eIFqEsrin8`jL!nOCRfM*CZ)3!G;ux8l`{OiyEDt_Vj{uK_MIEIrm^Vt5qhp}kM z5-eT5q;;EiW{cFuT(*BE$dkaJCLd|@C@aP(sLKY|F`jHJr7Vsyk-+fiFg9PZ5$CL0 zjzjwo^UR@kP^FIdjr$+H4uOmix=bSi?=}NscfOF(87TQ zo9Xqv6c0wgyz=?AK7ZEWmlZ(d_#f4!g{qV9Cq}( zR5B-(gC#Pt+X4H5v`_aR@WnZB@Swkng7hG+? z&(6;RI(9i;6c&pjVDIR~-*ogRGh=pc4uAE-2QfV}hd7S#v70Z!;;{il!rY0?Bt@-} zbmR{zLj=k&2* zoXDm-&UxUyle#P=_STxXU{Ii}2U8p{?sS^pvGtwQ{!W2&4FT)OCUsHhBMu14b>sr@ zo?tQ1OcUJy{Nwn+%TFSe5^)^k(rd56hO0L~bQqM`NvfOeSEvW1$BqiF$Y`a>pLkay zscG}59W-Xz;c7;KNx!rs*V_Kq;l1zSwe2sVnM#!75$<=PJK{TS-a>g^ z^4S{OIQs$|Um)*GH0rhq+zwZZk-0hRHo z(vEd-9G>T~^^5*~6aWU;Y#4b!9rEmVt~um702go{fcPZN4Bc2Qm9b_01=zS^4PMy& zHVz%DVsvl-aU_t%*Bvcvv=7Q;SK~So=pJ;bKy7Brz#XPIfsjhssbIfkWDK#0>})oj z%^Lz_`}QODgMQaubUD6s=RNqnzxwZ3sMqk;-U%%E;e+_Vr$35;!GUg3Vam%;ft5o` zt>0k4b_-+D?l;LTIhkDHQSLIsqc%V;w4Zl@Z~{dU7B3yg_>x69|AO^6diV$?cJ9T& zof9~5;uM~LX9D$R0sx4Fz(A#pv7sSsK7TcqZ(N3@>sDdKnsYEPIM96#?(P@a{iY_T z@#3SeAWa#iIL0kkT#0kWm)L7{1j*Hqb^@zOB?VDR1HoLEEen<2vG{3LOxFoMI#M_? zgivM6n*ecjO^5)y!#x1#fLU|gR9ICYj3rEP8z~3AnH}!y2TSCOwR~WxZX*QDhs!>4 z69Vj%`p#-vritF>wh?pH6_bcOpVx;f<7bbW_Mgm40b zFGjZbm`R#q|G~p}`0?kEq$$=e9m8EWZN^}=WR*fmC1au1Y}x)O!r)-FkFNAvzn#S` z^Y>c*rnK6QzmL{vBrSpqP|W7+w|>ik;HOi#%vGs6G_~4x5*?BbYI;5s;O$Ezw*e6@ z-L=pY_>k{g9GO@UMq+^oghbbc4gjP>9P|)iP6x&dz@d%#?J2rhNEKE7Jej1JOH-66 z&g(Awz$!+VPNEG6^s)S1Y$k%gpjSw6f`A}5=TvKxm0S^L{@=`uy~hsY4}ba{oSL77 zAj0bP>v7?=TM<{H4)86(5N*a^r|L4OD4E>8zQ|aWD9W67iesk0_}4j|qMC`C~xoI9*^#?0g--hA{C%q`SgGAJw0!sp{P0GLET011OF(}!KZz6h|>K7b{}=GlOHmtB+rAg<{UNqB6lD=>G} ze1I~^Oa{=D?qU+LhXw4H4v^XOK0ezPP%^+6R0DpNpu>h2t|67VmH|!<5XO{&L2Vni zbYu*-UVb%R*}DtJjxJ!`%0X1h5<-Yp!N;fzdS`N6tZ9Siiu0n&Xl|YHb!`@y+EOb5 zV}nC2*$h+h0~mm7TYvc^d3s6hM=PlK(nmglSNH6~cb|R?Nt$B&^E0M>6j4=Y!% z#KtSZHk;d-_j$}Z zcux>yJ_%Qgb*LMyO9R`YU2d%{;R1<$2f-@v9Rg82Zq_}dDjQv&ydqIl1!VhuZVa^ zaplvIurrMN+}u3A_rN1KGI0{+QjFWK-H7v7FGd{M84yx3X6GA7+Xd+c2P+Ul^bwYR z>$kJCMNt`1Bw8{_sXU|iZZw+hExP5KMo}LK?>8F=4uoyM4hPQ)fcOFoI0Erri&fgd z@m^(4d@Q`sl-Ur;0E<&b00xA>Xe@BDt!-olV=2%|Mj$3zFk1;Ef{d?9^e#sl&3X4bFKW zJOemLU42q_ZNL zdg07WR>dfp;tNXQn13M$Xr_Qx!mK9>`_!@8Sp6Ep0Z7}{rJi+Tdlr|jbT8Q!o_C$a!Rhux(Ip5&|%+gr;9x^&Sj1O+v zhQE090US6vfkVe?7_3xLDhZ_RH7D9~Ns^0QBiqs(anv0?q4kGs|Dc&LPE58^Q$~k| zAu{ydmx^x#mk{uC1lWA7|CWp`!f$=a3}sHF+pw(A)?JY$9HWYX@K6RHDMR0pcSGDZ3- zpr1N>5ar+V=;7md>c`KanY0c}Zn|_UuGoBu-={R$K9eKVq1HQWK!|)ssDEf$i!SDP zh##vzj#|Llc97~4^w(3vOm?0m5i`w6UshW$>yPc1D7=!d9*`^U)F0LtkTXOcC8SW9E7;Y6oLy~EP)T%s)Fg%l#K$1#K%}E?TJ`Vz6!-_Q+t`3^#tZ$yP zVSaLt`-!K}>gKiQ;s5yJm$7nu2?)T{>;fMD_JcUM_dq-N==MpPb}`$+0Us$E+UWL2 zDvMcKY1%e3va9)BI0#3#cxJY9n6P1$Bxv$8bU!3FmdMNU>+&rN^L1?h;UgUu_|maO z_{ERhgOP#3u>N*|cG(RXmcu`TJc=&@;{e|l4jUMP3plB`nWyOFX&!W8c0P zazGejxAe7XTcakjiL_+^nD=L93kGYtcLUI5V`%10Rz$1@6joteWLkPmQi&kOF zrWL4^V&`QfGv*eWZ4g{wcz6I(o>}&1zx7+c{ljTQXvNh&g=(=&GOjCmf%qJJ3I zZypdFusKA4xBAuv`Jpr03+!DWB?iBvhL;o)(rY8XaYgR4Ch1Xw!xK!!@+u4^{ z0lUr1n7ZJx)-S5uh-6@Hf-!Y~!D;?EN#p?;6|BzbYEm~%Kl@BFFgrDcT~9xW>A3|E z5iVJ^9$&io<0wUO5oEIkN35{KEqeB(J}-CmBRlUJaEM5{j7Mlt=L+Op%+p?2r`#jJ zO#xuH9$+)58;XU;+$(m-abr z-DAkH?~=tv+4R7n*-^F!*~aI0+Caki$S8j1>YK1;$uiXI2@V`xK(m=5O!e&e1`VPs$s3}Ek(lX&u5Kg7usQyn{*!{?-S5YYZCP0jMw>Yo{Koh3yG?I5Go zEu705YH5dOcA7f?dnUJH#7+$d8mdf-ZjW$f$z8p%w_1jtA;y8ko67@#ojNZ4Y)RgJBe)EIiumHDg0SsO8C_cx`7yOeUV29;< zF6STwU<`2-2=0@9Th3gFjDf9iTKgIULg1WIY_Cf0Vs66XNV|e=%OQsz-w^rzVJAr_ zps!9PDW;k!q%WXihcgVg(?)I1zbkd!#Rha~EQSVs@H~@kPz@Rq4n^yY6~dlrws z^D-E~K)H;K*WCoJ4}*vxh;r;b>I$ML-N~I#3PZu_x4ZaJeF`|ahansGKqCW52;GC4 z3?Nqtw>cJ}OtJ6H=dpMH5dgsW;3&Rw`=_z~oHd;XAj8_r)|B2|xgpfg56G;5(@A%h zmVn1Lz9G^|q4HG10*d(TfT_Ti$*v+`&H~{FfAE02(zEVe1>vN_P5^$5W*z-=0@&OI zzlEZe!>W+3ERQe`cU_#^TOwl@Q%5 z8x`wULG%umt4#UK9tzDKss4ay7s=#ytq2tqH({u{pCAnfpz3!`Q*hsV2l3eVohZ@XU{p03d|%b6$ZE_3v=|~KD@d8 zMKseCk%;iKTW`RfSKQD7unhGIb3{GX>fVtDXn>)prUDG<8v6{KUS|kcK z+2#wMhD`}&Tlx-x+4CKCuZP^)Y+qn(XcTu}^8sACZUbtK1bg?-VQxXTD!?09%NgrC z62*N;X2l(4OG>F$mpF8!j=6;zuH1MbuGxGkh6e_^`XR6YTSm<=3s@lo#==4`maqT- zAOJ~3K~w{JoA#eY!z1|DpZ_)7dihm|MTA63Jh}ZXy!i0LXe#U*9i!~nR^-{;tT9w` zxTc2bs%&oc5i{1HzE9e*mv=Q4B4v+H3d8t^ zW;%qe@cK(r^8CHiL^ILZwoIloAUI^)m*7Gjm6ZiTh&U z{pOpe#(>Soh9KArquKr);(XhJ4_`nZk^*US9LeE)>F*)}oJ*Ut)@y6W5<{`TvQktm zDjvch4J{~#q9jQMLa?-aUjYzJ(h;y|yqf9>=`8c?JM)Re-dY1q8_<9r`T!0v&b9`8 z!GQDx%_fO}P(4apAt{}S8eG_k&`eW2^vYA%vG;9AmKYft!0IhmBQBM5PCY3QH-jOd zvcrppfII&urH)|hdkZHSCwBp9!#pR{RC$8RCRd708h{*@z{2bt_Uw2PQ?v6BL^yxh zYJBC6&tSAVRA70txwdDnZ?os>6k8J(ja1FH73xAs!(1mvVB^zXbqJ@mw}cftlyrNG*GW6G?%e-AMNSTsk(6-}%K~$JPxO zKoFskr1xLX5TUCy{m2io0UhVA}g6+=sWm10h?1Nz?1; zDkWNt8tYs)?UkfBrsNBBJ$sCv4WYkRz_TT3ik+se~XxsZ<3~Uy7jL`t59OL=np6mc;7ZTn$ntXQWPm5D{eC*NQ}66TII-KyX-s zSUA9AAdID9lT(@3FBd2f;^>hlAVPq{=>xAq-X&1#r9uKr;t0a3FJf`}*wYV; zFjg_yL2Re|rB?LPlmczKzb?IctdX{gWQG*I3<hoHg zp33spf_kIp z!zLM+pO@Hoa2_*r^Vqun0$g_f1sJSUwCCsULrFt@2Afc|11mRz=GTzu{Z z{PySnG0tDH8U&!$Oz<}k?7&NpK8i*&?M^dNie+jf#O&ufvDGwnxy|lY6D9=Z>nddb zN#&6gQtDKJzvuNmP2UO8#`j6X5DW($hP{p) zzHG?7d-2C@*}=UQm^H~esXn9$_;yKx!r-f@C_0-4$W%{+&3n3wXa>(*Z?}bo8vgqJ zhcP`fhe!x~5r_!o@?alb>9>A6yJ2utt1W_Ez1~EcCTE11 zEoIuqGPvzm_SxY576O8^2at0W*0TMa{LY_~6%e9t=nGhEda9vpVjF<(3MPC`sgG5t z{9FJSi6ShHqp)J7wtMMJNs}xM!>w1Y1Cg=_hU=NXHZ5^eFr^mo%331ZMKUFu1C9`2 z8;&vLfNS-tU1@TtMZo-Y1$$n-V76ZaKr>D7lUKLnmHoRQSz^)X5SDMe3?yP@d7%Rw-rNDUvx~Jb<_yH9PCV59DP%%8_BP|hZbsT@U8k!L+f7j-!+4VRzUo})=x!5Z zdU6u)J^LK$NlOOh){C#gN3XdhCxhZ06J7Vz1_+2^zcL&Ctq+3%+{=O9+y%|OcIk8q za+&6@tKI@>06E~+d3L3;`<^>Q4vP#sm4LfGg$qFT1>hk8x^174oCm^HK-`xyt~14% z{QHt1|{mocDwxp{CUJwyS7Yt_u4X`s-WcOz% zz`t@GnD8(6<$6$rq5y@`kJ-;V7+{4r*y=ex{r4P+(-(_&eCG-=r9 zb@^u%=hSt@(ZNM2_hw@=N00{01bVGqa8^GvGeYOD+HV{L1QU&}epdruX0!?fHzKM~}9)QQ@ zG+7+fifBush(N&Ar8{j4CVa&n9iUmk7nT-j6t=S`NMog`tlFt0#f)Ag)5g4T6~sZH z1KkS%$%cOQY3th7jfn{+Jpp_Gz{p_CEX?80p7;Ug8#NFS*1zupEM9gFqBhfmIn&Yt zYSRFcE-;RqIye;OO6#<>18hrR_6XzPiz#N0GGxlyrbwMXi73yEwn(LPephsZ?=(qq z;H?*Mc;X}oz_O8X{KlQ1!f<6EY&?~ICo-^oEO@1jSrL48gE`=N{>Lm}Hc%2A9<*Kfve-1RA(GqxC0lQq1)YYM04 zB$Bqh$th6CB5orYXf#qBpGxuW?pe&&>bQ3E`*76-mte3`b<9cfgD1X1Z0wnT67B+j z4uD*cz|UNB6Mp|o{}k(%uK)nln<*Z7_<20@{U2g_Y9@caB8xax0T+~Aa9TZ7(D(A( z^hKt}UhJ=om6KzKbGIgh9z>b`oSB}(vyVQFzxso3;K}EAVy@Nz5n;*b7=G>UkK^C{ z+HYdzlI3oBKXw4eAu>+BEEl8gvgl^p5N8QvTx7To>Ei0^RHtz!gAiA!@Ucj19r(opYrcY##_h1xHu=JwR zzAUy7DNfjJVDS71@ihc;8FOl;Oh+evK!KK}}mG({Z6`1Ccm;;M~XK!SQMhRc??gW*_54rXySe><#7 zC54t83|I=4`{^a1cj?rJru9olkQl;xB2Pf;W4gI?&us@@(z8dA<1^X2tu)G_WQ$6& zLbJ7iLLqx(DEOhzBiY?YjQgO^KC-2+O#KYYer^N8_5Svx`7;9~2m|E`Zrge-_8&ir z|MI|hFmYrCX#-e)-UybA3REkiqerR&;%UmLH&V9)JE zYVmSJBorp3vUnK)WfxO7NA)CF-N@iS%r_lg=zYr`KgcjHcV2k|=Ib^5tFQkd-aB#- zjb@6UKJhwcPR!uCPu-2B%a`VGSebSURD(6$l8MDXqbE7m#v3u8Ey!60hc=3&Ws5P2k21-$k%QtSqS3dq3+;!~-T18D^x6xLg zPuCf?`J*l{Ss*|z&r&s<9UvF9_2SaYM!>wW^#hcHXbbCD_0z}-Ob2Khn=)iPY}}q} z3+OgUBCKGt>v;m!p!NN8X&A*hNVe|b@bUBR{UN?1JZr%EnRZg9JO8?|@c9KHvXmiN zpa^_dA8?-8CMueH^;%?mzChXUd`#f+4@|W}Y(A@I6POtjCr;q6fA|QR%@m79D){V& zFT>D4xhL?5KpokwmIOfxA^Mu&{nl@1Yb#d<5XY^9w0gaPB&nStP4KvLpC}R?%%R`< z%?yIW0Yq~E$n8oK^`#{GDz^*Riv_|HIK$ys*(!<)_zQFXZJLky?r?IdLg1WIjNM5i z?^}}NAb>q!heO_m0~qrrAJ-W)T0VCH<5`U*I@WCttmh&rn1lu*068g?PMj!U&o~Kre&Go8 zZ8qBVzBcfIJonJSW1Z=1dsg;~@gcG@*|?kLmafO_104#|D1@bBJ3y&Wn6yVCj3u#eG=DRbU6k} z6|)42+F4R%^CF)XLY{*SvW%1IT?PDEA#4U+Nf179<84^Aco}~4kNzLL^xjUSQewxO zdolN?-^A4)y&dOo-hikLL}yq<28MV0xogu3IKT3pL@IjV$k&0)jze`&NXqVEDB2P! zCV(AirRyI*dK|AmxgF0w^(IbC&$YKo!s5{peENg8;h%o;b6B@xB`7P-9K!f@)xlB6 z#&wA1JEU^@4Q#Fyt^eCUE~=RxE29%hR;?5 zVMXO#_BC`bvigyEd)_hYxr2T~_LyxBgw!lj`$=g1`M2HgjQ)xxWki=r@fLFroKK$BZOn|p!3u~7Ns>ZJc}AGv%qfzjs|y~-{lmC^^MT+# zMsp}AVRI&Z&asU(EiFO1Px8ceZR!C$F$MfO^G!Oy=n(BgpTn*^LrjE4afDb9nl8ac zmxJUAIt=VU6SLc<3!3xqg+UHQV~dk8Yl~WAK?ZiuH!(6Su!v%_Pi$gJh4i}%B=b4g zuHZUkj<|q$8MqE@g&zn=rNlEkU&W3+Zvg;C2CGui0sASdN(7;#Y^i19kC@Qhq4 zkuRX>0;GEl@DCb;Q)|w_D9W;M)9CZpP+*5n&BpS6!jUUYFJ^GM={wFI0AfMVbNat zlRbMeTL8%bEq5Zq*zhpEaO>STcj*fJ$;02nD|_F?!2{Dcc4Q7iLsgUq1uB&oNmHUe zpJHly9`!~OV}nDu{Jc&0*{g2EZC7544d<*uDOU7Pt)PM~_)p51>*C`uGm32>m2QKi z1B46AEW7sN%kkAO{|o%{|N0;B^johXl@f36JBpKE`z~(0=L5L(>TNByo|3ha9pYt# z_|E5T0({3F3-^?DyMkS2cxKlNDhdQhDRKPRB;J1ZIXwH=tC*OaMcUr$s^v1aZQ6`q z|LCXjk@w$(O1WH+C?Ho&8o(`~!2xqU6o__#*}m)$3iRcG9@x5`K9Cmw8+jit`@RZ@ zTfuOXv#5fhzCxrvu-C?V)iYv3$SppyjxXjY*i6bhyNVOdAiIC5%5SKLPod0dOI;u5 z_k94dFPqkCE0u@!t;-OfCPZpRKg{tFv3#Jif<@~A} z4{q7t6Q?Hejqg2x`Gpz=t0jE$_AOXEHi)Q47B@3vq1Ix-M3LwoaQ0ij_1jt5hzP^O z1BfEgCOw>)`%2jY!G)mCVP5|{uHWn+xa*WURK~+q*bnH9l}Kt<;xZuO_Lxa(6~IZUC0n9^+$~Mb_rCwO4v@|qU?*(jV*%e- zi$@CMqI{nX%r13pWr_+mU{OCDa;Cfo0OJ{eH7Dm#lPOY8k+OtD3ds@-2|z-SEP@xV zJ%E8)n_UY`K}0cPM2IOug<`})U_cC-gIu3{h7UaAKwt`nHOwA+O^!A0v$ZPoTmOuq zY5o`toaxk$JQ~!3>;RdmUtPseZS^*65QDkX>rr6|J4z#u+&@mAb>{VmwG>0+!|wgQ!?ln1}{ z_3e~|%d&4Y&7+REZwM-aqC`x{L5+0mb;^5e-E=Yj^f&(v{^g&272kX2aV#|II5Ihn zAN<7wm_B$ITR!*!j4v6>ftzZUib>g^qa!Yhi3`Gl{Q-G7C?T?ahueEldrAu+NhFR> z9LGC5Uc`>aU&YbMStMzTMHEL7Rxe$KFW!C^zHsL~ShaL{Yy4DOt&JJWz#u3j3(zN{ z;bW2pks`RewnKIOT>v*5d=UwMAy13lV2giAp`d7Pvs86h5GLJ44&TmaJ3{pO;g|;; zU<2WJcOvuOE#p~uEVB3q7M~)x=0z_)w7#EP4@}AY?!LIo1;PViawaAl8G1jTF9FRz zB+FR&Vm*`XFvgU6&_!Xk%d>wr>Pu}Ae7^%Z-@HL1A>Qu-acT&Rv3x{ zKx$u*4D`<2^8m_D$HoF+1%YdD0P&%PY#dH{34}$lz~Kgv_Noc&O070HVorT;le11{ zSrfaV%Ev*vOlHB4ZabV)X^QD)ic(1+>Lsv6zatG_K!+9b?NyJ#Ud^LXlLwDiM zZP($z@d>>A?%R0t;BL&sg`pr-&}#j_S6)jJ=Hb&2FYegU_nJCAjz%&F|tEXZXd8SjvYOTx1W0+ zJ05Q_zniJ->7^}cR{D9a}F@%qNXy1G9>l&5eiz9#~&bv?_gTr zWYA3xSsx*QF$DnqFg&+QN85yL`VJIK2YxnvYnxx^%Hr&$_75x|vbx4~84;K6w$0hK zf#D&5CR_Y~UZg`@hikq=$PjrEa_v=?_m^A*$9+KZ>4N#a^ta=FY}t3&*Y~!y8lS6-!5YW`SpZe3D2o1Lbn>AbP*`TfhB} z*UIG*03ekq(xiDtvP06efqJ9Sx_>EZ`K^5*yx+VaxQ%`73b0&S-#+bS3UE4H-*-9L zuJk<)xL?S#xt@bO4p69Ehjvc_FkFf-7DqVQOx>&>+js^#Nx5IK$O?4ykIBHog(iz) z&=0o(-sI6Cf3M!eP#j^1L|Aa^bAWBSogogURj1qGjGNNkea~N*L#hUcdA`gyYWV&O zkK)AaGz1aWZCr~*OP1$4nA@y8)8<45a90J+yWb-#>zgwmyZwApV~=N=;ef&dmx>%{ z`)3QYGuZR|bEq|&h)Cetja%@63%4o7cgPROkq78>=|Z}KAO-O5{G0-^)wB7oXI!Xq zEH>Rq75Gl)QI`o8xQ3J)h)8y>A34@rPwN4mzbkzekp#Gblp9DHn3se}Ifn{L7!V~4 z#lzixumK-FR%2kG=iI+!01)o_nM7E&0StkD?$l4Gv7&e?m!DvXQdv;qW$}E6k%*|7^4G2Si5W`ww$*K^YsNVGb<Bg4a}#HCI#-U3K! zdM6IB8P+{p88=q`F3HWl6@mTdJIK+-WBH=R`0X!#85gWR7r*XEb#j(-X;aG8z~}4svage)|J2WQJ#7l`BeRnk zp`}X_c?l{^#e)R`%mu3{z;3yuRJh0e&?m{_b(joJrj5YBfzRWrrNf?m$F-(xYr#^k zgM8~0j`1@xiW~uTXx$Ix{z)^%dwcfcktbh3Gf8mniZR@E<7QM(6Tp^|(P$=MFv{f; zgoyivG5f9G&f+G7z`#JI<8upfW)8=g8EGm(1Pl$7Aq4f=;QbZ=g7*T}xt4RR>hPbFuU|s{r7gC9%jRfabN{ETV9cEa9AnsvayR_eJvH^b=+T-j9EDW0U z%#0(aj^ih9?m!|F43^7Se&MBv%jH&KQT-BaFizL(2akf8v3PhCzjE`(FgiT!?k{oxt+u|F9uUN0%Q~95 zY>1)s*v?Y_hz)7wHZ~&zm`-L;lL_i_4x$Zw+ro}erHv54IfrNX>Jb1C!~oaOKn)EE zoUF~DDyk?)5y})}P?b(`t$`5vDD<$FC;(J+-M=RdPBsRbp>O~IAOJ~3K~&Gh4o%iF zV6H-W2za(YkTjRt9sgz7X1@C`9&RMmri`U6~MppK$E!}QFL|vPp@7wzHSI=-7%>FA8JILoByL?d~fH91~ z0x6cUH-Y*R?#vL^^Y}8<+Sg|)PHi^XxQ-n#r2qM95dh(mgFYJ`;xpLx1=~CbD)Pvd zSc4tuVR;Eb{m_YYc@zrR_e}nONKt#!JNxw0U5-d$P6jf9CYXCqApMcvr)z<6FZMYI8NX6_WsEX38+ zW+5_n(&^_;ox<)NJ5WzjL?Xhimt2h-F1!MQL=ix6ZFoUNtjs^p6$3MX0}Qy+;nktn zH1q*YCfWg7Fafj4Eaqhs4a`6Qh(z(=hz#q~nSssWvH=t-Z(*^;5jD}|CYmWQEla3I zbyO(EXgp%pl~w0>=sH!OTLjp<5Zl1$J!P96>$wA<8W@85fcQGy#X!v%$ZATz`e(>q zZ#yV9)k1K|*#Ke1+d}sq2XJMTPu2FATrGr9i2wde0&)?zJl^0Qei%O2aCPe4?0|WJ%%-%djuU6 zXTw2W$X;Qa&lIp1>h{nJBD2}4By!uXUi>+D;?iE<)fKbCO>{S!_7JAMsR}z;CZ?{# z;@QiSB*pH1`|$k-pFlH7Fg9Gp&);4-cBJN5Um24duojW`!q`PiUyEa>0^6)H%B%%4 zg&E99n6bOo#Nd#?Ac^8_Ly9K(f>vK9ghz|j$S89i)bzUkOuIW1-nV z97R~Mc@ruF0|h6yn7PV1i4;9%aUD45GAJ!zL}869KzR0@4iMfUhqXS-q*0p9CJwyw z5)K_b2{2>%*f@Uirk}-7rKjP{QqO`&7UPXjx)i}BeSaB z-HkqRksxl61P@TWITSP^c!?54i9=HNXl7@$E6r+m%+_pw*#BV7=7%vGlWb>pN2bwz zOOz-|9Es$JhbW35Ko9~5fH(*=j&Ah*&Z^4H@cp4G>qSO-M0h^n0Zn#=SzEvNswyip z4iEP)KL6akp5~OpPdWFWJ0*F7M4!Y8Z>Ic#)ZEY%G;?Kb6n?I>$Fwq!Y_m9UlAWD8 z7$*-2cG-T0;(LbFPX=wRVixwA1ekPq?I8aBM}HO{eCxaMD}Vlb_>(XH51iXvhh@gu z^(}n$l40qi8YV`9Sq8bl@ ztdNE_IEPEtP)v6|*7t6|r?jhMd%BUVIw;wZ`7h>G(j{o3^%h@Q0uJ44yf8 z8iows^R^rD+8d9f-^=z4Brt%TVF_l&!omdjn#-Zg+q_-gAoyU=LzWpZGsdGQ0NlB+ z-&vL=&Yn4es;ZD>1_xFb8WM=}Hg7Tro&qvb&T@=ZkpfRB0pNC#tN_x$SID7DIe;-o z&qTh<2*E8w$G!_VeSJeX)XVT}VKAy}<62@`w+0B-IA^Q~!d!6M2wLGnUxoni*=vEI zVY94ouB7otbfF;{v|+#DgfS5~~Xf zIDE~`$g->vW05dXLM&p}_jcLc5`Z3htp>LJzt<1ZkYT~32*g*r( zGeRuQ@mh;SiMbwl{$NqT5EvS;%adP+*ybTN3xiD>VPJCfvkZ&06kb26qQ5m*PzkRa z#95_4T!tfd(8-+6xM|!Y`DqqyfQS%Ip`iff*-&`Dm25u{*HsPKrc^q5N_$_sAI6FS zD-Lp{?jxrNZDUSr55HZ;eQO;AQlgCFkWK;2uNsXo+StOy(-(36{3gz?Z)1Bn#<;9dSvx!AoXKDT=;t{Ot*+q*-}q+y!iRnw zZ-4C@y#Dhhi(7fv*AiAv9U`Tj@;_(;zFo|>jM*s3r?ml{EGauA*+L})>-!Bla&c524Hxb!qT|WCN4rmNu z?^<9Bh@bR#W$|is$hF|KpL)u`VrFnvFUOO1+{lKbSl|^a8m9$pk#HWpcr^&Fcd$!! z0Zt!OX8=#`6gZF>tY%p|%{dm3pyTtU#wI2K&_$yj0T54fI5Bsv;}7EW#(5AK z96f#oRt_El8M9lcY#K$?@kcgeY){n_m|+5$y2dmMVTNLx8t8DPPuMGh=>p+1t?}t+ zMmr-s{lM37abpVv;QFIi;}`DwCLNmHzSO~9kkjz*w3EP3m|1GrsPgoeha zhw)r2H?UD&L}oawIhl|_@$Zj}0>n-&kG-(#V@y>B3@i$4pr`;_^{_}|ESesc^5rI= z!U0gq|GNzYzyaN4F>sFUah$N(2<&q%8fTsVU9j5)NJtR3j!l9Ydz{kqIaZid0~*BU zjSmu00+5#guGoGYJGf?HZ}iaOF^Z}}Ikwmt7dW@E13GyQ^e9aW4tchPfr{-^ z6^0uHkc~0OvkaNZaA0{Ew_NiIyzk9##|Pi~ZoK-H*H4&(Gd8qq=e&g}Nd*NCMkr!y z*s+7r?6}l=?&?3K4wN*;HkNtF&}C}IfM5iC87THbYWA;gpOsFN0}EH9$1d5P*a2W@ zFG!7%w4cQMTJHWjt^DT)0as<$H%sk-7E zp?RKSy(6%Pr4GddY_g)xMsrCL7g(gB~w<1wnLn#CCtSxAO423eNPS?lvQZ!dBqA_oKqhQsl`+XQBd zGiNW(@QH(~i;^A-oeQw2s+Oa??YauR|zrL&L><|yLu#hjhg>yplCD!sBRup0|r zNEdwdiEyxI@XUx%NUTHYa3WMFP@(x94bVsctvURhA%?iG1Ma3+H$LOMKDHLmjY=#m z8uW?M1t+!Rq5%{3T0B-W@8AI7q4h*w&@z3`a6H7{-v3o>jYr50;rOjLqu1~6g3=D& zR^w}xtwC=Gh!&W{HCdHt_cJX(X)34E>ISEnruB+vx=is}F6H!dC-C?KkHRuzp*O(4 z`Th^%#^bMmk@O5^`iTez01aR~T9Hz*rZvS^Ss+09Yr`2wa+%|fo!h83uwHGzxB$4b z2K>IC;X>5TK6dZJ#TSyrGNsr&1|Spkh2$c3&QO677uYT{Y}+xG@;;W$vaV<*;$XYl z_NCTumjaoMzHrh8YLK*n9-%Gx+R~d&6j$(pvs4`IvjHvQ%xehyBr5lmCeVjFq z%kB8zKl0P~(m&mU&wTwWxaZM_aq|3G42uF~RZdym3~S|@5QYqlnE(xgUJt8_%Q$xM z3cTw0m3ZCtH{mU}z80^!?nYd3-~bl$0myj!cHtL1UT0sYU@g~Cd(})UkJsX$&q;<0)#^clJ0Yc_Ag2Q&_XYT zmXfm6#IT`ary&9hC+0RtdDAsxGAu4#Ig9Uy!9KQM%m@M0s+jJk5n?yQS>O=%j z9ngb3Aias*aHB}34}{w(fNotDxC5k&cXsgH19xL{X9PnAufO(2{EK(oh0K^{;Lid; zA_3iQU>W*51P~z>uo?==?z9--jHW7rltRnSx|xpqw%x{-9mAk(1)4-nxgcg40}aUy zg|h6UOH;!dj~&Q`G^Hg#)hR@pQH3!!Fe(Tav4iDofF5O7GD~rm@?NrDLK>Yhz*{4= z6ANf9M^e=VX%zMru={@q0N2QzSOM78?0xWT6_D1BO)*PN1fbOX9SBOExqvte^V?;H zhX4=pK*;Sw6WAC0aTQaTs0se1_9e%Ff7J6dG0j6 z_0;3|rzal8W6wQ}(-$w`!qx_MMkADV!m#UQIaU@IacE@?*B!qKufO4Dyz%DSaP5)f zSR5>1q2CvZ8Ap6Y7Z7(1*6g#?PW=xYXo&L*?Y-95@@@{*`pBQ##r}`mi(RgEGPg-jd(da!x1>xW}@UQzWU>JSN4S0_8RR zxih=dwU1J^(UXgsnh3R4B-dfd_CUrhF8Ae!f{1eVPkuQva%qW zFu^aSMnuz?V{&*~mSyt&HAvp;^)MI=u&}Uzg@pwyE-qqeX$gyqi?hG=`@0(G^}o3U z!@OPYjfk+YumWQURmCWZ3e0xjzjteEh^n&4`aK-EVrjk>=Pdz(cLlyRY0@ds70RGQ z%NE;f0V@qCn$in|!m&!}+aUp-2l}TE!r?r_sd3q6G-&}DElVlJ40oBSM#gM99UR1T zWPN;qfx87ym0>$$_(D1Y3>Hr-nc69z|)W6SA&=$n7gE)PIwtORWWrnE>iF$<-~m2~6ZytN@T3B2?Dm`DdTP z6AwQHYb{m=OZZpc|HC-8b{I`TOhQu&sD;);V#Kr#8MJKgmWFBA?r`XE#3y?Z+FFv% zd>Ppi6>rJkA*>%47;oTBB;zM32^Aku5A_p=G%vdZl?oXl0)uHAn|2$_3m9c31}2|? z;VH0NV_SplHN^EsHTE*~{t&BMdLKE!7lZ|z+6#fO6iV#*3Ei2ksd3lnD5n4y>GQtc zdkpx2j4QIk90mv0h;(R@@_||fR0(a$r}J7YRo}NWCINP9fSl>iy(~vB&#`*Vb-4MO z>+s=s{PQXBQKGcf#I9pEs|O4WdVOTM(b-cZ09eT%V3v(x-FJb*OIK>D!A^FHMG{BW zeM(o^2g0eN-{t;qIlKl#Hp0(@a}E)M;Cu?;OaacZF{XCHOLUKjGOPWH(}{c0WN4;r zTPQY&WkUH(dQBFfZ~sFwC;|4pTati6{itDvOY74;STo8vjFom@I<=SPacs=G#H0v} zu`h=M#1BBU8Kcg1m~`h5!Lf0R$Pn6+YElM?bAhs~aQ{OO;ZHyF1&qffjvrpe&;RK6 zVRdQnf|-(KW%2yEEfl2%8H1ITMf9e1A}%FBPRl~Af%38}F&qxDv9S>Z){QYUMtRL1 z&+{CE!C)q{lIQu1eeS=n*XtqA^F|@j5P`^j&3`WU{jq12UXwsV%{6>xeBCGYzj>R3 z;ERi^AfidlfYBJ%?k@;#ZH0>$x4_KErgA9RoC!W}Q4n04W*c%AH4a`%`%F`uFy_E$ zzGE+G*(vZO1aufLxJo(eDOOv+=^_9td4_{|hI2(F_a6cPDiULq0(bmiX9|AT?Cq9( zi6YpUX|qb8UQExGfs18@vqgnLUnr8P8CNLgwblWa0(uFc2;HMWIs+n*&O00r@tOO+ zf?+X+A%o+$-i*B82SB3Cu#}lP0jrx>vN5zPnc_J^uC91xdH1t4)&8D2XHETYYA~I4 zJJD7po_p{fY>h@BBE0?;H{kVwuJ<=LB}3B2Nk)E=eIk{{9b>*~ zGr%-^O{^%UZxgKp{Do|3s#vRA=+*`fkR(7pB!%EojNOza<7{%SEh99gP+~>xq~GC< zpFd8lxMl!E>*YCm$YmLw*mYw5lshiT!xj<@X?+SSkF8rY*nQ9J(kWf&l+CaR7gj{% zdNIGq-K=8^#?Kl^N$#cmpDx9{rQ0$dHb?E+v62E=tKezOcBKdvl3us;IgP&`@};G? zDaBR~7NYm0Z&=dxY2R0?u82pb4`%y@;wkB1jgV%%OY_|%=3X#8O<^NKQf%B|pL6ds zkkzN&yC{6H;3qmXh(lVSzhN_6tw;#9CYrx*Zg1hg{PrK?^qC7VhVX%R-GV!Ay9)i@ z3)2FxhwS|N4j2<1-UDmPmn0z91qjywxEmMMfT0T<)_}JQ z!n**v``P;b>YpX>+hwr(*Yg4QnQ5PXR}JjklCMe04}GVGG)zsWJ_@KK5rAj`*jT!(cdZ2?9PQ`0P*fA*PpW88ieayDdWG@u zS*e`Rg%za$g|uT)Hc-%YWdJ8e1rFo}YkrYTAk1(~0h?L_s>!JEE5FBrIX|dUYB6q% zcJTL)-VX+2sn^4iYi@3z*gNr-pMhJ)CBDo_WmzC+apV1UVa+B$&W$mw8Q|-0HE_Y>6&;IjIU68@!BVyqKS0s~?;**mSi#y9;41ACmJ^_fAka^d6OItTpxyI;uv|@wDJR9` zA^lWsR!&OSRl^Qs#cL2SC}&O7tZ>#Gl8Jrl9!^YcSiON7=WuUQT~eTTCe~R9gfq}- zuXh1|eULw;OB@4y48mCoE(_X_V8lG#XbuD6{ymY#MoIpnriKe8_KetJcMBZ#uNTqJ zPWcuZDI`jKJ~lV3(C@xxJ0f;d+#sn947>N2k{@#ScBAlpQ^i12>oH|(5cBCATQ8nw zw|{05wj37xo{$}Xp*rHyypVw9M*k-ye?p)zE8@Z~1cn%3pOU#z)TZFbz9}xLSo~p~ zlMWwU7j#vMs>GM?z6XEtH(x?oRk-r-3V!}aCtBbyhF&f+^0hihu&S5jUd z7h^R8d(%xYVs!3X*{fY(624hKLt zA0Qu97AMCgmKF?pnv~L1P~P?6f&@oDl_E-te%7!>0hCpR$DccalNZkdARNEy2nNe5 zpjnz-6XXs_W4la8myqbc=611Zfk!->pSJ$lc~cF1GuM(S6HV~4DDm94?!jN>pd4evx|vM|c(GQeHX$dye&A^>%ZV`_^dk}|*w6v=GOXXk*#GO%q&viYC@STAUU z`^7UQps$u?A+I=XBNz+xLr9XcQ=rTd5Jd{!-FfELfMQ04Ev%PYU|PVCODs@^rEEE@ zRhrtXjQ6vJE{$9QTcW^dWG{6=@ubIP80FAM^!Gd1| zhr!$x(+CwZjrrE3yk<-SCB~pukXMrPCsZUe@GP;6GO?gKI@)tW{P445k>aSm_cQnm zb(g-3&Dm7ZWv%a`*`EUUG$W!=U^v|8G?42OG{#DD-T-Ec(`V1&|M`tSz{b`#dU=MA zzV~*#{+1Vq1rAIIGV5ETi3CAraQN`COA?%%17a^-bJ^=vHOW#RjYjdM=a{UhH&)e8N0kS4&*N;3P&kkuvz}T8t`muxcaV zP=jSS#Eu1sw5xWCc)nnu-KYUjxnw?1FXvsM|Umy zlyB1o^dW@F0=$R$F3mMfL3QaORv0LX%yVj+^42YA>bYBW>onYaA_Om`()s;WX!6w$Ht!SfpU?)7>zV7xA1>a)vx zz1~ct-IZ&pC0jx=FmoWiTQeq`$)FZR`H~dI9FL2JZ8CFB@Oe{#;9XfeA-R-TfEClA z(*m)YH2VK5>_;^$OQ zq`1eRneW_v6dTux4io||5~%6nAl}|H)T^WlSC=Y z5+@(O9~;{{0D$X{T#X-j^PMmxpu8=8WNISyt)Pk&_DPsfK|qV*0lPL(3b4d0wjk#w zXHqE=;D`uVp#YOekO`2oF?`HbHRmCamSZW{slYZQWfidLSyo_&FJiOEuuzS#U~;VH ztMQ?cWF#!wGAOBl9}#d?Q-Ij-BVPu>Pv>Z)(nkQJE(O>^{lO7X$U;{H6&?0?Qh=fo z&=m477;(*2Ng9QB*P(bo6uZAvku~y8twgCC((k)~T%0c|y8&79BX-}6bW!gZXbFYw zj2$pE=ATy_);$c09Y_eT&$`$^U(mD5^8>l(4a(SdS8O zIkbluD5TFK^EkHerhNApNX{MBWopkoc?!Srho8d6 z<_;DIJ^bVc-+))&aO_1d7PqxipqetU78WlpIg}S$4}9J(4Zz(0S;IK@B~@I;dB5Ms z;^N|rab5%EHAwEW(CgP~fZWwIh-%F5)P!tucwa9aW`4G%o8U&BA zO}a`#gaA?{7!#H6(0~;hK*7JSF3f@$*rb)&fWjGL<@Yk{zt9ha3$!A>M@0K91uOBHOVQ%5HnC)<{t4$Br1cU+5Wv1NX*?_V>G50|O z+x||!pe&Jh%^0vJjBi8Ygu=LKkR=|NM$bp`Ow@;=`_1YYgE^l!wm42O_AvS3c#+*A*WRAmlgY93IGk=V~pYL z7bw;;&z;Xp62(Lwd#^T8c2_?>8_(_*7oGN5vfr^Q1tr`UPwh@aHZC@oV{$yH0}Kst8(oJH{eO*|MaU3}#EQ)(npT!yozc0tU(X&B=n`=SNYQ}SZM^le?ntC>VVIwLk! zpZ@F@aNmQEf|+s4bw}`%AAG}$$^x(b_tChV5n&b+Qn)&MW)u=3R-;>|Q=5QN%mf`RX z*P_?&&!Tr%;lstgq+2ioGn}w1gW?nJd_tO;o;);9>zm)=$8y$MoI3GsoV&0ABEqq? zEAZoQdk?a@s3%867hM3r2g~d4*%-vs2`O`tnW}TO3)SXbH6&2@gRWEt>R(= z*v+AAl}MU+<9xtlgSUV_0gni&5QN@GsUSH7xJYT$p+d5zeQhG1fZ-Mx+7gRd4=ZM+ z3Hoae2q^*xxqmn4mJ)9f)^OF>2!cGB*wfIbfXKh5K%!)m4B`aJ;&lSlKsPjeHXVAp@t=4ZG+a@JiB42&_eow2umfX!lX; zU^N7cLjX$MXOoI4YUEB*1%6Y0JRoNxg$gjI_G4zbVtHsojjhj^w!F6ZJ16FVU;6@) z>uT;XI5B9K1s{v2kg)ABJEDmvwevg@7lvF%cHU2tzlem4<@EomVmxu;1peC}`~|kQ zhge$7@v}dC2d=;73gj=cPA-E{loJ-NF@&Y1D=s;pqn3o6w|Uzua9-=2Yk>0_JYQT~ z#9epYg@XqVUY;O0nVB3)Sym0L`2A>QIYwDllS7L+4Se1-dxHpGYn<_r7A*n+eAfUd z#YE_$?Z*nRI#rYtdwdQbFrf}k8M=*0-xwUtb7Y|SeeMMyPmL!>97iO8E<~JiP1?5* zCk)x*)VM_HitzCZ9LEARDm;x{y5Amgkzky*{pr2(pc+Cx>mg$_zFDe%5RdAB)=s%6HpndmGQ*e;gh1@?IWd86v1mntt&blf!h21T%rL_*A2PR>&V@S4VB2!~@eBXJ^?;C$RFY_&I! zCtZwl-Yf~GhDD6oNx<$0Vb&tt3HlE2R& z4A#42K?uvFBx*B6?Fn_*Tcm+XidhSQk|wzKZITt9&qnMyVec{%NP_@DP+PL2(m0V~ zO+~u1u{JsJx<5B8d;SSEZ4aaQe-}{3|65GTfzZ~a)n@6X#yYgWNw3?)e6YfM*wFxk zi)btMWgm=n4;C3=MzPc<24NYJy^L4T4tYkK64X;In>GgWqJtf8MjYXxa<=OvYuDeb zX7|qFgPl-@0RpyK@|`8Qx>OO)E`8)WVm83;mvqUzpIPYR=zVJT8tHu|u_mNvwn#Ik zrST2jm(Lgv?ZKLTHTImTvE#^^CC~ljb}0x#d~67j`RZI?I2_`4{`6CL=&`3@+2W12 zUX34n&ug$Sc<~vj)-sB6Vt^+s+5ROb1>x#V&)dAclyk1u8NV$10L=oa`)wB{+T+!% zNN+Yj{F=8!Gf_t9lI%KwdQ!8nzYNFY-+llJN*n!K6@GfV{LI6Kk<(DVbIH=tJXva=Hjy>hS><1 zC?HWnyB#6UO=_o^yJ#3CY+_9AM+0ug0y_k3m}lQ4TR@&|Bcc0RXALn4_6Q!!++kf& z#Ewfqx6cAkNicyi<_(-HFW_8x5!-gV4ZsoPj3A%s>@wm)n(ceFEqk$BF_1KL$`J$1 zQg$iE*o_42Ns!2wqT#^4l>%N;;A@KM?5#N$qY2J&YLe|+vPFo@Pl*Xy(_pNTMi=eZzud#OWl}5_@7YSrcxF_f2(d&$V+)0otC0{&1wOIQrc$UI&spK@`gxqX zcn(B_1IG@cH&{Ss%*?^AJW$R$+Jn}5$_CT~ISGzL3S@#3`y|Ebdt9G;ax&ho?N=5B zPJQb>?2HQ-GI--FZpQ7eyvbpKhsH0alfc6J9j#3`)F_ud#vBfkQ^9Tw(BKXMbcnSI z$P8AEO-<-Hv!EC57tspIKeWhro=j2f_oTfG?E$F+PAk~gNM9IK*s&LJW_%GB%MI-C zc6-gGY=a5dLZb}$yGRa%3T3G?as+^tS!Nri_SjIdPzd{7j5(f?N7JV8r&yV>b!rpq z*&DlBE1HD*7OsppySmb$K9M%P#%nH>&__vJP>j-hjwDxu!2JQ~gYT|j&|ZsaN(U(| z0F#~5JMV^C^lllL^>J0VxG#~g#iVrprL}7VpmJ*MY5+K2^S_=?hPwH~8UQl|GAh3( zRCgjS(??CIjF!_FS#OkhURJ~*@b;XTz0k^}xXw{%OcdY)ymK;A)YDPLYY6m}#F7ui zfvGI1SmAQ_q>&&?!XObRK)JR;p9!s7R_-^EIHx5Cgh>4B7e2L&3+o&Be}DUraO(6q zWX9mGx8H>KzWpXF^!Eph^MS2P5p13V;Pdvf0BqC3o0n~)-L+SP)BD-1Em0IDfC&gb z*94!pUZ+6N5LqMR zvc$vBeFxjc2$?ZBaP^hQ@_dG1yG)Y?v4|asMQW#jyRxe6;R=QXT#|&Ef)RPrIws#Z ze-2MR`V=fPmii0$#M|$}+Tu!kF%#m5lnN9O2GbQw2g!3S$f$Lq6>Vy{2E=pO%obth zT`a4GmFthfK|XWy=McfLRmUp8_?AAe+HWKf)YXzk1Zd!J(CCjtMg_L)d2AFTY}qaS zA*|0*j;-HNO#qiYx0m#J$*xEYIjP{7Z%9J}6at!B>`4v-4mD#wG#{<A`Oo}DpXC%1I1pksw=K-rLgr3DL9Kw?UhKUO?8 z3D9$!ojTKu;MOzOY-C@qpaFi9Anjxj&v?)jxJ>yeF{u<@Ek6-G`0X;}D@IG!8L|6`SxIlae4IM;GnQR`6lj8_U+z zvflf&2l~-^6wu50Xb;+a=faooN)=lU&2LK2%V=C1+oS!AB}&W%sUT*Tx(NUZTjGmf z{TlxI@4gCa8CR?=;+KE&9ave~Ux^aS3~L#eqTtA!1wL;tSIhJKveu(_>`FhAuM6bxK;zq5;H zF8@qZaFBd3FceHl1sPd>FLkkt%EE0Nl1d2%B$0kd0Rli;FW)2rY)yXxD0lv6rrY8b4a%x9YG)j zz^ur;kIn)DBNcDb-`=gMgOXDB@mZctT9^E(Pf%a4ZH+ zg#bxJz`0~0JGc5WI|r7I{zg5AXKR*afNJ`GqiZ;EuRib|lWsx)hz%7t)cUOrDHcJC zM+>%x$Q`jctCgYi`k`Jk6niEStmJk^OKNVXVuutHIMnwXnE%q@L(D(a9L9^by7_!8 zyws9rBIWv&Y-^xsdvFYDyDJsGj`}8~_pP;ADydAFn4UQyE!*bLy+EwfI8$~B2&w1g zNrB4eot*=pU9ZLWz2+M9d;8Buo#V{&HgE2FAoO~@%f2Wp5y9Gt z97;7Upu1nKs!EjA4M_`PBab!`0*}t?at5`eX zbrDSnK)9V2)vQ5nw?HP5Bb(w8lT4r%-`2(jJn@Zh!CFQy%klBI-G!?T9&wl(oQTqe z$z?Uglp?1u?4TY&nJ1QmMD5%NfEYY0SZbQ!K&T6>uCq|n*+M(z9TXZeYq(2 zu+;Z0Y~WhK0-nMlXQ;?AcicNd051pDtX5Z?0(*qkKXwl}{O3>EaUjh65A{0-_H8KV zNvzPU4c~{a-Oh>lb~G;Vmw)>|@DKMq0BaeqymAfy`Xg_~^5Xs%s?0Mp`3?rG-Cv+< zPe8}KK;FE)4B&6S-@m-G5S+NMEGsZq``+i)G7J$G2fa%&GiBZ`vArP*Bxr#^P19&4 zBI1msoY7biNeSmCBoz>2<4W4RtN=u$z92=wn9{`d9Mc73a6HeD8wxvf8nA@IU{S*d zj~z--1k^~#q;N!Eo=gD4v`uCUTj0dF*e#No(yi>uCL!ok7rO+;F-=kD`--B($@O!n zti@ulhyGx3T8v^Ee;IH1DU2}?P4&Zt@2xSG8tgW-t1S*pz;Rdhiv-e{wJtzv@%)pI z;M~OxFo0_g9>ov8>D`m`B@T65Ok2oHErj`qfV~rh-O?gu6r7^%UXxGTm$R}^Dc;H!MkOO-W37`)W^VuIC zQUIs1aZeSxj>rK;nfjhoPy-y5q=6`~e!TB!6wss&8;Yb8p3+B`vPrsvtSN~T4FDSR z)%<5L0soHBJ{a`ZdF#}|n@qOW32XkD1zSgGFAtRjo(7=Q6g3U`Thia9;tc*nkOIWi z6gj2%wi=vE*4uhrUymYNw&k`Yh@?@3gg+ZQ)Ue7mU=c0~oU%{ufp;ns$}iU40EZ)f zYGB!^GYpW}PeT4gYOabmg|Hk<3jk+1JEd#U@zna$N04ScV#Ued-5s# z+VA~2Hn(=r?-~5ukGu)DU4ImLw!Z+dF*GYeSJ?_>IlAUXUK&mCa>_Pe=;z1`!OT-s<}J22M44itU|e!~VgQXsw>zY>7Gr;hobxUPGGi(0 z=n&AwSPdyX^cV=6l12&K7Xeu5Ww^TE+hzQAao!{cT>v5)K(vZ=m~ebK0&tKFlu7fH zJvP~>vUq-6?y|vShb`JvPU&x53W#YW4-zS}Y#Ejr7k4%RFqZm#WWBs0&tX{@LP0{Z zQT!0?!aOzT&0frDoHc4ZLY5S~)_c-;IKqkh?n7lQa+BeQ-}o-P;?PwS7PP-{wZvIt zNSZ)Rj|O##QxUi7Cmd?M#6kkX4A#(L*YsIkHt9;X3d@OX8?$3h5KkFoaNg^} z)}g&HU&(pSkR*yvDAw2^=>VlQYBpkPG=Nh?VvD?jnnSye9b2?D?z}V!hPXy6TAGvo^IOG!pJEYjlyq;AyHRDKytUw&W9-ByN3$XBC_UFGLUfAeX@Uq z6LuD~5o5l%Mi*Q=E?RPz_Mld{W<$9tU`w`#L;U6+e-aOV`#S)DH{Ny?e&PeK$Kt~N z6vOmeo*QJDfwhdCo%NSY|5w|NA3u)6hYzFI>&^AS=j|nHgTdgkpKrB^-tWSg)>@Rs z2-aE<0Skj1#?0#h%v)mbN~RB{s+;>xo`%s9ax5h9D8|SNeJ@7>QJ}l_x8^lQy1U)}%HhD?g(F4q}dUNVky?)+u#9#{@h#DsiNr z<6xe(>m%-=2#q*Dx=5#Jm^LBspw>Kx#nx~KTcaHqGFV$)24E(qpHpd*TDHXcMck%X z7@T0VaSa?W^p$p44ZNGKp*z;L-|y>Rlg1FVEURIMpKA(!5Vm zH7UMcQm8EZi-elO=j;F~>D5s=8u1he_K*-Pos0!OS69JqIf^0-~-Xm%n8=*@q z#6vtkaCR{k>E{>Qxk~L@KBKVJmoD?p$QV%lnH{?hQyLu1*TV7^Hr(%!4h%^E&0>38 zXrJs-_rgEG@gJIyE|BR15eVDfAoyXBmKX!lvMAhP&(wgCi1&xPAds7c zWC|6uWu#?c{A$FrLk>nm(3&FlB2}C-=5NJF1}T4v18adg_>q2rQ;zr%F`zfZh)>jC zm@NfoFHK4=07;GD;M&pljXNiNkPsXI5hH$)ltt9lcR?hM2=rC!@ILDEQCok@dZ4MV zi5_C=+6chu+c1A0Fp+g^5GD-8*1R9nmk%L0MKtMLDWsatQ9~ULQ^7VW0TYvHy6lIB}g&zLh zC*Fapj;=bjb@s0rGU)eq!S;>y)0Z63apcGmyzhPQ!}|Ip->7Sm#*p_?wTv4pQV5ih!S*x*s7M7F&m@Ye(lpWD^Z!jn4KsBy2!x+*vWN zWA;GfgNNodI@ql){(UNIE>?_Lb7-lEv;6wgGnbMXCr_Woul)M&$g>PTa_6h@ zfp^`4h5k#!0yl=x%gv1KxxIDqk_49XJjbC!hj8f7A>4AyE!f%F!TS0-&YnGsQ>RYh z{Q2`34u`PTUUE$KdHe1Jfah{38G5}O%#6{v*w^o>stViN7iPaN4tn!RIBzck2;L>2 zP5}X39g>)H5;!f7veHulHxfZ}47f_k$D|5kCYa38ewTpfX|UJ>;c%YeR8gX^tQ%KW zfH^Gq+A)Bd6G4%d@ef5($*uDM03ZNKL_t(=9SFdgfz#s($9oley}T`muVrz(m@QVA zO2M)zs|rt@eHNp#fH6RSbq!gTwI0WMK#HsG!7f9bz3J$&!7IDVa&rlXaDi}cvdaA~ ztSn<|V*^h=_7s>ID+`PG#5>=Q#r_~2Kv2YxgfzTcz&D!AavzLH z%s@sZw#pGQ7%XK=@x3huXou=8Xrwt9=@j%XcBi!my#N|NQG8HR?A%ZRvKTvA^Ncaz z)CW;b;yyJXWaxU%IteDBc=aqObf1m)lA!DCWvBRAE1cMiyX=o4Uo2Jh+$I1s*N)kM zZi&?66VTj-WQPS4>p`ziY?A2nbwCBRd2V zYXDF0S?jZ9@nsII56O75a1e)xPfBPryBWI73{u#AitHJh>qj#*12)|IuGz0%9i8^U zD8h$SsVtE$dsxgzLcr!pdk;l)U$n)N5x31^92$!O5%CXVeG8e`PnZhkl~>}n+it_o&JH#= zH*w*@1)Mo^2ItS8$JW*silUf<;`6qrIo9v@FZ+JzO&QsvQL(Q@bD0@CI~P$^7RC?; z{rn}#gqgSRbr4+R6r^VkGf|LM<@s1?8t7Oo%o`aQrP3b_hV#X800t?1qIWuvLTf?l<%+D_C zC^p*!SaEb1L`w+$z^VP<6%9bV1pE01KSK_rU_d5eQ%v$%9Z1` z4oG0D3a3vzg7wXbvwY*RYw?yFUNd2`yHuo*etRoI2mrewqeKWqG9IGuM~g|lA3x9( z7OzwgGq8~QWU$FOGAh#mNepOk11y6!JCd4fUd7r>*)fjSBy}H~1*zJgO^RT$6e=>@ zXhK3z(tZ;(!p)CaKt5Xi$w;*)Dd^ zQbtp%7^W5=N->;6APkh?rGH&_eR+WTOll~EvD)T5p4n{c)ZcJHVb{P)Kqp0PO%xRJ zw3G=zg?3g+sLx5cFKU2w1VC4c*eG9qDCmb!cp}7rOy>}yFgwzQ);4h#BqvJQH$2Zb1yFf!T*9T2wy4(|P&~j%>3?_CkP!bSW*?!ZKCcv@dTVewTfw$1P}mJwz9<%0Y3G^dATpK3kyy7i z@aL1ZL|l#%a@Cr2N<<5GUc z>@`nYr8NeU9uu`e-%z1%Mp&cRowr6|uP6cjGW604{=HhkUuuZ$a@+ag2yNTb9QJjU z8|O##flATNgJJXjoHyvK(mmC2{-^y0K%z^0*$sk=|4~YG*5x?t-0+T_#oo1 zvce8Xets&mF;@6AD(3_5$Kf%lxuvO$%` zo0a=WY_4i+V5PG7QkfEgwZH(jhC}@NAAS-KKYjwtjMv?K96$TRcVKDpr7!+i?_1Vd zY;SGtJJ_|~%@~8hV1U73fGe)J0d>jfkw5mNY@gzDv5`jq47v!Rt84Yi&SqFZ!lF z*l3}Xe@X%88o4r&W$Wr4d8l5a+O41+?hdL+AlLQvf-*vpHL};{Ym%qzuV()W`6vPK z(#^_oyDUY;a9m8prl%*SSDj#>%}9 zL#=BvpgI`j&;dtGT23SHm+H${G3CajV{d*4NPlQg&}OShbrCv(;lBA%`LON)a6t1t zwWcMRl$5U`N!a){KeTsf3Z+8w1%&5B+_t(kLI}dXswotk@;yuf1a8zS2P|$NQ!%OMLks@5b+Z@^3I2k8xmS0l)b1x8u62556oC z0QoelmYFdej=v`X&05}~-|u5-X$e4tgo+QdwUyOTU*%L z+QN7|#&|rQ0pvAEUhAj3f2*%KZ{NL*nJ;-+pqHZcdKs+ceXkS1%ovS!z|1g)kY{GT zhUTp!2)>sfu&b6@${7H)I;CIsHl*c4DWf( zn{oZIS9mP&$TO?bSy@<15&AEA18E#OX8k_)KO^0zS3J{=)I&wNL>sY7**}o2VY?av zb%9Jkud52d4#pUX62L?XAPjMP=Vu`JfRJl9BvP@DvHDnTY!4FUQwZr|e-!8+=lr9n zs%BBkF8iWX+|a$3n2xYU{vZbGNUXwEVO5^a6>hIR_x~3ATbS!H4I9e=!;t`UHQ7a} z`U)|iRRUjP0EtQXJKh{(=njM$>mio75@mx6>~A;a$0jmV5P24jb}tYo8Kmr(rqEz) z?Mm+z3v6HiiK?oC5-jy~>TA{icBLq|1^KEN;XSzNnbqca+MN^${=0&bPzJQAAS(rk za{_G9uw*nT?kTN7YR7!5y$r{C8BUJNFwUsdzm^CWM2Y@R%`L4{oeI1HbA>(W=hNc~ z$MR{B%&wZdsp6hpnS3e0Ch&Ozp`1Ech71U%C8y0o5YA|l*+9awo8lvx$Lw~oFU!qq zyIHt?SFyENKX(Qv9z6lej3diy_}JUthe6&81AM75VdZ-DHI8Q!Sy)32jTcf}2hEOc z0Ns+-xO*bgl#XC#lw4t47AUI{WmRFl*hFEsQB9rK+L7pG28IkWGx?XB40)D;Kxx|` z6%F(ckthJ1l5%Z2-zR09%rZFytPa>c>Qw-$q=ct;i~1hhj+RI zxIM%#2-uEP_L5{gT{41HT@u2+nVPrSIJS!~keVaTzBn2c_?2!+uKMCBjWs0hzw5nsNk5G_QUrZ*o|I!AlPZ}0K7hfoevZ>c z1rBM0tBrf}JA&*cmj!A&%qeY=AwsxVO(KJ#WX6ecf#uv_kxW?gG}Qkw7G`YhQViM- zOd!h^66JS#@CdDtw(eie6z-QWjo~C$k2|Hs@jK(utRBECjvUAB z*WG|uz4Dbfwzi73g#mh5j($I%9*%f)ej@~u{=BznGbRCDri)*2(`CDQ-|POZAq(N+ zF9H4L5Yt;sK9>S@iMgCQIMOf;HHE1| zHqB>*yC94^U@b&N352j<8~nN4jtCK7R&!vNsw)I^U{wo-lp=C;p*-V_-LM-)p``&8Ch1uNH;Q=)V>**dwjN;49p{?%5Cf4w(E0y-QQ>q^;i^8NS4U1ME#8!q z{6Y>jQo*IrdRYzv!7?|L3>s<#kjKWY3pK;otS1jT{j4#Q_xc#KFY9ZCEL3YP&YyV> zkKFe#Dr<3Q`2c?Q-56c+ zs`$H6_IaZ(*{fTEHXzPk5g4atkbl0}*+-3Ot!rN2i;PHUj9bM?pqE04`SK>RreboH zA^Eewy=@PN_|@P1eLVf#^8kQ1z4~f={Qa-T;-L4ku}*ipcoKt*FGD$$?=|op0J1C$ zSPlk*Ab{@vbN^OLz%cWSRbETK42Q$n&n}SeGSF+_yk?!xf%ET+qu z9-^u&df9{tKF7f4O%H-=*w8PuaApjIh%rMnKWiE0q`X$@dMW7>E%1&AfDR#$i?MqY z4q_jKqj`=qMTKH!oWh{DPXvmMD=7;25OwU!m{S^H(ll7-F@Smc>(e_0)-r>&ESvbU zsiJ_u3zI@2rIW8a{<66Ts4bB%Vk z@$|iakFDVth78{O+PC6uH{OmO<>8{PjXvT)-+N&5EZv_YbByGN2PXnpw}ZR^Z_&@F zQHYbRMadS!@d)2~`f>dAeSeS7J$N@BKKT^3Mmw-+(QvMfWdmm|+J^m`M1 zGc(m)EUOCRqC{C%D2ftQWl>ZWMmw8W-`T`-7tY`xpLh_9U+80PaT%|^>UzBEHLu5O zZn_EA9lZjpgC%5{nK-Srd6t~vt#hPIHV^f%uoS`GlfEVF6-1BaCUbqLtkkOczI z?ba}bpLHn39G2y03jx#&oiw46VI8!^tg!vsg90(O2srvAS33903i!GzBmgXXx~mSt zn3osrF^K7)KA84GOqo8ub~nCqT3*2u(`PdYb{JK$AOiFd12Cd>i~jl9A>R73KT(k zDtPY-jB3DT?f^Eh5@6RB;nWu0i~%Ge$0`-D({7+c23XDvj`TB}9Ln0@8o=AX-x!m; zRhTg)VG{}pG?@du8xU!WM-AEH*-?STC4+%f;VKlUrvf%@V6x{O2FOi@qpMdSGX|Aq z42K(7<|`&laO1@}UM$d(g=D#SVI$V3u=Z(ajg?h}Q%`*xkAM3F0LIk^kKz~a`Y4tc zmq3PODTCM{fv;~Vffd2=@bcDGCs)n|eVLU8K+o+IZ7@bffv3- x2o@A0W`d=dZj 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 I931_j-rT68MAF}4 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

Zd@6%et7oXiA1FBEd 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%0D_tN(`9GnLptrB#K-JXup^O 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

T<`Tg@PUvdAczP+@SjlnfZo3Ci?6 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�+y@Zt>hsF$=x=I!0vTHZb7xYG1Asp-crVjeq-D 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

VItHAmKY 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�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

X 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

-
+
{children}
diff --git a/app/javascript/mastodon/features/annual_report/archetype.tsx b/app/javascript/mastodon/features/annual_report/archetype.tsx new file mode 100644 index 00000000000000..fffbc1803ecbe0 --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/archetype.tsx @@ -0,0 +1,69 @@ +import { FormattedMessage } from 'react-intl'; + +import booster from '@/images/archetypes/booster.png'; +import lurker from '@/images/archetypes/lurker.png'; +import oracle from '@/images/archetypes/oracle.png'; +import pollster from '@/images/archetypes/pollster.png'; +import replier from '@/images/archetypes/replier.png'; +import type { Archetype as ArchetypeData } from 'mastodon/models/annual_report'; + +export const Archetype: React.FC<{ + data: ArchetypeData; +}> = ({ data }) => { + let illustration, label; + + switch (data) { + case 'booster': + illustration = booster; + label = ( + + ); + break; + case 'replier': + illustration = replier; + label = ( + + ); + break; + case 'pollster': + illustration = pollster; + label = ( + + ); + break; + case 'lurker': + illustration = lurker; + label = ( + + ); + break; + case 'oracle': + illustration = oracle; + label = ( + + ); + break; + } + + return ( +
+
{label}
+ +
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/followers.tsx b/app/javascript/mastodon/features/annual_report/followers.tsx new file mode 100644 index 00000000000000..196013ae9d6b0c --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/followers.tsx @@ -0,0 +1,69 @@ +import { FormattedMessage, FormattedNumber } from 'react-intl'; + +import { Sparklines, SparklinesCurve } from 'react-sparklines'; + +import { ShortNumber } from 'mastodon/components/short_number'; +import type { TimeSeriesMonth } from 'mastodon/models/annual_report'; + +export const Followers: React.FC<{ + data: TimeSeriesMonth[]; + total?: number; +}> = ({ data, total }) => { + const change = data.reduce((sum, item) => sum + item.followers, 0); + + const cumulativeGraph = data.reduce( + (newData, item) => [ + ...newData, + item.followers + (newData[newData.length - 1] ?? 0), + ], + [0], + ); + + return ( +
+ + + + + + + + + + + + + +
+
+ {change > -1 ? '+' : '-'} + +
+ +
+ + + +
+ }} + /> +
+
+
+
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/highlighted_post.tsx b/app/javascript/mastodon/features/annual_report/highlighted_post.tsx new file mode 100644 index 00000000000000..3a2a70713da64b --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/highlighted_post.tsx @@ -0,0 +1,105 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return, + @typescript-eslint/no-explicit-any, + @typescript-eslint/no-unsafe-assignment */ + +import { useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { toggleStatusSpoilers } from 'mastodon/actions/statuses'; +import { DetailedStatus } from 'mastodon/features/status/components/detailed_status'; +import { me } from 'mastodon/initial_state'; +import type { TopStatuses } from 'mastodon/models/annual_report'; +import { makeGetStatus, makeGetPictureInPicture } from 'mastodon/selectors'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +const getStatus = makeGetStatus() as unknown as (arg0: any, arg1: any) => any; +const getPictureInPicture = makeGetPictureInPicture() as unknown as ( + arg0: any, + arg1: any, +) => any; + +export const HighlightedPost: React.FC<{ + data: TopStatuses; +}> = ({ data }) => { + let statusId, label; + + if (data.by_reblogs) { + statusId = data.by_reblogs; + label = ( + + ); + } else if (data.by_favourites) { + statusId = data.by_favourites; + label = ( + + ); + } else { + statusId = data.by_replies; + label = ( + + ); + } + + const dispatch = useAppDispatch(); + const domain = useAppSelector((state) => state.meta.get('domain')); + const status = useAppSelector((state) => + statusId ? getStatus(state, { id: statusId }) : undefined, + ); + const pictureInPicture = useAppSelector((state) => + statusId ? getPictureInPicture(state, { id: statusId }) : undefined, + ); + const account = useAppSelector((state) => + me ? state.accounts.get(me) : undefined, + ); + + const handleToggleHidden = useCallback(() => { + dispatch(toggleStatusSpoilers(statusId)); + }, [dispatch, statusId]); + + if (!status) { + return ( +
+ ); + } + + const displayName = ( + + + + ), + }} + /> + + {label} + + ); + + return ( +
+ +
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/index.tsx b/app/javascript/mastodon/features/annual_report/index.tsx new file mode 100644 index 00000000000000..91f03330c01472 --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/index.tsx @@ -0,0 +1,99 @@ +import { useState, useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { + importFetchedStatuses, + importFetchedAccounts, +} from 'mastodon/actions/importer'; +import { apiRequestGet, apiRequestPost } from 'mastodon/api'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { me } from 'mastodon/initial_state'; +import type { Account } from 'mastodon/models/account'; +import type { AnnualReport as AnnualReportData } from 'mastodon/models/annual_report'; +import type { Status } from 'mastodon/models/status'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +import { Archetype } from './archetype'; +import { Followers } from './followers'; +import { HighlightedPost } from './highlighted_post'; +import { MostUsedHashtag } from './most_used_hashtag'; +import { NewPosts } from './new_posts'; +import { Percentile } from './percentile'; + +interface AnnualReportResponse { + annual_reports: AnnualReportData[]; + accounts: Account[]; + statuses: Status[]; +} + +export const AnnualReport: React.FC<{ + year: string; +}> = ({ year }) => { + const [response, setResponse] = useState(null); + const [loading, setLoading] = useState(false); + const currentAccount = useAppSelector((state) => + me ? state.accounts.get(me) : undefined, + ); + const dispatch = useAppDispatch(); + + useEffect(() => { + setLoading(true); + + apiRequestGet(`v1/annual_reports/${year}`) + .then((data) => { + dispatch(importFetchedStatuses(data.statuses)); + dispatch(importFetchedAccounts(data.accounts)); + + setResponse(data); + setLoading(false); + + return apiRequestPost(`v1/annual_reports/${year}/read`); + }) + .catch(() => { + setLoading(false); + }); + }, [dispatch, year, setResponse, setLoading]); + + if (loading) { + return ; + } + + const report = response?.annual_reports[0]; + + if (!report) { + return null; + } + + return ( +
+
+

+ +

+

+ +

+
+ +
+ + + + + + +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/most_used_app.tsx b/app/javascript/mastodon/features/annual_report/most_used_app.tsx new file mode 100644 index 00000000000000..2d8c8aa582a292 --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/most_used_app.tsx @@ -0,0 +1,29 @@ +import { FormattedMessage } from 'react-intl'; + +import type { NameAndCount } from 'mastodon/models/annual_report'; + +export const MostUsedApp: React.FC<{ + data: NameAndCount[]; +}> = ({ data }) => { + const app = data[0]; + + if (!app) { + return ( +
+ ); + } + + return ( +
+
+ {app.name} +
+
+ +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx b/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx new file mode 100644 index 00000000000000..0e4c78f6398930 --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/most_used_hashtag.tsx @@ -0,0 +1,29 @@ +import { FormattedMessage } from 'react-intl'; + +import type { NameAndCount } from 'mastodon/models/annual_report'; + +export const MostUsedHashtag: React.FC<{ + data: NameAndCount[]; +}> = ({ data }) => { + const hashtag = data[0]; + + if (!hashtag) { + return ( +
+ ); + } + + return ( +
+
+ #{hashtag.name} +
+
+ +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/new_posts.tsx b/app/javascript/mastodon/features/annual_report/new_posts.tsx new file mode 100644 index 00000000000000..9ead0176b2ad7d --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/new_posts.tsx @@ -0,0 +1,53 @@ +import { FormattedNumber, FormattedMessage } from 'react-intl'; + +import ChatBubbleIcon from '@/material-icons/400-24px/chat_bubble.svg?react'; +import type { TimeSeriesMonth } from 'mastodon/models/annual_report'; + +export const NewPosts: React.FC<{ + data: TimeSeriesMonth[]; +}> = ({ data }) => { + const posts = data.reduce((sum, item) => sum + item.statuses, 0); + + return ( +
+ + + + + + + + + + + +
+ +
+
+ +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/annual_report/percentile.tsx b/app/javascript/mastodon/features/annual_report/percentile.tsx new file mode 100644 index 00000000000000..a758db72c1abfa --- /dev/null +++ b/app/javascript/mastodon/features/annual_report/percentile.tsx @@ -0,0 +1,53 @@ +/* eslint-disable react/jsx-no-useless-fragment */ +import { FormattedMessage, FormattedNumber } from 'react-intl'; + +import type { Percentiles } from 'mastodon/models/annual_report'; + +export const Percentile: React.FC<{ + data: Percentiles; +}> = ({ data }) => { + const percentile = data.statuses; + + return ( +
+ ( +
+ {str} +
+ ), + percentage: () => ( +
+ +
+ ), + bottomLabel: (str) => ( +
+
+ {str} +
+ + {percentile < 6 && ( +
+ +
+ )} +
+ ), + }} + > + {(message) => <>{message}} +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_annual_report.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_annual_report.tsx new file mode 100644 index 00000000000000..8b92f31add50a6 --- /dev/null +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_annual_report.tsx @@ -0,0 +1,59 @@ +import { useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import classNames from 'classnames'; + +import CelebrationIcon from '@/material-icons/400-24px/celebration.svg?react'; +import { openModal } from 'mastodon/actions/modal'; +import { Icon } from 'mastodon/components/icon'; +import type { NotificationGroupAnnualReport } from 'mastodon/models/notification_group'; +import { useAppDispatch } from 'mastodon/store'; + +export const NotificationAnnualReport: React.FC<{ + notification: NotificationGroupAnnualReport; + unread: boolean; +}> = ({ notification: { annualReport }, unread }) => { + const dispatch = useAppDispatch(); + const year = annualReport.year; + + const handleClick = useCallback(() => { + dispatch( + openModal({ + modalType: 'ANNUAL_REPORT', + modalProps: { year }, + }), + ); + }, [dispatch, year]); + + return ( +
+
+ +
+ +
+

+ +

+ +
+
+ ); +}; diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_group.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_group.tsx index 36f033261ae44d..d5eb851985cd99 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_group.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_group.tsx @@ -9,6 +9,7 @@ import { useAppSelector, useAppDispatch } from 'mastodon/store'; import { NotificationAdminReport } from './notification_admin_report'; import { NotificationAdminSignUp } from './notification_admin_sign_up'; +import { NotificationAnnualReport } from './notification_annual_report'; import { NotificationFavourite } from './notification_favourite'; import { NotificationFollow } from './notification_follow'; import { NotificationFollowRequest } from './notification_follow_request'; @@ -143,6 +144,14 @@ export const NotificationGroup: React.FC<{ /> ); break; + case 'annual_report': + content = ( + + ); + break; default: return null; } diff --git a/app/javascript/mastodon/features/status/components/detailed_status.tsx b/app/javascript/mastodon/features/status/components/detailed_status.tsx index 5811efb1907f99..deb330b9a091bf 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.tsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.tsx @@ -49,6 +49,7 @@ export const DetailedStatus: React.FC<{ domain: string; showMedia?: boolean; withLogo?: boolean; + overrideDisplayName?: React.ReactNode; pictureInPicture: any; onToggleHidden?: (status: any) => void; onToggleMediaVisibility?: () => void; @@ -62,6 +63,7 @@ export const DetailedStatus: React.FC<{ domain, showMedia, withLogo, + overrideDisplayName, pictureInPicture, onToggleMediaVisibility, onToggleHidden, @@ -319,7 +321,11 @@ export const DetailedStatus: React.FC<{
- + + {overrideDisplayName ?? ( + + )} + {withLogo && ( <>
diff --git a/app/javascript/mastodon/features/ui/components/annual_report_modal.tsx b/app/javascript/mastodon/features/ui/components/annual_report_modal.tsx new file mode 100644 index 00000000000000..8c39c0b3aa07a2 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/annual_report_modal.tsx @@ -0,0 +1,21 @@ +import { useEffect } from 'react'; + +import { AnnualReport } from 'mastodon/features/annual_report'; + +const AnnualReportModal: React.FC<{ + year: string; + onChangeBackgroundColor: (arg0: string) => void; +}> = ({ year, onChangeBackgroundColor }) => { + useEffect(() => { + onChangeBackgroundColor('var(--indigo-1)'); + }, [onChangeBackgroundColor]); + + return ( +
+ +
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default AnnualReportModal; diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index 64933fd1ae560f..42a00acf81f8cc 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -18,6 +18,7 @@ import { SubscribedLanguagesModal, ClosedRegistrationsModal, IgnoreNotificationsModal, + AnnualReportModal, } from 'mastodon/features/ui/util/async-components'; import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; @@ -72,6 +73,7 @@ export const MODAL_COMPONENTS = { 'INTERACTION': InteractionModal, 'CLOSED_REGISTRATIONS': ClosedRegistrationsModal, 'IGNORE_NOTIFICATIONS': IgnoreNotificationsModal, + 'ANNUAL_REPORT': AnnualReportModal, }; export default class ModalRoot extends PureComponent { diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 7e9a7af00a405e..ff5db653479cdd 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -217,3 +217,7 @@ export function NotificationRequest () { export function LinkTimeline () { return import(/*webpackChunkName: "features/link_timeline" */'../../link_timeline'); } + +export function AnnualReportModal () { + return import(/*webpackChunkName: "modals/annual_report_modal" */'../components/annual_report_modal'); +} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index e91d6e52fce60d..5bc8c4ad711671 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Oops!", "alt_text_badge.title": "Alt text", "announcement.announcement": "Announcement", + "annual_report.summary.archetype.booster": "The cool-hunter", + "annual_report.summary.archetype.lurker": "The lurker", + "annual_report.summary.archetype.oracle": "The oracle", + "annual_report.summary.archetype.pollster": "The pollster", + "annual_report.summary.archetype.replier": "The social butterfly", + "annual_report.summary.followers.followers": "followers", + "annual_report.summary.followers.total": "{count} total", + "annual_report.summary.here_it_is": "Here is your {year} in review:", + "annual_report.summary.highlighted_post.by_favourites": "most favourited post", + "annual_report.summary.highlighted_post.by_reblogs": "most boosted post", + "annual_report.summary.highlighted_post.by_replies": "post with the most replies", + "annual_report.summary.highlighted_post.possessive": "{name}'s", + "annual_report.summary.most_used_app.most_used_app": "most used app", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag", + "annual_report.summary.new_posts.new_posts": "new posts", + "annual_report.summary.percentile.text": "That puts you in the topof Mastodon users.", + "annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.", + "annual_report.summary.thanks": "Thanks for being part of Mastodon!", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", "block_modal.remote_users_caveat": "We will ask the server {domain} to respect your decision. However, compliance is not guaranteed since some servers may handle blocks differently. Public posts may still be visible to non-logged-in users.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} reported {target}", "notification.admin.sign_up": "{name} signed up", "notification.admin.sign_up.name_and_others": "{name} and {count, plural, one {# other} other {# others}} signed up", + "notification.annual_report.message": "Your {year} #Wrapstodon awaits! Unveil your year's highlights and memorable moments on Mastodon!", + "notification.annual_report.view": "View #Wrapstodon", "notification.favourite": "{name} favorited your post", "notification.favourite.name_and_others_with_link": "{name} and
{count, plural, one {# other} other {# others}} favorited your post", "notification.follow": "{name} followed you", diff --git a/app/javascript/mastodon/models/annual_report.ts b/app/javascript/mastodon/models/annual_report.ts new file mode 100644 index 00000000000000..c0a101e6c872da --- /dev/null +++ b/app/javascript/mastodon/models/annual_report.ts @@ -0,0 +1,44 @@ +export interface Percentiles { + followers: number; + statuses: number; +} + +export interface NameAndCount { + name: string; + count: number; +} + +export interface TimeSeriesMonth { + month: number; + statuses: number; + following: number; + followers: number; +} + +export interface TopStatuses { + by_reblogs: number; + by_favourites: number; + by_replies: number; +} + +export type Archetype = + | 'lurker' + | 'booster' + | 'pollster' + | 'replier' + | 'oracle'; + +interface AnnualReportV1 { + most_used_apps: NameAndCount[]; + percentiles: Percentiles; + top_hashtags: NameAndCount[]; + top_statuses: TopStatuses; + time_series: TimeSeriesMonth[]; + archetype: Archetype; +} + +export interface AnnualReport { + year: number; + schema_version: number; + data: AnnualReportV1; +} diff --git a/app/javascript/mastodon/models/notification_group.ts b/app/javascript/mastodon/models/notification_group.ts index 09d407d44954a3..01a341e8dd5423 100644 --- a/app/javascript/mastodon/models/notification_group.ts +++ b/app/javascript/mastodon/models/notification_group.ts @@ -1,6 +1,7 @@ import type { ApiAccountRelationshipSeveranceEventJSON, ApiAccountWarningJSON, + ApiAnnualReportEventJSON, BaseNotificationGroupJSON, ApiNotificationGroupJSON, ApiNotificationJSON, @@ -65,6 +66,12 @@ export interface NotificationGroupSeveredRelationships event: AccountRelationshipSeveranceEvent; } +type AnnualReportEvent = ApiAnnualReportEventJSON; +export interface NotificationGroupAnnualReport + extends BaseNotification<'annual_report'> { + annualReport: AnnualReportEvent; +} + interface Report extends Omit { targetAccountId: string; } @@ -86,7 +93,8 @@ export type NotificationGroup = | NotificationGroupModerationWarning | NotificationGroupSeveredRelationships | NotificationGroupAdminSignUp - | NotificationGroupAdminReport; + | NotificationGroupAdminReport + | NotificationGroupAnnualReport; function createReportFromJSON(reportJSON: ApiReportJSON): Report { const { target_account, ...report } = reportJSON; @@ -112,6 +120,12 @@ function createAccountRelationshipSeveranceEventFromJSON( return eventJson; } +function createAnnualReportEventFromJSON( + eventJson: ApiAnnualReportEventJSON, +): AnnualReportEvent { + return eventJson; +} + export function createNotificationGroupFromJSON( groupJson: ApiNotificationGroupJSON, ): NotificationGroup { @@ -145,7 +159,6 @@ export function createNotificationGroupFromJSON( event: createAccountRelationshipSeveranceEventFromJSON(group.event), sampleAccountIds, }; - case 'moderation_warning': { const { moderation_warning, ...groupWithoutModerationWarning } = group; return { @@ -154,6 +167,14 @@ export function createNotificationGroupFromJSON( sampleAccountIds, }; } + case 'annual_report': { + const { annual_report, ...groupWithoutAnnualReport } = group; + return { + ...groupWithoutAnnualReport, + annualReport: createAnnualReportEventFromJSON(annual_report), + sampleAccountIds, + }; + } default: return { sampleAccountIds, diff --git a/app/javascript/material-icons/400-24px/celebration-fill.svg b/app/javascript/material-icons/400-24px/celebration-fill.svg new file mode 100644 index 00000000000000..d715cf2fb3cbe6 --- /dev/null +++ b/app/javascript/material-icons/400-24px/celebration-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/celebration.svg b/app/javascript/material-icons/400-24px/celebration.svg new file mode 100644 index 00000000000000..1d1b19ee72cfaf --- /dev/null +++ b/app/javascript/material-icons/400-24px/celebration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/explore-fill.svg b/app/javascript/material-icons/400-24px/explore-fill.svg index febe0a63b44b3f..919ecb580a3d08 100644 --- a/app/javascript/material-icons/400-24px/explore-fill.svg +++ b/app/javascript/material-icons/400-24px/explore-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/explore.svg b/app/javascript/material-icons/400-24px/explore.svg index 547a9994217ab5..bb8ba1f4c63fe3 100644 --- a/app/javascript/material-icons/400-24px/explore.svg +++ b/app/javascript/material-icons/400-24px/explore.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/styles/application.scss b/app/javascript/styles/application.scss index 465b748078f2e6..109b69bca5f5ae 100644 --- a/app/javascript/styles/application.scss +++ b/app/javascript/styles/application.scss @@ -15,6 +15,7 @@ @import 'mastodon/polls'; @import 'mastodon/modal'; @import 'mastodon/emoji_picker'; +@import 'mastodon/annual_reports'; @import 'mastodon/about'; @import 'mastodon/tables'; @import 'mastodon/admin'; diff --git a/app/javascript/styles/mastodon/annual_reports.scss b/app/javascript/styles/mastodon/annual_reports.scss new file mode 100644 index 00000000000000..39784e3b5ea12b --- /dev/null +++ b/app/javascript/styles/mastodon/annual_reports.scss @@ -0,0 +1,335 @@ +:root { + --indigo-1: #17063b; + --indigo-2: #2f0c7a; + --indigo-3: #562cfc; + --indigo-5: #858afa; + --indigo-6: #cccfff; + --lime: #baff3b; + --goldenrod-2: #ffc954; +} + +.annual-report { + flex: 0 0 auto; + background: var(--indigo-1); + padding: 24px; + + &__header { + margin-bottom: 16px; + + h1 { + font-size: 25px; + font-weight: 600; + line-height: 30px; + color: var(--lime); + margin-bottom: 8px; + } + + p { + font-size: 16px; + font-weight: 600; + line-height: 20px; + color: var(--indigo-6); + } + } + + &__bento { + display: grid; + gap: 8px; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); + grid-template-rows: minmax(0, auto) minmax(0, 1fr) minmax(0, auto) minmax( + 0, + auto + ); + + &__box { + padding: 16px; + border-radius: 8px; + background: var(--indigo-2); + color: var(--indigo-5); + } + } + + &__summary { + &__most-boosted-post { + grid-column: span 2; + grid-row: span 2; + padding: 0; + + .status__content, + .content-warning { + color: var(--indigo-6); + } + + .detailed-status { + border: 0; + } + + .content-warning { + border: 0; + background: var(--indigo-1); + + .link-button { + color: var(--indigo-5); + } + } + + .detailed-status__meta__line { + border-bottom-color: var(--indigo-3); + } + + .detailed-status__meta { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + + .detailed-status__meta, + .poll__footer, + .poll__link, + .detailed-status .logo, + .detailed-status__display-name { + color: var(--indigo-5); + } + + .detailed-status__meta .animated-number, + .detailed-status__display-name strong { + color: var(--indigo-6); + } + + .poll__chart { + background-color: var(--indigo-3); + + &.leading { + background-color: var(--goldenrod-2); + } + } + } + + &__followers { + grid-column: span 1; + text-align: center; + position: relative; + overflow: hidden; + padding-block-start: 24px; + padding-block-end: 24px; + + --sparkline-gradient-top: rgba(86, 44, 252, 50%); + --sparkline-gradient-bottom: rgba(86, 44, 252, 0%); + + &__foreground { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 8px; + position: relative; + z-index: 1; + } + + &__number { + font-size: 31px; + font-weight: 600; + line-height: 37px; + color: var(--lime); + } + + &__label { + font-size: 14px; + font-weight: 600; + line-height: 17px; + color: var(--indigo-6); + } + + &__footnote { + display: block; + font-weight: 400; + opacity: 0.5; + } + + svg { + position: absolute; + bottom: 0; + inset-inline-end: 0; + pointer-events: none; + z-index: 0; + height: 70%; + width: auto; + + path:first-child { + fill: url('#gradient') !important; + fill-opacity: 1 !important; + } + + path:last-child { + stroke: var(--indigo-3) !important; + fill: none !important; + } + } + } + + &__archetype { + grid-column: span 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + gap: 8px; + padding: 0; + + img { + display: block; + width: 100%; + height: auto; + border-radius: 8px; + } + + &__label { + padding: 16px; + padding-bottom: 8px; + font-size: 14px; + line-height: 17px; + font-weight: 600; + color: var(--lime); + } + } + + &__most-used-app { + grid-column: span 1; + text-align: center; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 8px; + box-sizing: border-box; + + &__label { + font-size: 14px; + line-height: 17px; + font-weight: 600; + color: var(--indigo-6); + } + + &__icon { + font-size: 14px; + line-height: 17px; + font-weight: 600; + color: var(--goldenrod-2); + } + } + + &__percentile { + grid-row: span 2; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + text-align: center; + text-wrap: balance; + padding: 16px 8px; + + &__label { + font-size: 14px; + line-height: 17px; + } + + &__number { + font-size: 61px; + font-weight: 600; + line-height: 73px; + color: var(--goldenrod-2); + } + + &__footnote { + font-size: 11px; + line-height: 14px; + opacity: 0.5; + } + } + + &__new-posts { + grid-column: span 2; + text-align: center; + position: relative; + overflow: hidden; + + &__label { + font-size: 20px; + font-weight: 600; + line-height: 24px; + color: var(--indigo-6); + z-index: 1; + position: relative; + } + + &__number { + font-size: 76px; + font-weight: 600; + line-height: 91px; + color: var(--goldenrod-2); + z-index: 1; + position: relative; + } + + svg { + position: absolute; + inset-inline-start: -7px; + top: -4px; + z-index: 0; + } + } + + &__most-used-hashtag { + grid-column: span 2; + text-align: center; + overflow: hidden; + + &__hashtag { + font-size: 42px; + font-weight: 600; + line-height: 58px; + color: var(--indigo-6); + margin-inline-start: -100%; + margin-inline-end: -100%; + } + + &__label { + font-size: 14px; + font-weight: 600; + line-height: 17px; + } + } + } +} + +.annual-report-modal { + max-width: 480px; + background: var(--indigo-1); + border-radius: 16px; + display: flex; + flex-direction: column; + overflow-y: auto; + + .loading-indicator .circular-progress { + color: var(--lime); + } + + @media screen and (max-width: $no-columns-breakpoint) { + border-bottom: 0; + border-radius: 16px 16px 0 0; + } +} + +.notification-group--annual-report { + .notification-group__icon { + color: var(--lime); + } + + .notification-group__main .link-button { + font-weight: 500; + color: var(--lime); + } +} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f688b9b4ba37fd..1bfe37cee624eb 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1686,7 +1686,8 @@ body > [data-popper-placement] { .status__wrapper-direct, .notification-ungrouped--direct, -.notification-group--direct { +.notification-group--direct, +.notification-group--annual-report { background: rgba($ui-highlight-color, 0.05); &:focus { @@ -5784,7 +5785,8 @@ a.status-card { inset-inline-start: 0; inset-inline-end: 0; bottom: 0; - background: rgba($base-overlay-background, 0.7); + opacity: 0.9; + background: $base-overlay-background; transition: background 0.5s; } diff --git a/app/models/notification.rb b/app/models/notification.rb index 695f39a316f6ca..7b90fd92f96ce3 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -67,6 +67,9 @@ class Notification < ApplicationRecord moderation_warning: { filterable: false, }.freeze, + annual_report: { + filterable: false, + }.freeze, 'admin.sign_up': { filterable: false, }.freeze, @@ -101,6 +104,7 @@ class Notification < ApplicationRecord belongs_to :report, inverse_of: false belongs_to :account_relationship_severance_event, inverse_of: false belongs_to :account_warning, inverse_of: false + belongs_to :generated_annual_report, inverse_of: false end validates :type, inclusion: { in: TYPES } @@ -309,7 +313,7 @@ def set_from_account self.from_account_id = activity&.status&.account_id when 'Account' self.from_account_id = activity&.id - when 'AccountRelationshipSeveranceEvent', 'AccountWarning' + when 'AccountRelationshipSeveranceEvent', 'AccountWarning', 'GeneratedAnnualReport' # These do not really have an originating account, but this is mandatory # in the data model, and the recipient's account will by definition # always exist diff --git a/app/models/notification_group.rb b/app/models/notification_group.rb index b6aa4d309caa5a..9331b9406f793b 100644 --- a/app/models/notification_group.rb +++ b/app/models/notification_group.rb @@ -51,6 +51,7 @@ def self.from_notifications(notifications, pagination_range: nil, grouped_types: :report, :account_relationship_severance_event, :account_warning, + :generated_annual_report, to: :notification, prefix: false class << self diff --git a/app/serializers/rest/annual_report_event_serializer.rb b/app/serializers/rest/annual_report_event_serializer.rb new file mode 100644 index 00000000000000..555a596357cdef --- /dev/null +++ b/app/serializers/rest/annual_report_event_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::AnnualReportEventSerializer < ActiveModel::Serializer + attributes :year + + def year + object.year.to_s + end +end diff --git a/app/serializers/rest/notification_group_serializer.rb b/app/serializers/rest/notification_group_serializer.rb index 7e8f00df3c7189..f4af842e38dca7 100644 --- a/app/serializers/rest/notification_group_serializer.rb +++ b/app/serializers/rest/notification_group_serializer.rb @@ -13,6 +13,7 @@ class REST::NotificationGroupSerializer < ActiveModel::Serializer belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer + belongs_to :generated_annual_report, key: :annual_report, if: :annual_report_event?, serializer: REST::AnnualReportEventSerializer def sample_account_ids object.sample_accounts.pluck(:id).map(&:to_s) @@ -38,6 +39,10 @@ def moderation_warning_event? object.type == :moderation_warning end + def annual_report_event? + object.type == :annual_report + end + def page_min_id object.pagination_data[:min_id].to_s end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 9aebab787ee165..0cf56c5a247b1d 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -3,7 +3,7 @@ class NotifyService < BaseService include Redisable - # TODO: the severed_relationships type probably warrants email notifications + # TODO: the severed_relationships and annual_report types probably warrants email notifications NON_EMAIL_TYPES = %i( admin.report admin.sign_up @@ -12,6 +12,7 @@ class NotifyService < BaseService status moderation_warning severed_relationships + annual_report ).freeze class BaseCondition @@ -25,6 +26,7 @@ class BaseCondition poll update account_warning + annual_report ).freeze def initialize(notification) @@ -100,7 +102,7 @@ def statuses_that_mention_sender class DropCondition < BaseCondition def drop? blocked = @recipient.unavailable? - blocked ||= from_self? && %i(poll severed_relationships moderation_warning).exclude?(@notification.type) + blocked ||= from_self? && %i(poll severed_relationships moderation_warning annual_report).exclude?(@notification.type) return blocked if message? && from_staff? diff --git a/config/routes/api.rb b/config/routes/api.rb index 57ce3ba9fd45c7..ccdd83dec7df1f 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -52,7 +52,7 @@ resources :scheduled_statuses, only: [:index, :show, :update, :destroy] resources :preferences, only: [:index] - resources :annual_reports, only: [:index] do + resources :annual_reports, only: [:index, :show] do member do post :read end From 871e3b25e8da711bc4e297ed23e476976e0cd0f8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:21:13 +0100 Subject: [PATCH 439/467] New Crowdin Translations (automated) (#32782) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/br.json | 2 ++ app/javascript/mastodon/locales/ca.json | 12 ++++++++++++ app/javascript/mastodon/locales/de.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/eo.json | 2 ++ app/javascript/mastodon/locales/es-AR.json | 9 +++++++++ app/javascript/mastodon/locales/es-MX.json | 9 +++++++++ app/javascript/mastodon/locales/es.json | 9 +++++++++ app/javascript/mastodon/locales/fi.json | 6 ++++++ app/javascript/mastodon/locales/ga.json | 22 ++++++++++++++++++++++ app/javascript/mastodon/locales/gl.json | 10 ++++++++++ app/javascript/mastodon/locales/is.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/lt.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/nl.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/pt-BR.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/sq.json | 15 +++++++++++++++ app/javascript/mastodon/locales/sv.json | 7 +++++++ app/javascript/mastodon/locales/zh-CN.json | 20 ++++++++++++++++++++ app/javascript/mastodon/locales/zh-TW.json | 17 +++++++++++++++++ config/locales/simple_form.ko.yml | 8 ++++---- 19 files changed, 244 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 575bc567241b6a..13ca521ab07fd3 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -82,6 +82,8 @@ "alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.", "alert.unexpected.title": "Hopala !", "announcement.announcement": "Kemennad", + "annual_report.summary.followers.followers": "heulier", + "annual_report.summary.highlighted_post.possessive": "{name}", "attachments_list.unprocessed": "(ket meret)", "audio.hide": "Kuzhat ar c'hleved", "block_modal.show_less": "Diskouez nebeutoc'h", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index e5c8440236b684..160a74af4fae6d 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -87,6 +87,18 @@ "alert.unexpected.title": "Vaja!", "alt_text_badge.title": "Text alternatiu", "announcement.announcement": "Anunci", + "annual_report.summary.archetype.oracle": "L'Oracle", + "annual_report.summary.followers.followers": "seguidors", + "annual_report.summary.followers.total": "{count} en total", + "annual_report.summary.here_it_is": "El repàs del vostre {year}:", + "annual_report.summary.highlighted_post.by_favourites": "la publicació més afavorida", + "annual_report.summary.highlighted_post.by_reblogs": "la publicació més impulsada", + "annual_report.summary.highlighted_post.by_replies": "la publicació amb més respostes", + "annual_report.summary.highlighted_post.possessive": "de {name}", + "annual_report.summary.most_used_app.most_used_app": "l'aplicació més utilitzada", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'etiqueta més utilitzada", + "annual_report.summary.new_posts.new_posts": "publicacions noves", + "annual_report.summary.thanks": "Gràcies per formar part de Mastodon!", "attachments_list.unprocessed": "(sense processar)", "audio.hide": "Amaga l'àudio", "block_modal.remote_users_caveat": "Li demanarem al servidor {domain} que respecti la vostra decisió, tot i que no podem garantir-ho, ja que alguns servidors gestionen de forma diferent els blocatges. És possible que els usuaris no autenticats puguin veure les publicacions públiques.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 1d59b1472448af..d048a191e39adf 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Oha!", "alt_text_badge.title": "Bildbeschreibung", "announcement.announcement": "Ankündigung", + "annual_report.summary.archetype.booster": "Trendjäger*in", + "annual_report.summary.archetype.lurker": "Beobachter*in", + "annual_report.summary.archetype.oracle": "Orakel", + "annual_report.summary.archetype.pollster": "Meinungsforscher*in", + "annual_report.summary.archetype.replier": "Geselliger Schmetterling", + "annual_report.summary.followers.followers": "Follower", + "annual_report.summary.followers.total": "{count} insgesamt", + "annual_report.summary.here_it_is": "Dein Jahresrückblick für {year}:", + "annual_report.summary.highlighted_post.by_favourites": "am häufigsten favorisierter Beitrag", + "annual_report.summary.highlighted_post.by_reblogs": "am häufigsten geteilter Beitrag", + "annual_report.summary.highlighted_post.by_replies": "Beitrag mit den meisten Antworten", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "am häufigsten verwendete App", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "am häufigsten verwendeter Hashtag", + "annual_report.summary.new_posts.new_posts": "neue Beiträge", + "annual_report.summary.percentile.text": "Damit gehörst du zu den oberstender Mastodon-Nutzer*innen.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Wir werden Bernie nichts verraten.", + "annual_report.summary.thanks": "Danke, dass du Teil von Mastodon bist!", "attachments_list.unprocessed": "(ausstehend)", "audio.hide": "Audio ausblenden", "block_modal.remote_users_caveat": "Wir werden den Server {domain} bitten, deine Entscheidung zu respektieren. Allerdings kann nicht garantiert werden, dass sie eingehalten wird, weil einige Server Blockierungen unterschiedlich handhaben können. Öffentliche Beiträge können für nicht angemeldete Nutzer*innen weiterhin sichtbar sein.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} meldete {target}", "notification.admin.sign_up": "{name} registrierte sich", "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} registrierten sich", + "notification.annual_report.message": "Dein {year} #Wrapstodon erwartet dich! Lass deine Highlights und unvergesslichen Momente auf Mastodon erneut aufleben!", + "notification.annual_report.view": "#Wrapstodon ansehen", "notification.favourite": "{name} favorisierte deinen Beitrag", "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} favorisierten deinen Beitrag", "notification.follow": "{name} folgt dir", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index ee4d733ab89f00..6cfc94d139a42c 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -87,6 +87,8 @@ "alert.unexpected.title": "Aj!", "alt_text_badge.title": "Alt-teksto", "announcement.announcement": "Anonco", + "annual_report.summary.new_posts.new_posts": "novaj afiŝoj", + "annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", "block_modal.remote_users_caveat": "Ni petos al la servilo {domain} respekti vian elekton. Tamen, plenumo ne estas garantiita ĉar iuj serviloj eble manipulas blokojn malsame. Publikaj afiŝoj eble ankoraŭ estas videbla por ne-ensalutintaj uzantoj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index e8302a4c75da44..b7e5b919afa495 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -87,6 +87,15 @@ "alert.unexpected.title": "¡Epa!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", + "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", + "annual_report.summary.highlighted_post.possessive": "de {name}", + "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", + "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "[sin procesar]", "audio.hide": "Ocultar audio", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar los bloqueos de forma diferente. Los mensajes públicos todavía podrían estar visibles para los usuarios no conectados.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index c73a64c4e0bda9..40061d1cf28572 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -87,6 +87,15 @@ "alert.unexpected.title": "¡Ups!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", + "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", + "annual_report.summary.highlighted_post.possessive": "de {name}", + "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", + "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado ya que algunos servidores pueden manejar bloques de forma diferente. Las publicaciones públicas pueden ser todavía visibles para los usuarios no conectados.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index dea526f8a0c218..2de5a4136ada44 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -87,6 +87,15 @@ "alert.unexpected.title": "¡Ups!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", + "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", + "annual_report.summary.highlighted_post.possessive": "de {name}", + "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", + "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloqueos de forma distinta. Los mensajes públicos pueden ser todavía visibles para los usuarios que no hayan iniciado sesión.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index f06566df752f20..32069b1a03801b 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -87,6 +87,11 @@ "alert.unexpected.title": "Hups!", "alt_text_badge.title": "Vaihtoehtoinen teksti", "announcement.announcement": "Tiedote", + "annual_report.summary.archetype.replier": "Sosiaalinen perhonen", + "annual_report.summary.highlighted_post.by_reblogs": "tehostetuin julkaisu", + "annual_report.summary.most_used_app.most_used_app": "käytetyin sovellus", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "käytetyin aihetunniste", + "annual_report.summary.thanks": "Kiitos, että olet osa Mastodonia!", "attachments_list.unprocessed": "(käsittelemätön)", "audio.hide": "Piilota ääni", "block_modal.remote_users_caveat": "Pyydämme palvelinta {domain} kunnioittamaan päätöstäsi. Myötämielisyyttä ei kuitenkaan taata, koska jotkin palvelimet voivat käsitellä estoja eri tavalla. Julkiset julkaisut voivat silti näkyä kirjautumattomille käyttäjille.", @@ -508,6 +513,7 @@ "notification.admin.report_statuses_other": "{name} raportoi käyttäjän {target}", "notification.admin.sign_up": "{name} rekisteröityi", "notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} rekisteröityivät", + "notification.annual_report.view": "Näytä #Wrapstodon", "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät julkaisusi suosikkeihinsa", "notification.follow": "{name} seurasi sinua", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index aa7892163bcd54..3181d7978e1e6e 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Hiúps!", "alt_text_badge.title": "Téacs alt", "announcement.announcement": "Fógra", + "annual_report.summary.archetype.booster": "An sealgair fionnuar", + "annual_report.summary.archetype.lurker": "An lurker", + "annual_report.summary.archetype.oracle": "An oracal", + "annual_report.summary.archetype.pollster": "An pollaire", + "annual_report.summary.archetype.replier": "An féileacán sóisialta", + "annual_report.summary.followers.followers": "leanúna", + "annual_report.summary.followers.total": "{count} san iomlán", + "annual_report.summary.here_it_is": "Seo do {year} faoi athbhreithniú:", + "annual_report.summary.highlighted_post.by_favourites": "post is fearr leat", + "annual_report.summary.highlighted_post.by_reblogs": "post is treisithe", + "annual_report.summary.highlighted_post.by_replies": "post leis an líon is mó freagraí", + "annual_report.summary.highlighted_post.possessive": "{name}'s", + "annual_report.summary.most_used_app.most_used_app": "aip is mó a úsáidtear", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag is mó a úsáidtear", + "annual_report.summary.new_posts.new_posts": "postanna nua", + "annual_report.summary.percentile.text": "Cuireann sé sin i mbarr úsáideoirí Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Ní inseoidh muid do Bernie.", + "annual_report.summary.thanks": "Go raibh maith agat as a bheith mar chuid de Mastodon!", "attachments_list.unprocessed": "(neamhphróiseáilte)", "audio.hide": "Cuir fuaim i bhfolach", "block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.", @@ -386,6 +404,7 @@ "interaction_modal.description.follow": "Le cuntas ar Mastodon, is féidir leat {name} a leanúint chun a gcuid postálacha a fháil i do fhotha baile.", "interaction_modal.description.reblog": "Le cuntas ar Mastodon, is féidir leat an postáil seo a threisiú chun é a roinnt le do leantóirí féin.", "interaction_modal.description.reply": "Le cuntas ar Mastodon, is féidir leat freagra a thabhairt ar an bpostáil seo.", + "interaction_modal.description.vote": "Le cuntas ar Mastodon, is féidir leat vótáil sa vótaíocht seo.", "interaction_modal.login.action": "Thabhairt dom abhaile", "interaction_modal.login.prompt": "Fearann ​​do fhreastalaí baile, e.g. mastodon.sóisialta", "interaction_modal.no_account_yet": "Ní ar Mastodon?", @@ -397,6 +416,7 @@ "interaction_modal.title.follow": "Lean {name}", "interaction_modal.title.reblog": "Mol postáil de chuid {name}", "interaction_modal.title.reply": "Freagair postáil {name}", + "interaction_modal.title.vote": "Vótáil i vótaíocht {name}", "intervals.full.days": "{number, plural, one {# lá} other {# lá}}", "intervals.full.hours": "{number, plural, one {# uair} other {# uair}}", "intervals.full.minutes": "{number, plural, one {# nóiméad} other {# nóiméad}}", @@ -506,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} tuairiscithe {target}", "notification.admin.sign_up": "Chláraigh {name}", "notification.admin.sign_up.name_and_others": "{name} agus {count, plural, one {# duine eile} two {# daoine eile} few {# daoine eile} many {# daoine eile} other {# daoine eile}} a chláraigh", + "notification.annual_report.message": "Tá do {year} #Wrapstodon ag fanacht! Nocht buaicphointí na bliana agus chuimhneacháin i gcuimhne ar Mastodon!", + "notification.annual_report.view": "Amharc #Wrapstodon", "notification.favourite": "Is fearr le {name} do phostáil", "notification.favourite.name_and_others_with_link": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} thaitin le do phost", "notification.follow": "Lean {name} thú", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index e89d386c853f55..06a7ac8ca49a04 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -87,6 +87,16 @@ "alert.unexpected.title": "Vaites!", "alt_text_badge.title": "Texto Alt", "announcement.announcement": "Anuncio", + "annual_report.summary.followers.followers": "seguidoras", + "annual_report.summary.followers.total": "{count} en total", + "annual_report.summary.here_it_is": "Este é o resumo do teu {year}:", + "annual_report.summary.highlighted_post.by_favourites": "a publicación mais favorecida", + "annual_report.summary.highlighted_post.by_reblogs": "a publicación con mais promocións", + "annual_report.summary.highlighted_post.by_replies": "a publicación con mais respostas", + "annual_report.summary.highlighted_post.possessive": "de {name}", + "annual_report.summary.most_used_app.most_used_app": "app que mais usaches", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado", + "annual_report.summary.new_posts.new_posts": "novas publicacións", "attachments_list.unprocessed": "(sen procesar)", "audio.hide": "Agochar audio", "block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 8c87298910597d..adc86faf40ec24 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Úbbs!", "alt_text_badge.title": "Hjálpartexti mynda", "announcement.announcement": "Auglýsing", + "annual_report.summary.archetype.booster": "Svali gaurinn", + "annual_report.summary.archetype.lurker": "Lurkurinn", + "annual_report.summary.archetype.oracle": "Völvan", + "annual_report.summary.archetype.pollster": "Kannanafíkillinn", + "annual_report.summary.archetype.replier": "Félagsveran", + "annual_report.summary.followers.followers": "fylgjendur", + "annual_report.summary.followers.total": "{count} alls", + "annual_report.summary.here_it_is": "Hér er yfirlitið þitt fyrir {year}:", + "annual_report.summary.highlighted_post.by_favourites": "færsla sett oftast í eftirlæti", + "annual_report.summary.highlighted_post.by_reblogs": "færsla oftast endurbirt", + "annual_report.summary.highlighted_post.by_replies": "færsla með flestum svörum", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "mest notaða forrit", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest notaða myllumerki", + "annual_report.summary.new_posts.new_posts": "nýjar færslur", + "annual_report.summary.percentile.text": "Það setur þig á meðal efstunotenda Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Við förum ekkert að raupa um þetta.", + "annual_report.summary.thanks": "Takk fyrir að vera hluti af Mastodon-samfélaginu!", "attachments_list.unprocessed": "(óunnið)", "audio.hide": "Fela hljóð", "block_modal.remote_users_caveat": "Við munum biðja {domain} netþjóninn um að virða ákvörðun þína. Hitt er svo annað mál hvort hann fari eftir þessu, ekki er hægt að tryggja eftirfylgni því sumir netþjónar meðhöndla útilokanir á sinn hátt. Opinberar færslur gætu verið sýnilegar notendum sem ekki eru skráðir inn.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} kærði {target}", "notification.admin.sign_up": "{name} skráði sig", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} skráð sig", + "notification.annual_report.message": "{year} á #Wrapstodon bíður! Afhjúpaðu hvað bar hæst á árinu og minnistæðustu augnablikin á Mastodon!", + "notification.annual_report.view": "Skoða #Wrapstodon", "notification.favourite": "{name} setti færsluna þína í eftirlæti", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} sett færsluna þína í eftirlæti", "notification.follow": "{name} fylgist með þér", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 7d53c2702fc99e..d03833e11f53f4 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Ups!", "alt_text_badge.title": "Alternatyvus tekstas", "announcement.announcement": "Skelbimas", + "annual_report.summary.archetype.booster": "Šaunus medžiotojas", + "annual_report.summary.archetype.lurker": "Stebėtojas", + "annual_report.summary.archetype.oracle": "Vydūnas", + "annual_report.summary.archetype.pollster": "Apklausos rengėjas", + "annual_report.summary.archetype.replier": "Socialinis drugelis", + "annual_report.summary.followers.followers": "sekėjai (-ų)", + "annual_report.summary.followers.total": "iš viso {count}", + "annual_report.summary.here_it_is": "Štai jūsų {year} apžvalga:", + "annual_report.summary.highlighted_post.by_favourites": "labiausiai pamėgtas įrašas", + "annual_report.summary.highlighted_post.by_reblogs": "labiausiai pasidalintas įrašas", + "annual_report.summary.highlighted_post.by_replies": "įrašas su daugiausiai atsakymų", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "labiausiai naudota programa", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "labiausiai naudotas saitažodis", + "annual_report.summary.new_posts.new_posts": "nauji įrašai", + "annual_report.summary.percentile.text": "Tai reiškia, kad esate tarppopuliariausių „Mastodon“ naudotojų.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Mes nesakysime Bernie.", + "annual_report.summary.thanks": "Dėkojame, kad esate „Mastodon“ dalis!", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", "block_modal.remote_users_caveat": "Paprašysime serverio {domain} gerbti tavo sprendimą. Tačiau atitiktis negarantuojama, nes kai kurie serveriai gali skirtingai tvarkyti blokavimus. Vieši įrašai vis tiek gali būti matomi neprisijungusiems naudotojams.", @@ -507,6 +525,8 @@ "notification.admin.report_statuses": "{name} pranešė {target} kategorijai {category}", "notification.admin.report_statuses_other": "{name} pranešė {target}", "notification.admin.sign_up": "{name} užsiregistravo", + "notification.annual_report.message": "Jūsų laukia {year} #Wrapstodon! Atskleiskite savo metų svarbiausius įvykius ir įsimintinas akimirkas platformoje „Mastodon“.", + "notification.annual_report.view": "Peržiūrėti #Wrapstodon", "notification.favourite": "{name} pamėgo tavo įrašą", "notification.follow": "{name} seka tave", "notification.follow.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} seka tave", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 9f265782e111b3..b66fcf09c04c0c 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Oeps!", "alt_text_badge.title": "Alt-tekst", "announcement.announcement": "Mededeling", + "annual_report.summary.archetype.booster": "De cool-hunter", + "annual_report.summary.archetype.lurker": "De lurker", + "annual_report.summary.archetype.oracle": "Het orakel", + "annual_report.summary.archetype.pollster": "De opiniepeiler", + "annual_report.summary.archetype.replier": "De sociale vlinder", + "annual_report.summary.followers.followers": "volgers", + "annual_report.summary.followers.total": "totaal {count}", + "annual_report.summary.here_it_is": "Hier is jouw terugblik op {year}:", + "annual_report.summary.highlighted_post.by_favourites": "bericht met de meeste favorieten", + "annual_report.summary.highlighted_post.by_reblogs": "bericht met de meeste boosts", + "annual_report.summary.highlighted_post.by_replies": "bericht met de meeste reacties", + "annual_report.summary.highlighted_post.possessive": "{name}'s", + "annual_report.summary.most_used_app.most_used_app": "meest gebruikte app", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "meest gebruikte hashtag", + "annual_report.summary.new_posts.new_posts": "nieuwe berichten", + "annual_report.summary.percentile.text": "Dat zet je in de topvan Mastodon-gebruikers.", + "annual_report.summary.percentile.we_wont_tell_bernie": "We zullen Bernie niets vertellen.", + "annual_report.summary.thanks": "Bedankt dat je deel uitmaakt van Mastodon!", "attachments_list.unprocessed": "(niet verwerkt)", "audio.hide": "Audio verbergen", "block_modal.remote_users_caveat": "We vragen de server {domain} om je besluit te respecteren. Het naleven hiervan is echter niet gegarandeerd, omdat sommige servers blokkades anders kunnen interpreteren. Openbare berichten zijn mogelijk nog steeds zichtbaar voor niet-ingelogde gebruikers.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} rapporteerde {target}", "notification.admin.sign_up": "{name} heeft zich geregistreerd", "notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben zich geregistreerd", + "notification.annual_report.message": "Jouw {year} #Wrapstodon staat klaar! Laat de hoogtepunten en memorabele momenten van jouw jaar zien op Mastodon!", + "notification.annual_report.view": "#Wrapstodon bekijken", "notification.favourite": "{name} markeerde jouw bericht als favoriet", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht als favoriet gemarkeerd", "notification.follow": "{name} volgt jou nu", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index c620933abe2ae3..5e69741f201748 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Eita!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Comunicados", + "annual_report.summary.archetype.booster": "Caçador legal", + "annual_report.summary.archetype.lurker": "O espreitador", + "annual_report.summary.archetype.oracle": "O oráculo", + "annual_report.summary.archetype.pollster": "O pesquisador", + "annual_report.summary.archetype.replier": "A borboleta social", + "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.followers.total": "{count} total", + "annual_report.summary.here_it_is": "Aqui está seu {year} em revisão:", + "annual_report.summary.highlighted_post.by_favourites": "publicação mais favoritada", + "annual_report.summary.highlighted_post.by_reblogs": "publicação mais impulsionada", + "annual_report.summary.highlighted_post.by_replies": "publicação com mais respostas", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "aplicativo mais usado", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag mais usada", + "annual_report.summary.new_posts.new_posts": "novas publicações", + "annual_report.summary.percentile.text": "Isso o coloca no topodos usuários de Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Não contaremos à Bernie.", + "annual_report.summary.thanks": "Obrigada por fazer parte do Mastodon!", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", "block_modal.remote_users_caveat": "Pediremos ao servidor {domínio} que respeite sua decisão. No entanto, a conformidade não é garantida pois alguns servidores podem lidar com os blocos de maneira diferente. As postagens públicas ainda podem estar visíveis para usuários não logados.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} denunciou {target}", "notification.admin.sign_up": "{name} se inscreveu", "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# other} other {# outros}}", + "notification.annual_report.message": "O #Wrapstodon do seu {year} está esperando! Desvende seus destaques do ano e momentos memoráveis no Mastodon!", + "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} favoritou sua publicação", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# others}} favoritaram a publicação", "notification.follow": "{name} te seguiu", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 410d7c2ef3dd2f..088b48a3f3e3e7 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -87,6 +87,19 @@ "alert.unexpected.title": "Hëm!", "alt_text_badge.title": "Tekst alternativ", "announcement.announcement": "Lajmërim", + "annual_report.summary.followers.followers": "ndjekës", + "annual_report.summary.followers.total": "{count} gjithsej", + "annual_report.summary.here_it_is": "Ja {year} juaj e shqyrtuar:", + "annual_report.summary.highlighted_post.by_favourites": "potimi më i parapëlqyer", + "annual_report.summary.highlighted_post.by_reblogs": "postimi me më shumë përforcime", + "annual_report.summary.highlighted_post.by_replies": "postimi me më tepër përgjigje", + "annual_report.summary.highlighted_post.possessive": "nga {name}", + "annual_report.summary.most_used_app.most_used_app": "aplikacioni më i përdorur", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag-u më i përdorur", + "annual_report.summary.new_posts.new_posts": "postime të reja", + "annual_report.summary.percentile.text": "Kjo ju vë në kryetë përdoruesve të Mastodon-it.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Nuk do t’ia themi Bernit.", + "annual_report.summary.thanks": "Faleminderit që jeni pjesë e Mastodon-it!", "attachments_list.unprocessed": "(e papërpunuar)", "audio.hide": "Fshihe audion", "block_modal.remote_users_caveat": "Do t’i kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi s’është i garantuar, ngaqë disa shërbyes mund t’i trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.", @@ -508,6 +521,8 @@ "notification.admin.report_statuses_other": "{name} raportoi {target}", "notification.admin.sign_up": "{name} u regjistrua", "notification.admin.sign_up.name_and_others": "U regjistrua {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", + "notification.annual_report.message": "#Wrapstodon juaj për {year} pret! Zbuloni pikat e theksuara dhe çastet e paharrueshëm të këtij viti për ju në Mastodon!", + "notification.annual_report.view": "Shihni #Wrapstodon", "notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer", "notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer", "notification.follow": "{name} zuri t’ju ndjekë", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index e404c2244bbe1e..5f551fc4cd5a88 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -87,6 +87,12 @@ "alert.unexpected.title": "Hoppsan!", "alt_text_badge.title": "Alt-Text", "announcement.announcement": "Meddelande", + "annual_report.summary.followers.followers": "följare", + "annual_report.summary.followers.total": "{count} totalt", + "annual_report.summary.highlighted_post.by_replies": "inlägg med flest svar", + "annual_report.summary.new_posts.new_posts": "nya inlägg", + "annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.", + "annual_report.summary.thanks": "Tack för att du är en del av Mastodon!", "attachments_list.unprocessed": "(obehandlad)", "audio.hide": "Dölj audio", "block_modal.remote_users_caveat": "Vi kommer att be servern {domain} att respektera ditt beslut. Dock garanteras inte efterlevnad eftersom vissa servrar kan hantera blockeringar på olika sätt. Offentliga inlägg kan fortfarande vara synliga för icke-inloggade användare.", @@ -508,6 +514,7 @@ "notification.admin.report_statuses_other": "{name} rapporterade {target}", "notification.admin.sign_up": "{name} registrerade sig", "notification.admin.sign_up.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har registrerat sig", + "notification.annual_report.view": "Visa #Wrapstodon", "notification.favourite": "{name} favoritmarkerade ditt inlägg", "notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg", "notification.follow": "{name} följer dig", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 603ec5d791a6a7..57b2011bb18d8d 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "哎呀!", "alt_text_badge.title": "替代文本", "announcement.announcement": "公告", + "annual_report.summary.archetype.booster": "潮流捕手", + "annual_report.summary.archetype.lurker": "吃瓜群众", + "annual_report.summary.archetype.oracle": "预言家", + "annual_report.summary.archetype.pollster": "投票狂魔", + "annual_report.summary.archetype.replier": "评论区原住民", + "annual_report.summary.followers.followers": "关注者", + "annual_report.summary.followers.total": "{count} 人", + "annual_report.summary.here_it_is": "你的 {year} 年度回顾在此:", + "annual_report.summary.highlighted_post.by_favourites": "最受欢迎嘟嘟", + "annual_report.summary.highlighted_post.by_reblogs": "传播最广嘟嘟", + "annual_report.summary.highlighted_post.by_replies": "最热闹嘟嘟", + "annual_report.summary.highlighted_post.possessive": "{name} 的", + "annual_report.summary.most_used_app.most_used_app": "最常用的应用", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "最常用的话题", + "annual_report.summary.new_posts.new_posts": "新发嘟", + "annual_report.summary.percentile.text": "这使你跻身 Mastodon 用户的前", + "annual_report.summary.percentile.we_wont_tell_bernie": "我们打死也不会告诉Bernie。", + "annual_report.summary.thanks": "感谢你这一年与 Mastodon 一路同行!", "attachments_list.unprocessed": "(未处理)", "audio.hide": "隐藏音频", "block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重您的决定。然而,我们无法保证对方一定遵从,因为某些服务器可能会以不同的方案处理屏蔽操作。公开嘟文仍然可能对未登录的用户可见。", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} 举报了 {target}", "notification.admin.sign_up": "{name} 注册了", "notification.admin.sign_up.name_and_others": "{name} 和 {count, plural, other {另外 # 人}}注册了", + "notification.annual_report.message": "你的 {year} #Wrapstodon 年度回顾来啦!快来看看这一年你在 Mastodon 上的精彩瞬间!", + "notification.annual_report.view": "查看 #Wrapstodon", "notification.favourite": "{name} 喜欢了你的嘟文", "notification.favourite.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 喜欢了你的嘟文", "notification.follow": "{name} 开始关注你", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a3de26ffc40dca..e1f9eeb210b250 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -87,6 +87,23 @@ "alert.unexpected.title": "哎呀!", "alt_text_badge.title": "ALT 說明文字", "announcement.announcement": "公告", + "annual_report.summary.archetype.booster": "酷炫的獵人", + "annual_report.summary.archetype.lurker": "潛伏者", + "annual_report.summary.archetype.oracle": "先知", + "annual_report.summary.archetype.pollster": "民調人員", + "annual_report.summary.archetype.replier": "社交菁英", + "annual_report.summary.followers.followers": "跟隨者", + "annual_report.summary.followers.total": "總共 {count}", + "annual_report.summary.here_it_is": "以下是您的{year}年度回顧:", + "annual_report.summary.highlighted_post.by_favourites": "最愛的嘟文", + "annual_report.summary.highlighted_post.by_reblogs": "最多轉嘟的嘟文", + "annual_report.summary.highlighted_post.by_replies": "最多回覆的嘟文", + "annual_report.summary.highlighted_post.possessive": "{name} 的", + "annual_report.summary.most_used_app.most_used_app": "最常使用的應用程式", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "最常使用的主題標籤", + "annual_report.summary.new_posts.new_posts": "新嘟文", + "annual_report.summary.percentile.text": "這讓您成為前Mastodon 的使用者。", + "annual_report.summary.thanks": "感謝您成為 Mastodon 的一員!", "attachments_list.unprocessed": "(未經處理)", "audio.hide": "隱藏音訊", "block_modal.remote_users_caveat": "我們會要求 {domain} 伺服器尊重您的決定。然而,我們無法保證所有伺服器皆會遵守,某些伺服器可能以不同方式處理封鎖。未登入之使用者仍可能看見您的公開嘟文。", diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index c40814d61b1593..b2ebf5666def38 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -32,9 +32,9 @@ ko: warning_preset_id: 선택사항. 틀의 마지막에 임의의 텍스트를 추가 할 수 있습니다 announcement: all_day: 체크 되었을 경우, 그 시간에 속한 날짜들에만 표시됩니다 - ends_at: 옵션입니다. 공지사항이 이 시간에 자동으로 발행 중지 됩니다 + ends_at: 선택사항. 공지사항이 이 시간에 자동으로 발행 중지 됩니다 scheduled_at: 공백으로 두면 공지사항이 곧바로 발행 됩니다 - starts_at: 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다 + starts_at: 선택사항. 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다 text: 게시물 문법을 사용할 수 있습니다. 공지사항은 사용자의 화면 상단 공간을 차지한다는 것을 명심하세요 appeal: text: 처벌에 대해 단 한 번만 이의제기를 할 수 있습니다 @@ -110,7 +110,7 @@ ko: invite_request: text: 이 정보는 신청을 검토하는데 도움을 줄 수 있습니다. ip_block: - comment: 필수 아님. 왜 이 규칙을 추가했는지 기억하세요. + comment: 선택사항. 왜 이 규칙을 추가했는지 기억하세요. expires_in: IP 주소는 한정된 자원입니다, 이것들은 가끔 공유 되거나 자주 소유자가 바뀌기도 합니다. 이런 이유로 인해, IP 차단을 영구히 유지하는 것은 추천하지 않습니다. ip: IPv4 또는 IPv6 주소를 입력하세요. CIDR 문법을 사용해서 모든 범위를 차단할 수도 있습니다. 자기 자신을 잠가버리지 않도록 주의하세요! severities: @@ -119,7 +119,7 @@ ko: sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다 severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요 rule: - hint: 옵션사항. 규칙에 대한 더 상세한 정보를 제공하세요 + hint: 선택사항. 규칙에 대한 더 상세한 정보를 제공하세요 text: 이 서버 사용자들이 지켜야 할 규칙과 요구사항을 설명해주세요. 짧고 간단하게 작성해주세요 sessions: otp: '휴대전화에서 생성된 이중 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' From 2bea74e69d43f15aff646de5948cfbb4b9296145 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 6 Nov 2024 11:51:54 +0100 Subject: [PATCH 440/467] Avoid latest featured tag use on post removal unless necessary (#32787) --- app/models/featured_tag.rb | 12 +++++- app/services/process_hashtags_service.rb | 2 +- app/services/remove_status_service.rb | 2 +- spec/models/featured_tag_spec.rb | 54 ++++++++++++++++++++---- 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index a4e7b7cf6f0262..529056f9c60e2c 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -44,8 +44,16 @@ def increment(timestamp) update(statuses_count: statuses_count + 1, last_status_at: timestamp) end - def decrement(deleted_status_id) - update(statuses_count: [0, statuses_count - 1].max, last_status_at: visible_tagged_account_statuses.where.not(id: deleted_status_id).pick(:created_at)) + def decrement(deleted_status) + if statuses_count <= 1 + update(statuses_count: 0, last_status_at: nil) + elsif last_status_at > deleted_status.created_at + update(statuses_count: statuses_count - 1) + else + # Fetching the latest status creation time can be expensive, so only perform it + # if we know we are deleting the latest status using this tag + update(statuses_count: statuses_count - 1, last_status_at: visible_tagged_account_statuses.where(id: ...deleted_status.id).pick(:created_at)) + end end private diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index 17c347b08895be..0baea0185cef0b 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -33,7 +33,7 @@ def update_featured_tags! unless removed_tags.empty? @account.featured_tags.where(tag_id: removed_tags.map(&:id)).find_each do |featured_tag| - featured_tag.decrement(@status.id) + featured_tag.decrement(@status) end end end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 221791ad323804..dc9fb6cab68a07 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -115,7 +115,7 @@ def remove_reblogs def remove_from_hashtags @account.featured_tags.where(tag_id: @status.tags.map(&:id)).find_each do |featured_tag| - featured_tag.decrement(@status.id) + featured_tag.decrement(@status) end return unless @status.public_visibility? diff --git a/spec/models/featured_tag_spec.rb b/spec/models/featured_tag_spec.rb index 0f5ead8f978ac1..20059cfba4c638 100644 --- a/spec/models/featured_tag_spec.rb +++ b/spec/models/featured_tag_spec.rb @@ -126,16 +126,54 @@ end describe '#decrement' do - it 'decreases the count and updates the last_status_at timestamp' do - tag = Fabricate :tag, name: 'test' - status = Fabricate :status, visibility: :public, created_at: 10.days.ago - status.tags << tag + let(:tag) { Fabricate(:tag, name: 'test') } + let(:account) { Fabricate(:account) } + let(:featured_tag) { Fabricate(:featured_tag, name: 'test', account: account) } - featured_tag = Fabricate :featured_tag, name: 'test', account: status.account + context 'when removing the last status using the tag' do + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } - expect { featured_tag.decrement(status.id) } - .to change(featured_tag, :statuses_count).from(1).to(0) - .and change(featured_tag, :last_status_at).to(nil) + before do + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(1).to(0) + .and change(featured_tag, :last_status_at).to(nil) + end + end + + context 'when removing a previous status using the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(previous_status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and not_change(featured_tag, :last_status_at) + end + end + + context 'when removing the most recent use of the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and change(featured_tag, :last_status_at) + end end end end From e4b4d6d262131c5cf326435e003c80d143628e19 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:57:42 +0100 Subject: [PATCH 441/467] Update dependency ruby to v3.3.6 (#32773) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index fa7adc7ac72a28..9c25013dbb862f 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.5 +3.3.6 From e581c1a520cd961620ff3edd8907c8d2c4e00bbf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 10:58:01 +0000 Subject: [PATCH 442/467] Update docker.io/ruby Docker tag to v3.3.6 (#32784) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c6d8466f43c048..a6c7d46b579ad8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM} # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"] # renovate: datasource=docker depName=docker.io/ruby -ARG RUBY_VERSION="3.3.5" +ARG RUBY_VERSION="3.3.6" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="22" From 4053cd2bff25f830fd1e2a3cdd6c95ef8ae28c7f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 6 Nov 2024 05:58:28 -0500 Subject: [PATCH 443/467] Update faraday to version 2.12.0 (#32718) --- Gemfile | 1 + Gemfile.lock | 34 +++++++++------------------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/Gemfile b/Gemfile index bc7a219789a941..690e2a59d2a797 100644 --- a/Gemfile +++ b/Gemfile @@ -47,6 +47,7 @@ gem 'color_diff', '~> 0.1' gem 'csv', '~> 3.2' gem 'discard', '~> 1.2' gem 'doorkeeper', '~> 5.6' +gem 'faraday-httpclient' gem 'fast_blank', '~> 1.0' gem 'fastimage' gem 'hiredis', '~> 0.6' diff --git a/Gemfile.lock b/Gemfile.lock index 617233d702439f..7328afa5239ef9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -229,29 +229,14 @@ GEM fabrication (2.31.0) faker (3.5.1) i18n (>= 1.8.11, < 2) - faraday (1.10.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.2) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday (2.12.0) + faraday-net_http (>= 2.0, < 3.4) + json + logger + faraday-httpclient (2.0.1) + httpclient (>= 2.2) + faraday-net_http (3.3.0) + net-http fast_blank (1.0.1) fastimage (2.3.1) ffi (1.17.0) @@ -430,7 +415,6 @@ GEM minitest (5.25.1) msgpack (1.7.3) multi_json (1.15.0) - multipart-post (2.4.1) mutex_m (0.2.0) net-http (0.4.1) uri @@ -760,7 +744,6 @@ GEM ruby-vips (2.2.2) ffi (~> 1.12) logger - ruby2_keywords (0.0.5) rubyzip (2.3.2) rufus-scheduler (3.9.1) fugit (~> 1.1, >= 1.1.6) @@ -930,6 +913,7 @@ DEPENDENCIES email_spec fabrication (~> 2.30) faker (~> 3.2) + faraday-httpclient fast_blank (~> 1.0) fastimage flatware-rspec From 1392daa638abbfc7bce32903aeed4fa9303c21cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:58:50 +0100 Subject: [PATCH 444/467] Update dependency discard to v1.4.0 (#32785) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7328afa5239ef9..844eb1b6b230e8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -200,8 +200,8 @@ GEM devise (>= 4.0.0) rpam2 (~> 4.0) diff-lcs (1.5.1) - discard (1.3.0) - activerecord (>= 4.2, < 8) + discard (1.4.0) + activerecord (>= 4.2, < 9.0) docile (1.4.1) domain_name (0.6.20240107) doorkeeper (5.7.1) From d482211aa6293f78f161cbc7149e829966cd8e3a Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 6 Nov 2024 14:30:53 +0100 Subject: [PATCH 445/467] Fix out-of-view post contents being inconsistent with in-view post contents (#32778) --- app/javascript/mastodon/components/status.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 479213636818c9..96ccf3aad4f465 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -393,13 +393,16 @@ class Status extends ImmutablePureComponent { }; let media, statusAvatar, prepend, rebloggedByText; + const matchedFilters = status.get('matched_filters'); + const expanded = (!matchedFilters || this.state.showDespiteFilter) && (!status.get('hidden') || status.get('spoiler_text').length === 0); if (hidden) { return (
{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} - {status.get('content')} + {status.get('spoiler_text').length > 0 && ({status.get('spoiler_text')})} + {expanded && {status.get('content')}}
); @@ -408,7 +411,6 @@ class Status extends ImmutablePureComponent { const connectUp = previousId && previousId === status.get('in_reply_to_id'); const connectToRoot = rootId && rootId === status.get('in_reply_to_id'); const connectReply = nextInReplyToId && nextInReplyToId === status.get('id'); - const matchedFilters = status.get('matched_filters'); if (featured) { prepend = ( @@ -538,7 +540,6 @@ class Status extends ImmutablePureComponent { } const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); - const expanded = (!matchedFilters || this.state.showDespiteFilter) && (!status.get('hidden') || status.get('spoiler_text').length === 0); return ( From 4ed3ce237739643cd9145396e25bf4d4b020dccd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:45:05 +0100 Subject: [PATCH 446/467] New Crowdin Translations (automated) (#32793) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/eo.json | 4 +++ app/javascript/mastodon/locales/es-AR.json | 11 +++++++ app/javascript/mastodon/locales/es-MX.json | 11 +++++++ app/javascript/mastodon/locales/es.json | 11 +++++++ app/javascript/mastodon/locales/fo.json | 20 ++++++++++++ app/javascript/mastodon/locales/gl.json | 2 ++ app/javascript/mastodon/locales/ko.json | 20 ++++++++++++ app/javascript/mastodon/locales/sk.json | 15 +++++++++ app/javascript/mastodon/locales/tr.json | 20 ++++++++++++ app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/vi.json | 20 ++++++++++++ config/locales/fo.yml | 38 ++++++++++++++++++++++ 12 files changed, 173 insertions(+) diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 6cfc94d139a42c..757bb39866ed1c 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -87,6 +87,9 @@ "alert.unexpected.title": "Aj!", "alt_text_badge.title": "Alt-teksto", "announcement.announcement": "Anonco", + "annual_report.summary.archetype.replier": "La plej societema", + "annual_report.summary.followers.followers": "sekvantoj", + "annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj", "annual_report.summary.new_posts.new_posts": "novaj afiŝoj", "annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!", "attachments_list.unprocessed": "(neprilaborita)", @@ -510,6 +513,7 @@ "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", "notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton", + "notification.annual_report.view": "Vidu #Wrapstodon", "notification.favourite": "{name} stelumis vian afiŝon", "notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon", "notification.follow": "{name} eksekvis vin", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index b7e5b919afa495..a556d90e33b3db 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -87,14 +87,23 @@ "alert.unexpected.title": "¡Epa!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.archetype.booster": "El cazador de tendencias", + "annual_report.summary.archetype.lurker": "El acechador", + "annual_report.summary.archetype.oracle": "El oráculo", + "annual_report.summary.archetype.pollster": "El encuestador", + "annual_report.summary.archetype.replier": "El más sociable", "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.followers.total": "{count} en total", "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos", "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", "annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.percentile.text": "Eso te pone en el topde usuarios de Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "[sin procesar]", "audio.hide": "Ocultar audio", @@ -517,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} denunció a {target}", "notification.admin.sign_up": "Se registró {name}", "notification.admin.sign_up.name_and_others": "Se registraron {name} y {count, plural, one {# cuenta más} other {# cuentas más}}", + "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!", + "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito", "notification.follow": "{name} te empezó a seguir", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 40061d1cf28572..4faa35e5c87ada 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -87,14 +87,23 @@ "alert.unexpected.title": "¡Ups!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.archetype.booster": "El cazador de tendencias", + "annual_report.summary.archetype.lurker": "El acechador", + "annual_report.summary.archetype.oracle": "El oráculo", + "annual_report.summary.archetype.pollster": "El encuestador", + "annual_report.summary.archetype.replier": "El más sociable", "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.followers.total": "{count} en total", "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos", "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", "annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.percentile.text": "Eso te pone en el topde usuarios de Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -517,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} reportó {target}", "notification.admin.sign_up": "{name} se unio", "notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} se registraron", + "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!", + "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 2de5a4136ada44..d14b7180160695 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -87,14 +87,23 @@ "alert.unexpected.title": "¡Ups!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", + "annual_report.summary.archetype.booster": "El cazador de tendencias", + "annual_report.summary.archetype.lurker": "El acechador", + "annual_report.summary.archetype.oracle": "El oráculo", + "annual_report.summary.archetype.pollster": "El encuestador", + "annual_report.summary.archetype.replier": "El más sociable", "annual_report.summary.followers.followers": "seguidores", + "annual_report.summary.followers.total": "{count} en total", "annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:", + "annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos", "annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada", "annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas", "annual_report.summary.highlighted_post.possessive": "de {name}", "annual_report.summary.most_used_app.most_used_app": "aplicación más usada", "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada", "annual_report.summary.new_posts.new_posts": "nuevas publicaciones", + "annual_report.summary.percentile.text": "Eso te pone en el topde usuarios de Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.", "annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -517,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} informó de {target}", "notification.admin.sign_up": "{name} se registró", "notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# más} other {# más}} se registraron", + "notification.annual_report.message": "¡Tu #Wrapstodon {year} te espera! ¡Desvela los momentos más destacados y memorables de tu año en Mastodon!", + "notification.annual_report.view": "Ver #Wrapstodon", "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index e15385725a0097..6b26ed84fd7cf8 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Ups!", "alt_text_badge.title": "Annar tekstur", "announcement.announcement": "Kunngerð", + "annual_report.summary.archetype.booster": "Kuli jagarin", + "annual_report.summary.archetype.lurker": "Lúrarin", + "annual_report.summary.archetype.oracle": "Oraklið", + "annual_report.summary.archetype.pollster": "Spyrjarin", + "annual_report.summary.archetype.replier": "Sosiali firvaldurin", + "annual_report.summary.followers.followers": "fylgjarar", + "annual_report.summary.followers.total": "{count} íalt", + "annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:", + "annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur", + "annual_report.summary.highlighted_post.by_reblogs": "oftast lyfti postur", + "annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum", + "annual_report.summary.highlighted_post.possessive": "hjá {name}", + "annual_report.summary.most_used_app.most_used_app": "mest brúkta app", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brúkta frámerki", + "annual_report.summary.new_posts.new_posts": "nýggir postar", + "annual_report.summary.percentile.text": "Tað fær teg í toppav Mastodon brúkarum.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Vit fara ikki at fortelja Bernie tað.", + "annual_report.summary.thanks": "Takk fyri at tú er partur av Mastodon!", "attachments_list.unprocessed": "(óviðgjørt)", "audio.hide": "Fjal ljóð", "block_modal.remote_users_caveat": "Vit biðja ambætaran {domain} virða tína avgerð. Kortini er eingin vissa um samsvar, av tí at fleiri ambætarar handfara blokkar ymiskt. Almennir postar kunnu framvegis vera sjónligir fyri brúkarar, sum ikki eru innritaðir.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} meldaði {target}", "notification.admin.sign_up": "{name} meldaði seg til", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} teknaðu seg", + "notification.annual_report.message": "Títt {year} #Wrapstodon bíðar! Avdúka hæddarpunktini og minniligu løturnar á Mastodon!", + "notification.annual_report.view": "Sí #Wrapstodon", "notification.favourite": "{name} dámdi postin hjá tær", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær", "notification.follow": "{name} fylgdi tær", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 06a7ac8ca49a04..23f444715b2631 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -97,6 +97,8 @@ "annual_report.summary.most_used_app.most_used_app": "app que mais usaches", "annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado", "annual_report.summary.new_posts.new_posts": "novas publicacións", + "annual_report.summary.percentile.text": "Sitúante no top das usuarias de Mastodon.", + "annual_report.summary.thanks": "Grazas por ser parte de Mastodon!", "attachments_list.unprocessed": "(sen procesar)", "audio.hide": "Agochar audio", "block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index dbdb5062cff331..b5c8d4bd21b27a 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "앗!", "alt_text_badge.title": "대체 문구", "announcement.announcement": "공지사항", + "annual_report.summary.archetype.booster": "연쇄부스트마", + "annual_report.summary.archetype.lurker": "은둔자", + "annual_report.summary.archetype.oracle": "예언자", + "annual_report.summary.archetype.pollster": "여론조사원", + "annual_report.summary.archetype.replier": "인싸", + "annual_report.summary.followers.followers": "팔로워", + "annual_report.summary.followers.total": "총 {count}", + "annual_report.summary.here_it_is": "{year}년 결산입니다:", + "annual_report.summary.highlighted_post.by_favourites": "가장 많은 좋아요를 받은 게시물", + "annual_report.summary.highlighted_post.by_reblogs": "가장 많이 부스트된 게시물", + "annual_report.summary.highlighted_post.by_replies": "가장 많은 답글을 받은 게시물", + "annual_report.summary.highlighted_post.possessive": "{name} 님의", + "annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그", + "annual_report.summary.new_posts.new_posts": "새 게시물", + "annual_report.summary.percentile.text": "마스토돈 사용자의 상위입니다.", + "annual_report.summary.percentile.we_wont_tell_bernie": "엄마한테 말 안 할게요.", + "annual_report.summary.thanks": "마스토돈과 함께 해주셔서 감사합니다!", "attachments_list.unprocessed": "(처리 안 됨)", "audio.hide": "소리 숨기기", "block_modal.remote_users_caveat": "우리는 {domain} 서버가 당신의 결정을 존중해 주길 부탁할 것입니다. 하지만 몇몇 서버는 차단을 다르게 취급할 수 있기 때문에 규정이 준수되는 것을 보장할 수는 없습니다. 공개 게시물은 로그인 하지 않은 사용자들에게 여전히 보여질 수 있습니다.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다", "notification.admin.sign_up": "{name} 님이 가입했습니다", "notification.admin.sign_up.name_and_others": "{name} 외 {count, plural, other {# 명}}이 가입했습니다", + "notification.annual_report.message": "{year} #Wrapstodon 이 기다리고 있습니다! 올 해 마스토돈에서 있었던 최고의 순간과 기억들을 열어보세요!", + "notification.annual_report.view": "#Wrapstodon 보기", "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index dc31f6100f1ee1..7b9254c0d36728 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -87,6 +87,11 @@ "alert.unexpected.title": "Ups!", "alt_text_badge.title": "Alternatívny popis", "announcement.announcement": "Oznámenie", + "annual_report.summary.followers.followers": "sledovatelia", + "annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok", + "annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "najviac užívaný hashtag", + "annual_report.summary.new_posts.new_posts": "nové príspevky", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skryť zvuk", "block_modal.show_less": "Zobraziť menej", @@ -345,6 +350,9 @@ "home.pending_critical_update.link": "Zobraziť aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia.", "home.show_announcements": "Zobraziť oznámenia", + "ignore_notifications_modal.filter_instead": "Radšej triediť", + "ignore_notifications_modal.filter_to_act_users": "Stále budeš môcť akceptovať, odmietnuť, alebo nahlásiť užívateľov", + "ignore_notifications_modal.filter_to_avoid_confusion": "Triedenie pomáha vyvarovať sa možnému zmäteniu", "ignore_notifications_modal.ignore": "Ignoruj upozornenia", "interaction_modal.description.favourite": "S účtom na Mastodone môžete tento príspevok ohviezdičkovať, tak dať autorovi vedieť, že sa vám páči, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "S účtom na Mastodone môžete {name} sledovať a vidieť ich príspevky vo svojom domovskom kanáli.", @@ -428,7 +436,11 @@ "mute_modal.hide_options": "Skryť možnosti", "mute_modal.indefinite": "Pokiaľ ich neodtíšim", "mute_modal.show_options": "Zobraziť možnosti", + "mute_modal.they_can_mention_and_follow": "Môže ťa spomenúť a nasledovať, ale ty ho/ju neuvidíš.", + "mute_modal.they_wont_know": "Nebude vedieť, že bol/a stíšený/á.", "mute_modal.title": "Stíšiť užívateľa?", + "mute_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ho/ju spomínajú.", + "mute_modal.you_wont_see_posts": "Stále uvidí tvoje príspevky, ale ty neuvidíš jeho/jej.", "navigation_bar.about": "O tomto serveri", "navigation_bar.administration": "Spravovanie", "navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní", @@ -468,12 +480,15 @@ "notification.label.private_reply": "Súkromná odpoveď", "notification.label.reply": "Odpoveď", "notification.mention": "Zmienka", + "notification.mentioned_you": "{name} ťa spomenul/a", "notification.moderation-warning.learn_more": "Zisti viac", + "notification.moderation_warning": "Dostal/a si varovanie od moderátora", "notification.moderation_warning.action_delete_statuses": "Niektoré z tvojich príspevkov boli odstránené.", "notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.", "notification.moderation_warning.action_silence": "Tvoj účet bol obmedzený.", "notification.moderation_warning.action_suspend": "Tvoj účet bol pozastavený.", "notification.own_poll": "Vaša anketa sa skončila", + "notification.poll": "Anketa, v ktorej si hlasoval/a, skončila", "notification.reblog": "{name} zdieľa váš príspevok", "notification.relationships_severance_event": "Stratené prepojenia s {name}", "notification.relationships_severance_event.account_suspension": "Správca z {from} pozastavil/a {target}, čo znamená, že od nich viac nemôžeš dostávať aktualizácie, alebo s nimi interaktovať.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 5ac5a3368b4c5d..4699b9f4bda3f5 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Hay aksi!", "alt_text_badge.title": "Alternatif metin", "announcement.announcement": "Duyuru", + "annual_report.summary.archetype.booster": "Trend takipçisi", + "annual_report.summary.archetype.lurker": "Gizli meraklı", + "annual_report.summary.archetype.oracle": "Kahin", + "annual_report.summary.archetype.pollster": "Anketör", + "annual_report.summary.archetype.replier": "Sosyal kelebek", + "annual_report.summary.followers.followers": "takipçiler", + "annual_report.summary.followers.total": "{count} toplam", + "annual_report.summary.here_it_is": "İşte {year} yılı değerlendirmeniz:", + "annual_report.summary.highlighted_post.by_favourites": "en çok beğenilen gönderi", + "annual_report.summary.highlighted_post.by_reblogs": "en çok paylaşılan gönderi", + "annual_report.summary.highlighted_post.by_replies": "en çok yanıt alan gönderi", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "en çok kullanılan uygulama", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "en çok kullanılan etiket", + "annual_report.summary.new_posts.new_posts": "yeni gönderiler", + "annual_report.summary.percentile.text": "Mastodon kullanıcılarınınüst dilimindesiniz.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Bernie'ye söylemeyiz.", + "annual_report.summary.thanks": "Mastodon'un bir parçası olduğunuz için teşekkürler!", "attachments_list.unprocessed": "(işlenmemiş)", "audio.hide": "Sesi gizle", "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name}, {target} kişisini bildirdi", "notification.admin.sign_up": "{name} kaydoldu", "notification.admin.sign_up.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} kaydoldu", + "notification.annual_report.message": "{year} yılı #Wrapstodon'unuz bekliyor! Yılınızın Mastodon'daki öne çıkanlarını ve anılarınızı gösterin!", + "notification.annual_report.view": "#Wrapstodon'u Görüntüle", "notification.favourite": "{name} gönderinizi beğendi", "notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi", "notification.follow": "{name} seni takip etti", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index fc396aa9339cca..b34785ebc3feab 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -87,6 +87,7 @@ "alert.unexpected.title": "Ой!", "alt_text_badge.title": "Альтернативний текст", "announcement.announcement": "Оголошення", + "annual_report.summary.new_posts.new_posts": "нові дописи", "attachments_list.unprocessed": "(не оброблено)", "audio.hide": "Сховати аудіо", "block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 7ae955c1b0ca6f..2b5401a878f7d6 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -87,6 +87,24 @@ "alert.unexpected.title": "Ốiii!", "alt_text_badge.title": "Văn bản thay thế", "announcement.announcement": "Có gì mới?", + "annual_report.summary.archetype.booster": "Hiệp sĩ ngầu", + "annual_report.summary.archetype.lurker": "Kẻ rình mò", + "annual_report.summary.archetype.oracle": "Nhà tiên tri", + "annual_report.summary.archetype.pollster": "Chuyên gia khảo sát", + "annual_report.summary.archetype.replier": "Bướm xã hội", + "annual_report.summary.followers.followers": "người theo dõi", + "annual_report.summary.followers.total": "tổng {count}", + "annual_report.summary.here_it_is": "Nhìn lại năm {year} của bạn:", + "annual_report.summary.highlighted_post.by_favourites": "tút được thích nhiều nhất", + "annual_report.summary.highlighted_post.by_reblogs": "tút được đăng lại nhiều nhất", + "annual_report.summary.highlighted_post.by_replies": "tút được trả lời nhiều nhất", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "app dùng nhiều nhất", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag dùng nhiều nhất", + "annual_report.summary.new_posts.new_posts": "tút mới", + "annual_report.summary.percentile.text": "Bạn nằm trong topthành viên Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Chúng tôi sẽ không kể cho Bernie.", + "annual_report.summary.thanks": "Cảm ơn đã trở thành một phần của Mastodon!", "attachments_list.unprocessed": "(chưa xử lí)", "audio.hide": "Ẩn âm thanh", "block_modal.remote_users_caveat": "Chúng tôi sẽ yêu cầu {domain} tôn trọng quyết định của bạn. Tuy nhiên, việc tuân thủ không được đảm bảo vì một số máy chủ có thể xử lý việc chặn theo cách khác nhau. Các tút công khai vẫn có thể hiển thị đối với người dùng chưa đăng nhập.", @@ -508,6 +526,8 @@ "notification.admin.report_statuses_other": "{name} báo cáo {target}", "notification.admin.sign_up": "{name} tham gia máy chủ của bạn", "notification.admin.sign_up.name_and_others": "{name} và {count, plural, other {# người}} đã đăng ký", + "notification.annual_report.message": "#Wrapstodon {year} của bạn có rồi đây! Hãy chia sẻ những điểm nhấn và khoảnh khắc đáng nhớ trên Mastodon của bạn trong năm qua!", + "notification.annual_report.view": "Xem #Wrapstodon", "notification.favourite": "{name} thích tút của bạn", "notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn", "notification.follow": "{name} theo dõi bạn", diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 3ade3007f44a56..1060ee1609c2bd 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1368,6 +1368,44 @@ fo: merge_long: Varðveit verandi teigarøð og legg nýggjar afturat overwrite: Skriva omaná overwrite_long: Legg nýggj teigarøð inn fyri tey verandi + overwrite_preambles: + blocking_html: + one: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontu frá %{filename}. + other: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{count} kontum frá %{filename}. + bookmarks_html: + one: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} posti frá %{filename}. + other: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{count} postum frá %{filename}. + domain_blocking_html: + one: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøki frá %{filename}. + other: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{count} navnaøkjum frá %{filename}. + following_html: + one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename} og at gevast at fylgja øðrum. + other: Tú ert í ferð við at fylgja upp til %{count} kontum frá %{filename} og at gevast at fylgja øðrum. + lists_html: + one: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} konta verður løgd afturat nýggjum listum. + other: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{count} kontur verða lagdar afturat nýggjum listum. + muting_html: + one: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontu frá %{filename}. + other: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{count} kontum frá %{filename}. + preambles: + blocking_html: + one: Tú ert í ferð við at blokera upp til %{count} kontu frá %{filename}. + other: Tú ert í ferð við at blokera upp til %{count} kontur frá %{filename}. + bookmarks_html: + one: Tú ert í ferð við at leggja upp til %{count} post frá %{filename} afturat tínum bókamerkjum. + other: Tú ert í ferð við at leggja upp til %{count} postar frá %{filename} afturat tínum bókamerkjum. + domain_blocking_html: + one: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}. + other: Tú ert í ferð við at blokera upp til %{count} navnaøki frá %{filename}. + following_html: + one: Tú ert í ferð við at fylgja upp til %{count} kontu frá %{filename}. + other: Tú ert í ferð við at fylgja upp til %{count} kontur frá %{filename}. + lists_html: + one: Tú ert í ferð við at leggja upp til %{count} kontu frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat. + other: Tú ert í ferð við at leggja upp til %{count} kontur frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat. + muting_html: + one: Tú ert í ferð við at doyva upp til %{count} kontu frá %{filename}. + other: Tú ert í ferð við at doyva upp til %{count} kontur frá %{filename}. preface: Tú kanst innlesa dátur, sum tú hevur útlisið frá einum øðrum ambætara, so sum listar av fólki, sum tú fylgir ella blokerar. recent_imports: Feskar innflytingar states: From 8f4af29a73a406c29eb8007decd59fd157276aaa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:45:19 +0100 Subject: [PATCH 447/467] Update dependency aws-sdk-s3 to v1.170.0 (#32791) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 844eb1b6b230e8..00ec451af9ab9c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,8 +100,8 @@ GEM attr_required (1.0.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.997.0) - aws-sdk-core (3.211.0) + aws-partitions (1.1001.0) + aws-sdk-core (3.212.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -109,7 +109,7 @@ GEM aws-sdk-kms (1.95.0) aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.169.0) + aws-sdk-s3 (1.170.0) aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From befb44a08c6048337f27cf93db453249624e9a34 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 Nov 2024 10:57:42 +0100 Subject: [PATCH 448/467] =?UTF-8?q?Fix=20=E2=80=9Cuninitialized=20constant?= =?UTF-8?q?=20HttpLog=E2=80=9D=20errors=20in=20tootctl=20(#32796)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/mastodon/cli/progress_helper.rb | 2 +- lib/tasks/mastodon.rake | 2 +- lib/tasks/repo.rake | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mastodon/cli/progress_helper.rb b/lib/mastodon/cli/progress_helper.rb index 56343437967650..da9527ffd79083 100644 --- a/lib/mastodon/cli/progress_helper.rb +++ b/lib/mastodon/cli/progress_helper.rb @@ -5,7 +5,7 @@ Rails.logger = dev_null ActiveRecord::Base.logger = dev_null ActiveJob::Base.logger = dev_null -HttpLog.configuration.logger = dev_null +HttpLog.configuration.logger = dev_null if defined?(HttpLog) Paperclip.options[:log] = false Chewy.logger = dev_null diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index 2822f2eeb126ed..e1e2dd8194fcf0 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -596,7 +596,7 @@ def disable_log_stdout! Rails.logger = dev_null ActiveRecord::Base.logger = dev_null - HttpLog.configuration.logger = dev_null + HttpLog.configuration.logger = dev_null if defined?(HttpLog) Paperclip.options[:log] = false end diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake index 539c44273f4a3a..c8f977f6512dc2 100644 --- a/lib/tasks/repo.rake +++ b/lib/tasks/repo.rake @@ -18,7 +18,7 @@ namespace :repo do url = "https://api.github.com/repos/#{REPOSITORY_NAME}/contributors?anon=1" - HttpLog.config.compact_log = true + HttpLog.config.compact_log = true if defined?(HttpLog) while url.present? response = HTTP.get(url) @@ -43,7 +43,7 @@ namespace :repo do path = Rails.root.join('CHANGELOG.md') tmp = Tempfile.new - HttpLog.config.compact_log = true + HttpLog.config.compact_log = true if defined?(HttpLog) begin File.open(path, 'r') do |file| From ae667624acbdcba796921dc44c24efd362d4a49a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 05:07:04 -0500 Subject: [PATCH 449/467] Use `with_options` for shared settings options in routes (#30847) --- config/routes/admin.rb | 6 ++++-- config/routes/api.rb | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 3dba6fa5b8eb6d..2afe5702360628 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -40,8 +40,10 @@ end end - get '/settings', to: redirect('/admin/settings/branding') - get '/settings/edit', to: redirect('/admin/settings/branding') + with_options to: redirect('/admin/settings/branding') do + get '/settings' + get '/settings/edit' + end namespace :settings do resource :branding, only: [:show, :update], controller: 'branding' diff --git a/config/routes/api.rb b/config/routes/api.rb index ccdd83dec7df1f..95fdf332a0ca66 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -44,8 +44,10 @@ resources :list, only: :show end - get '/streaming', to: 'streaming#index' - get '/streaming/(*any)', to: 'streaming#index' + with_options to: 'streaming#index' do + get '/streaming' + get '/streaming/(*any)' + end resources :custom_emojis, only: [:index] resources :suggestions, only: [:index, :destroy] From 73f66af6eb6c344768ab30c38fc2f82c45482d4d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 05:28:59 -0500 Subject: [PATCH 450/467] Update location of unused `MIN_SCHEDULE_OFFSET` constant (#31217) --- app/models/scheduled_status.rb | 3 ++- app/services/post_status_service.rb | 2 -- app/workers/scheduler/scheduled_statuses_scheduler.rb | 8 ++++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb index 27f0cbd280cbf2..cb49e907057ac1 100644 --- a/app/models/scheduled_status.rb +++ b/app/models/scheduled_status.rb @@ -15,6 +15,7 @@ class ScheduledStatus < ApplicationRecord TOTAL_LIMIT = 300 DAILY_LIMIT = 25 + MINIMUM_OFFSET = 5.minutes.freeze belongs_to :account, inverse_of: :scheduled_statuses has_many :media_attachments, inverse_of: :scheduled_status, dependent: :nullify @@ -26,7 +27,7 @@ class ScheduledStatus < ApplicationRecord private def validate_future_date - errors.add(:scheduled_at, I18n.t('scheduled_statuses.too_soon')) if scheduled_at.present? && scheduled_at <= Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET + errors.add(:scheduled_at, I18n.t('scheduled_statuses.too_soon')) if scheduled_at.present? && scheduled_at <= Time.now.utc + MINIMUM_OFFSET end def validate_total_limit diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 98fd95f0258da4..ee6b18c74ce5e9 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -4,8 +4,6 @@ class PostStatusService < BaseService include Redisable include LanguagesHelper - MIN_SCHEDULE_OFFSET = 5.minutes.freeze - class UnexpectedMentionsError < StandardError attr_reader :accounts diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb index 4e251780de5f1a..e2ccabf70f84ca 100644 --- a/app/workers/scheduler/scheduled_statuses_scheduler.rb +++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb @@ -20,7 +20,7 @@ def publish_scheduled_statuses! end def due_statuses - ScheduledStatus.where(scheduled_at: ..Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET) + ScheduledStatus.where(scheduled_at: ..time_due_at) end def publish_scheduled_announcements! @@ -30,7 +30,7 @@ def publish_scheduled_announcements! end def due_announcements - Announcement.unpublished.where('scheduled_at IS NOT NULL AND scheduled_at <= ?', Time.now.utc + PostStatusService::MIN_SCHEDULE_OFFSET) + Announcement.unpublished.where('scheduled_at IS NOT NULL AND scheduled_at <= ?', time_due_at) end def unpublish_expired_announcements! @@ -40,4 +40,8 @@ def unpublish_expired_announcements! def expired_announcements Announcement.published.where('ends_at IS NOT NULL AND ends_at <= ?', Time.now.utc) end + + def time_due_at + Time.now.utc + ScheduledStatus::MINIMUM_OFFSET + end end From 68b545ef338fc772c56d0f9dde781698b5730ae6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 05:32:33 -0500 Subject: [PATCH 451/467] Add `Status.not_direct_visibility` scope (#32065) --- app/models/account_statuses_cleanup_policy.rb | 2 +- app/models/status.rb | 1 + lib/mastodon/cli/cache.rb | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb index 6e998e2dcaf6b0..ef41bb3ee3aa08 100644 --- a/app/models/account_statuses_cleanup_policy.rb +++ b/app/models/account_statuses_cleanup_policy.rb @@ -130,7 +130,7 @@ def validate_local_account end def without_direct_scope - Status.where.not(visibility: :direct) + Status.not_direct_visibility end def old_enough_scope(max_id = nil) diff --git a/app/models/status.rb b/app/models/status.rb index f0a4f50ff6f6ad..c58de5114c7adf 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -127,6 +127,7 @@ class Status < ApplicationRecord } scope :distributable_visibility, -> { where(visibility: %i(public unlisted)) } scope :list_eligible_visibility, -> { where(visibility: %i(public unlisted private)) } + scope :not_direct_visibility, -> { where.not(visibility: :direct) } after_create_commit :trigger_create_webhooks after_update_commit :trigger_update_webhooks diff --git a/lib/mastodon/cli/cache.rb b/lib/mastodon/cli/cache.rb index f32ab292ee29b2..cfb6cba1ff201f 100644 --- a/lib/mastodon/cli/cache.rb +++ b/lib/mastodon/cli/cache.rb @@ -52,7 +52,7 @@ def recount_account_stats(account) account.account_stat.tap do |account_stat| account_stat.following_count = account.active_relationships.count account_stat.followers_count = account.passive_relationships.count - account_stat.statuses_count = account.statuses.where.not(visibility: :direct).count + account_stat.statuses_count = account.statuses.not_direct_visibility.count account_stat.save if account_stat.changed? end @@ -60,7 +60,7 @@ def recount_account_stats(account) def recount_status_stats(status) status.status_stat.tap do |status_stat| - status_stat.replies_count = status.replies.where.not(visibility: :direct).count + status_stat.replies_count = status.replies.not_direct_visibility.count status_stat.reblogs_count = status.reblogs.count status_stat.favourites_count = status.favourites.count From e0a44b8317504bd953779495cd77156359b60550 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 05:34:13 -0500 Subject: [PATCH 452/467] Use `shell.indent` for list output indentation in CLI area (#31969) --- lib/mastodon/cli/accounts.rb | 4 +++- lib/mastodon/cli/email_domain_blocks.rb | 6 ++++-- lib/mastodon/cli/emoji.rb | 4 +++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 23c907543f2884..c8e91224cf6712 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -321,7 +321,9 @@ def cull(*domains) unless skip_domains.empty? say('The following domains were not available during the check:', :yellow) - skip_domains.each { |domain| say(" #{domain}") } + shell.indent(2) do + skip_domains.each { |domain| say(domain) } + end end end diff --git a/lib/mastodon/cli/email_domain_blocks.rb b/lib/mastodon/cli/email_domain_blocks.rb index 6b9107c8ade6a6..4aa31f8af84635 100644 --- a/lib/mastodon/cli/email_domain_blocks.rb +++ b/lib/mastodon/cli/email_domain_blocks.rb @@ -10,8 +10,10 @@ def list EmailDomainBlock.where(parent_id: nil).find_each do |entry| say(entry.domain.to_s, :white) - EmailDomainBlock.where(parent_id: entry.id).find_each do |child| - say(" #{child.domain}", :cyan) + shell.indent do + EmailDomainBlock.where(parent_id: entry.id).find_each do |child| + say(child.domain, :cyan) + end end end end diff --git a/lib/mastodon/cli/emoji.rb b/lib/mastodon/cli/emoji.rb index 4a8949de0e412c..206961f854898c 100644 --- a/lib/mastodon/cli/emoji.rb +++ b/lib/mastodon/cli/emoji.rb @@ -62,7 +62,9 @@ def import(path) failed += 1 say('Failure/Error: ', :red) say(entry.full_name) - say(" #{custom_emoji.errors[:image].join(', ')}", :red) + shell.indent(2) do + say(custom_emoji.errors[:image].join(', '), :red) + end end end end From 6ae1fcd0591ece24867483865f41e95b80cc0fb2 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 Nov 2024 12:45:46 +0100 Subject: [PATCH 453/467] Fix list of follow requests not having a back button (#32797) --- app/javascript/mastodon/features/follow_requests/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/follow_requests/index.jsx b/app/javascript/mastodon/features/follow_requests/index.jsx index a8f40a31d0d007..7d651f2ca69c24 100644 --- a/app/javascript/mastodon/features/follow_requests/index.jsx +++ b/app/javascript/mastodon/features/follow_requests/index.jsx @@ -68,7 +68,7 @@ class FollowRequests extends ImmutablePureComponent { ); return ( - + Date: Thu, 7 Nov 2024 08:46:20 -0500 Subject: [PATCH 454/467] Add `EmailDomainBlock.parents` scope (#31968) --- app/controllers/admin/email_domain_blocks_controller.rb | 2 +- app/models/email_domain_block.rb | 2 ++ lib/mastodon/cli/email_domain_blocks.rb | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/email_domain_blocks_controller.rb b/app/controllers/admin/email_domain_blocks_controller.rb index faa0a061a6ddd1..fe822d8c999d25 100644 --- a/app/controllers/admin/email_domain_blocks_controller.rb +++ b/app/controllers/admin/email_domain_blocks_controller.rb @@ -5,7 +5,7 @@ class EmailDomainBlocksController < BaseController def index authorize :email_domain_block, :index? - @email_domain_blocks = EmailDomainBlock.where(parent_id: nil).includes(:children).order(id: :desc).page(params[:page]) + @email_domain_blocks = EmailDomainBlock.parents.includes(:children).order(id: :desc).page(params[:page]) @form = Form::EmailDomainBlockBatch.new end diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index f3a86eae8f3533..583d2e6c1b18fa 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -28,6 +28,8 @@ class EmailDomainBlock < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true + scope :parents, -> { where(parent_id: nil) } + # Used for adding multiple blocks at once attr_accessor :other_domains diff --git a/lib/mastodon/cli/email_domain_blocks.rb b/lib/mastodon/cli/email_domain_blocks.rb index 4aa31f8af84635..7b2da8ef9f4db0 100644 --- a/lib/mastodon/cli/email_domain_blocks.rb +++ b/lib/mastodon/cli/email_domain_blocks.rb @@ -7,11 +7,11 @@ module Mastodon::CLI class EmailDomainBlocks < Base desc 'list', 'List blocked e-mail domains' def list - EmailDomainBlock.where(parent_id: nil).find_each do |entry| - say(entry.domain.to_s, :white) + EmailDomainBlock.parents.find_each do |parent| + say(parent.domain.to_s, :white) shell.indent do - EmailDomainBlock.where(parent_id: entry.id).find_each do |child| + EmailDomainBlock.where(parent_id: parent.id).find_each do |child| say(child.domain, :cyan) end end From 16b074d731de2ee03d392f91dede60fe0b24b0b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 14:56:14 +0100 Subject: [PATCH 455/467] Update dependency net-http to '~> 0.5.0' (#32794) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 690e2a59d2a797..f7808d4e75cae2 100644 --- a/Gemfile +++ b/Gemfile @@ -221,7 +221,7 @@ gem 'concurrent-ruby', require: false gem 'connection_pool', require: false gem 'xorcist', '~> 1.1' -gem 'net-http', '~> 0.4.0' +gem 'net-http', '~> 0.5.0' gem 'rubyzip', '~> 2.3' gem 'hcaptcha', '~> 7.1' diff --git a/Gemfile.lock b/Gemfile.lock index 00ec451af9ab9c..087af73d9f88b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -416,7 +416,7 @@ GEM msgpack (1.7.3) multi_json (1.15.0) mutex_m (0.2.0) - net-http (0.4.1) + net-http (0.5.0) uri net-imap (0.5.0) date @@ -946,7 +946,7 @@ DEPENDENCIES mario-redis-lock (~> 1.2) memory_profiler mime-types (~> 3.6.0) - net-http (~> 0.4.0) + net-http (~> 0.5.0) net-ldap (~> 0.18) nokogiri (~> 1.15) oj (~> 3.14) From 41227aeb9534ed566241c3038bfc91401b971638 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 09:58:20 -0500 Subject: [PATCH 456/467] Update Rails to version 7.2.2 (#30391) --- Gemfile | 3 +- Gemfile.lock | 135 +++++++++--------- .../system_check/database_schema_check.rb | 2 +- .../concerns/status/safe_reblog_insert.rb | 19 ++- config/application.rb | 7 +- config/environments/development.rb | 10 +- config/environments/production.rb | 35 ++--- config/environments/test.rb | 9 +- lib/active_record/with_recursive.rb | 65 --------- lib/arel/union_parenthesizing.rb | 51 ------- lib/tasks/tests.rake | 2 +- .../database_schema_check_spec.rb | 4 +- 12 files changed, 118 insertions(+), 224 deletions(-) delete mode 100644 lib/active_record/with_recursive.rb delete mode 100644 lib/arel/union_parenthesizing.rb diff --git a/Gemfile b/Gemfile index f7808d4e75cae2..47506929b064ed 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ ruby '>= 3.2.0' gem 'propshaft' gem 'puma', '~> 6.3' gem 'rack', '~> 2.2.7' -gem 'rails', '~> 7.1.1' +gem 'rails', '~> 7.2.0' gem 'thor', '~> 1.2' gem 'dotenv' @@ -63,6 +63,7 @@ gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'mime-types', '~> 3.6.0', require: 'mime/types/columnar' +gem 'mutex_m' gem 'nokogiri', '~> 1.15' gem 'oj', '~> 3.14' gem 'ox', '~> 2.14' diff --git a/Gemfile.lock b/Gemfile.lock index 087af73d9f88b9..1888485af08110 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,51 +10,46 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.4.2) - actionpack (= 7.1.4.2) - activesupport (= 7.1.4.2) + actioncable (7.2.2) + actionpack (= 7.2.2) + activesupport (= 7.2.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.4.2) - actionpack (= 7.1.4.2) - activejob (= 7.1.4.2) - activerecord (= 7.1.4.2) - activestorage (= 7.1.4.2) - activesupport (= 7.1.4.2) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.1.4.2) - actionpack (= 7.1.4.2) - actionview (= 7.1.4.2) - activejob (= 7.1.4.2) - activesupport (= 7.1.4.2) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp + actionmailbox (7.2.2) + actionpack (= 7.2.2) + activejob (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) + mail (>= 2.8.0) + actionmailer (7.2.2) + actionpack (= 7.2.2) + actionview (= 7.2.2) + activejob (= 7.2.2) + activesupport (= 7.2.2) + mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.1.4.2) - actionview (= 7.1.4.2) - activesupport (= 7.1.4.2) + actionpack (7.2.2) + actionview (= 7.2.2) + activesupport (= 7.2.2) nokogiri (>= 1.8.5) racc - rack (>= 2.2.4) + rack (>= 2.2.4, < 3.2) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.4.2) - actionpack (= 7.1.4.2) - activerecord (= 7.1.4.2) - activestorage (= 7.1.4.2) - activesupport (= 7.1.4.2) + useragent (~> 0.16) + actiontext (7.2.2) + actionpack (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.4.2) - activesupport (= 7.1.4.2) + actionview (7.2.2) + activesupport (= 7.2.2) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -64,31 +59,33 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.4.2) - activesupport (= 7.1.4.2) + activejob (7.2.2) + activesupport (= 7.2.2) globalid (>= 0.3.6) - activemodel (7.1.4.2) - activesupport (= 7.1.4.2) - activerecord (7.1.4.2) - activemodel (= 7.1.4.2) - activesupport (= 7.1.4.2) + activemodel (7.2.2) + activesupport (= 7.2.2) + activerecord (7.2.2) + activemodel (= 7.2.2) + activesupport (= 7.2.2) timeout (>= 0.4.0) - activestorage (7.1.4.2) - actionpack (= 7.1.4.2) - activejob (= 7.1.4.2) - activerecord (= 7.1.4.2) - activesupport (= 7.1.4.2) + activestorage (7.2.2) + actionpack (= 7.2.2) + activejob (= 7.2.2) + activerecord (= 7.2.2) + activesupport (= 7.2.2) marcel (~> 1.0) - activesupport (7.1.4.2) + activesupport (7.2.2) base64 + benchmark (>= 0.3) bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) aes_key_wrap (1.1.0) @@ -120,6 +117,7 @@ GEM base64 (0.2.0) bcp47_spec (0.2.1) bcrypt (3.1.20) + benchmark (0.3.0) better_errors (2.10.1) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -613,20 +611,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.4.2) - actioncable (= 7.1.4.2) - actionmailbox (= 7.1.4.2) - actionmailer (= 7.1.4.2) - actionpack (= 7.1.4.2) - actiontext (= 7.1.4.2) - actionview (= 7.1.4.2) - activejob (= 7.1.4.2) - activemodel (= 7.1.4.2) - activerecord (= 7.1.4.2) - activestorage (= 7.1.4.2) - activesupport (= 7.1.4.2) + rails (7.2.2) + actioncable (= 7.2.2) + actionmailbox (= 7.2.2) + actionmailer (= 7.2.2) + actionpack (= 7.2.2) + actiontext (= 7.2.2) + actionview (= 7.2.2) + activejob (= 7.2.2) + activemodel (= 7.2.2) + activerecord (= 7.2.2) + activestorage (= 7.2.2) + activesupport (= 7.2.2) bundler (>= 1.15.0) - railties (= 7.1.4.2) + railties (= 7.2.2) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -641,10 +639,10 @@ GEM rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.4.2) - actionpack (= 7.1.4.2) - activesupport (= 7.1.4.2) - irb + railties (7.2.2) + actionpack (= 7.2.2) + activesupport (= 7.2.2) + irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) @@ -755,6 +753,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) + securerandom (0.3.1) selenium-webdriver (4.26.0) base64 (~> 0.2) logger (~> 1.4) @@ -838,6 +837,7 @@ GEM unf_ext (0.0.9.1) unicode-display_width (2.6.0) uri (0.13.1) + useragent (0.16.10) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) @@ -946,6 +946,7 @@ DEPENDENCIES mario-redis-lock (~> 1.2) memory_profiler mime-types (~> 3.6.0) + mutex_m net-http (~> 0.5.0) net-ldap (~> 0.18) nokogiri (~> 1.15) @@ -984,7 +985,7 @@ DEPENDENCIES rack-attack (~> 6.6) rack-cors (~> 2.0) rack-test (~> 2.1) - rails (~> 7.1.1) + rails (~> 7.2.0) rails-controller-testing (~> 1.0) rails-i18n (~> 7.0) rdf-normalize (~> 0.5) diff --git a/app/lib/admin/system_check/database_schema_check.rb b/app/lib/admin/system_check/database_schema_check.rb index c2f01fd55b528c..a3ef0613ea0c1d 100644 --- a/app/lib/admin/system_check/database_schema_check.rb +++ b/app/lib/admin/system_check/database_schema_check.rb @@ -6,7 +6,7 @@ def skip? end def pass? - !ActiveRecord::Base.connection.migration_context.needs_migration? + !ActiveRecord::Base.connection_pool.migration_context.needs_migration? end def message diff --git a/app/models/concerns/status/safe_reblog_insert.rb b/app/models/concerns/status/safe_reblog_insert.rb index 60ddb78e52c40e..48d585ea18c241 100644 --- a/app/models/concerns/status/safe_reblog_insert.rb +++ b/app/models/concerns/status/safe_reblog_insert.rb @@ -15,7 +15,9 @@ module Status::SafeReblogInsert # # The code is kept similar to ActiveRecord::Persistence code and calls it # directly when we are not handling a reblog. - def _insert_record(values, returning) + # + # https://github.com/rails/rails/blob/v7.2.1.1/activerecord/lib/active_record/persistence.rb#L238-L263 + def _insert_record(connection, values, returning) return super unless values.is_a?(Hash) && values['reblog_of_id']&.value.present? primary_key = self.primary_key @@ -30,14 +32,19 @@ def _insert_record(values, returning) # The following line departs from stock ActiveRecord # Original code was: - # im.insert(values.transform_keys { |name| arel_table[name] }) + # im = Arel::InsertManager.new(arel_table) # Instead, we use a custom builder when a reblog is happening: im = _compile_reblog_insert(values) - connection.insert(im, "#{self} Create", primary_key || false, primary_key_value, returning: returning).tap do |result| - # Since we are using SELECT instead of VALUES, a non-error `nil` return is possible. - # For our purposes, it's equivalent to a foreign key constraint violation - raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil? + with_connection do |_c| + connection.insert( + im, "#{self} Create", primary_key || false, primary_key_value, + returning: returning + ).tap do |result| + # Since we are using SELECT instead of VALUES, a non-error `nil` return is possible. + # For our purposes, it's equivalent to a foreign key constraint violation + raise ActiveRecord::InvalidForeignKey, "(reblog_of_id)=(#{values['reblog_of_id'].value}) is not present in table \"statuses\"" if result.nil? + end end end diff --git a/config/application.rb b/config/application.rb index f94366d36f49db..18a1b1a0fdc688 100644 --- a/config/application.rb +++ b/config/application.rb @@ -52,8 +52,6 @@ require_relative '../lib/stoplight/redis_data_store_extensions' require_relative '../lib/active_record/database_tasks_extensions' require_relative '../lib/active_record/batches' -require_relative '../lib/active_record/with_recursive' -require_relative '../lib/arel/union_parenthesizing' require_relative '../lib/simple_navigation/item_extensions' Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true' @@ -61,10 +59,7 @@ module Mastodon class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 7.1 - - # Explicitly set the cache format version to align with Rails version - config.active_support.cache_format_version = 7.1 + config.load_defaults 7.2 # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. diff --git a/config/environments/development.rb b/config/environments/development.rb index f5f22a3c1ff158..8533935a8835ba 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -37,11 +37,6 @@ config.action_controller.forgery_protection_origin_check = ENV['DISABLE_FORGERY_REQUEST_PROTECTION'].nil? - ActiveSupport::Logger.new($stdout).tap do |logger| - logger.formatter = config.log_formatter - config.logger = ActiveSupport::TaggedLogging.new(logger) - end - # Generate random VAPID keys Webpush.generate_key.tap do |vapid_key| config.x.vapid_private_key = vapid_key.private_key @@ -51,6 +46,8 @@ # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false + # Disable caching for Action Mailer templates even if Action Controller + # caching is enabled. config.action_mailer.perform_caching = false # Print deprecation notices to the Rails logger. @@ -89,6 +86,9 @@ # Raise error when a before_action's only/except options reference missing actions. config.action_controller.raise_on_missing_callback_actions = true + + # Apply autocorrection by RuboCop to files generated by `bin/rails generate`. + config.generators.apply_rubocop_autocorrect_after_generate! end Redis.raise_deprecations = true diff --git a/config/environments/production.rb b/config/environments/production.rb index 1cf752f3b24904..6d4c30cd2085ef 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -17,7 +17,6 @@ # Full error reports are disabled and caching is turned on. config.consider_all_requests_local = false config.action_controller.perform_caching = true - config.action_controller.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present? # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment # key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files). @@ -26,8 +25,11 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false + # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead. + # config.public_file_server.enabled = false + # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.asset_host = "http://assets.example.com" + config.asset_host = ENV['CDN_HOST'] if ENV['CDN_HOST'].present? # Specifies the header that your server uses for sending files. config.action_dispatch.x_sendfile_header = ENV['SENDFILE_HEADER'] if ENV['SENDFILE_HEADER'].present? @@ -37,6 +39,10 @@ # Allow to specify public IP of reverse proxy if it's needed config.action_dispatch.trusted_proxies = ENV['TRUSTED_PROXY_IP'].split(/(?:\s*,\s*|\s+)/).map { |item| IPAddr.new(item) } if ENV['TRUSTED_PROXY_IP'].present? + # Assume all access to the app is happening through a SSL-terminating reverse proxy. + # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies. + # config.assume_ssl = true + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true # Skip http-to-https redirect for the default health check endpoint. @@ -46,14 +52,19 @@ }, } - # Info include generic and useful information about system operation, but avoids logging too much - # information to avoid inadvertent exposure of personally identifiable information (PII). If you - # want to log everything, set the level to "debug". - config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info').to_sym + # Log to STDOUT by default + config.logger = ActiveSupport::Logger.new($stdout) + .tap { |logger| logger.formatter = ::Logger::Formatter.new } + .then { |logger| ActiveSupport::TaggedLogging.new(logger) } # Prepend all log lines with the following tags. config.log_tags = [:request_id] + # "info" includes generic and useful information about system operation, but avoids logging too much + # information to avoid inadvertent exposure of personally identifiable information (PII). If you + # want to log everything, set the level to "debug". + config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info') + # Use a different cache store in production. config.cache_store = :redis_cache_store, REDIS_CONFIGURATION.cache @@ -61,6 +72,8 @@ # config.active_job.queue_adapter = :resque # config.active_job.queue_name_prefix = "mastodon_production" + # Disable caching for Action Mailer templates even if Action Controller + # caching is enabled. config.action_mailer.perform_caching = false # Ignore bad email addresses and do not raise email delivery errors. @@ -87,18 +100,8 @@ { key: controller.signature_key_id } if controller.respond_to?(:signed_request?) && controller.signed_request? end - # Use a different logger for distributed setups. - # require "syslog/logger" - # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") - - # Log to STDOUT by default - config.logger = ActiveSupport::Logger.new($stdout) - .tap { |logger| logger.formatter = ::Logger::Formatter.new } - .then { |logger| ActiveSupport::TaggedLogging.new(logger) } - # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false - config.action_mailer.perform_caching = false # E-mails diff --git a/config/environments/test.rb b/config/environments/test.rb index eb29ab1e176775..5406eac9ecac6d 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -19,8 +19,6 @@ # loading is working properly before deploying your code. config.eager_load = ENV['CI'].present? - config.assets_digest = false - # Show full error reports and disable caching. config.consider_all_requests_local = true config.action_controller.perform_caching = false @@ -32,6 +30,8 @@ # Disable request forgery protection in test environment. config.action_controller.allow_forgery_protection = false + # Disable caching for Action Mailer templates even if Action Controller + # caching is enabled. config.action_mailer.perform_caching = false config.action_mailer.default_options = { from: 'notifications@localhost' } @@ -41,6 +41,10 @@ # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test + # Unlike controllers, the mailer instance doesn't have any context about the + # incoming request so you'll need to provide the :host parameter yourself. + config.action_mailer.default_url_options = { host: 'www.example.com' } + # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr @@ -58,7 +62,6 @@ # Raise exceptions for disallowed deprecations. config.active_support.disallowed_deprecation = :raise - config.i18n.default_locale = :en config.i18n.fallbacks = true # Tell Active Support which deprecation messages to disallow. diff --git a/lib/active_record/with_recursive.rb b/lib/active_record/with_recursive.rb deleted file mode 100644 index 4bd3e81eedc1c9..00000000000000 --- a/lib/active_record/with_recursive.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -# Add support for writing recursive CTEs in ActiveRecord - -# Initially from Lorin Thwaits (https://github.com/lorint) as per comment: -# https://github.com/vlado/activerecord-cte/issues/16#issuecomment-1433043310 - -# Modified from the above code to change the signature to -# `with_recursive(hash)` and extending CTE hash values to also includes arrays -# of values that get turned into UNION ALL expressions. - -# This implementation has been merged in Rails: https://github.com/rails/rails/pull/51601 - -module ActiveRecord - module QueryMethodsExtensions - def with_recursive(*args) - @with_is_recursive = true - check_if_method_has_arguments!(__callee__, args) - spawn.with_recursive!(*args) - end - - # Like #with_recursive but modifies the relation in place. - def with_recursive!(*args) # :nodoc: - self.with_values += args - @with_is_recursive = true - self - end - - private - - def build_with(arel) - return if with_values.empty? - - with_statements = with_values.map do |with_value| - raise ArgumentError, "Unsupported argument type: #{with_value} #{with_value.class}" unless with_value.is_a?(Hash) - - build_with_value_from_hash(with_value) - end - - # Was: arel.with(with_statements) - @with_is_recursive ? arel.with(:recursive, with_statements) : arel.with(with_statements) - end - - def build_with_value_from_hash(hash) - hash.map do |name, value| - Arel::Nodes::TableAlias.new(build_with_expression_from_value(value), name) - end - end - - def build_with_expression_from_value(value) - case value - when Arel::Nodes::SqlLiteral then Arel::Nodes::Grouping.new(value) - when ActiveRecord::Relation then value.arel - when Arel::SelectManager then value - when Array then value.map { |e| build_with_expression_from_value(e) }.reduce { |result, value| Arel::Nodes::UnionAll.new(result, value) } - else - raise ArgumentError, "Unsupported argument type: `#{value}` #{value.class}" - end - end - end -end - -ActiveSupport.on_load(:active_record) do - ActiveRecord::QueryMethods.prepend(ActiveRecord::QueryMethodsExtensions) -end diff --git a/lib/arel/union_parenthesizing.rb b/lib/arel/union_parenthesizing.rb deleted file mode 100644 index 852d8e92d8a4f3..00000000000000 --- a/lib/arel/union_parenthesizing.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true - -# Fix an issue with `LIMIT` ocurring on the left side of a `UNION` causing syntax errors. -# See https://github.com/rails/rails/issues/40181 - -# The fix has been merged in ActiveRecord: https://github.com/rails/rails/pull/51549 -# TODO: drop this when available in ActiveRecord - -# rubocop:disable all -- This is a mostly vendored file - -module Arel - module Visitors - class ToSql - private - - def infix_value_with_paren(o, collector, value, suppress_parens = false) - collector << "( " unless suppress_parens - collector = if o.left.class == o.class - infix_value_with_paren(o.left, collector, value, true) - else - select_parentheses o.left, collector, false # Changed from `visit o.left, collector` - end - collector << value - collector = if o.right.class == o.class - infix_value_with_paren(o.right, collector, value, true) - else - select_parentheses o.right, collector, false # Changed from `visit o.right, collector` - end - collector << " )" unless suppress_parens - collector - end - - def select_parentheses(o, collector, always_wrap_selects = true) - if o.is_a?(Nodes::SelectStatement) && (always_wrap_selects || require_parentheses?(o)) - collector << "(" - visit o, collector - collector << ")" - collector - else - visit o, collector - end - end - - def require_parentheses?(o) - !o.orders.empty? || o.limit || o.offset - end - end - end -end - -# rubocop:enable all diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index cb7fce31399f4d..74269439ddde83 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -11,7 +11,7 @@ namespace :tests do '3_3_0' => 2020_12_18_054746, }.each do |release, version| ActiveRecord::Tasks::DatabaseTasks - .migration_connection + .migration_connection_pool .migration_context .migrate(version) Rake::Task["tests:migrations:populate_v#{release}"] diff --git a/spec/lib/admin/system_check/database_schema_check_spec.rb b/spec/lib/admin/system_check/database_schema_check_spec.rb index 311d5249563ea2..3dc5763f92d0fb 100644 --- a/spec/lib/admin/system_check/database_schema_check_spec.rb +++ b/spec/lib/admin/system_check/database_schema_check_spec.rb @@ -13,7 +13,7 @@ context 'when database needs migration' do before do context = instance_double(ActiveRecord::MigrationContext, needs_migration?: true) - allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) + allow(ActiveRecord::Base.connection_pool).to receive(:migration_context).and_return(context) end it 'returns false' do @@ -24,7 +24,7 @@ context 'when database does not need migration' do before do context = instance_double(ActiveRecord::MigrationContext, needs_migration?: false) - allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) + allow(ActiveRecord::Base.connection_pool).to receive(:migration_context).and_return(context) end it 'returns true' do From 870bb06994753023cde350bc94c4c317091d3d7b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 10:37:26 -0500 Subject: [PATCH 457/467] Add coverage for misc serializers (#32781) --- .../activitypub/actor_serializer_spec.rb | 39 +++++++++++++++++++ .../activitypub/add_serializer_spec.rb | 27 +++++++++++++ .../activitypub/collection_serializer_spec.rb | 39 +++++++++++++++++++ .../activitypub/remove_serializer_spec.rb | 27 +++++++++++++ ...ionship_severance_event_serializer_spec.rb | 18 +++++++++ .../rest/account_warning_serializer_spec.rb | 19 +++++++++ .../rest/admin/account_serializer_spec.rb | 25 ++++++++++++ .../rest/admin/cohort_serializer_spec.rb | 19 +++++++++ .../admin/webhook_event_serializer_spec.rb | 33 ++++++++++++++++ .../rest/appeal_serializer_spec.rb | 27 +++++++++++++ .../rest/custom_emoji_serializer_spec.rb | 18 +++++++++ .../extended_description_serializer_spec.rb | 35 +++++++++++++++++ spec/serializers/rest/rule_serializer_spec.rb | 18 +++++++++ 13 files changed, 344 insertions(+) create mode 100644 spec/serializers/activitypub/actor_serializer_spec.rb create mode 100644 spec/serializers/activitypub/add_serializer_spec.rb create mode 100644 spec/serializers/activitypub/collection_serializer_spec.rb create mode 100644 spec/serializers/activitypub/remove_serializer_spec.rb create mode 100644 spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb create mode 100644 spec/serializers/rest/account_warning_serializer_spec.rb create mode 100644 spec/serializers/rest/admin/account_serializer_spec.rb create mode 100644 spec/serializers/rest/admin/cohort_serializer_spec.rb create mode 100644 spec/serializers/rest/admin/webhook_event_serializer_spec.rb create mode 100644 spec/serializers/rest/appeal_serializer_spec.rb create mode 100644 spec/serializers/rest/custom_emoji_serializer_spec.rb create mode 100644 spec/serializers/rest/extended_description_serializer_spec.rb create mode 100644 spec/serializers/rest/rule_serializer_spec.rb diff --git a/spec/serializers/activitypub/actor_serializer_spec.rb b/spec/serializers/activitypub/actor_serializer_spec.rb new file mode 100644 index 00000000000000..ad2445595375ac --- /dev/null +++ b/spec/serializers/activitypub/actor_serializer_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::ActorSerializer do + subject { serialized_record_json(record, described_class) } + + describe '#type' do + context 'with the instance actor' do + let(:record) { Account.find(Account::INSTANCE_ACTOR_ID) } + + it { is_expected.to include('type' => 'Application') } + end + + context 'with an application actor' do + let(:record) { Fabricate :account, actor_type: 'Application' } + + it { is_expected.to include('type' => 'Service') } + end + + context 'with a service actor' do + let(:record) { Fabricate :account, actor_type: 'Service' } + + it { is_expected.to include('type' => 'Service') } + end + + context 'with a Group actor' do + let(:record) { Fabricate :account, actor_type: 'Group' } + + it { is_expected.to include('type' => 'Group') } + end + + context 'with a Person actor' do + let(:record) { Fabricate :account, actor_type: 'Person' } + + it { is_expected.to include('type' => 'Person') } + end + end +end diff --git a/spec/serializers/activitypub/add_serializer_spec.rb b/spec/serializers/activitypub/add_serializer_spec.rb new file mode 100644 index 00000000000000..3b3eaeb1b015b1 --- /dev/null +++ b/spec/serializers/activitypub/add_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::AddSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(described_class::UriSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/activitypub/collection_serializer_spec.rb b/spec/serializers/activitypub/collection_serializer_spec.rb new file mode 100644 index 00000000000000..7726df914f258c --- /dev/null +++ b/spec/serializers/activitypub/collection_serializer_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::CollectionSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(ActivityPub::NoteSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an ActivityPub::CollectionPresenter' do + let(:model) { ActivityPub::CollectionPresenter.new } + + it { is_expected.to eq(described_class) } + end + + context 'with a String' do + let(:model) { '' } + + it { is_expected.to eq(described_class::StringSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/activitypub/remove_serializer_spec.rb b/spec/serializers/activitypub/remove_serializer_spec.rb new file mode 100644 index 00000000000000..0e4b199838e629 --- /dev/null +++ b/spec/serializers/activitypub/remove_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::RemoveSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(described_class::UriSerializer) } + end + + context 'with a FeaturedTag model' do + let(:model) { FeaturedTag.new } + + it { is_expected.to eq(ActivityPub::HashtagSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb new file mode 100644 index 00000000000000..95b4d7dcd2a6b0 --- /dev/null +++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')) + ) + end + end +end diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb new file mode 100644 index 00000000000000..0f335d12159f43 --- /dev/null +++ b/spec/serializers/rest/account_warning_serializer_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AccountWarningSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate :account_warning, id: 123, status_ids: [456, 789] } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')), + 'status_ids' => be_a(Array).and(eq(['456', '789'])) + ) + end + end +end diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb new file mode 100644 index 00000000000000..58f58a997b17c8 --- /dev/null +++ b/spec/serializers/rest/admin/account_serializer_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::AccountSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'created_by_application_id' do + context 'when account is application-created' do + let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) } + let(:application) { Fabricate :application } + + it { is_expected.to include('created_by_application_id' => application.id.to_s) } + end + end + + describe 'invited_by_account_id' do + context 'when account was invited' do + let(:record) { Fabricate :account, user: Fabricate(:user, invite: invite) } + let(:invite) { Fabricate :invite } + + it { is_expected.to include('invited_by_account_id' => invite.user.account.id.to_s) } + end + end +end diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb new file mode 100644 index 00000000000000..ed6067c0d21f07 --- /dev/null +++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::CohortSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Admin::Metrics::Retention.new('2024-01-01', '2024-01-02', 'day').cohorts.first } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'data' => be_a(Array), + 'period' => /2024-01-01/ + ) + end + end +end diff --git a/spec/serializers/rest/admin/webhook_event_serializer_spec.rb b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb new file mode 100644 index 00000000000000..3cbfbd92a316d3 --- /dev/null +++ b/spec/serializers/rest/admin/webhook_event_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::Admin::WebhookEventSerializer do + describe '.serializer_for' do + subject { described_class.serializer_for(model, {}) } + + context 'with an Account model' do + let(:model) { Account.new } + + it { is_expected.to eq(REST::Admin::AccountSerializer) } + end + + context 'with a Report model' do + let(:model) { Report.new } + + it { is_expected.to eq(REST::Admin::ReportSerializer) } + end + + context 'with a Status model' do + let(:model) { Status.new } + + it { is_expected.to eq(REST::StatusSerializer) } + end + + context 'with an Array' do + let(:model) { [] } + + it { is_expected.to eq(ActiveModel::Serializer::CollectionSerializer) } + end + end +end diff --git a/spec/serializers/rest/appeal_serializer_spec.rb b/spec/serializers/rest/appeal_serializer_spec.rb new file mode 100644 index 00000000000000..1ae6617de5776a --- /dev/null +++ b/spec/serializers/rest/appeal_serializer_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::AppealSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'state' do + context 'when appeal is approved' do + let(:record) { Fabricate.build :appeal, approved_at: 2.days.ago } + + it { is_expected.to include('state' => 'approved') } + end + + context 'when appeal is rejected' do + let(:record) { Fabricate.build :appeal, rejected_at: 2.days.ago } + + it { is_expected.to include('state' => 'rejected') } + end + + context 'when appeal is not approved or rejected' do + let(:record) { Fabricate.build :appeal, approved_at: nil, rejected_at: nil } + + it { is_expected.to include('state' => 'pending') } + end + end +end diff --git a/spec/serializers/rest/custom_emoji_serializer_spec.rb b/spec/serializers/rest/custom_emoji_serializer_spec.rb new file mode 100644 index 00000000000000..a694ca515a5568 --- /dev/null +++ b/spec/serializers/rest/custom_emoji_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::CustomEmojiSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :custom_emoji, id: 123, category: Fabricate(:custom_emoji_category, name: 'Category Name') } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'category' => be_a(String).and(eq('Category Name')) + ) + end + end +end diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb new file mode 100644 index 00000000000000..d7bd078e1d6f02 --- /dev/null +++ b/spec/serializers/rest/extended_description_serializer_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::ExtendedDescriptionSerializer do + subject { serialized_record_json(record, described_class) } + + describe 'serialization' do + context 'with text present' do + let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) } + + it 'returns expected values' do + expect(subject) + .to include( + 'content' => eq(<<~HTML), +

Hello world

+ HTML + 'updated_at' => eq('2024-01-01') + ) + end + end + + context 'with text missing' do + let(:record) { ExtendedDescription.new text: nil, updated_at: Date.new(2024, 1, 1) } + + it 'returns expected values' do + expect(subject) + .to include( + 'content' => eq(''), + 'updated_at' => eq('2024-01-01') + ) + end + end + end +end diff --git a/spec/serializers/rest/rule_serializer_spec.rb b/spec/serializers/rest/rule_serializer_spec.rb new file mode 100644 index 00000000000000..4d801e77d36b9c --- /dev/null +++ b/spec/serializers/rest/rule_serializer_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::RuleSerializer do + subject { serialized_record_json(record, described_class) } + + let(:record) { Fabricate.build :rule, id: 123 } + + describe 'serialization' do + it 'returns expected values' do + expect(subject) + .to include( + 'id' => be_a(String).and(eq('123')) + ) + end + end +end From f180880f657c92b5deec181486c4ebd3a0aa4f79 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 7 Nov 2024 10:40:41 -0500 Subject: [PATCH 458/467] Remove postgres version support check for `REINDEX` in migration (#32744) --- ...51_add_unique_index_on_preview_cards_statuses.rb | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb index 4271f8c08af7f4..c35ad800282343 100644 --- a/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb +++ b/db/post_migrate/20230803082451_add_unique_index_on_preview_cards_statuses.rb @@ -15,21 +15,10 @@ def down private - def supports_concurrent_reindex? - @supports_concurrent_reindex ||= begin - ActiveRecord::Base.connection.database_version >= 120_000 - end - end - def deduplicate_and_reindex! deduplicate_preview_cards! - if supports_concurrent_reindex? - safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } - else - remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey - add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true - end + safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } rescue ActiveRecord::RecordNotUnique retry end From 8df867b20a5542a29a66c8380e97aa5bf5921c90 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:53:47 +0100 Subject: [PATCH 459/467] New Crowdin Translations (automated) (#32803) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/it.json | 15 +++ app/javascript/mastodon/locales/ru.json | 162 +++++++++++++----------- app/javascript/mastodon/locales/sk.json | 7 + app/javascript/mastodon/locales/sv.json | 13 ++ config/locales/ru.yml | 54 +++++++- 5 files changed, 172 insertions(+), 79 deletions(-) diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index a692fb7fd33836..13ba1f8836e5af 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -87,6 +87,19 @@ "alert.unexpected.title": "Oops!", "alt_text_badge.title": "Testo alternativo", "announcement.announcement": "Annuncio", + "annual_report.summary.archetype.oracle": "L'oracolo", + "annual_report.summary.followers.followers": "seguaci", + "annual_report.summary.followers.total": "{count} in totale", + "annual_report.summary.here_it_is": "Ecco il tuo {year} in sintesi:", + "annual_report.summary.highlighted_post.by_favourites": "il post più apprezzato", + "annual_report.summary.highlighted_post.by_reblogs": "il post più condiviso", + "annual_report.summary.highlighted_post.by_replies": "il post con più risposte", + "annual_report.summary.highlighted_post.possessive": "di {name}", + "annual_report.summary.most_used_app.most_used_app": "l'app più utilizzata", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "l'hashtag più usato", + "annual_report.summary.new_posts.new_posts": "nuovi post", + "annual_report.summary.percentile.text": "Questo ti colloca tra ildei migliori utenti Mastodon.", + "annual_report.summary.percentile.we_wont_tell_bernie": "Non lo diremo a Bernie.", "attachments_list.unprocessed": "(non elaborato)", "audio.hide": "Nascondi audio", "block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.", @@ -508,6 +521,8 @@ "notification.admin.report_statuses_other": "{name} ha segnalato {target}", "notification.admin.sign_up": "{name} si è iscritto", "notification.admin.sign_up.name_and_others": "Si sono iscritti: {name} e {count, plural, one {# altro utente} other {altri # utenti}}", + "notification.annual_report.message": "Il tuo #Wrapstodon {year} ti aspetta! Scopri i momenti salienti e memorabili del tuo anno su Mastodon!", + "notification.annual_report.view": "Visualizza #Wrapstodon", "notification.favourite": "{name} ha aggiunto il tuo post ai preferiti", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti", "notification.follow": "{name} ha iniziato a seguirti", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 9d937939a9b463..f5617550e16e7c 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -40,7 +40,7 @@ "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.go_to_profile": "Перейти к профилю", "account.hide_reblogs": "Скрыть продвижения от @{name}", - "account.in_memoriam": "В Памяти.", + "account.in_memoriam": "Вечная память.", "account.joined_short": "Присоединился", "account.languages": "Изменить языки подписки", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", @@ -62,13 +62,13 @@ "account.requested_follow": "{name} отправил(а) вам запрос на подписку", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", - "account.statuses_counter": "{count, plural, one {# пост} few {# поста} many {# постов} other {# постов}}", + "account.statuses_counter": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", "account.unblock": "Разблокировать @{name}", "account.unblock_domain": "Разблокировать {domain}", "account.unblock_short": "Разблокировать", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", - "account.unmute": "Убрать {name} из игнорируемых", + "account.unmute": "Перестать игнорировать @{name}", "account.unmute_notifications_short": "Включить уведомления", "account.unmute_short": "Не игнорировать", "account_note.placeholder": "Текст заметки", @@ -87,6 +87,20 @@ "alert.unexpected.title": "Ой!", "alt_text_badge.title": "Альтернативный текст", "announcement.announcement": "Объявление", + "annual_report.summary.archetype.booster": "Репостер", + "annual_report.summary.archetype.lurker": "Молчун", + "annual_report.summary.archetype.pollster": "Опросчик", + "annual_report.summary.archetype.replier": "Душа компании", + "annual_report.summary.followers.followers": "подписчиков", + "annual_report.summary.here_it_is": "Вот ваши итоги {year} года:", + "annual_report.summary.highlighted_post.by_favourites": "пост с наибольшим количеством звёздочек", + "annual_report.summary.highlighted_post.by_reblogs": "пост с наибольшим количеством продвижений", + "annual_report.summary.highlighted_post.by_replies": "пост с наибольшим количеством ответов", + "annual_report.summary.highlighted_post.possessive": "{name}", + "annual_report.summary.most_used_app.most_used_app": "наиболее часто используемое приложение", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "наиболее часто используемый хэштег", + "annual_report.summary.new_posts.new_posts": "новых постов", + "annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!", "attachments_list.unprocessed": "(не обработан)", "audio.hide": "Скрыть аудио", "block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение. Однако, соблюдение требований не гарантировано, поскольку некоторые серверы могут работать с блокировками по-разному. Публичные записи по-прежнему могут быть видны неавторизованным пользователям.", @@ -146,10 +160,10 @@ "community.column_settings.remote_only": "Только удалённые", "compose.language.change": "Сменить язык", "compose.language.search": "Поиск языков...", - "compose.published.body": "Запись опубликована.", + "compose.published.body": "Пост опубликован.", "compose.published.open": "Открыть", - "compose.saved.body": "Запись сохранена.", - "compose_form.direct_message_warning_learn_more": "Подробнее", + "compose.saved.body": "Пост отредактирован.", + "compose_form.direct_message_warning_learn_more": "Узнать больше", "compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь конфиденциальной информацией через Mastodon.", "compose_form.hashtag_warning": "Этот пост не будет виден ни под одним из хэштегов, так как он не публичный. Только публичные посты можно найти по хэштегу.", "compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.", @@ -161,14 +175,14 @@ "compose_form.poll.single": "Один вариант ответа", "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", - "compose_form.poll.type": "Стиль", + "compose_form.poll.type": "Тип", "compose_form.publish": "Опубликовать", "compose_form.publish_form": "Опубликовать", "compose_form.reply": "Ответить", "compose_form.save_changes": "Сохранить", "compose_form.spoiler.marked": "Текст скрыт за предупреждением", "compose_form.spoiler.unmarked": "Текст не скрыт", - "compose_form.spoiler_placeholder": "Предупреждение о контенте (опционально)", + "compose_form.spoiler_placeholder": "Предупреждение о содержимом (необязательно)", "confirmation_modal.cancel": "Отмена", "confirmations.block.confirm": "Заблокировать", "confirmations.delete.confirm": "Удалить", @@ -178,17 +192,17 @@ "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", "confirmations.delete_list.title": "Удалить список?", "confirmations.discard_edit_media.confirm": "Отменить", - "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?", + "confirmations.discard_edit_media.message": "У вас имеются несохранённые изменения превью и описания медиафайла, отменить их?", "confirmations.edit.confirm": "Редактировать", - "confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?", - "confirmations.edit.title": "Перепишем сообщение?", + "confirmations.edit.message": "При редактировании, текст набираемого поста будет очищен. Продолжить?", + "confirmations.edit.title": "Переписать сообщение?", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.logout.title": "Выйти?", "confirmations.mute.confirm": "Игнорировать", "confirmations.redraft.confirm": "Удалить и исправить", - "confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут удалены.", - "confirmations.redraft.title": "Удалим и исправим пост?", + "confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут потеряны.", + "confirmations.redraft.title": "Создать пост заново?", "confirmations.reply.confirm": "Ответить", "confirmations.reply.message": "При ответе, текст набираемого поста будет очищен. Продолжить?", "confirmations.reply.title": "Перепишем пост?", @@ -243,7 +257,7 @@ "embed.preview": "Так это будет выглядеть:", "emoji_button.activity": "Занятия", "emoji_button.clear": "Очистить", - "emoji_button.custom": "С этого узла", + "emoji_button.custom": "С этого сервера", "emoji_button.flags": "Флаги", "emoji_button.food": "Еда и напитки", "emoji_button.label": "Вставить эмодзи", @@ -350,12 +364,12 @@ "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} участник} few {{counter} участников} many {{counter} участников} other {{counter} участников}}", - "hashtag.counter_by_uses": "{count, plural, one {{counter} сообщение} few {{counter} сообщения} many {{counter} сообщения} other {{counter} сообщения}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} сообщение} other {{counter} сообщений}} сегодня", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} пользователь} few {{counter} пользователя} other {{counter} пользователей}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня", "hashtag.follow": "Подписаться на новые посты", "hashtag.unfollow": "Отписаться", - "hashtags.and_other": "...и {count, plural, other {# ещё}}", + "hashtags.and_other": "…и {count, plural, other {ещё #}}", "hints.profiles.followers_may_be_missing": "Подписчики у этого профиля могут отсутствовать.", "hints.profiles.follows_may_be_missing": "Фолловеры для этого профиля могут отсутствовать.", "hints.profiles.posts_may_be_missing": "Некоторые сообщения из этого профиля могут отсутствовать.", @@ -404,15 +418,15 @@ "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}", "keyboard_shortcuts.back": "перейти назад", "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных", - "keyboard_shortcuts.boost": "Репостнуть", + "keyboard_shortcuts.boost": "продвинуть пост", "keyboard_shortcuts.column": "фокус на одном из столбцов", "keyboard_shortcuts.compose": "фокус на поле ввода", "keyboard_shortcuts.description": "Описание", "keyboard_shortcuts.direct": "чтобы открыть столбец личных упоминаний", "keyboard_shortcuts.down": "вниз по списку", "keyboard_shortcuts.enter": "открыть пост", - "keyboard_shortcuts.favourite": "Добавить пост в избранное", - "keyboard_shortcuts.favourites": "Открыть «Избранное»", + "keyboard_shortcuts.favourite": "добавить пост в избранное", + "keyboard_shortcuts.favourites": "открыть «Избранные»", "keyboard_shortcuts.federated": "перейти к глобальной ленте", "keyboard_shortcuts.heading": "Сочетания клавиш", "keyboard_shortcuts.home": "перейти к домашней ленте", @@ -420,7 +434,7 @@ "keyboard_shortcuts.legend": "показать это окно", "keyboard_shortcuts.local": "перейти к локальной ленте", "keyboard_shortcuts.mention": "упомянуть автора поста", - "keyboard_shortcuts.muted": "Открыть список игнорируемых", + "keyboard_shortcuts.muted": "открыть список игнорируемых", "keyboard_shortcuts.my_profile": "перейти к своему профилю", "keyboard_shortcuts.notifications": "перейти к уведомлениям", "keyboard_shortcuts.open_media": "открыть вложение", @@ -432,7 +446,7 @@ "keyboard_shortcuts.spoilers": "показать/скрыть поле предупреждения о содержании", "keyboard_shortcuts.start": "Перейти к разделу \"Начать\"", "keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением", - "keyboard_shortcuts.toggle_sensitivity": "Показать/скрыть медиафайлы", + "keyboard_shortcuts.toggle_sensitivity": "показать/скрыть медиафайлы", "keyboard_shortcuts.toot": "начать писать новый пост", "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", @@ -470,12 +484,12 @@ "mute_modal.show_options": "Показать опции", "mute_modal.they_can_mention_and_follow": "Они могут упоминать и следить за вами, но вы не будете их видеть.", "mute_modal.they_wont_know": "Они не будут знать, что их заглушили.", - "mute_modal.title": "Заткнуть пользователя?", + "mute_modal.title": "Заглушить пользователя?", "mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.", "mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.", "navigation_bar.about": "О проекте", - "navigation_bar.administration": "Администрация", - "navigation_bar.advanced_interface": "Включить многоколоночный интерфейс", + "navigation_bar.administration": "Администрирование", + "navigation_bar.advanced_interface": "Открыть в многоколоночном интерфейсе", "navigation_bar.blocks": "Заблокированные пользователи", "navigation_bar.bookmarks": "Закладки", "navigation_bar.community_timeline": "Локальная лента", @@ -501,27 +515,29 @@ "navigation_bar.search": "Поиск", "navigation_bar.security": "Безопасность", "not_signed_in_indicator.not_signed_in": "Вам нужно войти, чтобы иметь доступ к этому ресурсу.", - "notification.admin.report": "{name} сообщил о {target}", - "notification.admin.report_account": "{name} сообщил {count, plural, one {один пост} other {# постов}} от {target} для {category}", - "notification.admin.report_account_other": "{name} сообщил {count, plural, one {одно сообщение} other {# сообщений}} от {target}", - "notification.admin.report_statuses": "{name} сообщил {target} для {category}", - "notification.admin.report_statuses_other": "{name} сообщает {target}", - "notification.admin.sign_up": "{name} зарегистрирован", - "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались", + "notification.admin.report": "{name} пожаловался на {target}", + "notification.admin.report_account": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target} по причине: {category}", + "notification.admin.report_account_other": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target}", + "notification.admin.report_statuses": "{name} пожаловался на {target} по причине: {category}", + "notification.admin.report_statuses_other": "{name} пожаловался на {target}", + "notification.admin.sign_up": "{name} зарегистрировался", + "notification.admin.sign_up.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} зарегистрировались", + "notification.annual_report.message": "#Wrapstodon за {year} год ждёт вас! Откройте для себя итоги и памятные моменты этого года в Mastodon!", + "notification.annual_report.view": "Перейти к #Wrapstodon", "notification.favourite": "{name} добавил(а) ваш пост в избранное", "notification.favourite.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваш пост в избранное", "notification.follow": "{name} подписался (-лась) на вас", - "notification.follow.name_and_others": "{name} и {count, plural, one {# other} few {# others} many {# others} other {# others}} подписались на вас", + "notification.follow.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", "notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас", "notification.label.mention": "Упоминание", - "notification.label.private_mention": "Частное упоминание", - "notification.label.private_reply": "Частный ответ", - "notification.label.reply": "Ответить", + "notification.label.private_mention": "Личное упоминание", + "notification.label.private_reply": "Приватный ответ", + "notification.label.reply": "Ответ", "notification.mention": "Упоминание", - "notification.mentioned_you": "{name} упоминает вас", + "notification.mentioned_you": "{name} упомянул(а) вас", "notification.moderation-warning.learn_more": "Узнать больше", - "notification.moderation_warning": "Вы получили предупреждение от модерации", + "notification.moderation_warning": "Модераторы вынесли вам предупреждение", "notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.", "notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые из ваших сообщений были отмечены как деликатные.", @@ -561,16 +577,16 @@ "notification_requests.view": "Просмотр уведомлений", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", - "notifications.clear_title": "Сбросить уведомления?", + "notifications.clear_title": "Очистить уведомления?", "notifications.column_settings.admin.report": "Новые жалобы:", "notifications.column_settings.admin.sign_up": "Новые регистрации:", "notifications.column_settings.alert": "Уведомления на рабочем столе", - "notifications.column_settings.favourite": "Избранные:", - "notifications.column_settings.filter_bar.advanced": "Отображать все категории", + "notifications.column_settings.favourite": "Ваш пост добавили в избранные:", + "notifications.column_settings.filter_bar.advanced": "Показать все категории", "notifications.column_settings.filter_bar.category": "Панель сортировки", "notifications.column_settings.follow": "У вас новый подписчик:", "notifications.column_settings.follow_request": "Новые запросы на подписку:", - "notifications.column_settings.group": "Группа", + "notifications.column_settings.group": "Группировать", "notifications.column_settings.mention": "Вас упомянули в посте:", "notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:", "notifications.column_settings.push": "Пуш-уведомления", @@ -590,27 +606,27 @@ "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", "notifications.grant_permission": "Предоставить разрешение.", "notifications.group": "{count} уведомл.", - "notifications.mark_as_read": "Отмечать все уведомления прочитанными", + "notifications.mark_as_read": "Отметить все уведомления прочитанными", "notifications.permission_denied": "Уведомления на рабочем столе недоступны, так как вы запретили их отправку в браузере. Проверьте настройки для сайта, чтобы включить их обратно.", "notifications.permission_denied_alert": "Уведомления на рабочем столе недоступны, так как вы ранее отклонили запрос на их отправку.", "notifications.permission_required": "Чтобы включить уведомления на рабочем столе, необходимо разрешить их в браузере.", - "notifications.policy.accept": "Принять", - "notifications.policy.accept_hint": "Показать в уведомлениях", - "notifications.policy.drop": "Игнорируем", - "notifications.policy.drop_hint": "Отправить в пустоту, чтобы никогда больше не увидеть", - "notifications.policy.filter": "Фильтр", - "notifications.policy.filter_hint": "Отправка в папку фильтрованных уведомлений", - "notifications.policy.filter_limited_accounts_hint": "Ограничено модераторами сервера", - "notifications.policy.filter_limited_accounts_title": "Модерируемые аккаунты", - "notifications.policy.filter_new_accounts.hint": "Создано в течение последних {days, plural, one {один день} few {# дней} many {# дней} other {# дня}}", + "notifications.policy.accept": "Принимать", + "notifications.policy.accept_hint": "Показывать в уведомлениях", + "notifications.policy.drop": "Игнорировать", + "notifications.policy.drop_hint": "Отправлять в пустоту, чтобы никогда больше не увидеть", + "notifications.policy.filter": "Фильтровать", + "notifications.policy.filter_hint": "Отправлять в раздел отфильтрованных уведомлений", + "notifications.policy.filter_limited_accounts_hint": "Ограниченные модераторами сервера", + "notifications.policy.filter_limited_accounts_title": "Модерируемые учётные записи", + "notifications.policy.filter_new_accounts.hint": "Созданные в течение {days, plural, one {последнего # дня} other {последних # дней}}", "notifications.policy.filter_new_accounts_title": "Новые учётные записи", "notifications.policy.filter_not_followers_hint": "Включая людей, которые подписаны на вас меньше чем {days, plural, one {# день} few {# дня} other {# дней}}", "notifications.policy.filter_not_followers_title": "Люди, не подписанные на вас", "notifications.policy.filter_not_following_hint": "Пока вы не одобрите их вручную", "notifications.policy.filter_not_following_title": "Люди, на которых вы не подписаны", - "notifications.policy.filter_private_mentions_hint": "Фильтруется, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя", + "notifications.policy.filter_private_mentions_hint": "Фильтруются, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя", "notifications.policy.filter_private_mentions_title": "Нежелательные личные упоминания", - "notifications.policy.title": "………Управлять уведомлениями от…", + "notifications.policy.title": "Управление уведомлениями", "notifications_permission_banner.enable": "Включить уведомления", "notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.", "notifications_permission_banner.title": "Будьте в курсе происходящего", @@ -679,7 +695,7 @@ "privacy_policy.title": "Политика конфиденциальности", "recommended": "Рекомендуется", "refresh": "Обновить", - "regeneration_indicator.label": "Грузим…", + "regeneration_indicator.label": "Загрузка…", "regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!", "relative_time.days": "{number} д", "relative_time.full.days": "{number, plural, one {# день} many {# дней} other {# дня}} назад", @@ -692,15 +708,15 @@ "relative_time.minutes": "{number} мин", "relative_time.seconds": "{number} с", "relative_time.today": "сегодня", - "reply_indicator.attachments": "{count, plural, one {# вложение} other {# вложения}}", + "reply_indicator.attachments": "{count, plural, one {# вложение} few {# вложения} other {# вложений}}", "reply_indicator.cancel": "Отмена", "reply_indicator.poll": "Опрос", "report.block": "Заблокировать", "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", - "report.categories.legal": "Правовая информация", + "report.categories.legal": "Нарушение закона", "report.categories.other": "Другое", "report.categories.spam": "Спам", - "report.categories.violation": "Содержимое нарушает одно или несколько правил узла", + "report.categories.violation": "Содержимое нарушает одно или несколько правил сервера", "report.category.subtitle": "Выберите наиболее подходящее", "report.category.title": "Расскажите нам, что не так с {type}", "report.category.title_account": "этим профилем", @@ -771,32 +787,32 @@ "server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)", "server_banner.active_users": "активные пользователи", "server_banner.administered_by": "Управляется:", - "server_banner.is_one_of_many": "{domain} - это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в fediverse.", + "server_banner.is_one_of_many": "{domain} — это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в сети Fediverse.", "server_banner.server_stats": "Статистика сервера:", "sign_in_banner.create_account": "Зарегистрироваться", - "sign_in_banner.follow_anyone": "Следите за любым человеком в федеральной вселенной и смотрите все в хронологическом порядке. Никаких алгоритмов, рекламы или клик бейта.", - "sign_in_banner.mastodon_is": "Mastodon - лучший способ быть в курсе всего происходящего.", + "sign_in_banner.follow_anyone": "Подписывайтесь на кого угодно в федивёрсе и смотрите ленту в хронологическом порядке. Никаких алгоритмов, рекламы или кликбейта.", + "sign_in_banner.mastodon_is": "Mastodon — лучший способ быть в курсе всего происходящего.", "sign_in_banner.sign_in": "Войти", "sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь", "status.admin_account": "Открыть интерфейс модератора для @{name}", - "status.admin_domain": "Открыть интерфейс модерации {domain}", + "status.admin_domain": "Открыть интерфейс модератора для {domain}", "status.admin_status": "Открыть этот пост в интерфейсе модератора", "status.block": "Заблокировать @{name}", - "status.bookmark": "Сохранить в закладки", + "status.bookmark": "Добавить в закладки", "status.cancel_reblog_private": "Не продвигать", "status.cannot_reblog": "Этот пост не может быть продвинут", "status.continued_thread": "Продолжение темы", "status.copy": "Скопировать ссылку на пост", "status.delete": "Удалить", "status.detailed_status": "Подробный просмотр обсуждения", - "status.direct": "Лично упоминать @{name}", - "status.direct_indicator": "Личные упоминания", + "status.direct": "Упомянуть @{name} лично", + "status.direct_indicator": "Личное упоминание", "status.edit": "Изменить", "status.edited": "Дата последнего изменения: {date}", "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", "status.embed": "Получить код для встраивания", - "status.favourite": "Избранное", - "status.favourites": "{count, plural, one {в избранном} other {в избранном}}", + "status.favourite": "Добавить в избранное", + "status.favourites": "{count, plural, other {в избранном}}", "status.filter": "Фильтровать этот пост", "status.history.created": "{name} создал {date}", "status.history.edited": "{name} отредактировал(а) {date}", @@ -829,13 +845,13 @@ "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more_all": "Развернуть все спойлеры в ветке", "status.show_original": "Показать оригинал", - "status.title.with_attachments": "{user} размещено {attachmentCount, plural, one {вложение} other {{attachmentCount} вложений}}", + "status.title.with_attachments": "{user} опубликовал {attachmentCount, plural, one {{attachmentCount} вложение} few {{attachmentCount} вложения} other {{attachmentCount} вложений}}", "status.translate": "Перевод", - "status.translated_from_with": "Переведено с {lang}, используя {provider}", - "status.uncached_media_warning": "Прослушивание недоступно", + "status.translated_from_with": "Переведено с {lang} с помощью {provider}", + "status.uncached_media_warning": "Предварительный просмотр недоступен", "status.unmute_conversation": "Не игнорировать обсуждение", "status.unpin": "Открепить от профиля", - "subscribed_languages.lead": "Посты только на выбранных языках будут отображаться на вашей домашней странице и в списке лент после изменения. Выберите «Нет», чтобы получать посты на всех языках.", + "subscribed_languages.lead": "Посты лишь на выбранных языках будут появляться в вашей домашней ленте и в списках после изменения. Снимите выбор, чтобы получать посты на всех языках.", "subscribed_languages.save": "Сохранить изменения", "subscribed_languages.target": "Изменить языки подписки для {target}", "tabs_bar.home": "Главная", @@ -845,7 +861,7 @@ "time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}", "time_remaining.moments": "остались считанные мгновения", "time_remaining.seconds": "{number, plural, one {# секунда} many {# секунд} other {# секунды}}", - "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний день} few {последние {days} дня} other {последние {days} дней}}", + "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний {days} день} few {последние {days} дня} other {последние {days} дней}}", "trends.trending_now": "Самое актуальное", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "units.short.billion": "{count} млрд", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 7b9254c0d36728..1102754fd7634a 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -89,9 +89,11 @@ "announcement.announcement": "Oznámenie", "annual_report.summary.followers.followers": "sledovatelia", "annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok", + "annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami", "annual_report.summary.most_used_app.most_used_app": "najviac používaná aplikácia", "annual_report.summary.most_used_hashtag.most_used_hashtag": "najviac užívaný hashtag", "annual_report.summary.new_posts.new_posts": "nové príspevky", + "annual_report.summary.percentile.we_wont_tell_bernie": "Nepovieme Berniemu.", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skryť zvuk", "block_modal.show_less": "Zobraziť menej", @@ -409,6 +411,7 @@ "lightbox.close": "Zatvoriť", "lightbox.next": "Ďalej", "lightbox.previous": "Späť", + "lightbox.zoom_out": "Priblížiť na mieru", "limited_account_hint.action": "Aj tak zobraziť profil", "limited_account_hint.title": "Tento profil bol skrytý správcami servera {domain}.", "link_preview.author": "Autor: {name}", @@ -535,6 +538,8 @@ "notifications.permission_denied": "Upozornenia na ploche sú nedostupné pre už skôr zamietnutú požiadavku prehliadača", "notifications.permission_denied_alert": "Upozornenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", "notifications.permission_required": "Upozornenia na ploche sú nedostupné, pretože neboli udelené potrebné povolenia.", + "notifications.policy.accept": "Prijať", + "notifications.policy.accept_hint": "Ukáž v oznámeniach", "notifications.policy.drop": "Ignoruj", "notifications.policy.filter": "Triediť", "notifications.policy.filter_limited_accounts_title": "Moderované účty", @@ -542,6 +547,7 @@ "notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú", "notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ", "notifications.policy.filter_private_mentions_title": "Nevyžiadané priame spomenutia", + "notifications.policy.title": "Spravuj oznámenia od…", "notifications_permission_banner.enable": "Povoliť upozornenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nenechajte si nič ujsť", @@ -712,6 +718,7 @@ "status.bookmark": "Pridať záložku", "status.cancel_reblog_private": "Zrušiť zdieľanie", "status.cannot_reblog": "Tento príspevok nie je možné zdieľať", + "status.continued_thread": "Pokračujúce vlákno", "status.copy": "Kopírovať odkaz na príspevok", "status.delete": "Vymazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 5f551fc4cd5a88..e3571704bb0131 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -87,10 +87,22 @@ "alert.unexpected.title": "Hoppsan!", "alt_text_badge.title": "Alt-Text", "announcement.announcement": "Meddelande", + "annual_report.summary.archetype.booster": "Häftighetsjägaren", + "annual_report.summary.archetype.lurker": "Smygaren", + "annual_report.summary.archetype.oracle": "Oraklet", + "annual_report.summary.archetype.pollster": "Frågaren", + "annual_report.summary.archetype.replier": "Den sociala fjärilen", "annual_report.summary.followers.followers": "följare", "annual_report.summary.followers.total": "{count} totalt", + "annual_report.summary.here_it_is": "Här är en tillbakablick på ditt {year}:", + "annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerat inlägg", + "annual_report.summary.highlighted_post.by_reblogs": "mest boostat inlägg", "annual_report.summary.highlighted_post.by_replies": "inlägg med flest svar", + "annual_report.summary.highlighted_post.possessive": "{name}s", + "annual_report.summary.most_used_app.most_used_app": "mest använda app", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag", "annual_report.summary.new_posts.new_posts": "nya inlägg", + "annual_report.summary.percentile.text": "Det placerar dig i toppav Mastodon-användare.", "annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.", "annual_report.summary.thanks": "Tack för att du är en del av Mastodon!", "attachments_list.unprocessed": "(obehandlad)", @@ -514,6 +526,7 @@ "notification.admin.report_statuses_other": "{name} rapporterade {target}", "notification.admin.sign_up": "{name} registrerade sig", "notification.admin.sign_up.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har registrerat sig", + "notification.annual_report.message": "Din {year} #Wrapstodon väntar! Upptäck ditt års höjdpunkter och minnesvärda stunder på Mastodon!", "notification.annual_report.view": "Visa #Wrapstodon", "notification.favourite": "{name} favoritmarkerade ditt inlägg", "notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg", diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 41b74c8cb45e04..831f68b24b3a33 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -65,7 +65,7 @@ ru: demote: Разжаловать destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка - disable_sign_in_token_auth: Отключите аутентификацию с помощью маркера электронной почты + disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам disable_two_factor_authentication: Отключить 2FA disabled: Отключено display_name: Отображаемое имя @@ -74,7 +74,7 @@ ru: email: E-mail email_status: Статус e-mail enable: Включить - enable_sign_in_token_auth: Включите аутентификацию с помощью маркера электронной почты + enable_sign_in_token_auth: Включить аутентификацию по e-mail кодам enabled: Включен enabled_msg: Учётная запись %{username} успешно разморожена followers: Подписчики @@ -147,8 +147,8 @@ ru: security_measures: only_password: Только пароль password_and_2fa: Пароль и 2FA - sensitive: Отметить как «деликатного содержания» - sensitized: отмечено как «деликатного характера» + sensitive: Деликатный + sensitized: отмечено как деликатный контент shared_inbox_url: URL общих входящих show: created_reports: Жалобы, отправленные с этой учётной записи @@ -166,7 +166,7 @@ ru: unblock_email: Разблокировать e-mail адрес unblocked_email_msg: E-mail адрес %{username} разблокирован unconfirmed_email: Неподтверждённый e-mail - undo_sensitized: Убрать отметку «деликатного содержания» + undo_sensitized: Снять отметку "деликатный" undo_silenced: Отменить скрытие undo_suspension: Снять блокировку unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно @@ -1316,7 +1316,7 @@ ru: csv: CSV domain_blocks: Доменные блокировки lists: Списки - mutes: Ваши игнорируете + mutes: Ваши игнорируемые storage: Ваши файлы featured_tags: add_new: Добавить @@ -1439,6 +1439,47 @@ ru: many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих. one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename} и отписаться от всех прочих. other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename} и отписаться от всех прочих. + lists_html: + few: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунта. + many: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов. + one: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будет добавлен %{count} аккаунт. + other: Вы собираетесь заменить свои списки содержимым файла %{filename}. В новые списки будут добавлены %{count} аккаунтов. + muting_html: + few: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}. + many: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}. + one: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунта из файла %{filename}. + other: Вы собираетесь заменить свой список игнорируемых пользователей списком из %{count} аккаунтов из файла %{filename}. + preambles: + blocking_html: + few: Вы собираетесь заблокировать %{count} аккаунта из файла %{filename}. + many: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}. + one: Вы собираетесь заблокировать %{count} аккаунт из файла %{filename}. + other: Вы собираетесь заблокировать %{count} аккаунтов из файла %{filename}. + bookmarks_html: + few: Вы собираетесь добавить %{count} поста из файла %{filename} в свои закладки. + many: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки. + one: Вы собираетесь добавить %{count} пост из файла %{filename} в свои закладки. + other: Вы собираетесь добавить %{count} постов из файла %{filename} в свои закладки. + domain_blocking_html: + few: Вы собираетесь заблокировать %{count} домена из файла %{filename}. + many: Вы собираетесь заблокировать %{count} доменов из файла %{filename}. + one: Вы собираетесь заблокировать %{count} домен из файла %{filename}. + other: Вы собираетесь заблокировать %{count} доменов из файла %{filename}. + following_html: + few: Вы собираетесь подписаться на %{count} аккаунта из файла %{filename}. + many: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}. + one: Вы собираетесь подписаться на %{count} аккаунт из файла %{filename}. + other: Вы собираетесь подписаться на %{count} аккаунтов из файла %{filename}. + lists_html: + few: Вы собираетесь добавить %{count} аккаунта из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы. + many: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы. + one: Вы собираетесь добавить %{count} аккаунт из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы. + other: Вы собираетесь добавить %{count} аккаунтов из файла %{filename} в свои списки. Если соответствующих списков нет, они будут созданы. + muting_html: + few: Вы собираетесь начать игнорировать %{count} аккаунта из файла %{filename}. + many: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}. + one: Вы собираетесь начать игнорировать %{count} аккаунт из файла %{filename}. + other: Вы собираетесь начать игнорировать %{count} аккаунтов из файла %{filename}. preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла. recent_imports: Недавно импортированное states: @@ -1511,6 +1552,7 @@ ru: unsubscribe: action: Да, отписаться complete: Подписка отменена + confirmation_html: Вы точно желаете отписаться от всех уведомления типа «%{type}», доставляемых из сервера Mastodon %{domain} на ваш адрес электронной почты %{email}? Вы всегда сможете подписаться снова в настройках e-mail уведомлений. emails: notification_emails: favourite: любимые электронные письма с уведомлениями From 4ef3a1a38d505e05e8ba19adefe84186b16eedba Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 8 Nov 2024 04:55:15 -0500 Subject: [PATCH 460/467] Match dependency-generator output for `require_relative` usage (#32800) --- Rakefile | 2 +- config.ru | 3 ++- spec/rails_helper.rb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index e51cf0e17e838a..488c551fee2cd1 100644 --- a/Rakefile +++ b/Rakefile @@ -3,6 +3,6 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. -require File.expand_path('config/application', __dir__) +require_relative 'config/application' Rails.application.load_tasks diff --git a/config.ru b/config.ru index afd13e211238e2..842bccc3402da2 100644 --- a/config.ru +++ b/config.ru @@ -2,5 +2,6 @@ # This file is used by Rack-based servers to start the application. -require File.expand_path('config/environment', __dir__) +require_relative 'config/environment' + run Rails.application diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index d2ad40be7310fb..574d5438442fcc 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -32,7 +32,7 @@ STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020') ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}" -require File.expand_path('../config/environment', __dir__) +require_relative '../config/environment' abort('The Rails environment is running in production mode!') if Rails.env.production? From df54196a144d088a0621c916c34061c456362f06 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 8 Nov 2024 05:00:15 -0500 Subject: [PATCH 461/467] Use `touch_all` with batches (#32799) --- app/controllers/admin/invites_controller.rb | 2 +- app/models/user.rb | 2 +- app/services/unallow_domain_service.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/invites_controller.rb b/app/controllers/admin/invites_controller.rb index dabfe97655f933..614e2a32d000f3 100644 --- a/app/controllers/admin/invites_controller.rb +++ b/app/controllers/admin/invites_controller.rb @@ -32,7 +32,7 @@ def destroy def deactivate_all authorize :invite, :deactivate_all? - Invite.available.in_batches.update_all(expires_at: Time.now.utc) + Invite.available.in_batches.touch_all(:expires_at) redirect_to admin_invites_path end diff --git a/app/models/user.rb b/app/models/user.rb index 69c5a01569774a..8827a8fbd6e177 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -340,7 +340,7 @@ def revoke_access! Doorkeeper::AccessGrant.by_resource_owner(self).update_all(revoked_at: Time.now.utc) Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch| - batch.update_all(revoked_at: Time.now.utc) + batch.touch_all(:revoked_at) Web::PushSubscription.where(access_token_id: batch).delete_all # Revoke each access token for the Streaming API, since `update_all`` diff --git a/app/services/unallow_domain_service.rb b/app/services/unallow_domain_service.rb index bdc71b1c08e7ab..bbe957145057c0 100644 --- a/app/services/unallow_domain_service.rb +++ b/app/services/unallow_domain_service.rb @@ -12,7 +12,7 @@ def call(domain_allow) private def suspend_accounts!(domain) - Account.where(domain: domain).in_batches.update_all(suspended_at: Time.now.utc) + Account.where(domain: domain).in_batches.touch_all(:suspended_at) AfterUnallowDomainWorker.perform_async(domain) end end From bde0f1239ab016a6dfc8229ba579c5e2cf96a8e6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 8 Nov 2024 05:08:36 -0500 Subject: [PATCH 462/467] Add `InetContainer` with scopes of `containing` and `contained` (#32802) --- app/helpers/registration_helper.rb | 2 +- app/lib/suspicious_sign_in_detector.rb | 2 +- app/models/concerns/inet_container.rb | 10 ++++++++++ app/models/ip_block.rb | 1 + app/models/user.rb | 4 ++-- app/models/user_ip.rb | 1 + lib/mastodon/cli/ip_blocks.rb | 4 ++-- 7 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 app/models/concerns/inet_container.rb diff --git a/app/helpers/registration_helper.rb b/app/helpers/registration_helper.rb index ef5462ac887413..0f141c43590f4e 100644 --- a/app/helpers/registration_helper.rb +++ b/app/helpers/registration_helper.rb @@ -16,6 +16,6 @@ def omniauth_only? end def ip_blocked?(remote_ip) - IpBlock.where(severity: :sign_up_block).exists?(['ip >>= ?', remote_ip.to_s]) + IpBlock.where(severity: :sign_up_block).containing(remote_ip.to_s).exists? end end diff --git a/app/lib/suspicious_sign_in_detector.rb b/app/lib/suspicious_sign_in_detector.rb index 74f49aa5587e7d..60e5fdad4f8be7 100644 --- a/app/lib/suspicious_sign_in_detector.rb +++ b/app/lib/suspicious_sign_in_detector.rb @@ -19,7 +19,7 @@ def sufficient_security_measures? end def previously_seen_ip?(request) - @user.ips.exists?(['ip <<= ?', masked_ip(request)]) + @user.ips.contained_by(masked_ip(request)).exists? end def freshly_signed_up? diff --git a/app/models/concerns/inet_container.rb b/app/models/concerns/inet_container.rb new file mode 100644 index 00000000000000..da03bcc5d73379 --- /dev/null +++ b/app/models/concerns/inet_container.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module InetContainer + extend ActiveSupport::Concern + + included do + scope :containing, ->(value) { where('ip >>= ?', value) } + scope :contained_by, ->(value) { where('ip <<= ?', value) } + end +end diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index 5ed4d2a84626d4..416ae38382722c 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -17,6 +17,7 @@ class IpBlock < ApplicationRecord CACHE_KEY = 'blocked_ips' include Expireable + include InetContainer include Paginable enum :severity, { diff --git a/app/models/user.rb b/app/models/user.rb index 8827a8fbd6e177..9a215669b99ae5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -125,7 +125,7 @@ class User < ApplicationRecord scope :signed_in_recently, -> { where(current_sign_in_at: ACTIVE_DURATION.ago..) } scope :not_signed_in_recently, -> { where(current_sign_in_at: ...ACTIVE_DURATION.ago) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } - scope :matches_ip, ->(value) { left_joins(:ips).where('user_ips.ip <<= ?', value).group('users.id') } + scope :matches_ip, ->(value) { left_joins(:ips).merge(IpBlock.contained_by(value)).group('users.id') } before_validation :sanitize_role before_create :set_approved @@ -444,7 +444,7 @@ def wrap_email_confirmation end def sign_up_from_ip_requires_approval? - sign_up_ip.present? && IpBlock.severity_sign_up_requires_approval.exists?(['ip >>= ?', sign_up_ip.to_s]) + sign_up_ip.present? && IpBlock.severity_sign_up_requires_approval.containing(sign_up_ip.to_s).exists? end def sign_up_email_requires_approval? diff --git a/app/models/user_ip.rb b/app/models/user_ip.rb index a6da2c07401b44..25aa81ccd42f71 100644 --- a/app/models/user_ip.rb +++ b/app/models/user_ip.rb @@ -11,6 +11,7 @@ class UserIp < ApplicationRecord include DatabaseViewRecord + include InetContainer self.primary_key = :user_id diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb index ef24f2e047e30c..f1f40c99ce33d4 100644 --- a/lib/mastodon/cli/ip_blocks.rb +++ b/lib/mastodon/cli/ip_blocks.rb @@ -80,9 +80,9 @@ def remove(*addresses) end ip_blocks = if options[:force] - IpBlock.where('ip >>= ?', address) + IpBlock.containing(address) else - IpBlock.where('ip <<= ?', address) + IpBlock.contained_by(address) end if ip_blocks.empty? From 10c895dc849d074681e292102ec28dc3a16d2824 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 8 Nov 2024 09:21:44 -0500 Subject: [PATCH 463/467] Use existing arel scopes instead of string ordering (#32801) --- app/models/admin/status_filter.rb | 2 +- app/models/session_activation.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/admin/status_filter.rb b/app/models/admin/status_filter.rb index 8d20e4f6abce94..fd4d0ef59ddff0 100644 --- a/app/models/admin/status_filter.rb +++ b/app/models/admin/status_filter.rb @@ -32,7 +32,7 @@ def results def scope_for(key, _value) case key.to_s when 'media' - Status.joins(:media_attachments).merge(@account.media_attachments).group(:id).reorder('statuses.id desc') + Status.joins(:media_attachments).merge(@account.media_attachments).group(:id).recent else raise Mastodon::InvalidParameterError, "Unknown filter: #{key}" end diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 31f18fd7ef09be..d99ecf8adba43d 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -30,6 +30,8 @@ class SessionActivation < ApplicationRecord DEFAULT_SCOPES = %w(read write follow).freeze + scope :latest, -> { order(id: :desc) } + class << self def active?(id) id && exists?(session_id: id) @@ -48,7 +50,7 @@ def deactivate(id) end def purge_old - order('created_at desc').offset(Rails.configuration.x.max_session_activations).destroy_all + latest.offset(Rails.configuration.x.max_session_activations).destroy_all end def exclusive(id) From 1e71c4e247eb8900a718b04113ffce9c1b8ad2f4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 8 Nov 2024 09:23:52 -0500 Subject: [PATCH 464/467] Use enum-generated `IpBlock.severity...` scopes (#31210) --- app/helpers/registration_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/registration_helper.rb b/app/helpers/registration_helper.rb index 0f141c43590f4e..002d167c05833a 100644 --- a/app/helpers/registration_helper.rb +++ b/app/helpers/registration_helper.rb @@ -16,6 +16,6 @@ def omniauth_only? end def ip_blocked?(remote_ip) - IpBlock.where(severity: :sign_up_block).containing(remote_ip.to_s).exists? + IpBlock.severity_sign_up_block.containing(remote_ip.to_s).exists? end end From e22ec250770a395579ab52965b2feeacb697e128 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Sun, 10 Nov 2024 13:26:51 +0100 Subject: [PATCH 465/467] Fix typo in account unlocked localisation (#32821) --- config/locales/simple_form.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 25de9f5910715b..f451c780b0e0d7 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -10,7 +10,7 @@ en: indexable: Your public posts may appear in search results on Mastodon. People who have interacted with your posts may be able to search them regardless. note: 'You can @mention other people or #hashtags.' show_collections: People will be able to browse through your follows and followers. People that you follow will see that you follow them regardless. - unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and chose whether to accept or reject new followers. + unlocked: People will be able to follow you without requesting approval. Uncheck if you want to review follow requests and choose whether to accept or reject new followers. account_alias: acct: Specify the username@domain of the account you want to move from account_migration: From 157fba4698361348c8211bc64e522492a13ff23b Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Sun, 10 Nov 2024 17:16:07 +0100 Subject: [PATCH 466/467] Backspace hotkey should override default behaviour (#32826) --- app/javascript/mastodon/features/ui/index.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index 2f9f962b810c4c..b90ea5585aeee0 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -482,7 +482,9 @@ class UI extends PureComponent { } }; - handleHotkeyBack = () => { + handleHotkeyBack = e => { + e.preventDefault(); + const { history } = this.props; if (history.location?.state?.fromMastodon) { From d033920b7ed9a01f31b367a67551094b1856eb12 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Nov 2024 03:29:55 -0500 Subject: [PATCH 467/467] Move account silence-related methods to concern (#28866) --- app/models/account.rb | 15 +------------ app/models/concerns/account/silences.rb | 22 +++++++++++++++++++ spec/models/account_spec.rb | 8 ------- spec/models/concerns/account/silences_spec.rb | 18 +++++++++++++++ 4 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 app/models/concerns/account/silences.rb create mode 100644 spec/models/concerns/account/silences_spec.rb diff --git a/app/models/account.rb b/app/models/account.rb index 957ccc73c46c79..007fad7830d3f1 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -90,6 +90,7 @@ class Account < ApplicationRecord include Account::Interactions include Account::Merging include Account::Search + include Account::Silences include Account::StatusesSearch include Account::Suspensions include Account::AttributionDomains @@ -129,9 +130,7 @@ class Account < ApplicationRecord scope :remote, -> { where.not(domain: nil) } scope :local, -> { where(domain: nil) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } - scope :silenced, -> { where.not(silenced_at: nil) } scope :sensitized, -> { where.not(sensitized_at: nil) } - scope :without_silenced, -> { where(silenced_at: nil) } scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) } scope :recent, -> { reorder(id: :desc) } scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) } @@ -244,18 +243,6 @@ def refresh! ResolveAccountService.new.call(acct) unless local? end - def silenced? - silenced_at.present? - end - - def silence!(date = Time.now.utc) - update!(silenced_at: date) - end - - def unsilence! - update!(silenced_at: nil) - end - def sensitized? sensitized_at.present? end diff --git a/app/models/concerns/account/silences.rb b/app/models/concerns/account/silences.rb new file mode 100644 index 00000000000000..bd785df311f8ef --- /dev/null +++ b/app/models/concerns/account/silences.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Account::Silences + extend ActiveSupport::Concern + + included do + scope :silenced, -> { where.not(silenced_at: nil) } + scope :without_silenced, -> { where(silenced_at: nil) } + end + + def silenced? + silenced_at.present? + end + + def silence!(date = Time.now.utc) + update!(silenced_at: date) + end + + def unsilence! + update!(silenced_at: nil) + end +end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 7a5deed599c5e4..77341b778644da 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -983,14 +983,6 @@ def account_note_over_limit end end - describe 'silenced' do - it 'returns an array of accounts who are silenced' do - silenced_account = Fabricate(:account, silenced: true) - _account = Fabricate(:account, silenced: false) - expect(described_class.silenced).to contain_exactly(silenced_account) - end - end - describe 'searchable' do let!(:suspended_local) { Fabricate(:account, suspended: true, username: 'suspended_local') } let!(:suspended_remote) { Fabricate(:account, suspended: true, domain: 'example.org', username: 'suspended_remote') } diff --git a/spec/models/concerns/account/silences_spec.rb b/spec/models/concerns/account/silences_spec.rb new file mode 100644 index 00000000000000..0d8337ce1d5863 --- /dev/null +++ b/spec/models/concerns/account/silences_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Account::Silences do + describe 'Scopes' do + describe '.silenced' do + let(:silenced_account) { Fabricate :account, silenced: true } + + before { Fabricate :account, silenced: false } + + it 'returns an array of accounts who are silenced' do + expect(Account.silenced) + .to contain_exactly(silenced_account) + end + end + end +end