+ );
+};
+
+// eslint-disable-next-line import/no-default-export
+export default InteractionModal;
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
index 1871befb66..2273c1063f 100644
--- a/app/javascript/mastodon/locales/af.json
+++ b/app/javascript/mastodon/locales/af.json
@@ -172,8 +172,6 @@
"hashtag.column_settings.tag_toggle": "Voeg meer etikette by hierdie kolom",
"hashtag.follow": "Volg hutsetiket",
"home.column_settings.show_reblogs": "Wys aangestuurde plasings",
- "interaction_modal.description.reblog": "Met 'n rekening op Mastodon kan jy hierdie plasing aanstuur om dit met jou volgers te deel.",
- "interaction_modal.description.reply": "Met 'n rekening op Mastodon kan jy op hierdie plasing reageer.",
"interaction_modal.title.follow": "Volg {name}",
"interaction_modal.title.reblog": "Stuur {name} se plasing aan",
"interaction_modal.title.reply": "Reageer op {name} se plasing",
@@ -247,7 +245,6 @@
"privacy.public.short": "Publiek",
"privacy_policy.last_updated": "Laaste bywerking op {date}",
"privacy_policy.title": "Privaatheidsbeleid",
- "regeneration_indicator.sublabel": "Jou tuis-voer word voorberei!",
"reply_indicator.cancel": "Kanselleer",
"report.placeholder": "Type or paste additional comments",
"report.submit": "Submit report",
diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json
index 3901f5f008..6bb6915edf 100644
--- a/app/javascript/mastodon/locales/an.json
+++ b/app/javascript/mastodon/locales/an.json
@@ -238,9 +238,6 @@
"home.column_settings.show_replies": "Amostrar respuestas",
"home.hide_announcements": "Amagar anuncios",
"home.show_announcements": "Amostrar anuncios",
- "interaction_modal.description.follow": "Con una cuenta en Mastodon, puetz seguir {name} pa recibir las suyas publicacions en a tuya linia temporal d'inicio.",
- "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puetz empentar esta publicación pa compartir-la con os tuyos propios seguidores.",
- "interaction_modal.description.reply": "Con una cuenta en Mastodon, puetz responder a esta publicación.",
"interaction_modal.on_another_server": "En un servidor diferent",
"interaction_modal.on_this_server": "En este servidor",
"interaction_modal.title.follow": "Seguir a {name}",
@@ -369,8 +366,6 @@
"privacy_policy.last_updated": "Ultima vegada actualizau {date}",
"privacy_policy.title": "Politica de Privacidat",
"refresh": "Actualizar",
- "regeneration_indicator.label": "Cargando…",
- "regeneration_indicator.sublabel": "La tuya historia d'inicio se ye preparando!",
"relative_time.days": "{number} d",
"relative_time.full.days": "fa {number, plural, one {# día} other {# días}}",
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# horas}}",
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 4b46ed6117..b9f6782fb9 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -358,17 +358,8 @@
"ignore_notifications_modal.ignore": "تجاهل الإشعارات",
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
"ignore_notifications_modal.new_accounts_title": "تجاهل الإشعارات الصادرة من الحسابات الجديدة؟",
- "interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
- "interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.",
- "interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
- "interaction_modal.description.reply": "مع حساب في ماستدون، يمكنك الرد على هذا المنشور.",
- "interaction_modal.login.action": "خذني إلى خادمي",
- "interaction_modal.login.prompt": "نطاق الخادم الخاص بك، على سبيل المثال mastodon.social",
- "interaction_modal.no_account_yet": "ليست على ماستدون بعد؟",
"interaction_modal.on_another_server": "على خادم مختلف",
"interaction_modal.on_this_server": "على هذا الخادم",
- "interaction_modal.sign_in": "لم تقم بتسجيل الدخول إلى هذا الخادم. أين هو مستضاف حسابك؟",
- "interaction_modal.sign_in_hint": "تلميح: هذا هو الموقع الذي أنشأت فيه حسابك. إن لم تتذكّر/ين اسم الموقع، يمكنك البحث عن الرسالة الترحيبيّة في بريدك الإلكتروني. كما يمكنك أيضاً استخدام اسم المستخدم/ـة الكامل! (مثلاً: @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "إضافة منشور {name} إلى المفضلة",
"interaction_modal.title.follow": "اتبع {name}",
"interaction_modal.title.reblog": "إعادة نشر منشور {name}",
@@ -594,8 +585,6 @@
"privacy_policy.title": "سياسة الخصوصية",
"recommended": "موصى به",
"refresh": "أنعِش",
- "regeneration_indicator.label": "جارٍ التحميل…",
- "regeneration_indicator.sublabel": "جارٍ تجهيز موجزات خيطك الرئيس!",
"relative_time.days": "{number}ي",
"relative_time.full.days": "منذ {number, plural, zero {} one {# يوم} two {# يومين} few {# أيام} many {# أيام} other {# يوم}}",
"relative_time.full.hours": "منذ {number, plural, zero {} one {ساعة واحدة} two {ساعتَيْن} few {# ساعات} many {# ساعة} other {# ساعة}}",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index af0a0b88ca..32aa4584d3 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -212,9 +212,6 @@
"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!",
- "interaction_modal.description.follow": "Con una cuenta de Mastodon, pues siguir a {name} pa recibir los artículos de so nel to feed d'aniciu.",
- "interaction_modal.description.reblog": "Con una cuenta de Mastodon, pues compartir esti artículu colos perfiles que te sigan.",
- "interaction_modal.description.reply": "Con una cuenta de Mastodon, pues responder a esti artículu.",
"interaction_modal.on_another_server": "N'otru sirvidor",
"interaction_modal.on_this_server": "Nesti sirvidor",
"interaction_modal.title.reply": "Rempuesta al artículu de: {name}",
@@ -321,7 +318,6 @@
"privacy_policy.last_updated": "Data del últimu anovamientu: {date}",
"privacy_policy.title": "Política de privacidá",
"refresh": "Anovar",
- "regeneration_indicator.label": "Cargando…",
"relative_time.days": "{number} d",
"relative_time.full.days": "hai {number, plural, one {# día} other {# díes}}",
"relative_time.full.hours": "hai {number, plural, one {# hora} other {# hores}}",
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 1adbe147db..c654087bc7 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -85,7 +85,7 @@
"alert.rate_limited.title": "Ліміт перавышаны",
"alert.unexpected.message": "Узнікла нечаканая памылка.",
"alert.unexpected.title": "Вой!",
- "alt_text_badge.title": "Альтернативный текст",
+ "alt_text_badge.title": "Альтэрнатыўны тэкст",
"announcement.announcement": "Аб'ява",
"attachments_list.unprocessed": "(неапрацаваны)",
"audio.hide": "Схаваць аўдыя",
@@ -219,7 +219,7 @@
"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_will_lose_relationships": "Вы страціце ўсіх падпісчыкаў і людзей на якіх падпісаны на гэтым серверы.",
"domain_block_modal.you_wont_see_posts": "Вы не ўбачыце допісаў і апавяшчэнняў ад карыстальнікаў з гэтага сервера.",
"domain_pill.activitypub_lets_connect": "Ён дазваляе вам узаемадзейнічаць не толькі з карыстальнікамі Mastodon, але і розных іншых сацыяльных платформ.",
"domain_pill.activitypub_like_language": "ActivityPub — гэта мова, на якой Mastodon размаўляе з іншымі сацыяльнымі сеткамі.",
@@ -359,17 +359,8 @@
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
"home.show_announcements": "Паказаць аб'явы",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
- "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.",
- "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.",
- "interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.",
- "interaction_modal.description.reply": "Маючы акаўнт у Mastodon, вы можаце адказаць на гэты пост.",
- "interaction_modal.login.action": "Вярніце мяне дадому",
- "interaction_modal.login.prompt": "Дамен вашага хатняга сервера, напрыклад, mastodon.social",
- "interaction_modal.no_account_yet": "Яшчэ не ў Mastodon?",
"interaction_modal.on_another_server": "На іншым серверы",
"interaction_modal.on_this_server": "На гэтым серверы",
- "interaction_modal.sign_in": "Вы не выканалі ўваход на гэтым серверы. Дзе размешчаны ваш уліковы запіс?",
- "interaction_modal.sign_in_hint": "Падказка: гэта сайт, на якім вы зарэгістраваліся. Калі вы не памятаеце, знайдзіце ліст у паштовай скрыні. Вы таксама можаце ўвесці сваё поўнае імя карыстальніка! (напрыклад, @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Упадабаць допіс {name}",
"interaction_modal.title.follow": "Падпісацца на {name}",
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
@@ -599,8 +590,6 @@
"privacy_policy.title": "Палітыка канфідэнцыйнасці",
"recommended": "Рэкамендуем",
"refresh": "Абнавiць",
- "regeneration_indicator.label": "Загрузка…",
- "regeneration_indicator.sublabel": "Пачакайце, рыхтуем вашу стужку!",
"relative_time.days": "{number} д",
"relative_time.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}} таму",
"relative_time.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}} таму",
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index 6cadc8cdab..0951cce712 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -407,23 +407,21 @@
"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 може да подсилите тази публикация, за да я споделите с последователите си.",
- "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?",
+ "interaction_modal.action.favourite": "Трябва да направите любимо от акаунта си, за да продължите.",
+ "interaction_modal.action.follow": "Трябва да последвате от акаунта си, за да продължите.",
+ "interaction_modal.action.reblog": "Трябва да разпространите нечий блог от акаунта си, за да продължите.",
+ "interaction_modal.action.reply": "Трябва да отговорите от акаунта си, за да продължите.",
+ "interaction_modal.action.vote": "Трябва да гласувате от акаунта си, за да продължите.",
+ "interaction_modal.go": "Напред",
+ "interaction_modal.no_account_yet": "Още ли нямате акаунт?",
"interaction_modal.on_another_server": "На различен сървър",
"interaction_modal.on_this_server": "На този сървър",
- "interaction_modal.sign_in": "Не сте влезли в този сървър. Къде се хоства акаунтът ви?",
- "interaction_modal.sign_in_hint": "Съвет: Ето уебсайта, където сте се регистрирали. Ако не помните, то погледнете е-писмо за добре дошли във входящата си поща. Може също да въведете пълното си потребителско име! (примерно: @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Означавам публикация на {name} като любима",
"interaction_modal.title.follow": "Последване на {name}",
"interaction_modal.title.reblog": "Подсилване на публикацията на {name}",
"interaction_modal.title.reply": "Отговаряне на публикацията на {name}",
"interaction_modal.title.vote": "Гласувайте в анкетата на {name}",
+ "interaction_modal.username_prompt": "Напр. {example}",
"intervals.full.days": "{number, plural, one {# ден} other {# дни}}",
"intervals.full.hours": "{number, plural, one {# час} other {# часа}}",
"intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Политика за поверителност",
"recommended": "Препоръчано",
"refresh": "Опресняване",
- "regeneration_indicator.label": "Зареждане…",
- "regeneration_indicator.sublabel": "Подготовка на началния ви инфоканал!",
+ "regeneration_indicator.please_stand_by": "Изчакайте.",
+ "regeneration_indicator.preparing_your_home_feed": "Подготовка на вашия инфоканал начало…",
"relative_time.days": "{number} д.",
"relative_time.full.days": "преди {number, plural, one {# ден} other {# дни}}",
"relative_time.full.hours": "преди {number, plural, one {# час} other {# часа}}",
diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json
index 768a4dbf71..9f0c968dab 100644
--- a/app/javascript/mastodon/locales/bn.json
+++ b/app/javascript/mastodon/locales/bn.json
@@ -337,8 +337,6 @@
"privacy.change": "লেখার গোপনীয়তা অবস্থা ঠিক করতে",
"privacy.public.short": "সর্বজনীন প্রকাশ্য",
"refresh": "সতেজ করা",
- "regeneration_indicator.label": "আসছে…",
- "regeneration_indicator.sublabel": "আপনার বাড়ির-সময়রেখা প্রস্তূত করা হচ্ছে!",
"relative_time.days": "{number} দিন",
"relative_time.full.just_now": "এইমাত্র",
"relative_time.hours": "{number} ঘন্টা",
diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json
index eb4394aa79..96600bd305 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -288,10 +288,6 @@
"home.pending_critical_update.body": "Hizivait ho servijer Mastodon kerkent ha ma c'hallit mar plij!",
"home.pending_critical_update.link": "Gwelet an hizivadennoù",
"home.show_announcements": "Diskouez ar c'hemennoù",
- "interaction_modal.description.follow": "Gant ur gont Mastodon e c'hellit heuliañ {name} evit resev an toudoù a embann war ho red degemer.",
- "interaction_modal.description.reblog": "Gant ur gont Mastodon e c'hellit skignañ an toud-mañ evit rannañ anezhañ gant ho heulierien·ezed.",
- "interaction_modal.description.reply": "Gant ur gont Mastodon e c'hellit respont d'an toud-mañ.",
- "interaction_modal.no_account_yet": "N'emañ ket war vMastodon?",
"interaction_modal.on_another_server": "War ur servijer all",
"interaction_modal.on_this_server": "War ar servijer-mañ",
"interaction_modal.title.favourite": "Ouzhpennañ embannadur {name} d'ar re vuiañ-karet",
@@ -447,8 +443,6 @@
"privacy_policy.title": "Reolennoù Prevezded",
"recommended": "Erbedet",
"refresh": "Freskaat",
- "regeneration_indicator.label": "O kargañ…",
- "regeneration_indicator.sublabel": "War brientiñ emañ ho red degemer!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# devezh} two {# zevezh} few {# devezh} many {# a devezh} other {# devezh}} zo",
"relative_time.full.hours": "{number, plural, one {# eurvezh} two {# eurvezh} few {# eurvezh} many {# eur} other {# eurvezh}} zo",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index ef4f9e3a93..858293d77c 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -407,23 +407,16 @@
"ignore_notifications_modal.not_followers_title": "Voleu ignorar les notificacions de qui no us segueix?",
"ignore_notifications_modal.not_following_title": "Voleu ignorar les notificacions de qui no seguiu?",
"ignore_notifications_modal.private_mentions_title": "Voleu ignorar les notificacions de mencions privades no sol·licitades?",
- "interaction_modal.description.favourite": "Amb un compte a Mastodon pots afavorir aquest tut perquè l'autor sàpiga que t'ha agradat i desar-lo per a més endavant.",
- "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?",
+ "interaction_modal.go": "Endavant",
+ "interaction_modal.no_account_yet": "Encara no teniu cap compte?",
"interaction_modal.on_another_server": "A un altre servidor",
"interaction_modal.on_this_server": "En aquest servidor",
- "interaction_modal.sign_in": "No has iniciat sessió en aquest servidor. On tens el teu compte?",
- "interaction_modal.sign_in_hint": "Ajuda: Aquesta és la web on vas registrar-te. Si no ho recordes, mira el correu electrònic de benvinguda en la teva safata d'entrada. També pots introduïr el teu nom d'usuari complet! (per ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Afavoreix el tut de {name}",
"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}",
+ "interaction_modal.username_prompt": "P. ex. {example}",
"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}}",
@@ -697,8 +690,8 @@
"privacy_policy.title": "Política de Privacitat",
"recommended": "Recomanat",
"refresh": "Actualitza",
- "regeneration_indicator.label": "Es carrega…",
- "regeneration_indicator.sublabel": "Es prepara la vostra pantalla d'Inici!",
+ "regeneration_indicator.please_stand_by": "Espereu.",
+ "regeneration_indicator.preparing_your_home_feed": "Pantalla d'inici en preparació…",
"relative_time.days": "{number}d",
"relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json
index f4fee13cdb..039812f08c 100644
--- a/app/javascript/mastodon/locales/ckb.json
+++ b/app/javascript/mastodon/locales/ckb.json
@@ -283,9 +283,6 @@
"home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە",
"home.hide_announcements": "شاردنەوەی راگەیەنراوەکان",
"home.show_announcements": "پیشاندانی راگەیەنراوەکان",
- "interaction_modal.description.follow": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت شوێن {name} بکەویت بۆ ئەوەی بڵاوکراوەکانی بگاتە پەڕەی سەرەکیت.",
- "interaction_modal.description.reblog": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت ئەم بڵاوکراوەیە بەرزبکەیتەوە تاوەکو بەژداری پێبکەیت لەگەل شوێنکەوتوانت.",
- "interaction_modal.description.reply": "بە هەژمارێک لەسەر ماستدۆن، ئەتوانیت وەڵامی ئەم بڵاوکراوەیە بدەیتەوە.",
"interaction_modal.on_another_server": "لەسەر ڕاژەیەکی جیا",
"interaction_modal.on_this_server": "لەسەر ئەم ڕاژەیە",
"interaction_modal.title.follow": "دوای {name} بکەوە",
@@ -416,8 +413,6 @@
"privacy_policy.last_updated": "دوایین نوێکردنەوە {date}",
"privacy_policy.title": "سیاسەتی تایبەتێتی",
"refresh": "نوێکردنەوە",
- "regeneration_indicator.label": "بارکردن…",
- "regeneration_indicator.sublabel": "ڕاگەیەنەری ماڵەوەت ئامادە دەکرێت!",
"relative_time.days": "{number}ڕۆژ",
"relative_time.full.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژ}} ماوە",
"relative_time.full.hours": "{number, plural, one {# کاتژمێر} other {# کاتژمێر}} ماوە",
diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json
index 5d81889b62..666ea797f0 100644
--- a/app/javascript/mastodon/locales/co.json
+++ b/app/javascript/mastodon/locales/co.json
@@ -263,8 +263,6 @@
"privacy.change": "Mudificà a cunfidenzialità di u statutu",
"privacy.public.short": "Pubblicu",
"refresh": "Attualizà",
- "regeneration_indicator.label": "Caricamentu…",
- "regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!",
"relative_time.days": "{number}ghj",
"relative_time.hours": "{number}o",
"relative_time.just_now": "avà",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 5cd324953a..4b4236e3fb 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -347,17 +347,8 @@
"home.pending_critical_update.link": "Zobrazit aktualizace",
"home.pending_critical_update.title": "K dispozici je kritická bezpečnostní aktualizace!",
"home.show_announcements": "Zobrazit oznámení",
- "interaction_modal.description.favourite": "Pokud máte účet na Mastodonu, můžete tento příspěvek označit jako oblíbený a dát tak autorovi najevo, že si ho vážíte, a uložit si ho na později.",
- "interaction_modal.description.follow": "S účtem na Mastodonu můžete sledovat uživatele {name} a přijímat příspěvky ve vašem domovském kanálu.",
- "interaction_modal.description.reblog": "S účtem na Mastodonu můžete boostnout tento příspěvek a sdílet jej s vlastními sledujícími.",
- "interaction_modal.description.reply": "S účtem na Mastodonu můžete odpovědět na tento příspěvek.",
- "interaction_modal.login.action": "Domů",
- "interaction_modal.login.prompt": "Doména vašeho domovského serveru, např. mastodon.social",
- "interaction_modal.no_account_yet": "Nejste na Mastodonu?",
"interaction_modal.on_another_server": "Na jiném serveru",
"interaction_modal.on_this_server": "Na tomto serveru",
- "interaction_modal.sign_in": "Nejste přihlášeni k tomuto serveru. Kde je váš účet hostován?",
- "interaction_modal.sign_in_hint": "Tip: To je stránka, na které jste se zaregistrovali. Pokud si ji nepamatujete, vyhledejte ve své e-mailové schránce uvítací e-mail. Můžete také zadat své celé uživatelské jméno! (např. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Oblíbit si příspěvek od uživatele {name}",
"interaction_modal.title.follow": "Sledovat {name}",
"interaction_modal.title.reblog": "Boostnout příspěvek uživatele {name}",
@@ -565,8 +556,6 @@
"privacy_policy.title": "Zásady ochrany osobních údajů",
"recommended": "Doporučeno",
"refresh": "Obnovit",
- "regeneration_indicator.label": "Načítání…",
- "regeneration_indicator.sublabel": "Váš domovský kanál se připravuje!",
"relative_time.days": "{number} d",
"relative_time.full.days": "před {number, plural, one {# dnem} few {# dny} many {# dny} other {# dny}}",
"relative_time.full.hours": "před {number, plural, one {# hodinou} few {# hodinami} many {# hodinami} other {# hodinami}}",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 73d2e615b2..b78c4fa368 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -407,18 +407,8 @@
"ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?",
"ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?",
"ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?",
- "interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi ffafrio'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.",
- "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?",
"interaction_modal.on_another_server": "Ar weinydd gwahanol",
"interaction_modal.on_this_server": "Ar y gweinydd hwn",
- "interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?",
- "interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Ffafrio postiad {name}",
"interaction_modal.title.follow": "Dilyn {name}",
"interaction_modal.title.reblog": "Hybu postiad {name}",
@@ -696,8 +686,8 @@
"privacy_policy.title": "Polisi Preifatrwydd",
"recommended": "Argymhellwyd",
"refresh": "Adnewyddu",
- "regeneration_indicator.label": "Yn llwytho…",
- "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei pharatoi!",
+ "regeneration_indicator.please_stand_by": "Arhoswch am dipyn.",
+ "regeneration_indicator.preparing_your_home_feed": "Paratoi eich llif cartref…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl",
"relative_time.full.hours": "{number, plural, one {# awr} other {# awr}} yn ôl",
@@ -781,8 +771,11 @@
"search_results.accounts": "Proffilau",
"search_results.all": "Popeth",
"search_results.hashtags": "Hashnodau",
+ "search_results.no_results": "Dim canlyniadau.",
+ "search_results.no_search_yet": "Ceisiwch chwilio am bostiadau, proffiliau neu hashnodau.",
"search_results.see_all": "Gweld y cyfan",
"search_results.statuses": "Postiadau",
+ "search_results.title": "Chwilio am {q}",
"server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)",
"server_banner.active_users": "defnyddwyr gweithredol",
"server_banner.administered_by": "Gweinyddir gan:",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 59d5123e78..dce0679982 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorér notifikationer fra folk, som ikke er følgere?",
"ignore_notifications_modal.not_following_title": "Ignorér notifikationer fra folk, man ikke følger?",
"ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?",
- "interaction_modal.description.favourite": "Med en konto på Mastodon kan dette indlæg gøres til favorit for at lade forfatteren vide, at det værdsættes og gemmes til senere.",
- "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?",
+ "interaction_modal.action.favourite": "For at fortsætte, skal man vælge Gør til favorit fra sin konto.",
+ "interaction_modal.action.follow": "For at fortsætte, skal man vælge Følg fra sin konto.",
+ "interaction_modal.action.reblog": "For at fortsætte, skal man vælge Genblog fra sin konto.",
+ "interaction_modal.action.reply": "For at fortsætte, skal man besvar fra sin konto.",
+ "interaction_modal.action.vote": "For at fortsætte, skal man stemme fra sin konto.",
+ "interaction_modal.go": "Gå",
+ "interaction_modal.no_account_yet": "Har endnu ingen konto?",
"interaction_modal.on_another_server": "På en anden server",
"interaction_modal.on_this_server": "På denne server",
- "interaction_modal.sign_in": "Du er ikke logget ind på denne server. Hvor hostes din konto?",
- "interaction_modal.sign_in_hint": "Tip: Det er webstedet, hvor du tilmeldte dig. Har du glemt det, så kig efter velkomstmailen i indbakken. Du kan også angive dit fulde brugernavn! (f.eks. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Gør {name}s indlæg til favorit",
"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",
+ "interaction_modal.username_prompt": "F.eks. {example}",
"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}}",
@@ -696,8 +694,8 @@
"privacy_policy.title": "Privatlivspolitik",
"recommended": "Anbefalet",
"refresh": "Genindlæs",
- "regeneration_indicator.label": "Indlæser…",
- "regeneration_indicator.sublabel": "Din hjemmetidslinje klargøres!",
+ "regeneration_indicator.please_stand_by": "Vent venligst.",
+ "regeneration_indicator.preparing_your_home_feed": "Forbereder hjemme-feed'et…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dag} other {# dage}} siden",
"relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 2e3c0d2d19..b0650a27cb 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Benachrichtigungen von Profilen ignorieren, die dir nicht folgen?",
"ignore_notifications_modal.not_following_title": "Benachrichtigungen von Profilen ignorieren, denen du nicht folgst?",
"ignore_notifications_modal.private_mentions_title": "Benachrichtigungen von unerwünschten privaten Erwähnungen ignorieren?",
- "interaction_modal.description.favourite": "Mit einem Mastodon-Konto kannst du diesen Beitrag favorisieren, um deine Wertschätzung auszudrücken, und ihn für einen späteren Zeitpunkt speichern.",
- "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?",
+ "interaction_modal.action.favourite": "Du musst von deinem Konto aus favorisieren, um fortzufahren.",
+ "interaction_modal.action.follow": "Du musst von deinem Konto aus folgen, um fortzufahren.",
+ "interaction_modal.action.reblog": "Du musst von deinem Konto aus teilen, um fortzufahren.",
+ "interaction_modal.action.reply": "Du musst von deinem Konto aus antworten, um fortzufahren.",
+ "interaction_modal.action.vote": "Du musst von deinem Konto aus abstimmen, um fortzufahren.",
+ "interaction_modal.go": "Los",
+ "interaction_modal.no_account_yet": "Du hast noch kein Konto?",
"interaction_modal.on_another_server": "Auf einem anderen Server",
"interaction_modal.on_this_server": "Auf diesem Server",
- "interaction_modal.sign_in": "Du bist auf diesem Server nicht angemeldet. Auf welchem Server wird dein Konto verwaltet?",
- "interaction_modal.sign_in_hint": "Hinweis: Hierbei handelt es sich um die Website, auf der du dich registriert hast. Wenn du dich nicht mehr daran erinnerst, dann kannst du sie in der Willkommens-E-Mail nachsehen. Du kannst auch deinen vollständigen Profilnamen eingeben! (z. B. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Beitrag von {name} favorisieren",
"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",
+ "interaction_modal.username_prompt": "z. B. {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Datenschutzerklärung",
"recommended": "Empfohlen",
"refresh": "Aktualisieren",
- "regeneration_indicator.label": "Wird geladen …",
- "regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!",
+ "regeneration_indicator.please_stand_by": "Bitte warten.",
+ "regeneration_indicator.preparing_your_home_feed": "Startseite wird vorbereitet …",
"relative_time.days": "{number} T.",
"relative_time.full.days": "vor {number, plural, one {# Tag} other {# Tagen}}",
"relative_time.full.hours": "vor {number, plural, one {# Stunde} other {# Stunden}}",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 8beda3388e..a6bb66d141 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -362,6 +362,7 @@
"footer.privacy_policy": "Πολιτική απορρήτου",
"footer.source_code": "Προβολή πηγαίου κώδικα",
"footer.status": "Κατάσταση",
+ "footer.terms_of_service": "Όροι υπηρεσίας",
"generic.saved": "Αποθηκεύτηκε",
"getting_started.heading": "Ας ξεκινήσουμε",
"hashtag.admin_moderation": "Άνοιγμα διεπαφής συντονισμού για το #{name}",
@@ -406,18 +407,8 @@
"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, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
- "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;",
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
- "interaction_modal.sign_in": "Δεν είσαι συνδεδεμένος σε αυτόν το διακομιστή. Πού φιλοξενείται ο λογαριασμός σου;",
- "interaction_modal.sign_in_hint": "Συμβουλή: Αυτή είναι η ιστοσελίδα όπου έχεις εγγραφεί. Αν δεν θυμάσαι, αναζήτησε το καλώς ήρθες e-mail στα εισερχόμενά σου. Μπορείς επίσης να εισάγεις το πλήρες όνομα χρήστη! (πχ. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favorite {name}'s post\nΠροτίμησε την ανάρτηση της/του {name}",
"interaction_modal.title.follow": "Ακολούθησε {name}",
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
@@ -694,8 +685,6 @@
"privacy_policy.title": "Πολιτική Απορρήτου",
"recommended": "Προτεινόμενα",
"refresh": "Ανανέωση",
- "regeneration_indicator.label": "Φορτώνει…",
- "regeneration_indicator.sublabel": "Η αρχική σου ροή ετοιμάζεται!",
"relative_time.days": "{number}η",
"relative_time.full.days": "πριν από {number, plural, one {# μέρα} other {# μέρες}}",
"relative_time.full.hours": "πριν από {number, plural, one {# ώρα} other {# ώρες}}",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index ef2ab61c17..5ad52a2ed2 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -396,18 +396,8 @@
"ignore_notifications_modal.not_followers_title": "Ignore notifications from people not following you?",
"ignore_notifications_modal.not_following_title": "Ignore notifications from people you don't follow?",
"ignore_notifications_modal.private_mentions_title": "Ignore notifications from unsolicited Private Mentions?",
- "interaction_modal.description.favourite": "With an account on Mastodon, you can favourite this post to let the author know you appreciate it and save it for later.",
- "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?",
"interaction_modal.on_another_server": "On a different server",
"interaction_modal.on_this_server": "On this server",
- "interaction_modal.sign_in": "You are not logged in to this server. Where is your account hosted?",
- "interaction_modal.sign_in_hint": "Tip: That's the website where you signed up. If you don't remember, look for the welcome e-mail in your inbox. You can also enter your full username! (e.g. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favourite {name}'s post",
"interaction_modal.title.follow": "Follow {name}",
"interaction_modal.title.reblog": "Boost {name}'s post",
@@ -683,8 +673,6 @@
"privacy_policy.title": "Privacy Policy",
"recommended": "Recommended",
"refresh": "Refresh",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 8c14f50690..955832429f 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -552,25 +552,21 @@
"ignore_notifications_modal.not_followers_title": "Ignore notifications from people not following you?",
"ignore_notifications_modal.not_following_title": "Ignore notifications from people you don't follow?",
"ignore_notifications_modal.private_mentions_title": "Ignore notifications from unsolicited Private Mentions?",
- "interaction_modal.description.emoji_reaection": "With an account on Mastodon, you can emoji react this post to let the author know you appreciate it and save it for later.",
- "interaction_modal.description.favourite": "With an account on Mastodon, you can favorite this post to let the author know you appreciate it and save it for later.",
- "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?",
+ "interaction_modal.action.favourite": "To continue, you need to favorite from your account.",
+ "interaction_modal.action.follow": "To continue, you need to follow from your account.",
+ "interaction_modal.action.reblog": "To continue, you need to reblog from your account.",
+ "interaction_modal.action.reply": "To continue, you need to reply from your account.",
+ "interaction_modal.action.vote": "To continue, you need to vote from your account.",
+ "interaction_modal.go": "Go",
+ "interaction_modal.no_account_yet": "Don't have an account yet?",
"interaction_modal.on_another_server": "On a different server",
"interaction_modal.on_this_server": "On this server",
- "interaction_modal.sign_in": "You are not logged in to this server. Where is your account hosted?",
- "interaction_modal.sign_in_hint": "Tip: That's the website where you signed up. If you don't remember, look for the welcome e-mail in your inbox. You can also enter your full username! (e.g. @Mastodon@mastodon.social)",
- "interaction_modal.title.emoji_reaction": "Emoji react {name}'s post",
"interaction_modal.title.favourite": "Favorite {name}'s post",
"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",
+ "interaction_modal.username_prompt": "E.g. {example}",
"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}}",
@@ -884,8 +880,8 @@
"reaction_deck.remove": "Remove",
"recommended": "Recommended",
"refresh": "Refresh",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
+ "regeneration_indicator.please_stand_by": "Please stand by.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparing your home feed…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 4b1ffa59ee..19ac7c34c7 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -407,23 +407,21 @@
"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 stelumi ĉi tiun afiŝon por sciigi la afiŝanton ke vi sâtas kaj konservas ĝin por poste.",
- "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?",
+ "interaction_modal.action.favourite": "Por daŭrigi, vi devas stelumi el via konto.",
+ "interaction_modal.action.follow": "Por daŭrigi, vi devas sekvi el via konto.",
+ "interaction_modal.action.reblog": "Por daŭrigi, vi devas diskonigi el via konto.",
+ "interaction_modal.action.reply": "Por daŭrigi, vi devas respondi el via konto.",
+ "interaction_modal.action.vote": "Por daŭrigi, vi devas voĉdoni el via konto.",
+ "interaction_modal.go": "Iru",
+ "interaction_modal.no_account_yet": "Ĉu vi ankoraŭ ne havas konton?",
"interaction_modal.on_another_server": "En alia servilo",
"interaction_modal.on_this_server": "En ĉi tiu servilo",
- "interaction_modal.sign_in": "Vi ne estas ensalutita al ĉi tiu servilo.",
- "interaction_modal.sign_in_hint": "Gvideto: Tio estas la retejo kie vi registris. Vi ankau povas tajpi vian plenan uzantonomon!",
"interaction_modal.title.favourite": "Stelumi la afiŝon de {name}",
"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}",
+ "interaction_modal.username_prompt": "Ekz. {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Politiko de privateco",
"recommended": "Rekomendita",
"refresh": "Refreŝigu",
- "regeneration_indicator.label": "Ŝargado…",
- "regeneration_indicator.sublabel": "Via abonfluo estas preparata!",
+ "regeneration_indicator.please_stand_by": "Bonvolu atendi.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparante vian hejmpaĝon…",
"relative_time.days": "{number}t",
"relative_time.full.days": "antaŭ {number, plural, one {# tago} other {# tagoj}}",
"relative_time.full.hours": "antaŭ {number, plural, one {# horo} other {# horoj}}",
@@ -782,8 +780,11 @@
"search_results.accounts": "Profiloj",
"search_results.all": "Ĉiuj",
"search_results.hashtags": "Kradvortoj",
+ "search_results.no_results": "Ne estas rezultoj.",
+ "search_results.no_search_yet": "Provu serĉi afiŝojn, profilojn aŭ kradvortojn.",
"search_results.see_all": "Vidu ĉiujn",
"search_results.statuses": "Afiŝoj",
+ "search_results.title": "Serĉu \"{q}\"",
"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:",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 1da851413b..860e81d236 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de cuentas que no te siguen?",
"ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de cuentas a las que no seguís?",
"ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?",
- "interaction_modal.description.favourite": "Con una cuenta en Mastodon, podés marcar este mensaje como favorito para que el autor sepa que lo apreciás y lo guardás para más adelante.",
- "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, 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?",
+ "interaction_modal.action.favourite": "Para continuar, tienes que marcar como favorito desde tu cuenta.",
+ "interaction_modal.action.follow": "Para continuar, tienes que seguir desde tu cuenta.",
+ "interaction_modal.action.reblog": "Para continuar, necesitas impulsar desde tu cuenta.",
+ "interaction_modal.action.reply": "Para continuar, tienes que responder desde tu cuenta.",
+ "interaction_modal.action.vote": "Para continuar, tienes que votar desde tu cuenta.",
+ "interaction_modal.go": "Ir",
+ "interaction_modal.no_account_yet": "¿Todavía no tienes cuenta?",
"interaction_modal.on_another_server": "En un servidor diferente",
"interaction_modal.on_this_server": "En este servidor",
- "interaction_modal.sign_in": "No iniciaste sesión en este servidor. ¿Dónde se encuentra alojada tu cuenta?",
- "interaction_modal.sign_in_hint": "Ayuda: es el sitio web en donde te registraste. Si no te acordás, buscá el correo electrónico de bienvenida en tu cuenta de email. También podés usar tu nombre de usuario entero, p. ej., @tunombredeusuario@mastodon.social.",
"interaction_modal.title.favourite": "Marcar como favorito el mensaje de {name}",
"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": "Votá en la encuesta de {name}",
+ "interaction_modal.username_prompt": "Por ejemplo: {example}",
"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}}",
@@ -471,26 +469,26 @@
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"link_preview.shares": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}",
- "lists.add_member": "Añadir",
- "lists.add_to_list": "Añadir a la lista",
- "lists.add_to_lists": "Añadir {name} a las listas",
+ "lists.add_member": "Agregar",
+ "lists.add_to_list": "Agregar a lista",
+ "lists.add_to_lists": "Agregar a {name} a las listas",
"lists.create": "Crear",
- "lists.create_a_list_to_organize": "Crea una nueva lista para organizar tu página de inicio",
- "lists.create_list": "Crear una lista",
+ "lists.create_a_list_to_organize": "Creá una nueva lista para organizar tu línea temporal principal",
+ "lists.create_list": "Crear lista",
"lists.delete": "Eliminar lista",
- "lists.done": "Hecho",
+ "lists.done": "Listo",
"lists.edit": "Editar lista",
- "lists.exclusive": "Ocultar miembros en Inicio",
- "lists.exclusive_hint": "Si alguien está en esta lista, escóndelo en tu página de inicio para evitar ver sus publicaciones dos veces.",
- "lists.find_users_to_add": "Buscar usuarios para añadir",
- "lists.list_members": "Miembros de la lista",
+ "lists.exclusive": "Ocultar miembros en la línea temporal principal",
+ "lists.exclusive_hint": "Si alguien está en esta lista, ocultalo en tu línea temporal principal para evitar que aparezcan sus mensajes dos veces.",
+ "lists.find_users_to_add": "Buscar usuarios para agregar",
+ "lists.list_members": "Miembros de lista",
"lists.list_members_count": "{count, plural,one {# miembro} other {# miembros}}",
"lists.list_name": "Nombre de la lista",
"lists.new_list_name": "Nombre de la nueva lista",
"lists.no_lists_yet": "Aún no hay listas.",
"lists.no_members_yet": "Aún no hay miembros.",
"lists.no_results_found": "No se encontraron resultados.",
- "lists.remove_member": "Eliminar",
+ "lists.remove_member": "Quitar",
"lists.replies_policy.followed": "Cualquier cuenta seguida",
"lists.replies_policy.list": "Miembros de la lista",
"lists.replies_policy.none": "Nadie",
@@ -655,11 +653,11 @@
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
"notifications_permission_banner.title": "No te pierdas nada",
- "onboarding.follows.back": "Atrás",
- "onboarding.follows.done": "Hecho",
+ "onboarding.follows.back": "Volver",
+ "onboarding.follows.done": "Listo",
"onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Podés intentar usar la búsqueda o navegar por la página de exploración para encontrar cuentas a las que seguir, o intentarlo de nuevo más tarde.",
"onboarding.follows.search": "Buscar",
- "onboarding.follows.title": "Sigue personas para comenzar",
+ "onboarding.follows.title": "Para comenzar, empezá a seguir cuentas",
"onboarding.profile.discoverable": "Hacer que mi perfil sea detectable",
"onboarding.profile.discoverable_hint": "Cuando optás por ser detectable en Mastodon, tus mensajes pueden aparecer en los resultados de búsqueda y de tendencia, y tu perfil puede ser sugerido a personas con intereses similares a los tuyos.",
"onboarding.profile.display_name": "Nombre para mostrar",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Política de privacidad",
"recommended": "Opción recomendada",
"refresh": "Refrescar",
- "regeneration_indicator.label": "Cargando…",
- "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!",
+ "regeneration_indicator.please_stand_by": "Espera, por favor.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparando tu página de inicio…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural,one {hace # día} other {hace # días}}",
"relative_time.full.hours": "{number, plural,one {hace # hora} other {hace # horas}}",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index cc92c06de5..8f3034b5b8 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -28,16 +28,16 @@
"account.enable_notifications": "Notificarme cuando @{name} publique algo",
"account.endorse": "Destacar en mi perfil",
"account.featured_tags.last_status_at": "Última publicación el {date}",
- "account.featured_tags.last_status_never": "Sin publicaciones",
+ "account.featured_tags.last_status_never": "No hay publicaciones",
"account.featured_tags.title": "Etiquetas destacadas de {name}",
"account.follow": "Seguir",
"account.follow_back": "Seguir también",
"account.followers": "Seguidores",
- "account.followers.empty": "Todavía nadie sigue a este usuario.",
+ "account.followers.empty": "Nadie sigue a este usuario todavía.",
"account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}",
"account.following": "Siguiendo",
"account.following_counter": "{count, plural, one {{counter} siguiendo} other {{counter} siguiendo}}",
- "account.follows.empty": "Este usuario todavía no sigue a nadie.",
+ "account.follows.empty": "Este usuario no sigue a nadie todavía.",
"account.go_to_profile": "Ir al perfil",
"account.hide_reblogs": "Ocultar impulsos de @{name}",
"account.in_memoriam": "En memoria.",
@@ -58,7 +58,7 @@
"account.posts": "Publicaciones",
"account.posts_with_replies": "Publicaciones y respuestas",
"account.report": "Denunciar a @{name}",
- "account.requested": "Esperando aprobación. Haga clic para cancelar la solicitud de seguimiento",
+ "account.requested": "Esperando aprobación. Haz 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 impulsos de @{name}",
@@ -81,7 +81,7 @@
"admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían",
"admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios",
"admin.impact_report.title": "Resumen de impacto",
- "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.",
+ "alert.rate_limited.message": "Por favor, intenta después de las {retry_time, time, medium}.",
"alert.rate_limited.title": "Tarifa limitada",
"alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!",
@@ -89,9 +89,9 @@
"announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "El cazador de tendencias",
"annual_report.summary.archetype.lurker": "El merodeador",
- "annual_report.summary.archetype.oracle": "El oraculo",
+ "annual_report.summary.archetype.oracle": "El oráculo",
"annual_report.summary.archetype.pollster": "El encuestador",
- "annual_report.summary.archetype.replier": "La mariposa sociable",
+ "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": "Este es el resumen de tu {year}:",
@@ -108,7 +108,7 @@
"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.",
+ "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.",
"block_modal.show_less": "Mostrar menos",
"block_modal.show_more": "Mostrar más",
"block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.",
@@ -407,23 +407,21 @@
"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.",
- "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?",
+ "interaction_modal.action.favourite": "Para continuar, debes marcar como favorito desde tu cuenta.",
+ "interaction_modal.action.follow": "Para continuar, debes seguir desde tu cuenta.",
+ "interaction_modal.action.reblog": "Para continuar, debes impulsar desde tu cuenta.",
+ "interaction_modal.action.reply": "Para continuar, debes responder desde tu cuenta.",
+ "interaction_modal.action.vote": "Para continuar, debes votar desde tu cuenta.",
+ "interaction_modal.go": "Ir",
+ "interaction_modal.no_account_yet": "¿Aún no tienes una cuenta?",
"interaction_modal.on_another_server": "En un servidor diferente",
"interaction_modal.on_this_server": "En este servidor",
- "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?",
- "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo: @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}",
"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": "Votar en la encuesta de {name}",
+ "interaction_modal.username_prompt": "Por ejemplo: {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Política de Privacidad",
"recommended": "Recomendado",
"refresh": "Actualizar",
- "regeneration_indicator.label": "Cargando…",
- "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
+ "regeneration_indicator.please_stand_by": "Espera, por favor.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparando tu página de inicio…",
"relative_time.days": "{number} d",
"relative_time.full.days": "{number, plural, one {# día} other {# días hace}}",
"relative_time.full.hours": "{number, plural, one {# hora} other {# horas}} hace",
@@ -782,11 +780,11 @@
"search_results.accounts": "Perfiles",
"search_results.all": "Todos",
"search_results.hashtags": "Etiquetas",
- "search_results.no_results": "Sin resultados.",
+ "search_results.no_results": "No hay resultados.",
"search_results.no_search_yet": "Intenta buscar publicaciones, perfiles o etiquetas.",
"search_results.see_all": "Ver todos",
"search_results.statuses": "Publicaciones",
- "search_results.title": "Búsqueda de \"{q}\"",
+ "search_results.title": "Busqueda de “{q}”",
"server_banner.about_active_users": "Personas utilizando este servidor durante los últimos 30 días (Usuarios Activos Mensuales)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrado por:",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index e011902f6b..d15f461364 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -407,23 +407,21 @@
"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.",
- "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu página 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?",
+ "interaction_modal.action.favourite": "Para continuar, tienes que marcar como favorito desde tu cuenta.",
+ "interaction_modal.action.follow": "Para continuar, tienes que seguir desde tu cuenta.",
+ "interaction_modal.action.reblog": "Para continuar, necesitas impulsar desde tu cuenta.",
+ "interaction_modal.action.reply": "Para continuar, tienes que responder desde tu cuenta.",
+ "interaction_modal.action.vote": "Para continuar, tienes que votar desde tu cuenta.",
+ "interaction_modal.go": "Ir",
+ "interaction_modal.no_account_yet": "¿Todavía no tienes cuenta?",
"interaction_modal.on_another_server": "En un servidor diferente",
"interaction_modal.on_this_server": "En este servidor",
- "interaction_modal.sign_in": "No estás registrado en este servidor. ¿Dónde tienes tu cuenta?",
- "interaction_modal.sign_in_hint": "Pista: Ese es el sitio donde te registraste. Si no lo recuerdas, busca el correo electrónico de bienvenida en tu bandeja de entrada. También puedes introducir tu nombre de usuario completo (por ejemplo @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Marcar como favorita la publicación de {name}",
"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}",
+ "interaction_modal.username_prompt": "Por ejemplo: {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Política de Privacidad",
"recommended": "Recomendado",
"refresh": "Actualizar",
- "regeneration_indicator.label": "Cargando…",
- "regeneration_indicator.sublabel": "¡Tu página de inicio se está preparando!",
+ "regeneration_indicator.please_stand_by": "Espera, por favor.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparando tu página de inicio…",
"relative_time.days": "{number} d",
"relative_time.full.days": "hace {number, plural, one {# día} other {# días}}",
"relative_time.full.hours": "hace {number, plural, one {# hora} other {# horas}}",
diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json
index 460c354d04..40df5ec836 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -52,7 +52,7 @@
"account.mute_notifications_short": "Vaigista teavitused",
"account.mute_short": "Vaigista",
"account.muted": "Vaigistatud",
- "account.mutual": "Ühine",
+ "account.mutual": "Jälgite",
"account.no_bio": "Kirjeldust pole lisatud.",
"account.open_original_page": "Ava algne leht",
"account.posts": "Postitused",
@@ -168,7 +168,7 @@
"community.column_settings.remote_only": "Ainult kaug",
"compose.language.change": "Muuda keelt",
"compose.language.search": "Otsi keeli...",
- "compose.published.body": "Postitus avaldatud.",
+ "compose.published.body": "Postitus tehtud.",
"compose.published.open": "Ava",
"compose.saved.body": "Postitus salvestatud.",
"compose_form.direct_message_warning_learn_more": "Vaata lisa",
@@ -204,6 +204,9 @@
"confirmations.edit.confirm": "Muuda",
"confirmations.edit.message": "Muutes praegu kirjutatakse hetkel loodav sõnum üle. Kas oled kindel, et soovid jätkata?",
"confirmations.edit.title": "Kirjutada postitus üle?",
+ "confirmations.follow_to_list.confirm": "Jälgi ja lisa loetellu",
+ "confirmations.follow_to_list.message": "Pead jälgima kasutajat {name}, et lisada teda loetellu.",
+ "confirmations.follow_to_list.title": "Jälgida kasutajat?",
"confirmations.logout.confirm": "Välju",
"confirmations.logout.message": "Kas oled kindel, et soovid välja logida?",
"confirmations.logout.title": "Logida välja?",
@@ -358,6 +361,7 @@
"footer.privacy_policy": "Isikuandmete kaitse",
"footer.source_code": "Lähtekood",
"footer.status": "Olek",
+ "footer.terms_of_service": "Kasutustingimused",
"generic.saved": "Salvestatud",
"getting_started.heading": "Alustamine",
"hashtag.admin_moderation": "Ava modereerimisliides #{name} jaoks",
@@ -402,18 +406,10 @@
"ignore_notifications_modal.not_followers_title": "Ignoreeri inimeste teavitusi, kes sind ei jälgi?",
"ignore_notifications_modal.not_following_title": "Ignoreeri inimeste teavitusi, keda sa ei jälgi?",
"ignore_notifications_modal.private_mentions_title": "Ignoreeri soovimatute eraviisiliste mainimiste teateid?",
- "interaction_modal.description.favourite": "Mastodoni kontoga saad postituse lemmikuks märkida, et autor teaks, et sa hindad seda, ja jätta see hiljemaks alles.",
- "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?",
+ "interaction_modal.action.favourite": "Jätkamiseks pead oma konto alt lemmikuks märkima.",
+ "interaction_modal.action.follow": "Jätkamiseks pead oma konto alt lemmikuks märkima.",
"interaction_modal.on_another_server": "Teises serveris",
"interaction_modal.on_this_server": "Selles serveris",
- "interaction_modal.sign_in": "Sa pole sellesse serverisse sisse logitud. Kus sinu konto asub?",
- "interaction_modal.sign_in_hint": "Vihje: See on veebileht, millel sa registreerusid. Kui see ei meenu, otsi sisendkaustast tervitus-e-kirja. Võid sisestada ka oma täispika kasutajanime! (Näit. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Lisa konto {name} postitus lemmikuks",
"interaction_modal.title.follow": "Jälgi kontot {name}",
"interaction_modal.title.reblog": "Jaga {name} postitust",
@@ -470,9 +466,12 @@
"lists.add_to_list": "Lisa loendisse",
"lists.delete": "Kustuta nimekiri",
"lists.edit": "Muuda nimekirja",
+ "lists.no_members_yet": "Pole veel liikmeid.",
"lists.replies_policy.followed": "Igalt jälgitud kasutajalt",
"lists.replies_policy.list": "Listi liikmetelt",
"lists.replies_policy.none": "Mitte kelleltki",
+ "lists.save": "Salvesta",
+ "lists.search": "Otsi",
"load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
"loading_indicator.label": "Laadimine…",
"media_gallery.hide": "Peida",
@@ -665,8 +664,6 @@
"privacy_policy.title": "Isikuandmete kaitse",
"recommended": "Soovitatud",
"refresh": "Värskenda",
- "regeneration_indicator.label": "Laeb…",
- "regeneration_indicator.sublabel": "Su koduvoog on ettevalmistamisel!",
"relative_time.days": "{number}p",
"relative_time.full.days": "{number, plural, one {# päev} other {# päeva}} tagasi",
"relative_time.full.hours": "{number, plural, one {# tund} other {# tundi}} tagasi",
@@ -824,6 +821,7 @@
"subscribed_languages.target": "Muuda tellitud keeli {target} jaoks",
"tabs_bar.home": "Kodu",
"tabs_bar.notifications": "Teated",
+ "terms_of_service.title": "Teenuse tingimused",
"time_remaining.days": "{number, plural, one {# päev} other {# päeva}} jäänud",
"time_remaining.hours": "{number, plural, one {# tund} other {# tundi}} jäänud",
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} jäänud",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index d93f6e62cd..094b33e220 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -372,17 +372,8 @@
"ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.private_mentions_title": "Eskatu gabeko aipamen pribatuen jakinarazpenei ez ikusiarena egin?",
- "interaction_modal.description.favourite": "Mastodon kontu batekin bidalketa hau gogoko egin dezakezu, egileari eskertzeko eta gerorako gordetzeko.",
- "interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.",
- "interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.",
- "interaction_modal.description.reply": "Mastodon kontu batekin bidalketa honi erantzun diezaiokezu.",
- "interaction_modal.login.action": "Itzuli hasierara",
- "interaction_modal.login.prompt": "Zure zerbitzariko domeinua, adib. mastodon.eus",
- "interaction_modal.no_account_yet": "Oraindik ez duzu izena eman Mastodonen?",
"interaction_modal.on_another_server": "Beste zerbitzari batean",
"interaction_modal.on_this_server": "Zerbitzari honetan",
- "interaction_modal.sign_in": "Ez duzu saioa hasita zerbitzari honetan. Non dago zure kontua ostatatua?",
- "interaction_modal.sign_in_hint": "Aholkua: Izena eman duzun zerbitzaria da. Ez baduzu gogoratzen, begiratu ongietorri-mezua zure sarrera-ontzian. Baita ere, zure erabiltzaile-izen osoa sar dezakezu! (adib. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Egin gogoko {name}(r)en bidalketa",
"interaction_modal.title.follow": "Jarraitu {name}(r)i",
"interaction_modal.title.reblog": "Bultzatu {name}(r)en bidalketa",
@@ -623,8 +614,7 @@
"privacy_policy.title": "Pribatutasun politika",
"recommended": "Gomendatua",
"refresh": "Berritu",
- "regeneration_indicator.label": "Kargatzen…",
- "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!",
+ "regeneration_indicator.please_stand_by": "Itxaron, mesedez.",
"relative_time.days": "{number}e",
"relative_time.full.days": "Duela {number, plural, one {egun #} other {# egun}}",
"relative_time.full.hours": "Duela {number, plural, one {ordu #} other {# ordu}}",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index cd682f563b..e39a37fb12 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -401,18 +401,8 @@
"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": "با حسابی روی ماستودون میتوانید این فرسته را با پیگیران خودتان همرسانی کنید.",
- "interaction_modal.description.reply": "با حسابی روی ماستودون میتوانید به این فرسته پاسخ دهید.",
- "interaction_modal.description.vote": "با حسابی روی ماستودون میتوانید در این نظرسنجی شرکت کنید.",
- "interaction_modal.login.action": "رفتن به خانه",
- "interaction_modal.login.prompt": "دامنهٔ کارساز شخصیتان چون mastodon.social",
- "interaction_modal.no_account_yet": "در ماستودون نیست؟",
"interaction_modal.on_another_server": "روی کارسازی دیگر",
"interaction_modal.on_this_server": "روی این کارساز",
- "interaction_modal.sign_in": "شما در این کارساز وارد نشدهاید. حسابتان کجا میزبانی شده؟",
- "interaction_modal.sign_in_hint": "نکته: میزبانتان، پایگاه وبیست که رویش ثبتنام کردهاید. اگر به خاطر نمیآورید، به رایانامهٔ خوشآمد در صندوق ورودیتان بنگرید. همچنین میتوانید نام کاربری کاملتان (چون @Mastodon@mastodon.social) را وارد کنید!",
"interaction_modal.title.favourite": "فرستههای برگزیدهٔ {name}",
"interaction_modal.title.follow": "پیگیری {name}",
"interaction_modal.title.reblog": "تقویت فرستهٔ {name}",
@@ -677,8 +667,6 @@
"privacy_policy.title": "سیاست محرمانگی",
"recommended": "پیشنهادشده",
"refresh": "نوسازی",
- "regeneration_indicator.label": "در حال بار شدن…",
- "regeneration_indicator.sublabel": "خوراک خانگیتان دارد آماده میشود!",
"relative_time.days": "{number} روز",
"relative_time.full.days": "{number, plural, one {# روز} other {# روز}} پیش",
"relative_time.full.hours": "{number, plural, one {# ساعت} other {# ساعت}} پیش",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 299da014a0..a52a64c9c7 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -406,23 +406,21 @@
"ignore_notifications_modal.not_followers_title": "Sivuutetaanko ilmoitukset käyttäjiltä, jotka eivät seuraa sinua?",
"ignore_notifications_modal.not_following_title": "Sivuutetaanko ilmoitukset käyttäjiltä, joita et seuraa?",
"ignore_notifications_modal.private_mentions_title": "Sivuutetaanko ilmoitukset pyytämättömistä yksityismaininnoista?",
- "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi tekijälle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.",
- "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?",
+ "interaction_modal.action.favourite": "Jotta voit jatkaa, sinun tulee lisätä julkaisu suosikiksesi omalta tililtäsi.",
+ "interaction_modal.action.follow": "Jotta voit jatkaa, sinun tulee seurata käyttäjää omalta tililtäsi.",
+ "interaction_modal.action.reblog": "Jotta voit jatkaa, sinun tulee uudelleenjulkaista omalta tililtäsi.",
+ "interaction_modal.action.reply": "Jotta voit jatkaa, sinun tulee vastata omalta tililtäsi.",
+ "interaction_modal.action.vote": "Jotta voit jatkaa, sinun tulee äänestää omalta tililtäsi.",
+ "interaction_modal.go": "Siirry",
+ "interaction_modal.no_account_yet": "Eikö sinulla ole vielä tiliä?",
"interaction_modal.on_another_server": "Toisella palvelimella",
"interaction_modal.on_this_server": "Tällä palvelimella",
- "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?",
- "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista palvelintasi, etsi tervetulosähköposti saapuneista viesteistäsi. Voit syöttää myös koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)",
"interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin",
"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",
+ "interaction_modal.username_prompt": "Esim. {example}",
"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}}",
@@ -696,8 +694,8 @@
"privacy_policy.title": "Tietosuojakäytäntö",
"recommended": "Suositellaan",
"refresh": "Päivitä",
- "regeneration_indicator.label": "Ladataan…",
- "regeneration_indicator.sublabel": "Kotisyötettäsi valmistellaan!",
+ "regeneration_indicator.please_stand_by": "Ole valmiina.",
+ "regeneration_indicator.preparing_your_home_feed": "Kotisyötettäsi valmistellaan…",
"relative_time.days": "{number} pv",
"relative_time.full.days": "{number, plural, one {# päivä} other {# päivää}} sitten",
"relative_time.full.hours": "{number, plural, one {# tunti} other {# tuntia}} sitten",
@@ -785,7 +783,7 @@
"search_results.no_search_yet": "Kokeile hakea julkaisuja, profiileja tai aihetunnisteita.",
"search_results.see_all": "Näytä kaikki",
"search_results.statuses": "Julkaisut",
- "search_results.title": "Hae ”{q}”",
+ "search_results.title": "Haku ”{q}”",
"server_banner.about_active_users": "Palvelimen käyttäjät viimeisten 30 päivän ajalta (kuukauden aktiiviset käyttäjät)",
"server_banner.active_users": "aktiivista käyttäjää",
"server_banner.administered_by": "Ylläpitäjä:",
diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json
index 666c493646..c0096380aa 100644
--- a/app/javascript/mastodon/locales/fil.json
+++ b/app/javascript/mastodon/locales/fil.json
@@ -208,8 +208,6 @@
"hashtags.and_other": "…at {count, plural, one {# iba pa} other {# na iba pa}}",
"home.column_settings.show_replies": "Ipakita ang mga tugon",
"home.pending_critical_update.body": "Mangyaring i-update ang iyong serbiro ng Mastodon sa lalong madaling panahon!",
- "interaction_modal.login.action": "Iuwi mo ako",
- "interaction_modal.no_account_yet": "Wala sa Mastodon?",
"interaction_modal.on_another_server": "Sa ibang serbiro",
"interaction_modal.on_this_server": "Sa serbirong ito",
"interaction_modal.title.follow": "Sundan si {name}",
@@ -287,7 +285,6 @@
"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",
"relative_time.full.hours": "{number, plural, one {# oras} other {# na oras}} ang nakalipas",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index bae34aee16..d71e5076eb 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -406,23 +406,21 @@
"ignore_notifications_modal.not_followers_title": "Lat sum um tú ikki sær fráboðanir frá fólki, sum ikki fylgja tær?",
"ignore_notifications_modal.not_following_title": "Lat sum um tú ikki sær fráboðanir frá fólki, sum tú ikki fylgir?",
"ignore_notifications_modal.private_mentions_title": "Lat sum um tú ikki sær fráboðanir frá óbiðnum privatum umrøðum?",
- "interaction_modal.description.favourite": "Við einari kontu á Mastodon kanst tú dáma hendan postin fyri at vísa rithøvundanum at tú virðismetur hann og goymir hann til seinni.",
- "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?",
+ "interaction_modal.action.favourite": "Fyri at halda fram, so mást tú yndismerkja frá tínari kontu.",
+ "interaction_modal.action.follow": "Fyri at halda fram, mást tú fylgja frá tínari kontu.",
+ "interaction_modal.action.reblog": "Fyri at halda fram, mást tú endurblogga frá tínari kontu.",
+ "interaction_modal.action.reply": "Fyri at halda fram, mást tú svara frá tínari kontu.",
+ "interaction_modal.action.vote": "Fyri at halda fram, mást tú atkvøða frá tínari kontu.",
+ "interaction_modal.go": "Far",
+ "interaction_modal.no_account_yet": "Hevur tú onga kontu enn?",
"interaction_modal.on_another_server": "Á øðrum ambætara",
"interaction_modal.on_this_server": "Á hesum ambætaranum",
- "interaction_modal.sign_in": "Tú er ikki ritað/ur inn á hesum ambætaranum. Hvar er kontan hjá tær hýst?",
- "interaction_modal.sign_in_hint": "Góð ráð: tað er heimasíðan, har tú lat teg skráseta. Minnist tú ikki, so kanst tú leita eftir vælkomin-teldubrævinum í innbakkanum hjá tær. Tú kanst eisini innlesa fulla brúkaranavnið hjá tær! (t.d. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Dáma postin hjá {name}",
"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}",
+ "interaction_modal.username_prompt": "T.d. {example}",
"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}}",
@@ -696,8 +694,8 @@
"privacy_policy.title": "Privatlívspolitikkur",
"recommended": "Viðmælt",
"refresh": "Endurles",
- "regeneration_indicator.label": "Innlesur…",
- "regeneration_indicator.sublabel": "Tín heimarás verður gjørd klár!",
+ "regeneration_indicator.please_stand_by": "Bíða við.",
+ "regeneration_indicator.preparing_your_home_feed": "Fyrireiki heimarásina hjá tær…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dagur} other {# dagar}} síðani",
"relative_time.full.hours": "{number, plural, one {# tími} other {# tímar}} síðani",
@@ -781,8 +779,11 @@
"search_results.accounts": "Vangar",
"search_results.all": "Alt",
"search_results.hashtags": "Frámerki",
+ "search_results.no_results": "Eingi úrslit.",
+ "search_results.no_search_yet": "Royn at leita eftir postum, vangum ella frámerkjum.",
"search_results.see_all": "Sí øll",
"search_results.statuses": "Postar",
+ "search_results.title": "Leita eftir \"{q}\"",
"server_banner.about_active_users": "Fólk, sum hava brúkt hendan ambætaran seinastu 30 dagarnar (mánaðarligir virknir brúkarar)",
"server_banner.active_users": "virknir brúkarar",
"server_banner.administered_by": "Umsitari:",
diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json
index bf4baf3cb1..6e94eb813a 100644
--- a/app/javascript/mastodon/locales/fr-CA.json
+++ b/app/javascript/mastodon/locales/fr-CA.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorer les notifications provenant des personnes qui ne vous suivent pas ?",
"ignore_notifications_modal.not_following_title": "Ignorer les notifications provenant des personnes que vous ne suivez pas ?",
"ignore_notifications_modal.private_mentions_title": "Ignorer les notifications issues des mentions privées non sollicitées ?",
- "interaction_modal.description.favourite": "Avec un compte Mastodon, vous pouvez ajouter cette publication à vos favoris pour informer l'auteur⋅rice que vous l'appréciez et la sauvegarder pour plus tard.",
- "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs publications dans votre fil d'accueil.",
- "interaction_modal.description.reblog": "Avec un compte Mastodon, vous pouvez booster cette publication pour la partager avec vos propres abonné·e·s.",
- "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à cette publication.",
- "interaction_modal.description.vote": "Avec un compte sur Mastodon, vous pouvez répondre à cette question.",
- "interaction_modal.login.action": "Aller à mon serveur",
- "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
- "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
+ "interaction_modal.action.favourite": "Pour continuer, vous devez ajouter en favori depuis votre compte.",
+ "interaction_modal.action.follow": "Pour continuer, vous devez suivre depuis votre compte.",
+ "interaction_modal.action.reblog": "Pour continuer, vous devez booster depuis votre compte.",
+ "interaction_modal.action.reply": "Pour continuer, vous devez répondre depuis votre compte.",
+ "interaction_modal.action.vote": "Pour continuer, vous devez voter depuis votre compte.",
+ "interaction_modal.go": "Valider",
+ "interaction_modal.no_account_yet": "Vous n'avez pas encore de compte ?",
"interaction_modal.on_another_server": "Sur un autre serveur",
"interaction_modal.on_this_server": "Sur ce serveur",
- "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?",
- "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Ajouter la publication de {name} aux favoris",
"interaction_modal.title.follow": "Suivre {name}",
"interaction_modal.title.reblog": "Booster la publication de {name}",
"interaction_modal.title.reply": "Répondre à la publication de {name}",
"interaction_modal.title.vote": "Voter pour le sondage de {name}",
+ "interaction_modal.username_prompt": "Par exemple : {example}",
"intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
"intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Politique de confidentialité",
"recommended": "Recommandé",
"refresh": "Actualiser",
- "regeneration_indicator.label": "Chargement…",
- "regeneration_indicator.sublabel": "Votre fil d'accueil est en cours de préparation!",
+ "regeneration_indicator.please_stand_by": "Veuillez patienter.",
+ "regeneration_indicator.preparing_your_home_feed": "Préparation de votre flux principal…",
"relative_time.days": "{number} j",
"relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}",
"relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 0e9b698ac8..1bc0e2722d 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorer les notifications provenant des personnes qui ne vous suivent pas ?",
"ignore_notifications_modal.not_following_title": "Ignorer les notifications provenant des personnes que vous ne suivez pas ?",
"ignore_notifications_modal.private_mentions_title": "Ignorer les notifications issues des mentions privées non sollicitées ?",
- "interaction_modal.description.favourite": "Avec un compte Mastodon, vous pouvez ajouter ce message à vos favoris pour informer l'auteur⋅rice que vous l'appréciez et pour le sauvegarder pour plus tard.",
- "interaction_modal.description.follow": "Avec un compte Mastodon, vous pouvez suivre {name} et recevoir leurs posts dans votre fil d'actualité.",
- "interaction_modal.description.reblog": "Avec un compte sur Mastodon, vous pouvez partager ce message pour le faire découvrir à vos propres abonné⋅e⋅s.",
- "interaction_modal.description.reply": "Avec un compte sur Mastodon, vous pouvez répondre à ce message.",
- "interaction_modal.description.vote": "Avec un compte sur Mastodon, vous pouvez répondre à cette question.",
- "interaction_modal.login.action": "Aller à mon serveur",
- "interaction_modal.login.prompt": "Domaine de votre serveur, ex. mastodon.social",
- "interaction_modal.no_account_yet": "Pas sur Mastodon ?",
+ "interaction_modal.action.favourite": "Pour continuer, vous devez ajouter en favori depuis votre compte.",
+ "interaction_modal.action.follow": "Pour continuer, vous devez suivre depuis votre compte.",
+ "interaction_modal.action.reblog": "Pour continuer, vous devez booster depuis votre compte.",
+ "interaction_modal.action.reply": "Pour continuer, vous devez répondre depuis votre compte.",
+ "interaction_modal.action.vote": "Pour continuer, vous devez voter depuis votre compte.",
+ "interaction_modal.go": "Valider",
+ "interaction_modal.no_account_yet": "Vous n'avez pas encore de compte ?",
"interaction_modal.on_another_server": "Sur un autre serveur",
"interaction_modal.on_this_server": "Sur ce serveur",
- "interaction_modal.sign_in": "Vous n’êtes pas connectés sur ce serveur. Où est hébergé votre compte ?",
- "interaction_modal.sign_in_hint": "Astuce : c'est le site web sur lequel vous vous êtes inscrit. Si vous ne vous en souvenez pas, cherchez le courriel de bienvenue dans votre boîte de réception. Vous pouvez aussi indiquer votre nom d’utilisateur complet ! (par ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Ajouter le message de {name} aux favoris",
"interaction_modal.title.follow": "Suivre {name}",
"interaction_modal.title.reblog": "Partager le message de {name}",
"interaction_modal.title.reply": "Répondre au message de {name}",
"interaction_modal.title.vote": "Voter pour le sondage de {name}",
+ "interaction_modal.username_prompt": "Par exemple : {example}",
"intervals.full.days": "{number, plural, one {# jour} other {# jours}}",
"intervals.full.hours": "{number, plural, one {# heure} other {# heures}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Politique de confidentialité",
"recommended": "Recommandé",
"refresh": "Actualiser",
- "regeneration_indicator.label": "Chargement…",
- "regeneration_indicator.sublabel": "Votre fil principal est en cours de préparation !",
+ "regeneration_indicator.please_stand_by": "Veuillez patienter.",
+ "regeneration_indicator.preparing_your_home_feed": "Préparation de votre flux principal…",
"relative_time.days": "{number} j",
"relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}",
"relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index 8c5fd273e4..1664ccd864 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -381,18 +381,8 @@
"ignore_notifications_modal.not_followers_title": "Meldingen negearje fan minsken dy’t jo net folgje?",
"ignore_notifications_modal.not_following_title": "Meldingen negearje fan minsken dy’t josels net folgje?",
"ignore_notifications_modal.private_mentions_title": "Meldingen negearje fan net frege priveeberjochten?",
- "interaction_modal.description.favourite": "Jo kinne mei in Mastodon-account dit berjocht as favoryt markearje, om dy brûker witte te litten dat jo it berjocht wurdearje en om it te bewarjen.",
- "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?",
"interaction_modal.on_another_server": "Op een oare server",
"interaction_modal.on_this_server": "Op dizze server",
- "interaction_modal.sign_in": "Jo binne net op dizze server oanmeld. Op hokker server stiet jo account?",
- "interaction_modal.sign_in_hint": "Tip: Dat is de website wêrop jo jo registrearre hawwe. Wannear’t jo dit ferjitten binne kinne jo nei it wolkomst-emailberjocht sykje yn jo Postfek YN. Jo kinne ek jo folsleine brûkersnamme ynfolje! (byg. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Berjocht fan {name} as favoryt markearje",
"interaction_modal.title.follow": "{name} folgje",
"interaction_modal.title.reblog": "Berjocht fan {name} booste",
@@ -642,8 +632,6 @@
"privacy_policy.title": "Privacybelied",
"recommended": "Oanrekommandearre",
"refresh": "Ferfarskje",
- "regeneration_indicator.label": "Lade…",
- "regeneration_indicator.sublabel": "Jo starttiidline wurdt oanmakke!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dei} other {# dagen}} lyn",
"relative_time.full.hours": "{number, plural, one {# oere} other {# oeren}} lyn",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 81b1647fcf..1f3bccee15 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -362,6 +362,7 @@
"footer.privacy_policy": "Polasaí príobháideachais",
"footer.source_code": "Féach ar an gcód foinseach",
"footer.status": "Stádas",
+ "footer.terms_of_service": "Téarmaí seirbhíse",
"generic.saved": "Sábháilte",
"getting_started.heading": "Ag tosú amach",
"hashtag.admin_moderation": "Oscail comhéadan modhnóireachta le haghaidh #{name}",
@@ -406,18 +407,8 @@
"ignore_notifications_modal.not_followers_title": "An dtugann tú aird ar fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.not_following_title": "An ndéanann tú neamhaird de fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.private_mentions_title": "An dtugann tú aird ar fhógraí ó Luaintí Príobháideacha gan iarraidh?",
- "interaction_modal.description.favourite": "Le cuntas ar Mastodon, is fearr leat an postáil seo chun a chur in iúl don údar go bhfuil meas agat air agus é a shábháil ar feadh níos déanaí.",
- "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?",
"interaction_modal.on_another_server": "Ar freastalaí eile",
"interaction_modal.on_this_server": "Ar an freastalaí seo",
- "interaction_modal.sign_in": "Níl tú logáilte isteach ar an bhfreastalaí seo. Cá bhfuil do chuntas á óstáil?",
- "interaction_modal.sign_in_hint": "Leid: Sin é an suíomh Gréasáin inar chláraigh tú. Mura cuimhin leat, lorg an ríomhphost fáilte i do bhosca isteach. Is féidir leat d'ainm úsáideora iomlán a chur isteach freisin! (m.sh. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "An postáil {name} is fearr leat",
"interaction_modal.title.follow": "Lean {name}",
"interaction_modal.title.reblog": "Mol postáil de chuid {name}",
@@ -548,6 +539,8 @@
"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.favourite_pm": "B'fhearr le {name} do lua príobháideach",
+ "notification.favourite_pm.name_and_others_with_link": "{name} agus {count, plural, one {# eile} two {# eile} few {# eile} many {# eile} other {# eile}} atá roghnaithe do do luaidh phríobháideach",
"notification.follow": "Lean {name} thú",
"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",
@@ -694,8 +687,6 @@
"privacy_policy.title": "Polasaí príobháideachais",
"recommended": "Molta",
"refresh": "Athnuaigh",
- "regeneration_indicator.label": "Ag lódáil…",
- "regeneration_indicator.sublabel": "Tá do bheathú baile á ullmhú!",
"relative_time.days": "{number}l",
"relative_time.full.days": "{number, plural, one {# lá} other {# lá}} ó shin",
"relative_time.full.hours": "{number, plural, one {# uair} other {# uair}} ó shin",
@@ -779,8 +770,11 @@
"search_results.accounts": "Próifílí",
"search_results.all": "Gach",
"search_results.hashtags": "Haischlib",
+ "search_results.no_results": "Gan torthaí.",
+ "search_results.no_search_yet": "Bain triail as postálacha, próifílí nó hashtags a chuardach.",
"search_results.see_all": "Gach rud a fheicáil",
"search_results.statuses": "Postálacha",
+ "search_results.title": "Cuardaigh \"{q}\"",
"server_banner.about_active_users": "Daoine a úsáideann an freastalaí seo le 30 lá anuas (Úsáideoirí Gníomhacha Míosúla)",
"server_banner.active_users": "úsáideoirí gníomhacha",
"server_banner.administered_by": "Arna riar ag:",
@@ -853,6 +847,7 @@
"subscribed_languages.target": "Athraigh teangacha suibscríofa le haghaidh {target}",
"tabs_bar.home": "Baile",
"tabs_bar.notifications": "Fógraí",
+ "terms_of_service.title": "Téarmaí Seirbhíse",
"time_remaining.days": "{number, plural, one {# lá} other {# lá}} fágtha",
"time_remaining.hours": "{number, plural, one {# uair} other {# uair}} fágtha",
"time_remaining.minutes": "{number, plural, one {# nóiméad} other {# nóiméad}} fágtha",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
index d6893ccfff..86936b9ccb 100644
--- a/app/javascript/mastodon/locales/gd.json
+++ b/app/javascript/mastodon/locales/gd.json
@@ -392,18 +392,8 @@
"ignore_notifications_modal.not_followers_title": "A bheil thu airson na brathan o dhaoine nach eil ’gad leantainn a leigeil seachad?",
"ignore_notifications_modal.not_following_title": "A bheil thu airson na brathan o dhaoine nach eil thu a’ leantainn a leigeil seachad?",
"ignore_notifications_modal.private_mentions_title": "A bheil thu airson na brathan o iomraidhean phrìobhaideach gun iarraidh a leigeil seachad?",
- "interaction_modal.description.favourite": "Le cunntas air Mastodon, ’s urrainn dhut am post seo a chur ris na h-annsachdan airson innse dhan ùghdar gu bheil e a’ còrdadh dhut ’s a shàbhaladh do uaireigin eile.",
- "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?",
"interaction_modal.on_another_server": "Air frithealaiche eile",
"interaction_modal.on_this_server": "Air an frithealaiche seo",
- "interaction_modal.sign_in": "Cha deach do chlàradh a-steach air an fhrithealaiche seo. Càit a bheil an cunntas agad ’ga òstadh?",
- "interaction_modal.sign_in_hint": "Gliocas: Seo an làrach-lìn far an do chlàraich thu. Mur eil cuimhne agad dè bh’ ann, thoir sùil air a’ phost-d fàilteachaidh sa bhogsa a-steach agad. ’S urrainn dhut an t-ainm-cleachdaiche slàn agad a chur a-steach cuideachd! (can @mise@ ailbhean.co-shaoghal.net)",
"interaction_modal.title.favourite": "Cuir am post aig {name} ris na h-annsachdan",
"interaction_modal.title.follow": "Lean {name}",
"interaction_modal.title.reblog": "Brosnaich am post aig {name}",
@@ -655,8 +645,6 @@
"privacy_policy.title": "Poileasaidh prìobhaideachd",
"recommended": "Molta",
"refresh": "Ath-nuadhaich",
- "regeneration_indicator.label": "’Ga luchdadh…",
- "regeneration_indicator.sublabel": "Tha do dhachaigh ’ga ullachadh!",
"relative_time.days": "{number}l",
"relative_time.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air ais",
"relative_time.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air ais",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index fbf377be5d..469bad98da 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -407,23 +407,21 @@
"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?",
"ignore_notifications_modal.private_mentions_title": "Ignorar notificacións de Mencións Privadas non solicitadas?",
- "interaction_modal.description.favourite": "Cunha conta Mastodon podes favorecer esta publicación e facerlle saber á autora que che gustou e que a gardas para máis tarde.",
- "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": "Seguir desde alá",
- "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social",
+ "interaction_modal.action.favourite": "Para continuar, debes favorecer desde a túa conta.",
+ "interaction_modal.action.follow": "Para continuar, debes facer seguimento desde a túa conta.",
+ "interaction_modal.action.reblog": "Para continuar, debes promover desde a túa conta.",
+ "interaction_modal.action.reply": "Para continuar, debes responder desde a túa conta.",
+ "interaction_modal.action.vote": "Para continuar, debes votar desde a túa conta.",
+ "interaction_modal.go": "Ir",
"interaction_modal.no_account_yet": "Aínda non tes unha conta?",
"interaction_modal.on_another_server": "Nun servidor diferente",
"interaction_modal.on_this_server": "Neste servidor",
- "interaction_modal.sign_in": "Non iniciaches sesión neste servidor. Onde creaches a túa conta?",
- "interaction_modal.sign_in_hint": "Axuda: trátase da web na que te rexistraches. Se non a lembras, busca na caixa de correo a mensaxe de benvida. Tamén podes escribir o teu identificador completo! (ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Marcar coma favorita a publicación de {name}",
"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}",
+ "interaction_modal.username_prompt": "Ex. {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Política de Privacidade",
"recommended": "Aconsellable",
"refresh": "Actualizar",
- "regeneration_indicator.label": "Estase a cargar…",
- "regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!",
+ "regeneration_indicator.please_stand_by": "Por favor, agarda.",
+ "regeneration_indicator.preparing_your_home_feed": "Creando a túa cronoloxía…",
"relative_time.days": "{number}d",
"relative_time.full.days": "hai {number, plural, one {# día} other {# días}}",
"relative_time.full.hours": "hai {number, plural, one {# hora} other {# horas}}",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 01f0bdca42..fbfde82727 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -407,23 +407,21 @@
"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": "עם חשבון מסטודון, ניתן להדהד את החצרוץ ולשתף עם עוקבים.",
- "interaction_modal.description.reply": "עם חשבון מסטודון, ניתן לענות לחצרוץ.",
- "interaction_modal.description.vote": "עם חשבון מסטודון, ניתן להצביע בסקר.",
- "interaction_modal.login.action": "קח אותי לדף הבית",
- "interaction_modal.login.prompt": "שם השרת שלך, למשל mastodon.social",
- "interaction_modal.no_account_yet": "עדיין לא במסטודון?",
+ "interaction_modal.action.favourite": "כדי להמשיך, עליך לחבב מחשבונך.",
+ "interaction_modal.action.follow": "כדי להמשיך, עליך לעקוב מחשבונך.",
+ "interaction_modal.action.reblog": "כדי להמשיך, עליך להדהד מחשבונך.",
+ "interaction_modal.action.reply": "כדי להמשיך, עליך לענות מחשבונך.",
+ "interaction_modal.action.vote": "כדי להמשיך, עליך להצביע מחשבונך.",
+ "interaction_modal.go": "המשך",
+ "interaction_modal.no_account_yet": "אין לך עדיין חשבון?",
"interaction_modal.on_another_server": "על שרת אחר",
"interaction_modal.on_this_server": "על שרת זה",
- "interaction_modal.sign_in": "אינך מחובר.ת לשרת זה. היכן מתאכסן החשבון שלך?",
- "interaction_modal.sign_in_hint": "רמז: זהו האתר שבו נרשמת. אם שכחת, יש לך הודעת \"ברוכים הבאים\" בתיבת הדוא\"ל. ניתן גם לכתוב את שם המשתמש המלא (למשל @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "חיבוב החצרוץ של {name}",
"interaction_modal.title.follow": "לעקוב אחרי {name}",
"interaction_modal.title.reblog": "להדהד את החצרוץ של {name}",
"interaction_modal.title.reply": "תשובה לחצרוץ של {name}",
"interaction_modal.title.vote": "הצביעו בסקר של {name}",
+ "interaction_modal.username_prompt": "למשל {example}",
"intervals.full.days": "{number, plural, one {# יום} other {# ימים}}",
"intervals.full.hours": "{number, plural, one {# שעה} other {# שעות}}",
"intervals.full.minutes": "{number, plural, one {# דקה} other {# דקות}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "מדיניות פרטיות",
"recommended": "מומלץ",
"refresh": "רענון",
- "regeneration_indicator.label": "טוען…",
- "regeneration_indicator.sublabel": "פיד הבית שלך בהכנה!",
+ "regeneration_indicator.please_stand_by": "נא להמתין.",
+ "regeneration_indicator.preparing_your_home_feed": "מכין לך את פיד הבית…",
"relative_time.days": "{number} ימים",
"relative_time.full.days": "לפני {number, plural, one {# יום} other {# ימים}}",
"relative_time.full.hours": "לפני {number, plural, one {# שעה} other {# שעות}}",
@@ -782,8 +780,11 @@
"search_results.accounts": "פרופילים",
"search_results.all": "כל התוצאות",
"search_results.hashtags": "תגיות",
+ "search_results.no_results": "אין תוצאות.",
+ "search_results.no_search_yet": "נסו לחפש אחר הודעות, פרופילי משתמשים או תגיות.",
"search_results.see_all": "הראה הכל",
"search_results.statuses": "הודעות",
+ "search_results.title": "חיפוש אחר \"{q}\"",
"server_banner.about_active_users": "משתמשים פעילים בשרת ב־30 הימים האחרונים (משתמשים פעילים חודשיים)",
"server_banner.active_users": "משתמשים פעילים",
"server_banner.administered_by": "מנוהל ע\"י:",
diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json
index b2e00e14b0..5d341796c1 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -295,13 +295,8 @@
"home.column_settings.show_replies": "जवाबों को दिखाए",
"home.hide_announcements": "घोषणाएँ छिपाएँ",
"home.show_announcements": "घोषणाएं दिखाएं",
- "interaction_modal.description.follow": "मास्टोडन पर एक अकाउंट के साथ, आप अपने होम फीड में उनकी पोस्ट प्राप्त करने के लिए {name} का अनुसरण कर सकते हैं",
- "interaction_modal.description.reblog": "मास्टोडन पर एक अकाउंट के साथ, आप इस पोस्ट को अपने फोल्लोवेर्स के साथ साझा करने के लिए बढ़ा सकते हैं।",
- "interaction_modal.description.reply": "मास्टोडन पर एक अकाउंट के साथ, आप इस पोस्ट का जवाब दे सकते हैं।",
- "interaction_modal.no_account_yet": "मस्टाडोन पर नहीं है?",
"interaction_modal.on_another_server": "एक अलग सर्वर पर",
"interaction_modal.on_this_server": "इस सर्वर पे",
- "interaction_modal.sign_in": "आप इस सर्वर पर प्रवेशित नहिं है | आपका खाता कहां साजा है?",
"interaction_modal.title.favourite": "मनपसंद {name} की पोस्ट",
"interaction_modal.title.follow": "फॉलो {name}",
"interaction_modal.title.reblog": "बूस्ट {name} की पोस्ट",
@@ -408,7 +403,6 @@
"privacy.public.short": "सार्वजनिक",
"recommended": "अनुशंसित",
"refresh": "रीफ्रेश करें",
- "regeneration_indicator.label": "लोड हो रहा है...",
"relative_time.days": "{number}दिन",
"relative_time.full.days": "{number, plural, one {# दिन} other {# दिन}} पहले",
"relative_time.full.hours": "{number, plural,one {# घंटा} other {# घंटे}} पहले",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index 6e8a86989c..e402187491 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -248,8 +248,6 @@
"home.hide_announcements": "Sakrij najave",
"home.pending_critical_update.title": "Dostupno je kritično sigurnosno ažuriranje!",
"home.show_announcements": "Prikaži najave",
- "interaction_modal.login.action": "Odvedi me kući",
- "interaction_modal.no_account_yet": "Nisi na Mastodonu?",
"interaction_modal.on_this_server": "Na ovom serveru",
"interaction_modal.title.follow": "Prati {name}",
"intervals.full.days": "{number, plural, one {# dan} other {# dana}}",
@@ -360,8 +358,6 @@
"privacy_policy.title": "Pravila o zaštiti privatnosti",
"recommended": "Preporučeno",
"refresh": "Osvježi",
- "regeneration_indicator.label": "Učitavanje…",
- "regeneration_indicator.sublabel": "Priprema se Vaša početna stranica!",
"relative_time.days": "{number}d",
"relative_time.full.just_now": "upravo sad",
"relative_time.just_now": "sada",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index dbca2bb691..e215597f05 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Nem követőktől érkező értesítések figyelmen kívül hagyása?",
"ignore_notifications_modal.not_following_title": "Nem követettektől érkező értesítések figyelmen kívül hagyása?",
"ignore_notifications_modal.private_mentions_title": "Figyelmen kívül hagyod a kéretlen privát említéseket?",
- "interaction_modal.description.favourite": "Egy Mastodon fiókkal kedvencnek jelölheted ezt a bejegyzést, tudatva a szerzővel, hogy értékeled és elteszed későbbre.",
- "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?",
+ "interaction_modal.action.favourite": "A folytatáshoz a fiókodból kell kedvencnek jelölnöd.",
+ "interaction_modal.action.follow": "A folytatáshoz a fiókodból kell követned.",
+ "interaction_modal.action.reblog": "A folytatáshoz a fiókodból kell megosztanod.",
+ "interaction_modal.action.reply": "A folytatáshoz a fiókodból kell válaszolnod rá.",
+ "interaction_modal.action.vote": "A folytatáshoz a fiókodból kell szavaznod.",
+ "interaction_modal.go": "Ugrás",
+ "interaction_modal.no_account_yet": "Még nincs fiókod?",
"interaction_modal.on_another_server": "Másik kiszolgálón",
"interaction_modal.on_this_server": "Ezen a kiszolgálón",
- "interaction_modal.sign_in": "Nem vagy bejelentkezve ezen a kiszolgálón. Hol van a fiókod hosztolva?",
- "interaction_modal.sign_in_hint": "Tip: Ez az a weboldal, ahol regisztráltál. Ha nem emlékszel, keresd meg az üdvözlőlevelet a bejövő leveleid között. Beírhatod a teljes felhasználónevedet is! (pl.: @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "{name} bejegyzésének megjelölése kedvencként",
"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",
+ "interaction_modal.username_prompt": "Például {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Adatvédelmi szabályzat",
"recommended": "Ajánlott",
"refresh": "Frissítés",
- "regeneration_indicator.label": "Betöltés…",
- "regeneration_indicator.sublabel": "A kezdőlapod hírfolyama épp készül!",
+ "regeneration_indicator.please_stand_by": "Kis türelmet.",
+ "regeneration_indicator.preparing_your_home_feed": "Kezdőlapi hírfolyam előkészítése…",
"relative_time.days": "{number}n",
"relative_time.full.days": "{number, plural, one {# napja} other {# napja}}",
"relative_time.full.hours": "{number, plural, one {# órája} other {# órája}}",
@@ -786,7 +784,7 @@
"search_results.no_search_yet": "Próbálj meg bejegyzések, profilok vagy címkék után keresni.",
"search_results.see_all": "Összes megtekintése",
"search_results.statuses": "Bejegyzések",
- "search_results.title": "\"{q}\" keresése",
+ "search_results.title": "Keresés erre: „{q}”",
"server_banner.about_active_users": "Az elmúlt 30 napban ezt a kiszolgálót használók száma (Havi aktív felhasználók)",
"server_banner.active_users": "aktív felhasználó",
"server_banner.administered_by": "Adminisztrátor:",
diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json
index 235969ad6c..664c6dd31f 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -352,8 +352,6 @@
"privacy_policy.last_updated": "Վերջին անգամ թարմացուել է՝ {date}",
"privacy_policy.title": "Գաղտնիութեան քաղաքականութիւն",
"refresh": "Թարմացնել",
- "regeneration_indicator.label": "Բեռնւում է…",
- "regeneration_indicator.sublabel": "պատրաստւում է հիմնական հոսքդ",
"relative_time.days": "{number}օր",
"relative_time.full.days": "{number, plural, one {# օր} other {# օր}} առաջ",
"relative_time.full.hours": "{number, plural, one {# ժամ} other {# ժամ}} առաջ",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index 4155c6565b..0b17e60710 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -253,7 +253,7 @@
"domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequitores e personas que tu seque de 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.",
+ "domain_pill.activitypub_like_language": "ActivityPub es le linguage commun que Mastodon parla con altere retes social.",
"domain_pill.server": "Servitor",
"domain_pill.their_handle": "Su pseudonymo:",
"domain_pill.their_server": "Su casa digital, ubi vive tote su messages.",
@@ -387,7 +387,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.replies_may_be_missing": "Responsas de altere servitores pote mancar.",
"hints.threads.see_more": "Vider plus de responsas sur {domain}",
"home.column_settings.show_reblogs": "Monstrar impulsos",
"home.column_settings.show_replies": "Monstrar responsas",
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorar notificationes de personas qui non te seque?",
"ignore_notifications_modal.not_following_title": "Ignorar notificationes de personas que tu non seque?",
"ignore_notifications_modal.private_mentions_title": "Ignorar notificationes de mentiones private non requestate?",
- "interaction_modal.description.favourite": "Con un conto sur Mastodon, tu pote marcar iste message como favorite pro informar le autor que tu lo apprecia e lo salva pro plus tarde.",
- "interaction_modal.description.follow": "Con un conto sur Mastodon, tu pote sequer {name} e reciper su messages in tu fluxo de initio.",
- "interaction_modal.description.reblog": "Con un conto sur Mastodon, tu pote impulsar iste message pro condivider lo con tu proprie sequitores.",
- "interaction_modal.description.reply": "Con un conto sur Mastodon, tu pote responder a iste message.",
- "interaction_modal.description.vote": "Con un conto sur Mastodon, tu pote votar in iste sondage.",
- "interaction_modal.login.action": "Porta me a casa",
- "interaction_modal.login.prompt": "Dominio de tu servitor, p.ex. mastodon.social",
- "interaction_modal.no_account_yet": "Non sur Mstodon?",
+ "interaction_modal.action.favourite": "Per favor reveni a tu conto pro marcar isto como favorite.",
+ "interaction_modal.action.follow": "Per favor reveni a tu conto pro sequer.",
+ "interaction_modal.action.reblog": "Per favor reveni a tu conto pro impulsar.",
+ "interaction_modal.action.reply": "Per favor reveni a tu conto pro responder.",
+ "interaction_modal.action.vote": "Per favor reveni a tu conto pro votar.",
+ "interaction_modal.go": "Revenir",
+ "interaction_modal.no_account_yet": "Tu non ha ancora un conto?",
"interaction_modal.on_another_server": "Sur un altere servitor",
"interaction_modal.on_this_server": "Sur iste servitor",
- "interaction_modal.sign_in": "Tu non es in session sur iste servitor. Sur qual servitor se trova tu conto?",
- "interaction_modal.sign_in_hint": "Consilio: Se tracta del sito web ubi tu te ha inscribite. Si tu non te lo rememora, cerca le e-mail de benvenita in tu cassa de entrata. Tu pote etiam inserer tu pseudonymo complete! (p.ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Marcar le message de {name} como favorite",
"interaction_modal.title.follow": "Sequer {name}",
"interaction_modal.title.reblog": "Impulsar le message de {name}",
"interaction_modal.title.reply": "Responder al message de {name}",
"interaction_modal.title.vote": "Votar in le sondage de {name}",
+ "interaction_modal.username_prompt": "P.ex. {example}",
"intervals.full.days": "{number, plural, one {# die} other {# dies}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minutas}}",
@@ -596,7 +594,7 @@
"notification_requests.explainer_for_limited_account": "Le notificationes de iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.",
"notification_requests.explainer_for_limited_remote_account": "Le notificationes de 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.minimize_banner": "Minimisar le bandiera de notificationes filtrate",
"notification_requests.notifications_from": "Notificationes de {name}",
"notification_requests.title": "Notificationes filtrate",
"notification_requests.view": "Vider notificationes",
@@ -638,10 +636,10 @@
"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.drop_hint": "Inviar al vacuo, pro non esser jammais plus vidite",
"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_hint": "Limitate per le moderatores del 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",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Politica de confidentialitate",
"recommended": "Recommendate",
"refresh": "Refrescar",
- "regeneration_indicator.label": "Cargamento…",
- "regeneration_indicator.sublabel": "Tu fluxo de initio es in preparation!",
+ "regeneration_indicator.please_stand_by": "Un momento, per favor.",
+ "regeneration_indicator.preparing_your_home_feed": "Fluxo de initio in preparation…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# die} other {# dies}} retro",
"relative_time.full.hours": "{number, plural, one {# hora} other {# horas}} retro",
@@ -782,8 +780,11 @@
"search_results.accounts": "Profilos",
"search_results.all": "Toto",
"search_results.hashtags": "Hashtags",
+ "search_results.no_results": "Necun resultato.",
+ "search_results.no_search_yet": "Tenta cercar messages, profilos o hashtags.",
"search_results.see_all": "Vider toto",
"search_results.statuses": "Messages",
+ "search_results.title": "Recerca de “{q}”",
"server_banner.about_active_users": "Personas que ha usate iste servitor in le ultime 30 dies (usatores active per mense)",
"server_banner.active_users": "usatores active",
"server_banner.administered_by": "Administrate per:",
@@ -801,7 +802,7 @@
"status.bookmark": "Adder al marcapaginas",
"status.cancel_reblog_private": "Disfacer impulso",
"status.cannot_reblog": "Iste message non pote esser impulsate",
- "status.continued_thread": "Continuation del discussion",
+ "status.continued_thread": "Discussion continuate",
"status.copy": "Copiar ligamine a message",
"status.delete": "Deler",
"status.detailed_status": "Vista detaliate del conversation",
@@ -810,7 +811,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.embed": "Obtener codice de incorporation",
"status.favourite": "Adder al favorites",
"status.favourites": "{count, plural, one {favorite} other {favorites}}",
"status.filter": "Filtrar iste message",
@@ -876,7 +877,7 @@
"upload_form.description": "Describe lo pro le gente con difficultates visual",
"upload_form.drag_and_drop.instructions": "Pro prender un annexo multimedial, preme sur le barra de spatios o Enter. Trahente lo, usa le claves de flecha pro displaciar le annexo multimedial in un certe direction. Preme le barra de spatios o Enter de novo pro deponer le annexo multimedial in su nove position, o preme sur Escape pro cancellar.",
"upload_form.drag_and_drop.on_drag_cancel": "Le displaciamento ha essite cancellate. Le annexo multimedial {item} ha essite deponite.",
- "upload_form.drag_and_drop.on_drag_end": "Le annexo de medios {item} ha essite deponite.",
+ "upload_form.drag_and_drop.on_drag_end": "Le annexo multimedial {item} ha essite deponite.",
"upload_form.drag_and_drop.on_drag_over": "Le annexo multimedial {item} ha essite displaciate.",
"upload_form.drag_and_drop.on_drag_start": "Le annexo multimedial {item} ha essite prendite.",
"upload_form.edit": "Modificar",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index dda0a8e43b..259723777f 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -336,9 +336,6 @@
"home.hide_announcements": "Sembunyikan pengumuman",
"home.pending_critical_update.link": "Lihat pembaruan",
"home.show_announcements": "Tampilkan pengumuman",
- "interaction_modal.description.follow": "Dengan sebuah akun di Mastodon, Anda bisa mengikuti {name} untuk menerima kirimannya di beranda Anda.",
- "interaction_modal.description.reblog": "Dengan sebuah akun di Mastodon, Anda bisa mem-boost kiriman ini untuk membagikannya ke pengikut Anda sendiri.",
- "interaction_modal.description.reply": "Dengan sebuah akun di Mastodon, Anda bisa menanggapi kiriman ini.",
"interaction_modal.on_another_server": "Di server lain",
"interaction_modal.on_this_server": "Di server ini",
"interaction_modal.title.follow": "Ikuti {name}",
@@ -473,8 +470,6 @@
"privacy_policy.last_updated": "Terakhir diperbarui {date}",
"privacy_policy.title": "Kebijakan Privasi",
"refresh": "Segarkan",
- "regeneration_indicator.label": "Memuat…",
- "regeneration_indicator.sublabel": "Beranda Anda sedang disiapkan!",
"relative_time.days": "{number}h",
"relative_time.full.days": "{number, plural, other {# hari}} yang lalu",
"relative_time.full.hours": "{number, plural, other {# jam}} yang lalu",
diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json
index aae8337d05..ae9620ee2f 100644
--- a/app/javascript/mastodon/locales/ie.json
+++ b/app/javascript/mastodon/locales/ie.json
@@ -333,17 +333,8 @@
"home.pending_critical_update.link": "Vider actualisationes",
"home.pending_critical_update.title": "Urgent actualisation de securitá disponibil!",
"home.show_announcements": "Monstrar proclamationes",
- "interaction_modal.description.favourite": "Con un conto de Mastodon, tu posse favoritisar ti-ci posta por informar li autor pri quant mult tu aprecia it e conservar it por plu tard.",
- "interaction_modal.description.follow": "Con un conto de Mastodon, tu posse sequer {name} por reciver su postas in tui hemal témpor-linea.",
- "interaction_modal.description.reblog": "Con un conto de Mastodon, tu posse boostar ti-ci posta por distribuer it a tui propri sequitores.",
- "interaction_modal.description.reply": "Con un conto de Mastodon, tu posse responder a ti-ci posta.",
- "interaction_modal.login.action": "Retorna a hem",
- "interaction_modal.login.prompt": "Dominia de tui hemal servitor, p.ex. mastodon.social",
- "interaction_modal.no_account_yet": "Ne sur Mastodon?",
"interaction_modal.on_another_server": "Sur un servitor diferent",
"interaction_modal.on_this_server": "Sur ti-ci servitor",
- "interaction_modal.sign_in": "Tu ne ha initiat session che ti-ci servitor. U logia tui conto?",
- "interaction_modal.sign_in_hint": "Nota: To es li websitu u tu adheret. Si tu ne rememora, sercha li benevenit-email in tui inbuxe. Tu anc posse introducter tui plen usator-nómine! (p.ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favoritisar li posta de {name}",
"interaction_modal.title.follow": "Sequer {name}",
"interaction_modal.title.reblog": "Boostar li posta de {name}",
@@ -543,8 +534,6 @@
"privacy_policy.title": "Politica pri Privatie",
"recommended": "Recomandat",
"refresh": "Recargar",
- "regeneration_indicator.label": "Cargant…",
- "regeneration_indicator.sublabel": "On es preparant tui hemal témpor-linea!",
"relative_time.days": "{number}d",
"relative_time.full.days": "Ante {number, plural, one {# die} other {# dies}}",
"relative_time.full.hours": "Ante {number, plural, one {# hor} other {# hores}}",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index 560e01ecaf..a87e4bbb2a 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -371,17 +371,8 @@
"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.",
- "interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.",
- "interaction_modal.login.action": "Irar a hemo",
- "interaction_modal.login.prompt": "Domeno di vua hemala servilo, ex. mastodon.social",
- "interaction_modal.no_account_yet": "Ka vu ne havas Mastodon-konto?",
"interaction_modal.on_another_server": "Che diferanta servilo",
"interaction_modal.on_this_server": "Che ca servilo",
- "interaction_modal.sign_in": "Vu ne eniris ca servilo. Ube vua konto lokizesas?",
- "interaction_modal.sign_in_hint": "Averto: To es la retsituo ube vu kreis konto. Se vu ne rimemoras, serchez vua bonvenanta e-posto. Vu anke povas enpozar vua kompleta uzantnomo! (ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favorizez ca posto da {name}",
"interaction_modal.title.follow": "Sequez {name}",
"interaction_modal.title.reblog": "Repetez posto di {name}",
@@ -627,8 +618,6 @@
"privacy_policy.title": "Privatesguidilo",
"recommended": "Rekomendata",
"refresh": "Rifreshez",
- "regeneration_indicator.label": "Chargas…",
- "regeneration_indicator.sublabel": "Vua hemniuzeto preparesas!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dio} other {# dii}} ante nun",
"relative_time.full.hours": "{number, plural, one {# horo} other {# hori}} ante nun",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index 20bf53a456..3043eb323f 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Hunsa tilkynningar frá fólki sem fylgist ekki með þér?",
"ignore_notifications_modal.not_following_title": "Hunsa tilkynningar frá fólki sem þú fylgist ekki með?",
"ignore_notifications_modal.private_mentions_title": "Hunsa tilkynningar frá óumbeðnum tilvísunum í einkaspjalli?",
- "interaction_modal.description.favourite": "Með notandaaðgangi á Mastodon geturðu sett þessa færslu í eftirlæti og þannig látið höfundinn vita að þú kunnir að meta hana og vistað hana til síðari tíma.",
- "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?",
+ "interaction_modal.action.favourite": "Til að halda áfram þarftu að setja eitthvað í eftirlæti, verandi inni á aðgangnum þínum.",
+ "interaction_modal.action.follow": "Til að halda áfram þarftu að fylgjast með einhverjum, verandi inni á aðgangnum þínum.",
+ "interaction_modal.action.reblog": "Til að halda áfram þarftu að endurbirta frá einhverjum, verandi inni á aðgangnum þínum.",
+ "interaction_modal.action.reply": "Til að halda áfram þarftu að svara einhverjum, verandi inni á aðgangnum þínum.",
+ "interaction_modal.action.vote": "Til að halda áfram þarftu að greiða atkvæði, verandi inni á aðgangnum þínum.",
+ "interaction_modal.go": "Áfram",
+ "interaction_modal.no_account_yet": "Ertu ekki ennþá með aðgang?",
"interaction_modal.on_another_server": "Á öðrum netþjóni",
"interaction_modal.on_this_server": "Á þessum netþjóni",
- "interaction_modal.sign_in": "Þú ert ekki skráð/ur inn á þennan netþjón. Hvar er aðgangurinn þinn hýstur?",
- "interaction_modal.sign_in_hint": "Ábending: Það er vefsvæðið þar sem þú skráðir þig. Ef þú manst ekki hvar, geturðu leitað að kynningarpóstinum í pósthólfinu þínu. Þú getur líka sett inn fullt notandanafn þitt (t.d. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Setja færsluna frá {name} í eftirlæti",
"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}",
+ "interaction_modal.username_prompt": "Til dæmis {example}",
"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}}",
@@ -549,6 +547,8 @@
"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.favourite_pm": "{name} setti í eftirlæti færslu í einkaspjalli þar sem þú minntist á viðkomandi",
+ "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# í viðbót} other {# í viðbót}} settu í eftirlæti færslu í einkaspjalli þar sem þú minntist á viðkomandi",
"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_request": "{name} hefur beðið um að fylgjast með þér",
@@ -695,8 +695,8 @@
"privacy_policy.title": "Persónuverndarstefna",
"recommended": "Mælt með",
"refresh": "Endurlesa",
- "regeneration_indicator.label": "Hleð inn…",
- "regeneration_indicator.sublabel": "Verið er að útbúa heimastreymið þitt!",
+ "regeneration_indicator.please_stand_by": "Hinkraðu við.",
+ "regeneration_indicator.preparing_your_home_feed": "Undirbý heimastreymið þitt…",
"relative_time.days": "{number}d",
"relative_time.full.days": "Fyrir {number, plural, one {# degi} other {# dögum}} síðan",
"relative_time.full.hours": "Fyrir {number, plural, one {# klukkustund} other {# klukkustundum}} síðan",
@@ -780,8 +780,11 @@
"search_results.accounts": "Notendasnið",
"search_results.all": "Allt",
"search_results.hashtags": "Myllumerki",
+ "search_results.no_results": "Engar niðurstöður.",
+ "search_results.no_search_yet": "Prófaðu að leita að færslum, notendum eða myllumerkjum.",
"search_results.see_all": "Sjá allt",
"search_results.statuses": "Færslur",
+ "search_results.title": "Leita að {q}\"",
"server_banner.about_active_users": "Folk sem hefur notað þennan netþjón síðustu 30 daga (virkir notendur í mánuðinum)",
"server_banner.active_users": "virkir notendur",
"server_banner.administered_by": "Stýrt af:",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index 1b82399a50..a6ec1693ec 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorare le notifiche delle persone che non ti seguono?",
"ignore_notifications_modal.not_following_title": "Ignorare le notifiche delle persone che non segui?",
"ignore_notifications_modal.private_mentions_title": "Ignorare le notifiche provenienti da menzioni private indesiderate?",
- "interaction_modal.description.favourite": "Con un account su Mastodon, puoi aggiungere questo post ai preferiti per far sapere all'autore che lo apprezzi e salvarlo per dopo.",
- "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?",
+ "interaction_modal.action.favourite": "Per continuare, devi aggiungere ai preferiti il tuo account.",
+ "interaction_modal.action.follow": "Per continuare, devi seguire dal tuo account.",
+ "interaction_modal.action.reblog": "Per continuare, devi condividere dal tuo account.",
+ "interaction_modal.action.reply": "Per continuare, devi rispondere dal tuo account.",
+ "interaction_modal.action.vote": "Per continuare, devi votare dal tuo account.",
+ "interaction_modal.go": "Vai",
+ "interaction_modal.no_account_yet": "Non hai ancora un account?",
"interaction_modal.on_another_server": "Su un altro server",
"interaction_modal.on_this_server": "Su questo server",
- "interaction_modal.sign_in": "Non sei connesso a questo server. Dove è ospitato il tuo account?",
- "interaction_modal.sign_in_hint": "Suggerimento: questo è il sito in cui ti sei registrato. Se non ti ricordi, cerca l'e-mail di benvenuto nella tua casella di posta. Puoi anche inserire il tuo nome utente completo! (es. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Contrassegna il post di {name} come preferito",
"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}",
+ "interaction_modal.username_prompt": "Es. {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Politica sulla Privacy",
"recommended": "Consigliato",
"refresh": "Ricarica",
- "regeneration_indicator.label": "Caricamento…",
- "regeneration_indicator.sublabel": "Il feed della tua home è in preparazione!",
+ "regeneration_indicator.please_stand_by": "Si prega di rimanere in attesa.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparazione della tua home feed in corso…",
"relative_time.days": "{number}g",
"relative_time.full.days": "{number, plural, one {# giorno} other {# giorni}} fa",
"relative_time.full.hours": "{number, plural, one {# ora} other {# ore}} fa",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index bd9717eb26..689f33ece3 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -488,6 +488,7 @@
"footer.privacy_policy": "プライバシーポリシー",
"footer.source_code": "ソースコードを表示",
"footer.status": "ステータス",
+ "footer.terms_of_service": "サービス利用規約",
"generic.saved": "保存しました",
"getting_started.heading": "スタート",
"hashtag.admin_moderation": "#{name}のモデレーション画面を開く",
@@ -532,18 +533,8 @@
"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のアカウントでこの投稿をブーストして自分のフォロワーに共有できます。",
- "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にアカウントがない場合は",
"interaction_modal.on_another_server": "別のサーバー",
"interaction_modal.on_this_server": "このサーバー",
- "interaction_modal.sign_in": "このサーバーにアカウントがなくても、ほかのサーバーや互換性のあるプラットフォームのアカウントを使用できます。",
- "interaction_modal.sign_in_hint": "ワンポイント: ここでは自分のアカウントのドメインを入力します。うまくいかない場合はドメインまで含めた完全なユーザー名を入力してみてください (例: @Mastodon@mastodon.social)。ドメインやユーザー名は登録完了時のメールに記載されています。",
"interaction_modal.title.favourite": "{name}さんの投稿をお気に入り登録",
"interaction_modal.title.follow": "{name}さんをフォロー",
"interaction_modal.title.reblog": "{name}さんの投稿をブースト",
@@ -689,6 +680,8 @@
"notification.emoji_reaction.name_and_others_with_link": "{name}さんと{count, plural, other {他#名}}があなたの投稿に絵文字をつけました",
"notification.favourite": "{name}さんがお気に入りしました",
"notification.favourite.name_and_others_with_link": "{name}さんとほか{count, plural, other {#人}}がお気に入りしました",
+ "notification.favourite_pm": "{name} があなたのプライベートメンションをお気に入りにしました",
+ "notification.favourite_pm.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}さんがあなたにフォローリクエストしました",
@@ -857,8 +850,8 @@
"reaction_deck.remove": "削除",
"recommended": "おすすめ",
"refresh": "更新",
- "regeneration_indicator.label": "読み込み中…",
- "regeneration_indicator.sublabel": "ホームタイムラインは準備中です!",
+ "regeneration_indicator.please_stand_by": "しばらくお待ちください。",
+ "regeneration_indicator.preparing_your_home_feed": "ホームタイムライン準備中…",
"relative_time.days": "{number}日前",
"relative_time.full.days": "{number}日前",
"relative_time.full.hours": "{number}時間前",
@@ -954,8 +947,11 @@
"search_results.accounts": "ユーザー",
"search_results.all": "すべて",
"search_results.hashtags": "ハッシュタグ",
+ "search_results.no_results": "結果なし。",
+ "search_results.no_search_yet": "投稿、プロフィール、またはハッシュタグを検索してみてください。",
"search_results.see_all": "すべて表示",
"search_results.statuses": "投稿",
+ "search_results.title": "「{q}」を検索",
"server_banner.about_active_users": "過去30日間にこのサーバーを使用している人 (月間アクティブユーザー)",
"server_banner.active_users": "人のアクティブユーザー",
"server_banner.administered_by": "管理者",
@@ -1047,6 +1043,7 @@
"subscribed_languages.target": "{target}さんの購読言語を変更します",
"tabs_bar.home": "ホーム",
"tabs_bar.notifications": "通知",
+ "terms_of_service.title": "サービス利用規約",
"time_remaining.days": "残り{number}日",
"time_remaining.hours": "残り{number}時間",
"time_remaining.minutes": "残り{number}分",
diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json
index 1b35b81384..b1832888c5 100644
--- a/app/javascript/mastodon/locales/ka.json
+++ b/app/javascript/mastodon/locales/ka.json
@@ -175,8 +175,6 @@
"notifications.group": "{count} შეტყობინება",
"privacy.change": "სტატუსის კონფიდენციალურობის მითითება",
"privacy.public.short": "საჯარო",
- "regeneration_indicator.label": "იტვირთება…",
- "regeneration_indicator.sublabel": "თქვენი სახლის ლენტა მზადდება!",
"relative_time.days": "{number}დღ",
"relative_time.hours": "{number}სთ",
"relative_time.just_now": "ახლა",
diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json
index 723ea01cb0..5914b33c2a 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -278,17 +278,8 @@
"home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !",
"home.pending_critical_update.link": "Wali ileqman",
"home.show_announcements": "Ssken-d ulɣuyen",
- "interaction_modal.description.favourite": "S umiḍan ɣef Mastodon, tzemreḍ ad tesmenyifeḍ tasuffeɣt-a akken ad teǧǧeḍ amaru ad iẓer belli tḥemmleḍ-tt u ad tt-id-tsellkeḍ i ticki.",
- "interaction_modal.description.follow": "S umiḍan deg Mastodon, tzemreḍ ad tḍefreḍ {name} akken ad d-teṭṭfeḍ iznan-is deg lxiḍ-ik·im agejdan.",
- "interaction_modal.description.reblog": "S umiḍan deg Mastodon, tzemreḍ ad tesnerniḍ tasuffeɣt-a akken ad tt-tebḍuḍ d yineḍfaren-ik·im.",
- "interaction_modal.description.reply": "S umiḍan deg Mastodon, tzemreḍ ad d-terreḍ ɣef tsuffeɣt-a.",
- "interaction_modal.login.action": "Awi-yi ɣer uqeddac-iw",
- "interaction_modal.login.prompt": "Taɣult n uqeddac-ik·im agejdan, amedya mastodon.social",
- "interaction_modal.no_account_yet": "Ulac-ik·ikem deg Maṣṭudun?",
"interaction_modal.on_another_server": "Deg uqeddac nniḍen",
"interaction_modal.on_this_server": "Deg uqeddac-ayi",
- "interaction_modal.sign_in": "Ur tekcimeḍ ara ɣer uqeddac-a. Anda yella umiḍan-ik·im ?",
- "interaction_modal.sign_in_hint": "Ihi : Wa d asmel ideg tjerdeḍ. Ma ur tecfiḍ ara, nadi imayl n ummager deg tenkult-ik·im. Tzemreḍ daɣen ad d-tefkeḍ isem-ik·im n useqdac ummid ! (amedya @Mastodon@mastodon.social)",
"interaction_modal.title.follow": "Ḍfer {name}",
"interaction_modal.title.reply": "Tiririt i tsuffeɣt n {name}",
"intervals.full.days": "{number, plural, one {# wass} other {# wussan}}",
@@ -469,8 +460,6 @@
"privacy_policy.title": "Tasertit tabaḍnit",
"recommended": "Yettuwelleh",
"refresh": "Smiren",
- "regeneration_indicator.label": "Yessalay-d…",
- "regeneration_indicator.sublabel": "Tasuddemt tagejdant ara d-tettwaheggay!",
"relative_time.days": "{number}u",
"relative_time.full.just_now": "tura kan",
"relative_time.hours": "{number}isr",
diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json
index 74199fcf4b..b3678806b3 100644
--- a/app/javascript/mastodon/locales/kk.json
+++ b/app/javascript/mastodon/locales/kk.json
@@ -262,8 +262,6 @@
"privacy.change": "Құпиялылықты реттеу",
"privacy.public.short": "Ашық",
"refresh": "Жаңарту",
- "regeneration_indicator.label": "Жүктеу…",
- "regeneration_indicator.sublabel": "Жергілікті желі құрылуда!",
"relative_time.days": "{number}күн",
"relative_time.hours": "{number}сағ",
"relative_time.just_now": "жаңа",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index c5d781776c..4d9952ccb6 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -407,18 +407,8 @@
"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": "마스토돈 계정을 통해, 이 게시물을 부스트 하고 자신의 팔로워들에게 공유할 수 있습니다.",
- "interaction_modal.description.reply": "마스토돈 계정을 통해, 이 게시물에 응답할 수 있습니다.",
- "interaction_modal.description.vote": "마스토돈 계정을 통해, 이 투표에 참여할 수 있습니다.",
- "interaction_modal.login.action": "홈 서버로 가기",
- "interaction_modal.login.prompt": "내 홈 서버의 도메인. 예시: mastodon.social",
- "interaction_modal.no_account_yet": "Mastodon 계정이 없나요?",
"interaction_modal.on_another_server": "다른 서버에",
"interaction_modal.on_this_server": "이 서버에서",
- "interaction_modal.sign_in": "이 서버에 로그인하지 않았습니다. 계정이 어디에 속해있습니까?",
- "interaction_modal.sign_in_hint": "팁: 여러분이 가입한 사이트입니다. 만약 기억이 나지 않는다면 가입환영 이메일을 찾아보는 것도 좋습니다. 전체 사용자이름(예: @mastodon@mastodon.social)을 넣어도 됩니다!",
"interaction_modal.title.favourite": "{name} 님의 게시물을 좋아하기",
"interaction_modal.title.follow": "{name} 님을 팔로우",
"interaction_modal.title.reblog": "{name} 님의 게시물을 부스트",
@@ -641,7 +631,7 @@
"notifications.policy.drop_hint": "공허로 보내고, 다시는 보지 않습니다",
"notifications.policy.filter": "필터",
"notifications.policy.filter_hint": "걸러진 알림 목록으로 보내기",
- "notifications.policy.filter_limited_accounts_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": "새 계정",
@@ -697,8 +687,8 @@
"privacy_policy.title": "개인정보처리방침",
"recommended": "추천함",
"refresh": "새로고침",
- "regeneration_indicator.label": "불러오는 중…",
- "regeneration_indicator.sublabel": "홈 피드를 준비하고 있습니다!",
+ "regeneration_indicator.please_stand_by": "잠시 기다려주세요.",
+ "regeneration_indicator.preparing_your_home_feed": "홈 피드를 준비 중입니다…",
"relative_time.days": "{number}일 전",
"relative_time.full.days": "{number} 일 전",
"relative_time.full.hours": "{number} 시간 전",
@@ -782,8 +772,11 @@
"search_results.accounts": "프로필",
"search_results.all": "전부",
"search_results.hashtags": "해시태그",
+ "search_results.no_results": "결과가 없습니다.",
+ "search_results.no_search_yet": "게시물, 프로필, 해시태그를 검색해보세요.",
"search_results.see_all": "모두 보기",
"search_results.statuses": "게시물",
+ "search_results.title": "\"{q}\"에 대한 검색",
"server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)",
"server_banner.active_users": "활성 사용자",
"server_banner.administered_by": "관리자:",
diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json
index f69cc488c7..ccd0160ac2 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -243,9 +243,6 @@
"home.column_settings.show_replies": "Bersivan nîşan bide",
"home.hide_announcements": "Reklaman veşêre",
"home.show_announcements": "Reklaman nîşan bide",
- "interaction_modal.description.follow": "Bi ajimêrekê li ser Mastodon, tu dikarî {name} bişopînî da ku şandiyan li ser rojeva rûpela xwe bi dest bixe.",
- "interaction_modal.description.reblog": "Bi ajimêrekê li ser Mastodon, tu dikarî vê şandiyê bilind bikî da ku wê bi şopînerên xwe re parve bikî.",
- "interaction_modal.description.reply": "Bi ajimêrekê li ser Mastodon, tu dikarî bersiva vê şandiyê bidî.",
"interaction_modal.on_another_server": "Li ser rajekareke cuda",
"interaction_modal.on_this_server": "Li ser ev rajekar",
"interaction_modal.title.follow": "{name} bişopîne",
@@ -376,8 +373,6 @@
"privacy_policy.last_updated": "Rojanekirina dawî {date}",
"privacy_policy.title": "Politîka taybetiyê",
"refresh": "Nû bike",
- "regeneration_indicator.label": "Tê barkirin…",
- "regeneration_indicator.sublabel": "Naveroka rûpela sereke ya te tê amedekirin!",
"relative_time.days": "{number}r",
"relative_time.full.days": "{number, plural, one {# roj} other {# roj}} berê",
"relative_time.full.hours": "{number, plural, one {# demjimêr} other {# demjimêr}} berê",
diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json
index 476038e978..8f2c911502 100644
--- a/app/javascript/mastodon/locales/kw.json
+++ b/app/javascript/mastodon/locales/kw.json
@@ -261,8 +261,6 @@
"privacy.change": "Chanjya privetter an post",
"privacy.public.short": "Poblek",
"refresh": "Daskarga",
- "regeneration_indicator.label": "Ow karga…",
- "regeneration_indicator.sublabel": "Yma agas lin dre ow pos pareusys!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}o",
"relative_time.just_now": "lemmyn",
diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json
index d0d7c574a0..cdba826126 100644
--- a/app/javascript/mastodon/locales/la.json
+++ b/app/javascript/mastodon/locales/la.json
@@ -95,10 +95,6 @@
"hashtags.and_other": "…et {count, plural, other {# plus}}",
"ignore_notifications_modal.filter_to_act_users": "Adhuc poteris accipere, reicere, vel referre usores",
"ignore_notifications_modal.filter_to_review_separately": "Percolantur notificatiōnes separātim recensere potes",
- "interaction_modal.description.favourite": "Cum accūntū in Mastodon, hanc postem praeferre potes ut auctōrī indicēs tē eam aestimāre et ad posterius servēs.",
- "interaction_modal.description.follow": "Cum accūntū in Mastodon, {name} sequī potes ut eōrum postēs in tēlā domī tuā recipiās.",
- "interaction_modal.description.reply": "Mastodon de Ratione, huic nuntio respondere potes.",
- "interaction_modal.sign_in": "Ad hōc servientem nōn dēlūxī. Ubi accūntum tuum hospitātum est?",
"intervals.full.days": "{number, plural, one {# die} other {# dies}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horae}}",
"intervals.full.minutes": "{number, plural, one {# minutum} other {# minuta}}",
@@ -177,7 +173,6 @@
"poll_button.remove_poll": "Auferre electionem",
"privacy.change": "Adjust status privacy",
"privacy.public.short": "Coram publico",
- "regeneration_indicator.sublabel": "Tua domus feed praeparātur!",
"relative_time.full.days": "{number, plural, one {# ante die} other {# ante dies}}",
"relative_time.full.hours": "{number, plural, one {# ante horam} other {# ante horas}}",
"relative_time.full.just_now": "nunc",
diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json
index 1371720676..45d9852e9e 100644
--- a/app/javascript/mastodon/locales/lad.json
+++ b/app/javascript/mastodon/locales/lad.json
@@ -363,18 +363,8 @@
"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?",
"ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?",
- "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.",
- "interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.",
- "interaction_modal.description.vote": "Kon un kuento en Mastodon, puedes votar en esta anketa.",
- "interaction_modal.login.action": "Va a tu sirvidor",
- "interaction_modal.login.prompt": "Domeno del sirvidor de tu kuento, por enshemplo mastodon.social",
- "interaction_modal.no_account_yet": "No tyenes kuento de Mastodon?",
"interaction_modal.on_another_server": "En otro sirvidor",
"interaction_modal.on_this_server": "En este sirvidor",
- "interaction_modal.sign_in": "No estas konektado kon este sirvidor. Ande tyenes tu kuento?",
- "interaction_modal.sign_in_hint": "Konsejo: Akel es el sitio adonde te enrejistrates. Si no lo akodras, bushka el mesaj de posta elektronika de bienvenida en tu kuti de arivo. Tambien puedes eskrivir tu nombre de utilizador kompleto (por enshemplo @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Endika ke te plaze publikasyon de {name}",
"interaction_modal.title.follow": "Sige a {name}",
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
@@ -592,8 +582,6 @@
"privacy_policy.title": "Politika de privasita",
"recommended": "Rekomendado",
"refresh": "Arefreska",
- "regeneration_indicator.label": "Eskargando…",
- "regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!",
"relative_time.days": "{number} d",
"relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}",
"relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 107667f056..1d67b47b42 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -403,23 +403,21 @@
"ignore_notifications_modal.not_followers_title": "Ignoruoti pranešimus iš žmonių, kurie tave neseka?",
"ignore_notifications_modal.not_following_title": "Ignoruoti pranešimus iš žmonių, kuriuos neseki?",
"ignore_notifications_modal.private_mentions_title": "Ignoruoti pranešimus iš neprašytų privačių paminėjimų?",
- "interaction_modal.description.favourite": "Su Mastodon paskyra gali pamėgti šį įrašą, kad autorius (-ė) žinotų, jog vertinti tai ir išsaugoti jį vėliau.",
- "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?",
+ "interaction_modal.action.favourite": "Kad tęstumėte, turite pamėgti iš savo paskyros.",
+ "interaction_modal.action.follow": "Kad tęstumėte, turite sekti iš savo paskyros.",
+ "interaction_modal.action.reblog": "Kad tęstumėte, turite pasidalinti iš savo paskyros.",
+ "interaction_modal.action.reply": "Kad tęstumėte, turite atsakyti iš savo paskyros.",
+ "interaction_modal.action.vote": "Kad tęstumėte, turite balsuoti iš savo paskyros.",
+ "interaction_modal.go": "Eiti",
+ "interaction_modal.no_account_yet": "Dar neturite paskyros?",
"interaction_modal.on_another_server": "Kitame serveryje",
"interaction_modal.on_this_server": "Šiame serveryje",
- "interaction_modal.sign_in": "Nesi prisijungęs (-usi) prie šio serverio. Kur yra talpinama tavo paskyra?",
- "interaction_modal.sign_in_hint": "Patarimas: tai svetainė, kurioje užsiregistravai. Jei neprisimeni, ieškok sveikinimo el. laiško savo pašto dėžutėje. Taip pat gali įvesti visą savo naudotojo vardą (pvz., @Mastodon@mastodon.social).",
"interaction_modal.title.favourite": "Pamėgti {name} įrašą",
"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",
+ "interaction_modal.username_prompt": "Pvz., {example}",
"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ų}}",
@@ -684,8 +682,8 @@
"privacy_policy.title": "Privatumo politika",
"recommended": "Rekomenduojama",
"refresh": "Atnaujinti",
- "regeneration_indicator.label": "Kraunama…",
- "regeneration_indicator.sublabel": "Ruošiamas tavo pagrindinis srautas!",
+ "regeneration_indicator.please_stand_by": "Laukite.",
+ "regeneration_indicator.preparing_your_home_feed": "Ruošimas jūsų pagrindinis srautas…",
"relative_time.days": "{number} d.",
"relative_time.full.days": "prieš {number, plural, one {# dieną} few {# dienas} many {# dienos} other {# dienų}}",
"relative_time.full.hours": "prieš {number, plural, one {# valandą} few {# valandas} many {# valandos} other {# valandų}}",
@@ -769,8 +767,11 @@
"search_results.accounts": "Profiliai",
"search_results.all": "Visi",
"search_results.hashtags": "Saitažodžiai",
+ "search_results.no_results": "Nėra rezultatų.",
+ "search_results.no_search_yet": "Pabandykite ieškoti įrašų, profilių arba saitažodžių.",
"search_results.see_all": "Žiūrėti viską",
"search_results.statuses": "Įrašai",
+ "search_results.title": "Paieška užklausai „{q}“",
"server_banner.about_active_users": "Žmonės, kurie naudojosi šiuo serveriu per pastarąsias 30 dienų (mėnesio aktyvūs naudotojai)",
"server_banner.active_users": "aktyvūs naudotojai",
"server_banner.administered_by": "Administruoja:",
diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json
index e1a0bfbfac..cf6796c2f5 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -353,17 +353,8 @@
"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.",
- "interaction_modal.description.reply": "Ar Mastodon kontu tu vari atbildēt uz šo ziņu.",
- "interaction_modal.login.action": "Nogādāt mani mājās",
- "interaction_modal.login.prompt": "Tavas mājvietas servera domēns, piem., mastodon.social",
- "interaction_modal.no_account_yet": "Neesi Mastodon?",
"interaction_modal.on_another_server": "Citā serverī",
"interaction_modal.on_this_server": "Šajā serverī",
- "interaction_modal.sign_in": "Tu neesi pieteicies šajā serverī. Kur tiek mitināts Tavs konts?",
- "interaction_modal.sign_in_hint": "Padoms: tā ir tīmekļvietne, kurā Tu reģistrējies. Ja neatceries, jāmeklē sveiciena e-pasts savā iesūtnē. Vari arī ievadīt pilnu lietotājvārdu (piem., @Mastodon@mastodon.social).",
"interaction_modal.title.favourite": "Pievienot {name} ziņu izlasei",
"interaction_modal.title.follow": "Sekot {name}",
"interaction_modal.title.reblog": "Pastiprināt {name} ierakstu",
@@ -553,8 +544,6 @@
"privacy_policy.title": "Privātuma politika",
"recommended": "Ieteicams",
"refresh": "Atsvaidzināt",
- "regeneration_indicator.label": "Ielādē…",
- "regeneration_indicator.sublabel": "Tiek gatavota tava plūsma!",
"relative_time.days": "{number}d",
"relative_time.full.days": "Pirms {number, plural, one {# dienas} other {# dienām}}",
"relative_time.full.hours": "Pirms {number, plural, one {# stundas} other {# stundām}}",
diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json
index b30e70b097..3dffd8b816 100644
--- a/app/javascript/mastodon/locales/mk.json
+++ b/app/javascript/mastodon/locales/mk.json
@@ -198,8 +198,6 @@
"privacy.change": "Штеловај статус на приватност",
"privacy.public.short": "Јавно",
"refresh": "Освежи",
- "regeneration_indicator.label": "Вчитување…",
- "regeneration_indicator.sublabel": "Вашиот новости се подготвуваат!",
"relative_time.days": "{number}д",
"relative_time.hours": "{number}ч",
"relative_time.just_now": "сега",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index a067dc95ba..49f19f7b36 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -228,9 +228,6 @@
"home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്ക്കുക",
"home.pending_critical_update.link": "പുതുകൾ കാണുക",
"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}-െ പിന്തുടരുക",
@@ -343,8 +340,6 @@
"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}മണി",
diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json
index 14cec77cb7..9c4accb81b 100644
--- a/app/javascript/mastodon/locales/mr.json
+++ b/app/javascript/mastodon/locales/mr.json
@@ -122,9 +122,6 @@
"home.column_settings.show_replies": "उत्तरे दाखवा",
"home.hide_announcements": "घोषणा लपवा",
"home.show_announcements": "घोषणा दाखवा",
- "interaction_modal.description.follow": "मॅस्टोडॉन वरील खात्यासह, तुम्ही त्यांच्या पोस्ट तुमच्या होम फीडमध्ये प्राप्त करण्यासाठी {name} चे अनुसरण करू शकता.",
- "interaction_modal.description.reblog": "मॅस्टोडॉन वरील खात्यासह, तुम्ही ही पोस्ट तुमच्या स्वतःच्या अनुयायांसह शेअर करण्यासाठी बूस्ट करू शकता.",
- "interaction_modal.description.reply": "मॅस्टोडॉनवरील खात्यासह, तुम्ही या पोस्टला प्रतिसाद देऊ शकता.",
"interaction_modal.on_another_server": "वेगळ्या सर्व्हरवर",
"interaction_modal.on_this_server": "या सर्व्हरवर",
"interaction_modal.title.follow": "{name} चे अनुसरण करा",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index fe8a724918..108d0a9ed9 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -300,17 +300,8 @@
"home.pending_critical_update.link": "Lihat pengemaskinian",
"home.pending_critical_update.title": "Kemas kini keselamatan kritikal tersedia!",
"home.show_announcements": "Tunjukkan pengumuman",
- "interaction_modal.description.favourite": "Dengan akaun di Mastodon, anda boleh menggemari pos ini untuk memberitahu pengarang anda menghargainya dan menyimpannya untuk kemudian.",
- "interaction_modal.description.follow": "Dengan akaun pada Mastodon, anda boleh mengikut {name} untuk menerima hantaran mereka di suapan rumah anda.",
- "interaction_modal.description.reblog": "Dengan akaun pada Mastodon, anda boleh menggalakkan hantaran ini untuk dikongsi dengan pengikut anda.",
- "interaction_modal.description.reply": "Dengan akaun pada Mastodon, anda boleh membalas kepada hantaran ini.",
- "interaction_modal.login.action": "Bawa saya pulang rumah",
- "interaction_modal.login.prompt": "Domain server utama anda, mis. mastodon.social",
- "interaction_modal.no_account_yet": "Tak di Mastadon?",
"interaction_modal.on_another_server": "Di pelayan lain",
"interaction_modal.on_this_server": "Pada pelayan ini",
- "interaction_modal.sign_in": "Anda tidak log masuk ke server ini. Di manakah akaun anda dihoskan?",
- "interaction_modal.sign_in_hint": "Petua: Itulah tapak web tempat anda mendaftar. Jika anda tidak ingat, cari e-mel alu-aluan dalam peti masuk anda. Anda juga boleh memasukkan nama pengguna penuh anda! (cth. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Pos {name} kegemaran",
"interaction_modal.title.follow": "Ikuti {name}",
"interaction_modal.title.reblog": "Galak hantaran {name}",
@@ -464,8 +455,6 @@
"privacy_policy.title": "Dasar Privasi",
"recommended": "Disyorkan",
"refresh": "Muat semula",
- "regeneration_indicator.label": "Memuatkan…",
- "regeneration_indicator.sublabel": "Suapan rumah anda sedang disediakan!",
"relative_time.days": "{number}h",
"relative_time.full.days": "{number, plural, other {# hari}} yang lalu",
"relative_time.full.hours": "{number, plural, other {# jam}} yang lalu",
diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json
index ade740e17f..947cf7cdb6 100644
--- a/app/javascript/mastodon/locales/my.json
+++ b/app/javascript/mastodon/locales/my.json
@@ -278,17 +278,8 @@
"home.pending_critical_update.link": "အပ်ဒိတ်များကြည့်ရန်",
"home.pending_critical_update.title": "အရေးကြီးသည့် လုံခြုံရေးအပ်ဒိတ် ရနိုင်ပါမည်။",
"home.show_announcements": "ကြေညာချက်များကို ပြပါ",
- "interaction_modal.description.favourite": "Mastodon အကောင့်ဖြင့် ဤပို့စ်ကို သင် favorite ပြုလုပ်ကြောင်း စာရေးသူအား အသိပေးပြီး နောက်ပိုင်းတွင် သိမ်းဆည်းနိုင်သည်။",
- "interaction_modal.description.follow": "Mastodon အကောင့်ဖြင့် သင်၏ ပင်မစာမျက်နှာတွင် ၎င်းတို့၏ ပို့စ်များကို ရရှိရန်အတွက် {name} ကို စောင့်ကြည့်နိုင်ပါသည်။",
- "interaction_modal.description.reblog": "Mastodon အကောင့်တစ်ခုဖြင့် သင်၏စောင့်ကြည့်သူများကို မျှဝေရန်အတွက် ဤပို့စ်ကို Boost လုပ်ပါ။",
- "interaction_modal.description.reply": "Mastodon အကောင့်တစ်ခုဖြင့် သင် ဤပို့စ်ကို တုံ့ပြန်နိုင်ပါသည်။",
- "interaction_modal.login.action": "ပင်မစာမျက်နှာသို့",
- "interaction_modal.login.prompt": "သင့်ပင်မဆာဗာ၏ ဒိုမိန်း၊ ဥပမာ၊ mastodon.social",
- "interaction_modal.no_account_yet": "Mastodon မှာ မဟုတ်ဘူးလား။",
"interaction_modal.on_another_server": "တခြားဆာဗာပေါ်တွင်",
"interaction_modal.on_this_server": "ဤဆာဗာတွင်",
- "interaction_modal.sign_in": "သင်သည် ဤဆာဗာတွင် လော့ဂ်အင်မဝင်ပါ။ သင့်အကောင့်ကို မည်သည့်ဆာဗာတွင် ဖွင့်ထားပါသလဲ။",
- "interaction_modal.sign_in_hint": "အကြံပြုချက် - ၎င်းသည် သင် အကောင့်ဖွင့်ထားသည့် ဝဘ်ဆိုက်ဖြစ်သည်။ မမှတ်မိပါက သင့် ဝင်စာပုံးရှိ welcome e-mail ကို ရှာပါ။ သင့်အသုံးပြုသူအမည်အပြည့်အစုံကိုလည်း ထည့်သွင်းနိုင်သည်။ (ဥပမာ @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favorite {name} ၏ ပို့စ်",
"interaction_modal.title.follow": "{name} ကို စောင့်ကြည့်မယ်",
"interaction_modal.title.reblog": "{name} ၏ ပို့စ်ကို Boost လုပ်ပါ",
@@ -440,8 +431,6 @@
"privacy_policy.title": "ကိုယ်ရေးအချက်အလက်မူဝါဒ",
"recommended": "အကြံပြုသည်",
"refresh": "ပြန်လည်စတင်ပါ",
- "regeneration_indicator.label": "လုပ်ဆောင်နေသည်…",
- "regeneration_indicator.sublabel": "သင့်ပင်မစာမျက်နှာကို ပြင်ဆင်နေပါသည်။",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json
index 4cbcad35bd..ff73385b52 100644
--- a/app/javascript/mastodon/locales/nan.json
+++ b/app/javascript/mastodon/locales/nan.json
@@ -38,8 +38,75 @@
"account.following": "Lí跟tuè ê",
"account.following_counter": "Teh跟tuè {count,plural,other {{count} ê lâng}}",
"account.follows.empty": "Tsit ê用者iáu buē跟tuè別lâng。",
+ "account.go_to_profile": "行kàu個人資料",
+ "account.hide_reblogs": "Tshàng tuì @{name} 來ê轉PO",
+ "account.in_memoriam": "佇tsia追悼。",
+ "account.joined_short": "加入ê時",
+ "account.languages": "變更訂閱的語言",
+ "account.link_verified_on": "Tsit ê連結ê所有權佇 {date} 受檢查",
+ "account.locked_info": "Tsit ê口座ê隱私狀態鎖起來ah。所有者ē手動審查thang kā跟tuè ê lâng。",
+ "account.media": "媒體",
+ "account.mention": "提起 @{name}",
+ "account.moved_to": "{name} 指示tsit-má伊ê新口座是:",
+ "account.mute": "消音 @{name}",
+ "account.mute_notifications_short": "Kā通知消音",
+ "account.mute_short": "消音",
+ "account.muted": "消音ah",
+ "account.mutual": "相跟tuè",
+ "account.no_bio": "Bô提供敘述。",
+ "account.open_original_page": "開原來ê頁",
+ "account.posts": "PO文",
+ "account.posts_with_replies": "PO文kap回應",
+ "account.report": "檢舉 @{name}",
+ "account.requested": "Teh等待審查。Tshi̍h tsi̍t-ē 通取消跟tuè請求",
+ "account.requested_follow": "{name} 請求跟tuè lí",
+ "account.share": "分享 @{name} ê個人資料",
+ "account.show_reblogs": "顯示uì @{name} 來ê轉PO",
+ "account.statuses_counter": "{count, plural, other {{count} ê PO文}}",
+ "account.unblock": "取消封鎖 @{name}",
+ "account.unblock_domain": "Kā域名 {domain} 取消封鎖",
+ "account.unblock_short": "取消封鎖",
+ "account.unendorse": "Mài tī個人資料推薦伊",
+ "account.unfollow": "取消跟tuè",
+ "account.unmute": "取消消音 @{name}",
+ "account.unmute_notifications_short": "Kā通知取消消音",
+ "account.unmute_short": "取消消音",
+ "account_note.placeholder": "Tshi̍h tse加註kha",
+ "admin.dashboard.monthly_retention": "註冊以後ê用者維持率",
+ "admin.dashboard.retention.average": "平均",
+ "admin.dashboard.retention.cohort": "註冊ê月",
+ "admin.dashboard.retention.cohort_size": "新用者",
+ "admin.impact_report.instance_accounts": "個人資料ē hőng thâi掉ê用者數",
+ "admin.impact_report.instance_followers": "本站ê跟tuè者ē流失ê數",
+ "admin.impact_report.instance_follows": "In ê跟tuè者ē流失ê數",
+ "admin.impact_report.title": "影響ê摘要",
+ "alert.rate_limited.message": "請tī {retry_time, time, medium} 以後koh試。",
+ "alert.rate_limited.title": "限速ah",
+ "alert.unexpected.message": "發生意外ê錯誤。.",
+ "alert.unexpected.title": "Ai-ioh!",
+ "alt_text_badge.title": "替代文字",
+ "announcement.announcement": "公告",
+ "annual_report.summary.archetype.booster": "追求趣味ê",
+ "annual_report.summary.archetype.lurker": "有讀無PO ê",
+ "annual_report.summary.archetype.oracle": "先知",
+ "annual_report.summary.archetype.pollster": "愛發動投票ê",
+ "annual_report.summary.archetype.replier": "社交ê蝴蝶",
+ "annual_report.summary.followers.followers": "跟tuè lí ê",
+ "annual_report.summary.followers.total": "Lóng總有 {count} ê",
+ "annual_report.summary.here_it_is": "下kha是lí {year} 年ê回顧:",
+ "annual_report.summary.highlighted_post.by_favourites": "Hōo足tsē lâng收藏ê PO文",
+ "annual_report.summary.highlighted_post.by_reblogs": "Hōo足tsē lâng轉ê PO文",
"annual_report.summary.percentile.text": "Tse 予lí變做 {domain} ê用戶ê ",
"block_modal.show_less": "看khah少",
+ "block_modal.show_more": "顯示其他ê內容",
+ "block_modal.they_cant_mention": "In buē-tàng 提起á是跟tuè lí。",
+ "block_modal.they_cant_see_posts": "Lín buē-tàng互相看著對方ê PO文。",
+ "block_modal.they_will_know": "In通看見in hőng封鎖。",
+ "block_modal.title": "Kám beh封鎖用者?",
+ "boost_modal.reblog": "Kám beh轉PO?",
+ "bundle_column_error.error.title": "害ah!",
+ "bundle_column_error.routing.title": "404",
+ "bundle_modal_error.close": "關",
"compose.language.change": "換語言",
"confirmations.follow_to_list.confirm": "跟tuè,加入kàu列單",
"notification.favourite_pm": "{name} kah意lí ê私人提起",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index c76c134bec..051ecb00a0 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Meldingen negeren van mensen die jou niet volgen?",
"ignore_notifications_modal.not_following_title": "Meldingen negeren van mensen die je niet volgt?",
"ignore_notifications_modal.private_mentions_title": "Meldingen negeren van ongevraagde privéberichten?",
- "interaction_modal.description.favourite": "Je kunt met een Mastodon-account dit bericht als favoriet markeren, om die gebruiker te laten weten dat je het bericht waardeert en om het op te slaan.",
- "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?",
+ "interaction_modal.action.favourite": "Om verder te gaan, moet je vanaf je eigen account als favoriet markeren.",
+ "interaction_modal.action.follow": "Om verder te gaan, moet je vanaf je eigen account volgen.",
+ "interaction_modal.action.reblog": "Om verder te gaan, moet je vanaf je eigen account boosten.",
+ "interaction_modal.action.reply": "Om verder te gaan, moet je vanaf je eigen account reageren.",
+ "interaction_modal.action.vote": "Om verder te gaan, moet je vanaf je eigen account stemmen.",
+ "interaction_modal.go": "Ga",
+ "interaction_modal.no_account_yet": "Heb je nog geen account?",
"interaction_modal.on_another_server": "Op een andere server",
"interaction_modal.on_this_server": "Op deze server",
- "interaction_modal.sign_in": "Je bent niet op deze server ingelogd. Op welke server bevindt zich jouw account?",
- "interaction_modal.sign_in_hint": "Tip: Dat is de website waarop je je hebt geregistreerd. Wanneer je dit bent vergeten kun je naar de welkomstmail zoeken in je inbox. Je kunt ook je volledige gebruikersnaam invullen! (bv. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Bericht van {name} als favoriet markeren",
"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",
+ "interaction_modal.username_prompt": "Bijv. {example}",
"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}}",
@@ -475,13 +473,13 @@
"lists.add_to_list": "Aan lijst toevoegen",
"lists.add_to_lists": "{name} aan lijsten toevoegen",
"lists.create": "Aanmaken",
- "lists.create_a_list_to_organize": "Maak een nieuwe lijst aan om je Startpagina te organiseren",
+ "lists.create_a_list_to_organize": "Maak een nieuwe lijst aan om je starttijdlijn te organiseren",
"lists.create_list": "Lijst aanmaken",
"lists.delete": "Lijst verwijderen",
"lists.done": "Klaar",
"lists.edit": "Lijst bewerken",
"lists.exclusive": "Leden op je Startpagina verbergen",
- "lists.exclusive_hint": "Als iemand op deze lijst staat, verberg hem dan op je Startpagina om te voorkomen dat zijn berichten twee keer worden getoond.",
+ "lists.exclusive_hint": "Als iemand op deze lijst staat, verberg deze persoon dan op je starttijdlijn om te voorkomen dat zijn berichten twee keer worden getoond.",
"lists.find_users_to_add": "Vind gebruikers om toe te voegen",
"lists.list_members": "Lijstleden",
"lists.list_members_count": "{count, plural, one{# lid} other{# leden}}",
@@ -549,8 +547,8 @@
"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.favourite_pm": "{name} heeft je persoonlijke vermelding aan hun favorieten toegevoegd",
- "notification.favourite_pm.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je persoonlijke vermelding aan hun favorieten toegevoegd",
+ "notification.favourite_pm": "{name} heeft je privébericht als favoriet gemarkeerd",
+ "notification.favourite_pm.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je privé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}} volgen jou nou",
"notification.follow_request": "{name} wil jou graag volgen",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Privacybeleid",
"recommended": "Aanbevolen",
"refresh": "Vernieuwen",
- "regeneration_indicator.label": "Aan het laden…",
- "regeneration_indicator.sublabel": "Jouw starttijdlijn wordt aangemaakt!",
+ "regeneration_indicator.please_stand_by": "Even geduld alsjeblieft.",
+ "regeneration_indicator.preparing_your_home_feed": "Voorbereiden van jouw starttijdlijn…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dag} other {# dagen}} geleden",
"relative_time.full.hours": "{number, plural, one {# uur} other {# uur}} geleden",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 21eafffe76..ef86d597e1 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -401,18 +401,8 @@
"ignore_notifications_modal.not_followers_title": "Oversjå varsel frå folk som ikkje fylgjer deg?",
"ignore_notifications_modal.not_following_title": "Oversjå varsel frå folk du ikkje fylgjer?",
"ignore_notifications_modal.private_mentions_title": "Oversjå varsel frå masseutsende private omtaler?",
- "interaction_modal.description.favourite": "Med ein konto på Mastodon kan du favorittmerka dette innlegget for å visa forfattaren at du set pris på det, og for å lagra det til seinare.",
- "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?",
"interaction_modal.on_another_server": "På ein annan tenar",
"interaction_modal.on_this_server": "På denne tenaren",
- "interaction_modal.sign_in": "Du er ikkje logga inn på denne tenaren. På kva for ein tenar høyrer kontoen din heime?",
- "interaction_modal.sign_in_hint": "Tips: Det er nettstaden der du registrerte deg. Om du har gløymt kvar det var, sjå om du finn velkomst-eposten i innboksen din. Du kan òg skriva inn ditt fulle brukarnamn! (t.d. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Marker innlegget til {name} som favoritt",
"interaction_modal.title.follow": "Fylg {name}",
"interaction_modal.title.reblog": "Framhev {name} sitt innlegg",
@@ -664,8 +654,6 @@
"privacy_policy.title": "Personvernsreglar",
"recommended": "Tilrådd",
"refresh": "Oppdater",
- "regeneration_indicator.label": "Lastar…",
- "regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!",
"relative_time.days": "{number}dg",
"relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sidan",
"relative_time.full.hours": "{number, plural, one {# time} other {# timar}} sidan",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 5ada8c6fe6..ccd6f92f4b 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -368,17 +368,8 @@
"ignore_notifications_modal.not_followers_title": "Overse varsler fra folk som ikke følger deg?",
"ignore_notifications_modal.not_following_title": "Overse varsler fra folk du ikke følger?",
"ignore_notifications_modal.private_mentions_title": "Overse varsler fra uoppfordrede private omtaler?",
- "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.",
- "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.",
- "interaction_modal.description.reblog": "Med en konto på Mastodon, kan du fremheve dette innlegget for å dele det med dine egne følgere.",
- "interaction_modal.description.reply": "Med en konto på Mastodon, kan du svare på dette innlegget.",
- "interaction_modal.login.action": "Ta meg hjem",
- "interaction_modal.login.prompt": "Domenet til serveren din, eks. mastodon.social",
- "interaction_modal.no_account_yet": "Ennå ikke på Mastodon?",
"interaction_modal.on_another_server": "På en annen server",
"interaction_modal.on_this_server": "På denne serveren",
- "interaction_modal.sign_in": "Du er ikke logget inn på denne serveren. Hvor har du kontoen din?",
- "interaction_modal.sign_in_hint": "Tips: Det er på nettstedet der du registrerte deg. Hvis du ikke husker det, kan du se etter velkomst e-posten i innboksen. Du kan også skrive inn hele brukernavnet ditt! (eks. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favorittmarker innlegget til {name}",
"interaction_modal.title.follow": "Følg {name}",
"interaction_modal.title.reblog": "Fremhev {name} sitt innlegg",
@@ -574,8 +565,6 @@
"privacy_policy.title": "Personvernregler",
"recommended": "Anbefalt",
"refresh": "Oppfrisk",
- "regeneration_indicator.label": "Laster…",
- "regeneration_indicator.sublabel": "Dine tidslinje blir gjort klar!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dag} other {# dager}} siden",
"relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 5173fe4e7e..8761fd0e2e 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -398,8 +398,6 @@
"privacy_policy.last_updated": "Darrièra actualizacion {date}",
"privacy_policy.title": "Politica de confidencialitat",
"refresh": "Actualizar",
- "regeneration_indicator.label": "Cargament…",
- "regeneration_indicator.sublabel": "Sèm a preparar vòstre flux d’acuèlh !",
"relative_time.days": "fa {number}d",
"relative_time.full.days": "{number, plural, one {# jorn} other {# jorns}} ago",
"relative_time.full.hours": "fa {number, plural, one {# ora} other {# oras}}",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index 6cc90059a1..1fae89e579 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -248,8 +248,6 @@
"home.hide_announcements": "ਐਲਾਨਾਂ ਨੂੰ ਓਹਲੇ ਕਰੋ",
"home.pending_critical_update.link": "ਅੱਪਡੇਟ ਵੇਖੋ",
"ignore_notifications_modal.ignore": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ",
- "interaction_modal.login.action": "ਮੈਨੂੰ ਮੁੱਖ ਸਫ਼ੇ ਉੱਤੇ ਲੈ ਜਾਓ",
- "interaction_modal.no_account_yet": "Mastodon ਉੱਤੇ ਨਹੀਂ ਹੋ?",
"interaction_modal.on_another_server": "ਵੱਖਰੇ ਸਰਵਰ ਉੱਤੇ",
"interaction_modal.on_this_server": "ਇਸ ਸਰਵਰ ਉੱਤੇ",
"interaction_modal.title.favourite": "{name} ਦੀ ਪੋਸਟ ਨੂੰ ਪਸੰਦ ਕਰੋ",
@@ -410,7 +408,6 @@
"privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
"recommended": "ਸਿਫ਼ਾਰਸ਼ੀ",
"refresh": "ਤਾਜ਼ਾ ਕਰੋ",
- "regeneration_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...",
"relative_time.days": "{number}ਦਿਨ",
"relative_time.full.days": "{number, plural, one {# ਦਿਨ} other {# ਦਿਨ}} ਪਹਿਲਾਂ",
"relative_time.full.hours": "{number, plural, one {# ਘੰਟਾ} other {# ਘੰਟੇ}} ਪਹਿਲਾਂ",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 5c1ef9d604..fe56267ea1 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -31,7 +31,7 @@
"account.featured_tags.last_status_never": "Brak postów",
"account.featured_tags.title": "Polecane hasztagi {name}",
"account.follow": "Obserwuj",
- "account.follow_back": "Obserwuj wzajemnie",
+ "account.follow_back": "Również obserwuj",
"account.followers": "Obserwujący",
"account.followers.empty": "Nikt jeszcze nie obserwuje tego użytkownika.",
"account.followers_counter": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}",
@@ -406,18 +406,8 @@
"ignore_notifications_modal.not_followers_title": "Ignoruj powiadomienia od użytkowników którzy cię nie obserwują?",
"ignore_notifications_modal.not_following_title": "Ignoruj powiadomienia od użytkowników których nie obserwujesz?",
"ignore_notifications_modal.private_mentions_title": "Ignoruj powiadomienia o nieproszonych wzmiankach prywatnych?",
- "interaction_modal.description.favourite": "Mając konto na Mastodonie, możesz dodawać wpisy do ulubionych by dać znać jego autorowi, że podoba Ci się ten wpis i zachować go na później.",
- "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?",
"interaction_modal.on_another_server": "Na innym serwerze",
"interaction_modal.on_this_server": "Na tym serwerze",
- "interaction_modal.sign_in": "Nie jesteś zalogowany(-a) na tym serwerze. Gdzie masz konto?",
- "interaction_modal.sign_in_hint": "To strona na której się rejestrowałeś(-aś). Jeżeli nie pamiętasz, poszukaj mejla z przywitaniem. Możesz też wprowadzić pełną nazwę użytkownika, à la @Mastodon@mastodon.social!",
"interaction_modal.title.favourite": "Polub wpis użytkownika {name}",
"interaction_modal.title.follow": "Śledź {name}",
"interaction_modal.title.reblog": "Podbij wpis {name}",
@@ -544,6 +534,7 @@
"notification.admin.report_statuses_other": "{name} zgłosił(a) {target}",
"notification.admin.sign_up": "Użytkownik {name} zarejestrował się",
"notification.admin.sign_up.name_and_others": "zarejestrował(-a) się {name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}}",
+ "notification.annual_report.message": "Twój {year} #Wrapstodon jest już dostępny! Zobacz swoje podsumowanie roku i niezapomniane chwile na Mastodon!",
"notification.annual_report.view": "Zobacz #Wrapstodon",
"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}}",
@@ -695,8 +686,6 @@
"privacy_policy.title": "Polityka prywatności",
"recommended": "Zalecane",
"refresh": "Odśwież",
- "regeneration_indicator.label": "Ładuję…",
- "regeneration_indicator.sublabel": "Twoja oś czasu jest przygotowywana!",
"relative_time.days": "{number} dni",
"relative_time.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}} temu",
"relative_time.full.hours": "{number, plural, one {# godzinę} few {# godziny} many {# godzin} other {# godzin}} temu",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index b7221f5417..1505d333ba 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -103,6 +103,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag mais usada",
"annual_report.summary.most_used_hashtag.none": "Nenhuma",
"annual_report.summary.new_posts.new_posts": "novas publicações",
+ "annual_report.summary.percentile.text": "Isso lhe coloca no topode usuários de {domain}.",
"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)",
@@ -406,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não seguem você?",
"ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que você 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, você pode marcar esta publicação como favorita para que o autor saiba que você gostou e salvá-la para mais tarde.",
- "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?",
+ "interaction_modal.action.favourite": "Para continuar, você precisa favoritar na sua conta.",
+ "interaction_modal.action.follow": "Para continuar, você precisa seguir da sua conta.",
+ "interaction_modal.action.reblog": "Para continuar, você precisa impulsionar na sua conta.",
+ "interaction_modal.action.reply": "Para continuar, você precisa responder na sua conta.",
+ "interaction_modal.action.vote": "Para continuar, você precisa votar na sua conta.",
+ "interaction_modal.go": "Ir",
+ "interaction_modal.no_account_yet": "Não possui uma conta ainda?",
"interaction_modal.on_another_server": "Em um servidor diferente",
"interaction_modal.on_this_server": "Neste servidor",
- "interaction_modal.sign_in": "Você não está credenciado neste servidor. Onde sua conta está hospedada?",
- "interaction_modal.sign_in_hint": "Dica: Esse é o site onde você se cadastrou. Se não se lembra, procure o e-mail de boas-vindas na sua caixa de entrada. Você também pode informar seu nome de usuário completo! (exemplo @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favoritar publicação de {name}",
"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}",
+ "interaction_modal.username_prompt": "p. e.x.: {example}",
"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}}",
@@ -548,6 +547,8 @@
"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.favourite_pm": "{name} favoritou sua menção privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} favoritou(ram) sua menção privada",
"notification.follow": "{name} te seguiu",
"notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} seguiram você",
"notification.follow_request": "{name} quer te seguir",
@@ -694,8 +695,8 @@
"privacy_policy.title": "Política de privacidade",
"recommended": "Recomendado",
"refresh": "Atualizar",
- "regeneration_indicator.label": "Carregando…",
- "regeneration_indicator.sublabel": "Sua página inicial está sendo preparada!",
+ "regeneration_indicator.please_stand_by": "Aguarde um momento.",
+ "regeneration_indicator.preparing_your_home_feed": "Preparando seu feed inicial…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dia} other {# dias}} atrás",
"relative_time.full.hours": "{number, plural, one {# hora} other {# horas}} atrás",
@@ -779,8 +780,11 @@
"search_results.accounts": "Perfis",
"search_results.all": "Tudo",
"search_results.hashtags": "Hashtags",
+ "search_results.no_results": "Sem resultados.",
+ "search_results.no_search_yet": "Tente buscar por publicações, perfis e hashtags.",
"search_results.see_all": "Ver tudo",
"search_results.statuses": "Toots",
+ "search_results.title": "Buscar por \"{q}\"",
"server_banner.about_active_users": "Pessoas usando este servidor durante os últimos 30 dias (Usuários ativos mensalmente)",
"server_banner.active_users": "usuários ativos",
"server_banner.administered_by": "Administrado por:",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index 04aec252b7..9e643175e2 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -6,7 +6,7 @@
"about.domain_blocks.preamble": "O Mastodon geralmente permite que veja e interaja com o conteúdo de utilizadores de qualquer outra instância no fediverso. Estas são as exceções desta instância em específico.",
"about.domain_blocks.silenced.explanation": "Normalmente não verá perfis e conteúdo deste servidor, a menos que os procure explicitamente ou opte por os seguir.",
"about.domain_blocks.silenced.title": "Limitados",
- "about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os utilizadores dessas instâncias.",
+ "about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, tornando impossível qualquer interação ou comunicação com os utilizadores a partir deste servidor.",
"about.domain_blocks.suspended.title": "Suspensos",
"about.not_available": "Esta informação não foi disponibilizada neste servidor.",
"about.powered_by": "Rede social descentralizada baseada no {mastodon}",
@@ -18,7 +18,7 @@
"account.block": "Bloquear @{name}",
"account.block_domain": "Bloquear domínio {domain}",
"account.block_short": "Bloquear",
- "account.blocked": "Bloqueado(a)",
+ "account.blocked": "Bloqueado",
"account.cancel_follow_request": "Retirar pedido para seguir",
"account.copy": "Copiar hiperligação para o perfil",
"account.direct": "Mencionar @{name} em privado",
@@ -29,9 +29,9 @@
"account.endorse": "Destacar no perfil",
"account.featured_tags.last_status_at": "Última publicação em {date}",
"account.featured_tags.last_status_never": "Sem publicações",
- "account.featured_tags.title": "#Etiquetas destacadas por {name}",
+ "account.featured_tags.title": "Etiquetas destacadas por {name}",
"account.follow": "Seguir",
- "account.follow_back": "Seguir de volta",
+ "account.follow_back": "Seguir também",
"account.followers": "Seguidores",
"account.followers.empty": "Ainda ninguém segue este utilizador.",
"account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}",
@@ -39,19 +39,19 @@
"account.following_counter": "{count, plural, one {A seguir {counter}} other {A seguir {counter}}}",
"account.follows.empty": "Este utilizador ainda não segue ninguém.",
"account.go_to_profile": "Ir para o perfil",
- "account.hide_reblogs": "Esconder partilhas de @{name}",
+ "account.hide_reblogs": "Esconder partilhas impulsionadas de @{name}",
"account.in_memoriam": "Em Memória.",
"account.joined_short": "Juntou-se a",
"account.languages": "Alterar línguas subscritas",
"account.link_verified_on": "O proprietário desta hiperligação foi verificado em {date}",
"account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem o pode seguir.",
- "account.media": "Média",
+ "account.media": "Multimédia",
"account.mention": "Mencionar @{name}",
"account.moved_to": "{name} indicou que a sua nova conta agora é:",
- "account.mute": "Silenciar @{name}",
- "account.mute_notifications_short": "Silenciar notificações",
- "account.mute_short": "Silenciar",
- "account.muted": "Silenciada",
+ "account.mute": "Ocultar @{name}",
+ "account.mute_notifications_short": "Ocultar notificações",
+ "account.mute_short": "Ocultar",
+ "account.muted": "Ocultada",
"account.mutual": "Mútuo",
"account.no_bio": "Nenhuma descrição fornecida.",
"account.open_original_page": "Abrir a página original",
@@ -61,16 +61,16 @@
"account.requested": "A aguardar aprovação. Clique para cancelar o pedido para seguir",
"account.requested_follow": "{name} pediu para segui-lo",
"account.share": "Partilhar o perfil @{name}",
- "account.show_reblogs": "Mostrar partilhas de @{name}",
+ "account.show_reblogs": "Mostrar partilhas impulsionadas de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
"account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Desbloquear o domínio {domain}",
"account.unblock_short": "Desbloquear",
"account.unendorse": "Não destacar no perfil",
"account.unfollow": "Deixar de seguir",
- "account.unmute": "Deixar de silenciar @{name}",
- "account.unmute_notifications_short": "Parar de silenciar notificações",
- "account.unmute_short": "Deixar de silenciar",
+ "account.unmute": "Desocultar @{name}",
+ "account.unmute_notifications_short": "Desocultar notificações",
+ "account.unmute_short": "Desocultar",
"account_note.placeholder": "Clique para adicionar nota",
"admin.dashboard.daily_retention": "Taxa de retenção de utilizadores por dia após a inscrição",
"admin.dashboard.monthly_retention": "Taxa de retenção de utilizadores por mês após a inscrição",
@@ -87,22 +87,38 @@
"alert.unexpected.title": "Bolas!",
"alt_text_badge.title": "Texto alternativo",
"announcement.announcement": "Anúncio",
- "annual_report.summary.followers.total": "{count} total",
- "annual_report.summary.here_it_is": "Aqui está o seu {year} em revisão:",
+ "annual_report.summary.archetype.booster": "O caçador de frescura",
+ "annual_report.summary.archetype.lurker": "O espreitador",
+ "annual_report.summary.archetype.oracle": "O oráculo",
+ "annual_report.summary.archetype.pollster": "O sondagens",
+ "annual_report.summary.archetype.replier": "A borboleta social",
+ "annual_report.summary.followers.followers": "seguidores",
+ "annual_report.summary.followers.total": "{count} no total",
+ "annual_report.summary.here_it_is": "Aqui está um resumo do ano {year}:",
+ "annual_report.summary.highlighted_post.by_favourites": "publicação mais favorita",
+ "annual_report.summary.highlighted_post.by_reblogs": "publicação mais impulsionada",
+ "annual_report.summary.highlighted_post.by_replies": "publicação com o maior número de respostas",
+ "annual_report.summary.highlighted_post.possessive": "{name}",
+ "annual_report.summary.most_used_app.most_used_app": "aplicação mais utilizada",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta mais utilizada",
+ "annual_report.summary.most_used_hashtag.none": "Nenhuma",
"annual_report.summary.new_posts.new_posts": "novas publicações",
+ "annual_report.summary.percentile.text": "Isso coloca-o no topodos utilizadores de {domain}.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Este segredo fica entre nós.",
+ "annual_report.summary.thanks": "Obrigado por fazer parte do Mastodon!",
"attachments_list.unprocessed": "(não processado)",
"audio.hide": "Ocultar áudio",
- "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.",
+ "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As publicações públicas podem continuar a ser visíveis para utilizadores não autenticados.",
"block_modal.show_less": "Mostrar menos",
"block_modal.show_more": "Mostrar mais",
- "block_modal.they_cant_mention": "Eles não o podem mencionar ou seguir.",
- "block_modal.they_cant_see_posts": "Eles não podem ver as suas publicações e você não verá as deles.",
- "block_modal.they_will_know": "Eles podem ver que estão bloqueados.",
+ "block_modal.they_cant_mention": "Ele não o pode mencionar nem seguir.",
+ "block_modal.they_cant_see_posts": "Não verá as publicações dele e ele não poderá ver as suas publicações.",
+ "block_modal.they_will_know": "Ele pode ver que o bloqueou.",
"block_modal.title": "Bloquear utilizador?",
- "block_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.",
- "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
+ "block_modal.you_wont_see_mentions": "Não verá publicações que mencionem este utilizador.",
+ "boost_modal.combo": "Pode premir {combo} para não voltar a ver isto",
"boost_modal.reblog": "Impulsionar a publicação?",
- "boost_modal.undo_reblog": "Retirar post?",
+ "boost_modal.undo_reblog": "Não impulsionar a publicação?",
"bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
"bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
"bundle_column_error.error.title": "Ó, não!",
@@ -113,6 +129,7 @@
"bundle_column_error.routing.body": "A página solicitada não foi encontrada. Tem a certeza que o URL na barra de endereços está correto?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Fechar",
+ "bundle_modal_error.message": "Algo correu mal ao carregar este ecrã.",
"bundle_modal_error.retry": "Tente de novo",
"closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, pode criar uma conta noutro servidor e interagir com este na mesma.",
"closed_registrations_modal.description": "Neste momento não é possível criar uma conta em {domain}, mas lembramos que não é preciso ter uma conta especificamente em {domain} para usar o Mastodon.",
@@ -120,18 +137,21 @@
"closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a sua conta é criada, pois continuará a poder acompanhar e interagir com qualquer um neste servidor. Pode até alojar o seu próprio servidor!",
"closed_registrations_modal.title": "Inscrevendo-se no Mastodon",
"column.about": "Sobre",
- "column.blocks": "Utilizadores Bloqueados",
+ "column.blocks": "Utilizadores bloqueados",
"column.bookmarks": "Marcadores",
"column.community": "Cronologia local",
+ "column.create_list": "Criar lista",
"column.direct": "Menções privadas",
"column.directory": "Explorar perfis",
"column.domain_blocks": "Domínios bloqueados",
+ "column.edit_list": "Editar lista",
"column.favourites": "Favoritos",
- "column.firehose": "Cronologias",
- "column.follow_requests": "Seguidores pendentes",
+ "column.firehose": "Cronologias em tempo real",
+ "column.follow_requests": "Pedidos de seguidores",
"column.home": "Início",
+ "column.list_members": "Gerir membros da lista",
"column.lists": "Listas",
- "column.mutes": "Utilizadores silenciados",
+ "column.mutes": "Utilizadores ocultados",
"column.notifications": "Notificações",
"column.pins": "Publicações afixadas",
"column.public": "Cronologia federada",
@@ -142,6 +162,7 @@
"column_header.pin": "Afixar",
"column_header.show_settings": "Mostrar configurações",
"column_header.unpin": "Desafixar",
+ "column_search.cancel": "Cancelar",
"column_subheading.settings": "Configurações",
"community.column_settings.local_only": "Apenas local",
"community.column_settings.media_only": "Apenas média",
@@ -151,15 +172,16 @@
"compose.published.body": "Publicado.",
"compose.published.open": "Abrir",
"compose.saved.body": "Publicação guardada.",
- "compose_form.direct_message_warning_learn_more": "Conhecer mais",
- "compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.",
+ "compose_form.direct_message_warning_learn_more": "Saber mais",
+ "compose_form.encryption_warning": "As publicações no Mastodon não são encriptadas de ponta a ponta. Não partilhe qualquer informação sensível através do Mastodon.",
"compose_form.hashtag_warning": "Esta publicação não será listada em qualquer etiqueta, pois não é pública. Apenas as publicações públicas podem ser pesquisadas por etiquetas.",
- "compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.",
+ "compose_form.lock_disclaimer": "A sua conta não está {locked}. Qualquer pessoa pode segui-lo para ver as suas publicações destinadas apenas aos seus seguidores.",
"compose_form.lock_disclaimer.lock": "fechada",
"compose_form.placeholder": "Em que está a pensar?",
"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": "Uma opção",
"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",
@@ -167,8 +189,8 @@
"compose_form.publish_form": "Nova publicação",
"compose_form.reply": "Responder",
"compose_form.save_changes": "Atualizar",
- "compose_form.spoiler.marked": "Texto escondido atrás de aviso",
- "compose_form.spoiler.unmarked": "Juntar um aviso de conteúdo",
+ "compose_form.spoiler.marked": "Remover aviso de conteúdo",
+ "compose_form.spoiler.unmarked": "Adicionar aviso de conteúdo",
"compose_form.spoiler_placeholder": "Aviso de conteúdo (opcional)",
"confirmation_modal.cancel": "Cancelar",
"confirmations.block.confirm": "Bloquear",
@@ -176,28 +198,32 @@
"confirmations.delete.message": "De certeza que quer eliminar esta publicação?",
"confirmations.delete.title": "Eliminar publicação?",
"confirmations.delete_list.confirm": "Eliminar",
- "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?",
+ "confirmations.delete_list.message": "Tem a certeza de que deseja eliminar permanentemente esta lista?",
"confirmations.delete_list.title": "Eliminar lista?",
"confirmations.discard_edit_media.confirm": "Descartar",
- "confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição ou pré-visualização do conteúdo. Descartar mesmo assim?",
+ "confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição da multimédia ou pré-visualização do conteúdo. Descartar mesmo assim?",
"confirmations.edit.confirm": "Editar",
- "confirmations.edit.message": "Editar agora irá sobrescrever a mensagem que está a compor. Tem a certeza de que deseja continuar?",
- "confirmations.edit.title": "Sobrescrever publicação?",
+ "confirmations.edit.message": "Editar agora irá substituir a mensagem que está a compor. Tem a certeza de que deseja continuar?",
+ "confirmations.edit.title": "Substituir publicação?",
+ "confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",
+ "confirmations.follow_to_list.message": "Tem de seguir {name} para o adicionar a uma lista.",
+ "confirmations.follow_to_list.title": "Seguir utilizador?",
"confirmations.logout.confirm": "Terminar sessão",
"confirmations.logout.message": "Tem a certeza de que quer terminar a sessão?",
"confirmations.logout.title": "Terminar sessão?",
- "confirmations.mute.confirm": "Silenciar",
- "confirmations.redraft.confirm": "Eliminar & reescrever",
- "confirmations.redraft.message": "Tem a certeza de que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.",
+ "confirmations.mute.confirm": "Ocultar",
+ "confirmations.redraft.confirm": "Eliminar e reescrever",
+ "confirmations.redraft.message": "Tem a certeza de que quer eliminar e tornar a escrever esta publicação? Os favoritos e as publicações impulsionadas perder-se-ão e as respostas à publicação original ficarão órfãs.",
"confirmations.redraft.title": "Eliminar e reescrever publicação?",
"confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Se responder agora, a mensagem que está a escrever será substituída. Tem a certeza que pretende continuar?",
- "confirmations.reply.title": "Sobrescrever publicação?",
+ "confirmations.reply.title": "Substituir publicação?",
"confirmations.unfollow.confirm": "Deixar de seguir",
- "confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?",
- "confirmations.unfollow.title": "Deixar de seguir utilizador?",
+ "confirmations.unfollow.message": "De certeza que quer deixar de seguir {name}?",
+ "confirmations.unfollow.title": "Deixar de seguir o utilizador?",
"content_warning.hide": "Ocultar publicação",
"content_warning.show": "Mostrar mesmo assim",
+ "content_warning.show_more": "Mostrar mais",
"conversation.delete": "Eliminar conversa",
"conversation.mark_as_read": "Marcar como lida",
"conversation.open": "Ver conversa",
@@ -207,18 +233,24 @@
"copypaste.copy_to_clipboard": "Copiar para a área de transferência",
"directory.federated": "Do fediverso conhecido",
"directory.local": "Apenas de {domain}",
- "directory.new_arrivals": "Recém chegados",
+ "directory.new_arrivals": "Recém-chegados",
"directory.recently_active": "Recentemente ativo",
"disabled_account_banner.account_settings": "Definições da conta",
- "disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.",
+ "disabled_account_banner.text": "A sua conta {disabledAccount} está atualmente desativada.",
"dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.",
"dismissable_banner.dismiss": "Descartar",
+ "dismissable_banner.explore_links": "Estas notícias estão a ser mais partilhadas no fediverso hoje. As notícias mais recentes publicadas por mais pessoas diferentes têm uma classificação mais elevada.",
+ "dismissable_banner.explore_statuses": "Estas publicações de todo o fediverso estão a ganhar força hoje. As publicações mais recentes com mais impulsos e favoritos têm uma classificação mais elevada.",
+ "dismissable_banner.explore_tags": "Estas etiquetas estão a ganhar força no fediverso atualmente. As etiquetas que são utilizadas por mais pessoas diferentes são classificadas numa posição mais elevada.",
+ "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas no fediverso que as pessoas em {domain} seguem.",
"domain_block_modal.block": "Bloquear servidor",
- "domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa",
+ "domain_block_modal.block_account_instead": "Bloquear antes @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as suas publicações antigas.",
"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_num_followers": "Irá perder {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que segue} other {{followingCountDisplay} pessoas que segue}}.",
+ "domain_block_modal.you_will_lose_relationships": "Perderá todos os seguidores e pessoas que segue deste servidor.",
"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.",
@@ -234,48 +266,48 @@
"domain_pill.your_server": "A sua casa digital, onde se encontram todas as suas publicações. Não gosta deste? Mude de servidor a qualquer momento e leve também os seus seguidores.",
"domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.",
"embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.",
- "embed.preview": "Podes ver aqui como irá ficar:",
+ "embed.preview": "Eis o aspeto que terá:",
"emoji_button.activity": "Atividade",
"emoji_button.clear": "Limpar",
- "emoji_button.custom": "Personalizar",
+ "emoji_button.custom": "Personalizados",
"emoji_button.flags": "Bandeiras",
- "emoji_button.food": "Comida & Bebida",
- "emoji_button.label": "Inserir Emoji",
+ "emoji_button.food": "Comida e bebidas",
+ "emoji_button.label": "Inserir emoji",
"emoji_button.nature": "Natureza",
- "emoji_button.not_found": "Nenhum emoji correspondente encontrado",
+ "emoji_button.not_found": "Não foram encontrados emojis correspondentes",
"emoji_button.objects": "Objetos",
"emoji_button.people": "Pessoas",
"emoji_button.recent": "Utilizados regularmente",
"emoji_button.search": "Pesquisar...",
"emoji_button.search_results": "Resultados da pesquisa",
"emoji_button.symbols": "Símbolos",
- "emoji_button.travel": "Viagens & Lugares",
+ "emoji_button.travel": "Viagens e lugares",
"empty_column.account_hides_collections": "Este utilizador escolheu não disponibilizar esta informação",
"empty_column.account_suspended": "Conta suspensa",
"empty_column.account_timeline": "Sem publicações por aqui!",
"empty_column.account_unavailable": "Perfil indisponível",
- "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.",
+ "empty_column.blocks": "Ainda não bloqueou nenhum utilizador.",
"empty_column.bookmarked_statuses": "Ainda não tem nenhuma publicação marcada. Quando marcar uma, ela aparecerá aqui.",
- "empty_column.community": "A cronologia local está vazia. Escreve algo público para começar!",
+ "empty_column.community": "A cronologia local está vazia. Escreva algo publicamente para começar!",
"empty_column.direct": "Ainda não tem qualquer menção privada. Quando enviar ou receber uma, ela irá aparecer aqui.",
- "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.",
+ "empty_column.domain_blocks": "Ainda não há qualquer domínio bloqueado.",
"empty_column.explore_statuses": "Nada é tendência neste momento. Volte mais tarde!",
- "empty_column.favourited_statuses": "Ainda não assinalou qualquer publicação como favorita. Quando o fizer, aparecerá aqui.",
- "empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, aparecerá aqui.",
- "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.",
- "empty_column.followed_tags": "Ainda não segue nenhuma hashtag. Quando o fizer, ela aparecerá aqui.",
- "empty_column.hashtag": "Não foram encontradas publicações com essa #etiqueta.",
+ "empty_column.favourited_statuses": "Ainda não assinalou qualquer publicação como favorita. Quando o fizer, ela aparecerá aqui.",
+ "empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, ela aparecerá aqui.",
+ "empty_column.follow_requests": "Ainda não tem nenhum pedido de seguidor. Quando receber algum, ele irá aparecer aqui.",
+ "empty_column.followed_tags": "Ainda não segue nenhuma etiqueta. Quando o fizer, ela aparecerá aqui.",
+ "empty_column.hashtag": "Não foram encontradas publicações com esta #etiqueta.",
"empty_column.home": "A sua linha cronológica inicial está vazia! Siga mais pessoas para a preencher.",
- "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.",
- "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.",
- "empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando você receber novas notificações, elas aparecerão aqui conforme as suas configurações.",
- "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.",
- "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos",
- "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pôde ser apresentada corretamente.",
- "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
+ "empty_column.list": "Ainda não existem publicações nesta lista. Quando os membros desta lista fizerem novas publicações, elas aparecerão aqui.",
+ "empty_column.mutes": "Ainda não ocultou nenhum utilizador.",
+ "empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando receber novas notificações, elas aparecerão aqui conforme as suas configurações.",
+ "empty_column.notifications": "Não tem notificações. Interaja com outros utilizadores para iniciar uma conversa.",
+ "empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga outros utilizadores para ver aqui os conteúdos públicos",
+ "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pode ser apresentada corretamente.",
+ "error.unexpected_crash.explanation_addons": "Esta página não pode ser mostrada corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
"error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.",
"error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, poderá ainda ser possível utilizar o Mastodon através de um navegador diferente ou de uma aplicação nativa.",
- "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard",
+ "errors.unexpected_crash.copy_stacktrace": "Copiar o stacktrace para a área de transferência",
"errors.unexpected_crash.report_issue": "Reportar problema",
"explore.suggested_follows": "Pessoas",
"explore.title": "Explorar",
@@ -298,6 +330,7 @@
"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",
@@ -321,24 +354,26 @@
"follow_suggestions.similar_to_recently_followed_longer": "Semelhantes aos perfis que seguiu recentemente",
"follow_suggestions.view_all": "Ver tudo",
"follow_suggestions.who_to_follow": "Quem seguir",
- "followed_tags": "Hashtags seguidas",
+ "followed_tags": "Etiquetas seguidas",
"footer.about": "Sobre",
"footer.directory": "Diretório de perfis",
- "footer.get_app": "Obtém a aplicação",
+ "footer.get_app": "Obter a aplicação",
"footer.keyboard_shortcuts": "Atalhos do teclado",
"footer.privacy_policy": "Política de privacidade",
"footer.source_code": "Ver código-fonte",
"footer.status": "Estado",
+ "footer.terms_of_service": "Termos de serviço",
"generic.saved": "Guardado",
"getting_started.heading": "Primeiros passos",
+ "hashtag.admin_moderation": "Abrir interface de moderação para #{name}",
"hashtag.column_header.tag_mode.all": "e {additional}",
"hashtag.column_header.tag_mode.any": "ou {additional}",
"hashtag.column_header.tag_mode.none": "sem {additional}",
"hashtag.column_settings.select.no_options_message": "Não foram encontradas sugestões",
"hashtag.column_settings.select.placeholder": "Inserir #etiquetas…",
- "hashtag.column_settings.tag_mode.all": "Todos estes",
- "hashtag.column_settings.tag_mode.any": "Qualquer destes",
- "hashtag.column_settings.tag_mode.none": "Nenhum destes",
+ "hashtag.column_settings.tag_mode.all": "Todas estas",
+ "hashtag.column_settings.tag_mode.any": "Qualquer uma destas",
+ "hashtag.column_settings.tag_mode.none": "Nenhuma destas",
"hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna",
"hashtag.counter_by_accounts": "{count, plural,one {{counter} participante} other {{counter} participantes}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
@@ -361,9 +396,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.disclaimer": "O Mastodon não pode informar os utilizadores de que ignorou as suas notificações. Ignorar as notificações não impedirá que as mensagens sejam 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_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",
@@ -372,104 +407,127 @@
"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.",
- "interaction_modal.description.reply": "Com uma conta no Mastodon, pode responder a esta publicação.",
- "interaction_modal.login.action": "Leve-me a casa",
- "interaction_modal.login.prompt": "Domínio do seu servidor, por exemplo, mastodon.social",
- "interaction_modal.no_account_yet": "Não está no Mastodon?",
+ "interaction_modal.action.favourite": "Para continuar, precisa definir como favorito a partir da sua conta.",
+ "interaction_modal.action.follow": "Para continuar, precisa seguir a partir da sua conta.",
+ "interaction_modal.action.reblog": "Para continuar, precisa republicar a partir da sua conta.",
+ "interaction_modal.action.reply": "Para continuar, precisa responder a partir da sua conta.",
+ "interaction_modal.action.vote": "Para continuar é necessário votar a partir da sua conta.",
+ "interaction_modal.go": "Ir",
+ "interaction_modal.no_account_yet": "Ainda não tem conta?",
"interaction_modal.on_another_server": "Num servidor diferente",
"interaction_modal.on_this_server": "Neste servidor",
- "interaction_modal.sign_in": "Não tem sessão iniciada neste servidor. Em que servidor tem a sua conta?",
- "interaction_modal.sign_in_hint": "Dica: O domínio do seu servidor é o site onde se inscreveu. Se não se lembrar, procure o e-mail de boas-vindas na sua caixa de entrada. Também pode introduzir o seu nome de utilizador completo! (por exemplo, @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Assinalar a publicação de {name} como favorita",
"interaction_modal.title.follow": "Seguir {name}",
"interaction_modal.title.reblog": "Impulsionar a publicação de {name}",
"interaction_modal.title.reply": "Responder à publicação de {name}",
+ "interaction_modal.title.vote": "Votar na sondagem de {name}",
+ "interaction_modal.username_prompt": "Ex: {example}",
"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}}",
- "keyboard_shortcuts.back": "para voltar",
- "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados",
- "keyboard_shortcuts.boost": "Impulsionar a publicação",
- "keyboard_shortcuts.column": "para focar uma publicação numa das colunas",
- "keyboard_shortcuts.compose": "para focar na área de publicação",
+ "keyboard_shortcuts.back": "retroceder",
+ "keyboard_shortcuts.blocked": "abrir a lista de utilizadores bloqueados",
+ "keyboard_shortcuts.boost": "impulsionar a publicação",
+ "keyboard_shortcuts.column": "focar uma publicação numa das colunas",
+ "keyboard_shortcuts.compose": "focar área de texto da publicação",
"keyboard_shortcuts.description": "Descrição",
- "keyboard_shortcuts.direct": "para abrir a coluna de menções privadas",
- "keyboard_shortcuts.down": "para mover para baixo na lista",
- "keyboard_shortcuts.enter": "para expandir uma publicação",
- "keyboard_shortcuts.favourite": "Assinalar como favorita",
- "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
- "keyboard_shortcuts.federated": "para abrir a cronologia federada",
+ "keyboard_shortcuts.direct": "abrir a coluna de menções privadas",
+ "keyboard_shortcuts.down": "mover para baixo na lista",
+ "keyboard_shortcuts.enter": "abrir publicação",
+ "keyboard_shortcuts.favourite": "assinalar como favorita",
+ "keyboard_shortcuts.favourites": "abrir lista de favoritos",
+ "keyboard_shortcuts.federated": "abrir a cronologia federada",
"keyboard_shortcuts.heading": "Atalhos de teclado",
- "keyboard_shortcuts.home": "para abrir a cronologia inicial",
+ "keyboard_shortcuts.home": "abrir a cronologia na página inicial",
"keyboard_shortcuts.hotkey": "Atalho",
- "keyboard_shortcuts.legend": "para mostrar esta legenda",
- "keyboard_shortcuts.local": "para abrir a cronologia local",
- "keyboard_shortcuts.mention": "para mencionar o autor",
- "keyboard_shortcuts.muted": "para abrir a lista dos utilizadores silenciados",
- "keyboard_shortcuts.my_profile": "para abrir o teu perfil",
- "keyboard_shortcuts.notifications": "para abrir a coluna das notificações",
- "keyboard_shortcuts.open_media": "para abrir media",
- "keyboard_shortcuts.pinned": "Abrir lista de publicações fixadas",
- "keyboard_shortcuts.profile": "para abrir o perfil do autor",
- "keyboard_shortcuts.reply": "para responder",
- "keyboard_shortcuts.requests": "para abrir a lista dos pedidos de seguidor",
- "keyboard_shortcuts.search": "Focar barra de pesquisa",
+ "keyboard_shortcuts.legend": "mostrar esta legenda",
+ "keyboard_shortcuts.local": "abrir a cronologia local",
+ "keyboard_shortcuts.mention": "mencionar o autor",
+ "keyboard_shortcuts.muted": "abrir a lista dos utilizadores ocultados",
+ "keyboard_shortcuts.my_profile": "abrir o seu perfil",
+ "keyboard_shortcuts.notifications": "abrir a coluna das notificações",
+ "keyboard_shortcuts.open_media": "abrir multimédia",
+ "keyboard_shortcuts.pinned": "abrir lista de publicações fixadas",
+ "keyboard_shortcuts.profile": "abrir o perfil do autor",
+ "keyboard_shortcuts.reply": "responder à publicação",
+ "keyboard_shortcuts.requests": "abrir a lista dos pedidos de seguidor",
+ "keyboard_shortcuts.search": "focar barra de pesquisa",
"keyboard_shortcuts.spoilers": "para mostrar/esconder o campo AC",
- "keyboard_shortcuts.start": "para abrir a coluna dos \"primeiros passos\"",
- "keyboard_shortcuts.toggle_hidden": "para mostrar/esconder texto atrás de CW",
- "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar media",
- "keyboard_shortcuts.toot": "para compor um novo toot",
- "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa",
- "keyboard_shortcuts.up": "para mover para cima na lista",
+ "keyboard_shortcuts.start": "abrir a coluna dos \"primeiros passos\"",
+ "keyboard_shortcuts.toggle_hidden": "mostrar / esconder texto atrás do aviso de conteúdo",
+ "keyboard_shortcuts.toggle_sensitivity": "mostrar / ocultar multimédia",
+ "keyboard_shortcuts.toot": "criar uma nova publicação",
+ "keyboard_shortcuts.unfocus": "remover o foco da área de texto / pesquisa",
+ "keyboard_shortcuts.up": "mover para cima na lista",
"lightbox.close": "Fechar",
"lightbox.next": "Próximo",
"lightbox.previous": "Anterior",
+ "lightbox.zoom_in": "Ampliar para o tamanho real",
+ "lightbox.zoom_out": "Ajustar para caber",
"limited_account_hint.action": "Exibir perfil mesmo assim",
"limited_account_hint.title": "Este perfil foi ocultado pelos moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Mais de {name}",
"link_preview.shares": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
+ "lists.add_member": "Adicionar",
+ "lists.add_to_list": "Adicionar à lista",
+ "lists.add_to_lists": "Adicionar {name} às listas",
+ "lists.create": "Criar",
+ "lists.create_a_list_to_organize": "Criar uma nova lista para organizar a cronologia na página inicial",
+ "lists.create_list": "Criar lista",
"lists.delete": "Eliminar lista",
+ "lists.done": "Concluído",
"lists.edit": "Editar lista",
+ "lists.exclusive": "Ocultar membros na página inicial",
+ "lists.exclusive_hint": "Se alguém estiver nesta lista, oculte-o na cronologia da sua página inicial para evitar ver as publicações deles duas vezes.",
+ "lists.find_users_to_add": "Encontrar utilizadores adicionar",
+ "lists.list_members": "Membros da lista",
+ "lists.list_members_count": "{count, plural, one {# membro} other {# membros}}",
+ "lists.list_name": "Nome da lista",
+ "lists.new_list_name": "Nome da nova lista",
+ "lists.no_lists_yet": "Ainda não existem listas.",
+ "lists.no_members_yet": "Ainda não existem membros.",
+ "lists.no_results_found": "Nenhuns resultados encontrados.",
+ "lists.remove_member": "Remover",
"lists.replies_policy.followed": "Qualquer utilizador seguido",
"lists.replies_policy.list": "Membros da lista",
"lists.replies_policy.none": "Ninguém",
+ "lists.save": "Guardar",
+ "lists.search": "Pesquisar",
+ "lists.show_replies_to": "Incluir respostas da lista de membros para",
"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",
- "mute_modal.indefinite": "Até que eu os tire do silêncio",
+ "mute_modal.indefinite": "Até que eu deixe de o ocultar",
"mute_modal.show_options": "Mostrar opções",
- "mute_modal.they_can_mention_and_follow": "Eles podem mencioná-lo e segui-lo, mas você não os verá.",
- "mute_modal.they_wont_know": "Eles não saberão que foram silenciados.",
- "mute_modal.title": "Silenciar utilizador?",
- "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.",
+ "mute_modal.they_can_mention_and_follow": "Ele pode mencioná-lo e segui-lo, mas você não o verá.",
+ "mute_modal.they_wont_know": "Ele não saberá que o ocultou.",
+ "mute_modal.title": "Ocultar utilizador?",
+ "mute_modal.you_wont_see_mentions": "Não verá publicações que mencionem este utilizador.",
+ "mute_modal.you_wont_see_posts": "Não verá as publicações dele e ele não poderá ver as suas publicações.",
"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",
"navigation_bar.community_timeline": "Cronologia local",
- "navigation_bar.compose": "Escrever novo toot",
+ "navigation_bar.compose": "Escrever nova publicação",
"navigation_bar.direct": "Menções privadas",
"navigation_bar.discover": "Descobrir",
"navigation_bar.domain_blocks": "Domínios escondidos",
"navigation_bar.explore": "Explorar",
"navigation_bar.favourites": "Favoritos",
- "navigation_bar.filters": "Palavras silenciadas",
+ "navigation_bar.filters": "Palavras ocultadas",
"navigation_bar.follow_requests": "Seguidores pendentes",
- "navigation_bar.followed_tags": "Hashtags seguidas",
+ "navigation_bar.followed_tags": "Etiquetas seguidas",
"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.mutes": "Utilizadores ocultados",
"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",
"navigation_bar.pins": "Publicações fixadas",
@@ -485,9 +543,14 @@
"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.annual_report.message": "O seu #Wrapstodon {year} está à espera! Revela os destaques e os momentos memoráveis do seu ano no Mastodon!",
+ "notification.annual_report.view": "Ver #Wrapstodon",
"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.favourite_pm": "{name} favoritou a sua menção privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# outro favoritou} other {# outros favoritaram}} a sua menção privada",
"notification.follow": "{name} começou a seguir-te",
+ "notification.follow.name_and_others": "{name} e {count, plural, one {# outro seguiu-o} other {# outros seguiram-no}}",
"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",
@@ -495,6 +558,7 @@
"notification.label.private_reply": "Resposta privada",
"notification.label.reply": "Resposta",
"notification.mention": "Menção",
+ "notification.mentioned_you": "{name} mencionou-o",
"notification.moderation-warning.learn_more": "Saber mais",
"notification.moderation_warning": "Recebeu um aviso de moderação",
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
@@ -506,8 +570,8 @@
"notification.moderation_warning.action_suspend": "A sua conta foi suspensa.",
"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.reblog": "{name} impulsionou a tua publicação",
+ "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} impulsionaram 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.",
@@ -545,10 +609,11 @@
"notifications.column_settings.filter_bar.category": "Barra de filtros rápidos",
"notifications.column_settings.follow": "Novos seguidores:",
"notifications.column_settings.follow_request": "Novos pedidos de seguidor:",
+ "notifications.column_settings.group": "Agrupar",
"notifications.column_settings.mention": "Menções:",
"notifications.column_settings.poll": "Resultados da sondagem:",
"notifications.column_settings.push": "Notificações Push",
- "notifications.column_settings.reblog": "Reforços:",
+ "notifications.column_settings.reblog": "Impulsos:",
"notifications.column_settings.show": "Mostrar na coluna",
"notifications.column_settings.sound": "Reproduzir som",
"notifications.column_settings.status": "Novas publicações:",
@@ -556,7 +621,7 @@
"notifications.column_settings.unread_notifications.highlight": "Destacar notificações por ler",
"notifications.column_settings.update": "Edições:",
"notifications.filter.all": "Todas",
- "notifications.filter.boosts": "Reforços",
+ "notifications.filter.boosts": "Impulsos",
"notifications.filter.favourites": "Favoritos",
"notifications.filter.follows": "Seguidores",
"notifications.filter.mentions": "Menções",
@@ -588,17 +653,21 @@
"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",
+ "onboarding.follows.back": "Voltar",
+ "onboarding.follows.done": "Concluído",
"onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.",
+ "onboarding.follows.search": "Pesquisar",
+ "onboarding.follows.title": "Siga pessoas para começar",
"onboarding.profile.discoverable": "Permitir que o meu perfil seja descoberto",
"onboarding.profile.discoverable_hint": "Quando opta pela possibilidade de ser descoberto no Mastodon, as suas mensagens podem aparecer nos resultados de pesquisa e nas tendências, e o seu perfil pode ser sugerido a pessoas com interesses semelhantes aos seus.",
"onboarding.profile.display_name": "Nome a apresentar",
"onboarding.profile.display_name_hint": "O seu nome completo ou o seu nome divertido…",
"onboarding.profile.note": "Bio",
- "onboarding.profile.note_hint": "Pode @mencionar outras pessoas ou #hashtags…",
+ "onboarding.profile.note_hint": "Pode @mencionar outras pessoas e usar #etiquetas…",
"onboarding.profile.save_and_continue": "Guardar e continuar",
"onboarding.profile.title": "Configuração do perfil",
- "onboarding.profile.upload_avatar": "Carregar foto de perfil",
- "onboarding.profile.upload_header": "Carregar cabeçalho do perfil",
+ "onboarding.profile.upload_avatar": "Enviar foto de perfil",
+ "onboarding.profile.upload_header": "Enviar cabeçalho do perfil",
"password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excedeu o tamanho máximo ",
"password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde",
"picture_in_picture.restore": "Colocá-lo de volta",
@@ -619,15 +688,15 @@
"privacy.private.short": "Seguidores",
"privacy.public.long": "Qualquer pessoa no Mastodon ou não",
"privacy.public.short": "Público",
- "privacy.unlisted.additional": "Isto comporta-se exatamente como público, exceto que a publicação não aparecerá em feeds nem em etiquetas, explorar ou pesquisa Mastodon, mesmo que tenha optado por isso na sua conta.",
+ "privacy.unlisted.additional": "Este comportamento é exatamente igual ao do público, exceto que a publicação não aparecerá em cronologias, nas etiquetas, ao explorar ou na pesquisa do Mastodon, mesmo que tenha optado por participar em toda a sua conta.",
"privacy.unlisted.long": "Menos fanfarras algorítmicas",
"privacy.unlisted.short": "Público silencioso",
"privacy_policy.last_updated": "Última atualização em {date}",
"privacy_policy.title": "Política de privacidade",
"recommended": "Recomendado",
"refresh": "Atualizar",
- "regeneration_indicator.label": "A carregar…",
- "regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!",
+ "regeneration_indicator.please_stand_by": "Por favor, aguarde.",
+ "regeneration_indicator.preparing_your_home_feed": "A preparar a cronologia na sua página inicial…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural,one {# dia} other {# dias}} atrás",
"relative_time.full.hours": "{number, plural,one {# hora}other {# horas}} atrás",
@@ -656,8 +725,8 @@
"report.comment.title": "Há algo mais que pensa que devemos saber?",
"report.forward": "Reencaminhar para {target}",
"report.forward_hint": "A conta é de outro servidor. Enviar uma cópia da anónima da denúncia para lá também?",
- "report.mute": "Silenciar",
- "report.mute_explanation": "Não verá as publicações deles. Eles ainda poderão segui-lo e ver as suas publicações e não saberão que estão silenciados.",
+ "report.mute": "Ocultar",
+ "report.mute_explanation": "Não verá as publicações dele. Ele não poderá ver as suas publicações nem de o seguir. Ele não saberá que o ocultou.",
"report.next": "Seguinte",
"report.placeholder": "Comentários adicionais",
"report.reasons.dislike": "Não gosto disto",
@@ -681,7 +750,7 @@
"report.thanks.title": "Não quer ver isto?",
"report.thanks.title_actionable": "Obrigado por denunciar. Iremos analisar.",
"report.unfollow": "Deixar de seguir @{name}",
- "report.unfollow_explanation": "Está a seguir esta conta. Para não voltar a ver as publicações desta conta na sua página inicial, deixe de a seguir.",
+ "report.unfollow_explanation": "Está a seguir esta conta. Para não voltar a ver as publicações desta conta na cronologia da sua página inicial, deixe de a seguir.",
"report_notification.attached_statuses": "{count, plural,one {{count} publicação} other {{count} publicações}} em anexo",
"report_notification.categories.legal": "Legal",
"report_notification.categories.legal_sentence": "conteúdo ilegal",
@@ -696,7 +765,7 @@
"search.placeholder": "Pesquisar",
"search.quick_action.account_search": "Perfis com correspondência a {x}",
"search.quick_action.go_to_account": "Ir para o perfil {x}",
- "search.quick_action.go_to_hashtag": "Ir para a hashtag {x}",
+ "search.quick_action.go_to_hashtag": "Ir para a etiqueta {x}",
"search.quick_action.open_url": "Abrir ligação no Mastodon",
"search.quick_action.status_search": "Publicações com correspondência a {x}",
"search.search_or_paste": "Pesquisar ou introduzir URL",
@@ -711,15 +780,18 @@
"search_results.accounts": "Perfis",
"search_results.all": "Tudo",
"search_results.hashtags": "Etiquetas",
+ "search_results.no_results": "Sem resultados.",
+ "search_results.no_search_yet": "Tente procurar por publicações, perfis ou etiquetas.",
"search_results.see_all": "Ver todos",
"search_results.statuses": "Publicações",
+ "search_results.title": "Pesquisar por \"{q}\"",
"server_banner.about_active_users": "Pessoas que utilizaram este servidor nos últimos 30 dias (Utilizadores Ativos Mensais)",
"server_banner.active_users": "utilizadores ativos",
"server_banner.administered_by": "Administrado por:",
"server_banner.is_one_of_many": "{domain} é um dos muitos servidores Mastodon independentes que pode utilizar para participar no fediverso.",
"server_banner.server_stats": "Estatísticas do servidor:",
"sign_in_banner.create_account": "Criar conta",
- "sign_in_banner.follow_anyone": "Siga alguém no fediverso e veja tudo em ordem cronológica. Sem algoritmos, anúncios ou clickbait à vista.",
+ "sign_in_banner.follow_anyone": "Siga qualquer pessoa no fediverso e veja tudo por ordem cronológica. Sem algoritmos, anúncios ou caça-cliques à vista.",
"sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.",
"sign_in_banner.sign_in": "Iniciar sessão",
"sign_in_banner.sso_redirect": "Inicie sessão ou registe-se",
@@ -728,8 +800,8 @@
"status.admin_status": "Abrir esta publicação na interface de moderação",
"status.block": "Bloquear @{name}",
"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.cancel_reblog_private": "Retirar impulso",
+ "status.cannot_reblog": "Esta publicação não pode ser impulsionada",
"status.continued_thread": "Continuação da conversa",
"status.copy": "Copiar hiperligação para a publicação",
"status.delete": "Eliminar",
@@ -751,25 +823,25 @@
"status.media_hidden": "Media escondida",
"status.mention": "Mencionar @{name}",
"status.more": "Mais",
- "status.mute": "Silenciar @{name}",
- "status.mute_conversation": "Silenciar conversa",
+ "status.mute": "Ocultar @{name}",
+ "status.mute_conversation": "Ocultar conversa",
"status.open": "Expandir",
"status.pin": "Afixar no perfil",
"status.pinned": "Publicação afixada",
"status.read_more": "Ler mais",
- "status.reblog": "Partilhar",
- "status.reblog_private": "Partilhar com a visibilidade original",
- "status.reblogged_by": "{name} reforçou",
- "status.reblogs": "{count, plural, one {partilha} other {partilhas}}",
- "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.reblog": "Impulsionar",
+ "status.reblog_private": "Impulsionar com a visibilidade original",
+ "status.reblogged_by": "{name} impulsionou",
+ "status.reblogs": "{count, plural, one {impulso} other {impulsos}}",
+ "status.reblogs.empty": "Ainda ninguém impulsionou esta publicação. Quando alguém o fizer, aparecerá aqui.",
+ "status.redraft": "Eliminar e 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",
"status.report": "Denunciar @{name}",
- "status.sensitive_warning": "Conteúdo problemático",
+ "status.sensitive_warning": "Conteúdo sensível",
"status.share": "Partilhar",
"status.show_less_all": "Mostrar menos para todas",
"status.show_more_all": "Mostrar mais para todas",
@@ -778,13 +850,14 @@
"status.translate": "Traduzir",
"status.translated_from_with": "Traduzido do {lang} usando {provider}",
"status.uncached_media_warning": "Pré-visualização não disponível",
- "status.unmute_conversation": "Deixar de silenciar esta conversa",
+ "status.unmute_conversation": "Desocultar esta conversa",
"status.unpin": "Desafixar do perfil",
"subscribed_languages.lead": "Após a alteração, apenas as publicações nos idiomas selecionados aparecerão na sua página inicial e listas. Não selecione nenhum para receber publicações de todos os idiomas.",
"subscribed_languages.save": "Guardar alterações",
"subscribed_languages.target": "Alterar idiomas subscritos para {target}",
"tabs_bar.home": "Início",
"tabs_bar.notifications": "Notificações",
+ "terms_of_service.title": "Termos do serviço",
"time_remaining.days": "{número, plural, um {# day} outro {# days}} faltam",
"time_remaining.hours": "{número, plural, um {# hour} outro {# hours}} faltam",
"time_remaining.minutes": "{número, plural, um {# minute} outro {# minutes}} faltam",
@@ -792,7 +865,7 @@
"time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam",
"trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}",
"trends.trending_now": "Tendências atuais",
- "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.",
+ "ui.beforeunload": "O seu rascunho será perdido se abandonar o Mastodon.",
"units.short.billion": "{count}MM",
"units.short.million": "{count}M",
"units.short.thousand": "{count}m",
@@ -802,6 +875,11 @@
"upload_error.poll": "Não é permitido o envio de ficheiros em sondagens.",
"upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva",
"upload_form.description": "Descreva para pessoas com diminuição da acuidade visual",
+ "upload_form.drag_and_drop.instructions": "Para escolher um anexo multimédia, prima espaço ou enter. Enquanto arrasta, utilize as teclas de setas para mover o anexo multimédia em qualquer direção. Prima espaço ou enter novamente para largar o anexo multimédia na sua nova posição ou prima escape para cancelar.",
+ "upload_form.drag_and_drop.on_drag_cancel": "O arrastamento foi cancelado. O anexo multimédia {item} foi descartado.",
+ "upload_form.drag_and_drop.on_drag_end": "O anexo multimédia {item} foi descartado.",
+ "upload_form.drag_and_drop.on_drag_over": "O anexo multimédia {item} foi movido.",
+ "upload_form.drag_and_drop.on_drag_start": "O anexo multimédia {item} foi escolhido.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Alterar miniatura",
"upload_form.video_description": "Descreva para pessoas com diminuição da acuidade auditiva ou visual",
@@ -811,7 +889,7 @@
"upload_modal.choose_image": "Escolher imagem",
"upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente",
"upload_modal.detect_text": "Detetar texto na imagem",
- "upload_modal.edit_media": "Editar media",
+ "upload_modal.edit_media": "Editar multimédia",
"upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.",
"upload_modal.preparing_ocr": "A preparar o reconhecimento de caracteres (OCR)…",
"upload_modal.preview_label": "Pré-visualizar ({ratio})",
@@ -824,8 +902,8 @@
"video.expand": "Expandir vídeo",
"video.fullscreen": "Ecrã completo",
"video.hide": "Esconder vídeo",
- "video.mute": "Silenciar",
+ "video.mute": "Desativar som",
"video.pause": "Pausar",
"video.play": "Reproduzir",
- "video.unmute": "Deixar de silenciar"
+ "video.unmute": "Ativar som"
}
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index 81057871dd..76c63d1a63 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -279,13 +279,6 @@
"home.pending_critical_update.link": "Vezi noutăți",
"home.pending_critical_update.title": "Actualizare critică de securitate disponibilă!",
"home.show_announcements": "Afișează anunțurile",
- "interaction_modal.description.favourite": "Cu un cont pe Mastodon, poți adăuga această postare la favorite pentru a-l informa pe autorul ei că o apreciezi și pentru a o salva pentru mai târziu.",
- "interaction_modal.description.follow": "Cu un cont Mastodon, poți urmări pe {name} pentru a vedea postările sale în cronologia ta principală.",
- "interaction_modal.description.reblog": "Cu un cont pe Mastodon, poți distribui această postare pentru a le-o arăta și celor abonați ție.",
- "interaction_modal.description.reply": "Cu un cont pe Mastodon, poți răspunde acestei postări.",
- "interaction_modal.login.action": "Du-mă acasă",
- "interaction_modal.login.prompt": "Adresa serverului tău acasă, de ex. mastodon.social",
- "interaction_modal.no_account_yet": "Nu ești încă pe Mastodon?",
"interaction_modal.on_another_server": "Pe un alt server",
"interaction_modal.on_this_server": "Pe acest server",
"interaction_modal.title.follow": "Urmărește pe {name}",
@@ -421,8 +414,6 @@
"privacy_policy.last_updated": "Ultima actualizare în data de {date}",
"privacy_policy.title": "Politică de confidențialitate",
"refresh": "Reîncarcă",
- "regeneration_indicator.label": "Se încarcă…",
- "regeneration_indicator.sublabel": "Cronologia ta principală este în curs de pregătire!",
"relative_time.days": "{number}z",
"relative_time.full.days": "acum {number, plural, one {o zi} few {# zile} other {# de zile}}",
"relative_time.full.hours": "acum {number, plural, one {o oră} few {# ore} other {# de ore}}",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 4e2b845c83..133cc78492 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -362,6 +362,7 @@
"footer.privacy_policy": "Политика конфиденциальности",
"footer.source_code": "Исходный код",
"footer.status": "Статус",
+ "footer.terms_of_service": "Пользовательское соглашение",
"generic.saved": "Сохранено",
"getting_started.heading": "Начать",
"hashtag.admin_moderation": "Открыть интерфейс модератора для #{name}",
@@ -406,23 +407,21 @@
"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, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.",
- "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?",
+ "interaction_modal.action.favourite": "Вы можете добавить этот пост в избранное со своей учётной записью.",
+ "interaction_modal.action.follow": "Вы можете подписаться со своей учётной записью.",
+ "interaction_modal.action.reblog": "Вы можете продвинуть этот пост со своей учётной записью.",
+ "interaction_modal.action.reply": "Вы можете ответить на этот пост со своей учётной записью.",
+ "interaction_modal.action.vote": "Вы можете проголосовать в этом опросе со своей учётной записью.",
+ "interaction_modal.go": "Вперёд!",
+ "interaction_modal.no_account_yet": "У вас нет никакой учётной записи?",
"interaction_modal.on_another_server": "На другом сервере",
"interaction_modal.on_this_server": "На этом сервере",
- "interaction_modal.sign_in": "Вы не вошли в систему на этом сервере. Где размещена ваша учетная запись?",
- "interaction_modal.sign_in_hint": "Совет: Это сайт, на котором вы зарегистрировались. Если вы не помните, найдите приветственное письмо в своем почтовом ящике. Вы также можете ввести свое полное имя пользователя! (например, @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Добавить пост {name} в избранное",
"interaction_modal.title.follow": "Подписаться на {name}",
- "interaction_modal.title.reblog": "Продвинуть публикацию {name}",
+ "interaction_modal.title.reblog": "Продвинуть пост {name}",
"interaction_modal.title.reply": "Ответить на пост {name}",
"interaction_modal.title.vote": "Голосовать в опросе {name}",
+ "interaction_modal.username_prompt": "Например {example}",
"intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}",
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
@@ -548,6 +547,8 @@
"notification.annual_report.view": "Перейти к #Wrapstodon",
"notification.favourite": "{name} добавил(а) ваш пост в избранное",
"notification.favourite.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваш пост в избранное",
+ "notification.favourite_pm": "{name} добавил(а) ваше личное сообщение в избранное",
+ "notification.favourite_pm.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваше личное сообщение в избранное",
"notification.follow": "{name} подписался (-лась) на вас",
"notification.follow.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} подписались на вас",
"notification.follow_request": "{name} отправил запрос на подписку",
@@ -694,8 +695,8 @@
"privacy_policy.title": "Политика конфиденциальности",
"recommended": "Рекомендуется",
"refresh": "Обновить",
- "regeneration_indicator.label": "Загрузка…",
- "regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!",
+ "regeneration_indicator.please_stand_by": "Пожалуйста, подождите.",
+ "regeneration_indicator.preparing_your_home_feed": "Готовим вашу ленту…",
"relative_time.days": "{number} д",
"relative_time.full.days": "{number, plural, one {# день} many {# дней} other {# дня}} назад",
"relative_time.full.hours": "{number, plural, one {# час} many {# часов} other {# часа}} назад",
@@ -779,8 +780,11 @@
"search_results.accounts": "Профили",
"search_results.all": "Все",
"search_results.hashtags": "Хэштеги",
+ "search_results.no_results": "Ничего не найдено.",
+ "search_results.no_search_yet": "Попробуйте поискать посты, профили или хэштеги.",
"search_results.see_all": "Показать все",
"search_results.statuses": "Посты",
+ "search_results.title": "Поиск \"{q}\"",
"server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)",
"server_banner.active_users": "активные пользователи",
"server_banner.administered_by": "Управляется:",
@@ -853,6 +857,7 @@
"subscribed_languages.target": "Изменить языки подписки для {target}",
"tabs_bar.home": "Главная",
"tabs_bar.notifications": "Уведомления",
+ "terms_of_service.title": "Пользовательское соглашение",
"time_remaining.days": "{number, plural, one {остался # день} few {осталось # дня} many {осталось # дней} other {осталось # дней}}",
"time_remaining.hours": "{number, plural, one {остался # час} few {осталось # часа} many {осталось # часов} other {осталось # часов}}",
"time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}",
diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json
index 1d0d91fc60..e6d4509e19 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -249,9 +249,6 @@
"home.column_settings.show_replies": "उत्तराणि दर्शय",
"home.hide_announcements": "विज्ञापनानि प्रच्छादय",
"home.show_announcements": "विज्ञापनानि दर्शय",
- "interaction_modal.description.follow": "मास्टोडोनि एकौण्टा {name} नाम्ना उपभोक्तारमनुसर्तुं शक्नोषि तस्य पत्राणि लब्धुं ते गृहनिरासे।",
- "interaction_modal.description.reblog": "मास्टोडिनि एकौण्टा पत्रमिदं बुस्तिति कर्तुं शक्नोषि ते स्वानुसारिणो भागं कर्तुम्।",
- "interaction_modal.description.reply": "मास्टोडोनि एकौण्टा पत्रमिदं प्रतिवादयितुं शक्नोषि।",
"interaction_modal.on_another_server": "अन्यस्मिन्सर्वरि",
"interaction_modal.on_this_server": "अस्मिन्सर्वरि",
"interaction_modal.title.follow": "{name} अनुसर",
@@ -383,8 +380,6 @@
"privacy_policy.last_updated": "अन्तिमवारं परिवर्तितम् {date}",
"privacy_policy.title": "गोपनीयतानीतिः",
"refresh": "नवीकुरु",
- "regeneration_indicator.label": "आरोपयति…",
- "regeneration_indicator.sublabel": "तव गृहनिरासः सज्जीकृतोऽस्ति!",
"relative_time.days": "{number}दि",
"relative_time.full.days": "{number, plural, one {# दिनं} other {# दिनानि}} पूर्वम्",
"relative_time.full.hours": "{number, plural, one {# होरा} other {# होराः}} पूर्वम्",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index 0c26ab4046..aaf3368d3c 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -338,10 +338,6 @@
"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}",
@@ -551,8 +547,6 @@
"privacy_policy.title": "Polìtica de riservadesa",
"recommended": "Cussigiadu",
"refresh": "Atualiza",
- "regeneration_indicator.label": "Carrighende…",
- "regeneration_indicator.sublabel": "Preparende sa lìnia de tempus printzipale tua.",
"relative_time.days": "{number} dies a oe",
"relative_time.full.days": "{number, plural, one {# die} other {# dies}} a oe",
"relative_time.full.hours": "{number, plural, one {# ora} other {# oras}} a immoe",
diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json
index 8b442d1ac8..8a0efb6a31 100644
--- a/app/javascript/mastodon/locales/sco.json
+++ b/app/javascript/mastodon/locales/sco.json
@@ -234,9 +234,6 @@
"home.column_settings.show_replies": "Shaw replies",
"home.hide_announcements": "Hide annooncements",
"home.show_announcements": "Shaw annooncements",
- "interaction_modal.description.follow": "Wi a accoont on Mastodon, ye kin follae {name} tae get their posts on yer hame feed.",
- "interaction_modal.description.reblog": "Wi a accoont on Mastodon, ye kin heeze this post tae ahare it wi yer ain follaers.",
- "interaction_modal.description.reply": "Wi a accoont on Mastodon, ye kin sen a repone tae this post.",
"interaction_modal.on_another_server": "On a different server",
"interaction_modal.on_this_server": "On this server",
"interaction_modal.title.follow": "Follae {name}",
@@ -365,8 +362,6 @@
"privacy_policy.last_updated": "Last updatit {date}",
"privacy_policy.title": "Privacy Policy",
"refresh": "Refresh",
- "regeneration_indicator.label": "Loadin…",
- "regeneration_indicator.sublabel": "Yer hame feed is gettin sortit fir ye!",
"relative_time.days": "{number}t",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} syne",
"relative_time.full.hours": "{number, plural, one {# oor} other {# oors}} syne",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
index f2e290f040..d8a8c0a094 100644
--- a/app/javascript/mastodon/locales/si.json
+++ b/app/javascript/mastodon/locales/si.json
@@ -211,7 +211,6 @@
"home.hide_announcements": "නිවේදන සඟවන්න",
"home.pending_critical_update.link": "යාවත්කාල බලන්න",
"home.show_announcements": "නිවේදන පෙන්වන්න",
- "interaction_modal.login.action": "මුලට ගෙනයන්න",
"interaction_modal.on_another_server": "වෙනත් සේවාදායකයක",
"interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි",
"interaction_modal.title.favourite": "{name}ගේ ලිපිය ප්රිය කරන්න",
@@ -314,7 +313,6 @@
"privacy.public.short": "ප්රසිද්ධ",
"privacy_policy.title": "රහස්යතා ප්රතිපත්තිය",
"refresh": "නැවුම් කරන්න",
- "regeneration_indicator.label": "පූරණය වෙමින්…",
"relative_time.days": "ද. {number}",
"relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර",
"relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 7806104c9c..262defbd61 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -99,6 +99,7 @@
"annual_report.summary.most_used_hashtag.none": "Žiaden",
"annual_report.summary.new_posts.new_posts": "nové príspevky",
"annual_report.summary.percentile.we_wont_tell_bernie": "Nepovieme Berniemu.",
+ "annual_report.summary.thanks": "Vďaka, že si súčasťou Mastodonu!",
"attachments_list.unprocessed": "(nespracované)",
"audio.hide": "Skryť zvuk",
"block_modal.show_less": "Zobraziť menej",
@@ -333,8 +334,10 @@
"footer.privacy_policy": "Pravidlá ochrany súkromia",
"footer.source_code": "Zobraziť zdrojový kód",
"footer.status": "Stav",
+ "footer.terms_of_service": "Podmienky prevozu",
"generic.saved": "Uložené",
"getting_started.heading": "Začíname",
+ "hashtag.admin_moderation": "Otvor moderovacie rozhranie pre #{name}",
"hashtag.column_header.tag_mode.all": "a {additional}",
"hashtag.column_header.tag_mode.any": "alebo {additional}",
"hashtag.column_header.tag_mode.none": "bez {additional}",
@@ -350,6 +353,9 @@
"hashtag.follow": "Sledovať hashtag",
"hashtag.unfollow": "Prestať sledovať hashtag",
"hashtags.and_other": "…a {count, plural, other {# ďalších}}",
+ "hints.profiles.posts_may_be_missing": "Niektoré príspevky z tohto profilu môžu chýbať.",
+ "hints.profiles.see_more_followers": "Pozri viac nasledovateľov na {domain}",
+ "hints.profiles.see_more_follows": "Pozri viac nasledovateľov na {domain}",
"hints.profiles.see_more_posts": "Pozri viac príspevkov na {domain}",
"hints.threads.replies_may_be_missing": "Odpovede z ostatných serverov môžu chýbať.",
"hints.threads.see_more": "Pozri viac odpovedí na {domain}",
@@ -368,17 +374,8 @@
"ignore_notifications_modal.not_followers_title": "Nevšímať si oznámenia od ľudí, ktorí ťa nenasledujú?",
"ignore_notifications_modal.not_following_title": "Nevšímať si oznámenia od ľudí, ktorých nenasleduješ?",
"ignore_notifications_modal.private_mentions_title": "Nevšímať si oznámenia o nevyžiadaných súkromných spomínaniach?",
- "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.",
- "interaction_modal.description.reblog": "S účtom na Mastodone môžete tento príspevok zdeľať so svojimi sledovateľmi.",
- "interaction_modal.description.reply": "S účtom na Mastodone môžete na tento príspevok odpovedať.",
- "interaction_modal.login.action": "Prejsť domov",
- "interaction_modal.login.prompt": "Doména vášho domovského servera, napr. mastodon.social",
- "interaction_modal.no_account_yet": "Nie ste na Mastodone?",
"interaction_modal.on_another_server": "Na inom serveri",
"interaction_modal.on_this_server": "Na tomto serveri",
- "interaction_modal.sign_in": "Na tomto serveri nie ste prihlásený. Kde je váš účet hostený?",
- "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno (napr. @Mastodon@mastodon.social).",
"interaction_modal.title.favourite": "Ohviezdičkovať príspevok od {name}",
"interaction_modal.title.follow": "Sledovať {name}",
"interaction_modal.title.reblog": "Zdieľať príspevok od {name}",
@@ -498,6 +495,7 @@
"notification.admin.report_statuses_other": "{name} nahlásil/a {target}",
"notification.admin.sign_up": "Nová registráciu účtu {name}",
"notification.favourite": "{name} hviezdičkuje váš príspevok",
+ "notification.favourite_pm": "{name} obľúbil/a tvoje súkromné spomenutie",
"notification.follow": "{name} vás sleduje",
"notification.follow_request": "{name} vás žiada sledovať",
"notification.label.mention": "Zmienka",
@@ -510,6 +508,8 @@
"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_none": "Tvoj účet dostal upozornenie od moderátora.",
+ "notification.moderation_warning.action_sensitive": "Tvoje príspevky budú odteraz označované ako chúlostivé.",
"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",
@@ -615,8 +615,6 @@
"privacy_policy.title": "Pravidlá ochrany súkromia",
"recommended": "Odporúčané",
"refresh": "Obnoviť",
- "regeneration_indicator.label": "Načítavanie…",
- "regeneration_indicator.sublabel": "Váš domovský kanál sa pripravuje.",
"relative_time.days": "{number} dní",
"relative_time.full.days": "Pred {number, plural, one {# dňom} other {# dňami}}",
"relative_time.full.hours": "Pred {number, plural, one {# hodinou} other {# hodinami}}",
@@ -699,8 +697,11 @@
"search_results.accounts": "Profily",
"search_results.all": "Všetky",
"search_results.hashtags": "Hashtagy",
+ "search_results.no_results": "Žiadne výsledky.",
+ "search_results.no_search_yet": "Skús vyhľadávať príspevky, profily, alebo hashtagy.",
"search_results.see_all": "Zobraziť všetky",
"search_results.statuses": "Príspevky",
+ "search_results.title": "Hľadaj \"{q}\"",
"server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (aktívni používatelia za mesiac)",
"server_banner.active_users": "Aktívne účty",
"server_banner.administered_by": "Správa servera:",
@@ -746,6 +747,7 @@
"status.reblogs.empty": "Nikto ešte tento príspevok nezdieľal. Keď tak niekto urobí, zobrazí sa to tu.",
"status.redraft": "Vymazať a prepísať",
"status.remove_bookmark": "Odstrániť záložku",
+ "status.replied_in_thread": "Odpovedal/a vo vlákne",
"status.replied_to": "Odpoveď na {name}",
"status.reply": "Odpovedať",
"status.replyAll": "Odpovedať vo vlákne",
@@ -766,6 +768,7 @@
"subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}",
"tabs_bar.home": "Domov",
"tabs_bar.notifications": "Upozornenia",
+ "terms_of_service.title": "Podmienky prevozu",
"time_remaining.days": "Ostáva{number, plural, one { # deň} few {jú # dni} many { # dní} other { # dní}}",
"time_remaining.hours": "Ostáva{number, plural, one { # hodina} few {jú # hodiny} many { # hodín} other { # hodín}}",
"time_remaining.minutes": "Ostáva{number, plural, one { # minúta} few {jú # minúty} many { # minút} other { # minút}}",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index a297dd4a83..1e44d31ac4 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -368,17 +368,8 @@
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtriranje pomaga pri izogibanju morebitni zmedi",
"ignore_notifications_modal.filter_to_review_separately": "Filtrirana obvestila lahko pregledate ločeno",
"ignore_notifications_modal.ignore": "Prezri obvestila",
- "interaction_modal.description.favourite": "Z računom na Mastodonu lahko to objavo postavite med priljubljene in tako avtorju nakažete, da jo cenite, in jo shranite za kasneje.",
- "interaction_modal.description.follow": "Z računom na Mastodonu lahko sledite {name}, da prejemate njihove objave v svoj domači vir.",
- "interaction_modal.description.reblog": "Z računom na Mastodonu lahko izpostavite to objavo, tako da jo delite s svojimi sledilci.",
- "interaction_modal.description.reply": "Z računom na Mastodonu lahko odgovorite na to objavo.",
- "interaction_modal.login.action": "Vrni me domov",
- "interaction_modal.login.prompt": "Domena vašega domačega strežnika, npr. mastodon.social",
- "interaction_modal.no_account_yet": "Niste na Mastodonu?",
"interaction_modal.on_another_server": "Na drugem strežniku",
"interaction_modal.on_this_server": "Na tem strežniku",
- "interaction_modal.sign_in": "Niste prijavljeni v ta strežnik. Kje gostuje vaš račun?",
- "interaction_modal.sign_in_hint": "Nasvet: To je spletno mesto, na katerem ste se prijavili. Če se ne spomnite, poiščite pozdravno e-poštno sporočilo v svojem e-poštnem predalu. Vpišete lahko tudi svoje celotno uporabniško ime (npr. @Mastodon@mastodon.social)!",
"interaction_modal.title.favourite": "Daj objavo {name} med priljubljene",
"interaction_modal.title.follow": "Sledi {name}",
"interaction_modal.title.reblog": "Izpostavi objavo {name}",
@@ -620,8 +611,6 @@
"privacy_policy.title": "Pravilnik o zasebnosti",
"recommended": "Priporočeno",
"refresh": "Osveži",
- "regeneration_indicator.label": "Nalaganje …",
- "regeneration_indicator.sublabel": "Vaš domači vir se pripravlja!",
"relative_time.days": "{number} d",
"relative_time.full.days": "{number, plural, one {pred # dnem} two {pred # dnevoma} few {pred # dnevi} other {pred # dnevi}}",
"relative_time.full.hours": "{number, plural, one {pred # uro} two {pred # urama} few {pred # urami} other {pred # urami}}",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 8da648e4ff..b13402afa4 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -402,23 +402,21 @@
"ignore_notifications_modal.not_followers_title": "Të shpërfillen njoftime nga persona që s’ju ndjekin?",
"ignore_notifications_modal.not_following_title": "Të shpërfillen njoftime nga persona që s’i ndiqni?",
"ignore_notifications_modal.private_mentions_title": "Të shpërfillen njoftime nga Përmendje Private të pakërkuara?",
- "interaction_modal.description.favourite": "Me një llogari në Mastodon, mund ta tregoni këtë postim si të parapëlqyer, për t’i bërë të ditur autorit se e çmoni dhe e ruani për më vonë.",
- "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?",
+ "interaction_modal.action.favourite": "Që të vazhdoni, lypset t’i vini shenjë si i parapëlqyer që nga llogaria juaj.",
+ "interaction_modal.action.follow": "Që të vazhdoni, lypset ta ndiqni që nga llogaria juaj.",
+ "interaction_modal.action.reblog": "Që të vazhdoni, lypset ta riblogoni që nga llogaria juaj.",
+ "interaction_modal.action.reply": "Që të vazhdoni, lypset të përgjigjeni që nga llogaria juaj.",
+ "interaction_modal.action.vote": "Që të vazhdoni, lypset të votoni që nga llogaria juaj.",
+ "interaction_modal.go": "Shko",
+ "interaction_modal.no_account_yet": "S’keni ende një llogari?",
"interaction_modal.on_another_server": "Në një tjetër shërbyes",
"interaction_modal.on_this_server": "Në këtë shërbyes",
- "interaction_modal.sign_in": "S’keni bërë hyrjen në këtë shërbyes. Ku strehoet llogaria juaj?",
- "interaction_modal.sign_in_hint": "Ndihmës: Ky është sajti ku u regjistruat. Nëse s’e mbani mend, shihni te email-et tuaj për email-in e mirëseardhjes. Mudeni edhe të jepni emrin tuaj të plotë të përdoruesi! (p.sh. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Bëje të parapëlqyer postimin e {name}",
"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}",
+ "interaction_modal.username_prompt": "P.sh., {example}",
"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}}",
@@ -692,8 +690,8 @@
"privacy_policy.title": "Rregulla Privatësie",
"recommended": "E rekomanduar",
"refresh": "Rifreskoje",
- "regeneration_indicator.label": "Po ngarkohet…",
- "regeneration_indicator.sublabel": "Prurja juaj vetjake po përgatitet!",
+ "regeneration_indicator.please_stand_by": "Ju lutemi, mos u largoni.",
+ "regeneration_indicator.preparing_your_home_feed": "Po përgatitet prurja juaj e kreut…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# ditë} other {# ditë}} më parë",
"relative_time.full.hours": "{number, plural, one {# orë} other {# orë}} më parë",
@@ -777,8 +775,11 @@
"search_results.accounts": "Profile",
"search_results.all": "Krejt",
"search_results.hashtags": "Hashtag-ë",
+ "search_results.no_results": "S’ka përfundime.",
+ "search_results.no_search_yet": "Provoni të kërkoni për postime, profile ose hashtag-ë.",
"search_results.see_all": "Shihni krejt",
"search_results.statuses": "Mesazhe",
+ "search_results.title": "Kërko për “{q}”",
"server_banner.about_active_users": "Persona që përdorin këtë shërbyes gjatë 30 ditëve të fundit (Përdorues Mujorë Aktivë)",
"server_banner.active_users": "përdorues aktivë",
"server_banner.administered_by": "Administruar nga:",
diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json
index 77d3ef7156..6fdb2da2ab 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -336,17 +336,8 @@
"home.pending_critical_update.link": "Pogledajte ažuriranja",
"home.pending_critical_update.title": "Dostupno je kritično bezbednosno ažuriranje!",
"home.show_announcements": "Prijaži najave",
- "interaction_modal.description.favourite": "Sa nalogom na Mastodon-u, možete označiti ovu objavu kao omiljenu kako biste dali do znanja autoru da vam se sviđa i sačuvali je za kasnije.",
- "interaction_modal.description.follow": "Sa nalogom na Mastodon-u, možete pratiti korisnika {name} kako biste primali njegove objave na početnoj stranici.",
- "interaction_modal.description.reblog": "Sa nalogom na Mastodon-u, možete podržati ovu objavu kako bite je podelili sa svojim pratiocima.",
- "interaction_modal.description.reply": "Sa nalogom na Mastodon-u, možete odgovoriti na ovu objavu.",
- "interaction_modal.login.action": "Vodi me na početnu stranicu",
- "interaction_modal.login.prompt": "Domen vašeg matičnog servera, npr. mastodon.social",
- "interaction_modal.no_account_yet": "Niste na Mastodon-u?",
"interaction_modal.on_another_server": "Na drugom serveru",
"interaction_modal.on_this_server": "Na ovom serveru",
- "interaction_modal.sign_in": "Niste prijavljeni na ovaj server. Gde je hostovan vaš nalog?",
- "interaction_modal.sign_in_hint": "Savet: To je veb sajt na kome ste se registrovali. Ako se ne sećate, potražite e-poruku dobrodošlice u svom prijemnom sandučetu. Takođe možete uneti svoje puno korisničko ime! (npr. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Označi objavu korisnika {name} kao omiljenu",
"interaction_modal.title.follow": "Zaprati {name}",
"interaction_modal.title.reblog": "Podrži objavu korisnika {name}",
@@ -548,8 +539,6 @@
"privacy_policy.title": "Politika privatnosti",
"recommended": "Preporučeno",
"refresh": "Osveži",
- "regeneration_indicator.label": "Učitavanje…",
- "regeneration_indicator.sublabel": "Vaša početna stranica se priprema!",
"relative_time.days": "{number} dan.",
"relative_time.full.days": "Pre {number, plural, one {# dan} few {# dana} other {# dana}}",
"relative_time.full.hours": "pre {number, plural, one {# sat} few {# sata} other {# sati}}",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 06290cfcd7..29661e13a9 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -336,17 +336,8 @@
"home.pending_critical_update.link": "Погледајте ажурирања",
"home.pending_critical_update.title": "Доступно је критично безбедносно ажурирање!",
"home.show_announcements": "Пријажи најаве",
- "interaction_modal.description.favourite": "Са налогом на Mastodon-у, можете означити ову објаву као омиљену како бисте дали до знања аутору да вам се свиђа и сачували је за касније.",
- "interaction_modal.description.follow": "Са налогом на Mastodon-у, можете пратити корисника {name} како бисте примали његове објаве на почетној страници.",
- "interaction_modal.description.reblog": "Са налогом на Mastodon-у, можете подржати ову објаву како бите је поделили са својим пратиоцима.",
- "interaction_modal.description.reply": "Са налогом на Mastodon-у, можете одговорити на ову објаву.",
- "interaction_modal.login.action": "Води ме на почетну страницу",
- "interaction_modal.login.prompt": "Домен вашег матичног сервера, нпр. mastodon.social",
- "interaction_modal.no_account_yet": "Нисте на Mastodon-у?",
"interaction_modal.on_another_server": "На другом серверу",
"interaction_modal.on_this_server": "На овом серверу",
- "interaction_modal.sign_in": "Нисте пријављени на овај сервер. Где је хостован ваш налог?",
- "interaction_modal.sign_in_hint": "Савет: То је веб сајт на коме сте се регистровали. Ако се не сећате, потражите е-поруку добродошлице у свом пријемном сандучету. Такође можете унети своје пуно корисничко име! (нпр. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Означи објаву корисника {name} као омиљену",
"interaction_modal.title.follow": "Запрати {name}",
"interaction_modal.title.reblog": "Подржи објаву корисника {name}",
@@ -548,8 +539,6 @@
"privacy_policy.title": "Политика приватности",
"recommended": "Препоручено",
"refresh": "Освежи",
- "regeneration_indicator.label": "Учитавање…",
- "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!",
"relative_time.days": "{number} дан.",
"relative_time.full.days": "Пре {number, plural, one {# дан} few {# дана} other {# дана}}",
"relative_time.full.hours": "пре {number, plural, one {# сат} few {# сата} other {# сати}}",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 2cd10bdb1f..d53825295f 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -403,18 +403,8 @@
"ignore_notifications_modal.not_followers_title": "Vill du ignorera aviseringar från personer som inte följer dig?",
"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 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.",
- "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?",
"interaction_modal.on_another_server": "På en annan server",
"interaction_modal.on_this_server": "På denna server",
- "interaction_modal.sign_in": "Du är inte inloggad på den här servern. Var är ditt konto ifrån?",
- "interaction_modal.sign_in_hint": "Tips: Det är den webbplats där du registrerade dig. Om du inte kommer ihåg, leta efter välkomstmeddelandet i din mejlinkorg. Du kan också ange ditt fullständiga användarnamn! (t.ex. @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Favoritmarkera {name}s inlägg",
"interaction_modal.title.follow": "Följ {name}",
"interaction_modal.title.reblog": "Boosta {name}s inlägg",
@@ -484,9 +474,12 @@
"lists.new_list_name": "Nytt listnamn",
"lists.no_lists_yet": "Ännu inga listor.",
"lists.no_members_yet": "Inga medlemmar ännu.",
+ "lists.remove_member": "Ta bort",
"lists.replies_policy.followed": "Alla användare som följs",
"lists.replies_policy.list": "Medlemmar i listan",
"lists.replies_policy.none": "Ingen",
+ "lists.save": "Spara",
+ "lists.search": "Sök",
"load_pending": "{count, plural, one {# nytt objekt} other {# nya objekt}}",
"loading_indicator.label": "Laddar…",
"media_gallery.hide": "Dölj",
@@ -643,7 +636,10 @@
"notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar",
"notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.",
"notifications_permission_banner.title": "Missa aldrig något",
+ "onboarding.follows.back": "Tillbaka",
+ "onboarding.follows.done": "Färdig",
"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.search": "Sök",
"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",
@@ -681,8 +677,6 @@
"privacy_policy.title": "Integritetspolicy",
"recommended": "Rekommenderas",
"refresh": "Läs om",
- "regeneration_indicator.label": "Laddar…",
- "regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sedan",
"relative_time.full.hours": "{number, plural, one {# timme} other {# timmar}} sedan",
diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json
index 92fa6b2ebe..afe2627cac 100644
--- a/app/javascript/mastodon/locales/ta.json
+++ b/app/javascript/mastodon/locales/ta.json
@@ -292,8 +292,6 @@
"privacy.change": "நிலை தனியுரிமை",
"privacy.public.short": "பொது",
"refresh": "புதுப்பி",
- "regeneration_indicator.label": "சுமையேற்றம்…",
- "regeneration_indicator.sublabel": "உங்கள் வீட்டு ஊட்டம் தயார் செய்யப்படுகிறது!",
"relative_time.days": "{number}நா",
"relative_time.hours": "{number}ம",
"relative_time.just_now": "இப்பொழுது",
diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json
index 7a5e1f00fe..94b9f0e6a4 100644
--- a/app/javascript/mastodon/locales/te.json
+++ b/app/javascript/mastodon/locales/te.json
@@ -198,8 +198,6 @@
"poll_button.remove_poll": "ఎన్నికను తొలగించు",
"privacy.change": "స్టేటస్ గోప్యతను సర్దుబాటు చేయండి",
"privacy.public.short": "ప్రజా",
- "regeneration_indicator.label": "లోడ్ అవుతోంది…",
- "regeneration_indicator.sublabel": "మీ హోమ్ ఫీడ్ సిద్ధమవుతోంది!",
"relative_time.just_now": "ఇప్పుడు",
"reply_indicator.cancel": "రద్దు చెయ్యి",
"report.forward": "{target}కి ఫార్వార్డ్ చేయండి",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 09b2ab38d4..7746a731e5 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -97,6 +97,9 @@
"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.most_used_hashtag.none": "ไม่มี",
"annual_report.summary.new_posts.new_posts": "โพสต์ใหม่",
"annual_report.summary.percentile.we_wont_tell_bernie": "เราจะไม่บอก Bernie",
@@ -124,6 +127,7 @@
"bundle_column_error.routing.body": "ไม่พบหน้าที่ขอ คุณแน่ใจหรือไม่ว่า URL ในแถบที่อยู่ถูกต้อง?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "ปิด",
+ "bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดหน้าจอนี้",
"bundle_modal_error.retry": "ลองอีกครั้ง",
"closed_registrations.other_server_instructions": "เนื่องจาก Mastodon เป็นแบบกระจายศูนย์ คุณสามารถสร้างบัญชีในเซิร์ฟเวอร์อื่นและยังคงโต้ตอบกับเซิร์ฟเวอร์นี้",
"closed_registrations_modal.description": "ไม่สามารถสร้างบัญชีใน {domain} ได้ในปัจจุบัน แต่โปรดจำไว้ว่าคุณไม่จำเป็นต้องมีบัญชีใน {domain} โดยเฉพาะเพื่อใช้ Mastodon",
@@ -156,6 +160,7 @@
"column_header.pin": "ปักหมุด",
"column_header.show_settings": "แสดงการตั้งค่า",
"column_header.unpin": "ถอนหมุด",
+ "column_search.cancel": "ยกเลิก",
"column_subheading.settings": "การตั้งค่า",
"community.column_settings.local_only": "ในเซิร์ฟเวอร์เท่านั้น",
"community.column_settings.media_only": "สื่อเท่านั้น",
@@ -198,6 +203,8 @@
"confirmations.edit.confirm": "แก้ไข",
"confirmations.edit.message": "การแก้ไขในตอนนี้จะเขียนทับข้อความที่คุณกำลังเขียนในปัจจุบัน คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
"confirmations.edit.title": "เขียนทับโพสต์?",
+ "confirmations.follow_to_list.confirm": "ติดตามและเพิ่มไปยังรายการ",
+ "confirmations.follow_to_list.title": "ติดตามผู้ใช้?",
"confirmations.logout.confirm": "ออกจากระบบ",
"confirmations.logout.message": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?",
"confirmations.logout.title": "ออกจากระบบ?",
@@ -348,8 +355,10 @@
"footer.privacy_policy": "นโยบายความเป็นส่วนตัว",
"footer.source_code": "ดูโค้ดต้นฉบับ",
"footer.status": "สถานะ",
+ "footer.terms_of_service": "เงื่อนไขการให้บริการ",
"generic.saved": "บันทึกแล้ว",
"getting_started.heading": "เริ่มต้นใช้งาน",
+ "hashtag.admin_moderation": "เปิดส่วนติดต่อการกลั่นกรองสำหรับ #{name}",
"hashtag.column_header.tag_mode.all": "และ {additional}",
"hashtag.column_header.tag_mode.any": "หรือ {additional}",
"hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}",
@@ -391,18 +400,8 @@
"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 คุณสามารถดันโพสต์นี้เพื่อแชร์โพสต์กับผู้ติดตามของคุณเอง",
- "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?",
"interaction_modal.on_another_server": "ในเซิร์ฟเวอร์อื่น",
"interaction_modal.on_this_server": "ในเซิร์ฟเวอร์นี้",
- "interaction_modal.sign_in": "คุณไม่ได้เข้าสู่ระบบเซิร์ฟเวอร์นี้ บัญชีของคุณโฮสต์อยู่ที่ไหน?",
- "interaction_modal.sign_in_hint": "เคล็ดลับ: นั่นคือเว็บไซต์ที่คุณได้ลงทะเบียน หากคุณจำไม่ได้ มองหาอีเมลต้อนรับในกล่องขาเข้าของคุณ คุณยังสามารถป้อนชื่อผู้ใช้เต็มของคุณ! (เช่น @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "ชื่นชอบโพสต์ของ {name}",
"interaction_modal.title.follow": "ติดตาม {name}",
"interaction_modal.title.reblog": "ดันโพสต์ของ {name}",
@@ -479,6 +478,7 @@
"lists.replies_policy.list": "สมาชิกของรายการ",
"lists.replies_policy.none": "ไม่มีใคร",
"lists.save": "บันทึก",
+ "lists.search": "ค้นหา",
"lists.show_replies_to": "รวมการตอบกลับจากสมาชิกของรายการถึง",
"load_pending": "{count, plural, other {# รายการใหม่}}",
"loading_indicator.label": "กำลังโหลด…",
@@ -531,6 +531,8 @@
"notification.annual_report.view": "ดู #Wrapstodon",
"notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ",
"notification.favourite.name_and_others_with_link": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ชื่นชอบโพสต์ของคุณ",
+ "notification.favourite_pm": "{name} ได้ชื่นชอบการกล่าวถึงแบบส่วนตัวของคุณ",
+ "notification.favourite_pm.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} ได้ขอติดตามคุณ",
@@ -635,7 +637,11 @@
"notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป",
"notifications_permission_banner.how_to_control": "เพื่อรับการแจ้งเตือนเมื่อ Mastodon ไม่ได้เปิด เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมชนิดของการโต้ตอบที่สร้างการแจ้งเตือนบนเดสก์ท็อปได้อย่างแม่นยำผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งานการแจ้งเตือน",
"notifications_permission_banner.title": "ไม่พลาดสิ่งใด",
+ "onboarding.follows.back": "ย้อนกลับ",
+ "onboarding.follows.done": "เสร็จสิ้น",
"onboarding.follows.empty": "น่าเสียดาย ไม่สามารถแสดงผลลัพธ์ได้ในตอนนี้ คุณสามารถลองใช้การค้นหาหรือเรียกดูหน้าสำรวจเพื่อค้นหาผู้คนที่จะติดตาม หรือลองอีกครั้งในภายหลัง",
+ "onboarding.follows.search": "ค้นหา",
+ "onboarding.follows.title": "ติดตามผู้คนเพื่อเริ่มต้นใช้งาน",
"onboarding.profile.discoverable": "ทำให้โปรไฟล์ของฉันสามารถค้นพบได้",
"onboarding.profile.discoverable_hint": "เมื่อคุณเลือกรับความสามารถในการค้นพบใน Mastodon โพสต์ของคุณอาจปรากฏในผลลัพธ์การค้นหาและกำลังนิยม และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้คนที่มีความสนใจคล้ายกับคุณ",
"onboarding.profile.display_name": "ชื่อที่แสดง",
@@ -673,8 +679,6 @@
"privacy_policy.title": "นโยบายความเป็นส่วนตัว",
"recommended": "แนะนำ",
"refresh": "รีเฟรช",
- "regeneration_indicator.label": "กำลังโหลด…",
- "regeneration_indicator.sublabel": "กำลังเตรียมฟีดหน้าแรกของคุณ!",
"relative_time.days": "{number} วัน",
"relative_time.full.days": "{number, plural, other {# วัน}}ที่แล้ว",
"relative_time.full.hours": "{number, plural, other {# ชั่วโมง}}ที่แล้ว",
@@ -758,8 +762,10 @@
"search_results.accounts": "โปรไฟล์",
"search_results.all": "ทั้งหมด",
"search_results.hashtags": "แฮชแท็ก",
+ "search_results.no_results": "ไม่มีผลลัพธ์",
"search_results.see_all": "ดูทั้งหมด",
"search_results.statuses": "โพสต์",
+ "search_results.title": "ค้นหาสำหรับ \"{q}\"",
"server_banner.about_active_users": "ผู้คนที่ใช้เซิร์ฟเวอร์นี้ในระหว่าง 30 วันที่ผ่านมา (ผู้ใช้ที่ใช้งานอยู่รายเดือน)",
"server_banner.active_users": "ผู้ใช้ที่ใช้งานอยู่",
"server_banner.administered_by": "ดูแลโดย:",
@@ -832,6 +838,7 @@
"subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}",
"tabs_bar.home": "หน้าแรก",
"tabs_bar.notifications": "การแจ้งเตือน",
+ "terms_of_service.title": "เงื่อนไขการให้บริการ",
"time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}",
"time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}",
"time_remaining.minutes": "เหลืออีก {number, plural, other {# นาที}}",
diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json
index f0661413bf..c2c1dafd21 100644
--- a/app/javascript/mastodon/locales/tok.json
+++ b/app/javascript/mastodon/locales/tok.json
@@ -101,9 +101,12 @@
"block_modal.title": "o weka ala weka e jan",
"block_modal.you_wont_see_mentions": "nimi ona li lon toki suli la sina lukin ala e toki ni.",
"boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama",
+ "boost_modal.reblog": "o wawa ala wawa e toki?",
+ "boost_modal.undo_reblog": "o pini ala pini e wawa toki?",
"bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina",
"bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.",
"bundle_column_error.error.title": "ike a!",
+ "bundle_column_error.network.body": "mi lukin pana e lipu la, pakala li lon. ken la, pakala li tan ilo nanpa sina. ken la, pakala li tan ilo nanpa suli pi ma kulupu ni.",
"bundle_column_error.network.title": "pakala la ilo sina li toki ala tawa ilo ante",
"bundle_column_error.retry": "o ni sin",
"bundle_column_error.return": "o tawa tomo",
@@ -113,6 +116,7 @@
"bundle_modal_error.message": "ilo li wile kama e ijo ni, taso pakala li lon.",
"bundle_modal_error.retry": "o ni sin",
"closed_registrations.other_server_instructions": "kulupu Masoton li jo e jan lawa mute, la sina ken pali e sijelo lon ma ante, li ken lukin e ijo pi ma ni.",
+ "closed_registrations_modal.description": "tenpo ni la, sina ken ala pali e jan lon ma {domain}. taso sina wile kepeken ilo Masoton la, sina ken pali e jan lon ma ante lon ala ma {domain}.",
"closed_registrations_modal.find_another_server": "o alasa e ma ante",
"closed_registrations_modal.title": "sina kama lon kulupu Masoton",
"column.about": "sona",
@@ -120,6 +124,7 @@
"column.bookmarks": "awen toki",
"column.community": "linja tenpo pi ma ni",
"column.create_list": "o pali e kulupu",
+ "column.direct": "mu len",
"column.directory": "o lukin e jan",
"column.domain_blocks": "ma pi wile ala lukin",
"column.edit_list": "o ante e kulupu",
@@ -153,6 +158,7 @@
"compose_form.poll.duration": "tenpo pana",
"compose_form.poll.multiple": "pana mute",
"compose_form.poll.option_placeholder": "ken nanpa {number}",
+ "compose_form.poll.single": "toki 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",
@@ -161,18 +167,24 @@
"compose_form.reply": "o toki lon ijo ni",
"compose_form.save_changes": "o sin e ni",
"compose_form.spoiler.marked": "o weka e toki pi ijo ike ken",
+ "compose_form.spoiler.unmarked": "o pali e toki pi ijo ike ken",
+ "compose_form.spoiler_placeholder": "toki pi ijo ike ken (sina ken ala e ni)",
"confirmation_modal.cancel": "o pini",
"confirmations.block.confirm": "o weka",
"confirmations.delete.confirm": "o weka",
"confirmations.delete.message": "sina wile ala wile weka e toki ni?",
+ "confirmations.delete.title": "o weka ala weka e toki?",
"confirmations.delete_list.confirm": "o weka",
"confirmations.delete_list.message": "sina wile ala wile weka e lipu ni?",
+ "confirmations.delete_list.title": "o weka ala weka e kulupu lipu?",
"confirmations.discard_edit_media.confirm": "o weka",
"confirmations.discard_edit_media.message": "toki sitelen anu lukin lili sitelen la ante pi awen ala li lon. sina wile weka e ante ni?",
"confirmations.edit.confirm": "o ante",
"confirmations.edit.message": "sina ante e toki sina la toki pali sina li weka. sina wile ala wile e ni?",
+ "confirmations.edit.title": "o weka ala weka e toki? ni la, toki li kama toki sin.",
"confirmations.logout.confirm": "o weka",
"confirmations.logout.message": "sina wile ala wile weka",
+ "confirmations.logout.title": "o weka?",
"confirmations.mute.confirm": "o len",
"confirmations.redraft.confirm": "o weka o pali sin e toki",
"confirmations.redraft.message": "pali sin e toki ni la sina wile ala wile weka e ona? sina ni la suli pi toki ni en wawa pi toki ni li weka. kin la toki lon toki ni li jo e mama ala.",
@@ -180,6 +192,7 @@
"confirmations.reply.message": "sina toki lon toki ni la toki pali sina li weka. sina wile ala wile e ni?",
"confirmations.unfollow.confirm": "o pini kute",
"confirmations.unfollow.message": "sina o wile ala wile pini kute e jan {name}?",
+ "content_warning.show": "o lukin",
"conversation.delete": "o weka e toki ni",
"conversation.mark_as_read": "ni o sin ala",
"conversation.open": "o lukin e toki",
@@ -194,11 +207,17 @@
"dismissable_banner.community_timeline": "ni li toki pi tenpo poka tawa ale tan jan lon ma lawa pi nimi {domain}.",
"dismissable_banner.dismiss": "o weka",
"domain_block_modal.block": "o weka e ma",
+ "domain_block_modal.they_wont_know": "ona li sona ala e ni: sina weka e ona.",
+ "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, other {jan {followersCountDisplay}}} li kute e sina la, ona kama kute ala e sina. sina kute e {followingCount, plural,other {jan {followingCountDisplay}}} la, sina kama kute ala e ona.",
+ "domain_block_modal.you_will_lose_relationships": "jan li lon kulupu ni la ona kute e sina la, ona li kama kute ala e sina. jan li lon kulupu ni la sina kute e ona la, sina kama kute ala e ona.",
"domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni",
"domain_pill.server": "ma",
+ "domain_pill.their_handle": "nimi pi ona taso li ni:",
"domain_pill.username": "nimi jan",
+ "domain_pill.your_username": "ni li nimi sina. ma sina la, sina taso li jo e ona. jan mute li lon ma ante la, ona li ken jo e nimi sama.",
"embed.preview": "ni li jo e sitelen ni:",
"emoji_button.activity": "musi",
+ "emoji_button.clear": "o weka",
"emoji_button.flags": "len ma",
"emoji_button.food": "moku",
"emoji_button.label": "o pana e sitelen pilin",
@@ -238,6 +257,7 @@
"firehose.remote": "kulupu ante",
"follow_request.authorize": "o ken",
"follow_request.reject": "o ala",
+ "follow_suggestions.dismiss": "mi wile lukin sin ala e ni",
"follow_suggestions.hints.friends_of_friends": "jan kute sina li lukin mute e toki pi jan ni.",
"follow_suggestions.hints.most_followed": "jan mute lon ma {domain} li kute e jan ni.",
"follow_suggestions.hints.most_interactions": "tenpo poka la jan mute pi ma {domain} li lukin mute e toki pi jan ni.",
@@ -257,8 +277,8 @@
"hashtag.column_settings.tag_mode.all": "ale ni",
"hashtag.column_settings.tag_mode.any": "wan ni",
"hashtag.column_settings.tag_mode.none": "ala ni",
+ "hashtag.counter_by_uses": "{count, plural, other {toki {counter}}}",
"home.pending_critical_update.link": "o lukin e ijo ilo sin",
- "interaction_modal.login.action": "o lon tomo",
"interaction_modal.on_another_server": "lon ma ante",
"interaction_modal.on_this_server": "lon ma ni",
"interaction_modal.title.favourite": "o suli e toki {name}",
@@ -333,7 +353,6 @@
"poll.votes": "{votes, plural, other {pana #}}",
"privacy.direct.long": "jan ale lon toki",
"privacy.public.short": "tawa ale",
- "regeneration_indicator.label": "ni li kama…",
"relative_time.days": "{number}d",
"relative_time.full.just_now": "tenpo ni",
"relative_time.hours": "{number}h",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 49116eeaad..787f9bfb4e 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Takip etmeyen kişilerin bildirimlerini yoksay?",
"ignore_notifications_modal.not_following_title": "Takip etmediğin kişilerin bildirimlerini yoksay?",
"ignore_notifications_modal.private_mentions_title": "İstenmeyen özel bahsetmelerden gelen bildirimleri yoksay?",
- "interaction_modal.description.favourite": "Bir Mastodon hesabıyla bu gönderiyi favorilerinize ekleyerek yazara gönderiyi beğendiğinizi bildirebilir ve daha sonrası için kaydedebilirsiniz.",
- "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?",
+ "interaction_modal.action.favourite": "Devam etmek için, hesabınızı kullanarak beğenmelisiniz.",
+ "interaction_modal.action.follow": "Devam etmek için, hesabınızı kullanarak takip etmelisiniz.",
+ "interaction_modal.action.reblog": "Devam etmek için, hesabınızı kullanarak tekrar göndermelisiniz.",
+ "interaction_modal.action.reply": "Devam etmek için, hesabınızı kullanarak yanıt vermelisiniz.",
+ "interaction_modal.action.vote": "Devam etmek için, hesabınızı kullanarak oylamalısınız.",
+ "interaction_modal.go": "Git",
+ "interaction_modal.no_account_yet": "Henüz bir hesabınız yok mu?",
"interaction_modal.on_another_server": "Farklı bir sunucuda",
"interaction_modal.on_this_server": "Bu sunucuda",
- "interaction_modal.sign_in": "Bu sunucuya giriş yapmadınız. Hesabınız nerede barındırılıyor?",
- "interaction_modal.sign_in_hint": "İpucu: Kaydolduğunuz web sitesi budur. Hatırlamıyorsanız, gelen kutunuzdaki hoş geldiniz e-postasını arayın. Tam kullanıcı adınızı da girebilirsiniz! (örneğin @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "{name} kişisinin gönderisini favorilerine ekle",
"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",
+ "interaction_modal.username_prompt": "Örnek: {example}",
"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}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Gizlilik Politikası",
"recommended": "Önerilen",
"refresh": "Yenile",
- "regeneration_indicator.label": "Yükleniyor…",
- "regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!",
+ "regeneration_indicator.please_stand_by": "Lütfen bekleyin.",
+ "regeneration_indicator.preparing_your_home_feed": "Ana akışınız hazırlanıyor…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# gün} other {# gün}} önce",
"relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} önce",
@@ -782,8 +780,11 @@
"search_results.accounts": "Profiller",
"search_results.all": "Tümü",
"search_results.hashtags": "Etiketler",
+ "search_results.no_results": "Sonuç yok.",
+ "search_results.no_search_yet": "Gönderiler, profiller veya etiketler için aramayı deneyin.",
"search_results.see_all": "Tümünü gör",
"search_results.statuses": "Gönderiler",
+ "search_results.title": "\"{q}\" için arama",
"server_banner.about_active_users": "Bu sunucuyu son 30 günde kullanan insanlar (Aylık Etkin Kullanıcılar)",
"server_banner.active_users": "etkin kullanıcılar",
"server_banner.administered_by": "Yönetici:",
diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json
index 8c89e1ad00..00e8c83ab7 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -229,9 +229,6 @@
"home.column_settings.show_replies": "Җаваплар күрсәтү",
"home.hide_announcements": "Игъланнарны яшерү",
"home.show_announcements": "Белдерүләр бирегез",
- "interaction_modal.description.follow": "Mastodon аккаунты белән сез иярә аласыз {name} аларның язмаларын өй тасмасында алу өчен.",
- "interaction_modal.description.reblog": "Mastodon аккаунты ярдәмендә сез бу язманы үз шәкертләрегез белән уртаклашу өчен арттыра аласыз.",
- "interaction_modal.description.reply": "Mastodon аккаунты белән сез бу язмага җавап бирә аласыз.",
"interaction_modal.on_another_server": "Башка серверда",
"interaction_modal.on_this_server": "Бу серверда",
"interaction_modal.title.follow": "Иярү {name}",
@@ -327,7 +324,6 @@
"privacy_policy.last_updated": "Соңгы яңарту {date}",
"privacy_policy.title": "Хосусыйлык Сәясәте",
"refresh": "Яңарту",
- "regeneration_indicator.label": "Йөкләү...",
"relative_time.days": "{number}к",
"relative_time.full.days": "{number, plural, one {# көн} other {# көн}} элек",
"relative_time.full.hours": "{number, plural, one {# сәгать} other {# сәгать}} элек",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 624de8cd69..830b6fa107 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -401,18 +401,11 @@
"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, ви можете поширити цей допис, щоб поділитися ним зі своїми підписниками.",
- "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?",
+ "interaction_modal.action.favourite": "Щоб продовжити, потрібно додати улюблене з вашого облікового запису.",
+ "interaction_modal.go": "Вперед",
+ "interaction_modal.no_account_yet": "Ще не зареєстровані?",
"interaction_modal.on_another_server": "На іншому сервері",
"interaction_modal.on_this_server": "На цьому сервері",
- "interaction_modal.sign_in": "Ви не ввійшли на цей сервер. Де розміщений ваш обліковий запис?",
- "interaction_modal.sign_in_hint": "Підказка: це сайт, на якому ви зареєструвалися. Якщо ви не пам'ятаєте, знайдіть привітальний електронний лист у теці \"Вхідні\". Ви також можете ввести повне ім'я користувача! (наприклад, @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Уподобати допис {name}",
"interaction_modal.title.follow": "Підписатися на {name}",
"interaction_modal.title.reblog": "Поширити допис {name}",
@@ -669,8 +662,7 @@
"privacy_policy.title": "Політика приватності",
"recommended": "Рекомендовано",
"refresh": "Оновити",
- "regeneration_indicator.label": "Завантаження…",
- "regeneration_indicator.sublabel": "Хвилинку, ми готуємо вашу стрічку!",
+ "regeneration_indicator.please_stand_by": "Будь ласка, очікуйте.",
"relative_time.days": "{number}д",
"relative_time.full.days": "{number, plural, one {# день} few {# дні} other {# днів}} тому",
"relative_time.full.hours": "{number, plural, one {# година} few {# години} other {# годин}} тому",
diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json
index 4ea1191945..cbe15929a5 100644
--- a/app/javascript/mastodon/locales/uz.json
+++ b/app/javascript/mastodon/locales/uz.json
@@ -240,9 +240,6 @@
"home.column_settings.show_replies": "Javoblarni ko'rish",
"home.hide_announcements": "E'lonlarni yashirish",
"home.show_announcements": "E'lonlarni ko'rsatish",
- "interaction_modal.description.follow": "Mastodon’da akkauntga ega bo‘lgan holda, siz {name} ga obuna bo‘lib, ularning postlarini bosh sahifangizga olishingiz mumkin.",
- "interaction_modal.description.reblog": "Mastodon-dagi akkaunt yordamida siz ushbu postni o'z izdoshlaringiz bilan baham ko'rish uchun oshirishingiz mumkin.",
- "interaction_modal.description.reply": "Mastodondagi akkaunt bilan siz ushbu xabarga javob berishingiz mumkin.",
"interaction_modal.on_another_server": "Boshqa serverda",
"interaction_modal.on_this_server": "Shu serverda",
"interaction_modal.title.follow": "{name} ga ergashing",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 9346b83e8c..d8314de9fc 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -407,23 +407,21 @@
"ignore_notifications_modal.not_followers_title": "Bỏ qua thông báo từ những người chưa theo dõi bạn?",
"ignore_notifications_modal.not_following_title": "Bỏ qua thông báo từ những người bạn không theo dõi?",
"ignore_notifications_modal.private_mentions_title": "Bỏ qua thông báo từ những lượt Nhắn Riêng không mong muốn?",
- "interaction_modal.description.favourite": "Với tài khoản Mastodon, bạn có thể cho người đăng biết bạn thích tút này và lưu lại tút.",
- "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?",
+ "interaction_modal.action.favourite": "Để thích, bạn cần dùng tài khoản của bạn.",
+ "interaction_modal.action.follow": "Để theo dõi, bạn cần dùng tài khoản của bạn.",
+ "interaction_modal.action.reblog": "Để đăng lại, bạn cần dùng tài khoản của bạn.",
+ "interaction_modal.action.reply": "Để trả lời, bạn cần dùng tài khoản của bạn.",
+ "interaction_modal.action.vote": "Để bình chọn, bạn cần dùng tài khoản của bạn.",
+ "interaction_modal.go": "Đi",
+ "interaction_modal.no_account_yet": "Chưa có tài khoản?",
"interaction_modal.on_another_server": "Trên máy chủ khác",
"interaction_modal.on_this_server": "Trên máy chủ này",
- "interaction_modal.sign_in": "Bạn chưa đăng nhập. Bạn đã có tài khoản ở máy chủ khác?",
- "interaction_modal.sign_in_hint": "Mẹo: Đó là trang web nơi bạn đã đăng ký. Nếu không nhớ, lục lại trong email của bạn. Bạn cũng có thể nhập địa chỉ Mastodon đầy đủ! (vd: @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "Thích tút của {name}",
"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}",
+ "interaction_modal.username_prompt": "Ví dụ: {example}",
"intervals.full.days": "{number, plural, other {# ngày}}",
"intervals.full.hours": "{number, plural, other {# giờ}}",
"intervals.full.minutes": "{number, plural, other {# phút}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "Chính sách bảo mật",
"recommended": "Đề xuất",
"refresh": "Làm mới",
- "regeneration_indicator.label": "Đang tải…",
- "regeneration_indicator.sublabel": "Trang chủ của bạn đang được cập nhật!",
+ "regeneration_indicator.please_stand_by": "Hãy chờ đã.",
+ "regeneration_indicator.preparing_your_home_feed": "Đang chuẩn bị bảng tin…",
"relative_time.days": "{number} ngày",
"relative_time.full.days": "{number, plural, other {# ngày}}",
"relative_time.full.hours": "{number, plural, other {# giờ}}",
@@ -782,8 +780,11 @@
"search_results.accounts": "Mọi người",
"search_results.all": "Toàn bộ",
"search_results.hashtags": "Hashtag",
+ "search_results.no_results": "Không có kết quả.",
+ "search_results.no_search_yet": "Thử tìm tút, người dùng hoặc hashtag.",
"search_results.see_all": "Xem tất cả",
"search_results.statuses": "Tút",
+ "search_results.title": "Tìm kiếm \"{q}\"",
"server_banner.about_active_users": "Những người ở máy chủ này trong 30 ngày qua (MAU)",
"server_banner.active_users": "người hoạt động",
"server_banner.administered_by": "Vận hành:",
diff --git a/app/javascript/mastodon/locales/zgh.json b/app/javascript/mastodon/locales/zgh.json
index 80ac679405..f71e1a6c41 100644
--- a/app/javascript/mastodon/locales/zgh.json
+++ b/app/javascript/mastodon/locales/zgh.json
@@ -130,7 +130,6 @@
"poll_button.remove_poll": "ⵙⵙⵉⵜⵢ ⵉⴷⵣ",
"privacy.change": "Adjust status privacy",
"privacy.public.short": "ⵜⴰⴳⴷⵓⴷⴰⵏⵜ",
- "regeneration_indicator.label": "ⴰⵣⴷⴰⵎ…",
"relative_time.days": "{number}ⴰⵙ",
"relative_time.hours": "{number}ⵙⵔⴳ",
"relative_time.just_now": "ⴷⵖⵉ",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 666bb54e0b..954ec1472d 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -407,23 +407,21 @@
"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 账号,即可转发此嘟文,向你的关注者分享它。",
- "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?",
+ "interaction_modal.action.favourite": "你需要切换到自己的账户,再发送喜欢。",
+ "interaction_modal.action.follow": "你需要切换到自己的账户,再进行关注。",
+ "interaction_modal.action.reblog": "你需要切换到自己的账户,再进行转嘟。",
+ "interaction_modal.action.reply": "你需要切换到自己的账户,再发送回复。",
+ "interaction_modal.action.vote": "你需要切换到自己的账户,再发送投票。",
+ "interaction_modal.go": "跳转",
+ "interaction_modal.no_account_yet": "还没有账号?",
"interaction_modal.on_another_server": "在另一服务器",
"interaction_modal.on_this_server": "在此服务器",
- "interaction_modal.sign_in": "你尚未登录此服务器,你的账号是在哪里注册的?",
- "interaction_modal.sign_in_hint": "提示:这是你注册的网站,如果你不记得了,请在邮箱的收件箱中查找欢迎邮件。你还可以输入完整的用户名!(例如 @Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "喜欢 {name} 的嘟文",
"interaction_modal.title.follow": "关注 {name}",
"interaction_modal.title.reblog": "转发 {name} 的嘟文",
"interaction_modal.title.reply": "回复 {name} 的嘟文",
"interaction_modal.title.vote": "参与 {name} 的投票",
+ "interaction_modal.username_prompt": "例如: {example}",
"intervals.full.days": "{number} 天",
"intervals.full.hours": "{number} 小时",
"intervals.full.minutes": "{number} 分钟",
@@ -697,8 +695,8 @@
"privacy_policy.title": "隐私政策",
"recommended": "推荐",
"refresh": "刷新",
- "regeneration_indicator.label": "加载中…",
- "regeneration_indicator.sublabel": "你的主页动态正在准备中!",
+ "regeneration_indicator.please_stand_by": "请稍候。",
+ "regeneration_indicator.preparing_your_home_feed": "正在为你准备主页时间线...",
"relative_time.days": "{number} 天前",
"relative_time.full.days": "{number, plural, other {# 天}}前",
"relative_time.full.hours": "{number, plural, other {# 小时}}前",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 224bc88f26..39ffffb313 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -344,17 +344,8 @@
"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 上有個帳號的話,您可以向自己的追縱者們轉發此帖文。",
- "interaction_modal.description.reply": "在 Mastodon 上擁有帳號的話,您可以回覆此帖文。",
- "interaction_modal.login.action": "帶我到主頁",
- "interaction_modal.login.prompt": "主伺服器的網域,例如 mastodon.social",
- "interaction_modal.no_account_yet": "還未加入 Mastodon?",
"interaction_modal.on_another_server": "於不同伺服器",
"interaction_modal.on_this_server": "於此伺服器",
- "interaction_modal.sign_in": "你尚未登入此伺服器。你的帳號是在哪裡託管的?",
- "interaction_modal.sign_in_hint": "提示:那是你註冊的網站。如果忘記了,你可以在收件箱搜尋歡迎郵件。你也可以輸入你的完整使用者名稱!(例如:@Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "把 {name} 的帖文加入最愛",
"interaction_modal.title.follow": "追蹤 {name}",
"interaction_modal.title.reblog": "轉發 {name} 的帖文",
@@ -554,8 +545,6 @@
"privacy_policy.title": "私隱政策",
"recommended": "推薦",
"refresh": "重新整理",
- "regeneration_indicator.label": "載入中……",
- "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!",
"relative_time.days": "{number}日前",
"relative_time.full.days": "{number, plural, one {# 天} other {# 天}}前",
"relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index dbbfb51abf..ee7fca08ce 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -407,23 +407,21 @@
"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 上有個帳號,您可以轉嘟此嘟文以向您的跟隨者們分享。",
- "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 帳號嗎?",
+ "interaction_modal.action.favourite": "若欲繼續,您必須自您的帳號加入最愛。",
+ "interaction_modal.action.follow": "若欲繼續,您必須自您的帳號跟隨。",
+ "interaction_modal.action.reblog": "若欲繼續,您必須自您的帳號轉嘟。",
+ "interaction_modal.action.reply": "若欲繼續,您必須自您的帳號回覆。",
+ "interaction_modal.action.vote": "若欲繼續,您必須自您的帳號投票。",
+ "interaction_modal.go": "Go!",
+ "interaction_modal.no_account_yet": "仍尚未有帳號嗎?",
"interaction_modal.on_another_server": "於不同伺服器",
"interaction_modal.on_this_server": "於此伺服器",
- "interaction_modal.sign_in": "您未登入於此伺服器。您的帳號是於何方託管呢?",
- "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子郵件收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)",
"interaction_modal.title.favourite": "將 {name} 之嘟文加入最愛",
"interaction_modal.title.follow": "跟隨 {name}",
"interaction_modal.title.reblog": "轉嘟 {name} 的嘟文",
"interaction_modal.title.reply": "回覆 {name} 的嘟文",
"interaction_modal.title.vote": "參與 {name} 之投票",
+ "interaction_modal.username_prompt": "例如 {example}",
"intervals.full.days": "{number, plural, other {# 天}}",
"intervals.full.hours": "{number, plural, other {# 小時}}",
"intervals.full.minutes": "{number, plural, other {# 分鐘}}",
@@ -697,8 +695,8 @@
"privacy_policy.title": "隱私權政策",
"recommended": "推薦設定",
"refresh": "重新整理",
- "regeneration_indicator.label": "載入中…",
- "regeneration_indicator.sublabel": "您的首頁時間軸正在準備中!",
+ "regeneration_indicator.please_stand_by": "請稍候。",
+ "regeneration_indicator.preparing_your_home_feed": "正在準備您的首頁時間軸...",
"relative_time.days": "{number} 天",
"relative_time.full.days": "{number, plural, other {# 天}}前",
"relative_time.full.hours": "{number, plural, other {# 小時}}前",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 87051a9025..d57a814574 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -4233,10 +4233,7 @@ a.status-card {
}
.regeneration-indicator {
- text-align: center;
- font-size: 16px;
- font-weight: 500;
- color: $dark-text-color;
+ color: $darker-text-color;
border: 1px solid var(--background-border-color);
border-top: 0;
cursor: default;
@@ -4248,31 +4245,26 @@ a.status-card {
padding: 20px;
&__figure {
- &,
- img {
- display: block;
- width: auto;
- height: 160px;
- margin: 0;
- }
- }
-
- &--without-header {
- padding-top: 20px + 48px;
+ display: block;
+ width: 100%;
+ height: auto;
+ max-width: 350px;
+ margin-top: -50px;
}
&__label {
- margin-top: 30px;
+ text-align: center;
+ font-size: 16px;
strong {
+ font-weight: 500;
display: block;
margin-bottom: 10px;
- color: $dark-text-color;
+ color: $darker-text-color;
}
span {
font-size: 15px;
- font-weight: 400;
}
}
}
@@ -9405,6 +9397,7 @@ noscript {
}
p {
+ text-align: center;
font-size: 17px;
line-height: 22px;
color: $darker-text-color;
@@ -9480,11 +9473,6 @@ noscript {
border: 1px solid var(--background-border-color);
}
- &.focused &__input {
- border-color: $highlight-text-color;
- background: lighten($ui-base-color, 4%);
- }
-
&.invalid &__input {
border-color: $error-red;
}
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 0371531716..50e5bf001d 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -64,6 +64,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
ApplicationRecord.transaction do
@status = Status.create!(@params)
attach_tags(@status)
+ attach_mentions(@status)
attach_counts(@status)
end
@@ -228,6 +229,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
# not a big deal
Trends.tags.register(status)
+ # Update featured tags
+ return if @tags.empty? || !status.distributable?
+
+ @account.featured_tags.where(tag_id: @tags.pluck(:id)).find_each do |featured_tag|
+ featured_tag.increment(status.created_at)
+ end
+ end
+
+ def attach_mentions(status)
@mentions.each do |mention|
mention.status = status
mention.save
diff --git a/app/models/account_conversation.rb b/app/models/account_conversation.rb
index 25a75d8a61..ccf8f36966 100644
--- a/app/models/account_conversation.rb
+++ b/app/models/account_conversation.rb
@@ -5,13 +5,13 @@
# Table name: account_conversations
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# conversation_id :bigint(8)
+# lock_version :integer default(0), not null
# participant_account_ids :bigint(8) default([]), not null, is an Array
# status_ids :bigint(8) default([]), not null, is an Array
-# last_status_id :bigint(8)
-# lock_version :integer default(0), not null
# unread :boolean default(FALSE), not null
+# account_id :bigint(8) not null
+# conversation_id :bigint(8) not null
+# last_status_id :bigint(8)
#
class AccountConversation < ApplicationRecord
diff --git a/app/models/account_note.rb b/app/models/account_note.rb
index 317e6873fa..f8573d7da4 100644
--- a/app/models/account_note.rb
+++ b/app/models/account_note.rb
@@ -5,11 +5,11 @@
# Table name: account_notes
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# target_account_id :bigint(8)
# comment :text not null
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
+# target_account_id :bigint(8) not null
#
class AccountNote < ApplicationRecord
include RelationshipCacheable
diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb
index 529056f9c6..dfc700649c 100644
--- a/app/models/featured_tag.rb
+++ b/app/models/featured_tag.rb
@@ -47,7 +47,7 @@ class FeaturedTag < ApplicationRecord
def decrement(deleted_status)
if statuses_count <= 1
update(statuses_count: 0, last_status_at: nil)
- elsif last_status_at > deleted_status.created_at
+ elsif last_status_at.present? && 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
diff --git a/app/models/marker.rb b/app/models/marker.rb
index a5bd2176a8..bc2d57f56a 100644
--- a/app/models/marker.rb
+++ b/app/models/marker.rb
@@ -5,12 +5,12 @@
# Table name: markers
#
# id :bigint(8) not null, primary key
-# user_id :bigint(8)
-# timeline :string default(""), not null
-# last_read_id :bigint(8) default(0), not null
# lock_version :integer default(0), not null
+# timeline :string default(""), not null
# created_at :datetime not null
# updated_at :datetime not null
+# last_read_id :bigint(8) default(0), not null
+# user_id :bigint(8) not null
#
class Marker < ApplicationRecord
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index 11dc64083d..49ff740884 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -59,7 +59,6 @@ class MediaAttachment < ApplicationRecord
).freeze
IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif image/heic image/heif image/webp image/avif).freeze
- IMAGE_ANIMATED_MIME_TYPES = %w(image/png image/gif).freeze
IMAGE_CONVERTIBLE_MIME_TYPES = %w(image/heic image/heif image/avif).freeze
VIDEO_MIME_TYPES = %w(video/webm video/mp4 video/quicktime video/ogg).freeze
VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze
@@ -104,7 +103,7 @@ class MediaAttachment < ApplicationRecord
'preset' => 'veryfast',
'movflags' => 'faststart', # Move metadata to start of file so playback can begin before download finishes
'pix_fmt' => 'yuv420p', # Ensure color space for cross-browser compatibility
- 'filter_complex' => 'drawbox=t=fill:c=white[bg];[bg][0]overlay,crop=trunc(iw/2)*2:trunc(ih/2)*2', # Remove transparency. h264 requires width and height to be even; crop instead of scale to avoid blurring
+ 'vf' => 'crop=floor(iw/2)*2:floor(ih/2)*2', # h264 requires width and height to be even. Crop instead of scale to avoid blurring
'c:v' => 'h264',
'c:a' => 'aac',
'b:a' => '192k',
@@ -302,7 +301,7 @@ class MediaAttachment < ApplicationRecord
private
def file_styles(attachment)
- if attachment.instance.animated_image? || VIDEO_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type)
+ if attachment.instance.file_content_type == 'image/gif' || VIDEO_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type)
VIDEO_CONVERTED_STYLES
elsif IMAGE_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type)
IMAGE_CONVERTED_STYLES
@@ -316,8 +315,8 @@ class MediaAttachment < ApplicationRecord
end
def file_processors(instance)
- if instance.animated_image?
- [:gifv_transcoder, :blurhash_transcoder]
+ if instance.file_content_type == 'image/gif'
+ [:gif_transcoder, :blurhash_transcoder]
elsif VIDEO_MIME_TYPES.include?(instance.file_content_type)
[:transcoder, :blurhash_transcoder, :type_corrector]
elsif AUDIO_MIME_TYPES.include?(instance.file_content_type)
@@ -328,17 +327,6 @@ class MediaAttachment < ApplicationRecord
end
end
- def animated_image?
- if processing_complete?
- gifv?
- elsif IMAGE_ANIMATED_MIME_TYPES.include?(file_content_type)
- @animated_image = FastImage.animated?(file.queued_for_write[:original].path) unless defined?(@animated_image)
- @animated_image
- else
- false
- end
- end
-
private
def set_unknown_type
diff --git a/app/models/poll.rb b/app/models/poll.rb
index ebd4644094..b4e0edcd0f 100644
--- a/app/models/poll.rb
+++ b/app/models/poll.rb
@@ -5,19 +5,19 @@
# Table name: polls
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# status_id :bigint(8)
-# expires_at :datetime
-# options :string default([]), not null, is an Array
# cached_tallies :bigint(8) default([]), not null, is an Array
-# multiple :boolean default(FALSE), not null
+# expires_at :datetime
# hide_totals :boolean default(FALSE), not null
-# votes_count :bigint(8) default(0), not null
# last_fetched_at :datetime
+# lock_version :integer default(0), not null
+# multiple :boolean default(FALSE), not null
+# options :string default([]), not null, is an Array
+# voters_count :bigint(8)
+# votes_count :bigint(8) default(0), not null
# created_at :datetime not null
# updated_at :datetime not null
-# lock_version :integer default(0), not null
-# voters_count :bigint(8)
+# account_id :bigint(8) not null
+# status_id :bigint(8) not null
#
class Poll < ApplicationRecord
@@ -39,9 +39,6 @@ class Poll < ApplicationRecord
validates :expires_at, presence: true, if: :local?
validates_with PollValidator, on: :create, if: :local?
- scope :attached, -> { where.not(status_id: nil) }
- scope :unattached, -> { where(status_id: nil) }
-
before_validation :prepare_options, if: :local?
before_validation :prepare_votes_count
before_validation :prepare_cached_tallies
diff --git a/app/models/poll_vote.rb b/app/models/poll_vote.rb
index 92d74a6dbc..90876ac960 100644
--- a/app/models/poll_vote.rb
+++ b/app/models/poll_vote.rb
@@ -5,12 +5,12 @@
# Table name: poll_votes
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# poll_id :bigint(8)
# choice :integer default(0), not null
+# uri :string
# created_at :datetime not null
# updated_at :datetime not null
-# uri :string
+# account_id :bigint(8) not null
+# poll_id :bigint(8) not null
#
class PollVote < ApplicationRecord
diff --git a/app/models/tombstone.rb b/app/models/tombstone.rb
index 92eddfc626..12c5cee4c2 100644
--- a/app/models/tombstone.rb
+++ b/app/models/tombstone.rb
@@ -5,11 +5,11 @@
# Table name: tombstones
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
+# by_moderator :boolean
# uri :string not null
# created_at :datetime not null
# updated_at :datetime not null
-# by_moderator :boolean
+# account_id :bigint(8) not null
#
class Tombstone < ApplicationRecord
diff --git a/app/models/user_role.rb b/app/models/user_role.rb
index 405050a385..9591a2160c 100644
--- a/app/models/user_role.rb
+++ b/app/models/user_role.rb
@@ -43,6 +43,8 @@ class UserRole < ApplicationRecord
EVERYONE_ROLE_ID = -99
NOBODY_POSITION = -1
+ POSITION_LIMIT = (2**31) - 1
+
module Flags
NONE = 0
ALL = FLAGS.values.reduce(&:|)
@@ -94,6 +96,7 @@ class UserRole < ApplicationRecord
validates :name, presence: true, unless: :everyone?
validates :color, format: { with: /\A#?(?:[A-F0-9]{3}){1,2}\z/i }, unless: -> { color.blank? }
+ validates :position, numericality: { in: (-POSITION_LIMIT..POSITION_LIMIT) }
validate :validate_permissions_elevation
validate :validate_position_elevation
diff --git a/app/serializers/rest/scheduled_status_serializer.rb b/app/serializers/rest/scheduled_status_serializer.rb
index 5d6311b872..8aa0d89386 100644
--- a/app/serializers/rest/scheduled_status_serializer.rb
+++ b/app/serializers/rest/scheduled_status_serializer.rb
@@ -10,6 +10,6 @@ class REST::ScheduledStatusSerializer < ActiveModel::Serializer
end
def params
- object.params.without(:application_id)
+ object.params.without('application_id')
end
end
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 7b6649d1ec..1be39aaedf 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -255,7 +255,26 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
end
def update_tags!
- @status.tags = Tag.find_or_create_by_names(@raw_tags)
+ previous_tags = @status.tags.to_a
+ current_tags = @status.tags = Tag.find_or_create_by_names(@raw_tags)
+
+ return unless @status.distributable?
+
+ added_tags = current_tags - previous_tags
+
+ unless added_tags.empty?
+ @account.featured_tags.where(tag_id: added_tags.pluck(:id)).find_each do |featured_tag|
+ featured_tag.increment(@status.created_at)
+ end
+ end
+
+ removed_tags = previous_tags - current_tags
+
+ unless removed_tags.empty?
+ @account.featured_tags.where(tag_id: removed_tags.pluck(:id)).find_each do |featured_tag|
+ featured_tag.decrement(@status)
+ end
+ end
end
def update_mentions!
diff --git a/bin/rubocop b/bin/rubocop
index 369a05bedb..b3801537d4 100755
--- a/bin/rubocop
+++ b/bin/rubocop
@@ -24,4 +24,7 @@ end
require "rubygems"
require "bundler/setup"
+# explicit rubocop config increases performance slightly while avoiding config confusion.
+ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
+
load Gem.bin_path("rubocop", "rubocop")
diff --git a/config/application.rb b/config/application.rb
index 59afafd5be..8939ad91f4 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -28,7 +28,7 @@ require_relative '../lib/redis/namespace_extensions'
require_relative '../lib/paperclip/url_generator_extensions'
require_relative '../lib/paperclip/attachment_extensions'
-require_relative '../lib/paperclip/gifv_transcoder'
+require_relative '../lib/paperclip/gif_transcoder'
require_relative '../lib/paperclip/media_type_spoof_detector_extensions'
require_relative '../lib/paperclip/transcoder'
require_relative '../lib/paperclip/type_corrector'
@@ -108,6 +108,11 @@ module Mastodon
config.x.mastodon = config_for(:mastodon)
config.x.translation = config_for(:translation)
+ if ENV.fetch('QUERY_LOG_TAGS_ENABLED', 'false') == 'true'
+ config.active_record.query_log_tags_enabled = ENV.fetch('QUERY_LOG_TAGS_ENABLED', 'false') == 'true'
+ config.active_record.query_log_tags = [:namespaced_controller, :action, :sidekiq_job_class]
+ end
+
config.to_prepare do
Doorkeeper::AuthorizationsController.layout 'modal'
Doorkeeper::AuthorizedApplicationsController.layout 'admin'
diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb
index 90217139a8..2fb445ecf5 100644
--- a/config/initializers/opentelemetry.rb
+++ b/config/initializers/opentelemetry.rb
@@ -76,6 +76,31 @@ if ENV.keys.any? { |name| name.match?(/OTEL_.*_ENDPOINT/) }
)
end
end
+
+ # This middleware adds the trace_id and span_id to the Rails logging tags for every requests
+ class TelemetryLoggingMiddleware
+ def initialize(app)
+ @app = app
+ end
+
+ def call(env)
+ span = OpenTelemetry::Trace.current_span
+
+ return @app.call(env) unless span.recording?
+
+ span_id = span.context.hex_span_id
+ trace_id = span.context.hex_trace_id
+
+ Rails.logger.tagged("trace_id=#{trace_id}", "span_id=#{span_id}") do
+ @app.call(env)
+ end
+ end
+ end
+
+ Rails.application.configure do
+ config.middleware.insert_before Rails::Rack::Logger, TelemetryLoggingMiddleware
+ end
+
end
MastodonOTELTracer = OpenTelemetry.tracer_provider.tracer('mastodon')
diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml
index 57b782b33c..b8e2b57c86 100644
--- a/config/locales/activerecord.es-AR.yml
+++ b/config/locales/activerecord.es-AR.yml
@@ -43,7 +43,7 @@ es-AR:
attributes:
account_id:
taken: ya está en la lista
- must_be_following: debe ser una cuenta que sigas
+ must_be_following: debe ser una cuenta seguida
status:
attributes:
reblog:
diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml
index 646da1ce9e..90bbd795a1 100644
--- a/config/locales/activerecord.ja.yml
+++ b/config/locales/activerecord.ja.yml
@@ -40,6 +40,9 @@ ja:
data:
malformed: は不正です
list_account:
+ attributes:
+ account_id:
+ taken: はすでにリストに存在します
must_be_following: フォローされているアカウントでなければなりません
status:
attributes:
diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml
index 60f3def5d3..592e7871f7 100644
--- a/config/locales/activerecord.pt-PT.yml
+++ b/config/locales/activerecord.pt-PT.yml
@@ -15,6 +15,12 @@ pt-PT:
user/invite_request:
text: Motivo
errors:
+ attributes:
+ domain:
+ invalid: não é um nome de domínio válido
+ messages:
+ invalid_domain_on_line: "%{value} não é um nome de domínio válido"
+ too_many_lines: está acima do limite de %{limit} linhas
models:
account:
attributes:
@@ -33,6 +39,11 @@ pt-PT:
attributes:
data:
malformed: está malformado
+ list_account:
+ attributes:
+ account_id:
+ taken: já está na lista
+ must_be_following: tem de ser uma conta seguida
status:
attributes:
reblog:
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 94a75c01f3..432737f8c3 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -265,12 +265,14 @@ bg:
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}"
+ publish_terms_of_service_html: "%{name} публикува обновления към условията на услугата"
reject_appeal_html: "%{name} отхвърли обжалването на решение за модериране от %{target}"
reject_user_html: "%{name} отхвърли регистрирането от %{target}"
remove_avatar_user_html: "%{name} премахна аватара на %{target}"
@@ -921,6 +923,7 @@ bg:
terms_of_service:
back: Обратно към условията за ползване
changelog: Какво е променено
+ create: Употребявайте свой собствен
current: Текущо
draft: Чернова
generate: Употреба на шаблон
@@ -932,10 +935,15 @@ bg:
history: История
live: На живо
no_history: Още няма записани промени в условията на услугата.
+ no_terms_of_service_html: В момента нямате никакви настроени условия за услугата. Условията за услугата са предназначени да осигурят яснота и да ви предпазят от възможни задължения при спорове с потребителите ви.
notified_on_html: Потребители, известени на %{date}
+ notify_users: Известете потребителите
preview:
explanation_html: 'Имейлът ще се изпрати до %{display_count} потребители, регистрирали се преди %{date}. Следният текст ще се включи в е-писмо:'
send_preview: Изпращане на предварителен преглед до %{email}
+ send_to_all:
+ one: Изпращане на %{display_count} имейл
+ other: Изпращане на %{display_count} имейла
title: Предварителен преглед на известие за условията на услугата
publish: Публикуване
published_on_html: Публикувано на %{date}
@@ -1396,6 +1404,44 @@ bg:
merge_long: Пази текущите записи и добавя нови
overwrite: Презаписване
overwrite_long: Заменя текущите записи с новите
+ overwrite_preambles:
+ blocking_html:
+ one: На път сте да замените списъка си с блокирани с до %{count} акаунт от %{filename}.
+ other: На път сте да замените списъка си с блокирани с до %{count} акаунта от %{filename}.
+ bookmarks_html:
+ one: На път сте да замените списъка си с отметки с до %{count} публикация от %{filename}.
+ other: На път сте да замените списъка си с отметки с до %{count} публикации от %{filename}.
+ domain_blocking_html:
+ one: На път сте да замените списъка си с блокирани домейни с до %{count} домейн от %{filename}.
+ other: На път сте да замените списъка си с блокирани домейни с до %{count} домейна от %{filename}.
+ following_html:
+ one: На път сте да последвате до %{count} акаунт от %{filename} и да спрете да следвате някой друг.
+ other: На път сте да последвате до %{count} акаунта от %{filename} и да спрете да следвате някой друг.
+ lists_html:
+ one: На път сте да замените списъците си със съдържание от %{filename}. До %{count} акаунт ще се добави към новите списъци.
+ other: На път сте да замените списъците си със съдържание от %{filename}. До %{count} акаунта ще се добавят към новите списъци.
+ muting_html:
+ one: На път сте да замените списъка си със заглушен акаунт с до %{count} акаунт от %{filename}.
+ other: На път сте да замените списъка си със заглушени акаунти с до %{count} акаунта от %{filename}.
+ preambles:
+ blocking_html:
+ one: На път сте да блокирате до %{count} акаунт от %{filename}.
+ other: На път сте да блокирате до %{count} акаунта от %{filename}.
+ bookmarks_html:
+ one: На път сте да добавите до %{count} публикация от %{filename} в отметките си.
+ other: На път сте да добавите до %{count} публикации от %{filename} в отметките си.
+ domain_blocking_html:
+ one: На път сте да блокирате до %{count} домейн от %{filename}.
+ other: На път сте да блокирате до %{count} домейна от %{filename}.
+ following_html:
+ one: На път сте да последвате до %{count} акаунт от %{filename}.
+ other: На път сте да последвате до %{count} акаунта от %{filename}.
+ lists_html:
+ one: На път сте да добавите до %{count} акаунт от %{filename} към своите списъци. Нови списъци ще се сътворят, ако няма списъци за добавяне.
+ other: На път сте да добавите до %{count} акаунта от %{filename} към списъците си. Нови списъци ще се сътворят, ако няма списъци за добавяне.
+ muting_html:
+ one: На път сте да заглушите до %{count} акаунт от %{filename}.
+ other: На път сте да заглушите до %{count} акаунта от %{filename}.
preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция.
recent_imports: Скорошни внасяния
states:
diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml
index 1469e7403d..c6e181a2cf 100644
--- a/config/locales/devise.pt-PT.yml
+++ b/config/locales/devise.pt-PT.yml
@@ -49,17 +49,17 @@ pt-PT:
title: Solicitar nova palavra-passe
two_factor_disabled:
explanation: O início de sessão é agora possível utilizando apenas o endereço de e-mail e a palavra-passe.
- subject: 'Mastodon: autenticação de duas etapas desativada'
+ subject: 'Mastodon: autenticação de dois fatores desativada'
subtitle: A autenticação de dois fatores foi desativada para a sua conta.
- title: 2FA desativado
+ title: 2FA desativada
two_factor_enabled:
explanation: Para iniciar sessão, será necessário um token gerado pela aplicação TOTP emparelhada.
- subject: 'Mastodon: autenticação em duas etapas ativada'
+ subject: 'Mastodon: autenticação de dois fatores ativada'
subtitle: A autenticação de dois fatores foi ativada para a sua conta.
title: 2FA ativado
two_factor_recovery_codes_changed:
explanation: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos.
- subject: 'Mastodon: gerados novos códigos de recuperação em duas etapas'
+ subject: 'Mastodon: foram gerados novos códigos de recuperação de dois fatores'
subtitle: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos.
title: Códigos de recuperação 2FA alterados
unlock_instructions:
diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml
index e2ac275335..31cfa3e824 100644
--- a/config/locales/doorkeeper.pt-PT.yml
+++ b/config/locales/doorkeeper.pt-PT.yml
@@ -60,6 +60,7 @@ pt-PT:
error:
title: Ocorreu um erro
new:
+ prompt_html: "%{client_name} gostaria de obter autorização para aceder à sua conta. Só deve aprovar este pedido se reconhecer e confiar nesta fonte."
review_permissions: Rever permissões
title: Autorização necessária
show:
@@ -129,11 +130,11 @@ pt-PT:
crypto: Encriptação ponta a ponta
favourites: Favoritos
filters: Filtros
- follow: A seguir, a silenciar e a bloquear
+ follow: A seguir, a ocultar e a bloquear
follows: Seguidores
lists: Listas
- media: Anexos de media
- mutes: Silenciados
+ media: Anexos multimédia
+ mutes: Ocultados
notifications: Notificações
profile: O seu perfil Mastodon
push: Notificações push
@@ -176,7 +177,7 @@ pt-PT:
read:filters: ver os seus filtros
read:follows: ver quem você segue
read:lists: ver as suas listas
- read:mutes: ver os utilizadores que silenciou
+ read:mutes: ver os utilizadores que ocultou
read:notifications: ver as suas notificações
read:reports: ver as suas denúncias
read:search: pesquisar em seu nome
@@ -184,14 +185,14 @@ pt-PT:
write: alterar todos os dados da sua conta
write:accounts: alterar o seu perfil
write:blocks: bloquear contas e domínios
- write:bookmarks: marcar publicações
- write:conversations: silenciar e eliminar conversas
- write:favourites: favoritar publicações
+ write:bookmarks: publicações marcadas
+ write:conversations: ocultar e eliminar conversas
+ write:favourites: publicações favoritas
write:filters: criar filtros
write:follows: seguir pessoas
write:lists: criar listas
- write:media: enviar ficheiros de media
- write:mutes: silenciar pessoas e conversas
+ write:media: enviar ficheiros multimédia
+ write:mutes: ocultar pessoas e conversas
write:notifications: limpar as suas notificações
write:reports: denunciar outras pessoas
write:statuses: publicar publicações
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 912de854c6..9bc416ef3e 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -279,6 +279,7 @@ eo:
enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}"
memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
promote_user_html: "%{name} plirangigis uzanton %{target}"
+ publish_terms_of_service_html: "%{name} publikigis ĝisdatigojn de la kondiĉoj de la servo"
reject_appeal_html: "%{name} malakceptis apelacion kontraŭ moderiga decido de %{target}"
reject_user_html: "%{name} malakceptis registriĝon de %{target}"
remove_avatar_user_html: "%{name} forigis la profilbildon de %{target}"
@@ -934,7 +935,10 @@ eo:
draft: Malneto
generate: Uzi ŝablonon
generates:
+ action: Generi
title: Agordo de kondiĉoj de uzado
+ no_history: Ankoraŭ ne estas registritaj ŝanĝoj de la kondiĉoj de la servo.
+ no_terms_of_service_html: Vi nuntempe ne havas iujn ajn kondiĉojn de la servo agordita. La kondiĉoj de la servo celas doni klarecon kaj protekti vin kontraŭ eblaj respondecoj en disputoj kun viaj uzantoj.
preview:
send_to_all:
one: Sendi %{display_count} retpoŝton
@@ -1174,6 +1178,7 @@ eo:
set_new_password: Elekti novan pasvorton
setup:
email_below_hint_html: Kontrolu vian spam-dosierujon aŭ petu novan. Se necese, vi povas korekti vian retadreson.
+ email_settings_hint_html: Alklaku la ligilon, kiun ni sendis al %{email} por komenci uzi Mastodon. Ni atendos ĝuste ĉi tie.
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
@@ -1920,6 +1925,9 @@ eo:
subject: Via konto estas alirita de nova IP-adreso
title: Nova saluto
terms_of_service_changed:
+ sign_off: La teamo de %{domain}
+ subject: Ĝisdatigoj al niaj kondiĉoj de servo
+ subtitle: La kondiĉoj de la servo de %{domain} ŝanĝiĝas
title: Grava ĝisdatigo
warning:
appeal: Sendi apelacion
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index d9fa28a3a1..e02926963f 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -828,10 +828,10 @@ es-AR:
back_to_account: Volver a la página de la cuenta
back_to_report: Volver a la página de la denuncia
batch:
- add_to_report: 'Añadir al informe #%{id}'
+ add_to_report: Agregar a la denuncia N°%{id}
remove_from_report: Quitar de la denuncia
report: Denunciar
- contents: Contenidos
+ contents: Contenido
deleted: Eliminado
favourites: Favoritos
history: Historial de versiones
@@ -840,15 +840,15 @@ es-AR:
media:
title: Medios
metadata: Metadatos
- no_history: Esta publicación no ha sido editada
+ no_history: Este mensaje no ha sido editado
no_status_selected: No se cambió ningún mensaje, ya que ninguno fue seleccionado
open: Abrir mensaje
original_status: Mensaje original
reblogs: Adhesiones
- replied_to_html: Respondió a %{acct_link}
+ replied_to_html: Respondido a %{acct_link}
status_changed: Mensaje cambiado
- status_title: Publicación de @%{name}
- title: Publicaciones de la cuenta - @%{name}
+ status_title: Mensaje por @%{name}
+ title: Mensajes de cuenta - @%{name}
trending: En tendencia
view_publicly: Ver públicamente
visibility: Visibilidad
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index 1da40dc1c3..56f66609c3 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -223,6 +223,7 @@ ga:
enable_user: Cumasaigh Úsáideoir
memorialize_account: Cuntas Cuimhneacháin
promote_user: Úsáideoir a chur chun cinn
+ publish_terms_of_service: Foilsigh Téarmaí Seirbhíse
reject_appeal: Diúltaigh Achomharc
reject_user: Diúltaigh Úsáideoir
remove_avatar_user: Bain Abhatár
@@ -287,6 +288,7 @@ ga:
enable_user_html: "%{name} logáil isteach cumasaithe don úsáideoir %{target}"
memorialize_account_html: Rinne %{name} cuntas %{target} a iompú ina leathanach cuimhneacháin
promote_user_html: Chuir %{name} úsáideoir %{target} chun cinn
+ publish_terms_of_service_html: D'fhoilsigh %{name} nuashonruithe ar na téarmaí seirbhíse
reject_appeal_html: Dhiúltaigh %{name} achomharc ar chinneadh modhnóireachta ó %{target}
reject_user_html: Dhiúltaigh %{name} síniú suas ó %{target}
remove_avatar_user_html: Bhain %{name} avatar %{target}
@@ -967,6 +969,38 @@ ga:
search: Cuardach
title: Haischlibeanna
updated_msg: D'éirigh le socruithe hashtag a nuashonrú
+ terms_of_service:
+ back: Ar ais go téarmaí seirbhíse
+ changelog: Cad atá athraithe
+ create: Bain úsáid as do chuid féin
+ current: Reatha
+ draft: Dréacht
+ generate: Úsáid teimpléad
+ generates:
+ action: Gin
+ chance_to_review_html: "Ní fhoilseofar na téarmaí seirbhíse ginte go huathoibríoch. Beidh deis agat na torthaí a athbhreithniú. Líon isteach na sonraí riachtanacha le leanúint ar aghaidh."
+ explanation_html: Is chun críocha faisnéise amháin atá an teimpléad téarmaí seirbhíse a chuirtear ar fáil, agus níor cheart é a fhorléiriú mar chomhairle dlí ar aon ábhar. Téigh i gcomhairle le do chomhairle dlí féin maidir le do chás agus ceisteanna dlí ar leith atá agat.
+ title: Téarmaí Socrú Seirbhíse
+ history: Stair
+ live: Beo
+ no_history: Níl aon athruithe taifeadta ar théarmaí seirbhíse fós.
+ no_terms_of_service_html: Níl aon téarmaí seirbhíse cumraithe agat faoi láthair. Tá téarmaí seirbhíse i gceist le soiléireacht a sholáthar agus tú a chosaint ó dhliteanais ionchasacha i ndíospóidí le d’úsáideoirí.
+ notified_on_html: Cuireadh úsáideoirí ar an eolas ar %{date}
+ notify_users: Cuir úsáideoirí ar an eolas
+ preview:
+ explanation_html: 'Seolfar an ríomhphost chuig %{display_count} úsáideoir a chláraigh roimh %{date}. Beidh an téacs seo a leanas san áireamh sa ríomhphost:'
+ send_preview: Seol réamhamharc chuig %{email}
+ send_to_all:
+ few: Seol %{display_count} ríomhphost
+ many: Seol %{display_count} ríomhphost
+ one: Seol %{display_count} ríomhphost
+ other: Seol %{display_count} ríomhphost
+ two: Seol %{display_count} ríomhphost
+ title: Réamhamharc ar théarmaí an fhógra seirbhíse
+ publish: Foilsigh
+ published_on_html: Foilsithe ar %{date}
+ save_draft: Sábháil dréacht
+ title: Téarmaí Seirbhíse
title: Riar
trends:
allow: Ceadaigh
@@ -1210,6 +1244,7 @@ ga:
set_new_password: Socraigh pasfhocal nua
setup:
email_below_hint_html: Seiceáil d'fhillteán turscair, nó iarr ceann eile. Is féidir leat do sheoladh ríomhphoist a cheartú má tá sé mícheart.
+ email_settings_hint_html: Cliceáil ar an nasc a sheolamar chuig %{email} chun tús a chur le Mastodon a úsáid. Beidh muid ag fanacht ar dheis anseo.
link_not_received: Nach bhfuair tú nasc?
new_confirmation_instructions_sent: Gheobhaidh tú ríomhphost nua leis an nasc deimhnithe i gceann cúpla bomaite!
title: Seiceáil do bhosca isteach
@@ -1218,6 +1253,7 @@ ga:
title: Logáil isteach go %{domain}
sign_up:
manual_review: Téann clárúcháin ar %{domain} trí athbhreithniú láimhe ag ár modhnóirí. Chun cabhrú linn do chlárúchán a phróiseáil, scríobh beagán fút féin agus cén fáth a bhfuil cuntas uait ar %{domain}.
+ preamble: Agus cuntas agat ar an bhfreastalaí Mastodon seo, beidh tú in ann aon duine eile ar an bhfealsúnacht a leanúint, is cuma cá bhfuil a gcuntas á óstáil.
title: Déanaimis tú a shocrú ar %{domain}.
status:
account_status: Stádas cuntais
@@ -1229,6 +1265,7 @@ 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
+ user_agreement_html: Léigh mé agus aontaím leis na téarmaí seirbhíse agus polasaí príobháideachais
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.
@@ -1962,6 +1999,8 @@ ga:
too_late: Tá sé ró-dhéanach achomharc a dhéanamh faoin stailc seo
tags:
does_not_match_previous_name: nach meaitseálann an t-ainm roimhe seo
+ terms_of_service:
+ title: Téarmaí Seirbhíse
themes:
contrast: Mastodon (Codarsnacht ard)
default: Mastodon (Dorcha)
@@ -2022,6 +2061,15 @@ ga:
further_actions_html: Mura tusa a bhí ann, molaimid duit %{action} a dhéanamh láithreach agus fíordheimhniú dhá fhachtóir a chumasú chun do chuntas a choinneáil slán.
subject: Fuarthas rochtain ar do chuntas ó sheoladh IP nua
title: Síniú isteach nua
+ terms_of_service_changed:
+ agreement: Má leanann tú ar aghaidh ag úsáid %{domain}, tá tú ag aontú leis na téarmaí seo. Mura n-aontaíonn tú leis na téarmaí nuashonraithe, is féidir leat do chomhaontú le %{domain} a fhoirceannadh am ar bith trí do chuntas a scriosadh.
+ changelog: 'Sracfhéachaint, seo é a chiallaíonn an nuashonrú seo duit:'
+ description: 'Tá an ríomhphost seo á fháil agat toisc go bhfuil roinnt athruithe á ndéanamh againn ar ár dtéarmaí seirbhíse ag %{domain}. Molaimid duit athbhreithniú iomlán a dhéanamh ar na téarmaí nuashonraithe anseo:'
+ description_html: Tá an ríomhphost seo á fháil agat toisc go bhfuil roinnt athruithe á ndéanamh againn ar ár dtéarmaí seirbhíse ag %{domain}. Molaimid duit athbhreithniú a dhéanamh ar na téarmaí nuashonraithe ina n-iomláine anseo.
+ sign_off: Foireann %{domain}
+ subject: Nuashonruithe ar ár dtéarmaí seirbhíse
+ subtitle: Tá téarmaí seirbhíse %{domain} ag athrú
+ title: Nuashonrú tábhachtach
warning:
appeal: Cuir achomharc isteach
appeal_description: Má chreideann tú gur earráid é seo, is féidir leat achomharc a chur isteach chuig foireann %{instance}.
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 2f8c3ee982..e534362182 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -214,6 +214,7 @@ ia:
enable_user: Activar le usator
memorialize_account: Converter conto in memorial
promote_user: Promover usator
+ publish_terms_of_service: Publicar le conditiones de servicio
reject_appeal: Rejectar appello
reject_user: Rejectar usator
remove_avatar_user: Remover avatar
@@ -278,6 +279,7 @@ ia:
enable_user_html: "%{name} activava le apertura de session pro le usator %{target}"
memorialize_account_html: "%{name} converteva le conto de %{target} in un pagina commemorative"
promote_user_html: "%{name} promoveva le usator %{target}"
+ publish_terms_of_service_html: "%{name} ha actualisate le conditiones de servicio"
reject_appeal_html: "%{name} refusava le appello del decision de moderation de %{target}"
reject_user_html: "%{name} refusava le inscription de %{target}"
remove_avatar_user_html: "%{name} removeva le avatar de %{target}"
@@ -925,6 +927,35 @@ ia:
search: Cercar
title: Hashtags
updated_msg: Parametros de hashtag actualisate con successo
+ terms_of_service:
+ back: Retornar al conditiones de servicio
+ changelog: Lo que ha cambiate
+ create: Usar tu proprie
+ current: Actual
+ draft: Provisori
+ generate: Usar modello
+ generates:
+ action: Generar
+ chance_to_review_html: "Le conditiones de servicio generate non essera publicate automaticamente. Tu habera le opportunitate de revider le resultatos. Per favor completa le detalios necessari pro continuar."
+ explanation_html: Le modello de conditiones de servicio es fornite solmente pro fines informative e non debe esser interpretate como consilio juridic sur alcun subjecto. Per favor consulta tu proprie consiliero juridic pro omne questiones juridic concrete concernente tu situation.
+ title: Configuration del conditiones de servicio
+ history: Historia
+ live: In uso
+ no_history: Il non ha ancora modificationes registrate del conditiones de servicio.
+ no_terms_of_service_html: Tu non ha actualmente configurate alcun conditiones de servicio. Le conditiones de servicio es visate a fornir claritiate e a proteger te contra possibile responsabilitates in caso de litigios con tu usatores.
+ notified_on_html: Usatores notificate le %{date}
+ notify_users: Notificar usatores
+ preview:
+ explanation_html: 'Le message de e-mail essera inviate a %{display_count} usatores qui se ha inscribite ante le %{date}. Illo includera le sequente texto:'
+ send_preview: Inviar previsualisation a %{email}
+ send_to_all:
+ one: Inviar %{display_count} message de e-mail
+ other: Inviar %{display_count} messages de e-mail
+ title: Previsualisar le notification sur le conditiones de servicio
+ publish: Publicar
+ published_on_html: Publicate le %{date}
+ save_draft: Salvar version provisori
+ title: Conditiones de servicio
title: Administration
trends:
allow: Permitter
@@ -1156,6 +1187,7 @@ ia:
set_new_password: Definir un nove contrasigno
setup:
email_below_hint_html: Consulta tu dossier de spam, o requesta un altere ligamine de confirmation. Tu pote corriger tu adresse de e-mail si illo es errate.
+ email_settings_hint_html: Clicca sur le ligamine que nos te ha inviate a %{email} pro comenciar a usar Mastodon. Nos te attendera hic.
link_not_received: Necun ligamine recipite?
new_confirmation_instructions_sent: Tu recipera un nove e-mail con le ligamine de confirmation in poc minutas!
title: Consulta tu cassa de entrata
@@ -1164,6 +1196,7 @@ ia:
title: Aperir session sur %{domain}
sign_up:
manual_review: Le inscriptiones sur %{domain} passa per un revision manual de nostre moderatores. Pro adjutar nos a processar tu inscription, per favor scribe un poco sur te e explica proque tu vole un conto sur %{domain}.
+ preamble: Con un conto sur iste servitor de Mastodon, tu potera sequer qualcunque altere persona sur le Fediverso, independentemente de ubi su conto es albergate.
title: Lassa nos installar tu conto sur %{domain}.
status:
account_status: Stato del conto
@@ -1175,6 +1208,7 @@ ia:
view_strikes: Examinar le sanctiones passate contra tu conto
too_fast: Formulario inviate troppo rapidemente. Tenta lo de novo.
use_security_key: Usar clave de securitate
+ user_agreement_html: Io ha legite e accepta le conditiones de servicio e le politica de confidentialitate
author_attribution:
example_title: Texto de exemplo
hint_html: Scribe tu articulos de novas o de blog foras de Mastodon? Controla le maniera in que tu recipe attribution quando on los condivide sur Mastodon.
@@ -1673,6 +1707,7 @@ ia:
scheduled_statuses:
over_daily_limit: Tu ha excedite le limite de %{limit} messages programmate pro hodie
over_total_limit: Tu ha excedite le limite de %{limit} messages programmate
+ too_soon: le data debe esser in le futuro
self_destruct:
lead_html: Infortunatemente, %{domain} tosto claudera permanentemente. Si tu habeva un conto illac, tu non potera continuar a usar lo, ma tu pote ancora requestar un copia de tu datos.
title: Iste servitor va clauder
@@ -1835,6 +1870,8 @@ ia:
too_late: Es troppo tarde pro appellar contra iste sanction
tags:
does_not_match_previous_name: non corresponde al nomine precedente
+ terms_of_service:
+ title: Conditiones de servicio
themes:
contrast: Mastodon (Alte contrasto)
default: Mastodon (Obscur)
@@ -1895,6 +1932,15 @@ ia:
further_actions_html: Si non se tractava de te, nos recommenda %{action} immediatemente e activar le authentication bifactorial pro mantener tu conto secur.
subject: Alcuno ha accedite a tu conto desde un nove adresse IP
title: Un nove apertura de session
+ terms_of_service_changed:
+ agreement: Si tu continua a usar %{domain}, tu accepta iste conditiones. Si tu non es de accordo con le conditiones actualisate, tu pote sempre eliminar tu conto pro terminar tu accordo con %{domain}.
+ changelog: 'In summario, ecce lo que iste actualisation significa pro te:'
+ description: 'Tu recipe iste message perque nos ha apportate alcun modificationes a nostre conditiones de servicio sur %{domain}. Nos te incoragia a revider le conditiones actualisate complete al sequente adresse:'
+ description_html: Tu recipe iste message perque nos ha apportate alcun modificationes a nostre conditiones de servicio sur %{domain}. Nos te incoragia a revider le conditiones actualisate complete.
+ sign_off: Le equipa de %{domain}
+ subject: Actualisationes de nostre conditiones de servicio
+ subtitle: Le conditiones de servicio de %{domain} ha cambiate
+ title: Actualisation importante
warning:
appeal: Submitter un appello
appeal_description: Si tu crede que se tracta de un error, tu pote presentar un appello al personal de %{instance}.
diff --git a/config/locales/is.yml b/config/locales/is.yml
index f714409ff1..229cbb56bf 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -939,6 +939,7 @@ is:
generates:
action: Útbúa
chance_to_review_html: "Sjálfvirkt útbúnu þjónustuskilmálarnir verða ekki birtir sjálfkrafa. Þú munt geta yfirfarið textann. Fylltu inn nauðsynlegar upplýsingar til að halda áfram to proceed."
+ explanation_html: Sniðmátið fyrir þjónustuskilmála sem hér fylgir er einungis hugsat til upplýsingar og ætti ekki að taska sem lögfræðilegt álit varðandi hin ýmsu efni. Þú skalt endilega ráðfæra þig við löglærða í þínu umdæmi varðandi þau atriði sem eiga við um stöðu þína auk annarra spurninga um lögfræðileg mál sem þú gætir haft.
title: Uppsetning þjónustuskilmála
history: Ferill
live: Í beinni
@@ -1938,6 +1939,8 @@ is:
terms_of_service_changed:
agreement: Með því að halda áfram að nota %{domain}, ert þú þar með að samþykkja þessa skilmála. Ef þú ert ósammála þessum uppfærðu skilmálum, geturðu hvenær sem er sagt upp samþykki þínu gagnvart %{domain} með því að eyða notandaaðgangi þínum.
changelog: 'Í stuttu máli er það þetta sem þessi uppfærsla þýðir fyrir þig:'
+ description: 'Þú færð þennan tölvupóst vegna þess að við erum að gera nokkrar breytingar á þjónustuskilmálum okkar á %{domain}. Við hvetjum þig til að yfirfara uppfærðu skilmálana í heild hér:'
+ description_html: Þú færð þennan tölvupóst vegna þess að við erum að gera nokkrar breytingar á þjónustuskilmálum okkar á %{domain}. Við hvetjum þig til að yfirfara uppfærðu skilmálana í heild hér:.
sign_off: "%{domain}-teymið"
subject: Breytingar á þjónustuskilmálum okkar
subtitle: Þjónustuskilmálar eru að breytast á %{domain}
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 139a248858..f7d88cf6c5 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -219,6 +219,7 @@ ja:
force_sensitive_status: 投稿を閲覧注意に変更
memorialize_account: 追悼アカウント化
promote_user: ユーザーを昇格
+ publish_terms_of_service: サービス利用規約を公開
reject_appeal: 抗議を却下
reject_remote_account: リモートアカウントを拒否
reject_user: ユーザーを拒否
@@ -287,6 +288,7 @@ ja:
force_sensitive_status_html: "%{name}さんが%{target}さんの投稿を強制的に閲覧注意にしました"
memorialize_account_html: "%{name}さんが%{target}さんを追悼アカウントページに登録しました"
promote_user_html: "%{name}さんが%{target}さんを昇格しました"
+ publish_terms_of_service_html: "%{name} がサービス利用規約の更新を公開しました"
reject_appeal_html: "%{name}さんが%{target}からの抗議を却下しました"
reject_remote_account_html: "%{name}さんが%{target}さんの参加を却下しました"
reject_user_html: "%{name}さんが%{target}さんからの登録を拒否しました"
@@ -1173,6 +1175,34 @@ ja:
search: 検索
title: ハッシュタグ
updated_msg: ハッシュタグ設定が更新されました
+ terms_of_service:
+ back: 利用規約に戻る
+ changelog: 変更箇所
+ create: 自分のものを使う
+ current: 現在
+ draft: 下書き
+ generate: テンプレートを使用
+ generates:
+ action: 作成
+ chance_to_review_html: "生成された利用規約は自動的には公開されません。結果を確認する機会があります。手続きに必要な詳細を記入してください。"
+ explanation_html: 提供された利用規約のテンプレートは情報提供のみを目的としており、いかなる主題に関しても法的助言と見なされるべきではありません。ご自身の状況や具体的な法的質問については、必ずご自身の弁護士に相談してください。
+ title: 利用規約の設定
+ history: 履歴
+ live: 公開中
+ no_history: 利用規約の変更はまだ記録されていません。
+ no_terms_of_service_html: 現在、利用規約が設定されていません。利用規約は、明確さを提供し、ユーザーとのトラブルにおける潜在的な責任からあなたを保護するためのものです。
+ notified_on_html: "%{date}に通知されたユーザー"
+ notify_users: ユーザに通知
+ preview:
+ explanation_html: メールは、%{date} より前に登録した%{display_count}人のユーザーに送信されます。以下のテキストがメールに含まれます:
+ send_preview: "%{email} にプレビューを送信"
+ send_to_all:
+ other: "%{display_count}件のメールを送信"
+ title: サービス利用規約の通知をプレビュー
+ publish: 公開
+ published_on_html: "%{date} に公開"
+ save_draft: 下書きを保存
+ title: サービス利用規約
title: 管理
trends:
allow: 許可
@@ -1431,6 +1461,7 @@ ja:
set_new_password: 新しいパスワード
setup:
email_below_hint_html: 確認メールが迷惑メールフォルダに振り分けられていないか確認してください。メールアドレスを間違えた場合は、ここでメールアドレスの変更と確認メールの再送ができます。
+ email_settings_hint_html: "%{email} に送信したリンクをクリックして Mastodon の使用を開始します。ここでお待ちしています。"
link_not_received: 確認メールを受信できない場合は
new_confirmation_instructions_sent: 確認用のリンクを記載した新しいメールを送信しました
title: 確認メールを送信しました
@@ -1439,6 +1470,7 @@ ja:
title: "%{domain}にログイン"
sign_up:
manual_review: "%{domain} への登録にはモデレーターによる承認が必要です。審査の参考になるように、簡単な自己紹介や %{domain} に登録したい理由などを記入してください。"
+ preamble: この Mastodon サーバーのアカウントがあれば、fediverse上の他の人のアカウントがどこでホストされているかに関係なく、その人をフォローすることができます。
title: さあ %{domain} でセットアップしましょう.
status:
account_status: アカウントの状態
@@ -1450,6 +1482,7 @@ ja:
view_strikes: 過去のストライクを表示
too_fast: フォームの送信が速すぎます。もう一度やり直してください。
use_security_key: セキュリティキーを使用
+ user_agreement_html: 利用規約 および プライバシーポリシーを読み、同意します。
with_login_options: カスタムCSSを無効化しますか?
author_attribution:
example_title: サンプルテキスト
@@ -2152,6 +2185,8 @@ ja:
too_late: このストライクに抗議するには遅すぎます
tags:
does_not_match_previous_name: 以前の名前と一致しません
+ terms_of_service:
+ title: サービス利用規約
themes:
contrast: Mastodon (ハイコントラスト)
default: Mastodon (ダーク)
@@ -2213,6 +2248,15 @@ ja:
further_actions_html: あなたがログインしていない場合は、すぐに%{action}し、アカウントを安全に保つために二要素認証を有効にすることをお勧めします。
subject: 新しいIPアドレスからのアクセスがありました
title: 新しいサインイン
+ terms_of_service_changed:
+ agreement: "%{domain} を引き続き使用することで、これらの条件に同意したことになります。更新された条件に同意しない場合は、アカウントを削除することでいつでも %{domain} との契約を終了することができます。"
+ changelog: 一目で分かる、この更新があなたにとって意味することは次の通りです:
+ description: このメールを受け取っているのは、%{domain} の利用規約にいくつかの変更を加えているためです。更新された利用規約をこちらで全てご確認いただくことをお勧めします:
+ description_html: このメールを受け取っているのは、%{domain} の利用規約にいくつかの変更を加えているためです。こちらで更新された利用規約を全てご確認いただくことをお勧めします。
+ sign_off: "%{domain} チーム"
+ subject: 利用規約の更新
+ subtitle: "%{domain} の利用規約が変更されています"
+ title: 重要な更新
warning:
appeal: 抗議を送信
appeal_description: これが間違いだと思われる場合は、%{instance}のスタッフに申し立てすることができます。
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index c41652ca0d..9619b26fe1 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -279,7 +279,7 @@ nl:
enable_user_html: Inloggen voor %{target} is door %{name} ingeschakeld
memorialize_account_html: Het account %{target} is door %{name} in een In memoriam veranderd
promote_user_html: Gebruiker %{target} is door %{name} gepromoveerd
- publish_terms_of_service_html: "%{name} publiceerde updates van de servicevoorwaarden"
+ publish_terms_of_service_html: "%{name} publiceerde bijgewerkte gebruiksvoorwaarden"
reject_appeal_html: "%{name} heeft het bezwaar tegen de moderatiemaatregel van %{target} afgewezen"
reject_user_html: "%{name} heeft de registratie van %{target} afgewezen"
remove_avatar_user_html: "%{name} verwijderde de profielfoto van %{target}"
@@ -936,14 +936,14 @@ nl:
generate: Sjabloon gebruiken
generates:
action: Genereren
- chance_to_review_html: "De gegenereerde gebruiksvoorwaarden worden niet automatisch gepubliceerd. Je krijgt gelegenheid om de resultaten te bekijken. Vul de benodigde gegevens in om verder te gaan."
+ chance_to_review_html: "De gegenereerde gebruiksvoorwaarden worden niet automatisch gepubliceerd. Je krijgt de gelegenheid om de resultaten eerst te bekijken. Vul de benodigde gegevens in om verder te gaan."
explanation_html: Het sjabloon voor de gebruiksvoorwaarden is uitsluitend bedoeld voor informatieve doeleinden en mag niet worden opgevat als juridisch advies over welk onderwerp dan ook. Raadpleeg een eigen juridisch adviseur over jouw situatie en voor specifieke juridische vragen.
title: Gebruiksvoorwaarden instellen
history: Geschiedenis
live: Actueel
no_history: Er zijn nog geen opgeslagen wijzigingen van de gebruiksvoorwaarden.
- no_terms_of_service_html: Je hebt momenteel geen servicevoorwaarden geconfigureerd. De gebruiksvoorwaarden zijn bedoeld om duidelijkheid te verschaffen en je te beschermen tegen mogelijke verplichtingen in geschillen met gebruikers.
- notified_on_html: Gebruikers ingelicht op %{date}
+ no_terms_of_service_html: Je hebt momenteel geen gebruiksvoorwaarden geconfigureerd. De gebruiksvoorwaarden zijn bedoeld om duidelijkheid te verschaffen en je te beschermen tegen mogelijke aansprakelijkheid als gevolg van geschillen met gebruikers.
+ notified_on_html: Gebruikers geïnformeerd op %{date}
notify_users: Gebruikers informeren
preview:
explanation_html: 'De e-mail wordt verzonden naar %{display_count} gebruikers die zich hebben aangemeld voor %{date}. De volgende tekst zal in de e-mail worden opgenomen:'
@@ -951,7 +951,7 @@ nl:
send_to_all:
one: "%{display_count} e-mail verzenden"
other: "%{display_count} e-mails verzenden"
- title: Voorbeeld van Melding gebruiksvoorwaarden
+ title: Voorbeeld tonen van de melding over de gebruiksvoorwaarden
publish: Publiceren
published_on_html: Gepubliceerd op %{date}
save_draft: Concept opslaan
@@ -1187,7 +1187,7 @@ nl:
set_new_password: Nieuw wachtwoord instellen
setup:
email_below_hint_html: Controleer je map met spam, of vraag een nieuwe bevestigingslink aan. Je kan je e-mailadres corrigeren als het verkeerd is.
- email_settings_hint_html: Klik op de link die we naar %{email} hebben gestuurd om Mastodon te gebruiken. We wachten hier af.
+ email_settings_hint_html: Klik op de link die we naar %{email} hebben gestuurd om Mastodon te gebruiken. We wachten wel even.
link_not_received: Geen link ontvangen?
new_confirmation_instructions_sent: Je ontvangt binnen enkele minuten een nieuwe e-mail met de bevestigingslink!
title: Kijk in je mailbox
@@ -1196,7 +1196,7 @@ nl:
title: Inloggen op %{domain}
sign_up:
manual_review: Inschrijvingen op %{domain} worden handmatig door onze moderatoren beoordeeld. Schrijf wat over jezelf en waarom je een account op %{domain} wilt. Hiermee help je ons om de aanvraag van jouw account goed te kunnen verwerken.
- preamble: Met een account op deze Mastodon-server kun je iedereen volgen op de fediverse, ongeacht waar deze persoon een account heeft.
+ preamble: Met een account op deze Mastodon-server kun je iedereen in de fediverse volgen, ongeacht waar deze persoon een account heeft.
title: Laten we je account op %{domain} instellen.
status:
account_status: Accountstatus
@@ -1935,10 +1935,10 @@ nl:
terms_of_service_changed:
agreement: Door %{domain} te blijven gebruiken, ga je akkoord met deze voorwaarden. Als je het niet eens bent met de bijgewerkte voorwaarden, kun je je overeenkomst met %{domain} op elk gewenst moment beëindigen door je account te verwijderen.
changelog: 'In een oogopslag betekent deze update voor jou:'
- description: 'Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bekijken:'
- description_html: Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden bij %{domain}. We raden je aan om de bijgewerkte voorwaarden hier geheel te bestuderen.
+ description: 'Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden op %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bekijken:'
+ description_html: Je ontvangt dit bericht omdat we enkele wijzigingen aanbrengen in onze gebruiksvoorwaarden op %{domain}. We raden je aan om de bijgewerkte voorwaarden hier volledig te bestuderen.
sign_off: Het %{domain}-team
- subject: Bijwerkingen van onze servicevoorwaarden
+ subject: Onze bijgewerkte gebruiksvoorwaarden
subtitle: De gebruiksvoorwaarden van %{domain} veranderen
title: Belangrijke update
warning:
@@ -1986,7 +1986,7 @@ nl:
feature_action: Meer informatie
feature_audience: Mastodon biedt je een unieke mogelijkheid om je publiek te beheren zonder tussenpersonen. Mastodon, geïmplementeerd in jouw eigen infrastructuur, stelt je in staat om elke andere Mastodon-server online te volgen en door hen gevolgd te worden, en staat onder controle van niemand, behalve die van jou.
feature_audience_title: Bouw jouw publiek in vertrouwen op
- feature_control: Je weet zelf het beste wat je op jouw tijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf.
+ feature_control: Je weet zelf het beste wat je op jouw starttijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf.
feature_control_title: Houd controle over je eigen tijdlijn
feature_creativity: Mastodon ondersteunt audio-, video- en fotoberichten, toegankelijkheidsbeschrijvingen, peilingen, inhoudswaarschuwingen, geanimeerde profielfoto's, aangepaste lokale emoji's, controle over het bijwerken van thumbnails en meer, om je te helpen jezelf online uit te drukken. Of je nu jouw kunst, jouw muziek of jouw podcast publiceert, Mastodon staat voor je klaar.
feature_creativity_title: Ongeëvenaarde creativiteit
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index f1dfbe4f7d..0110fe540d 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -220,6 +220,7 @@ pl:
enable_user: Włącz użytkownika
memorialize_account: Upamiętnij konto
promote_user: Podnieś uprawnienia
+ publish_terms_of_service: Opublikuj Regulamin
reject_appeal: Odrzuć odwołanie
reject_user: Odrzuć użytkownika
remove_avatar_user: Usuń awatar
@@ -953,6 +954,8 @@ pl:
search: Szukaj
title: Hashtagi
updated_msg: Pomyślnie uaktualniono ustawienia hashtagów
+ terms_of_service:
+ draft: Szkic
title: Administracja
trends:
allow: Zezwól
@@ -1687,6 +1690,7 @@ pl:
scheduled_statuses:
over_daily_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów na ten dzień
over_total_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów
+ too_soon: musi to być przyszła data
self_destruct:
lead_html: Niestety, %{domain} jest permanentnie zamykane. Konta z tego serwera nie będą dostępne, ale można jeszcze odzyskać kopię zapasową danych.
title: Ten serwer jest zamykany
@@ -1857,6 +1861,8 @@ pl:
too_late: Jest za późno na odwołanie się od tego ostrzeżenia
tags:
does_not_match_previous_name: nie pasuje do poprzedniej nazwy
+ terms_of_service:
+ title: Regulamin
themes:
contrast: Mastodon (Wysoki kontrast)
default: Mastodon (Ciemny)
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index f739c93394..f18f05640d 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -21,6 +21,7 @@ pt-PT:
one: Publicação
other: Publicações
posts_tab_heading: Publicações
+ self_follow_error: Não é permitido seguir a sua própria conta
admin:
account_actions:
action: Executar acção
@@ -86,7 +87,7 @@ pt-PT:
remote: Remoto
title: Local
login_status: Estado de início de sessão
- media_attachments: Anexos de media
+ media_attachments: Anexos multimédia
memorialize: Converter num memorial
memorialized: Em memória
memorialized_msg: Conta %{username} transformada com sucesso em memorial
@@ -186,6 +187,7 @@ pt-PT:
create_domain_block: Criar bloqueio de domínio
create_email_domain_block: Criar bloqueio de domínio de e-mail
create_ip_block: Criar regra de IP
+ create_relay: Criar retransmissor
create_unavailable_domain: Criar domínio indisponível
create_user_role: Criar função
demote_user: Despromover utilizador
@@ -197,18 +199,22 @@ pt-PT:
destroy_email_domain_block: Eliminar bloqueio de domínio de e-mail
destroy_instance: Purgar domínio
destroy_ip_block: Eliminar regra de IP
+ destroy_relay: Eliminar retransmissor
destroy_status: Eliminar publicação
destroy_unavailable_domain: Eliminar domínio indisponível
destroy_user_role: Eliminar função
disable_2fa_user: Desativar 2FA
disable_custom_emoji: Desativar emoji personalizado
+ disable_relay: Desativar retransmissor
disable_sign_in_token_auth_user: Desativar token de autenticação por e-mail para o utilizador
disable_user: Desativar utilizador
enable_custom_emoji: Ativar emoji personalizado
+ enable_relay: Ativar retransmissor
enable_sign_in_token_auth_user: Ativar token de autenticação por e-mail para o utilizador
enable_user: Ativar utilizador
memorialize_account: Transformar conta num memorial
promote_user: Promover utilizador
+ publish_terms_of_service: Publicar Termos de Serviço
reject_appeal: Rejeitar recurso
reject_user: Rejeitar utilizador
remove_avatar_user: Remover imagem de perfil
@@ -246,6 +252,7 @@ pt-PT:
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
create_ip_block_html: "%{name} criou uma regra para o IP %{target}"
+ create_relay_html: "%{name} criou o retransmissor %{target}"
create_unavailable_domain_html: "%{name} parou as entregas ao domínio %{target}"
create_user_role_html: "%{name} criou a função %{target}"
demote_user_html: "%{name} despromoveu o utilizador %{target}"
@@ -257,18 +264,22 @@ pt-PT:
destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
destroy_instance_html: "%{name} purgou o domínio %{target}"
destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}"
+ destroy_relay_html: "%{name} eliminou o retransmissor %{target}"
destroy_status_html: "%{name} removeu a publicação de %{target}"
destroy_unavailable_domain_html: "%{name} retomou as entregas ao domínio %{target}"
destroy_user_role_html: "%{name} eliminou a função %{target}"
disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
disable_custom_emoji_html: "%{name} desativou o emoji %{target}"
+ disable_relay_html: "%{name} desativou o retransmissor %{target}"
disable_sign_in_token_auth_user_html: "%{name} desativou o token de autenticação por e-mail para %{target}"
disable_user_html: "%{name} desativou o início de sessão para o utilizador %{target}"
enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
+ enable_relay_html: "%{name} ativou o retransmissor %{target}"
enable_sign_in_token_auth_user_html: "%{name} ativou o token de autenticação por e-mail para %{target}"
enable_user_html: "%{name} ativou o início de sessão para o utilizador %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
promote_user_html: "%{name} promoveu o utilizador %{target}"
+ publish_terms_of_service_html: "%{name} publicou atualizações dos termos de serviço"
reject_appeal_html: "%{name} rejeitou recurso da decisão de moderação de %{target}"
reject_user_html: "%{name} rejeitou a inscrição de %{target}"
remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}"
@@ -276,12 +287,12 @@ pt-PT:
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"
+ sensitive_account_html: "%{name} marcou a multimédia de %{target} como sensível"
silence_account_html: "%{name} silenciou a conta de %{target}"
suspend_account_html: "%{name} suspendeu a conta de %{target}"
unassigned_report_html: "%{name} desatribuiu a denúncia %{target}"
unblock_email_account_html: "%{name} desbloqueou o endereço de e-mail de %{target}"
- unsensitive_account_html: "%{name} desmarcou a media de %{target} como sensível"
+ unsensitive_account_html: "%{name} desmarcou a multimédia de %{target} como sensível"
unsilence_account_html: "%{name} desativou o silêncio de %{target}"
unsuspend_account_html: "%{name} desativou a suspensão de %{target}"
update_announcement_html: "%{name} atualizou o anúncio %{target}"
@@ -291,7 +302,7 @@ pt-PT:
update_report_html: "%{name} atualizou a denúncia %{target}"
update_status_html: "%{name} atualizou o estado de %{target}"
update_user_role_html: "%{name} alterou a função %{target}"
- deleted_account: conta apagada
+ deleted_account: conta eliminada
empty: Não foram encontrados registos.
filter_by_action: Filtrar por ação
filter_by_user: Filtrar por utilizador
@@ -302,7 +313,7 @@ pt-PT:
edit:
title: Editar comunicado
empty: Nenhum comunicado encontrado.
- live: Em direto
+ live: Em tempo real
new:
create: Criar comunicado
title: Novo comunicado
@@ -352,7 +363,7 @@ pt-PT:
dashboard:
active_users: utilizadores ativos
interactions: interações
- media_storage: Armazenamento de media
+ media_storage: Armazenamento de multimédia
new_users: novos utilizadores
opened_reports: denúncias abertas
pending_appeals_html:
@@ -393,7 +404,7 @@ pt-PT:
confirm: Suspender
permanent_action: Desfazer a suspensão não restaurará nenhum dado ou relacionamento.
preamble_html: Está prestes a suspender %{domain} e seus subdomínios.
- remove_all_data: Isto irá remover todo o conteúdo, media e dados de perfil para este domínio do seu servidor.
+ remove_all_data: Isto irá remover todo o conteúdo, multimédias e dados de perfil para este domínio do seu servidor.
stop_communication: O seu servidor irá parar de comunicar com esses servidores.
title: Confirmar o bloqueio de domínio para %{domain}
undo_relationships: Isto irá desfazer qualquer relação entre as contas desses servidores e as suas.
@@ -409,7 +420,7 @@ pt-PT:
create: Criar bloqueio
hint: O bloqueio do domínio não impedirá a criação de registos de contas na base de dados, mas aplicará retroativamente e automaticamente métodos de moderação específicos a essas contas.
severity:
- desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize Nenhum se apenas quiser rejeitar ficheiros media."
+ desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do seu servidor todo o conteúdo, multimédias e dados de perfil das contas deste domínio. Utilize Nenhum se apenas quiser rejeitar ficheiros multimédia."
noop: Nenhum
silence: Limitar
suspend: Suspender
@@ -422,8 +433,8 @@ pt-PT:
private_comment_hint: Comentário sobre essa limitação de domínio para uso interno pelos moderadores.
public_comment: Comentário público
public_comment_hint: Comentário sobre essa limitação de domínio para o público geral, se ativada a divulgação da lista de limitações de domínio.
- reject_media: Rejeitar ficheiros de media
- reject_media_hint: Remove ficheiros de media armazenados localmente, e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões
+ reject_media: Rejeitar ficheiros multimédia
+ reject_media_hint: Remove ficheiros multimédia armazenados localmente e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões
reject_reports: Rejeitar denúncias
reject_reports_hint: Ignorar todas as denúncias provenientes deste domínio. Sem pertinência para suspensões
undo: Anular o bloqueio por domínio
@@ -478,8 +489,8 @@ pt-PT:
view_all: Ver registos de auditoria completos
availability:
description_html:
- one: Se a transmissão ao domínio falhar ao final de %{count} dia(s), não será feita mais nenhuma tentativa de transmissão a menos que seja recebida uma transmissão proveniente desse domínio.
- other: Se a transmissão ao domínio falhar em %{count} dias diferentes sem sucesso, nenhuma tentativa de transmissão será feita a menos que uma transmissão proveniente do domínio seja recebida.
+ one: Se a entrega ao domínio falhar %{count} dia(s) sem sucesso, não serão efetuadas mais tentativas de entrega, a menos que seja recebida uma entrega do domínio.
+ other: Se a entrega ao domínio falhar %{count} dias diferentes sem sucesso, não serão efetuadas mais tentativas de entrega, a menos que seja recebida uma entrega do domínio.
failure_threshold_reached: Limite de falhas atingido em %{date}.
failures_recorded:
one: Tentativa falhada em %{count} dia.
@@ -497,7 +508,7 @@ pt-PT:
description_html: Pode definir políticas de conteúdo que serão aplicadas a todas as contas deste domínio e a qualquer um dos seus subdomínios.
limited_federation_mode_description_html: Pode escolher se deseja permitir a federação com este domínio.
policies:
- reject_media: Rejeitar media
+ reject_media: Rejeitar multimédia
reject_reports: Rejeitar denúncias
silence: Limitar
suspend: Suspender
@@ -510,7 +521,7 @@ pt-PT:
instance_followers_measure: nossos seguidores lá
instance_follows_measure: os seus seguidores aqui
instance_languages_dimension: Idiomas mais populares
- instance_media_attachments_measure: anexos de media armazenados
+ instance_media_attachments_measure: anexos multimédia armazenados
instance_reports_measure: denúncias sobre eles
instance_statuses_measure: publicações armazenadas
delivery:
@@ -541,7 +552,7 @@ pt-PT:
total_followed_by_them: Seguido(s) por eles
total_followed_by_us: Seguido(s) por nós
total_reported: Denúncias sobre eles
- total_storage: Anexos de media
+ total_storage: Anexos multimédia
totals_time_period_hint_html: Os totais exibidos abaixo incluem dados referentes ao tempo total.
unknown_instance: Atualmente não há registo deste domínio neste servidor.
invites:
@@ -597,7 +608,7 @@ pt-PT:
action_taken_by: Ação tomada por
actions:
delete_description_html: As publicações denunciadas serão eliminadas, e será registada uma reprimenda para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
- mark_as_sensitive_description_html: A media nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
+ mark_as_sensitive_description_html: A multimédia nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta.
other_description_html: Ver mais opções para controlar o comportamento da conta e personalizar a comunicação para a conta denunciada.
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.
@@ -660,7 +671,7 @@ pt-PT:
suspend_html: 'Está prestes a suspender a conta de@%{acct}. Isto irá:'
actions:
delete_html: Excluir as publicações ofensivas
- mark_as_sensitive_html: Marcar a mídia dos posts ofensivos como sensível
+ mark_as_sensitive_html: Marcar a multimédia das publicações ofensivas como sensível
silence_html: Limitar firmemente o alcance de @%{acct}, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente no perfil
suspend_html: Suspender @%{acct}, tornando seu perfil e conteúdo inacessíveis e impossível de interagir
close_report: 'Marcar relatório #%{id} como resolvido'
@@ -726,7 +737,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_user_access_description: Permite aos utilizadores desativarem a autenticação de dois fatores de outros utilizadores, alterarem os seus endereços de correio eletrónico e redefinirem as suas palavras-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
@@ -797,11 +808,11 @@ pt-PT:
federation_authentication: Imposição de autenticação da federação
title: Definições do servidor
site_uploads:
- delete: Eliminar arquivo carregado
+ delete: Eliminar ficheiro enviado
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.
+ 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 as atualizações a cada 30 minutos e irá notificá-lo 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
@@ -817,24 +828,31 @@ pt-PT:
back_to_account: Voltar para página da conta
back_to_report: Voltar à página da denúncia
batch:
+ add_to_report: 'Adicionar ao relatório #%{id}'
remove_from_report: Remover da denúncia
report: Denúncia
+ contents: Conteúdo
deleted: Eliminado
- favourites: Marcadores
+ favourites: Favoritos
history: Histórico de versões
in_reply_to: A responder a
language: Idioma
media:
- title: Media
+ title: Multimédia
metadata: Metadados
+ no_history: Esta publicação não foi editada
no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado
open: Abrir publicação
original_status: Publicação original
- reblogs: Re-publicacões
+ reblogs: Reblogues
+ replied_to_html: Respondeu a %{acct_link}
status_changed: Publicação alterada
+ status_title: Publicado por @%{name}
+ title: Publicações da conta - @%{name}
trending: Em tendência
+ view_publicly: Visualizar publicamente
visibility: Visibilidade
- with_media: Com media
+ with_media: Com multimédia
strikes:
actions:
delete_statuses: "%{name} eliminou a publicação de %{target}"
@@ -849,7 +867,7 @@ pt-PT:
appeal_rejected: Recurso rejeitado
system_checks:
database_schema_check:
- message_html: Há migrações de base de dados pendentes. Queira executá-las, para garantir que a aplicação se comporta como o esperado
+ message_html: Existem migrações de bases de dados pendentes. Execute-as para garantir que a aplicação se comporta como esperado
elasticsearch_health_red:
message_html: O cluster elasticsearch não está de boa saúde (estado vermelho), as funcionalidades de pesquisa não estão disponíveis
elasticsearch_health_yellow:
@@ -874,6 +892,9 @@ pt-PT:
message_html: Não definiu nenhuma regra para a instância.
sidekiq_process_check:
message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq
+ software_version_check:
+ action: Ver atualizações disponíveis
+ message_html: Está disponível uma atualização do Mastodon.
software_version_critical_check:
action: Ver atualizações disponíveis
message_html: Está disponível uma atualização crítica do Mastodon. Por favor, atualize assim que possível.
@@ -904,8 +925,37 @@ pt-PT:
reset: Repor
review: Estado da revisão
search: Pesquisar
- title: Hashtags
+ title: Etiquetas
updated_msg: 'Definições de #etiquetas atualizadas com sucesso'
+ terms_of_service:
+ back: Voltar aos Termos do Serviço
+ changelog: O que mudou
+ create: Use o seu próprio
+ current: Atual
+ draft: Rascunho
+ generate: Utilizar modelo
+ generates:
+ action: Gerar
+ chance_to_review_html: "Os termos de serviço gerados não serão publicados automaticamente. Terá a possibilidade de rever os resultados. Por favor, preencha os detalhes necessários para prosseguir."
+ explanation_html: O modelo de termos de serviço fornecido destina-se apenas a fins informativos e não deve ser interpretado como aconselhamento jurídico sobre qualquer assunto. Consulte o seu próprio consultor jurídico sobre a sua situação e questões jurídicas específicas que tenha.
+ title: Configuração dos Termos de Serviço
+ history: Histórico
+ live: Em tempo real
+ no_history: Ainda não há nenhuma alteração registada nos termos de serviço.
+ no_terms_of_service_html: Atualmente, não tem quaisquer termos de serviço configurados. Os termos de serviço destinam-se a proporcionar clareza e a protegê-lo de potenciais responsabilidades em litígios com os seus utilizadores.
+ notified_on_html: Utilizadores notificados em %{date}
+ notify_users: Notificar utilizadores
+ preview:
+ explanation_html: 'O e-mail será enviado para %{display_count} utilizadores que se inscreveram antes de %{date}. O texto seguinte será incluído na mensagem de e-mail:'
+ send_preview: Enviar pré-visualização para %{email}
+ send_to_all:
+ one: Enviar %{display_count} e-mail
+ other: Enviar %{display_count} e-mails
+ title: Pré-visualizar termos de notificação de serviço
+ publish: Publicar
+ published_on_html: Publicado em %{date}
+ save_draft: Guardar rascunho
+ title: Termos de Serviço
title: Administração
trends:
allow: Permitir
@@ -947,14 +997,14 @@ pt-PT:
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.
+ description_html: Estas são publicações que o seu servidor conhece e que estão a ser muito partilhadas e adicionadas aos favoritos neste momento. Pode ajudar os seus utilizadores novos e antigos a encontrar mais pessoas para seguir. Nenhuma publicação é apresentada publicamente até que o autor seja aprovado e o autor permita que a sua conta seja sugerida a outros. Também pode permitir ou rejeitar mensagens individuais.
disallow: Não permitir publicação
disallow_account: Não permitir autor
no_status_selected: Não foram alteradas quaisquer publicações de tendências, uma vez que nenhuma foi selecionada
not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros
shared_by:
- one: Partilhado ou adicionado aos marcadores uma vez
- other: Partilhado e adicionado aos marcadores %{friendly_count} vezes
+ one: Partilhada ou adicionada aos favoritos uma vez
+ other: Partilhada ou adicionada aos favoritos %{friendly_count} vezes
title: Publicações em tendência
tags:
current_score: Pontuação atual %{score}
@@ -1054,7 +1104,7 @@ pt-PT:
remove: Desvincular pseudónimo
appearance:
advanced_web_interface: Interface web avançada
- advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: Página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.'
+ advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.'
animations_and_accessibility: Animações e acessibilidade
confirmation_dialogs: Caixas de confirmação
discovery: Descobrir
@@ -1078,7 +1128,7 @@ pt-PT:
regenerate_token: Regenerar token de acesso
token_regenerated: Token de acesso regenerado com sucesso
warning: Cuidado com estes dados. Não partilhar com ninguém!
- your_token: O teu token de acesso
+ your_token: O seu token de acesso
auth:
apply_for_account: Solicitar uma conta
captcha_confirmation:
@@ -1096,7 +1146,7 @@ pt-PT:
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.
+ delete_account_html: Se pretender eliminar a sua conta, pode fazê-lo aqui. Ser-lhe-á pedida uma confirmação.
description:
prefix_invited_by_user: "@%{name} convidou-o a juntar-se a esta instância do Mastodon!"
prefix_sign_up: Inscreva-se hoje no Mastodon!
@@ -1105,8 +1155,8 @@ pt-PT:
dont_have_your_security_key: Não tem a sua chave de segurança?
forgot_password: Esqueceu-se da palavra-passe?
invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo.
- link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel, ou um código de recuperação
- link_to_webauth: Usa o teu dispositivo de chave de segurança
+ link_to_otp: Introduza um código de dois fatores do seu telemóvel ou um código de recuperação
+ link_to_webauth: Utilize o seu dispositivo de chave de segurança
log_in_with: Iniciar sessão com
login: Entrar
logout: Sair
@@ -1137,6 +1187,7 @@ pt-PT:
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 na hiperligação que enviámos para %{email} para começar a utilizar o Mastodon. Estaremos à espera aqui mesmo.
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
@@ -1145,6 +1196,7 @@ pt-PT:
title: Iniciar sessão em %{domain}
sign_up:
manual_review: Inscrições no %{domain} passam por uma revisão manual pelos nossos moderadores. Para nos ajudar a processar o seu pedido de inscrição, escreva um pouco sobre si e o porquê de quer uma conta no %{domain}.
+ preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa no fediverso, independentemente do local onde a sua conta está alojada.
title: Vamos lá inscrevê-lo em %{domain}.
status:
account_status: Estado da conta
@@ -1156,10 +1208,14 @@ pt-PT:
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
+ user_agreement_html: Eu li e concordo com os termos do serviço e política de privacidade
author_attribution:
example_title: Texto de exemplo
+ hint_html: Está a escrever notícias ou artigos de blogue fora do Mastodon? Controle a forma como é creditado quando estes são partilhados no Mastodon.
+ instructions: 'Certifique-se de que este código está no HTML do seu artigo:'
more_from_html: Mais de %{name}
- s_blog: Blog de %{name}
+ s_blog: Blogue de %{name}
+ then_instructions: Em seguida, adicione o nome de domínio da publicação no campo abaixo.
title: Atribuição de autor
challenge:
confirm: Continuar
@@ -1262,20 +1318,20 @@ pt-PT:
download: Descarregar o seu arquivo
hint_html: Pode pedir um arquivo das suas publicações e ficheiros de media carregados. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer programa compatível. Pode solicitar um arquivo a cada 7 dias.
in_progress: A compilar o seu arquivo...
- request: Peça o seu arquivo
+ request: Pedir o seu arquivo
size: Tamanho
blocks: Bloqueaste
bookmarks: Marcadores
csv: CSV
domain_blocks: Bloqueios de domínio
lists: Listas
- mutes: Tens em silêncio
- storage: Armazenamento de media
+ mutes: Que ocultou
+ storage: Armazenamento de multimédia
featured_tags:
add_new: Adicionar nova
errors:
- limit: Já destacou o número máximo de hashtags permitido
- hint_html: "O que são etiquetas em destaque? Exibidas de forma bem visível no seu perfil público, permitem que as pessoas consultem as suas publicações públicas especificamente sob essas etiquetas. São uma óptima ferramenta para dar seguimento a trabalhos criativos ou projectos de longo prazo."
+ limit: Já destacou o número máximo de etiquetas permitido
+ hint_html: "Coloque as etiquetas mais importantes no seu perfil. Uma excelente ferramenta para acompanhar os seus trabalhos criativos e projetos a longo prazo, as etiquetas em destaque são apresentadas de forma proeminente no seu perfil e permitem um acesso rápido às suas próprias publicações."
filters:
contexts:
account: Perfis
@@ -1341,7 +1397,7 @@ pt-PT:
today: hoje
validation_errors:
one: Algo não está correcto. Por favor analise o erro abaixo
- other: Algo não está bem. Queira analisar os %{count} erros abaixo
+ other: Algo ainda não está correto! Reveja os %{count} erros abaixo
imports:
errors:
empty: Ficheiro CSV vazio
@@ -1357,6 +1413,44 @@ 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:
+ one: Está prestes a substituir a sua lista de bloqueios com até conta%{count} de %{filename}.
+ other: Está prestes a substituir a sua lista de bloqueios com até %{count} contas de %{filename}.
+ bookmarks_html:
+ one: Está prestes a substituir os seus marcadores com até %{count} publicações de %{filename}.
+ other: Está prestes a substituir os seus marcadores com até %{count} publicação de %{filename}.
+ domain_blocking_html:
+ one: Está prestes a substituir a sua lista de bloqueios de domínio com até %{count} domínio de %{filename}.
+ other: Está prestes a substituir a sua lista de bloqueios de domínio com até %{count} domínios de %{filename}.
+ following_html:
+ one: Está prestes a seguir até %{count} conta de %{filename} e parar de seguir quaisquer outras contas.
+ other: Está prestes a seguir até %{count} contas de %{filename} e parar de seguir quaisquer outras contas.
+ lists_html:
+ one: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{count} conta serão adicionadas a novas listas.
+ other: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{count} contas serão adicionadas a novas listas.
+ muting_html:
+ one: Está prestes a substituir a sua lista de conta ocultada com até %{count} conta de %{filename}.
+ other: Está prestes a substituir a sua lista de contas ocultadas com até %{count} contas de %{filename}.
+ preambles:
+ blocking_html:
+ one: Está prestes a bloquear até %{count} conta de %{filename}.
+ other: Está prestes a bloquear até %{count} contas de %{filename}.
+ bookmarks_html:
+ one: Está prestes a adicionar até %{count} publicação de %{filename} aos seus marcadores.
+ other: Está prestes a adicionar até %{count} publicações de %{filename} aos seus marcadores.
+ domain_blocking_html:
+ one: Está prestes a bloquear até %{count} domínio de %{filename}.
+ other: Está prestes a bloquear até %{count} domínios de %{filename}.
+ following_html:
+ one: Está prestes a seguir até %{count} conta de %{filename}.
+ other: Está prestes a seguir até %{count} contas de %{filename}.
+ lists_html:
+ one: Está prestes a adicionar até %{count} conta do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar.
+ other: Está prestes a adicionar até %{count} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar.
+ muting_html:
+ one: Está prestes a ocultar até %{count} conta de %{filename}.
+ other: Está prestes a ocultar até %{count} 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:
@@ -1365,7 +1459,7 @@ pt-PT:
scheduled: Agendado
unconfirmed: Não confirmado
status: Estado
- success: Os teus dados foram enviados correctamente e serão processados em breve
+ success: Os seus dados foram enviados correctamente e serão processados em breve
time_started: Iniciado em
titles:
blocking: Importando contas bloqueadas
@@ -1373,11 +1467,11 @@ pt-PT:
domain_blocking: Importando domínios bloqueados
following: Importando contas seguidas
lists: A importar listas
- muting: Importando contas silenciadas
+ muting: Importando contas ocultadas
type: Tipo de importação
type_groups:
constructive: Seguidores e marcadores
- destructive: Bloqueios e silenciamentos
+ destructive: Bloqueios e ocultados
types:
blocking: Lista de bloqueio
bookmarks: Marcadores
@@ -1385,7 +1479,7 @@ pt-PT:
following: Lista de pessoas que estás a seguir
lists: Listas
muting: Lista de utilizadores silenciados
- upload: Carregar
+ upload: Enviar
invites:
delete: Desativar
expired: Expirados
@@ -1402,23 +1496,23 @@ pt-PT:
invited_by: 'Foi convidado por:'
max_uses:
one: 1 uso
- other: "%{count} usos"
+ other: "%{count} utilizações"
max_uses_prompt: Sem limite
- prompt: Gerar e partilhar ligações com outras pessoas para permitir acesso a essa instância
+ prompt: Gerar e partilhar hiperligações com outras pessoas para permitir acesso a essa instância
table:
expires_at: Expira
- uses: Usos
+ uses: Utilizações
title: Convidar pessoas
lists:
errors:
limit: Atingiu o número máximo de listas permitido
login_activities:
authentication_methods:
- otp: aplicação de autenticação em duas etapas
+ otp: aplicação de autenticação de dois fatores
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.
+ description_html: Se vir atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação de dois fatores.
empty: Sem histórico de autenticação disponível
failed_sign_in_html: Tentativa falhada de início de sessão com %{method} de %{ip} (%{browser})
successful_sign_in_html: Sessão correctamente iniciada com %{method} de %{ip} (%{browser})
@@ -1427,10 +1521,21 @@ pt-PT:
unsubscribe:
action: Sim, cancelar subscrição
complete: Subscrição Cancelada
+ confirmation_html: Tem a certeza que deseja cancelar a subscrição para receber %{type} pelo Mastodon em %{domain} no seu e-mail em %{email}? Pode sempre subscrever novamente nas suas definições de notificação por e-mail.
+ emails:
+ notification_emails:
+ favourite: e-mails de notificação de favoritos
+ follow: e-mails de notificação de seguidor
+ follow_request: e-mails de pedido de seguidor
+ mention: e-mails de notificação de menção
+ reblog: notificações por e-mail de impulsos
+ resubscribe_html: Se tiver anulado a subscrição por engano, pode voltar a subscrevê-la nas definições de notificação por e-mail.
+ success_html: Não receberá novamente %{type} do Mastodon em %{domain} para o seu e-mail em %{email}.
title: Cancelar subscrição
media_attachments:
validations:
images_and_video: Não é possível anexar um vídeo a uma publicação que já contém imagens
+ not_found: Multimédia %{ids} não encontrada ou já anexada a outra publicação
not_ready: Não é possível anexar ficheiros que ainda não acabaram de ser processados. Tente outra vez daqui a pouco!
too_many: Não é possível anexar mais de 4 ficheiros
migrations:
@@ -1446,7 +1551,7 @@ pt-PT:
on_cooldown: Você está no período de espera
followers_count: Seguidores no momento da migração
incoming_migrations: A migrar de uma conta diferente
- incoming_migrations_html: Para migrar de outra conta para esta, primeiro você precisa criar um pseudónimo.
+ incoming_migrations_html: Para passar de outra conta para esta, primeiro é necessário criar um pseudónimo de conta.
moved_msg: A sua conta está agora a ser redirecionada para %{acct} e os seus seguidores estão a ser transferidos.
not_redirecting: A sua conta não está atualmente a ser redirecionada para nenhuma outra conta.
on_cooldown: Migrou recentemente a sua conta. Esta função ficará disponível novamente em %{count} dias.
@@ -1468,7 +1573,7 @@ pt-PT:
title: Moderação
move_handler:
carry_blocks_over_text: Este utilizador migrou de %{acct}, que você tinha bloqueado.
- carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha silenciado.
+ carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha ocultado.
copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as suas notas anteriores sobre ele:'
navigation:
toggle_menu: Alternar o menu
@@ -1479,11 +1584,11 @@ pt-PT:
sign_up:
subject: "%{name} inscreveu-se"
favourite:
- body: 'A sua publicação foi adicionada aos marcadores por %{name}:'
- subject: "%{name} adicionou a sua publicação aos marcadores"
- title: Novo marcador
+ body: 'A sua publicação foi adicionada aos favoritos por %{name}:'
+ subject: "%{name} adicionou a sua publicação aos favoritos"
+ title: Novo favorito
follow:
- body: "%{name} é teu seguidor!"
+ body: "%{name} é seu seguidor!"
subject: "%{name} começou a seguir-te"
title: Novo seguidor
follow_request:
@@ -1499,14 +1604,16 @@ pt-PT:
poll:
subject: A sondagem de %{name} encerrou
reblog:
- body: 'A sua publicação foi reforçada por %{name}:'
- subject: "%{name} reforçou a sua publicação"
- title: Novo reforço
+ body: 'A sua publicação foi impulsionada por %{name}:'
+ subject: "%{name} impulsionou a sua publicação"
+ title: Novo impulso
status:
subject: "%{name} acabou de publicar"
update:
subject: "%{name} editou uma publicação"
notifications:
+ administration_emails: Notificações por e-mail do administrador
+ email_events: Eventos para notificações por e-mail
email_events_hint: 'Selecione os casos para os quais deseja receber notificações:'
number:
human:
@@ -1520,7 +1627,7 @@ pt-PT:
trillion: T
otp_authentication:
code_hint: Introduz o código gerado pela tua aplicação de autenticação para confirmar
- description_html: Se ativar a autenticação em duas etapas, para entrar na sua conta terá de ter consigo o seu telefone, que vai gerar os tokens necessários à validação do seu acesso.
+ description_html: Se ativar a autenticação de dois fatores utilizando uma aplicação de autenticação, para iniciar sessão terá de estar na posse do seu telemóvel, que gerará tokens para introduzir.
enable: Ativar
instructions_html: "Digitalize este código QR no Google Authenticator ou numa aplicação TOTP semelhante a partir do seu telemóvel. A partir desse momento, essa aplicação irá gerar tokens que terá que inserir para aceder à sua conta."
manual_instructions: 'Se não conseguir digitalizar o código QR e precisar de o inserir manualmente, eis o código por extenso:'
@@ -1600,6 +1707,7 @@ pt-PT:
scheduled_statuses:
over_daily_limit: Excedeste o limite de %{limit} publicações agendadas para esse dia
over_total_limit: Tu excedeste o limite de %{limit} publicações agendadas
+ too_soon: a data tem de ser no futuro
self_destruct:
lead_html: Infelizmente, %{domain} vai fechar definitivamente. Se lá tinha conta, não pode continuar a usá-la, mas ainda pode pedir uma cópia dos seus dados.
title: Este servidor vai fechar
@@ -1653,23 +1761,25 @@ pt-PT:
account: Conta
account_settings: Definições da conta
aliases: Pseudónimos da conta
- appearance: Aspecto
+ appearance: Aparência
authorized_apps: Aplicações autorizadas
back: Voltar ao Mastodon
delete: Eliminação da conta
development: Desenvolvimento
edit_profile: Editar perfil
+ export: Exportar
featured_tags: Etiquetas destacadas
import: Importar
import_and_export: Importar e exportar
migrate: Migração de conta
+ notifications: Notificações por e-mail
preferences: Preferências
profile: Perfil
relationships: Seguindo e seguidores
- severed_relationships: Relações cessadas
+ severed_relationships: Relações cortadas
statuses_cleanup: Remoção automática da publicação
strikes: Punições de moderação
- two_factor_authentication: Autenticação em duas etapas
+ two_factor_authentication: Autenticação de dois fatores
webauthn_authentication: Chaves de segurança
severed_relationships:
download: Transferir (%{count})
@@ -1694,7 +1804,7 @@ pt-PT:
video:
one: "%{count} vídeo"
other: "%{count} vídeos"
- boosted_from_html: Reforçado por %{acct_link}
+ boosted_from_html: Impulsionado por %{acct_link}
content_warning: 'Aviso de conteúdo: %{warning}'
default_language: Igual ao idioma da interface
disallowed_hashtags:
@@ -1708,7 +1818,7 @@ pt-PT:
direct: Publicações visíveis apenas para utilizadores mencionados não podem ser afixadas
limit: Já afixaste a quantidade máxima de publicações
ownership: Não podem ser afixadas publicações doutras pessoas
- reblog: Não pode afixar um reforço
+ reblog: Não é possível fixar um impulso
title: '%{name}: "%{quote}"'
visibilities:
direct: Direto
@@ -1723,22 +1833,22 @@ pt-PT:
enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um certo limite de tempo, a não ser que correspondam a uma das seguintes excepções
exceptions: Exceções
explanation: Como apagar publicações é uma operação custosa, isto é feito lentamente ao longo do tempo, quando o servidor não está ocupado. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade definido.
- ignore_favs: Ignorar marcadores
- ignore_reblogs: Ignorar reforços
+ ignore_favs: Ignorar favoritos
+ ignore_reblogs: Ignorar os impulsos
interaction_exceptions: Exceções baseadas em interações
- interaction_exceptions_explanation: Note que não há garantia de que as publicações sejam excluídas se ficarem abaixo do limite de favoritos ou partilhas após as ter verificado uma vez.
+ interaction_exceptions_explanation: Tenha em atenção que não há garantia de que as mensagens sejam eliminadas se ficarem abaixo do limite de favoritos ou de impulsionamento depois de os terem ultrapassado.
keep_direct: Manter mensagens diretas
keep_direct_hint: Não apaga nenhuma das suas mensagens diretas
keep_media: Manter publicações com anexos de multimédia
- keep_media_hint: Não apaga nenhuma das suas publicações com multimédia anexada
+ keep_media_hint: Não elimina nenhuma das suas publicações com multimédia anexada
keep_pinned: Manter publicações afixadas
keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas
keep_polls: Manter sondagens
keep_polls_hint: Não apaga nenhuma das suas sondagens
keep_self_bookmark: Manter as publicações que marcou
keep_self_bookmark_hint: Não elimina as suas próprias publicações se as tiver nos marcadores
- keep_self_fav: Manter as publicações que marcou
- keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado
+ keep_self_fav: Manter as publicações que adicionou aos favoritos
+ keep_self_fav_hint: Não elimina as suas próprias publicações se as tiver adicionado aos favoritos
min_age:
'1209600': 2 semanas
'15778476': 6 meses
@@ -1749,10 +1859,10 @@ pt-PT:
'63113904': 2 anos
'7889238': 3 meses
min_age_label: Limite de idade
- min_favs: Manter pelo menos as publicações dos marcadores
- min_favs_hint: Não elimina nenhuma das suas publicações que tenha recebido pelo menos este número de favoritos. Deixe em branco para eliminar publicações, independentemente do seu número de favoritos
- min_reblogs: Manter as publicações reforçadas mais de
- min_reblogs_hint: Não apaga nenhuma das suas publicações que tenha sido partilhada mais do que este número de vezes. Deixe em branco para apagar as publicações, independentemente do número de partilhas
+ min_favs: Manter publicações adicionadas aos favoritos pelos menos
+ min_favs_hint: Não elimina nenhuma das suas publicações que tenha sido adicionada aos favoritos este número de vezes. Deixe em branco para eliminar publicações, independentemente do número de vezes que tenham sido adicionadas aos favoritos
+ min_reblogs: Manter as publicações impulsionadas, pelo menos
+ min_reblogs_hint: Não elimina nenhuma das suas mensagens que tenha sido impulsionada pelo menos este número de vezes. Deixe em branco para apagar as mensagens independentemente do número de impulsionamentos
stream_entries:
sensitive_content: Conteúdo problemático
strikes:
@@ -1760,10 +1870,12 @@ pt-PT:
too_late: É tarde demais para recorrer desta reprimenda
tags:
does_not_match_previous_name: não coincide com o nome anterior
+ terms_of_service:
+ title: Termos de Serviço
themes:
- contrast: Mastodon (Elevado contraste)
- default: Mastodon (Escuro)
- mastodon-light: Mastodon (Claro)
+ contrast: Mastodon (alto contraste)
+ default: Mastodon (escuro)
+ mastodon-light: Mastodon (claro)
system: Automático (usar tema do sistema)
time:
formats:
@@ -1778,16 +1890,16 @@ pt-PT:
two_factor_authentication:
add: Adicionar
disable: Desactivar autenticação por dois factores (2FA)
- disabled_success: Autenticação em duas etapas correctamente desactivada
+ disabled_success: Autenticação de dois fatores desativada com sucesso
edit: Editar
- enabled: A autenticação em duas etapas está ativada
- enabled_success: Autenticação em duas etapas correctamente activada
+ enabled: A autenticação de dois fatores está ativada
+ enabled_success: Autenticação de dois fatores ativada com sucesso
generate_recovery_codes: Gerar códigos para recuperar conta
lost_recovery_codes: Os códigos de recuperação permitem que recupere o acesso à sua conta caso perca o seu telemóvel. Se perder os códigos de recuperação, pode criar uns novos aqui. Os seus códigos antigos serão revogados.
- methods: Métodos de autenticação em duas etapas
+ methods: Métodos de autenticação de dois fatores
otp: Aplicação de autenticação
recovery_codes: Cópia de segurança dos códigos de recuperação
- recovery_codes_regenerated: Códigos de recuperação foram correctamente gerados
+ recovery_codes_regenerated: Os códigos de recuperação foram corretamente gerados
recovery_instructions_html: Se perder o seu telemóvel, poderá usar um dos códigos de recuperação para voltar a ter acesso à sua conta. Guarde os códigos de recuperação em lugar seguro. Por exemplo, pode imprimi-los e guardá-los junto doutros documentos importantes.
webauthn: Chaves de segurança
user_mailer:
@@ -1805,12 +1917,12 @@ pt-PT:
backup_ready:
explanation: Pediu uma cópia completa da sua conta Mastodon.
extra: Está pronta para transferir!
- subject: O seu arquivo está pronto para descarregar
+ subject: O seu arquivo está pronto para ser descarregado
title: Arquivo de ficheiros
failed_2fa:
details: 'Aqui estão os detalhes da tentativa de entrada:'
- explanation: Alguém tentou entrar em sua conta mas forneceu um segundo fator de autenticação inválido.
- further_actions_html: Se não foi você, recomendamos que %{action} imediatamente, pois pode ter sido comprometido.
+ explanation: Alguém tentou iniciar sessão na sua conta, mas forneceu um segundo fator de autenticação inválido.
+ further_actions_html: Se não foi você, recomendamos que %{action} imediatamente, pois pode a sua conta pode ter sido comprometida.
subject: Falha na autenticação do segundo fator
title: Falha na autenticação do segundo fator
suspicious_sign_in:
@@ -1820,6 +1932,15 @@ pt-PT:
further_actions_html: Se não foi você, recomendamos que %{action} imediatamente e ative a autenticação de dois fatores para manter a sua conta segura.
subject: A sua conta foi acedida a partir dum endereço IP novo
title: Um início de sessão novo
+ terms_of_service_changed:
+ agreement: Ao continuar a utilizar %{domain}, concorda com estes termos. Se discordar dos termos atualizados, poderá rescindir o seu acordo com %{domain} a qualquer momento, eliminando a sua conta.
+ changelog: 'Em resumo, eis o que esta atualização significa para si:'
+ description: 'Está a receber esta mensagem de correio eletrónico porque estamos a fazer algumas alterações aos nossos termos de serviço em %{domain}. Recomendamos que reveja os termos atualizados na íntegra aqui:'
+ description_html: Está a receber esta mensagem de correio eletrónico porque estamos a fazer algumas alterações aos nossos termos de serviço em %{domain}. Recomendamos que reveja os termos atualizados na íntegra aqui.
+ sign_off: A equipa de %{domain}
+ subject: Atualizações dos nossos termos de serviço
+ subtitle: Os termos de serviço de %{domain} estão a mudar
+ title: Atualização importante
warning:
appeal: Submeter um recurso
appeal_description: Se acha que isso é um erro, pode submeter um recurso para a equipa de %{instance}.
@@ -1827,10 +1948,10 @@ pt-PT:
spam: Spam
violation: O conteúdo infringe as seguintes diretrizes da comunidade
explanation:
- delete_statuses: Algumas das suas publicações foram consideradas como infractoras duma ou mais diretrizes da comunidade, e subsequentemente removidas pelos moderadores de %{instance}.
- disable: Já não pode utilizar a sua conta, mas o seu perfil e outros dados permanecem intactos. Pode solicitar uma cópia dos seus dados, alterar as definições da conta, ou que a sua conta seja apagada.
- mark_statuses_as_sensitive: Algumas das suas publicações foram marcadas como problemáticos pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicar, lembre-se que pode você próprio marcar os media como problemáticos.
- sensitive: A partir de agora, todos os ficheiros de media que carregue serão marcados como problemáticos e escondidos sob um aviso pedido para tocar para os ver.
+ delete_statuses: Algumas das suas mensagens foram consideradas como violando uma ou mais diretrizes da comunidade e foram subsequentemente removidas pelos moderadores do %{instance}.
+ disable: Já não pode utilizar a sua conta, mas o seu perfil e outros dados permanecem intactos. Pode solicitar uma cópia de segurança dos seus dados, alterar as definições da conta ou eliminar a sua conta.
+ mark_statuses_as_sensitive: Algumas das suas publicações foram marcadas como problemáticas pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar/clicar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicar, lembre-se que pode você próprio marcar os elementos multimédia como problemáticos.
+ sensitive: A partir de agora, todos os ficheiros multimédia que enviar serão marcados como problemáticos e escondidos sob um aviso pedido para tocar/clicar para os ver.
silence: Pode ainda utilizar a sua conta mas apenas as pessoas que já o seguem poderão ver as suas mensagens neste servidor, e poderá ser excluído de várias funcionalidades de divulgação. No entanto, outros poderão ainda segui-lo manualmente.
suspend: Não pode mais utilizar a sua conta, e o seu perfil e outros dados já não se encontram acessíveis. Poderá ainda iniciar sessão para solicitar uma cópia dos seus dados até os mesmos serem totalmente removidos em cerca de 30 dias, porém reteremos alguns dados básicos para o impedir evitar a suspensão.
reason: 'Motivo:'
@@ -1859,21 +1980,21 @@ pt-PT:
checklist_subtitle: 'Vamos começar nesta nova fronteira social:'
checklist_title: Checklist de Boas-vindas
edit_profile_action: Personalizar
- edit_profile_step: Aumente suas interações tendo um perfil completo.
+ edit_profile_step: Aumente as suas interações com um perfil completo.
edit_profile_title: Personalize seu perfil
explanation: Aqui estão algumas dicas para começar
feature_action: Mais informações
feature_audience: O Mastodon oferece-lhe uma possibilidade única de gerir a sua audiência sem intermediários. O Mastodon implantado na sua própria infraestrutura permite-lhe seguir e ser seguido a partir de qualquer outro servidor Mastodon online e não está sob o controlo de ninguém a não ser o seu.
feature_audience_title: Construa seu público em confiança
- feature_control: Você sabe melhor o que quer ver no seu feed. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica e torne o seu canto da Internet um pouco mais parecido consigo.
+ feature_control: Você sabe melhor o que quer ver na cronologia da sua página inicial. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica, e torne o seu canto da Internet um pouco mais parecido consigo.
feature_control_title: Mantenha o controlo da sua própria cronologia
feature_creativity: O Mastodon suporta publicações de áudio, vídeo e imagens, descrições de acessibilidade, sondagens, avisos de conteúdo, avatares animados, emojis personalizados, controlo de corte de miniaturas e muito mais, para o ajudar a expressar-se online. Quer esteja a publicar a sua arte, a sua música ou o seu podcast, o Mastodon está lá para si.
feature_creativity_title: Criatividade inigualável
- feature_moderation: Mastodon coloca a tomada de decisões de volta em suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível na resposta às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais você concorda ou hospede as suas próprias.
+ feature_moderation: O Mastodon coloca a tomada de decisões de volta nas suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o o mais flexível para responder às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais concorda ou aloje o seu próprio servidor.
feature_moderation_title: Moderando como deve ser
follow_action: Seguir
follow_step: Seguir pessoas interessantes é do que trata Mastodon.
- follow_title: Personalize seu feed residencial
+ follow_title: Personalize a cronologia na sua página inicial
follows_subtitle: Siga contas bem conhecidas
follows_title: Quem seguir
follows_view_more: Veja mais pessoas para seguir
@@ -1886,7 +2007,7 @@ pt-PT:
post_action: Compor
post_step: Diga olá para o mundo com texto, fotos, vídeos ou sondagens.
post_title: Faça a sua primeira publicação
- share_action: Compartilhar
+ share_action: Partilhar
share_step: Diga aos seus amigos como te encontrar no Mastodon.
share_title: Compartilhe seu perfil de Mastodon
sign_in_action: Iniciar sessão
@@ -1895,17 +2016,19 @@ pt-PT:
users:
follow_limit_reached: Não pode seguir mais do que %{limit} pessoas
go_to_sso_account_settings: Ir para as definições de conta do seu fornecedor de identidade
- invalid_otp_token: Código de autenticação inválido
+ invalid_otp_token: Código de dois fatores inválido
otp_lost_help_html: Se perdeu o acesso a ambos, pode entrar em contacto com %{email}
rate_limited: Demasiadas tentativas de autenticação, tente novamente mais tarde.
+ seamless_external_login: A sessão foi iniciada através de um serviço externo, pelo que as definições de palavra-passe e e-mail não estão disponíveis.
signed_in_as: 'Registado como:'
verification:
- extra_instructions_html: Dica: A ligação no seu site pode ser invisível. A parte importante é rel="me" que impede a personificação em sites com conteúdo gerado pelo utilizador. Pode até utilizar uma etiqueta link no cabeçalho da página ao invés de a, mas o HTML deve ser acessível sem executar JavaScript.
+ extra_instructions_html: Dica: a hiperligação no seu site pode ser invisível. A parte importante é rel="me" que impede a falsificação de identidade em sítios na web com conteúdos gerados pelos utilizadores. Pode até utilizar uma etiqueta link no cabeçalho da página ao invés de a, mas o HTML deve ser acessível sem executar JavaScript.
here_is_how: Veja como
- hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma ligação para esse site, vamos verificar que o site tem uma ligação de volta para o seu perfil e mostrar um indicador visual."
+ hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma hiperligação para esse site, vamos verificar que o site tem uma hiperligação de volta para o seu perfil e mostrar um indicador visual."
instructions_html: Copie e cole o código abaixo no HTML do seu site. Em seguida, adicione o endereço do seu site num dos campos extras no seu perfil, na aba "Editar perfil" e guarde as alterações.
verification: Verificação
verified_links: As suas ligações verificadas
+ website_verification: Verificação do sítio web
webauthn_credentials:
add: Adicionar nova chave de segurança
create:
@@ -1921,5 +2044,5 @@ pt-PT:
nickname_hint: Introduza a alcunha da sua nova chave de segurança
not_enabled: Ainda não ativou o WebAuthn
not_supported: Este navegador não funciona com chaves de segurança
- otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação em duas etapas.
+ otp_required: Para utilizar chaves de segurança, ative primeiro a autenticação de dois fatores.
registered_on: Registado em %{date}
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 486d87f003..ff35e13fa8 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -220,6 +220,7 @@ ru:
enable_user: Разморозка пользователей
memorialize_account: Присвоение пользователям статуса «мемориала»
promote_user: Повышение пользователей
+ publish_terms_of_service: Опубликование пользовательского соглашения
reject_appeal: Отклонение обжалований
reject_user: Отклонение регистраций
remove_avatar_user: Удаление аватаров
@@ -284,6 +285,7 @@ ru:
enable_user_html: "%{name} разморозил(а) пользователя %{target}"
memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника"
promote_user_html: "%{name} повысил(а) пользователя %{target}"
+ publish_terms_of_service_html: "%{name} опубликовал(а) обновление пользовательского соглашения"
reject_appeal_html: "%{name} отклонил(а) обжалование действий модерации от %{target}"
reject_user_html: "%{name} отклонил(а) регистрацию %{target}"
remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}"
@@ -953,6 +955,35 @@ ru:
search: Поиск
title: Хэштеги
updated_msg: Настройки хэштега обновлены
+ terms_of_service:
+ back: Назад к пользовательскому соглашению
+ changelog: Что изменилось
+ create: Использовать свой текст
+ current: Действующее
+ draft: Черновик
+ generate: Использовать шаблон
+ generates:
+ action: Генерировать
+ chance_to_review_html: "Сгенерированное пользовательское соглашение не будет опубликовано автоматически. У вас будет возможность просмотреть результат. Введите все необходимые сведения, чтобы продолжить."
+ title: Создание пользовательского соглашения
+ history: История
+ live: Действует
+ no_history: Нет зафиксированных изменений пользовательского соглашения.
+ notified_on_html: 'Дата уведомления пользователей: %{date}'
+ notify_users: Уведомить пользователей
+ preview:
+ explanation_html: 'Сообщение будет отравлено %{display_count} пользователям, которые зарегистрировались до %{date}. В теле письма будет указан следующий текст:'
+ send_preview: Отправить предпросмотр на %{email}
+ send_to_all:
+ few: Отправить %{display_count} сообщения
+ many: Отправить %{display_count} сообщений
+ one: Отправить %{display_count} сообщение
+ other: Отправить %{display_count} сообщений
+ title: Предпросмотр уведомления об изменении пользовательского соглашения
+ publish: Опубликовать
+ published_on_html: 'Дата публикации: %{date}'
+ save_draft: Сохранить черновик
+ title: Пользовательское соглашение
title: Администрирование
trends:
allow: Разрешить
@@ -1192,6 +1223,7 @@ ru:
set_new_password: Задать новый пароль
setup:
email_below_hint_html: Проверьте папку "Спам" или запросите другую. Вы можете исправить свой адрес электронной почты, если он неправильный.
+ email_settings_hint_html: Чтобы начать пользоваться Mastodon, пройдите по ссылке, которую мы отправили на %{email}. А мы пока подождём тут.
link_not_received: Не получили ссылку?
new_confirmation_instructions_sent: Через несколько минут вы получите новое письмо со ссылкой для подтверждения!
title: Проверьте свой почтовый ящик
@@ -1200,6 +1232,7 @@ ru:
title: Войти в %{domain}
sign_up:
manual_review: Регистрация на %{domain} проходит через ручную проверку нашими модераторами. Чтобы помочь нам обработать вашу регистрацию, напишите немного о себе и о том, почему вы хотите получить аккаунт на %{domain}.
+ preamble: С учётной записью на этом сервере Mastodon вы сможете подписываться на всех других людей в федиверсе вне зависимости от того, где находятся их учётные записи.
title: Зарегистрируйтесь в %{domain}.
status:
account_status: Статус учётной записи
@@ -1211,6 +1244,7 @@ ru:
view_strikes: Просмотр предыдущих замечаний в адрес вашей учетной записи
too_fast: Форма отправлена слишком быстро, попробуйте еще раз.
use_security_key: Использовать ключ безопасности
+ user_agreement_html: Мной прочитаны и принятыпользовательское соглашение и политика конфиденциальности
author_attribution:
example_title: Образец текста
hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon.
@@ -1920,6 +1954,8 @@ ru:
too_late: Слишком поздно обжаловать это замечание
tags:
does_not_match_previous_name: не совпадает с предыдущим именем
+ terms_of_service:
+ title: Пользовательское соглашение
themes:
contrast: Mastodon (высококонтрастная)
default: Mastodon (тёмная)
@@ -1980,6 +2016,15 @@ ru:
further_actions_html: Если это были не вы, рекомендуем вам немедленно %{action} и включить двухфакторную авторизацию, чтобы обезопасить свою учётную запись.
subject: В вашу учётную запись был выполнен вход с нового IP-адреса
title: Выполнен вход
+ terms_of_service_changed:
+ agreement: Продолжая использовать %{domain}, вы соглашаетесь с этими условиями. Если вы не согласны с новыми условиями, вы в любой момент можете удалить вашу учётную запись на %{domain}.
+ changelog: 'Вот что обновление условий будет значит для вас в общих чертах:'
+ description: 'Вы получили это сообщение, потому что мы внесли некоторые изменения в пользовательское соглашение %{domain}. Рекомендуем вам ознакомиться с обновлёнными условиями по ссылке:'
+ description_html: Вы получили это сообщение, потому что мы внесли некоторые изменения в пользовательское соглашение %{domain}. Рекомендуем вам ознакомиться с обновлёнными условиями.
+ sign_off: Ваш %{domain}
+ subject: Обновления наших условий использования
+ subtitle: На %{domain} изменилось пользовательское соглашение
+ title: Важное обновление
warning:
appeal: Обжаловать
appeal_description: Если вы считаете, что это ошибка, вы можете обратиться к поддержке %{instance}.
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index 1dfac9d043..7b56cbac46 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -134,6 +134,7 @@ es-AR:
changelog: Se puede estructurar con sintaxis Markdown.
text: Se puede estructurar con sintaxis Markdown.
terms_of_service_generator:
+ admin_email: Los avisos legales incluyen devoluciones, órdenes judiciales, solicitudes de retiro y solicitudes de cumplimiento de la ley.
arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico
arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico
dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública.
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 269fdb7091..77cd04cfd0 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -134,6 +134,7 @@ es:
changelog: Se puede estructurar con sintaxis Markdown.
text: Se puede estructurar con sintaxis Markdown.
terms_of_service_generator:
+ admin_email: Los avisos legales incluyen devoluciones, órdenes judiciales, solicitudes de retiro y solicitudes de cumplimiento de la ley.
arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico
arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico
dmca_address: Para operadores estadounidenses, utilice la dirección registrada en el DMCA Designated Agent Directory. Un listado P.O. Box está disponible bajo petición directa, use la DMCA Designated Agent Post Office Box Waiver Request para enviar un correo electrónico a la Oficina de Derechos de Autor y describir que usted es un moderador de contenido basado en el hogar que teme venganza o represalia por sus acciones y que necesita usar un P.O. Box para eliminar su dirección postal de la vista pública.
diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml
index 749efcb5b4..02b2942b5d 100644
--- a/config/locales/simple_form.ga.yml
+++ b/config/locales/simple_form.ga.yml
@@ -130,6 +130,17 @@ ga:
show_application: Beidh tú in ann a fheiceáil i gcónaí cén aip a d’fhoilsigh do phostáil beag beann ar.
tag:
name: Ní féidir leat ach cásáil na litreacha a athrú, mar shampla, chun é a dhéanamh níos inléite
+ terms_of_service:
+ changelog: Is féidir é a struchtúrú le comhréir Markdown.
+ text: Is féidir é a struchtúrú le comhréir Markdown.
+ terms_of_service_generator:
+ admin_email: Áirítear le fógraí dlí frithfhógraí, orduithe cúirte, iarratais éirí anuas, agus iarratais forghníomhaithe dlí.
+ arbitration_address: D’fhéadfadh sé a bheith mar an gcéanna leis an seoladh fisiceach thuas, nó “N/B” má tá ríomhphost in úsáid agat
+ arbitration_website: D’fhéadfadh gur foirm ghréasáin í, nó “N/A” má tá ríomhphost in úsáid agat
+ dmca_address: Maidir le hoibreoirí SAM, bain úsáid as an seoladh atá cláraithe in Eolaire Gníomhairí Ainmnithe DMCA. A P.O. Tá liostú boscaí ar fáil ach é a iarraidh go díreach, bain úsáid as Iarratas Tarscaoilte Bosca Gníomhaire Ainmnithe DMCA chun ríomhphost a chur chuig an Oifig Cóipchirt agus déan cur síos gur modhnóir ábhar baile thú a bhfuil eagla ort díoltas nó aisíocaíocht a fháil mar gheall ar do ghníomhartha agus a dteastaíonn uait úsáid a bhaint as P.O. Bosca chun do sheoladh baile a bhaint den radharc poiblí.
+ dmca_email: Is féidir gurb é an ríomhphost céanna é a úsáidtear le haghaidh “Seoladh ríomhphoist le haghaidh fógraí dlí” thuas
+ domain: Aitheantas uathúil na seirbhíse ar líne atá á cur ar fáil agat.
+ jurisdiction: Liostaigh an tír ina bhfuil cónaí ar an té a íocann na billí. Más cuideachta nó aonán eile é, liostaigh an tír ina bhfuil sé corpraithe, agus an chathair, an réigiún, an chríoch nó an stát mar is cuí.
user:
chosen_languages: Nuair a dhéantar iad a sheiceáil, ní thaispeánfar ach postálacha i dteangacha roghnaithe in amlínte poiblí
role: Rialaíonn an ról na ceadanna atá ag an úsáideoir.
@@ -319,6 +330,17 @@ ga:
name: Haischlib
trendable: Lig don haischlib seo a bheith le feiceáil faoi threochtaí
usable: Lig do phostálacha an hashchlib seo a úsáid go háitiúil
+ terms_of_service:
+ changelog: Cad atá athraithe?
+ text: Téarmaí Seirbhíse
+ terms_of_service_generator:
+ admin_email: Seoladh ríomhphoist le haghaidh fógraí dlí
+ arbitration_address: Seoladh fisiciúil le haghaidh fógraí eadrána
+ arbitration_website: An láithreán gréasáin chun fógraí eadrána a chur isteach
+ dmca_address: Seoladh fisiciúil le haghaidh fógraí DMCA/cóipchirt
+ dmca_email: Seoladh ríomhphoist le haghaidh fógraí DMCA/cóipchirt
+ domain: Fearann
+ jurisdiction: Dlínse dhlíthiúil
user:
role: Ról
time_zone: Crios ama
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 113f55a2ba..585e84f490 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -60,6 +60,7 @@ ia:
setting_display_media_default: Celar le medios marcate como sensibile
setting_display_media_hide_all: Sempre celar le medios
setting_display_media_show_all: Sempre monstrar le medios
+ setting_system_scrollbars_ui: Se applica solmente al navigatores de scriptorio basate sur Safari e Chrome
setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios
setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo
username: Tu pote usar litteras, numeros e tractos de sublineamento
@@ -129,6 +130,17 @@ ia:
show_application: In omne caso, tu potera sempre vider qual app ha publicate tu message.
tag:
name: Tu pote solmente cambiar le litteras inter majusculas e minusculas, per exemplo, pro render lo plus legibile
+ terms_of_service:
+ changelog: Pote esser structurate con le syntaxe Markdown.
+ text: Pote esser structurate con le syntaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Le avisos juridic include le contra-avisos, ordinantias judiciari, demandas de retiro e demandas de application del lege.
+ arbitration_address: Pote esser le mesme que le adresse physic supra, o “N/A” si se usa e-mail
+ arbitration_website: Pote esser un formulario web, o “N/A” si se usa e-mail
+ dmca_address: Pro operatores in le SUA, usa le adresse registrate in le Directorio de Agentes Designate pro le DMCA (DMCA Designated Agent Directory). Un adresse de cassa postal es disponibile per requesta directe; usa le Requesta de Exemption de Cassa Postal pro Agentes Designate del DMCA (DMCA Designated Agent Post Office Box Waiver Request) pro inviar un message electronic al Officio del Derecto de Autor (Copyright Office) e describer que tu es un moderator de contento que travalia de casa e qui time vengiantias o represalias pro tu actiones, necessitante le uso un cassa postal pro remover tu adresse personal del vista public.
+ dmca_email: Pote esser le mesme adresse de e-mail usate pro “Adresse de e-mail pro avisos juridic” supra
+ domain: Identification unic del servicio in linea que tu forni.
+ jurisdiction: Vermeldt het land waar de persoon woont die de rekeningen betaalt. Als het een bedrijf of een andere entiteit is, vermeldt het land waar het is opgenomen en de stad, regio, grondgebied of staat, voor zover van toepassing.
user:
chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public
role: Le rolo controla qual permissos le usator ha.
@@ -223,6 +235,7 @@ ia:
setting_hide_network: Cela tu rete social
setting_reduce_motion: Reducer movimento in animationes
setting_system_font_ui: Usar typo de litteras predefinite del systema
+ setting_system_scrollbars_ui: Usar le barra de rolamento predefinite del systema
setting_theme: Thema de sito
setting_trends: Monstrar le tendentias de hodie
setting_unfollow_modal: Monstrar dialogo de confirmation ante cessar de sequer alcuno
@@ -317,6 +330,17 @@ ia:
name: Hashtag
trendable: Permitter a iste hashtag de sub tendentias
usable: Permitter al messages usar iste hashtag localmente
+ terms_of_service:
+ changelog: Que ha cambiate?
+ text: Conditiones de servicio
+ terms_of_service_generator:
+ admin_email: Adresse de e-mail pro avisos juridic
+ arbitration_address: Adresse physic pro avisos de arbitration
+ arbitration_website: Sito web pro submitter avisos de arbitration
+ dmca_address: Adresse physic pro avisos DCMA/de derectos de autor
+ dmca_email: Adresse de e-mail pro avisos DCMA/de derectos de autor
+ domain: Dominio
+ jurisdiction: Jurisdiction
user:
role: Rolo
time_zone: Fuso horari
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index 2f113087e9..1348fa4e9f 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -130,6 +130,17 @@ is:
show_application: Þú munt alltaf geta séð hvaða forrit birti færsluna þína.
tag:
name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra
+ terms_of_service:
+ changelog: Er hægt að sníða með Markdown-málskipan.
+ text: Er hægt að sníða með Markdown-málskipan.
+ terms_of_service_generator:
+ admin_email: Löglegar tilkynningar ná yfir andsvör, dómsúrskurði, lokunarbeiðnir og beiðnir frá lögregluembættum.
+ arbitration_address: Má vera það sama og raunverulegt heimilisfang eða “N/A” ef tölvupóstur er notaður
+ arbitration_website: Má vera innfyllingarform á vefsíðu eða “N/A” ef tölvupóstur er notaður
+ dmca_address: Fyrir rekstraraðila í BNA ætti að nota heimilisfang sem skráð er í DMCA Designated Agent Directory. Hægt er að verða sér úti um A P.O. pósthólfsskráningu með beinni beiðni; notaðu DMCA Designated Agent Post Office Box Waiver Request til að senda tölvupóst á Copyright Office og lýstu því yfir að þú sért heimavinnandi efnismiðlari (home-based content moderator) sem átt á hættu refsingar eða hefndir vegna þess sem þú miðlar og þurfir því á slíku pósthólfi að halda svo þitt eigið heimilisfang sé ekki gert opinbert.
+ dmca_email: Má vera sama tölvupóstfang og það sem notað er í “Tölvupóstfang vegna löglegra tilkynninga” hér að ofan
+ domain: Einstakt auðkenni á netþjónustunni sem þú býður.
+ jurisdiction: Settu inn landið þar sem sá býr sem borgar reikningana. Ef það er fyrirtæki eða samtök, skaltu hafa það landið þar sem lögheimili þess er, auk borgar, héraðs, svæðis eða fylkis eins og við á.
user:
chosen_languages: Þegar merkt er við þetta, birtast einungis færslur á völdum tungumálum á opinberum tímalínum
role: Hlutverk stýrir hvaða heimildir notandinn hefur.
@@ -323,8 +334,11 @@ is:
changelog: Hvað breyttist?
text: Þjónustuskilmálar
terms_of_service_generator:
- admin_email: Tölvupóstfang vegna löglegra fyrirvara
- dmca_email: Tölvupóstfang tylfynninga vegna DMCA/höfundarétt
+ admin_email: Tölvupóstfang vegna löglegra tilkynninga
+ arbitration_address: Raunverulegt heimilisfang fyrir tilkynningar um úrskurði
+ arbitration_website: Vefsvæði til að senda inn tilkynningar um úrskurði
+ dmca_address: Raunverulegt heimilisfang fyrir kröfur vegna DMCA/höfundarréttar
+ dmca_email: Tölvupóstfang tilkynninga vegna DMCA/höfundaréttar
domain: Lén
jurisdiction: Lögsagnarumdæmi
user:
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index e5ffd4b38e..515c01256b 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -84,6 +84,7 @@ ja:
setting_show_application: 投稿するのに使用したアプリが投稿の詳細ビューに表示されるようになります
setting_stay_privacy: この設定を有効にする場合、ブーストの公開範囲を手動で設定されることもご検討ください
setting_stop_emoji_reaction_streaming: 通信容量の節約に役立ちます
+ setting_system_scrollbars_ui: Safari/Chromeベースのデスクトップブラウザーでのみ有効です
setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています
setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします
username: アルファベット大文字と小文字、数字、アンダーバー「_」が使えます
@@ -164,6 +165,17 @@ ja:
show_application: 自分で自分の投稿の送信元アプリを確認することは、ここのチェック状態にかかわらず可能です。
tag:
name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます
+ terms_of_service:
+ changelog: Markdown 記法を利用できます。
+ text: Markdown 記法を利用できます。
+ terms_of_service_generator:
+ admin_email: 法的通知とは、異議申し立て通知、裁判所命令、削除要請、法執行機関による要請などをいいます。
+ arbitration_address: 上記住所と同じでもかまいません。電子メールを使用する場合は「N/A」とすることができます。
+ arbitration_website: ウェブフォームでもかまいません。電子メールを使用する場合は「N/A」とすることができます。
+ dmca_address: 米国の運営者の場合は、DMCA Designated Agent Directory(DMCA指定代理人ディレクトリ)に登録のある住所を使用してください。申請を行えば記載を私書箱とすることも可能で、その場合はDMCA Designated Agent Post Office Box Waiver Request(DMCA指定代理人の郵便私書箱による免除申請)によって著作権局にメールを送信し、あなたが個人のコンテンツ管理者であって、行った措置に対して報復を受けるおそれがあり、住所を非公開とするために私書箱を使用する必要がある旨を伝えてください。
+ dmca_email: 上記「法的通知を受け取るメールアドレス」と同じものでもかまいません。
+ domain: あなたの提供するこのオンラインサービスの識別名です。
+ jurisdiction: 運営責任者が居住する国を記載します。企業や他の団体である場合は、その組織の所在国に加えて、市・区・州などの地域を記載します。
user:
chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります
role: そのロールは、ユーザーが持つ権限を制御します。
@@ -324,6 +336,7 @@ ja:
setting_stay_privacy: 投稿時に公開範囲を保存する
setting_stop_emoji_reaction_streaming: 絵文字リアクションのストリーミングを停止する
setting_system_font_ui: システムのデフォルトフォントを使う
+ setting_system_scrollbars_ui: システムのデフォルトのスクロールバーを使う
setting_theme: サイトテーマ
setting_translatable_private: 非公開投稿の翻訳を許可する
setting_trends: 本日のトレンドタグを表示する
@@ -460,6 +473,17 @@ ja:
name: ハッシュタグ
trendable: トレンドへの表示を許可する
usable: このサーバーのユーザーがタグをつけて投稿することを許可する
+ terms_of_service:
+ changelog: 変更箇所
+ text: サービス利用規約
+ terms_of_service_generator:
+ admin_email: 法的通知を受け取るメールアドレス
+ arbitration_address: 仲裁通知の送付先住所
+ arbitration_website: 仲裁通知の送信用ウェブサイト
+ dmca_address: DMCA/著作権通知の送付先住所
+ dmca_email: DMCA/著作権通知の送付先メールアドレス
+ domain: ドメイン
+ jurisdiction: 裁判管轄
user:
role: ロール
time_zone: タイムゾーン
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index d272ebef0d..d5aa5855ec 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -131,16 +131,16 @@ nl:
tag:
name: Je kunt elk woord met een hoofdletter beginnen, om zo bijvoorbeeld de tekst leesbaarder te maken
terms_of_service:
- changelog: Kan worden gestructureerd met Markdown-syntaxis.
- text: Kan worden gestructureerd met Markdown-syntaxis.
+ changelog: Kan worden opgemaakt met Markdown.
+ text: Kan worden opgemaakt met Markdown.
terms_of_service_generator:
- admin_email: Juridische mededelingen zijn o.a. tegenaantekeningen, rechterlijke bevelen, verwijderingsverzoeken en verzoeken om wetshandhaving.
- arbitration_address: Kan hetzelfde zijn als bovenstaande straatadres of "N/A" bij gebruik van e-mail
+ admin_email: Juridische mededelingen zijn o. a. counter-notices, gerechterlijke bevelen, takedown-requests en handhavingsverzoeken.
+ arbitration_address: Kan hetzelfde zijn als bovenstaand vestigingsadres of "N/A" bij gebruik van e-mail
arbitration_website: Kan een webformulier zijn, of "N/A" als e-mail wordt gebruikt
- dmca_address: 'Gebruik voor beheerders in de VS: het adres dat is geregistreerd in de DMCA Designated Agent Directory. Op verzoek is er een postbuslijst beschikbaar. Gebruik het DMCA Designated Agent Post Office Box Waiver Request om het Copyright Office te e-mailen en te beschrijven dat u een thuisgebaseerde inhoudsmoderator bent die wraak of vergelding vreest voor uw daden en een postbus moet gebruiken om uw huisadres uit het publieke domein te houden.'
- dmca_email: Kan dezelfde e-mail worden gebruikt voor "E-mailadres voor juridische berichten" hierboven
- domain: Een unieke identificatie van de online dienst die wordt verleend.
- jurisdiction: Vermeldt het land waar de persoon woont die de rekeningen betaalt. Als het een bedrijf of een andere entiteit is, vermeldt het land waar het is opgenomen en de stad, regio, grondgebied of staat, voor zover van toepassing.
+ dmca_address: 'Gebruik voor beheerders in de VS: het adres dat is geregistreerd in de DMCA Designated Agent Directory. Op verzoek is er een postbuslijst beschikbaar. Gebruik het DMCA Designated Agent Post Office Box Waiver Request om het Copyright Office te e-mailen en te beschrijven dat je een vanaf huis opererende inhoudsmoderator bent, die wraak of vergelding vreest voor je moderator-acties en daarom een postbus moet gebruiken om jouw huisadres uit het publieke domein te houden.'
+ dmca_email: Kan hetzelfde e-mailadres zijn dat gebruikt wordt voor "E-mailadres voor juridische berichten" hierboven
+ domain: Een unieke identificatie van de online dienst die je levert.
+ jurisdiction: Vermeld het land waar de persoon woont die de rekeningen betaalt. Is het een bedrijf of iets dergelijks, vermeld dan het land waar het ingeschreven staat en de stad, de regio, het grondgebied of de staat, voor zover van toepassing.
user:
chosen_languages: Alleen berichten in de aangevinkte talen worden op de openbare tijdlijnen getoond
role: De rol bepaalt welke rechten de gebruiker heeft.
@@ -156,7 +156,7 @@ nl:
url: Waar gebeurtenissen naartoe worden verzonden
labels:
account:
- attribution_domains_as_text: Websites doe jou credit mogen geven
+ attribution_domains_as_text: Websites die jou credit mogen geven
discoverable: Jouw account en berichten laten uitlichten door Mastodon
fields:
name: Label
@@ -335,12 +335,12 @@ nl:
text: Gebruiksvoorwaarden
terms_of_service_generator:
admin_email: E-mailadres voor juridische meldingen
- arbitration_address: Straatadres voor arbitragemeldingen
- arbitration_website: Website voor het indienen van arbitragemeldingen
- dmca_address: Straatadres voor DMCA/auteursrecht-mededelingen
+ arbitration_address: Vestigingsadres voor arbitrage-mededelingen
+ arbitration_website: Website voor het indienen van arbitrage-mededelingen
+ dmca_address: Vestigingsadres voor DMCA/auteursrecht-mededelingen
dmca_email: E-mailadres voor DMCA/auteursrecht-mededelingen
domain: Domein
- jurisdiction: Rechtsgebied
+ jurisdiction: Jurisdictie
user:
role: Rol
time_zone: Tijdzone
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 917b85a0bb..417d69d88e 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -130,6 +130,8 @@ pt-BR:
show_application: Você sempre conseguirá ver qual aplicativo realizou sua publicação independentemente disso.
tag:
name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível
+ terms_of_service_generator:
+ dmca_email: Pode ser o mesmo e-mail utilizado para "Endereço de e-mail para avisos legais" acima
user:
chosen_languages: Apenas as publicações dos idiomas selecionados serão exibidas nas linhas públicas
role: A função controla quais permissões o usuário tem.
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index a172ed2752..59ebceb718 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -3,18 +3,20 @@ pt-PT:
simple_form:
hints:
account:
+ attribution_domains_as_text: Um por linha. Protege contra falsas atribuições.
discoverable: As suas publicações e perfil públicos podem ser destacados ou recomendados em várias áreas do Mastodon e o seu perfil pode ser sugerido a outros utilizadores.
display_name: O seu nome completo ou o seu nome divertido.
fields: A sua página inicial, os seus pronomes, idade e tudo o que quiser.
indexable: As suas mensagens públicas podem aparecer nos resultados da pesquisa no Mastodon. Independentemente disso, as pessoas que interagiram com as suas publicações podem ser capazes de as pesquisar.
- note: 'Pode @mencionar outras pessoas ou #hashtags.'
+ note: 'Pode @mencionar outras pessoas e usar #etiquetas.'
show_collections: As pessoas podem navegar pelas listas das pessoas que segue e dos seus seguidores. Independentemente disso, as pessoas que segue verão que você as segue.
+ unlocked: As pessoas poderão segui-lo sem pedir aprovação. Desmarque se pretender rever os pedidos de seguimento e escolha se pretende aceitar ou rejeitar novos seguidores.
account_alias:
acct: Especifique o utilizador@domínio da conta de onde você deseja migrar
account_migration:
acct: Especifique o utilizador@domínio da conta para onde você deseja migrar
account_warning_preset:
- text: Pode usar sintaxe de escrita, como URL, etiquetas, e referências
+ text: Pode usar sintaxe de publicações, como URL, etiquetas e referências
title: Opcional. Invisível para o destinatário
admin_account_action:
include_statuses: O utilizador verá quais as publicações que foram a razão da moderação ou advertência
@@ -24,7 +26,7 @@ pt-PT:
types:
disable: Impede o utilizador de usar a sua conta, mas não elimina ou oculta o seu conteúdo.
none: Use isto para enviar um aviso ao utilizador, sem espoletar nenhuma outra ação.
- sensitive: Força todos os anexos de media deste utilizador a serem sinalizados como problemáticos.
+ sensitive: Forçar todos os anexos multimédia deste utilizador a serem assinalados como sensíveis.
silence: Impede que o utilizador possa publicar com visibilidade pública, ocultando as suas publicações e notificações de pessoas que não o seguem. Encerra todas as denúncias contra esta conta.
suspend: Evita qualquer interação de ou para esta conta e elimina o seu conteúdo. Reversível num período de 30 dias. Encerra todas as denúncias contra esta conta.
warning_preset_id: Opcional. Tu ainda podes adicionar texto personalizado no fim do predefinido
@@ -52,14 +54,15 @@ pt-PT:
password: Use pelo menos 8 caracteres
phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação
scopes: Quais as API a que a aplicação terá permissão para aceder. Se selecionar um âmbito de nível superior, não precisa de selecionar âmbitos individuais.
- setting_aggregate_reblogs: Não mostrar novos reforços de publicações recentemente reforçadas (só afecta publicações acabadas de reforçar)
+ setting_aggregate_reblogs: Não mostrar os novos impulsos para publicações que tenham sido recentemente impulsionadas (apenas afeta os impulsos recentemente recebidos)
setting_always_send_emails: Normalmente as notificações por e-mail não serão enviadas quando estiver a utilizar ativamente o Mastodon
- setting_default_sensitive: Media problemática oculta por padrão, pode ser revelada com um clique
- setting_display_media_default: Esconder media marcada como problemática
- setting_display_media_hide_all: Esconder sempre toda a media
- setting_display_media_show_all: Mostrar sempre a media
+ setting_default_sensitive: Os multimédia sensíveis são ocultados por predefinição e podem ser revelados com um clique/toque
+ setting_display_media_default: Esconder multimédia marcada como problemática
+ setting_display_media_hide_all: Esconder sempre toda a multimédia
+ setting_display_media_show_all: Mostrar sempre a multimédia
+ setting_system_scrollbars_ui: Aplica-se apenas a navegadores de desktop baseados no Safari e Chrome
setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer pormenores
- setting_use_pending_items: Ocultar atualizações da cronologia por detrás dum clique, em vez de rolar automaticamente o fluxo
+ setting_use_pending_items: Ocultar as atualizações da cronologia após um clique em vez de percorrer automaticamente a cronologia
username: Pode utilizar letras, números e sublinhados
whole_word: Quando a palavra-chave ou expressão-chave é somente alfanumérica, ela só será aplicada se corresponder à palavra completa
domain_allow:
@@ -77,10 +80,10 @@ pt-PT:
form_admin_settings:
activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos
app_icon: WEBP, PNG, GIF ou JPG. Substitui o ícone padrão da aplicação em dispositivos móveis por um ícone personalizado.
- backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
+ backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas publicações para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
- content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado ou favoritado. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
+ content_cache_retention_period: Todas as mensagens de outros servidores (incluindo impulsos e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas mensagens. Isto inclui mensagens em que um utilizador local as tenha marcado ou adicionado aos favoritos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral.
custom_css: Pode aplicar estilos personalizados na versão web do Mastodon.
favicon: WEBP, PNG, GIF ou JPG. Substitui o ícone de favorito padrão do Mastodon por um ícone personalizado.
mascot: Sobrepõe-se à ilustração na interface web avançada.
@@ -120,13 +123,24 @@ pt-PT:
hint: Opcional. Forneça mais detalhes sobre a regra
text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples
sessions:
- otp: 'Insira o código de autenticação em duas etapas gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:'
+ otp: 'Insira o código de autenticação de dois fatores gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:'
webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela.
settings:
indexable: A sua página de perfil pode aparecer nos resultados de pesquisa no Google, Bing e outros.
show_application: Independentemente disso será sempre capaz de ver em que aplicação publicou a sua mensagem.
tag:
name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis
+ terms_of_service:
+ changelog: Pode ser estruturado com sintaxe Markdown.
+ text: Pode ser estruturado com sintaxe Markdown.
+ terms_of_service_generator:
+ admin_email: Os avisos legais incluem contra-avisos, ordens judiciais, pedidos de remoção e pedidos de aplicação da lei.
+ arbitration_address: Pode ser o mesmo que o endereço físico acima ou “N/A” se utilizar e-mail
+ arbitration_website: Pode ser um formulário web ou “N/A” se for utilizado o e-mail
+ dmca_address: Para operadores dos EUA, utilize o endereço registado no Diretório de Agentes Designados DMCA. A listagem de uma caixa postal está disponível mediante pedido direto. Utilize o DMCA Designated Agent Post Office Box Waiver Request para enviar uma mensagem de correio eletrónico ao Copyright Office e descreva que é um moderador de conteúdos baseado em casa que receia vingança ou represálias pelas suas acções e que necessita de utilizar uma caixa postal para retirar o seu endereço de casa da vista do público.
+ dmca_email: Pode ser o mesmo e-mail utilizado para “Endereço de e-mail para avisos legais” acima
+ domain: Identificação única do serviço online que está a prestar.
+ jurisdiction: Indique o país de residência de quem paga as contas. Se se tratar de uma empresa ou outra entidade, indique o país onde está constituída, bem como a cidade, região, território ou estado, consoante o caso.
user:
chosen_languages: Quando selecionado, só serão mostradas nas cronologias públicas as publicações nos idiomas escolhidos
role: A função controla as permissões que o utilizador tem.
@@ -142,6 +156,7 @@ pt-PT:
url: Para onde os eventos serão enviados
labels:
account:
+ attribution_domains_as_text: Sites autorizados a atribuir-lhe crédito
discoverable: Destacar perfil e publicações nos algoritmos de descoberta
fields:
name: Rótulo
@@ -177,7 +192,7 @@ pt-PT:
appeal:
text: Explique porque esta decisão deve ser revertida
defaults:
- autofollow: Convidar para seguir a tua conta
+ autofollow: Convidar para seguir a sua conta
avatar: Imagem de perfil
bot: Esta é uma conta robô
chosen_languages: Filtrar idiomas
@@ -198,32 +213,33 @@ pt-PT:
max_uses: Número máximo de utilizações
new_password: Nova palavra-passe
note: Biografia
- otp_attempt: Código de autenticação em duas etapas
+ otp_attempt: Código de autenticação de dois fatores
password: Palavra-passe
phrase: Palavra-chave ou frase
setting_advanced_layout: Ativar interface web avançada
- setting_aggregate_reblogs: Agrupar reforços em cronologias
- setting_always_send_emails: Enviar sempre notificações de email
+ setting_aggregate_reblogs: Agrupar impulsos em linhas de tempo
+ setting_always_send_emails: Enviar sempre notificações por e-mail
setting_auto_play_gif: Reproduzir GIF automaticamente
- setting_boost_modal: Solicitar confirmação antes de partilhar uma publicação
+ setting_boost_modal: Mostrar caixa de diálogo de confirmação antes de impulsionar
setting_default_language: Idioma de publicação
setting_default_privacy: Privacidade da publicação
- setting_default_sensitive: Marcar sempre os media como problemáticos
+ setting_default_sensitive: Marcar sempre os multimédia como problemáticos
setting_delete_modal: Solicitar confirmação antes de eliminar uma publicação
setting_disable_hover_cards: Desativar visualização de perfil ao passar o cursor
setting_disable_swiping: Desativar os movimentos de deslize
- setting_display_media: Visualização de media
+ setting_display_media: Visualização de multimédia
setting_display_media_default: Pré-definição
setting_display_media_hide_all: Esconder todos
setting_display_media_show_all: Mostrar todos
setting_expand_spoilers: Expandir sempre as publicações marcadas com avisos de conteúdo
setting_hide_network: Esconder a tua rede
- setting_reduce_motion: Reduz movimento em animações
+ setting_reduce_motion: Reduzir movimento em animações
setting_system_font_ui: Usar o tipo de letra padrão do sistema
+ setting_system_scrollbars_ui: Utilizar a barra de deslocação predefinida do sistema
setting_theme: Tema do sítio
setting_trends: Mostrar as tendências de hoje
setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém
- setting_use_blurhash: Mostrar gradientes coloridos para medias ocultas
+ setting_use_blurhash: Mostrar gradientes coloridos para multimédias ocultas
setting_use_pending_items: Modo lento
severity: Gravidade
sign_in_token_attempt: Código de segurança
@@ -250,7 +266,7 @@ pt-PT:
custom_css: CSS personalizado
favicon: Ícone de favoritos
mascot: Mascote personalizada (legado)
- media_cache_retention_period: Período de retenção de ficheiros de media em cache
+ media_cache_retention_period: Período de retenção de ficheiros multimédia em cache
peers_api_enabled: Publicar lista de servidores descobertos na API
profile_directory: Ativar o diretório de perfis
registrations_mode: Quem se pode inscrever
@@ -289,12 +305,12 @@ pt-PT:
notification_emails:
appeal: Alguém recorreu de uma decisão de moderação
digest: Enviar e-mails de resumo
- favourite: Alguém adicionou uma publicação sua aos marcadores
+ favourite: Quando alguém adiciona uma publicação sua aos favoritos
follow: Alguém começou a segui-lo
follow_request: Alguém pediu para ser seu seguidor
mention: Alguém o mencionou
pending_account: Uma nova conta aguarda aprovação
- reblog: Alguém reforçou uma publicação sua
+ reblog: Alguém impulsionou uma publicação sua
report: Uma nova denúncia foi submetida
software_updates:
all: Notificar todas as atualizações
@@ -313,7 +329,18 @@ pt-PT:
listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis
name: Etiqueta
trendable: Permitir que esta etiqueta apareça nas tendências
- usable: Permitir que as publicações usem esta hashtag localmente
+ usable: Permitir que as publicações usem esta etiqueta localmente
+ terms_of_service:
+ changelog: O que mudou?
+ text: Termos do serviço
+ terms_of_service_generator:
+ admin_email: Endereço de e-mail para avisos legais
+ arbitration_address: Endereço físico para avisos de arbitragem
+ arbitration_website: Website para enviar avisos de arbitragem
+ dmca_address: Endereço físico para avisos DMCA / direitos autorais
+ dmca_email: Endereço de e-mail para avisos DMCA/direitos autorais
+ domain: Domínio
+ jurisdiction: Jurisdição legal
user:
role: Função
time_zone: Fuso horário
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index ae142826f4..22c7a25658 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -130,6 +130,14 @@ ru:
show_application: Вы всегда сможете увидеть, какое приложение опубликовало ваше сообщение.
tag:
name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым
+ terms_of_service:
+ changelog: Можно использовать синтаксис языка разметки Markdown.
+ text: Можно использовать синтаксис языка разметки Markdown.
+ terms_of_service_generator:
+ admin_email: Юридические уведомления включают в себя встречные уведомления, постановления суда, запросы на удаление и запросы правоохранительных органов.
+ arbitration_address: Может совпадать с почтовым адресом, указанным выше, либо «N/A» в случае электронной почты
+ arbitration_website: Веб-форма или «N/A» в случае электронной почты
+ jurisdiction: Впишите страну, где находится лицо, оплачивающее счета. Если это компания либо организация, впишите страну инкорпорации, включая город, регион, территорию или штат, если это необходимо.
user:
chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках.
role: Роль определяет, какими правами обладает пользователь.
@@ -319,6 +327,17 @@ ru:
name: Хэштег
trendable: Разрешить показ хэштега в трендах
usable: Позволить этот хэштег в локальных сообщениях
+ terms_of_service:
+ changelog: Что изменилось?
+ text: Пользовательское соглашение
+ terms_of_service_generator:
+ admin_email: Адрес электронной почты для юридических уведомлений
+ arbitration_address: Почтовый адрес для уведомлений об арбитраже
+ arbitration_website: Вебсайт для подачи уведомления об арбитраже
+ dmca_address: Почтовый адрес для обращений правообладателей
+ dmca_email: Адрес электронной почты для обращений правообладателей
+ domain: Доменное имя
+ jurisdiction: Юрисдикция
user:
role: Роль
time_zone: Часовой пояс
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index f8f4d3f119..f644294092 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -223,6 +223,7 @@ th:
setting_hide_network: ซ่อนกราฟทางสังคมของคุณ
setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว
setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ
+ setting_system_scrollbars_ui: ใช้แถบเลื่อนเริ่มต้นของระบบ
setting_theme: ชุดรูปแบบไซต์
setting_trends: แสดงแนวโน้มของวันนี้
setting_unfollow_modal: แสดงกล่องโต้ตอบการยืนยันก่อนเลิกติดตามใครสักคน
@@ -317,6 +318,10 @@ th:
name: แฮชแท็ก
trendable: อนุญาตให้แฮชแท็กนี้ปรากฏภายใต้แนวโน้ม
usable: อนุญาตให้โพสต์ใช้แฮชแท็กนี้ในเซิร์ฟเวอร์
+ terms_of_service:
+ text: เงื่อนไขการให้บริการ
+ terms_of_service_generator:
+ domain: โดเมน
user:
role: บทบาท
time_zone: โซนเวลา
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 0eee797fec..aa2de7de32 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -925,6 +925,10 @@ sv:
search: Sök
title: Hashtaggar
updated_msg: Hashtagg-inställningarna har uppdaterats
+ terms_of_service:
+ draft: Utkast
+ publish: Publicera
+ title: Användarvillkor
title: Administration
trends:
allow: Tillåt
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 4f0a6e98bd..b945ee8650 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -211,6 +211,7 @@ th:
enable_user: เปิดใช้งานผู้ใช้
memorialize_account: ทำให้บัญชีเป็นอนุสรณ์
promote_user: เลื่อนขั้นผู้ใช้
+ publish_terms_of_service: เผยแพร่เงื่อนไขการให้บริการ
reject_appeal: ปฏิเสธการอุทธรณ์
reject_user: ปฏิเสธผู้ใช้
remove_avatar_user: เอาภาพประจำตัวออก
@@ -911,6 +912,25 @@ th:
search: ค้นหา
title: แฮชแท็ก
updated_msg: อัปเดตการตั้งค่าแฮชแท็กสำเร็จ
+ terms_of_service:
+ back: กลับไปที่เงื่อนไขการให้บริการ
+ create: ใช้ของคุณเอง
+ current: ปัจจุบัน
+ draft: แบบร่าง
+ generate: ใช้แม่แบบ
+ generates:
+ action: สร้าง
+ history: ประวัติ
+ live: สด
+ notify_users: แจ้งเตือนผู้ใช้
+ preview:
+ send_preview: ส่งตัวอย่างไปยัง %{email}
+ send_to_all:
+ other: ส่ง %{display_count} อีเมล
+ publish: เผยแพร่
+ published_on_html: เผยแพร่เมื่อ %{date}
+ save_draft: บันทึกแบบร่าง
+ title: เงื่อนไขการให้บริการ
title: การดูแล
trends:
allow: อนุญาต
@@ -1635,6 +1655,7 @@ th:
scheduled_statuses:
over_daily_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit} สำหรับวันนี้แล้ว
over_total_limit: คุณมีโพสต์ที่จัดกำหนดการไว้เกินขีดจำกัดที่ %{limit} แล้ว
+ too_soon: วันที่ต้องอยู่ในอนาคต
self_destruct:
lead_html: น่าเสียดาย %{domain} กำลังปิดตัวลงอย่างถาวร หากคุณมีบัญชีที่นั่น คุณจะไม่สามารถใช้บัญชีต่อไปได้ แต่คุณยังคงสามารถขอข้อมูลสำรองของข้อมูลของคุณ
title: เซิร์ฟเวอร์นี้กำลังปิดตัวลง
@@ -1793,6 +1814,8 @@ th:
too_late: สายเกินไปที่จะอุทธรณ์การดำเนินการนี้
tags:
does_not_match_previous_name: ไม่ตรงกับชื่อก่อนหน้านี้
+ terms_of_service:
+ title: เงื่อนไขการให้บริการ
themes:
contrast: Mastodon (ความคมชัดสูง)
default: Mastodon (มืด)
@@ -1853,6 +1876,8 @@ th:
further_actions_html: หากนี่ไม่ใช่คุณ เราแนะนำให้คุณ %{action} ทันทีและเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยเพื่อรักษาบัญชีของคุณให้ปลอดภัย
subject: มีการเข้าถึงบัญชีของคุณจากที่อยู่ IP ใหม่
title: การลงชื่อเข้าใหม่
+ terms_of_service_changed:
+ sign_off: ทีม %{domain}
warning:
appeal: ส่งการอุทธรณ์
appeal_description: หากคุณเชื่อว่านี่เป็นข้อผิดพลาด คุณสามารถส่งการอุทธรณ์ไปยังพนักงานของ %{instance}
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 7c4840be60..65ec6ef58a 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -948,6 +948,9 @@ tr:
preview:
explanation_html: 'E-posta, %{date} tarihinden önce kaydolan %{display_count} kullanıcıya gönderilecektir. E-posta içerisinde aşağıdaki metin yer alacaktır:'
send_preview: Ön izlemeyi %{email} adresine gönder
+ send_to_all:
+ one: "%{display_count} e-posta gönder"
+ other: "%{display_count} e-posta gönder"
title: Hizmet şartları bildirimini öz izle
publish: Yayınla
published_on_html: "%{date} tarihinde yayınlandı"
diff --git a/config/storage.yml b/config/storage.yml
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml
deleted file mode 100644
index f594b8799a..0000000000
--- a/db/migrate/.rubocop.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-inherit_from: ../../.rubocop.yml
-
-# Below are all enabled as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity
-# TODO: Delete this file and move above config to base naming config
-
-Rails/CreateTableWithTimestamps:
- Include:
- - '*.rb'
-
-Rails/ThreeStateBooleanColumn:
- Include:
- - '*.rb'
-
-Rails/ReversibleMigration:
- Include:
- - '*.rb'
diff --git a/db/migrate/20170112154826_migrate_settings.rb b/db/migrate/20170112154826_migrate_settings.rb
index d1faa81f5d..166d90eab7 100644
--- a/db/migrate/20170112154826_migrate_settings.rb
+++ b/db/migrate/20170112154826_migrate_settings.rb
@@ -17,7 +17,7 @@ class MigrateSettings < ActiveRecord::Migration[4.2]
t.remove_index [:thing_type, :thing_id, :var]
t.rename :thing_id, :target_id
t.rename :thing_type, :target_type
- t.column :target_id, :integer, null: false
+ t.column :target_id, :integer, null: false # rubocop:disable Rails/NotNullColumn
t.column :target_type, :string, null: false, default: ''
t.index [:target_type, :target_id, :var], unique: true
end
diff --git a/db/migrate/20240808124338_migrate_notifications_policy_v2.rb b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
index 2e0684826a..ed1642d6b8 100644
--- a/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
+++ b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb
@@ -9,7 +9,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def up
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
- for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
+ for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END,
for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END,
for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END
SQL
@@ -18,7 +18,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def down
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END,
- filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END,
+ filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END,
filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END,
filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END
SQL
diff --git a/db/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb b/db/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb
new file mode 100644
index 0000000000..5bfa55bcc6
--- /dev/null
+++ b/db/migrate/20241213170027_add_not_null_to_account_conversation_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountConversationAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_conversations, 'account_id IS NOT NULL', name: 'account_conversations_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb b/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb
new file mode 100644
index 0000000000..0186559dc3
--- /dev/null
+++ b/db/migrate/20241213170036_validate_not_null_to_account_conversation_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountConversationAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_conversations
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_conversations, name: 'account_conversations_account_id_null'
+ change_column_null :account_conversations, :account_id, false
+ remove_check_constraint :account_conversations, name: 'account_conversations_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_conversations, 'account_id IS NOT NULL', name: 'account_conversations_account_id_null', validate: false
+ change_column_null :account_conversations, :account_id, true
+ end
+end
diff --git a/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb b/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb
new file mode 100644
index 0000000000..e253a1b3e1
--- /dev/null
+++ b/db/migrate/20241213170043_add_not_null_to_account_conversation_conversation_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountConversationConversationColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_conversations, 'conversation_id IS NOT NULL', name: 'account_conversations_conversation_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb b/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb
new file mode 100644
index 0000000000..324e9180e2
--- /dev/null
+++ b/db/migrate/20241213170053_validate_not_null_to_account_conversation_conversation_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountConversationConversationColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_conversations
+ WHERE conversation_id IS NULL
+ SQL
+
+ validate_check_constraint :account_conversations, name: 'account_conversations_conversation_id_null'
+ change_column_null :account_conversations, :conversation_id, false
+ remove_check_constraint :account_conversations, name: 'account_conversations_conversation_id_null'
+ end
+
+ def down
+ add_check_constraint :account_conversations, 'conversation_id IS NOT NULL', name: 'account_conversations_conversation_id_null', validate: false
+ change_column_null :account_conversations, :conversation_id, true
+ end
+end
diff --git a/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb b/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb
new file mode 100644
index 0000000000..85c10ace22
--- /dev/null
+++ b/db/migrate/20241216223425_add_not_null_to_account_note_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountNoteAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_notes, 'account_id IS NOT NULL', name: 'account_notes_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb b/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb
new file mode 100644
index 0000000000..50907ffe9d
--- /dev/null
+++ b/db/migrate/20241216223433_validate_not_null_to_account_note_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountNoteAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_notes
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_notes, name: 'account_notes_account_id_null'
+ change_column_null :account_notes, :account_id, false
+ remove_check_constraint :account_notes, name: 'account_notes_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_notes, 'account_id IS NOT NULL', name: 'account_notes_account_id_null', validate: false
+ change_column_null :account_notes, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb b/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb
new file mode 100644
index 0000000000..9b389bfbff
--- /dev/null
+++ b/db/migrate/20241216223446_add_not_null_to_account_note_target_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountNoteTargetAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :account_notes, 'target_account_id IS NOT NULL', name: 'account_notes_target_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb b/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb
new file mode 100644
index 0000000000..2021a0eb50
--- /dev/null
+++ b/db/migrate/20241216223452_validate_not_null_to_account_note_target_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToAccountNoteTargetAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_notes
+ WHERE target_account_id IS NULL
+ SQL
+
+ validate_check_constraint :account_notes, name: 'account_notes_target_account_id_null'
+ change_column_null :account_notes, :target_account_id, false
+ remove_check_constraint :account_notes, name: 'account_notes_target_account_id_null'
+ end
+
+ def down
+ add_check_constraint :account_notes, 'target_account_id IS NOT NULL', name: 'account_notes_target_account_id_null', validate: false
+ change_column_null :account_notes, :target_account_id, true
+ end
+end
diff --git a/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb b/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb
new file mode 100644
index 0000000000..9d08fd8964
--- /dev/null
+++ b/db/migrate/20241216223852_add_not_null_to_marker_user_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToMarkerUserColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :markers, 'user_id IS NOT NULL', name: 'markers_user_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb b/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb
new file mode 100644
index 0000000000..37ec90eb9b
--- /dev/null
+++ b/db/migrate/20241216223859_validate_not_null_to_marker_user_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToMarkerUserColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM markers
+ WHERE user_id IS NULL
+ SQL
+
+ validate_check_constraint :markers, name: 'markers_user_id_null'
+ change_column_null :markers, :user_id, false
+ remove_check_constraint :markers, name: 'markers_user_id_null'
+ end
+
+ def down
+ add_check_constraint :markers, 'user_id IS NOT NULL', name: 'markers_user_id_null', validate: false
+ change_column_null :markers, :user_id, true
+ end
+end
diff --git a/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb b/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb
new file mode 100644
index 0000000000..827f146b5e
--- /dev/null
+++ b/db/migrate/20241216224211_add_not_null_to_poll_vote_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollVoteAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :poll_votes, 'account_id IS NOT NULL', name: 'poll_votes_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb b/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb
new file mode 100644
index 0000000000..4dfa5403c1
--- /dev/null
+++ b/db/migrate/20241216224218_validate_not_null_to_poll_vote_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollVoteAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM poll_votes
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :poll_votes, name: 'poll_votes_account_id_null'
+ change_column_null :poll_votes, :account_id, false
+ remove_check_constraint :poll_votes, name: 'poll_votes_account_id_null'
+ end
+
+ def down
+ add_check_constraint :poll_votes, 'account_id IS NOT NULL', name: 'poll_votes_account_id_null', validate: false
+ change_column_null :poll_votes, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb b/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb
new file mode 100644
index 0000000000..6e8a2f4f67
--- /dev/null
+++ b/db/migrate/20241216224229_add_not_null_to_poll_vote_poll_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollVotePollColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :poll_votes, 'poll_id IS NOT NULL', name: 'poll_votes_poll_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb b/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb
new file mode 100644
index 0000000000..9b71406548
--- /dev/null
+++ b/db/migrate/20241216224237_validate_not_null_to_poll_vote_poll_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollVotePollColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM poll_votes
+ WHERE poll_id IS NULL
+ SQL
+
+ validate_check_constraint :poll_votes, name: 'poll_votes_poll_id_null'
+ change_column_null :poll_votes, :poll_id, false
+ remove_check_constraint :poll_votes, name: 'poll_votes_poll_id_null'
+ end
+
+ def down
+ add_check_constraint :poll_votes, 'poll_id IS NOT NULL', name: 'poll_votes_poll_id_null', validate: false
+ change_column_null :poll_votes, :poll_id, true
+ end
+end
diff --git a/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb b/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb
new file mode 100644
index 0000000000..9ff5c2d8f3
--- /dev/null
+++ b/db/migrate/20241216224507_add_not_null_to_poll_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :polls, 'account_id IS NOT NULL', name: 'polls_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb b/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb
new file mode 100644
index 0000000000..91e835359c
--- /dev/null
+++ b/db/migrate/20241216224514_validate_not_null_to_poll_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM polls
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :polls, name: 'polls_account_id_null'
+ change_column_null :polls, :account_id, false
+ remove_check_constraint :polls, name: 'polls_account_id_null'
+ end
+
+ def down
+ add_check_constraint :polls, 'account_id IS NOT NULL', name: 'polls_account_id_null', validate: false
+ change_column_null :polls, :account_id, true
+ end
+end
diff --git a/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb b/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb
new file mode 100644
index 0000000000..5c638c6af0
--- /dev/null
+++ b/db/migrate/20241216224520_add_not_null_to_poll_status_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToPollStatusColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :polls, 'status_id IS NOT NULL', name: 'polls_status_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb b/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb
new file mode 100644
index 0000000000..b5985ce062
--- /dev/null
+++ b/db/migrate/20241216224530_validate_not_null_to_poll_status_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToPollStatusColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM polls
+ WHERE status_id IS NULL
+ SQL
+
+ validate_check_constraint :polls, name: 'polls_status_id_null'
+ change_column_null :polls, :status_id, false
+ remove_check_constraint :polls, name: 'polls_status_id_null'
+ end
+
+ def down
+ add_check_constraint :polls, 'status_id IS NOT NULL', name: 'polls_status_id_null', validate: false
+ change_column_null :polls, :status_id, true
+ end
+end
diff --git a/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb b/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb
new file mode 100644
index 0000000000..1a380cdef3
--- /dev/null
+++ b/db/migrate/20241216224813_add_not_null_to_tombstone_account_column.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddNotNullToTombstoneAccountColumn < ActiveRecord::Migration[7.2]
+ def change
+ add_check_constraint :tombstones, 'account_id IS NOT NULL', name: 'tombstones_account_id_null', validate: false
+ end
+end
diff --git a/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb b/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb
new file mode 100644
index 0000000000..5fefcca33d
--- /dev/null
+++ b/db/migrate/20241216224825_validate_not_null_to_tombstone_account_column.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ValidateNotNullToTombstoneAccountColumn < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM tombstones
+ WHERE account_id IS NULL
+ SQL
+
+ validate_check_constraint :tombstones, name: 'tombstones_account_id_null'
+ change_column_null :tombstones, :account_id, false
+ remove_check_constraint :tombstones, name: 'tombstones_account_id_null'
+ end
+
+ def down
+ add_check_constraint :tombstones, 'account_id IS NOT NULL', name: 'tombstones_account_id_null', validate: false
+ change_column_null :tombstones, :account_id, true
+ end
+end
diff --git a/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
index eb0c909729..5daf646643 100644
--- a/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
+++ b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb
@@ -9,7 +9,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def up
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
- for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END,
+ for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END,
for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END,
for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END
SQL
@@ -18,7 +18,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1]
def down
NotificationPolicy.in_batches.update_all(<<~SQL.squish)
filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END,
- filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END,
+ filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END,
filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END,
filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END
SQL
diff --git a/db/schema.rb b/db/schema.rb
index 7b9065f20c..bad510ac00 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.2].define(version: 2024_12_12_154346) do
+ActiveRecord::Schema[7.2].define(version: 2024_12_16_224825) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -24,8 +24,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "account_conversations", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "conversation_id"
+ t.bigint "account_id", null: false
+ t.bigint "conversation_id", null: false
t.bigint "participant_account_ids", default: [], null: false, array: true
t.bigint "status_ids", default: [], null: false, array: true
t.bigint "last_status_id"
@@ -72,8 +72,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "account_notes", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "target_account_id"
+ t.bigint "account_id", null: false
+ t.bigint "target_account_id", null: false
t.text "comment", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@@ -804,7 +804,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "markers", force: :cascade do |t|
- t.bigint "user_id"
+ t.bigint "user_id", null: false
t.string "timeline", default: "", null: false
t.bigint "last_read_id", default: 0, null: false
t.integer "lock_version", default: 0, null: false
@@ -1076,8 +1076,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "poll_votes", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "poll_id"
+ t.bigint "account_id", null: false
+ t.bigint "poll_id", null: false
t.integer "choice", default: 0, null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
@@ -1087,8 +1087,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "polls", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "status_id"
+ t.bigint "account_id", null: false
+ t.bigint "status_id", null: false
t.datetime "expires_at", precision: nil
t.string "options", default: [], null: false, array: true
t.bigint "cached_tallies", default: [], null: false, array: true
@@ -1484,7 +1484,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
end
create_table "tombstones", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.string "uri", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
diff --git a/lib/mastodon/sidekiq_middleware.rb b/lib/mastodon/sidekiq_middleware.rb
index 8ce1124c69..4df22002c8 100644
--- a/lib/mastodon/sidekiq_middleware.rb
+++ b/lib/mastodon/sidekiq_middleware.rb
@@ -3,8 +3,10 @@
class Mastodon::SidekiqMiddleware
BACKTRACE_LIMIT = 3
- def call(*, &block)
- Chewy.strategy(:mastodon, &block)
+ def call(_worker_class, job, _queue, &block)
+ setup_query_log_tags(job) do
+ Chewy.strategy(:mastodon, &block)
+ end
rescue Mastodon::HostValidationError
# Do not retry
rescue => e
@@ -61,4 +63,14 @@ class Mastodon::SidekiqMiddleware
Thread.current[:statsd_socket]&.close
Thread.current[:statsd_socket] = nil
end
+
+ def setup_query_log_tags(job, &block)
+ if Rails.configuration.active_record.query_log_tags_enabled
+ # If `wrapped` is set, this is an `ActiveJob` which is already in the execution context
+ sidekiq_job_class = job['wrapped'].present? ? nil : job['class'].to_s
+ ActiveSupport::ExecutionContext.set(sidekiq_job_class: sidekiq_job_class, &block)
+ else
+ yield
+ end
+ end
end
diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb
index fe58d1bce1..b4ff4a12a0 100644
--- a/lib/paperclip/blurhash_transcoder.rb
+++ b/lib/paperclip/blurhash_transcoder.rb
@@ -23,7 +23,7 @@ module Paperclip
image = Vips::Image.thumbnail(@file.path, 100)
[image.width, image.height, image.colourspace(:srgb).extract_band(0, n: 3).to_a.flatten]
else
- pixels = convert(':source -flatten -depth 8 -compress none RGB:-', source: File.expand_path(@file.path)).unpack('C*')
+ pixels = convert(':source -depth 8 RGB:-', source: File.expand_path(@file.path)).unpack('C*')
geometry = options.fetch(:file_geometry_parser).from_file(@file)
[geometry.width, geometry.height, pixels]
end
diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb
new file mode 100644
index 0000000000..32bdb8a863
--- /dev/null
+++ b/lib/paperclip/gif_transcoder.rb
@@ -0,0 +1,126 @@
+# frozen_string_literal: true
+
+class GifReader
+ attr_reader :animated
+
+ EXTENSION_LABELS = [0xf9, 0x01, 0xff].freeze
+ GIF_HEADERS = %w(GIF87a GIF89a).freeze
+
+ class GifReaderException < StandardError; end
+
+ class UnknownImageType < GifReaderException; end
+
+ class CannotParseImage < GifReaderException; end
+
+ def self.animated?(path)
+ new(path).animated
+ rescue GifReaderException
+ false
+ end
+
+ def initialize(path, max_frames = 2)
+ @path = path
+ @nb_frames = 0
+
+ File.open(path, 'rb') do |s|
+ raise UnknownImageType unless GIF_HEADERS.include?(s.read(6))
+
+ # Skip to "packed byte"
+ s.seek(4, IO::SEEK_CUR)
+
+ # "Packed byte" gives us the size of the GIF color table
+ packed_byte, = s.read(1).unpack('C')
+
+ # Skip background color and aspect ratio
+ s.seek(2, IO::SEEK_CUR)
+
+ if packed_byte & 0x80 != 0
+ # GIF uses a global color table, skip it
+ s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR)
+ end
+
+ # Now read data
+ while @nb_frames < max_frames
+ separator = s.read(1)
+
+ case separator
+ when ',' # Image block
+ @nb_frames += 1
+
+ # Skip to "packed byte"
+ s.seek(8, IO::SEEK_CUR)
+ packed_byte, = s.read(1).unpack('C')
+
+ if packed_byte & 0x80 != 0
+ # Image uses a local color table, skip it
+ s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR)
+ end
+
+ # Skip lzw min code size
+ raise InvalidValue unless s.read(1).unpack1('C') >= 2
+
+ # Skip image data sub-blocks
+ skip_sub_blocks!(s)
+ when '!' # Extension block
+ skip_extension_block!(s)
+ when ';' # Trailer
+ break
+ else
+ raise CannotParseImage
+ end
+ end
+ end
+
+ @animated = @nb_frames > 1
+ end
+
+ private
+
+ def skip_extension_block!(file)
+ if EXTENSION_LABELS.include?(file.read(1).unpack1('C'))
+ block_size, = file.read(1).unpack('C')
+ file.seek(block_size, IO::SEEK_CUR)
+ end
+
+ # Read until extension block end marker
+ skip_sub_blocks!(file)
+ end
+
+ # Skip sub-blocks up until block end marker
+ def skip_sub_blocks!(file)
+ loop do
+ size, = file.read(1).unpack('C')
+
+ break if size.zero?
+
+ file.seek(size, IO::SEEK_CUR)
+ end
+ end
+end
+
+module Paperclip
+ # This transcoder is only to be used for the MediaAttachment model
+ # to convert animated GIFs to videos
+
+ class GifTranscoder < Paperclip::Processor
+ def make
+ return File.open(@file.path) unless needs_convert?
+
+ final_file = Paperclip::Transcoder.make(file, options, attachment)
+
+ if options[:style] == :original
+ attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4"
+ attachment.instance.file_content_type = 'video/mp4'
+ attachment.instance.type = MediaAttachment.types[:gifv]
+ end
+
+ final_file
+ end
+
+ private
+
+ def needs_convert?
+ GifReader.animated?(file.path)
+ end
+ end
+end
diff --git a/lib/paperclip/gifv_transcoder.rb b/lib/paperclip/gifv_transcoder.rb
deleted file mode 100644
index 4bb27e3b75..0000000000
--- a/lib/paperclip/gifv_transcoder.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-module Paperclip
- # This transcoder is only to be used for the MediaAttachment model
- # to convert animated GIFs and PNGs to videos
-
- class GifvTranscoder < Paperclip::Processor
- def make
- final_file = Paperclip::Transcoder.make(file, options, attachment)
-
- if options[:style] == :original
- attachment.instance.file_file_name = "#{File.basename(attachment.instance.file_file_name, '.*')}.mp4"
- attachment.instance.file_content_type = 'video/mp4'
- attachment.instance.type = MediaAttachment.types[:gifv]
- end
-
- final_file
- end
- end
-end
diff --git a/lint-staged.config.js b/lint-staged.config.js
index 1ee6962c2a..63f5258a94 100644
--- a/lint-staged.config.js
+++ b/lint-staged.config.js
@@ -1,6 +1,6 @@
const config = {
'*': 'prettier --ignore-unknown --write',
- 'Capfile|Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a',
+ 'Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a',
'*.{js,jsx,ts,tsx}': 'eslint --fix',
'*.{css,scss}': 'stylelint --fix',
'*.haml': 'bin/haml-lint -a',
diff --git a/public/loading.gif b/public/loading.gif
new file mode 100755
index 0000000000..b3e1dbef8f
Binary files /dev/null and b/public/loading.gif differ
diff --git a/public/loading.png b/public/loading.png
new file mode 100755
index 0000000000..6a20cbfcb6
Binary files /dev/null and b/public/loading.png differ
diff --git a/spec/controllers/.rubocop.yml b/spec/controllers/.rubocop.yml
deleted file mode 100644
index 51d7c23de1..0000000000
--- a/spec/controllers/.rubocop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-inherit_from: ../../.rubocop.yml
-
-# Anonymous controllers in specs cannot access `described_class`, explanation:
-# https://github.com/rubocop/rubocop-rspec/blob/v2.26.1/lib/rubocop/cop/rspec/described_class.rb#L36-L56
-RSpec/DescribedClass:
- SkipBlocks: true
diff --git a/spec/controllers/admin/account_moderation_notes_controller_spec.rb b/spec/controllers/admin/account_moderation_notes_controller_spec.rb
deleted file mode 100644
index 5ea546f418..0000000000
--- a/spec/controllers/admin/account_moderation_notes_controller_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::AccountModerationNotesController do
- render_views
-
- let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- let(:target_account) { Fabricate(:account) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'POST #create' do
- subject { post :create, params: params }
-
- context 'when parameters are valid' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: 'test content' } } }
-
- it 'successfully creates a note' do
- expect { subject }.to change(AccountModerationNote, :count).by(1)
- expect(response).to redirect_to admin_account_path(target_account.id)
- end
- end
-
- context 'when the content is too short' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: '' } } }
-
- it 'fails to create a note' do
- expect { subject }.to_not change(AccountModerationNote, :count)
- expect(response).to render_template 'admin/accounts/show'
- end
- end
-
- context 'when the content is too long' do
- let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: 'test' * AccountModerationNote::CONTENT_SIZE_LIMIT } } }
-
- it 'fails to create a note' do
- expect { subject }.to_not change(AccountModerationNote, :count)
- expect(response).to render_template 'admin/accounts/show'
- end
- end
- end
-
- describe 'DELETE #destroy' do
- subject { delete :destroy, params: { id: note.id } }
-
- let!(:note) { Fabricate(:account_moderation_note, account: account, target_account: target_account) }
- let(:account) { Fabricate(:account) }
-
- it 'destroys note' do
- expect { subject }.to change(AccountModerationNote, :count).by(-1)
- expect(response).to redirect_to admin_account_path(target_account.id)
- end
- end
-end
diff --git a/spec/controllers/admin/custom_emojis_controller_spec.rb b/spec/controllers/admin/custom_emojis_controller_spec.rb
deleted file mode 100644
index 57c2a6d21b..0000000000
--- a/spec/controllers/admin/custom_emojis_controller_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::CustomEmojisController 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
- before do
- Fabricate(:custom_emoji)
- end
-
- it 'renders index page' do
- get :index
-
- expect(response).to have_http_status 200
- expect(response).to render_template :index
- end
- end
-
- describe 'GET #new' do
- it 'renders new page' do
- get :new
-
- expect(response).to have_http_status 200
- expect(response).to render_template :new
- end
- end
-
- describe 'POST #create' do
- subject { post :create, params: { custom_emoji: params } }
-
- let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
-
- context 'when parameter is valid' do
- let(:params) { { shortcode: 'test', image: image } }
-
- it 'creates custom emoji' do
- expect { subject }.to change(CustomEmoji, :count).by(1)
- end
- end
-
- context 'when parameter is invalid' do
- let(:params) { { shortcode: 't', image: image } }
-
- it 'renders new' do
- expect(subject).to render_template :new
- end
- end
- end
-end
diff --git a/spec/controllers/admin/domain_allows_controller_spec.rb b/spec/controllers/admin/domain_allows_controller_spec.rb
deleted file mode 100644
index 036d229091..0000000000
--- a/spec/controllers/admin/domain_allows_controller_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::DomainAllowsController do
- render_views
-
- before do
- sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
- end
-
- describe 'GET #new' do
- it 'assigns a new domain allow' do
- get :new
-
- expect(response).to have_http_status(200)
- end
- end
-
- describe 'POST #create' do
- it 'blocks the domain when succeeded to save' do
- post :create, params: { domain_allow: { domain: 'example.com' } }
-
- expect(flash[:notice]).to eq I18n.t('admin.domain_allows.created_msg')
- expect(response).to redirect_to(admin_instances_path)
- end
-
- it 'renders new when failed to save' do
- Fabricate(:domain_allow, domain: 'example.com')
-
- post :create, params: { domain_allow: { domain: 'example.com' } }
-
- expect(response).to render_template :new
- end
- end
-
- describe 'DELETE #destroy' do
- it 'disallows the domain' do
- service = instance_double(UnallowDomainService, call: true)
- allow(UnallowDomainService).to receive(:new).and_return(service)
- domain_allow = Fabricate(:domain_allow)
- delete :destroy, params: { id: domain_allow.id }
-
- expect(service).to have_received(:call).with(domain_allow)
- expect(flash[:notice]).to eq I18n.t('admin.domain_allows.destroyed_msg')
- expect(response).to redirect_to(admin_instances_path)
- end
- end
-end
diff --git a/spec/controllers/admin/ip_blocks_controller_spec.rb b/spec/controllers/admin/ip_blocks_controller_spec.rb
deleted file mode 100644
index 2e32db5a01..0000000000
--- a/spec/controllers/admin/ip_blocks_controller_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::IpBlocksController 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
- it 'returns http success' do
- get :index
-
- expect(response).to have_http_status(:success)
- end
- end
-
- describe 'GET #new' do
- it 'returns http success and renders view' do
- get :new
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- describe 'POST #create' do
- context 'with valid data' do
- it 'creates a new ip block and redirects' do
- expect do
- post :create, params: { ip_block: { ip: '1.1.1.1', severity: 'no_access', expires_in: 1.day.to_i.to_s } }
- end.to change(IpBlock, :count).by(1)
-
- expect(response).to redirect_to(admin_ip_blocks_path)
- expect(flash.notice).to match(I18n.t('admin.ip_blocks.created_msg'))
- end
- end
-
- context 'with invalid data' do
- it 'does not create new a ip block and renders new' do
- expect do
- post :create, params: { ip_block: { ip: '1.1.1.1' } }
- end.to_not change(IpBlock, :count)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
- end
-end
diff --git a/spec/controllers/admin/webhooks_controller_spec.rb b/spec/controllers/admin/webhooks_controller_spec.rb
deleted file mode 100644
index 4fe787c26c..0000000000
--- a/spec/controllers/admin/webhooks_controller_spec.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::WebhooksController 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
- it 'returns http success' do
- get :index
-
- expect(response).to have_http_status(:success)
- end
- end
-
- describe 'GET #new' do
- it 'returns http success and renders view' do
- get :new
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- describe 'POST #create' do
- it 'creates a new webhook record with valid data' do
- expect do
- post :create, params: { webhook: { url: 'https://example.com/hook', events: ['account.approved'] } }
- end.to change(Webhook, :count).by(1)
-
- expect(response).to be_redirect
- end
-
- it 'does not create a new webhook record with invalid data' do
- expect do
- post :create, params: { webhook: { url: 'https://example.com/hook', events: [] } }
- end.to_not change(Webhook, :count)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:new)
- end
- end
-
- context 'with an existing record' do
- let!(:webhook) { Fabricate(:webhook, events: ['account.created', 'report.created']) }
-
- describe 'GET #show' do
- it 'returns http success and renders view' do
- get :show, params: { id: webhook.id }
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:show)
- end
- end
-
- describe 'GET #edit' do
- it 'returns http success and renders view' do
- get :edit, params: { id: webhook.id }
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:edit)
- end
- end
-
- describe 'PUT #update' do
- it 'updates the record with valid data' do
- put :update, params: { id: webhook.id, webhook: { url: 'https://example.com/new/location' } }
-
- expect(webhook.reload.url).to match(%r{new/location})
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
-
- it 'does not update the record with invalid data' do
- expect do
- put :update, params: { id: webhook.id, webhook: { url: '' } }
- end.to_not change(webhook, :url)
-
- expect(response).to have_http_status(:success)
- expect(response).to render_template(:edit)
- end
- end
-
- describe 'POST #enable' do
- it 'enables the webhook' do
- post :enable, params: { id: webhook.id }
-
- expect(webhook.reload).to be_enabled
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
- end
-
- describe 'POST #disable' do
- it 'disables the webhook' do
- post :disable, params: { id: webhook.id }
-
- expect(webhook.reload).to_not be_enabled
- expect(response).to redirect_to(admin_webhook_path(webhook))
- end
- end
-
- describe 'DELETE #destroy' do
- it 'destroys the record' do
- expect do
- delete :destroy, params: { id: webhook.id }
- end.to change(Webhook, :count).by(-1)
-
- expect(response).to redirect_to(admin_webhooks_path)
- end
- end
- end
-end
diff --git a/spec/controllers/concerns/account_controller_concern_spec.rb b/spec/controllers/concerns/account_controller_concern_spec.rb
index 384406a0ea..4a44fd3498 100644
--- a/spec/controllers/concerns/account_controller_concern_spec.rb
+++ b/spec/controllers/concerns/account_controller_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AccountControllerConcern do
controller(ApplicationController) do
- include AccountControllerConcern
+ include AccountControllerConcern # rubocop:disable RSpec/DescribedClass
def success
render plain: @account.username # rubocop:disable RSpec/InstanceVariable
diff --git a/spec/controllers/concerns/api/rate_limit_headers_spec.rb b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
index 6372c94e6c..74ed81f5da 100644
--- a/spec/controllers/concerns/api/rate_limit_headers_spec.rb
+++ b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Api::RateLimitHeaders do
controller(ApplicationController) do
- include Api::RateLimitHeaders
+ include Api::RateLimitHeaders # rubocop:disable RSpec/DescribedClass
def show
head 200
diff --git a/spec/controllers/concerns/challengable_concern_spec.rb b/spec/controllers/concerns/challengable_concern_spec.rb
index 169e2122f8..01f979ff4c 100644
--- a/spec/controllers/concerns/challengable_concern_spec.rb
+++ b/spec/controllers/concerns/challengable_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe ChallengableConcern do
controller(ApplicationController) do
- include ChallengableConcern
+ include ChallengableConcern # rubocop:disable RSpec/DescribedClass
before_action :require_challenge!
diff --git a/spec/controllers/concerns/localized_spec.rb b/spec/controllers/concerns/localized_spec.rb
index b1f805ae50..4798e8270c 100644
--- a/spec/controllers/concerns/localized_spec.rb
+++ b/spec/controllers/concerns/localized_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Localized do
controller(ApplicationController) do
- include Localized
+ include Localized # rubocop:disable RSpec/DescribedClass
def success
render plain: I18n.locale, status: 200
diff --git a/spec/controllers/concerns/preloading_concern_spec.rb b/spec/controllers/concerns/preloading_concern_spec.rb
index 795afbc45e..2cbccb411e 100644
--- a/spec/controllers/concerns/preloading_concern_spec.rb
+++ b/spec/controllers/concerns/preloading_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe PreloadingConcern do
controller(ApplicationController) do
- include PreloadingConcern
+ include PreloadingConcern # rubocop:disable RSpec/DescribedClass
def empty_array
render plain: preload_collection([], Status).size
diff --git a/spec/controllers/concerns/settings/export_controller_concern_spec.rb b/spec/controllers/concerns/settings/export_controller_concern_spec.rb
index 2c67991e3a..6c1a06114c 100644
--- a/spec/controllers/concerns/settings/export_controller_concern_spec.rb
+++ b/spec/controllers/concerns/settings/export_controller_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Settings::ExportControllerConcern do
controller(ApplicationController) do
- include Settings::ExportControllerConcern
+ include Settings::ExportControllerConcern # rubocop:disable RSpec/DescribedClass
def index
send_export_file
diff --git a/spec/controllers/concerns/user_tracking_concern_spec.rb b/spec/controllers/concerns/user_tracking_concern_spec.rb
index cc61e285cc..d67b0ef5e7 100644
--- a/spec/controllers/concerns/user_tracking_concern_spec.rb
+++ b/spec/controllers/concerns/user_tracking_concern_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe UserTrackingConcern do
controller(ApplicationController) do
- include UserTrackingConcern
+ include UserTrackingConcern # rubocop:disable RSpec/DescribedClass
def show
render plain: 'show'
diff --git a/spec/controllers/filters_controller_spec.rb b/spec/controllers/filters_controller_spec.rb
deleted file mode 100644
index de043e8ae3..0000000000
--- a/spec/controllers/filters_controller_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe FiltersController do
- render_views
-
- describe 'GET #index' do
- context 'with signed out user' do
- before do
- get :index
- end
-
- it 'redirects' do
- expect(response).to be_redirect
- end
- end
-
- context 'with a signed in user' do
- before do
- sign_in(Fabricate(:user))
- get :index
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
-
- it 'returns private cache control headers' do
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
- end
-end
diff --git a/spec/controllers/settings/login_activities_controller_spec.rb b/spec/controllers/settings/login_activities_controller_spec.rb
deleted file mode 100644
index 3447620abb..0000000000
--- a/spec/controllers/settings/login_activities_controller_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::LoginActivitiesController do
- render_views
-
- let!(:user) { Fabricate(:user) }
- let!(:login_activity) { Fabricate :login_activity, user: user }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #index' do
- before do
- 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')
- expect(response.body)
- .to include(login_activity.user_agent)
- .and include(login_activity.authentication_method)
- .and include(login_activity.ip.to_s)
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/appearance_controller_spec.rb b/spec/controllers/settings/preferences/appearance_controller_spec.rb
deleted file mode 100644
index 14f9b244ab..0000000000
--- a/spec/controllers/settings/preferences/appearance_controller_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::AppearanceController do
- render_views
-
- let!(:user) { Fabricate(:user) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- 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
-
- describe 'PUT #update' do
- subject { put :update, params: { user: { settings_attributes: { theme: 'contrast' } } } }
-
- it 'redirects correctly' do
- expect { subject }
- .to change { user.reload.settings.theme }.to('contrast')
-
- expect(response).to redirect_to(settings_preferences_appearance_path)
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/notifications_controller_spec.rb b/spec/controllers/settings/preferences/notifications_controller_spec.rb
deleted file mode 100644
index edfdea50e0..0000000000
--- a/spec/controllers/settings/preferences/notifications_controller_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::NotificationsController do
- render_views
-
- let(:user) { Fabricate(:user) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- 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
-
- describe 'PUT #update' do
- it 'updates notifications settings' do
- user.settings.update('notification_emails.follow': false)
- user.save
-
- put :update, params: {
- user: {
- settings_attributes: {
- 'notification_emails.follow': '1',
- },
- },
- }
-
- expect(response).to redirect_to(settings_preferences_notifications_path)
- user.reload
- expect(user.settings['notification_emails.follow']).to be true
- end
- end
-end
diff --git a/spec/controllers/settings/preferences/other_controller_spec.rb b/spec/controllers/settings/preferences/other_controller_spec.rb
deleted file mode 100644
index 117fdeea7c..0000000000
--- a/spec/controllers/settings/preferences/other_controller_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::Preferences::OtherController do
- render_views
-
- let(:user) { Fabricate(:user, chosen_languages: []) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- 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
-
- describe 'PUT #update' do
- it 'updates the user record' do
- put :update, params: { user: { locale: 'en', chosen_languages: ['es', 'fr', ''] } }
-
- expect(response).to redirect_to(settings_preferences_other_path)
- user.reload
- expect(user.locale).to eq 'en'
- expect(user.chosen_languages).to eq %w(es fr)
- end
-
- it 'updates user settings' do
- user.settings.update('web.reblog_modal': false, 'web.delete_modal': true)
- user.save
-
- put :update, params: {
- user: {
- settings_attributes: {
- 'web.reblog_modal': '1',
- 'web.delete_modal': '0',
- },
- },
- }
-
- expect(response).to redirect_to(settings_preferences_other_path)
- user.reload
- expect(user.settings['web.reblog_modal']).to be true
- expect(user.settings['web.delete_modal']).to be false
- end
- end
-end
diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
deleted file mode 100644
index e3197f0a6d..0000000000
--- a/spec/controllers/settings/profiles_controller_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::ProfilesController do
- render_views
-
- let!(:user) { Fabricate(:user) }
- let(:account) { user.account }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- 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
-
- describe 'PUT #update' do
- before do
- user.account.update(display_name: 'Old name')
- end
-
- it 'updates the user profile' do
- allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
- put :update, params: { account: { display_name: 'New name' } }
- expect(account.reload.display_name).to eq 'New name'
- expect(response).to redirect_to(settings_profile_path)
- expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
- end
- end
-
- describe 'PUT #update with new profile image' do
- it 'updates profile image' do
- allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
- expect(account.avatar.instance.avatar_file_name).to be_nil
-
- put :update, params: { account: { avatar: fixture_file_upload('avatar.gif', 'image/gif') } }
- expect(response).to redirect_to(settings_profile_path)
- expect(account.reload.avatar.instance.avatar_file_name).to_not be_nil
- expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id)
- end
- end
-end
diff --git a/spec/controllers/statuses_cleanup_controller_spec.rb b/spec/controllers/statuses_cleanup_controller_spec.rb
deleted file mode 100644
index 8a72621993..0000000000
--- a/spec/controllers/statuses_cleanup_controller_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe StatusesCleanupController do
- render_views
-
- let!(:user) { Fabricate(:user) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #show' do
- before do
- get :show
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
-
- it 'returns private cache control headers' do
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
-
- describe 'PUT #update' do
- before do
- put :update, params: { account_statuses_cleanup_policy: { enabled: true, min_status_age: 2.weeks.seconds, keep_direct: false, keep_polls: true } }
- end
-
- it 'updates the account status cleanup policy' do
- expect(user.account.statuses_cleanup_policy.enabled).to be true
- expect(user.account.statuses_cleanup_policy.keep_direct).to be false
- expect(user.account.statuses_cleanup_policy.keep_polls).to be true
- end
-
- it 'redirects' do
- expect(response).to redirect_to(statuses_cleanup_path)
- end
- end
-end
diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb
index 121e4aa6c6..e14a7f6916 100644
--- a/spec/controllers/statuses_controller_spec.rb
+++ b/spec/controllers/statuses_controller_spec.rb
@@ -527,213 +527,4 @@ RSpec.describe StatusesController do
end
end
end
-
- describe 'GET #activity' do
- let(:account) { Fabricate(:account) }
- let(:status) { Fabricate(:status, account: account) }
-
- context 'when account is permanently suspended' do
- before do
- account.suspend!
- account.deletion_request.destroy
-
- get :activity, 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 account is temporarily suspended' do
- before do
- account.suspend!
-
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http forbidden' do
- expect(response).to have_http_status(403)
- end
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- get :activity, params: { account_username: 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
- before do
- status.update(visibility: :direct)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when signed-in' do
- let(:user) { Fabricate(:user) }
-
- before do
- sign_in(user)
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- end
-
- context 'when user is authorized to see it' do
- before do
- user.account.follow!(account)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
-
- context 'when status is direct' do
- before do
- status.update(visibility: :direct)
- end
-
- context 'when user is authorized to see it' do
- before do
- Fabricate(:mention, account: user.account, status: status)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
- end
-
- context 'with signature' do
- let(:remote_account) { Fabricate(:account, domain: 'example.com') }
-
- before do
- allow(controller).to receive(:signed_request_actor).and_return(remote_account)
- end
-
- context 'when status is public' do
- before do
- status.update(visibility: :public)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(:success)
- end
- end
-
- context 'when status is private' do
- before do
- status.update(visibility: :private)
- end
-
- context 'when user is authorized to see it' do
- before do
- remote_account.follow!(account)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
-
- context 'when status is direct' do
- before do
- status.update(visibility: :direct)
- end
-
- context 'when user is authorized to see it' do
- before do
- Fabricate(:mention, account: remote_account, status: status)
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http success' do
- expect(response).to have_http_status(200)
- end
- end
-
- context 'when user is not authorized to see it' do
- before do
- get :activity, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http not_found' do
- expect(response).to have_http_status(404)
- end
- end
- end
- end
- end
end
diff --git a/spec/fixtures/files/600x400-animated.gif b/spec/fixtures/files/600x400-animated.gif
deleted file mode 100644
index 1a773c0af1..0000000000
Binary files a/spec/fixtures/files/600x400-animated.gif and /dev/null differ
diff --git a/spec/fixtures/files/600x400-animated.png b/spec/fixtures/files/600x400-animated.png
deleted file mode 100644
index 6430fceabb..0000000000
Binary files a/spec/fixtures/files/600x400-animated.png and /dev/null differ
diff --git a/spec/fixtures/files/600x400.gif b/spec/fixtures/files/600x400.gif
deleted file mode 100644
index bab39cb6f7..0000000000
Binary files a/spec/fixtures/files/600x400.gif and /dev/null differ
diff --git a/spec/fixtures/files/attachment.gif b/spec/fixtures/files/attachment.gif
new file mode 100644
index 0000000000..89dd73ad3e
Binary files /dev/null and b/spec/fixtures/files/attachment.gif differ
diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb
index 677512f6bc..4393ce7b3e 100644
--- a/spec/lib/activitypub/activity/create_spec.rb
+++ b/spec/lib/activitypub/activity/create_spec.rb
@@ -172,14 +172,12 @@ RSpec.describe ActivityPub::Activity::Create do
subject { delivered_to_account_id ? described_class.new(json, sender, delivered_to_account_id: delivered_to_account_id) : described_class.new(json, sender) }
let(:sender_software) { 'mastodon' }
- let(:custom_before) { false }
let(:active_friend) { false }
let(:delivered_to_account_id) { nil }
before do
Fabricate(:instance_info, domain: 'example.com', software: sender_software)
Fabricate(:friend_domain, domain: 'example.com', active_state: :accepted) if active_friend
- subject.perform unless custom_before
end
context 'when object publication date is below ISO8601 range' do
@@ -193,6 +191,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with a valid creation date', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -213,6 +213,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with a valid creation date', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -234,6 +236,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with appropriate creation and edition dates', :aggregate_failures do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -257,17 +261,13 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status and does not mark it as edited' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.text).to eq 'Lorem ipsum'
- end
-
- it 'does not mark status as edited' do
- status = sender.statuses.first
-
- expect(status).to_not be_nil
expect(status.edited?).to be false
end
end
@@ -282,7 +282,7 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'does not create a status' do
- expect(sender.statuses.count).to be_zero
+ expect { subject.perform }.to_not change(sender.statuses, :count)
end
end
@@ -296,6 +296,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -303,6 +305,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'missing to/cc defaults to direct privacy' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -321,6 +325,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -339,6 +345,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -357,6 +365,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -375,6 +385,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -393,6 +405,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -411,6 +425,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -430,6 +446,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -450,6 +468,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:active_friend) { true }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -468,6 +488,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -490,6 +512,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -509,16 +533,14 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status with a silent mention' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.visibility).to eq 'limited'
expect(status.limited_scope).to eq 'none'
- end
-
- it 'creates silent mention' do
- status = sender.statuses.first
expect(status.mentions.first).to be_silent
end
end
@@ -537,6 +559,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -559,6 +583,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -584,6 +610,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -605,6 +633,8 @@ RSpec.describe ActivityPub::Activity::Create do
context 'with explicit public address' do
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -616,6 +646,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'as:Public' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -627,6 +659,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'Public' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -638,6 +672,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { ['http://example.com/followers', 'kmyblue:LocalPublic'] }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -650,6 +686,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:active_friend) { true }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -661,6 +699,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'http://example.com/followers' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -672,6 +712,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'https://example.com/actor' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -683,6 +725,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { '' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -694,6 +738,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'ohagi' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -705,6 +751,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { nil }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -716,6 +764,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'kmyblue:Limited' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -730,6 +780,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:sender_bio) { '#searchable_by_all_users' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -741,6 +793,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:sender_bio) { '#searchable_by_followers_only' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -752,6 +806,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:sender_bio) { '#searchable_by_reacted_users_only' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -763,6 +819,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:sender_bio) { '#searchable_by_nobody' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -774,6 +832,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:sender_bio) { '' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -797,6 +857,8 @@ RSpec.describe ActivityPub::Activity::Create do
context 'without specify searchability from misskey' do
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -808,6 +870,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:to) { 'http://example.com/followers' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -830,6 +894,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -841,6 +907,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:searchable_by) { 'kmyblue:Limited' }
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -862,6 +930,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -890,6 +960,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -912,6 +984,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -921,10 +995,8 @@ RSpec.describe ActivityPub::Activity::Create do
before do
Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_reply_exclude_followers: true)
recipient.follow!(sender) if follow
- subject.perform
end
- let(:custom_before) { true }
let(:follow) { false }
let(:recipient) { Fabricate(:account) }
@@ -946,6 +1018,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:follow) { true }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -954,6 +1028,8 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when not follower' do
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
status = sender.statuses.first
expect(status).to be_nil
@@ -972,6 +1048,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -981,14 +1059,11 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when existing' do
- let(:custom_before) { true }
let!(:existing) { Fabricate(:conversation, uri: 'http://example.com/conversation', inbox_url: 'http://example.com/actor/invalid') }
- before do
- subject.perform
- end
-
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1010,6 +1085,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1032,6 +1109,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:existing) { Fabricate(:conversation, id: 3500) }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1042,8 +1121,6 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'with a context as a reply' do
- let(:custom_before) { true }
- let(:custom_before_sub) { false }
let(:ancestor_account) { Fabricate(:account, domain: 'or.example.com', inbox_url: 'http://or.example.com/actor/inbox') }
let(:mentioned_account) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/bob', inbox_url: 'http://example.com/bob/inbox', shared_inbox_url: 'http://exmaple.com/inbox') }
let(:local_mentioned_account) { Fabricate(:account, domain: nil) }
@@ -1081,11 +1158,11 @@ RSpec.describe ActivityPub::Activity::Create do
stub_request(:post, 'http://or.example.com/actor/inbox').to_return(status: 200)
stub_request(:post, 'http://example.com/bob/inbox').to_return(status: 200)
-
- subject.perform unless custom_before_sub
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1095,13 +1172,13 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'forwards to observers', :inline_jobs do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(a_request(:post, 'http://or.example.com/actor/inbox')).to have_been_made.once
expect(a_request(:post, 'http://example.com/bob/inbox')).to have_been_made.once
end
context 'when new mention is added' do
- let(:custom_before_sub) { true }
-
let(:new_mentioned_account) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/alice', inbox_url: 'http://example.com/alice/inbox', shared_inbox_url: 'http://exmaple.com/inbox') }
let(:new_local_mentioned_account) { Fabricate(:account, domain: nil) }
@@ -1127,10 +1204,11 @@ RSpec.describe ActivityPub::Activity::Create do
before do
stub_request(:post, 'http://example.com/alice/inbox').to_return(status: 200)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1138,6 +1216,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'forwards to observers', :inline_jobs do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(a_request(:post, 'http://or.example.com/actor/inbox')).to have_been_made.once
expect(a_request(:post, 'http://example.com/bob/inbox')).to have_been_made.once
expect(a_request(:post, 'http://example.com/alice/inbox')).to have_been_made.once
@@ -1145,8 +1225,6 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when unknown mentioned account' do
- let(:custom_before_sub) { true }
-
let(:actor_json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
@@ -1180,10 +1258,11 @@ RSpec.describe ActivityPub::Activity::Create do
stub_request(:get, 'https://foo.test/.well-known/webfinger?resource=acct:actor@foo.test').to_return(status: 200, body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' })
stub_request(:post, 'https://foo.test/inbox').to_return(status: 200)
stub_request(:get, 'https://foo.test/.well-known/nodeinfo').to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' })
- subject.perform
end
it 'creates status', :inline_jobs do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1191,6 +1270,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'forwards to observers', :inline_jobs do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(a_request(:post, 'https://foo.test/inbox')).to have_been_made.once
end
end
@@ -1199,6 +1280,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:conversation) { Fabricate(:conversation, uri: 'http://example.com/conversation', inbox_url: 'http://example.com/actor/inbox') }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1208,6 +1291,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'do not forward to observers', :inline_jobs do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(a_request(:post, 'http://or.example.com/actor/inbox')).to_not have_been_made
expect(a_request(:post, 'http://example.com/bob/inbox')).to_not have_been_made
end
@@ -1236,6 +1321,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status with correctly-ordered media attachments' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1262,6 +1349,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1287,6 +1376,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1312,6 +1403,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1335,6 +1428,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -1357,6 +1452,42 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
+ status = sender.statuses.first
+
+ expect(status).to_not be_nil
+ expect(status.tags.map(&:name)).to include('test')
+ end
+ end
+
+ context 'with featured hashtags' do
+ let(:object_json) do
+ {
+ id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
+ type: 'Note',
+ content: 'Lorem ipsum',
+ to: 'https://www.w3.org/ns/activitystreams#Public',
+ tag: [
+ {
+ type: 'Hashtag',
+ href: 'http://example.com/blah',
+ name: '#test',
+ },
+ ],
+ }
+ end
+
+ before do
+ sender.featured_tags.create!(name: 'test')
+ end
+
+ it 'creates status and updates featured tag' do
+ expect { subject.perform }
+ .to change(sender.statuses, :count).by(1)
+ .and change { sender.featured_tags.first.reload.statuses_count }.by(1)
+ .and change { sender.featured_tags.first.reload.last_status_at }.from(nil).to(be_within(0.1).of(Time.now.utc))
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1364,14 +1495,13 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'with domain-block' do
- let(:custom_before) { true }
-
before do
Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_hashtag: true)
- subject.perform
end
it 'does not create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1396,6 +1526,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -1418,6 +1550,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -1442,6 +1576,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1468,6 +1604,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1493,6 +1631,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -1514,6 +1654,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -1544,13 +1686,13 @@ RSpec.describe ActivityPub::Activity::Create do
}
end
- it 'creates status' do
+ it 'creates status with a poll' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.poll).to_not be_nil
- end
- it 'creates a poll' do
poll = sender.polls.first
expect(poll).to_not be_nil
expect(poll.status).to_not be_nil
@@ -1573,6 +1715,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'adds a vote to the poll with correct uri' do
+ expect { subject.perform }.to change(poll.votes, :count).by(1)
+
vote = poll.votes.first
expect(vote).to_not be_nil
expect(vote.uri).to eq object_json[:id]
@@ -1580,15 +1724,14 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when ng rule is existing' do
- let(:custom_before) { true }
-
context 'when ng rule is match' do
before do
Fabricate(:ng_rule, account_domain: 'example.com', reaction_type: ['vote'])
- subject.perform
end
it 'does not create a reblog by sender of status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(poll.votes.first).to be_nil
end
end
@@ -1596,10 +1739,11 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when ng rule is not match' do
before do
Fabricate(:ng_rule, account_domain: 'foo.bar', reaction_type: ['vote'])
- subject.perform
end
it 'creates a reblog by sender of status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(poll.votes.first).to_not be_nil
end
end
@@ -1608,9 +1752,9 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when a vote to an expired local poll' do
let(:poll) do
- poll = Fabricate.build(:poll, options: %w(Yellow Blue), expires_at: 1.day.ago)
- poll.save(validate: false)
- poll
+ travel_to 2.days.ago do
+ Fabricate(:poll, options: %w(Yellow Blue), expires_at: 1.day.from_now)
+ end
end
let!(:local_status) { Fabricate(:status, poll: poll) }
@@ -1624,6 +1768,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'does not add a vote to the poll' do
+ expect { subject.perform }.to_not change(poll.votes, :count)
+
expect(poll.votes.first).to be_nil
end
end
@@ -1653,6 +1799,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1675,6 +1823,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1704,6 +1854,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1739,6 +1891,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1761,6 +1915,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1780,6 +1936,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1800,6 +1958,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1821,6 +1981,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'create status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -1829,8 +1991,6 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when ng word is set' do
- let(:custom_before) { true }
- let(:custom_before_sub) { false }
let(:content) { 'Lorem ipsum' }
let(:ng_word) { 'hello' }
let(:ng_word_for_stranger_mention) { 'ohagi' }
@@ -1846,13 +2006,14 @@ RSpec.describe ActivityPub::Activity::Create do
before do
Fabricate(:ng_word, keyword: ng_word, stranger: false)
Fabricate(:ng_word, keyword: ng_word_for_stranger_mention, stranger: true)
- subject.perform unless custom_before_sub
end
context 'when not contains ng words' do
let(:content) { 'ohagi, world! OH GOOD' }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
end
end
@@ -1861,10 +2022,14 @@ RSpec.describe ActivityPub::Activity::Create do
let(:content) { 'hello, world!' }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
it 'records history' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
history = NgwordHistory.find_by(uri: object_json[:id])
expect(history).to_not be_nil
expect(history.status_blocked?).to be true
@@ -1884,6 +2049,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
end
@@ -1910,6 +2077,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:content) { 'among us' }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
end
end
@@ -1918,27 +2087,28 @@ RSpec.describe ActivityPub::Activity::Create do
let(:content) { 'oh, ohagi!' }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
end
context 'with using ng words for stranger but receiver is following him' do
let(:content) { 'oh, ohagi!' }
- let(:custom_before_sub) { true }
before do
recipient.follow!(sender)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
end
end
context 'with using ng words for stranger but multiple receivers are partically following him' do
let(:content) { 'oh, ohagi' }
- let(:custom_before_sub) { true }
let(:object_json) do
{
@@ -1961,10 +2131,11 @@ RSpec.describe ActivityPub::Activity::Create do
before do
recipient.follow!(sender)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
end
@@ -1986,19 +2157,20 @@ RSpec.describe ActivityPub::Activity::Create do
context 'with a simple case' do
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
end
context 'with following' do
- let(:custom_before_sub) { true }
-
before do
recipient.follow!(sender)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
end
end
@@ -2030,19 +2202,20 @@ RSpec.describe ActivityPub::Activity::Create do
context 'with a simple case' do
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
end
end
context 'with following' do
- let(:custom_before_sub) { true }
-
before do
recipient.follow!(sender)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
end
end
@@ -2050,7 +2223,6 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when ng rule is set' do
- let(:custom_before) { true }
let(:content) { 'Lorem ipsum GOOD LINK' }
let(:object_json) do
{
@@ -2064,10 +2236,11 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when rule hits' do
before do
Fabricate(:ng_rule, status_text: 'ipsum', status_allow_follower_mention: false)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
status = sender.statuses.first
expect(status).to be_nil
end
@@ -2076,10 +2249,11 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when rule does not hit' do
before do
Fabricate(:ng_rule, status_text: 'amely', status_allow_follower_mention: false)
- subject.perform
end
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
end
@@ -2087,7 +2261,6 @@ RSpec.describe ActivityPub::Activity::Create do
end
context 'when sensitive word is set' do
- let(:custom_before) { true }
let(:content) { 'Lorem ipsum' }
let(:sensitive_words_all) { 'hello' }
let(:object_json) do
@@ -2102,11 +2275,12 @@ RSpec.describe ActivityPub::Activity::Create do
before do
Fabricate(:sensitive_word, keyword: sensitive_words_all, remote: true, spoiler: false) if sensitive_words_all.present?
Fabricate(:sensitive_word, keyword: 'ipsum')
- subject.perform
end
context 'when not contains sensitive words' do
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -2118,6 +2292,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:content) { 'hello world' }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status).to_not be_nil
@@ -2128,7 +2304,6 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when hashtags limit is set' do
let(:post_hash_tags_max) { 2 }
- let(:custom_before) { true }
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
@@ -2152,11 +2327,12 @@ RSpec.describe ActivityPub::Activity::Create do
before do
Form::AdminSettings.new(post_hash_tags_max: post_hash_tags_max).save
- subject.perform
end
context 'when limit is enough' do
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2168,6 +2344,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:post_hash_tags_max) { 1 }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2183,7 +2361,6 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when mentions limit is set' do
let(:post_mentions_max) { 3 }
let(:post_stranger_mentions_max) { 0 }
- let(:custom_before) { true }
let(:mention_recipient_alice) { Fabricate(:account) }
let(:mention_recipient_bob) { Fabricate(:account) }
let(:mention_recipient_ohagi) { Fabricate(:account) }
@@ -2217,12 +2394,12 @@ RSpec.describe ActivityPub::Activity::Create do
mention_recipient_alice.follow!(sender)
mention_recipient_bob.follow!(sender)
mention_recipient_ohagi.follow!(sender) if mention_recipient_ohagi_follow
-
- subject.perform
end
context 'when limit is enough' do
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2234,6 +2411,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:post_mentions_max) { 1 }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2248,6 +2427,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:post_stranger_mentions_max) { 1 }
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2260,6 +2441,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:mention_recipient_ohagi_follow) { false }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2273,7 +2456,6 @@ RSpec.describe ActivityPub::Activity::Create do
context 'when mentions limit for stranger is set' do
let(:post_stranger_mentions_max) { 2 }
- let(:custom_before) { true }
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
@@ -2295,11 +2477,12 @@ RSpec.describe ActivityPub::Activity::Create do
before do
Form::AdminSettings.new(post_stranger_mentions_max: post_stranger_mentions_max).save
- subject.perform
end
context 'when limit is enough' do
it 'creates status' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
expect(sender.statuses.first).to_not be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2311,6 +2494,8 @@ RSpec.describe ActivityPub::Activity::Create do
let(:post_stranger_mentions_max) { 1 }
it 'creates status' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
expect(sender.statuses.first).to be_nil
history = NgwordHistory.find_by(uri: object_json[:id])
@@ -2342,6 +2527,8 @@ RSpec.describe ActivityPub::Activity::Create do
end
it 'uses the counts from the created object' do
+ expect { subject.perform }.to change(sender.statuses, :count).by(1)
+
status = sender.statuses.first
expect(status.untrusted_favourites_count).to eq 50
expect(status.untrusted_reblogs_count).to eq 100
@@ -2407,16 +2594,18 @@ RSpec.describe ActivityPub::Activity::Create do
before do
sender.update(suspended_at: Time.now.utc, suspension_origin: :local, remote_pending: true)
- subject.perform
end
it 'does not create a status' do
- status = sender.statuses.first
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+ status = sender.statuses.first
expect(status).to be_nil
end
it 'pending data is created' do
+ expect { subject.perform }.to_not change(sender.statuses, :count)
+
pending = PendingStatus.find_by(account: sender)
expect(pending).to_not be_nil
diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb
index 0a128355b5..533aa2e624 100644
--- a/spec/mailers/user_mailer_spec.rb
+++ b/spec/mailers/user_mailer_spec.rb
@@ -3,6 +3,17 @@
require 'rails_helper'
RSpec.describe UserMailer do
+ shared_examples 'delivery to memorialized user' do
+ context 'when the account is memorialized' do
+ before { receiver.account.update(memorial: true) }
+
+ it 'does not deliver mail' do
+ emails = capture_emails { mail.deliver_now }
+ expect(emails).to be_empty
+ end
+ end
+ end
+
let(:receiver) { Fabricate(:user) }
describe '#confirmation_instructions' do
@@ -21,6 +32,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.confirmation_instructions.subject',
instance: Rails.configuration.x.local_domain
+ include_examples 'delivery to memorialized user'
end
describe '#reconfirmation_instructions' do
@@ -39,6 +51,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.confirmation_instructions.subject',
instance: Rails.configuration.x.local_domain
+ include_examples 'delivery to memorialized user'
end
describe '#reset_password_instructions' do
@@ -55,6 +68,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.reset_password_instructions.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#password_change' do
@@ -70,6 +84,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.password_change.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#email_changed' do
@@ -85,6 +100,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.email_changed.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#warning' do
@@ -115,6 +131,7 @@ RSpec.describe UserMailer do
include_examples 'localized subject',
'devise.mailer.webauthn_credential.deleted.subject'
+ include_examples 'delivery to memorialized user'
end
describe '#suspicious_sign_in' do
@@ -186,6 +203,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_enabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_enabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#two_factor_disabled' do
@@ -197,6 +216,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_disabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_disabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_enabled' do
@@ -208,6 +229,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_enabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_enabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_disabled' do
@@ -219,6 +242,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_disabled.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_disabled.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#two_factor_recovery_codes_changed' do
@@ -230,6 +255,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.two_factor_recovery_codes_changed.subject')))
.and(have_body_text(I18n.t('devise.mailer.two_factor_recovery_codes_changed.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#webauthn_credential_added' do
@@ -242,6 +269,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('devise.mailer.webauthn_credential.added.subject')))
.and(have_body_text(I18n.t('devise.mailer.webauthn_credential.added.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#welcome' do
@@ -259,6 +288,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('user_mailer.welcome.subject')))
.and(have_body_text(I18n.t('user_mailer.welcome.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#backup_ready' do
@@ -271,6 +302,8 @@ RSpec.describe UserMailer do
.and(have_subject(I18n.t('user_mailer.backup_ready.subject')))
.and(have_body_text(I18n.t('user_mailer.backup_ready.explanation')))
end
+
+ include_examples 'delivery to memorialized user'
end
describe '#terms_of_service_changed' do
diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb
index 9bbbefa08e..548e1105a1 100644
--- a/spec/models/account_statuses_cleanup_policy_spec.rb
+++ b/spec/models/account_statuses_cleanup_policy_spec.rb
@@ -129,8 +129,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
let(:account_statuses_cleanup_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) }
it 'records the given id' do
- account_statuses_cleanup_policy.record_last_inspected(42)
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { account_statuses_cleanup_policy.record_last_inspected(42) }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(nil).to(42)
end
end
@@ -153,8 +153,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -164,8 +164,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -179,8 +179,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -190,8 +190,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -205,8 +205,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
@@ -216,8 +216,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
end
it 'records the older id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 10
+ expect { subject }
+ .to change(account_statuses_cleanup_policy, :last_inspected).from(42).to(10)
end
end
end
@@ -227,8 +227,8 @@ RSpec.describe AccountStatusesCleanupPolicy do
let(:status) { Fabricate(:status, account: account) }
it 'does not change the recorded id' do
- subject
- expect(account_statuses_cleanup_policy.last_inspected).to eq 42
+ expect { subject }
+ .to_not change(account_statuses_cleanup_policy, :last_inspected).from(42)
end
end
end
diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb
index 517cc4f6ae..168cbb7c91 100644
--- a/spec/models/custom_filter_spec.rb
+++ b/spec/models/custom_filter_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe CustomFilter do
+ include_examples 'Expireable'
+
describe 'Validations' do
it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_presence_of(:context) }
diff --git a/spec/models/invite_spec.rb b/spec/models/invite_spec.rb
index 4ad589f2c7..e85885a8d8 100644
--- a/spec/models/invite_spec.rb
+++ b/spec/models/invite_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe Invite do
+ include_examples 'Expireable'
+
describe '#valid_for_use?' do
it 'returns true when there are no limitations' do
invite = Fabricate(:invite, max_uses: nil, expires_at: nil)
diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb
index b85856780a..93ee72423b 100644
--- a/spec/models/ip_block_spec.rb
+++ b/spec/models/ip_block_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe IpBlock do
+ include_examples 'Expireable'
+
describe 'Validations' do
subject { Fabricate.build :ip_block }
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index cce4b30479..5f91ae0967 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -90,7 +90,7 @@ RSpec.describe MediaAttachment, :attachment_processing do
media.destroy
end
- it 'saves metadata and generates styles' do
+ it 'saves media attachment with correct file and size metadata' do
expect(media)
.to be_persisted
.and be_processing_complete
@@ -98,28 +98,18 @@ RSpec.describe MediaAttachment, :attachment_processing do
file: be_present,
type: eq('image'),
file_content_type: eq(content_type),
- file_file_name: end_with(extension),
- blurhash: have_attributes(size: eq(36))
+ file_file_name: end_with(extension)
)
+ # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension
+ expect(Rack::Mime.mime_type(extension, nil)).to eq content_type
+
# Strip original file name
expect(media.file_file_name)
.to_not start_with '600x400'
- # Generate styles
- expect(FastImage.size(media.file.path(:original)))
- .to eq [600, 400]
- expect(FastImage.size(media.file.path(:small)))
- .to eq [588, 392]
-
- # Use extension recognized by Rack::Mime (used by PublicFileServerMiddleware)
- expect(media.file.path(:original))
- .to end_with(extension)
- expect(media.file.path(:small))
- .to end_with(extension)
-
# Set meta for original and thumbnail
- expect(media_metadata)
+ expect(media.file.meta.deep_symbolize_keys)
.to include(
original: include(
width: eq(600),
@@ -132,60 +122,6 @@ RSpec.describe MediaAttachment, :attachment_processing do
aspect: eq(1.5)
)
)
-
- # Rack::Mime (used by PublicFileServerMiddleware) recognizes file extension
- expect(Rack::Mime.mime_type(extension, nil)).to eq content_type
- end
- end
-
- shared_examples 'animated 600x400 image' do
- after do
- media.destroy
- end
-
- it 'saves metadata and generates styles' do
- expect(media)
- .to be_persisted
- .and be_processing_complete
- .and have_attributes(
- file: be_present,
- type: eq('gifv'),
- file_content_type: eq('video/mp4'),
- file_file_name: end_with('.mp4'),
- blurhash: have_attributes(size: eq(36))
- )
-
- # Strip original file name
- expect(media.file_file_name)
- .to_not start_with '600x400'
-
- # Transcode to MP4
- expect(media.file.path(:original))
- .to end_with('.mp4')
-
- # Generate static thumbnail
- expect(FastImage.size(media.file.path(:small)))
- .to eq [600, 400]
- expect(FastImage.animated?(media.file.path(:small)))
- .to be false
- expect(media.file.path(:small))
- .to end_with('.png')
-
- # Set meta for styles
- expect(media_metadata)
- .to include(
- original: include(
- width: eq(600),
- height: eq(400),
- duration: eq(3),
- frame_rate: '1/1'
- ),
- small: include(
- width: eq(600),
- height: eq(400),
- aspect: eq(1.5)
- )
- )
end
end
@@ -201,10 +137,10 @@ RSpec.describe MediaAttachment, :attachment_processing do
it_behaves_like 'static 600x400 image', 'image/png', '.png'
end
- describe 'gif' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.gif')) }
+ describe 'monochrome jpg' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) }
- it_behaves_like 'static 600x400 image', 'image/gif', '.gif'
+ it_behaves_like 'static 600x400 image', 'image/png', '.png'
end
describe 'webp' do
@@ -225,12 +161,6 @@ RSpec.describe MediaAttachment, :attachment_processing do
it_behaves_like 'static 600x400 image', 'image/jpeg', '.jpeg'
end
- describe 'monochrome jpg' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) }
-
- it_behaves_like 'static 600x400 image', 'image/png', '.png'
- end
-
describe 'base64-encoded image' do
let(:base64_attachment) { "data:image/jpeg;base64,#{Base64.encode64(attachment_fixture('600x400.jpeg').read)}" }
let(:media) { Fabricate(:media_attachment, file: base64_attachment) }
@@ -239,15 +169,51 @@ RSpec.describe MediaAttachment, :attachment_processing do
end
describe 'animated gif' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.gif')) }
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) }
- it_behaves_like 'animated 600x400 image'
+ it 'sets correct file metadata' do
+ expect(media)
+ .to have_attributes(
+ type: eq('gifv'),
+ file_content_type: eq('video/mp4')
+ )
+ expect(media_metadata)
+ .to include(
+ original: include(
+ width: eq(128),
+ height: eq(128)
+ )
+ )
+ end
end
- describe 'animated png' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.png')) }
+ describe 'static gif' do
+ fixtures = [
+ { filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 },
+ { filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 },
+ ]
- it_behaves_like 'animated 600x400 image'
+ fixtures.each do |fixture|
+ context fixture[:filename] do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture(fixture[:filename])) }
+
+ it 'sets correct file metadata' do
+ expect(media)
+ .to have_attributes(
+ type: eq('image'),
+ file_content_type: eq('image/gif')
+ )
+ expect(media_metadata)
+ .to include(
+ original: include(
+ width: eq(fixture[:width]),
+ height: eq(fixture[:height]),
+ aspect: eq(fixture[:aspect])
+ )
+ )
+ end
+ end
+ end
end
describe 'ogg with cover art' do
diff --git a/spec/models/mute_spec.rb b/spec/models/mute_spec.rb
new file mode 100644
index 0000000000..33aa4f15dc
--- /dev/null
+++ b/spec/models/mute_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Mute do
+ include_examples 'Expireable'
+
+ 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 :mute }
+
+ it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:target_account_id) }
+ end
+end
diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb
index 66f521ab3f..3288119546 100644
--- a/spec/models/poll_spec.rb
+++ b/spec/models/poll_spec.rb
@@ -3,32 +3,7 @@
require 'rails_helper'
RSpec.describe Poll do
- describe 'Scopes' do
- let(:status) { Fabricate(:status) }
- let(:attached_poll) { Fabricate(:poll, status: status) }
- let(:not_attached_poll) do
- Fabricate(:poll).tap do |poll|
- poll.status = nil
- poll.save(validate: false)
- end
- end
-
- describe '.attached' do
- it 'finds the correct records' do
- results = described_class.attached
-
- expect(results).to eq([attached_poll])
- end
- end
-
- describe '.unattached' do
- it 'finds the correct records' do
- results = described_class.unattached
-
- expect(results).to eq([not_attached_poll])
- end
- end
- end
+ include_examples 'Expireable'
describe '#reset_votes!' do
let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 }
diff --git a/spec/models/user_role_spec.rb b/spec/models/user_role_spec.rb
index ecea6aee43..6cc5896786 100644
--- a/spec/models/user_role_spec.rb
+++ b/spec/models/user_role_spec.rb
@@ -18,6 +18,14 @@ RSpec.describe UserRole do
end
end
+ describe 'position' do
+ subject { Fabricate.build :user_role }
+
+ let(:limit) { described_class::POSITION_LIMIT }
+
+ it { is_expected.to validate_numericality_of(:position).is_in(-limit..limit) }
+ end
+
describe 'color' do
it { is_expected.to allow_values('#112233', '#aabbcc', '').for(:color) }
it { is_expected.to_not allow_values('x', '112233445566', '#xxyyzz').for(:color) }
diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb
index 3340e26b98..d7d0b92f11 100644
--- a/spec/requests/api/v1/media_spec.rb
+++ b/spec/requests/api/v1/media_spec.rb
@@ -137,7 +137,7 @@ RSpec.describe 'Media' do
end
context 'with image/gif', :attachment_processing do
- let(:params) { { file: fixture_file_upload('600x400.gif', 'image/gif') } }
+ let(:params) { { file: fixture_file_upload('attachment.gif', 'image/gif') } }
it_behaves_like 'a successful media upload', 'image'
end
diff --git a/spec/requests/filters_spec.rb b/spec/requests/filters_spec.rb
new file mode 100644
index 0000000000..a7b2eddc1b
--- /dev/null
+++ b/spec/requests/filters_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Filters' do
+ describe 'GET /filters' do
+ context 'with signed out user' do
+ it 'redirects to sign in page' do
+ get filters_path
+
+ expect(response)
+ .to redirect_to(new_user_session_path)
+ end
+ end
+ end
+end
diff --git a/spec/requests/statuses/activity_spec.rb b/spec/requests/statuses/activity_spec.rb
new file mode 100644
index 0000000000..20837a63a6
--- /dev/null
+++ b/spec/requests/statuses/activity_spec.rb
@@ -0,0 +1,218 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Status Activity' do
+ describe 'GET /users/:account_username/statuses/:id/activity' do
+ let(:account) { Fabricate(:account) }
+ let(:status) { Fabricate(:status, account: account) }
+
+ context 'when signed out' do
+ subject { get activity_account_status_path(account.username, status) }
+
+ context 'when account is permanently suspended' do
+ before do
+ account.suspend!
+ account.deletion_request.destroy
+ end
+
+ it 'returns http gone' do
+ subject
+
+ expect(response)
+ .to have_http_status(410)
+ end
+ end
+
+ context 'when account is temporarily suspended' do
+ before { account.suspend! }
+
+ it 'returns http forbidden' do
+ subject
+
+ expect(response)
+ .to have_http_status(403)
+ end
+ end
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when signed in' do
+ subject { get activity_account_status_path(account.username, status) }
+
+ let(:user) { Fabricate(:user) }
+
+ before { sign_in(user) }
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ context 'when user is authorized to see it' do
+ before { user.account.follow!(account) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ context 'when user is authorized to see it' do
+ before { Fabricate(:mention, account: user.account, status: status) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+ end
+
+ context 'with signature' do
+ subject { get activity_account_status_path(account.username, status), headers: nil, sign_with: remote_account }
+
+ let(:remote_account) { Fabricate(:account, domain: 'example.com') }
+
+ context 'when status is public' do
+ before { status.update(visibility: :public) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when status is private' do
+ before { status.update(visibility: :private) }
+
+ context 'when user is authorized to see it' do
+ before { remote_account.follow!(account) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+
+ context 'when status is direct' do
+ before { status.update(visibility: :direct) }
+
+ context 'when user is authorized to see it' do
+ before { Fabricate(:mention, account: remote_account, status: status) }
+
+ it 'returns http success' do
+ subject
+
+ expect(response)
+ .to have_http_status(200)
+ expect(response.content_type)
+ .to start_with('application/activity+json')
+ end
+ end
+
+ context 'when user is not authorized to see it' do
+ it 'returns http not_found' do
+ subject
+
+ expect(response)
+ .to have_http_status(404)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/accept_follow_serializer_spec.rb b/spec/serializers/activitypub/accept_follow_serializer_spec.rb
new file mode 100644
index 0000000000..0639e64b9d
--- /dev/null
+++ b/spec/serializers/activitypub/accept_follow_serializer_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::AcceptFollowSerializer do
+ subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate :follow_request }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ actor: eq(ActivityPub::TagManager.instance.uri_for(record.target_account)),
+ id: match("#accepts/follows/#{record.id}"),
+ object: include(type: 'Follow'),
+ type: 'Accept'
+ )
+ end
+ end
+end
diff --git a/spec/serializers/activitypub/reject_follow_serializer_spec.rb b/spec/serializers/activitypub/reject_follow_serializer_spec.rb
new file mode 100644
index 0000000000..10d8749178
--- /dev/null
+++ b/spec/serializers/activitypub/reject_follow_serializer_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe ActivityPub::RejectFollowSerializer do
+ subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate :follow_request }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ actor: eq(ActivityPub::TagManager.instance.uri_for(record.target_account)),
+ id: match("#rejects/follows/#{record.id}"),
+ object: include(type: 'Follow'),
+ type: 'Reject'
+ )
+ 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
index a69e1c2776..909fde39b3 100644
--- a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
+++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
@@ -11,14 +11,9 @@ RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do
it 'returns expected values' do
expect(subject)
.to include(
- 'id' => be_a(String).and(eq('123'))
+ 'id' => be_a(String).and(eq('123')),
+ 'created_at' => match_api_datetime_format
)
end
end
-
- context 'when created_at is populated' do
- it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
- end
- end
end
diff --git a/spec/serializers/rest/account_serializer/field_serializer_spec.rb b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
index 57f2b529c5..6d97fa573e 100644
--- a/spec/serializers/rest/account_serializer/field_serializer_spec.rb
+++ b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
@@ -6,14 +6,16 @@ RSpec.describe REST::AccountSerializer::FieldSerializer do
subject { serialized_record_json(field, described_class) }
let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
- let(:user) { Fabricate(:user) }
- let(:account) { user.account }
+ let(:account) { Fabricate.build :account }
context 'when verified_at is populated' do
let(:field) { Account::Field.new(account, 'name' => 'Foo', 'value' => 'Bar', 'verified_at' => default_datetime) }
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['verified_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'verified_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb
index 37c6a776b0..5fd4f8d706 100644
--- a/spec/serializers/rest/account_serializer_spec.rb
+++ b/spec/serializers/rest/account_serializer_spec.rb
@@ -52,7 +52,10 @@ RSpec.describe REST::AccountSerializer do
end
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb
index ea2e48fbb4..a7a9dc5f63 100644
--- a/spec/serializers/rest/account_warning_serializer_spec.rb
+++ b/spec/serializers/rest/account_warning_serializer_spec.rb
@@ -12,9 +12,9 @@ RSpec.describe REST::AccountWarningSerializer do
expect(subject)
.to include(
'id' => be_a(String).and(eq('123')),
- 'status_ids' => be_a(Array).and(eq(['456', '789']))
+ 'status_ids' => be_a(Array).and(eq(['456', '789'])),
+ 'created_at' => match_api_datetime_format
)
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
end
end
end
diff --git a/spec/serializers/rest/admin/account_serializer_spec.rb b/spec/serializers/rest/admin/account_serializer_spec.rb
index ac7cec0bae..5f617207a7 100644
--- a/spec/serializers/rest/admin/account_serializer_spec.rb
+++ b/spec/serializers/rest/admin/account_serializer_spec.rb
@@ -9,7 +9,10 @@ RSpec.describe REST::Admin::AccountSerializer do
let(:record) { Fabricate :account, user: Fabricate(:user) }
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb
index a2bd8fbfa2..1305f901bb 100644
--- a/spec/serializers/rest/admin/cohort_serializer_spec.rb
+++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb
@@ -11,11 +11,11 @@ RSpec.describe REST::Admin::CohortSerializer do
it 'returns expected values' do
expect(subject)
.to include(
- 'data' => be_a(Array),
- 'period' => /2024-01-01/
+ 'data' => be_a(Array).and(
+ all(include('date' => match_api_datetime_format))
+ ),
+ 'period' => match(/2024-01-01/).and(match_api_datetime_format)
)
- expect { DateTime.rfc3339(subject['period']) }.to_not raise_error
- subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error }
end
end
end
diff --git a/spec/serializers/rest/admin/domain_allow_serializer_spec.rb b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
index 39c013d31c..ace35176a7 100644
--- a/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
+++ b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
@@ -9,7 +9,10 @@ RSpec.describe REST::Admin::DomainAllowSerializer do
context 'when created_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/domain_block_serializer_spec.rb b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
index 5ab3ddc169..37d658b1f7 100644
--- a/spec/serializers/rest/admin/domain_block_serializer_spec.rb
+++ b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
@@ -9,7 +9,10 @@ RSpec.describe REST::Admin::DomainBlockSerializer do
context 'when created_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
index 2a1501a158..e146040e24 100644
--- a/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
+++ b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
@@ -9,7 +9,10 @@ RSpec.describe REST::Admin::EmailDomainBlockSerializer do
context 'when created_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/ip_block_serializer_spec.rb b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
index c1239b5057..8a68161fc2 100644
--- a/spec/serializers/rest/admin/ip_block_serializer_spec.rb
+++ b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
@@ -5,19 +5,15 @@ require 'rails_helper'
RSpec.describe REST::Admin::IpBlockSerializer do
subject { serialized_record_json(record, described_class) }
- let(:record) { Fabricate(:ip_block) }
-
- context 'when created_at is populated' do
- it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
- end
- end
-
- context 'when expires_at is populated' do
+ context 'when timestamps are populated' do
let(:record) { Fabricate(:ip_block, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0)) }
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format,
+ 'expires_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/ip_serializer_spec.rb b/spec/serializers/rest/admin/ip_serializer_spec.rb
index f93eada759..5aabf74756 100644
--- a/spec/serializers/rest/admin/ip_serializer_spec.rb
+++ b/spec/serializers/rest/admin/ip_serializer_spec.rb
@@ -9,7 +9,10 @@ RSpec.describe REST::Admin::IpSerializer do
context 'when used_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['used_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'used_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/measure_serializer_spec.rb b/spec/serializers/rest/admin/measure_serializer_spec.rb
index 08c7170a4a..e158d9d9ba 100644
--- a/spec/serializers/rest/admin/measure_serializer_spec.rb
+++ b/spec/serializers/rest/admin/measure_serializer_spec.rb
@@ -12,7 +12,12 @@ RSpec.describe REST::Admin::MeasureSerializer do
context 'when start_at is populated' do
it 'parses as RFC 3339 datetime' do
- subject['data'].each { |datum| expect { DateTime.rfc3339(datum['date']) }.to_not raise_error }
+ expect(subject)
+ .to include(
+ 'data' => all(
+ include('date' => match_api_datetime_format)
+ )
+ )
end
end
end
diff --git a/spec/serializers/rest/admin/report_serializer_spec.rb b/spec/serializers/rest/admin/report_serializer_spec.rb
index c0f841d6bf..78d7d4f10a 100644
--- a/spec/serializers/rest/admin/report_serializer_spec.rb
+++ b/spec/serializers/rest/admin/report_serializer_spec.rb
@@ -5,23 +5,15 @@ require 'rails_helper'
RSpec.describe REST::Admin::ReportSerializer do
subject { serialized_record_json(report, described_class) }
- let(:report) { Fabricate(:report) }
-
- context 'with created_at' do
- it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
- end
- end
-
- context 'with action_taken_at' do
- let(:acting_account) { Fabricate(:account) }
-
- before do
- report.resolve!(acting_account)
- end
+ context 'with timestamps' do
+ let(:report) { Fabricate(:report, action_taken_at: 3.days.ago) }
it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'action_taken_at' => match_api_datetime_format,
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/announcement_serializer_spec.rb b/spec/serializers/rest/announcement_serializer_spec.rb
index 6b746e5c2f..ee0acab981 100644
--- a/spec/serializers/rest/announcement_serializer_spec.rb
+++ b/spec/serializers/rest/announcement_serializer_spec.rb
@@ -19,10 +19,13 @@ RSpec.describe REST::AnnouncementSerializer do
context 'when date fields are populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['starts_at']) }.to_not raise_error
- expect { DateTime.rfc3339(subject['ends_at']) }.to_not raise_error
- expect { DateTime.rfc3339(subject['published_at']) }.to_not raise_error
- expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'starts_at' => match_api_datetime_format,
+ 'ends_at' => match_api_datetime_format,
+ 'published_at' => match_api_datetime_format,
+ 'updated_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/annual_report_event_serializer_spec.rb b/spec/serializers/rest/annual_report_event_serializer_spec.rb
new file mode 100644
index 0000000000..b595bf3e36
--- /dev/null
+++ b/spec/serializers/rest/annual_report_event_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AnnualReportEventSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ describe 'serializing an object' do
+ let(:record) { Fabricate.build :generated_annual_report, year: 2024 }
+
+ it 'returns expected attributes' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ year: '2024'
+ )
+ end
+ end
+end
diff --git a/spec/serializers/rest/filter_serializer_spec.rb b/spec/serializers/rest/filter_serializer_spec.rb
index c2c0e1635a..4d38a29acb 100644
--- a/spec/serializers/rest/filter_serializer_spec.rb
+++ b/spec/serializers/rest/filter_serializer_spec.rb
@@ -10,11 +10,14 @@ RSpec.describe REST::FilterSerializer do
)
end
- let(:filter) { Fabricate :custom_filter, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0) }
+ let(:filter) { Fabricate.build :custom_filter, expires_at: DateTime.new(2024, 11, 28, 16, 20, 0) }
context 'when expires_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'expires_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/marker_serializer_spec.rb b/spec/serializers/rest/marker_serializer_spec.rb
index 8b8285c9e8..58266319eb 100644
--- a/spec/serializers/rest/marker_serializer_spec.rb
+++ b/spec/serializers/rest/marker_serializer_spec.rb
@@ -14,7 +14,10 @@ RSpec.describe REST::MarkerSerializer do
context 'when updated_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'updated_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/muted_account_serializer_spec.rb b/spec/serializers/rest/muted_account_serializer_spec.rb
index 2a6dd9fe17..2db3f7be95 100644
--- a/spec/serializers/rest/muted_account_serializer_spec.rb
+++ b/spec/serializers/rest/muted_account_serializer_spec.rb
@@ -25,7 +25,10 @@ RSpec.describe REST::MutedAccountSerializer do
end
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['mute_expires_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'mute_expires_at' => match_api_datetime_format
+ )
end
end
diff --git a/spec/serializers/rest/notification_group_serializer_spec.rb b/spec/serializers/rest/notification_group_serializer_spec.rb
index 2a1293292d..01fd8ce0a1 100644
--- a/spec/serializers/rest/notification_group_serializer_spec.rb
+++ b/spec/serializers/rest/notification_group_serializer_spec.rb
@@ -14,7 +14,10 @@ RSpec.describe REST::NotificationGroupSerializer do
context 'when latest_page_notification_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['latest_page_notification_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'latest_page_notification_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/notification_request_serializer_spec.rb b/spec/serializers/rest/notification_request_serializer_spec.rb
index 34332679d6..6dc4b04f5c 100644
--- a/spec/serializers/rest/notification_request_serializer_spec.rb
+++ b/spec/serializers/rest/notification_request_serializer_spec.rb
@@ -17,15 +17,13 @@ RSpec.describe REST::NotificationRequestSerializer do
let(:current_user) { Fabricate(:user) }
let(:notification_request) { Fabricate :notification_request }
- context 'when created_at is populated' do
+ context 'when timestampts are populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
- end
- end
-
- context 'when updated_at is populated' do
- it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['updated_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format,
+ 'updated_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/notification_serializer_spec.rb b/spec/serializers/rest/notification_serializer_spec.rb
index 7296c1b935..b833bcb6e1 100644
--- a/spec/serializers/rest/notification_serializer_spec.rb
+++ b/spec/serializers/rest/notification_serializer_spec.rb
@@ -14,7 +14,10 @@ RSpec.describe REST::NotificationSerializer do
context 'when created_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/poll_serializer_spec.rb b/spec/serializers/rest/poll_serializer_spec.rb
index 71ed9deb3e..3837ac1984 100644
--- a/spec/serializers/rest/poll_serializer_spec.rb
+++ b/spec/serializers/rest/poll_serializer_spec.rb
@@ -15,11 +15,14 @@ RSpec.describe REST::PollSerializer do
end
let(:current_user) { Fabricate(:user) }
- let(:poll) { Fabricate :poll }
+ let(:poll) { Fabricate.build :poll, expires_at: 5.days.from_now }
context 'when expires_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['expires_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'expires_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/report_serializer_spec.rb b/spec/serializers/rest/report_serializer_spec.rb
index 5cbeb0fee0..180cdbdb68 100644
--- a/spec/serializers/rest/report_serializer_spec.rb
+++ b/spec/serializers/rest/report_serializer_spec.rb
@@ -10,24 +10,15 @@ RSpec.describe REST::ReportSerializer do
)
end
- let(:status) { Fabricate(:status) }
- let(:report) { Fabricate(:report, status_ids: [status.id]) }
-
- context 'with created_at' do
- it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
- end
- end
-
- context 'with action_taken_at' do
- let(:acting_account) { Fabricate(:account) }
-
- before do
- report.resolve!(acting_account)
- end
+ context 'with timestamps' do
+ let(:report) { Fabricate(:report, action_taken_at: 3.days.ago) }
it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format,
+ 'action_taken_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/scheduled_status_serializer_spec.rb b/spec/serializers/rest/scheduled_status_serializer_spec.rb
index 7d0d7c96bb..08ad8a6f8a 100644
--- a/spec/serializers/rest/scheduled_status_serializer_spec.rb
+++ b/spec/serializers/rest/scheduled_status_serializer_spec.rb
@@ -10,12 +10,15 @@ RSpec.describe REST::ScheduledStatusSerializer do
)
end
- let(:account) { Fabricate(:account) }
- let(:scheduled_status) { Fabricate.build(:scheduled_status, scheduled_at: 4.minutes.from_now, account: account) }
+ let(:scheduled_status) { Fabricate.build(:scheduled_status, scheduled_at: 4.minutes.from_now, params: { application_id: 123 }) }
- context 'with scheduled_at' do
- it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['scheduled_at']) }.to_not raise_error
+ describe 'serialization' do
+ it 'returns expected values and removes application_id from params' do
+ expect(subject.deep_symbolize_keys)
+ .to include(
+ scheduled_at: be_a(String).and(match_api_datetime_format),
+ params: not_include(:application_id)
+ )
end
end
end
diff --git a/spec/serializers/rest/status_edit_serializer_spec.rb b/spec/serializers/rest/status_edit_serializer_spec.rb
index 1f5ac54b7b..95590d1f96 100644
--- a/spec/serializers/rest/status_edit_serializer_spec.rb
+++ b/spec/serializers/rest/status_edit_serializer_spec.rb
@@ -14,7 +14,10 @@ RSpec.describe REST::StatusEditSerializer do
context 'when created_at is populated' do
it 'parses as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
end
diff --git a/spec/serializers/rest/status_serializer_spec.rb b/spec/serializers/rest/status_serializer_spec.rb
index ca0591eb69..b6908aa414 100644
--- a/spec/serializers/rest/status_serializer_spec.rb
+++ b/spec/serializers/rest/status_serializer_spec.rb
@@ -54,7 +54,10 @@ RSpec.describe REST::StatusSerializer do
context 'with created_at' do
it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'created_at' => match_api_datetime_format
+ )
end
end
@@ -62,7 +65,10 @@ RSpec.describe REST::StatusSerializer do
let(:status) { Fabricate.build :status, edited_at: 3.days.ago }
it 'is serialized as RFC 3339 datetime' do
- expect { DateTime.rfc3339(subject['edited_at']) }.to_not raise_error
+ expect(subject)
+ .to include(
+ 'edited_at' => match_api_datetime_format
+ )
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 238c49da75..63feb68570 100644
--- a/spec/services/activitypub/process_status_update_service_spec.rb
+++ b/spec/services/activitypub/process_status_update_service_spec.rb
@@ -262,16 +262,22 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
updated: '2021-09-08T22:39:25Z',
tag: [
{ type: 'Hashtag', name: 'foo' },
+ { type: 'Hashtag', name: 'bar' },
],
}
end
before do
- subject.call(status, json, json)
+ status.account.featured_tags.create!(name: 'bar')
+ status.account.featured_tags.create!(name: 'test')
end
- it 'updates tags' do
- expect(status.tags.reload.map(&:name)).to eq %w(foo)
+ it 'updates tags and featured tags' do
+ expect { subject.call(status, json, json) }
+ .to change { status.tags.reload.pluck(:name) }.from(%w(test foo)).to(%w(foo bar))
+ .and change { status.account.featured_tags.find_by(name: 'test').statuses_count }.by(-1)
+ .and change { status.account.featured_tags.find_by(name: 'bar').statuses_count }.by(1)
+ .and change { status.account.featured_tags.find_by(name: 'bar').last_status_at }.from(nil).to(be_within(0.1).of(Time.now.utc))
end
end
diff --git a/spec/support/examples/models/concerns/expireable.rb b/spec/support/examples/models/concerns/expireable.rb
new file mode 100644
index 0000000000..098b98375a
--- /dev/null
+++ b/spec/support/examples/models/concerns/expireable.rb
@@ -0,0 +1,110 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'Expireable' do
+ subject { described_class.new(expires_at: expires_at) }
+
+ let(:expires_at) { nil }
+
+ describe 'Scopes' do
+ let!(:expired_record) do
+ travel_to 2.days.ago do
+ Fabricate factory_name, expires_at: 1.day.from_now
+ end
+ end
+ let!(:un_expired_record) { Fabricate factory_name, expires_at: 10.days.from_now }
+
+ describe '.expired' do
+ it 'returns expired records' do
+ expect(described_class.expired)
+ .to include(expired_record)
+ .and not_include(un_expired_record)
+ end
+ end
+ end
+
+ describe '#expires_in' do
+ context 'when expires at is nil' do
+ let(:expires_at) { nil }
+
+ it 'returns nil' do
+ expect(subject.expires_in)
+ .to be_nil
+ end
+ end
+ end
+
+ describe '#expires_in=' do
+ let(:record) { Fabricate.build factory_name }
+
+ context 'when set to nil' do
+ it 'sets expires_at to nil' do
+ record.expires_in = nil
+ expect(record.expires_at)
+ .to be_nil
+ end
+ end
+
+ context 'when set to empty' do
+ it 'sets expires_at to nil' do
+ record.expires_in = ''
+ expect(record.expires_at)
+ .to be_nil
+ end
+ end
+
+ context 'when set to a value' do
+ it 'sets expires_at to expected future time' do
+ record.expires_in = 60
+ expect(record.expires_at)
+ .to be_within(0.1).of(60.seconds.from_now)
+ end
+ end
+ end
+
+ describe '#expired?' do
+ context 'when expires_at is nil' do
+ let(:expires_at) { nil }
+
+ it { is_expected.to_not be_expired }
+ end
+
+ context 'when expires_at is in the past' do
+ let(:expires_at) { 5.days.ago }
+
+ it { is_expected.to be_expired }
+ end
+
+ context 'when expires_at is in the future' do
+ let(:expires_at) { 5.days.from_now }
+
+ it { is_expected.to_not be_expired }
+ end
+
+ describe '#expire!' do
+ subject { Fabricate factory_name }
+
+ it 'updates the timestamp' do
+ expect { subject.expire! }
+ .to change(subject, :expires_at)
+ end
+ end
+
+ describe '#expires?' do
+ context 'when value is missing' do
+ let(:expires_at) { nil }
+
+ it { is_expected.to_not be_expires }
+ end
+
+ context 'when value is present' do
+ let(:expires_at) { 3.days.from_now }
+
+ it { is_expected.to be_expires }
+ end
+ end
+ end
+
+ def factory_name
+ described_class.name.underscore.to_sym
+ end
+end
diff --git a/spec/support/matchers/api_datetime_format.rb b/spec/support/matchers/api_datetime_format.rb
new file mode 100644
index 0000000000..d19c909438
--- /dev/null
+++ b/spec/support/matchers/api_datetime_format.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+RSpec::Matchers.define :match_api_datetime_format do
+ match(notify_expectation_failures: true) do |value|
+ expect { DateTime.rfc3339(value) }
+ .to_not raise_error
+ end
+end
diff --git a/spec/system/admin/account_moderation_notes_spec.rb b/spec/system/admin/account_moderation_notes_spec.rb
new file mode 100644
index 0000000000..5d195143c2
--- /dev/null
+++ b/spec/system/admin/account_moderation_notes_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin::AccountModerationNotes' do
+ let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+ let(:target_account) { Fabricate(:account) }
+
+ before { sign_in current_user }
+
+ describe 'Managing account moderation note' do
+ it 'saves and then deletes a record' do
+ visit admin_account_path(target_account.id)
+
+ fill_in 'account_moderation_note_content', with: ''
+ expect { submit_form }
+ .to not_change(AccountModerationNote, :count)
+ expect(page)
+ .to have_content(/error below/)
+
+ fill_in 'account_moderation_note_content', with: 'Test message'
+ expect { submit_form }
+ .to change(AccountModerationNote, :count).by(1)
+ expect(page)
+ .to have_content(I18n.t('admin.account_moderation_notes.created_msg'))
+
+ expect { delete_note }
+ .to change(AccountModerationNote, :count).by(-1)
+ expect(page)
+ .to have_content(I18n.t('admin.account_moderation_notes.destroyed_msg'))
+ end
+
+ def submit_form
+ click_on I18n.t('admin.account_moderation_notes.create')
+ end
+
+ def delete_note
+ within('.report-notes__item__actions') do
+ click_on I18n.t('admin.reports.notes.delete')
+ end
+ end
+ end
+end
diff --git a/spec/system/admin/custom_emojis_spec.rb b/spec/system/admin/custom_emojis_spec.rb
index e47f21f8a9..d597e30313 100644
--- a/spec/system/admin/custom_emojis_spec.rb
+++ b/spec/system/admin/custom_emojis_spec.rb
@@ -5,8 +5,43 @@ require 'rails_helper'
RSpec.describe 'Admin::CustomEmojis' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- before do
- sign_in current_user
+ before { sign_in current_user }
+
+ describe 'Listing existing emoji' do
+ let!(:custom_emoji) { Fabricate :custom_emoji }
+
+ it 'Shows records' do
+ visit admin_custom_emojis_path
+
+ expect(page)
+ .to have_content(I18n.t('admin.custom_emojis.title'))
+ .and have_content(custom_emoji.shortcode)
+ end
+ end
+
+ describe 'Creating a new emoji' do
+ it 'saves a new emoji record with valid attributes' do
+ visit new_admin_custom_emoji_path
+ expect(page)
+ .to have_content(I18n.t('admin.custom_emojis.title'))
+
+ expect { submit_form }
+ .to_not change(CustomEmoji, :count)
+ expect(page)
+ .to have_content(/errors below/)
+
+ fill_in I18n.t('admin.custom_emojis.shortcode'),
+ with: 'test'
+ attach_file 'custom_emoji_image',
+ Rails.root.join('spec', 'fixtures', 'files', 'emojo.png')
+
+ expect { submit_form }
+ .to change(CustomEmoji, :count).by(1)
+ end
+
+ def submit_form
+ click_on I18n.t('admin.custom_emojis.upload')
+ end
end
describe 'Performing batch updates' do
diff --git a/spec/system/admin/domain_allows_spec.rb b/spec/system/admin/domain_allows_spec.rb
new file mode 100644
index 0000000000..1c462ff7cc
--- /dev/null
+++ b/spec/system/admin/domain_allows_spec.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin::DomainAllows' do
+ let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+ let(:domain) { 'host.example' }
+
+ before do
+ Fabricate :account, domain: domain
+ Instance.refresh
+ sign_in user
+ end
+
+ around do |example|
+ original = Rails.configuration.x.limited_federation_mode
+ Rails.configuration.x.limited_federation_mode = true
+
+ example.run
+
+ Rails.configuration.x.limited_federation_mode = original
+ end
+
+ describe 'Managing domain allows' do
+ it 'saves and then deletes a record' do
+ # Visit new page
+ visit new_admin_domain_allow_path
+ click_on I18n.t('admin.domain_allows.add_new')
+ expect(page)
+ .to have_content(I18n.t('admin.domain_allows.add_new'))
+
+ # Submit invalid with missing domain
+ fill_in 'domain_allow_domain', with: ''
+ expect { submit_form }
+ .to not_change(DomainAllow, :count)
+ expect(page)
+ .to have_content(/error below/)
+
+ # Submit valid with domain present
+ fill_in 'domain_allow_domain', with: domain
+ expect { submit_form }
+ .to change(DomainAllow, :count).by(1)
+ expect(page)
+ .to have_content(I18n.t('admin.domain_allows.created_msg'))
+
+ # Visit instance page and delete the domain allow
+ visit admin_instance_path(domain)
+ expect { delete_domain_allow }
+ .to change(DomainAllow, :count).by(-1)
+ expect(page)
+ .to have_content(I18n.t('admin.domain_allows.destroyed_msg'))
+ end
+
+ def submit_form
+ click_on I18n.t('admin.domain_allows.add_new')
+ end
+
+ def delete_domain_allow
+ click_on I18n.t('admin.domain_allows.undo')
+ end
+ end
+end
diff --git a/spec/system/admin/ip_blocks_spec.rb b/spec/system/admin/ip_blocks_spec.rb
index 9c03520277..c101b8e1c6 100644
--- a/spec/system/admin/ip_blocks_spec.rb
+++ b/spec/system/admin/ip_blocks_spec.rb
@@ -5,20 +5,46 @@ require 'rails_helper'
RSpec.describe 'Admin::IpBlocks' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
- before do
- sign_in current_user
+ before { sign_in current_user }
+
+ describe 'Creating an IP Block' do
+ it 'lists blocks and creates new ones' do
+ # Visit index page
+ visit admin_ip_blocks_path
+ expect(page)
+ .to have_content(I18n.t('admin.ip_blocks.title'))
+
+ # Navigate to new
+ click_on I18n.t('admin.ip_blocks.add_new')
+
+ # Invalid with missing IP
+ fill_in 'ip_block_ip', with: ''
+ expect { submit_form }
+ .to_not change(IpBlock, :count)
+ expect(page)
+ .to have_content(/error below/)
+
+ # Valid with IP
+ fill_in 'ip_block_ip', with: '192.168.1.1'
+ expect { submit_form }
+ .to change(IpBlock, :count).by(1)
+ expect(page)
+ .to have_content(I18n.t('admin.ip_blocks.created_msg'))
+ end
+
+ def submit_form
+ click_on I18n.t('admin.ip_blocks.add_new')
+ end
end
describe 'Performing batch updates' do
- before do
- visit admin_ip_blocks_path
- end
-
context 'without selecting any records' do
it 'displays a notice about selection' do
- click_on button_for_delete
+ visit admin_ip_blocks_path
- expect(page).to have_content(selection_error_text)
+ click_on button_for_delete
+ expect(page)
+ .to have_content(selection_error_text)
end
end
diff --git a/spec/system/admin/webhooks_spec.rb b/spec/system/admin/webhooks_spec.rb
new file mode 100644
index 0000000000..69e8a7d69f
--- /dev/null
+++ b/spec/system/admin/webhooks_spec.rb
@@ -0,0 +1,117 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin Webhooks' do
+ describe 'Managing webhooks' do
+ before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
+
+ describe 'Viewing webhooks' do
+ let!(:webhook) { Fabricate :webhook }
+
+ it 'lists existing records' do
+ visit admin_webhooks_path
+
+ expect(page)
+ .to have_content(I18n.t('admin.webhooks.title'))
+ .and have_content(webhook.url)
+
+ click_on(webhook.url)
+ expect(page)
+ .to have_content(I18n.t('admin.webhooks.title'))
+ end
+ end
+
+ describe 'Creating a new webhook' do
+ it 'creates new record with valid attributes' do
+ visit admin_webhooks_path
+
+ # Visit new page
+ click_on I18n.t('admin.webhooks.add_new')
+ expect(page)
+ .to have_content(I18n.t('admin.webhooks.new'))
+
+ # Invalid submission (missing url, no events selected)
+ fill_in 'webhook_url', with: ''
+ expect { submit_form }
+ .to_not change(Webhook, :count)
+ expect(page)
+ .to have_content(/errors below/)
+
+ # Valid submission
+ fill_in 'webhook_url', with: 'https://host.example/hooks/123'
+ check Webhook::EVENTS.first
+ expect { submit_form }
+ .to change(Webhook, :count).by(1)
+ expect(page)
+ .to have_content(I18n.t('admin.webhooks.title'))
+ end
+
+ it 'fails to create with no events selected' do
+ visit new_admin_webhook_path
+
+ fill_in 'webhook_url', with: 'https://host.example/hooks/123'
+ expect { submit_form }
+ .to_not change(Webhook, :count)
+ expect(page)
+ .to have_content(/errors below/)
+ end
+
+ def submit_form
+ click_on I18n.t('admin.webhooks.add_new')
+ end
+ end
+
+ describe 'Editing an existing webhook' do
+ let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first] }
+
+ it 'updates with valid attributes' do
+ visit admin_webhook_path(webhook)
+
+ # Invalid submission (missing url)
+ click_on I18n.t('admin.webhooks.edit')
+ fill_in 'webhook_url', with: ''
+ expect { submit_form }
+ .to_not change(webhook.reload, :updated_at)
+
+ # Valid update
+ fill_in 'webhook_url', with: 'https://host.example/new/value/123'
+ expect { submit_form }
+ .to_not change(webhook.reload, :url)
+ end
+
+ def submit_form
+ click_on I18n.t('generic.save_changes')
+ end
+ end
+
+ describe 'Destroy a webhook' do
+ let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first] }
+
+ it 'removes the record' do
+ visit admin_webhooks_path
+
+ expect { click_on I18n.t('admin.webhooks.delete') }
+ .to change(Webhook, :count).by(-1)
+ expect { webhook.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
+ describe 'Toggle state of webhook' do
+ let!(:webhook) { Fabricate :webhook, events: [Webhook::EVENTS.first], enabled: true }
+
+ it 'switches enabled and disabled as requested' do
+ visit admin_webhook_path(webhook)
+
+ # Disable the initially enabled record
+ expect { click_on I18n.t('admin.webhooks.disable') }
+ .to change { webhook.reload.enabled? }.to(false)
+
+ # Re-enable the record
+ expect { click_on I18n.t('admin.webhooks.enable') }
+ .to change { webhook.reload.enabled? }.to(true)
+ end
+ end
+ end
+end
diff --git a/spec/system/filters_spec.rb b/spec/system/filters_spec.rb
index 64de384c00..e681c6940e 100644
--- a/spec/system/filters_spec.rb
+++ b/spec/system/filters_spec.rb
@@ -8,6 +8,18 @@ RSpec.describe 'Filters' do
before { sign_in(user) }
+ describe 'Viewing existing filters' do
+ before { Fabricate :custom_filter, account: user.account, phrase: 'Photography' }
+
+ it 'shows a list of user filters' do
+ visit filters_path
+
+ expect(page)
+ .to have_content('Photography')
+ .and have_private_cache_control
+ end
+ end
+
describe 'Creating a filter' do
it 'Populates a new filter from form' do
navigate_to_filters
@@ -16,12 +28,22 @@ RSpec.describe 'Filters' do
fill_in_filter_form
expect(page).to have_content(filter_title)
end
+
+ it 'Does not save with invalid values' do
+ navigate_to_filters
+ click_on I18n.t('filters.new.title')
+
+ expect { click_on I18n.t('filters.new.save') }
+ .to_not change(CustomFilter, :count)
+ expect(page)
+ .to have_content("can't be blank")
+ end
end
describe 'Editing an existing filter' do
let(:new_title) { 'Change title value' }
- before { Fabricate :custom_filter, account: user.account, title: filter_title }
+ let!(:custom_filter) { Fabricate :custom_filter, account: user.account, title: filter_title }
it 'Updates the saved filter' do
navigate_to_filters
@@ -33,6 +55,18 @@ RSpec.describe 'Filters' do
expect(page).to have_content(new_title)
end
+
+ it 'Does not save with invalid values' do
+ navigate_to_filters
+ click_on filter_title
+
+ fill_in filter_title_field, with: ''
+
+ expect { click_on submit_button }
+ .to_not(change { custom_filter.reload.updated_at })
+ expect(page)
+ .to have_content("can't be blank")
+ end
end
describe 'Destroying an existing filter' do
diff --git a/spec/system/settings/login_activities_spec.rb b/spec/system/settings/login_activities_spec.rb
new file mode 100644
index 0000000000..ff89c3f37e
--- /dev/null
+++ b/spec/system/settings/login_activities_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Login activities page' do
+ let!(:user) { Fabricate :user }
+ let!(:login_activity) { Fabricate :login_activity, user: user }
+
+ context 'when signed in' do
+ before { sign_in user }
+
+ describe 'Viewing the login activities page' do
+ it 'shows the login activity history' do
+ visit edit_user_registration_path
+
+ click_on I18n.t('sessions.view_authentication_history')
+
+ expect(page)
+ .to have_content(browser_description)
+ .and have_content(login_activity.authentication_method)
+ .and have_content(login_activity.ip)
+ .and have_private_cache_control
+ end
+
+ def browser_description
+ I18n.t(
+ 'sessions.description',
+ browser: I18n.t("sessions.browsers.#{login_activity.browser}", default: login_activity.browser),
+ platform: I18n.t("sessions.platforms.#{login_activity.platform}", default: login_activity.platform)
+ )
+ end
+ end
+ end
+end
diff --git a/spec/system/settings/preferences/appearance_spec.rb b/spec/system/settings/preferences/appearance_spec.rb
new file mode 100644
index 0000000000..0b6f1e4b15
--- /dev/null
+++ b/spec/system/settings/preferences/appearance_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Settings preferences appearance page' do
+ let(:user) { Fabricate :user }
+
+ before { sign_in user }
+
+ it 'Views and updates user prefs' do
+ visit settings_preferences_appearance_path
+
+ expect(page)
+ .to have_private_cache_control
+
+ select 'contrast', from: theme_selection_field
+ check confirm_reblog_field
+ uncheck confirm_delete_field
+
+ expect { save_changes }
+ .to change { user.reload.settings.theme }.to('contrast')
+ .and change { user.reload.settings['web.reblog_modal'] }.to(true)
+ .and(change { user.reload.settings['web.delete_modal'] }.to(false))
+ expect(page)
+ .to have_title(I18n.t('settings.appearance'))
+ end
+
+ def save_changes
+ within('form') { click_on submit_button }
+ end
+
+ def confirm_delete_field
+ I18n.t('simple_form.labels.defaults.setting_delete_modal')
+ end
+
+ def confirm_reblog_field
+ I18n.t('simple_form.labels.defaults.setting_boost_modal')
+ end
+
+ def theme_selection_field
+ I18n.t('simple_form.labels.defaults.setting_theme')
+ end
+end
diff --git a/spec/system/settings/preferences/notifications_spec.rb b/spec/system/settings/preferences/notifications_spec.rb
new file mode 100644
index 0000000000..20ff549222
--- /dev/null
+++ b/spec/system/settings/preferences/notifications_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Settings preferences notifications page' do
+ let(:user) { Fabricate :user }
+
+ before { sign_in user }
+
+ it 'Views and updates user prefs' do
+ visit settings_preferences_notifications_path
+
+ expect(page)
+ .to have_private_cache_control
+
+ uncheck notifications_follow_field
+
+ expect { click_on submit_button }
+ .to change { user.reload.settings['notification_emails.follow'] }.to(false)
+ expect(page)
+ .to have_title(I18n.t('settings.notifications'))
+ end
+
+ def notifications_follow_field
+ I18n.t('simple_form.labels.notification_emails.follow')
+ end
+end
diff --git a/spec/system/settings/preferences/other_spec.rb b/spec/system/settings/preferences/other_spec.rb
new file mode 100644
index 0000000000..7cc15f87a4
--- /dev/null
+++ b/spec/system/settings/preferences/other_spec.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Settings preferences other page' do
+ let(:user) { Fabricate :user }
+
+ before { sign_in user }
+
+ it 'Views and updates user prefs' do
+ visit settings_preferences_other_path
+
+ expect(page)
+ .to have_private_cache_control
+
+ check language_field(:es)
+ check language_field(:fr)
+ check mark_sensitive_field
+
+ expect { save_changes }
+ .to change { user.reload.chosen_languages }.to(%w(es fr))
+ .and(change { user.reload.settings.default_sensitive }.to(true))
+ expect(page)
+ .to have_title(I18n.t('settings.preferences'))
+ end
+
+ def save_changes
+ within('form') { click_on submit_button }
+ end
+
+ def mark_sensitive_field
+ I18n.t('simple_form.labels.defaults.setting_default_sensitive')
+ end
+
+ def language_field(key)
+ LanguagesHelper::SUPPORTED_LOCALES[key].last
+ end
+end
diff --git a/spec/system/settings/profiles_spec.rb b/spec/system/settings/profiles_spec.rb
new file mode 100644
index 0000000000..73a5751141
--- /dev/null
+++ b/spec/system/settings/profiles_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Settings profile page' do
+ let(:user) { Fabricate :user }
+ let(:account) { user.account }
+
+ before do
+ allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
+ sign_in user
+ end
+
+ it 'Views and updates profile information' do
+ visit settings_profile_path
+
+ expect(page)
+ .to have_private_cache_control
+
+ fill_in display_name_field, with: 'New name'
+ attach_file avatar_field, Rails.root.join('spec', 'fixtures', 'files', 'avatar.gif')
+
+ expect { click_on submit_button }
+ .to change { account.reload.display_name }.to('New name')
+ .and(change { account.reload.avatar.instance.avatar_file_name }.from(nil).to(be_present))
+ expect(ActivityPub::UpdateDistributionWorker)
+ .to have_received(:perform_async).with(account.id)
+ end
+
+ def display_name_field
+ I18n.t('simple_form.labels.defaults.display_name')
+ end
+
+ def avatar_field
+ I18n.t('simple_form.labels.defaults.avatar')
+ end
+end
diff --git a/spec/system/statuses_cleanup_spec.rb b/spec/system/statuses_cleanup_spec.rb
new file mode 100644
index 0000000000..524f710af7
--- /dev/null
+++ b/spec/system/statuses_cleanup_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Automated post deletion settings' do
+ let(:user) { Fabricate :user }
+ let(:account) { user.account }
+
+ describe 'Updating settings' do
+ before { sign_in user }
+
+ it 'visits the page and updates the policy' do
+ visit statuses_cleanup_path
+ expect(page)
+ .to have_private_cache_control
+
+ check I18n.t('statuses_cleanup.enabled')
+ submit_form
+ expect(account.reload.statuses_cleanup_policy)
+ .to be_enabled
+
+ uncheck I18n.t('statuses_cleanup.keep_pinned')
+ expect { submit_form }
+ .to change { account.reload.statuses_cleanup_policy.keep_pinned? }.to(false)
+ expect(page)
+ .to have_content(I18n.t('settings.statuses_cleanup'))
+ end
+
+ def submit_form
+ click_on submit_button
+ end
+ end
+end
diff --git a/yarn.lock b/yarn.lock
index 2aab09edad..abc220d3a0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6758,16 +6758,16 @@ __metadata:
languageName: node
linkType: hard
-"css-has-pseudo@npm:^7.0.1":
- version: 7.0.1
- resolution: "css-has-pseudo@npm:7.0.1"
+"css-has-pseudo@npm:^7.0.2":
+ version: 7.0.2
+ resolution: "css-has-pseudo@npm:7.0.2"
dependencies:
"@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/13789b08b70169204be786d652190356ace9313099d3656bd2fc38afbdd28f3d9620f0e0b07425480961b7a1ec789794961d0472f205b959d3f64c9a78ce511c
+ checksum: 10c0/456e9ce1eec8a535683c329956acfe53ce5a208345d7f2fcbe662626be8b3c98681e9041d7f4980316714397b0c1c3defde25653d629c396df17803d599c4edf
languageName: node
linkType: hard
@@ -6903,10 +6903,10 @@ __metadata:
languageName: node
linkType: hard
-"cssdb@npm:^8.2.1":
- version: 8.2.1
- resolution: "cssdb@npm:8.2.1"
- checksum: 10c0/d27d7db0a39e1105181aac119a98d6c92cd5ceba2e8bd349cdf2ba4a8d9ead149b685a1dba9542ca24f094cc70eca4a3e02973fe1f74c11a373b508606e5e1c0
+"cssdb@npm:^8.2.3":
+ version: 8.2.3
+ resolution: "cssdb@npm:8.2.3"
+ checksum: 10c0/17c3ca6432ed02431db6b44bed74649ccef7d7b7b900ccbc7297525f030722c441dd67c71f28aef3cfa0814ba7b254a24adfb0dcd5728937da179ff437cdcd0c
languageName: node
linkType: hard
@@ -7121,15 +7121,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.7, debug@npm:~4.3.6":
- version: 4.3.7
- resolution: "debug@npm:4.3.7"
+"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.4.0":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
dependencies:
ms: "npm:^2.1.3"
peerDependenciesMeta:
supports-color:
optional: true
- checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b
+ checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
languageName: node
linkType: hard
@@ -9968,8 +9968,8 @@ __metadata:
linkType: hard
"ioredis@npm:^5.3.2":
- version: 5.4.1
- resolution: "ioredis@npm:5.4.1"
+ version: 5.4.2
+ resolution: "ioredis@npm:5.4.2"
dependencies:
"@ioredis/commands": "npm:^1.1.1"
cluster-key-slot: "npm:^1.1.0"
@@ -9980,7 +9980,7 @@ __metadata:
redis-errors: "npm:^1.2.0"
redis-parser: "npm:^3.0.0"
standard-as-callback: "npm:^2.1.0"
- checksum: 10c0/5d28b7c89a3cab5b76d75923d7d4ce79172b3a1ca9be690133f6e8e393a7a4b4ffd55513e618bbb5504fed80d9e1395c9d9531a7c5c5c84aa4c4e765cca75456
+ checksum: 10c0/e59d2cceb43ed74b487d7b50fa91b93246e734e5d4835c7e62f64e44da072f12ab43b044248012e6f8b76c61a7c091a2388caad50e8ad69a8ce5515a730b23b8
languageName: node
linkType: hard
@@ -11527,10 +11527,10 @@ __metadata:
languageName: node
linkType: hard
-"lilconfig@npm:^3.1.2, lilconfig@npm:~3.1.2":
- version: 3.1.2
- resolution: "lilconfig@npm:3.1.2"
- checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe
+"lilconfig@npm:^3.1.2, lilconfig@npm:~3.1.3":
+ version: 3.1.3
+ resolution: "lilconfig@npm:3.1.3"
+ checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc
languageName: node
linkType: hard
@@ -11542,28 +11542,28 @@ __metadata:
linkType: hard
"lint-staged@npm:^15.0.0":
- version: 15.2.10
- resolution: "lint-staged@npm:15.2.10"
+ version: 15.2.11
+ resolution: "lint-staged@npm:15.2.11"
dependencies:
chalk: "npm:~5.3.0"
commander: "npm:~12.1.0"
- debug: "npm:~4.3.6"
+ debug: "npm:~4.4.0"
execa: "npm:~8.0.1"
- lilconfig: "npm:~3.1.2"
- listr2: "npm:~8.2.4"
+ lilconfig: "npm:~3.1.3"
+ listr2: "npm:~8.2.5"
micromatch: "npm:~4.0.8"
pidtree: "npm:~0.6.0"
string-argv: "npm:~0.3.2"
- yaml: "npm:~2.5.0"
+ yaml: "npm:~2.6.1"
bin:
lint-staged: bin/lint-staged.js
- checksum: 10c0/6ad7b41f5e87a84fa2eb1990080ea3c68a2f2031b4e81edcdc2a458cc878538eedb310e6f98ffd878a1287e1a52ac968e540ee8a0e96c247e04b0cbc36421cdd
+ checksum: 10c0/28e2ad08b90460cc18398a023eaf93954d7753f958c2b889ead2d9305407d7b4ef0ee007875410d6ce1df758007fda77e079c82eb79c9ce684fba71e6f7d0452
languageName: node
linkType: hard
-"listr2@npm:~8.2.4":
- version: 8.2.4
- resolution: "listr2@npm:8.2.4"
+"listr2@npm:~8.2.5":
+ version: 8.2.5
+ resolution: "listr2@npm:8.2.5"
dependencies:
cli-truncate: "npm:^4.0.0"
colorette: "npm:^2.0.20"
@@ -11571,7 +11571,7 @@ __metadata:
log-update: "npm:^6.1.0"
rfdc: "npm:^1.4.1"
wrap-ansi: "npm:^9.0.0"
- checksum: 10c0/df5b129e9767de1997973cec6103cd4bd6fc3b3367685b7c23048d12b61d5b7e44fecd8a3d3534c0e1c963bd5ac43ca501d14712f46fa101050037be323a5c16
+ checksum: 10c0/f5a9599514b00c27d7eb32d1117c83c61394b2a985ec20e542c798bf91cf42b19340215701522736f5b7b42f557e544afeadec47866e35e5d4f268f552729671
languageName: node
linkType: hard
@@ -14038,8 +14038,8 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.0.0":
- version: 10.1.1
- resolution: "postcss-preset-env@npm:10.1.1"
+ version: 10.1.2
+ resolution: "postcss-preset-env@npm:10.1.2"
dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.1"
"@csstools/postcss-color-function": "npm:^4.0.6"
@@ -14076,9 +14076,9 @@ __metadata:
autoprefixer: "npm:^10.4.19"
browserslist: "npm:^4.23.1"
css-blank-pseudo: "npm:^7.0.1"
- css-has-pseudo: "npm:^7.0.1"
+ css-has-pseudo: "npm:^7.0.2"
css-prefers-color-scheme: "npm:^10.0.0"
- cssdb: "npm:^8.2.1"
+ cssdb: "npm:^8.2.3"
postcss-attribute-case-insensitive: "npm:^7.0.1"
postcss-clamp: "npm:^4.1.0"
postcss-color-functional-notation: "npm:^7.0.6"
@@ -14106,7 +14106,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/99931117735a66827c7318be023ddb614990457617ccbe7fd2fdc1f10345554652df180d4842768d68d57e14fc0be4d86d0b413c65e77e02db5511e57ed07c4f
+ checksum: 10c0/bd40330867a525679d434ff9602efbf229da9e745a3759c2d0b3cff166dd0f17bf99b44673ebb316df1906c2bf2edef97aeef1840aa6be170b43a34404df396d
languageName: node
linkType: hard
@@ -16843,8 +16843,8 @@ __metadata:
linkType: hard
"stylelint@npm:^16.11.0":
- version: 16.11.0
- resolution: "stylelint@npm:16.11.0"
+ version: 16.12.0
+ resolution: "stylelint@npm:16.12.0"
dependencies:
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
@@ -16882,11 +16882,11 @@ __metadata:
string-width: "npm:^4.2.3"
supports-hyperlinks: "npm:^3.1.0"
svg-tags: "npm:^1.0.0"
- table: "npm:^6.8.2"
+ table: "npm:^6.9.0"
write-file-atomic: "npm:^5.0.1"
bin:
stylelint: bin/stylelint.mjs
- checksum: 10c0/65638247fb4e5eacb032e3a98412a13ad8b343d2d58e22d61b96ada72808b5b7e736c845937b3bcfde04c0bfa2120383b507e530afe876dafe824a93c337258f
+ checksum: 10c0/d60bc6136f5bdc4e49ec22aee4d82130c4e9c94aa7d249da9dda315a862615e74acaefb24c560529b2102f8c27dde473b148ffcee861f5dab7b0225254765102
languageName: node
linkType: hard
@@ -17028,16 +17028,16 @@ __metadata:
languageName: node
linkType: hard
-"table@npm:^6.8.2":
- version: 6.8.2
- resolution: "table@npm:6.8.2"
+"table@npm:^6.9.0":
+ version: 6.9.0
+ resolution: "table@npm:6.9.0"
dependencies:
ajv: "npm:^8.0.1"
lodash.truncate: "npm:^4.4.2"
slice-ansi: "npm:^4.0.0"
string-width: "npm:^4.2.3"
strip-ansi: "npm:^6.0.1"
- checksum: 10c0/f8b348af38ee34e419d8ce7306ba00671ce6f20e861ccff22555f491ba264e8416086063ce278a8d81abfa8d23b736ec2cca7ac4029b5472f63daa4b4688b803
+ checksum: 10c0/35646185712bb65985fbae5975dda46696325844b78735f95faefae83e86df0a265277819a3e67d189de6e858c509b54e66ca3958ffd51bde56ef1118d455bf4
languageName: node
linkType: hard
@@ -18849,12 +18849,12 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:~2.5.0":
- version: 2.5.0
- resolution: "yaml@npm:2.5.0"
+"yaml@npm:~2.6.1":
+ version: 2.6.1
+ resolution: "yaml@npm:2.6.1"
bin:
yaml: bin.mjs
- checksum: 10c0/771a1df083c8217cf04ef49f87244ae2dd7d7457094425e793b8f056159f167602ce172aa32d6bca21f787d24ec724aee3cecde938f6643564117bd151452631
+ checksum: 10c0/aebf07f61c72b38c74d2b60c3a3ccf89ee4da45bcd94b2bfb7899ba07a5257625a7c9f717c65a6fc511563d48001e01deb1d9e55f0133f3e2edf86039c8c1be7
languageName: node
linkType: hard