+
+
+ {intl.formatMessage(messages.title, { q })}
+
+
+
+ );
+};
+
+// eslint-disable-next-line import/no-default-export
+export default SearchResults;
diff --git a/app/javascript/mastodon/features/ui/components/compose_panel.jsx b/app/javascript/mastodon/features/ui/components/compose_panel.jsx
index b085b2dc2adcab..e622c8859ae794 100644
--- a/app/javascript/mastodon/features/ui/components/compose_panel.jsx
+++ b/app/javascript/mastodon/features/ui/components/compose_panel.jsx
@@ -5,8 +5,8 @@ import { connect } from 'react-redux';
import { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';
import ServerBanner from 'mastodon/components/server_banner';
+import { Search } from 'mastodon/features/compose/components/search';
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
-import SearchContainer from 'mastodon/features/compose/containers/search_container';
import { LinkFooter } from 'mastodon/features/ui/components/link_footer';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
@@ -41,7 +41,7 @@ class ComposePanel extends PureComponent {
return (
-
+
{!signedIn && (
<>
diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx
index e4d812254d97bd..e737418f446f45 100644
--- a/app/javascript/mastodon/features/ui/index.jsx
+++ b/app/javascript/mastodon/features/ui/index.jsx
@@ -71,6 +71,7 @@ import {
OnboardingProfile,
OnboardingFollows,
Explore,
+ Search,
About,
PrivacyPolicy,
TermsOfService,
@@ -255,7 +256,8 @@ class SwitchingColumnsArea extends PureComponent {
-
+
+
diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js
index 16907946619caf..8c3b3427785609 100644
--- a/app/javascript/mastodon/features/ui/util/async-components.js
+++ b/app/javascript/mastodon/features/ui/util/async-components.js
@@ -174,6 +174,10 @@ export function Explore () {
return import(/* webpackChunkName: "features/explore" */'../../explore');
}
+export function Search () {
+ return import(/* webpackChunkName: "features/explore" */'../../search');
+}
+
export function FilterModal () {
return import(/*webpackChunkName: "modals/filter_modal" */'../components/filter_modal');
}
diff --git a/app/javascript/mastodon/locales/af.json b/app/javascript/mastodon/locales/af.json
index ff0d2d5cbcc88d..1871befb669901 100644
--- a/app/javascript/mastodon/locales/af.json
+++ b/app/javascript/mastodon/locales/af.json
@@ -152,7 +152,6 @@
"empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
"empty_column.list": "Hierdie lys is nog leeg. Nuwe plasings deur lyslede sal voortaan hier verskyn.",
"empty_column.notifications": "Jy het nog geen kennisgewings nie. Interaksie van ander mense met jou, sal hier vertoon.",
- "explore.search_results": "Soekresultate",
"explore.suggested_follows": "Mense",
"explore.trending_links": "Nuus",
"filter_modal.added.settings_link": "instellings bladsy",
@@ -258,9 +257,7 @@
"search.search_or_paste": "Soek of plak URL",
"search_results.all": "Alles",
"search_results.hashtags": "Hutsetiket",
- "search_results.nothing_found": "Hierdie soekwoorde lewer niks op nie",
"search_results.statuses": "Plasings",
- "search_results.title": "Soek {q}",
"server_banner.administered_by": "Administrasie deur:",
"sign_in_banner.sign_in": "Sign in",
"status.admin_status": "Open hierdie plasing as moderator",
diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json
index 260687de014c87..3901f5f0087ba3 100644
--- a/app/javascript/mastodon/locales/an.json
+++ b/app/javascript/mastodon/locales/an.json
@@ -192,7 +192,6 @@
"error.unexpected_crash.next_steps_addons": "Intenta deshabilitar-los y recarga la pachina. Si ixo no aduya, podrías usar Mastodon a traviés d'un navegador web diferent u aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar lo seguimiento de pila en o portafuellas",
"errors.unexpected_crash.report_issue": "Informar d'un problema/error",
- "explore.search_results": "Resultaus de busqueda",
"explore.title": "Explorar",
"explore.trending_links": "Noticias",
"explore.trending_statuses": "Publicacions",
@@ -431,9 +430,7 @@
"search_popout.full_text_search_logged_out_message": "Nomás disponible iniciando la sesión.",
"search_results.all": "Totz",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "No se podió trobar cosa pa estes termins de busqueda",
"search_results.statuses": "Publicacions",
- "search_results.title": "Buscar {q}",
"server_banner.about_active_users": "Usuarios activos en o servidor entre los zaguers 30 días (Usuarios Activos Mensuals)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrau per:",
diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json
index 6020cd254a85b2..4b46ed61170821 100644
--- a/app/javascript/mastodon/locales/ar.json
+++ b/app/javascript/mastodon/locales/ar.json
@@ -274,7 +274,6 @@
"error.unexpected_crash.next_steps_addons": "حاول تعطيلهم وإنعاش الصفحة. إن لم ينجح ذلك، يمكنك دائمًا استخدام ماستدون عبر متصفح آخر أو تطبيق أصلي.",
"errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
- "explore.search_results": "نتائج البحث",
"explore.suggested_follows": "أشخاص",
"explore.title": "استكشف",
"explore.trending_links": "المُستجدّات",
@@ -680,10 +679,8 @@
"search_results.accounts": "الصفحات التعريفية",
"search_results.all": "الكل",
"search_results.hashtags": "الوُسوم",
- "search_results.nothing_found": "تعذر العثور على نتائج تتضمن هذه المصطلحات",
"search_results.see_all": "رؤية الكل",
"search_results.statuses": "المنشورات",
- "search_results.title": "البحث عن {q}",
"server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)",
"server_banner.active_users": "مستخدم نشط",
"server_banner.administered_by": "يُديره:",
diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json
index 1b99b1dae15249..af0a0b88caae6c 100644
--- a/app/javascript/mastodon/locales/ast.json
+++ b/app/javascript/mastodon/locales/ast.json
@@ -159,7 +159,6 @@
"error.unexpected_crash.explanation_addons": "Esta páxina nun se pudo amosar correutamente. Ye probable que dalgún complementu del restolador o dalguna ferramienta de traducción automática produxere esti error.",
"error.unexpected_crash.next_steps": "Prueba a anovar la páxina. Si nun sirve, ye posible que tovía seyas a usar Mastodon pente otru restolador o una aplicación nativa.",
"error.unexpected_crash.next_steps_addons": "Prueba a desactivalos y a anovar la páxina. Si nun sirve, ye posible que tovía seyas a usar Mastodon pente otru restolador o una aplicación nativa.",
- "explore.search_results": "Resultaos de la busca",
"explore.suggested_follows": "Perfiles",
"explore.title": "Esploración",
"explore.trending_links": "Noticies",
@@ -388,10 +387,8 @@
"search_results.accounts": "Perfiles",
"search_results.all": "Too",
"search_results.hashtags": "Etiquetes",
- "search_results.nothing_found": "Nun se pudo atopar nada con esos términos de busca",
"search_results.see_all": "Ver too",
"search_results.statuses": "Artículos",
- "search_results.title": "Busca de: {q}",
"server_banner.server_stats": "Estadístiques del sirvidor:",
"sign_in_banner.create_account": "Crear una cuenta",
"sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase",
diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json
new file mode 100644
index 00000000000000..0967ef424bce67
--- /dev/null
+++ b/app/javascript/mastodon/locales/az.json
@@ -0,0 +1 @@
+{}
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 5bc8625c96c417..1adbe147db137d 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -278,7 +278,6 @@
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і аднавіць старонку. Калі гэта не дапаможа, вы можаце карыстацца Мастадонт праз другі браўзер ці аплікацыю.",
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
- "explore.search_results": "Вынікі пошуку",
"explore.suggested_follows": "Людзі",
"explore.title": "Агляд",
"explore.trending_links": "Навіны",
@@ -685,10 +684,8 @@
"search_results.accounts": "Профілі",
"search_results.all": "Усё",
"search_results.hashtags": "Хэштэгі",
- "search_results.nothing_found": "Па дадзенаму запыту нічога не знойдзена",
"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/bg.json b/app/javascript/mastodon/locales/bg.json
index 527fa5f7f97640..6cadc8cdabd490 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -108,7 +108,7 @@
"annual_report.summary.thanks": "Благодарим, че сте част от Mastodon!",
"attachments_list.unprocessed": "(необработено)",
"audio.hide": "Скриване на звука",
- "block_modal.remote_users_caveat": "Ще поискаме сървърът {domain} да почита решението ви. Съгласието обаче не се гарантира откак някои сървъри могат да боравят с блоковете по различен начин. Обществените публикации още може да се виждат от невлезли в системата потребители.",
+ "block_modal.remote_users_caveat": "Ще приканим сървъра {domain} да уважава решението ви. За съжаление не можем да гарантираме това защото някои сървъри могат да третират блокиранията по различен начин. Публичните постове може да продължат да бъдат видими за потребители, които не са се регистрирали.",
"block_modal.show_less": "Повече на показ",
"block_modal.show_more": "По-малко на показ",
"block_modal.they_cant_mention": "Те не могат да ви споменават или последват.",
@@ -255,14 +255,14 @@
"domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.",
"domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.",
"domain_pill.server": "Сървър",
- "domain_pill.their_handle": "Тяхната ръчка:",
+ "domain_pill.their_handle": "Техният адрес:",
"domain_pill.their_server": "Цифровият им дом, където живеят всичките им публикации.",
"domain_pill.their_username": "Неповторимият им идентификатор на сървъра им. Възможно е да се намерят потребители със същото потребителско име на други сървъри.",
"domain_pill.username": "Потребителско име",
- "domain_pill.whats_in_a_handle": "Какво е в ръчката?",
- "domain_pill.who_they_are": "Откак ръчките казват кой кой е и къде е, то може да взаимодействате с хора през социаното уебпространство на захранваните платформи от ActivityPub.",
- "domain_pill.who_you_are": "Тъй като вашата ръчка казва кои сте и къде сте, то може да взаимодействате с хора през социаното уебпространство на захранваните платформи от ActivityPub.",
- "domain_pill.your_handle": "Вашата ръчка:",
+ "domain_pill.whats_in_a_handle": "Как се съставя адресът?",
+ "domain_pill.who_they_are": "Адресът показва за някой кой е той и къде се намира. Това ви позволява да общувате с всички в социалната мрежа от платформите поддържащи ActivityPub.",
+ "domain_pill.who_you_are": "Адресът ви показва кой сте и къде се намирате. Това ви позволява да общувате с всички в социалната мрежа от платформите поддържащи ActivityPub.",
+ "domain_pill.your_handle": "Вашият адрес:",
"domain_pill.your_server": "Цифровият ви дом, където живеят всичките ви публикации. Не харесвате ли този? Прехвърляте се на сървъри по всяко време и докарвате последователите си също.",
"domain_pill.your_username": "Неповторимият ви идентификатор на този сървър. Възможно е да се намерят потребители със същото потребителско име на други сървъри.",
"embed.instructions": "Вградете публикацията в уебсайта си, копирайки кода долу.",
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Опитайте се да ги изключите и да опресните страницата. Ако това не помогне, то още може да използвате Mastodon чрез различен браузър или приложение.",
"errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет",
"errors.unexpected_crash.report_issue": "Сигнал за проблем",
- "explore.search_results": "Резултати от търсенето",
"explore.suggested_follows": "Хора",
"explore.title": "Разглеждане",
"explore.trending_links": "Новини",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Преглед на #Wrapstodon",
"notification.favourite": "{name} направи любима публикацията ви",
"notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} направиха любима ваша публикация",
+ "notification.favourite_pm": "{name} хареса вашето лично споменаване",
+ "notification.favourite_pm.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} харесаха вашето частно споменаване",
"notification.follow": "{name} ви последва",
"notification.follow.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} ви последваха",
"notification.follow_request": "{name} поиска да ви последва",
@@ -781,10 +782,11 @@
"search_results.accounts": "Профили",
"search_results.all": "Всичко",
"search_results.hashtags": "Хаштагове",
- "search_results.nothing_found": "Не може да се намери каквото и да било за тези термини при търсене",
+ "search_results.no_results": "Няма намерени резултати.",
+ "search_results.no_search_yet": "Опитайте да потърсите постове, профили или хаштагове.",
"search_results.see_all": "Поглед на всички",
"search_results.statuses": "Публикации",
- "search_results.title": "Търсене за {q}",
+ "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/br.json b/app/javascript/mastodon/locales/br.json
index 1620b8a526fcda..eb4394aa790a4e 100644
--- a/app/javascript/mastodon/locales/br.json
+++ b/app/javascript/mastodon/locales/br.json
@@ -230,7 +230,6 @@
"error.unexpected_crash.next_steps_addons": "Klaskit azbevaat ar bajenn. Ma n'ez a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.",
"errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver",
"errors.unexpected_crash.report_issue": "Danevellañ ur fazi",
- "explore.search_results": "Disoc'hoù an enklask",
"explore.suggested_follows": "Tud",
"explore.title": "Furchal",
"explore.trending_links": "Keleier",
@@ -523,10 +522,8 @@
"search_results.accounts": "Profiloù",
"search_results.all": "Pep tra",
"search_results.hashtags": "Hashtagoù",
- "search_results.nothing_found": "Disoc'h ebet gant ar gerioù-se",
"search_results.see_all": "Gwelet pep tra",
"search_results.statuses": "Toudoù",
- "search_results.title": "Klask {q}",
"server_banner.active_users": "implijerien·ezed oberiant",
"server_banner.administered_by": "Meret gant :",
"server_banner.server_stats": "Stadegoù ar servijer :",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index b46116718f6689..ef4f9e3a93d655 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Prova de desactivar-los i actualitza la pàgina. Si això no serveix, és possible que encara puguis fer servir Mastodon amb un altre navegador o una aplicació nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copia stacktrace al porta-retalls",
"errors.unexpected_crash.report_issue": "Informa d'un problema",
- "explore.search_results": "Resultats de la cerca",
"explore.suggested_follows": "Persones",
"explore.title": "Explora",
"explore.trending_links": "Notícies",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Visualitzeu #Wrapstodon",
"notification.favourite": "{name} ha afavorit el teu tut",
"notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# altre} other {# altres}} han afavorit la vostra publicació",
+ "notification.favourite_pm": "{name} ha afavorit la vostra menció privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {un altre} other {# altres}} han afavorit la vostra menció",
"notification.follow": "{name} et segueix",
"notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit",
"notification.follow_request": "{name} ha sol·licitat de seguir-te",
@@ -781,10 +782,11 @@
"search_results.accounts": "Perfils",
"search_results.all": "Tots",
"search_results.hashtags": "Etiquetes",
- "search_results.nothing_found": "No s'ha pogut trobar res per a aquests termes de cerca",
+ "search_results.no_results": "Cap resultat.",
+ "search_results.no_search_yet": "Proveu de cercar publicacions, perfils o etiquetes.",
"search_results.see_all": "Veure'ls tots",
"search_results.statuses": "Tuts",
- "search_results.title": "Cerca de {q}",
+ "search_results.title": "Cerca de “{q}”",
"server_banner.about_active_users": "Gent que ha fet servir aquest servidor en els darrers 30 dies (Usuaris Actius Mensuals)",
"server_banner.active_users": "usuaris actius",
"server_banner.administered_by": "Administrat per:",
diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json
index 865e336a7ed9b7..f4fee13cdb4fa0 100644
--- a/app/javascript/mastodon/locales/ckb.json
+++ b/app/javascript/mastodon/locales/ckb.json
@@ -226,7 +226,6 @@
"error.unexpected_crash.next_steps_addons": "هەوڵدە لەکاریان بخەیت و لاپەڕەکە تازە بکەوە. ئەگەر ئەمە یارمەتیدەر نەبوو، لەوانەیە هێشتا بتوانیت ماستۆدۆن بەکاربێنیت لە ڕێگەی وێبگەڕەکانی دیکە یان نەرمەکالاکانی ئەسڵی.",
"errors.unexpected_crash.copy_stacktrace": "کۆپیکردنی ستێکتراسی بۆ کلیپ بۆرد",
"errors.unexpected_crash.report_issue": "کێشەی گوزارشت",
- "explore.search_results": "ئەنجامەکانی گەڕان",
"explore.suggested_follows": "خەڵک",
"explore.title": "گەڕان",
"explore.trending_links": "هەواڵەکان",
@@ -486,9 +485,7 @@
"search_results.accounts": "پرۆفایلەکان",
"search_results.all": "هەموو",
"search_results.hashtags": "هەشتاگ",
- "search_results.nothing_found": "هیچ بۆ ئەم زاراوە گەڕانانە نەدۆزراوەتەوە",
"search_results.statuses": "توتەکان",
- "search_results.title": "گەڕان بەدوای {q}",
"server_banner.about_active_users": "ئەو کەسانەی لە ماوەی ٣٠ ڕۆژی ڕابردوودا ئەم سێرڤەرە بەکاردەهێنن (بەکارهێنەرانی چالاک مانگانە)",
"server_banner.active_users": "بەکارهێنەرانی چالاک",
"server_banner.administered_by": "بەڕێوەبردن لەلایەن:",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 8aca6b570b29e7..5cd324953a2574 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -272,7 +272,6 @@
"error.unexpected_crash.next_steps_addons": "Zkuste je vypnout a stránku obnovit. Pokud to nepomůže, zkuste otevřít Mastodon v jiném prohlížeči nebo nativní aplikaci.",
"errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
"errors.unexpected_crash.report_issue": "Nahlásit problém",
- "explore.search_results": "Výsledky hledání",
"explore.suggested_follows": "Lidé",
"explore.title": "Objevit",
"explore.trending_links": "Zprávy",
@@ -651,10 +650,8 @@
"search_results.accounts": "Profily",
"search_results.all": "Vše",
"search_results.hashtags": "Hashtagy",
- "search_results.nothing_found": "Pro tyto hledané výrazy nebylo nic nenalezeno",
"search_results.see_all": "Zobrazit vše",
"search_results.statuses": "Příspěvky",
- "search_results.title": "Hledat {q}",
"server_banner.about_active_users": "Lidé používající tento server během posledních 30 dní (měsíční aktivní uživatelé)",
"server_banner.active_users": "aktivní uživatelé",
"server_banner.administered_by": "Spravováno:",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index 9255f972c6766e..73d2e615b2d84a 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -103,6 +103,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashnod a ddefnyddiwyd fwyaf",
"annual_report.summary.most_used_hashtag.none": "Dim",
"annual_report.summary.new_posts.new_posts": "postiadau newydd",
+ "annual_report.summary.percentile.text": "Mae hynny'n eich rhoi chi ar y brig o ddefnyddiwr {domain}.",
"annual_report.summary.percentile.we_wont_tell_bernie": "Ni fyddwn yn dweud wrth Bernie.",
"annual_report.summary.thanks": "Diolch am fod yn rhan o Mastodon!",
"attachments_list.unprocessed": "(heb eu prosesu)",
@@ -128,6 +129,7 @@
"bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Cau",
+ "bundle_modal_error.message": "Aeth rhywbeth o'i le wrth lwytho'r sgrin hon.",
"bundle_modal_error.retry": "Ceisiwch eto",
"closed_registrations.other_server_instructions": "Gan fod Mastodon yn ddatganoledig, gallwch greu cyfrif ar weinydd arall a dal i ryngweithio gyda hwn.",
"closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.",
@@ -203,6 +205,9 @@
"confirmations.edit.confirm": "Golygu",
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
"confirmations.edit.title": "Trosysgrifo'r postiad?",
+ "confirmations.follow_to_list.confirm": "Dilyn ac ychwanegu at y rhestr",
+ "confirmations.follow_to_list.message": "Mae angen i chi fod yn dilyn {name} i'w ychwanegu at restr.",
+ "confirmations.follow_to_list.title": "Dilyn defnyddiwr?",
"confirmations.logout.confirm": "Allgofnodi",
"confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
"confirmations.logout.title": "Allgofnodi?",
@@ -234,6 +239,10 @@
"disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.",
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
"dismissable_banner.dismiss": "Cau",
+ "dismissable_banner.explore_links": "Y straeon newyddion hyn yw'r rhai sy'n cael eu rhannu fwyaf ar y ffederasiwn heddiw. Mae straeon newyddion mwy diweddar sy'n cael eu postio gan fwy o amrywiaeth o bobl yn cael eu graddio'n uwch.",
+ "dismissable_banner.explore_statuses": "Mae'r postiadau hyn o bob rhan o'r ffedysawd yn cael mwy o sylw heddiw. Mae postiadau mwy diweddar sydd â mwy o hybu a ffefrynnu'n cael eu graddio'n uwch.",
+ "dismissable_banner.explore_tags": "Mae'r hashnodau hyn ar gynnydd y ffedysawd heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o bobl amrywiol yn cael eu graddio'n uwch.",
+ "dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y ffedysawd y mae pobl ar {domain} yn eu dilyn.",
"domain_block_modal.block": "Blocio gweinydd",
"domain_block_modal.block_account_instead": "Blocio @{name} yn ei le",
"domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.",
@@ -300,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Ceisiwch eu hanalluogi ac adnewyddu'r dudalen. Os nad yw hynny'n helpu, efallai y byddwch yn dal i allu defnyddio Mastodon trwy borwr neu ap cynhenid arall.",
"errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd",
"errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem",
- "explore.search_results": "Canlyniadau chwilio",
"explore.suggested_follows": "Pobl",
"explore.title": "Darganfod",
"explore.trending_links": "Newyddion",
@@ -354,8 +362,10 @@
"footer.privacy_policy": "Polisi preifatrwydd",
"footer.source_code": "Gweld y cod ffynhonnell",
"footer.status": "Statws",
+ "footer.terms_of_service": "Telerau gwasanaeth",
"generic.saved": "Wedi'i Gadw",
"getting_started.heading": "Dechrau",
+ "hashtag.admin_moderation": "Agor rhyngwyneb cymedroli #{name}",
"hashtag.column_header.tag_mode.all": "a {additional}",
"hashtag.column_header.tag_mode.any": "neu {additional}",
"hashtag.column_header.tag_mode.none": "heb {additional}",
@@ -485,6 +495,7 @@
"lists.replies_policy.list": "Aelodau'r rhestr",
"lists.replies_policy.none": "Neb",
"lists.save": "Cadw",
+ "lists.search": "Chwilio",
"lists.show_replies_to": "Cynhwyswch atebion gan aelodau'r rhestr i",
"load_pending": "{count, plural, one {# eitem newydd} other {# eitem newydd}}",
"loading_indicator.label": "Yn llwytho…",
@@ -538,6 +549,7 @@
"notification.annual_report.view": "Gweld #Wrapstodon",
"notification.favourite": "Ffafriodd {name} eich postiad",
"notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad",
+ "notification.favourite_pm": "Mae {name} wedi ffefrynnu eich cyfeiriad preifat",
"notification.follow": "Dilynodd {name} chi",
"notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# arall} two {# arall} few {# arall} many {# others} other {# arall}} nawr yn eich dilyn chi",
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
@@ -769,10 +781,8 @@
"search_results.accounts": "Proffilau",
"search_results.all": "Popeth",
"search_results.hashtags": "Hashnodau",
- "search_results.nothing_found": "Methu dod o hyd i unrhyw beth ar gyfer y termau chwilio hyn",
"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:",
@@ -845,6 +855,7 @@
"subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}",
"tabs_bar.home": "Cartref",
"tabs_bar.notifications": "Hysbysiadau",
+ "terms_of_service.title": "Telerau Gwasanaeth",
"time_remaining.days": "{number, plural, one {# diwrnod} other {# diwrnod}} ar ôl",
"time_remaining.hours": "{number, plural, one {# awr} other {# awr}} ar ôl",
"time_remaining.minutes": "{number, plural, one {# munud} other {# munud}} ar ôl",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 697d196303a270..59d5123e78df7c 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden browser eller app.",
"errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen",
"errors.unexpected_crash.report_issue": "Anmeld problem",
- "explore.search_results": "Søgeresultater",
"explore.suggested_follows": "Personer",
"explore.title": "Udforsk",
"explore.trending_links": "Nyheder",
@@ -549,6 +548,8 @@
"notification.annual_report.view": "Vis #Wrapstodon",
"notification.favourite": "{name} favoritmarkerede dit indlæg",
"notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit",
+ "notification.favourite_pm": "{name} favoritmarkerede din private omtale",
+ "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} favoritmarkerede dit indlæg",
"notification.follow": "{name} begyndte at følge dig",
"notification.follow.name_and_others": "{name} og {count, plural, one {# andre} other {# andre}} begyndte at følge dig",
"notification.follow_request": "{name} har anmodet om at følge dig",
@@ -780,10 +781,11 @@
"search_results.accounts": "Profiler",
"search_results.all": "Alle",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Ingen resultater for disse søgeord",
+ "search_results.no_results": "Ingen resultater.",
+ "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller hashtags.",
"search_results.see_all": "Vis alle",
"search_results.statuses": "Indlæg",
- "search_results.title": "Søg efter {q}",
+ "search_results.title": "Søg efter \"{q}\"",
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 468577cc6b3333..2e3c0d2d1939c2 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Versuche, das Add-on oder Übersetzungswerkzeug zu deaktivieren und lade die Seite anschließend neu. Sollte das Problem weiter bestehen, kannst du das Webinterface von Mastodon vermutlich über einen anderen Browser erreichen – oder du verwendest eine mobile (native) App.",
"errors.unexpected_crash.copy_stacktrace": "Fehlerdiagnose in die Zwischenablage kopieren",
"errors.unexpected_crash.report_issue": "Fehler melden",
- "explore.search_results": "Suchergebnisse",
"explore.suggested_follows": "Profile",
"explore.title": "Entdecken",
"explore.trending_links": "Neuigkeiten",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "#Wrapstodon ansehen",
"notification.favourite": "{name} favorisierte deinen Beitrag",
"notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deinen Beitrag",
+ "notification.favourite_pm": "{name} favorisierte deine private Erwähnung",
+ "notification.favourite_pm.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deine private Erwähnung",
"notification.follow": "{name} folgt dir",
"notification.follow.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} folgen dir",
"notification.follow_request": "{name} möchte dir folgen",
@@ -781,10 +782,11 @@
"search_results.accounts": "Profile",
"search_results.all": "Alles",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Nichts zu diesen Suchbegriffen gefunden",
+ "search_results.no_results": "Keine Ergebnisse.",
+ "search_results.no_search_yet": "Suche nach Beiträgen, Profilen oder Hashtags.",
"search_results.see_all": "Alle ansehen",
"search_results.statuses": "Beiträge",
- "search_results.title": "Suchergebnisse für {q}",
+ "search_results.title": "Nach „{q}“ suchen",
"server_banner.about_active_users": "Personen, die diesen Server in den vergangenen 30 Tagen verwendet haben (monatlich aktive Nutzer*innen)",
"server_banner.active_users": "aktive Profile",
"server_banner.administered_by": "Verwaltet von:",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 19ef0febb4b55b..8beda3388ed833 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.",
"errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο",
"errors.unexpected_crash.report_issue": "Αναφορά προβλήματος",
- "explore.search_results": "Αποτελέσματα αναζήτησης",
"explore.suggested_follows": "Άτομα",
"explore.title": "Εξερεύνηση",
"explore.trending_links": "Νέα",
@@ -780,10 +779,8 @@
"search_results.accounts": "Προφίλ",
"search_results.all": "Όλα",
"search_results.hashtags": "Ετικέτες",
- "search_results.nothing_found": "Δεν βρέθηκε τίποτα με αυτούς τους όρους αναζήτησης",
"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/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index 41bbfe6e209fc1..ef2ab61c170ebf 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -300,7 +300,6 @@
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue",
- "explore.search_results": "Search results",
"explore.suggested_follows": "People",
"explore.title": "Explore",
"explore.trending_links": "News",
@@ -769,10 +768,8 @@
"search_results.accounts": "Profiles",
"search_results.all": "All",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Could not find anything for these search terms",
"search_results.see_all": "See all",
"search_results.statuses": "Posts",
- "search_results.title": "Search for {q}",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 0ce1dacc41620a..efb7a9fb739a8c 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -311,7 +311,6 @@
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue",
- "explore.search_results": "Search results",
"explore.suggested_follows": "People",
"explore.title": "Explore",
"explore.trending_links": "News",
@@ -552,6 +551,8 @@
"notification.annual_report.view": "View #Wrapstodon",
"notification.favourite": "{name} favorited your post",
"notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your post",
+ "notification.favourite_pm": "{name} favorited your private mention",
+ "notification.favourite_pm.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your private mention",
"notification.follow": "{name} followed you",
"notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you",
"notification.follow_request": "{name} has requested to follow you",
@@ -783,10 +784,11 @@
"search_results.accounts": "Profiles",
"search_results.all": "All",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Could not find anything for these search terms",
+ "search_results.no_results": "No results.",
+ "search_results.no_search_yet": "Try searching for posts, profiles or hashtags.",
"search_results.see_all": "See all",
"search_results.statuses": "Posts",
- "search_results.title": "Search for {q}",
+ "search_results.title": "Search for \"{q}\"",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 6c060af4939127..4b1ffa59ee025c 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Provu malaktivigi ilin kaj tiam refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.",
"errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo",
"errors.unexpected_crash.report_issue": "Raporti problemon",
- "explore.search_results": "Serĉaj rezultoj",
"explore.suggested_follows": "Homoj",
"explore.title": "Esplori",
"explore.trending_links": "Novaĵoj",
@@ -548,8 +547,10 @@
"notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton",
"notification.annual_report.message": "Via {year} #Wrapstodon atendas! Malkovru viajn bonaĵojn kaj memorindajn momentojn en Mastodon!",
"notification.annual_report.view": "Vidu #Wrapstodon",
- "notification.favourite": "{name} stelumis vian afiŝon",
+ "notification.favourite": "{name} ŝatis vian afiŝon",
"notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon",
+ "notification.favourite_pm": "{name} ŝatis vian privatan mencion",
+ "notification.favourite_pm.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian privatan mencion",
"notification.follow": "{name} eksekvis vin",
"notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin",
"notification.follow_request": "{name} petis sekvi vin",
@@ -781,10 +782,8 @@
"search_results.accounts": "Profiloj",
"search_results.all": "Ĉiuj",
"search_results.hashtags": "Kradvortoj",
- "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj",
"search_results.see_all": "Vidu ĉiujn",
"search_results.statuses": "Afiŝoj",
- "search_results.title": "Serĉ-rezultoj por {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 f8ffcb5997a4e9..1da851413bc00f 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles",
"errors.unexpected_crash.report_issue": "Informar problema",
- "explore.search_results": "Resultados de búsqueda",
"explore.suggested_follows": "Cuentas",
"explore.title": "Explorá",
"explore.trending_links": "Noticias",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó tu mensaje como favorito",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito",
+ "notification.favourite_pm": "{name} ha marcado como favorita tu mención privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} han marcado como favorita tu mención privada",
"notification.follow": "{name} te empezó a seguir",
"notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo",
"notification.follow_request": "{name} solicitó seguirte",
@@ -781,10 +782,11 @@
"search_results.accounts": "Perfiles",
"search_results.all": "Todos",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda",
+ "search_results.no_results": "Sin resultados.",
+ "search_results.no_search_yet": "Intenta buscar publicaciones, perfiles o etiquetas.",
"search_results.see_all": "Ver todo",
"search_results.statuses": "Mensajes",
- "search_results.title": "Buscar {q}",
+ "search_results.title": "Búsqueda de \"{q}\"",
"server_banner.about_active_users": "Personas usando 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-MX.json b/app/javascript/mastodon/locales/es-MX.json
index fe581e98109eff..cc92c06de5f2d7 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
"errors.unexpected_crash.report_issue": "Informar problema",
- "explore.search_results": "Resultados de búsqueda",
"explore.suggested_follows": "Personas",
"explore.title": "Descubrir",
"explore.trending_links": "Noticias",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó como favorita tu publicación",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita",
+ "notification.favourite_pm": "{name} marcó como favorito tu mención privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron como favorito tu mención privada",
"notification.follow": "{name} te empezó a seguir",
"notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te han seguido",
"notification.follow_request": "{name} ha solicitado seguirte",
@@ -781,10 +782,11 @@
"search_results.accounts": "Perfiles",
"search_results.all": "Todos",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda",
+ "search_results.no_results": "Sin 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": "Buscar {q}",
+ "search_results.title": "Búsqueda 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 f3679e8e7ab11b..e011902f6bdc6f 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
"errors.unexpected_crash.report_issue": "Informar de un problema/error",
- "explore.search_results": "Resultados de búsqueda",
"explore.suggested_follows": "Personas",
"explore.title": "Explorar",
"explore.trending_links": "Noticias",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcó como favorita tu publicación",
"notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita",
+ "notification.favourite_pm": "{name} ha marcado como favorita tu mención privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} han marcado como favorita tu mención privada",
"notification.follow": "{name} te empezó a seguir",
"notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron",
"notification.follow_request": "{name} ha solicitado seguirte",
@@ -781,10 +782,11 @@
"search_results.accounts": "Perfiles",
"search_results.all": "Todos",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "No se pudo encontrar nada para estos términos de búsqueda",
+ "search_results.no_results": "Sin 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": "Buscar {q}",
+ "search_results.title": "Búsqueda de \"{q}\"",
"server_banner.about_active_users": "Usuarios activos en el 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/et.json b/app/javascript/mastodon/locales/et.json
index 369ad2957b7de3..460c354d047506 100644
--- a/app/javascript/mastodon/locales/et.json
+++ b/app/javascript/mastodon/locales/et.json
@@ -305,7 +305,6 @@
"error.unexpected_crash.next_steps_addons": "Proovi need välja lülitada ja leht uuesti laadida. Kui sellest pole abi, võib siiski võimalik olla Mastodoni kasutada mõne teise lehitseja või rakendusega.",
"errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
"errors.unexpected_crash.report_issue": "Teavita veast",
- "explore.search_results": "Otsitulemused",
"explore.suggested_follows": "Inimesed",
"explore.title": "Avasta",
"explore.trending_links": "Uudised",
@@ -751,10 +750,8 @@
"search_results.accounts": "Profiilid",
"search_results.all": "Kõik",
"search_results.hashtags": "Sildid",
- "search_results.nothing_found": "Otsisõnadele vastavat sisu ei leitud",
"search_results.see_all": "Vaata kõiki",
"search_results.statuses": "Postitused",
- "search_results.title": "{q} otsing",
"server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)",
"server_banner.active_users": "aktiivsed kasutajad",
"server_banner.administered_by": "Administraator:",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 0afee2ed1d2997..d93f6e62cd8901 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -277,7 +277,6 @@
"error.unexpected_crash.next_steps_addons": "Saiatu desgaitu eta orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
- "explore.search_results": "Bilaketaren emaitzak",
"explore.suggested_follows": "Jendea",
"explore.title": "Arakatu",
"explore.trending_links": "Berriak",
@@ -709,10 +708,8 @@
"search_results.accounts": "Profilak",
"search_results.all": "Guztiak",
"search_results.hashtags": "Traolak",
- "search_results.nothing_found": "Ez da emaitzarik aurkitu bilaketa-termino horientzat",
"search_results.see_all": "Ikusi guztiak",
"search_results.statuses": "Bidalketak",
- "search_results.title": "Bilatu {q}",
"server_banner.about_active_users": "Azken 30 egunetan zerbitzari hau erabili duen jendea (hilabeteko erabiltzaile aktiboak)",
"server_banner.active_users": "erabiltzaile aktibo",
"server_banner.administered_by": "Administratzailea(k):",
diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json
index 81ea7f039272f9..cd682f563b22e8 100644
--- a/app/javascript/mastodon/locales/fa.json
+++ b/app/javascript/mastodon/locales/fa.json
@@ -308,7 +308,6 @@
"error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کارهای بومی از ماستودون استفاده کنید.",
"errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال",
"errors.unexpected_crash.report_issue": "گزارش مشکل",
- "explore.search_results": "نتایج جستوجو",
"explore.suggested_follows": "افراد",
"explore.title": "کاوش",
"explore.trending_links": "اخبار",
@@ -763,10 +762,8 @@
"search_results.accounts": "نمایهها",
"search_results.all": "همه",
"search_results.hashtags": "برچسبها",
- "search_results.nothing_found": "چیزی برای این عبارت جستوجو یافت نشد",
"search_results.see_all": "دیدن همه",
"search_results.statuses": "فرستهها",
- "search_results.title": "جستوجو برای {q}",
"server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کردهاند (کاربران فعّال ماهانه)",
"server_banner.active_users": "کاربر فعّال",
"server_banner.administered_by": "به مدیریت:",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 855d66a77ce7ba..299da014a0b068 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -308,7 +308,6 @@
"error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä, ja virkistä sitten sivunlataus. Mikäli ongelma jatkuu, voit mahdollisesti käyttää Mastodonia eri selaimella tai natiivilla sovelluksella.",
"errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle",
"errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
- "explore.search_results": "Hakutulokset",
"explore.suggested_follows": "Käyttäjät",
"explore.title": "Selaa",
"explore.trending_links": "Uutiset",
@@ -549,6 +548,8 @@
"notification.annual_report.view": "Näytä #Wrapstodon",
"notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa",
"notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät julkaisusi suosikkeihinsa",
+ "notification.favourite_pm": "{name} lisäsi yksityismainintasi suosikkeihinsa",
+ "notification.favourite_pm.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät yksityismainintasi suosikkeihinsa",
"notification.follow": "{name} seurasi sinua",
"notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua",
"notification.follow_request": "{name} on pyytänyt lupaa seurata sinua",
@@ -780,10 +781,11 @@
"search_results.accounts": "Profiilit",
"search_results.all": "Kaikki",
"search_results.hashtags": "Aihetunnisteet",
- "search_results.nothing_found": "Hakusi ei tuottanut tuloksia",
+ "search_results.no_results": "Ei tuloksia.",
+ "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": "Hae ”{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 a7f2338329d702..666c493646dc4d 100644
--- a/app/javascript/mastodon/locales/fil.json
+++ b/app/javascript/mastodon/locales/fil.json
@@ -180,7 +180,6 @@
"empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.",
"empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.",
"errors.unexpected_crash.report_issue": "Iulat ang isyu",
- "explore.search_results": "Mga resulta ng paghahanap",
"explore.suggested_follows": "Mga tao",
"explore.title": "Tuklasin",
"explore.trending_links": "Mga balita",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index 4a38d3b7753acb..bae34aee167c18 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Royn at gera tey óvirkin og lesa síðuna inn av nýggjum. Hjálpir tað ikki, so kann vera, at tað ber til at brúka Mastodon við einum øðrum kaga ella við eini app.",
"errors.unexpected_crash.copy_stacktrace": "Avrita stakkaslóðina til setiborðið",
"errors.unexpected_crash.report_issue": "Fráboða trupulleika",
- "explore.search_results": "Leitiúrslit",
"explore.suggested_follows": "Fólk",
"explore.title": "Rannsaka",
"explore.trending_links": "Tíðindi",
@@ -549,6 +548,8 @@
"notification.annual_report.view": "Sí #Wrapstodon",
"notification.favourite": "{name} dámdi postin hjá tær",
"notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær",
+ "notification.favourite_pm": "{name} yndismerkti tína privatu umrøðu",
+ "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# annar yndismerkti} other {# onnur yndismerktu}} tína privatu umrøðu",
"notification.follow": "{name} fylgdi tær",
"notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær",
"notification.follow_request": "{name} biður um at fylgja tær",
@@ -780,10 +781,8 @@
"search_results.accounts": "Vangar",
"search_results.all": "Alt",
"search_results.hashtags": "Frámerki",
- "search_results.nothing_found": "Hesi leitiorð góvu ongi úrslit",
"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 f423d1549dc741..bf4baf3cb10d14 100644
--- a/app/javascript/mastodon/locales/fr-CA.json
+++ b/app/javascript/mastodon/locales/fr-CA.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
"errors.unexpected_crash.report_issue": "Signaler un problème",
- "explore.search_results": "Résultats",
"explore.suggested_follows": "Personnes",
"explore.title": "Explorer",
"explore.trending_links": "Nouvelles",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Voir #Wrapstodon",
"notification.favourite": "{name} a ajouté votre publication à ses favoris",
"notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori",
+ "notification.favourite_pm": "{name} a mis votre mention privée en favori",
+ "notification.favourite_pm.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre mention privée en favori",
"notification.follow": "{name} vous suit",
"notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent",
"notification.follow_request": "{name} a demandé à vous suivre",
@@ -781,10 +782,11 @@
"search_results.accounts": "Profils",
"search_results.all": "Tout",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Aucun résultat avec ces mots-clés",
+ "search_results.no_results": "Aucun résultat.",
+ "search_results.no_search_yet": "Essayez de rechercher des messages, des profils ou des hashtags.",
"search_results.see_all": "Afficher tout",
"search_results.statuses": "Publications",
- "search_results.title": "Rechercher {q}",
+ "search_results.title": "Résultat de Recherche pour \"{q}\"",
"server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)",
"server_banner.active_users": "comptes actifs",
"server_banner.administered_by": "Administré par:",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index d7cfc0aca5da9d..0e9b698ac8de70 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
"errors.unexpected_crash.report_issue": "Signaler le problème",
- "explore.search_results": "Résultats de la recherche",
"explore.suggested_follows": "Personnes",
"explore.title": "Explorer",
"explore.trending_links": "Nouvelles",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Voir #Wrapstodon",
"notification.favourite": "{name} a ajouté votre message à ses favoris",
"notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori",
+ "notification.favourite_pm": "{name} a mis votre mention privée en favori",
+ "notification.favourite_pm.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre mention privée en favori",
"notification.follow": "{name} vous suit",
"notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent",
"notification.follow_request": "{name} a demandé à vous suivre",
@@ -781,10 +782,11 @@
"search_results.accounts": "Profils",
"search_results.all": "Tous les résultats",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Aucun résultat avec ces mots-clefs",
+ "search_results.no_results": "Aucun résultat.",
+ "search_results.no_search_yet": "Essayez de rechercher des messages, des profils ou des hashtags.",
"search_results.see_all": "Afficher tout",
"search_results.statuses": "Messages",
- "search_results.title": "Rechercher {q}",
+ "search_results.title": "Résultat de Recherche pour \"{q}\"",
"server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)",
"server_banner.active_users": "comptes actifs",
"server_banner.administered_by": "Administré par :",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index ec0d5728dc949e..8c5fd273e4d949 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -87,6 +87,13 @@
"alert.unexpected.title": "Oepsy!",
"alt_text_badge.title": "Alternative tekst",
"announcement.announcement": "Oankundiging",
+ "annual_report.summary.archetype.booster": "De cool-hunter",
+ "annual_report.summary.archetype.oracle": "It orakel",
+ "annual_report.summary.archetype.pollster": "De opinypeiler",
+ "annual_report.summary.archetype.replier": "De sosjale flinter",
+ "annual_report.summary.followers.followers": "folgers",
+ "annual_report.summary.followers.total": "totaal {count}",
+ "annual_report.summary.here_it_is": "Jo jieroersjoch foar {year}:",
"attachments_list.unprocessed": "(net ferwurke)",
"audio.hide": "Audio ferstopje",
"block_modal.remote_users_caveat": "Wy freegje de server {domain} om jo beslút te respektearjen. It neilibben hjirfan is echter net garandearre, omdat guon servers blokkaden oars ynterpretearje kinne. Iepenbiere berjochten binne mooglik noch hieltyd sichtber foar net-oanmelde brûkers.",
@@ -278,7 +285,6 @@
"error.unexpected_crash.next_steps_addons": "Probearje dizze út te skeakeljen en de side te fernijen. Wannear’t dit net helpt is it noch hieltyd mooglik om Mastodon yn in oare browser of mobile app te brûken.",
"errors.unexpected_crash.copy_stacktrace": "Stacktrace nei klamboerd kopiearje",
"errors.unexpected_crash.report_issue": "Technysk probleem melde",
- "explore.search_results": "Sykresultaten",
"explore.suggested_follows": "Minsken",
"explore.title": "Ferkenne",
"explore.trending_links": "Nijs",
@@ -721,10 +727,8 @@
"search_results.accounts": "Profilen",
"search_results.all": "Alles",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Dizze syktermen leverje gjin resultaat op",
"search_results.see_all": "Alles besjen",
"search_results.statuses": "Berjochten",
- "search_results.title": "Nei {q} sykje",
"server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)",
"server_banner.active_users": "warbere brûkers",
"server_banner.administered_by": "Beheard troch:",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index a6efe3739e6651..81b1647fcfa9c3 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Déan iarracht iad a dhíchumasú agus an leathanach a athnuachan. Mura gcabhraíonn sé sin, seans go mbeidh tú fós in ann Mastodon a úsáid trí bhrabhsálaí nó aip dhúchais eile.",
"errors.unexpected_crash.copy_stacktrace": "Cóipeáil rian cruachta go dtí an ghearrthaisce",
"errors.unexpected_crash.report_issue": "Tuairiscigh deacracht",
- "explore.search_results": "Torthaí cuardaigh",
"explore.suggested_follows": "Daoine",
"explore.title": "Féach thart",
"explore.trending_links": "Nuacht",
@@ -780,10 +779,8 @@
"search_results.accounts": "Próifílí",
"search_results.all": "Gach",
"search_results.hashtags": "Haischlib",
- "search_results.nothing_found": "Níorbh fhéidir aon rud a aimsiú do na téarmaí cuardaigh seo",
"search_results.see_all": "Gach rud a fheicáil",
"search_results.statuses": "Postálacha",
- "search_results.title": "Cuardaigh ar thóir {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:",
diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json
index 26d0a49dd71a38..d6893ccfff862d 100644
--- a/app/javascript/mastodon/locales/gd.json
+++ b/app/javascript/mastodon/locales/gd.json
@@ -296,7 +296,6 @@
"error.unexpected_crash.next_steps_addons": "Feuch an cuir thu à comas iad ’s gun ath-nuadhaich thu an duilleag seo. Mura cuidich sin, dh’fhaoidte gur urrainn dhut Mastodon a chleachdadh fhathast le brabhsair eile no le aplacaid thùsail.",
"errors.unexpected_crash.copy_stacktrace": "Cuir lethbhreac dhen stacktrace air an stòr-bhòrd",
"errors.unexpected_crash.report_issue": "Dèan aithris air an duilgheadas",
- "explore.search_results": "Toraidhean an luirg",
"explore.suggested_follows": "Daoine",
"explore.title": "Rùraich",
"explore.trending_links": "Naidheachdan",
@@ -741,10 +740,8 @@
"search_results.accounts": "Pròifilean",
"search_results.all": "Na h-uile",
"search_results.hashtags": "Tagaichean hais",
- "search_results.nothing_found": "Cha do lorg sinn dad dha na h-abairtean-luirg seo",
"search_results.see_all": "Seall na h-uile",
"search_results.statuses": "Postaichean",
- "search_results.title": "Lorg {q}",
"server_banner.about_active_users": "Daoine a chleachd am frithealaiche seo rè an 30 latha mu dheireadh (Cleachdaichean gnìomhach gach mìos)",
"server_banner.active_users": "cleachdaichean gnìomhach",
"server_banner.administered_by": "Rianachd le:",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 2fa2c117960c8c..fbf377be5d2dac 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis",
"errors.unexpected_crash.report_issue": "Informar sobre un problema",
- "explore.search_results": "Resultados da busca",
"explore.suggested_follows": "Persoas",
"explore.title": "Descubrir",
"explore.trending_links": "Novas",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} marcou como favorita a túa publicación",
"notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} favoreceron a túa publicación",
+ "notification.favourite_pm": "{name} favoreceu a túa mención privada",
+ "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {outra persoa} other {outras # persoas}} favoreceron a túa mención privada",
"notification.follow": "{name} comezou a seguirte",
"notification.follow.name_and_others": "{name} e {count, plural, one {# mais} other {# mais}} seguíronte",
"notification.follow_request": "{name} solicitou seguirte",
@@ -627,7 +628,7 @@
"notifications.filter.follows": "Seguimentos",
"notifications.filter.mentions": "Mencións",
"notifications.filter.polls": "Resultados da enquisa",
- "notifications.filter.statuses": "Actualizacións de xente á que segues",
+ "notifications.filter.statuses": "Actualizacións de persoas que segues",
"notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificacións",
"notifications.mark_as_read": "Marcar todas as notificacións como lidas",
@@ -781,10 +782,11 @@
"search_results.accounts": "Perfís",
"search_results.all": "Todo",
"search_results.hashtags": "Cancelos",
- "search_results.nothing_found": "Non atopamos nada con estes termos de busca",
+ "search_results.no_results": "Sen resultados.",
+ "search_results.no_search_yet": "Intenta buscando publicacións, perfís ou cancelos.",
"search_results.see_all": "Ver todo",
"search_results.statuses": "Publicacións",
- "search_results.title": "Resultados para {q}",
+ "search_results.title": "Resultados para «{q}»",
"server_banner.about_active_users": "Persoas que usaron este servidor nos últimos 30 días (Usuarias Activas Mensuais)",
"server_banner.active_users": "usuarias activas",
"server_banner.administered_by": "Administrada por:",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index f86a9f3833172e..01f0bdca42aa9e 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "נסה/י להסיר אותם ולרענן את הדף. אם זה לא עוזר, אולי אפשר עדיין להשתמש במסטודון דרך דפדפן אחר או באמצעות אפליקציה ילידית.",
"errors.unexpected_crash.copy_stacktrace": "להעתיק את הקוד ללוח הכתיבה",
"errors.unexpected_crash.report_issue": "דווח על בעיה",
- "explore.search_results": "תוצאות חיפוש",
"explore.suggested_follows": "אנשים",
"explore.title": "סיור",
"explore.trending_links": "חדשות",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "לצפייה ב- #סיכומודון",
"notification.favourite": "הודעתך חובבה על ידי {name}",
"notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך",
+ "notification.favourite_pm": "{name} חיבב.ה איזכור שלך בהודעה פרטית",
+ "notification.favourite_pm.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו הודעתך הפרטית",
"notification.follow": "{name} במעקב אחרייך",
"notification.follow.name_and_others": "{name} ועוד {count, plural,one {מישהו} other {# אחרים}} החלו לעקוב אחריך",
"notification.follow_request": "{name} ביקשו לעקוב אחריך",
@@ -781,10 +782,8 @@
"search_results.accounts": "פרופילים",
"search_results.all": "כל התוצאות",
"search_results.hashtags": "תגיות",
- "search_results.nothing_found": "לא נמצא דבר עבור תנאי חיפוש אלה",
"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 747d49f3c56c2f..b2e00e14b0e778 100644
--- a/app/javascript/mastodon/locales/hi.json
+++ b/app/javascript/mastodon/locales/hi.json
@@ -242,7 +242,6 @@
"error.unexpected_crash.next_steps_addons": "उन्हें अक्षम करने और पृष्ठ को ताज़ा करने का प्रयास करें। यदि वह मदद नहीं करता है, तो आप अभी भी मास्टोडन का उपयोग किसी भिन्न ब्राउज़र या नेटिव ऐप के माध्यम से कर सकते हैं।",
"errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें",
"errors.unexpected_crash.report_issue": "समस्या सूचित करें",
- "explore.search_results": "सर्च रिजल्ट्स",
"explore.suggested_follows": "लोग",
"explore.title": "एक्स्प्लोर",
"explore.trending_links": "समाचार",
diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json
index e92ba20470b073..6e8a86989c549f 100644
--- a/app/javascript/mastodon/locales/hr.json
+++ b/app/javascript/mastodon/locales/hr.json
@@ -205,7 +205,6 @@
"error.unexpected_crash.next_steps_addons": "Pokušaj ih onemogućiti i osvježiti stranicu. Ako to ne pomogne, i dalje ćeš biti u mogućnosti koristiti Mastodon preko nekog drugog preglednika ili izvornog app-a.",
"errors.unexpected_crash.copy_stacktrace": "Kopiraj stacktrace u međuspremnik",
"errors.unexpected_crash.report_issue": "Prijavi problem",
- "explore.search_results": "Rezultati pretrage",
"explore.suggested_follows": "Ljudi",
"explore.title": "Pretraži",
"explore.trending_links": "Novosti",
@@ -412,10 +411,8 @@
"search_popout.user": "korisnik",
"search_results.accounts": "Profili",
"search_results.all": "Sve",
- "search_results.nothing_found": "Nije pronađeno ništa za te ključne riječi",
"search_results.see_all": "Prikaži sve",
"search_results.statuses": "Toots",
- "search_results.title": "Traži {q}",
"server_banner.about_active_users": "Popis aktivnih korisnika prošli mjesec",
"server_banner.active_users": "aktivni korisnici",
"server_banner.administered_by": "Administrator je:",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index ed3c1c05275e82..dbca2bb69153da 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
"errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása",
"errors.unexpected_crash.report_issue": "Probléma jelentése",
- "explore.search_results": "Keresési találatok",
"explore.suggested_follows": "Emberek",
"explore.title": "Felfedezés",
"explore.trending_links": "Hírek",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "#Wrapstodon Megtekintése",
"notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet",
"notification.favourite.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a bejegyzésedet",
+ "notification.favourite_pm": "{name} kedvelte a privát említésedet",
+ "notification.favourite_pm.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a privát említésedet",
"notification.follow": "{name} követ téged",
"notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett",
"notification.follow_request": "{name} követni szeretne téged",
@@ -781,10 +782,11 @@
"search_results.accounts": "Profilok",
"search_results.all": "Összes",
"search_results.hashtags": "Hashtagek",
- "search_results.nothing_found": "Nincs találat ezekre a keresési kifejezésekre",
+ "search_results.no_results": "Nincs találat.",
+ "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": "\"{q}\" keresése",
"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 ab7f2c155df993..235969ad6cc547 100644
--- a/app/javascript/mastodon/locales/hy.json
+++ b/app/javascript/mastodon/locales/hy.json
@@ -180,7 +180,6 @@
"error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
"errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
- "explore.search_results": "Որոնման արդիւնքներ",
"explore.suggested_follows": "Մարդիկ",
"explore.title": "Բացայայտել",
"explore.trending_links": "Նորութիւններ",
@@ -397,7 +396,6 @@
"search_results.hashtags": "Պիտակներ",
"search_results.see_all": "Տեսնել բոլորը",
"search_results.statuses": "Գրառումներ",
- "search_results.title": "Որոնել {q}-ն",
"server_banner.active_users": "ակտիւ մարդիկ",
"server_banner.administered_by": "Կառաւարող",
"server_banner.server_stats": "Սերուերի վիճակը",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index 530baa707dda45..4155c6565bb54e 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -85,7 +85,7 @@
"alert.rate_limited.title": "Excesso de requestas",
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
"alert.unexpected.title": "Ups!",
- "alt_text_badge.title": "Texto alt",
+ "alt_text_badge.title": "Texto alternative",
"announcement.announcement": "Annuncio",
"annual_report.summary.archetype.booster": "Le impulsator",
"annual_report.summary.archetype.lurker": "Le lector",
@@ -103,6 +103,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus usate",
"annual_report.summary.most_used_hashtag.none": "Necun",
"annual_report.summary.new_posts.new_posts": "nove messages",
+ "annual_report.summary.percentile.text": "Isto te pone in le primeusatores de {domain}.",
"annual_report.summary.percentile.we_wont_tell_bernie": "Tu es un primo inter pares.",
"annual_report.summary.thanks": "Gratias pro facer parte de Mastodon!",
"attachments_list.unprocessed": "(non processate)",
@@ -143,10 +144,12 @@
"column.direct": "Mentiones private",
"column.directory": "Navigar profilos",
"column.domain_blocks": "Dominios blocate",
+ "column.edit_list": "Modificar lista",
"column.favourites": "Favorites",
"column.firehose": "Fluxos in directo",
"column.follow_requests": "Requestas de sequimento",
"column.home": "Initio",
+ "column.list_members": "Gerer le membros del lista",
"column.lists": "Listas",
"column.mutes": "Usatores silentiate",
"column.notifications": "Notificationes",
@@ -202,6 +205,9 @@
"confirmations.edit.confirm": "Modificar",
"confirmations.edit.message": "Si tu modifica isto ora, le message in curso de composition essera perdite. Es tu secur de voler continuar?",
"confirmations.edit.title": "Superscriber le message?",
+ "confirmations.follow_to_list.confirm": "Sequer e adder al lista",
+ "confirmations.follow_to_list.message": "Tu debe sequer {name} pro poter adder le/la a un lista.",
+ "confirmations.follow_to_list.title": "Sequer le usator?",
"confirmations.logout.confirm": "Clauder session",
"confirmations.logout.message": "Es tu secur que tu vole clauder le session?",
"confirmations.logout.title": "Clauder session?",
@@ -233,6 +239,9 @@
"disabled_account_banner.text": "Tu conto {disabledAccount} es actualmente disactivate.",
"dismissable_banner.community_timeline": "Ecce le messages public le plus recente del personas con contos sur {domain}.",
"dismissable_banner.dismiss": "Clauder",
+ "dismissable_banner.explore_links": "Iste articulos de novas se condivide le plus sur le fediverso hodie. Le articulos de novas le plus recente, publicate per plus personas differente, se classifica plus in alto.",
+ "dismissable_banner.explore_statuses": "Iste messages de tote le fediverso gania popularitate hodie. Le messages plus nove con plus impulsos e favorites se classifica plus in alto.",
+ "dismissable_banner.explore_tags": "Iste hashtags gania popularitate sur le fediverso hodie. Le hashtags usate per plus personas differente se classifica plus in alto.",
"dismissable_banner.public_timeline": "Istes es le messages public le plus recente del personas sur le fediverso que le gente sur {domain} seque.",
"domain_block_modal.block": "Blocar le servitor",
"domain_block_modal.block_account_instead": "Blocar @{name} in su loco",
@@ -240,8 +249,8 @@
"domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.",
"domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.",
"domain_block_modal.title": "Blocar dominio?",
- "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequace} other {{followersCountDisplay} sequaces}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.",
- "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequaces e le personas que tu seque ab iste servitor.",
+ "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequitor} other {{followersCountDisplay} sequitores}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.",
+ "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le 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.",
@@ -300,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Tenta disactivar istes e refrescar le pagina. Si isto non remedia le problema, es possibile que tu pote totevia usar Mastodon per medio de un altere navigator o application native.",
"errors.unexpected_crash.copy_stacktrace": "Copiar le traciamento del pila al area de transferentia",
"errors.unexpected_crash.report_issue": "Reportar problema",
- "explore.search_results": "Resultatos de recerca",
"explore.suggested_follows": "Personas",
"explore.title": "Explorar",
"explore.trending_links": "Novas",
@@ -323,7 +331,7 @@
"filter_modal.select_filter.title": "Filtrar iste message",
"filter_modal.title.status": "Filtrar un message",
"filter_warning.matches_filter": "Corresponde al filtro “{title}”",
- "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nemo} one {un persona} other {# personas}} que tu pote cognoscer",
+ "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {necuno} one {un persona} other {# personas}} que tu pote cognoscer",
"filtered_notifications_banner.title": "Notificationes filtrate",
"firehose.all": "Toto",
"firehose.local": "Iste servitor",
@@ -354,8 +362,10 @@
"footer.privacy_policy": "Politica de confidentialitate",
"footer.source_code": "Vider le codice fonte",
"footer.status": "Stato",
+ "footer.terms_of_service": "Conditiones de servicio",
"generic.saved": "Salvate",
"getting_started.heading": "Prime passos",
+ "hashtag.admin_moderation": "Aperir le interfacie de moderation pro #{name}",
"hashtag.column_header.tag_mode.all": "e {additional}",
"hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "sin {additional}",
@@ -371,9 +381,9 @@
"hashtag.follow": "Sequer hashtag",
"hashtag.unfollow": "Non sequer plus le hashtag",
"hashtags.and_other": "…e {count, plural, one {}other {# plus}}",
- "hints.profiles.followers_may_be_missing": "Le sequaces pro iste profilo pote mancar.",
- "hints.profiles.follows_may_be_missing": "Sequites pro iste profilo pote mancar.",
- "hints.profiles.posts_may_be_missing": "Alcun messages ab iste profilo pote mancar.",
+ "hints.profiles.followers_may_be_missing": "Le sequitores de iste profilo pote mancar.",
+ "hints.profiles.follows_may_be_missing": "Le profilos sequite per iste profilo pote mancar.",
+ "hints.profiles.posts_may_be_missing": "Alcun messages de iste profilo pote mancar.",
"hints.profiles.see_more_followers": "Vider plus de sequitores sur {domain}",
"hints.profiles.see_more_follows": "Vider plus de sequites sur {domain}",
"hints.profiles.see_more_posts": "Vider plus de messages sur {domain}",
@@ -386,11 +396,11 @@
"home.pending_critical_update.link": "Vider actualisationes",
"home.pending_critical_update.title": "Actualisation de securitate critic disponibile!",
"home.show_announcements": "Monstrar annuncios",
- "ignore_notifications_modal.disclaimer": "Mastodon non pote informar le usatores que tu ha ignorate lor avisos. Ignorar avisos non stoppara le messages mesme de esser inviate.",
+ "ignore_notifications_modal.disclaimer": "Mastodon non pote informar al usatores que tu ha ignorate lor notificationes. Ignorar le notificationes non impedira le invio del messages.",
"ignore_notifications_modal.filter_instead": "Filtrar in vice",
"ignore_notifications_modal.filter_to_act_users": "Tu ancora potera acceptar, rejectar, o reportar usatores",
- "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta evitar confusion potential",
- "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider avisos filtrate separatemente",
+ "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta a evitar confusion potential",
+ "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider separatemente le notificationes filtrate",
"ignore_notifications_modal.ignore": "Ignorar le notificationes",
"ignore_notifications_modal.limited_accounts_title": "Ignorar le notificationes de contos moderate?",
"ignore_notifications_modal.new_accounts_title": "Ignorar le notificationes de nove contos?",
@@ -454,8 +464,8 @@
"lightbox.close": "Clauder",
"lightbox.next": "Sequente",
"lightbox.previous": "Precedente",
- "lightbox.zoom_in": "Aggrandir a dimension actual",
- "lightbox.zoom_out": "Aggrandir pro adaptar",
+ "lightbox.zoom_in": "Aggrandir al dimension real",
+ "lightbox.zoom_out": "Diminuer pro adaptar",
"limited_account_hint.action": "Monstrar profilo in omne caso",
"limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.",
"link_preview.author": "Per {name}",
@@ -465,13 +475,28 @@
"lists.add_to_list": "Adder al lista",
"lists.add_to_lists": "Adder {name} al listas",
"lists.create": "Crear",
+ "lists.create_a_list_to_organize": "Crear un nove lista pro organisar tu fluxo de initio",
+ "lists.create_list": "Crear lista",
"lists.delete": "Deler lista",
+ "lists.done": "Facite",
"lists.edit": "Modificar lista",
+ "lists.exclusive": "Celar memberos in Initio",
+ "lists.exclusive_hint": "Si alcuno es sur iste lista, celar iste persona in tu fluxo de initio pro evitar de vider su messages duo vices.",
"lists.find_users_to_add": "Trovar usatores a adder",
+ "lists.list_members": "Membros del lista",
+ "lists.list_members_count": "{count, plural, one {# membro} other {# membros}}",
+ "lists.list_name": "Nomine del lista",
"lists.new_list_name": "Nove nomine de lista",
+ "lists.no_lists_yet": "Necun lista ancora.",
+ "lists.no_members_yet": "Necun membro ancora.",
+ "lists.no_results_found": "Necun resultato trovate.",
+ "lists.remove_member": "Remover",
"lists.replies_policy.followed": "Qualcunque usator sequite",
"lists.replies_policy.list": "Membros del lista",
"lists.replies_policy.none": "Nemo",
+ "lists.save": "Salvar",
+ "lists.search": "Cercar",
+ "lists.show_replies_to": "Includer responsas de membros del lista a",
"load_pending": "{count, plural, one {# nove entrata} other {# nove entratas}}",
"loading_indicator.label": "Cargante…",
"media_gallery.hide": "Celar",
@@ -519,11 +544,13 @@
"notification.admin.report_statuses": "{name} ha reportate {target} pro {category}",
"notification.admin.report_statuses_other": "{name} ha reportate {target}",
"notification.admin.sign_up": "{name} se ha inscribite",
- "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere usator} other {altere # usatores}} se inscribeva",
+ "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere persona} other {# altere personas}} se ha inscribite",
"notification.annual_report.message": "Tu summario #Wrapstodon pro {year} attende! Revela le momentos saliente e memorabile de tu anno sur Mastodon!",
"notification.annual_report.view": "Visitar summario #Wrapstodon",
"notification.favourite": "{name} ha marcate tu message como favorite",
- "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} favoriva tu message",
+ "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha marcate tu message como favorite",
+ "notification.favourite_pm": "{name} ha marcate tu mention privte como favorite",
+ "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha marcate tu mention private como favorite",
"notification.follow": "{name} te ha sequite",
"notification.follow.name_and_others": "{name} e {count, plural, one {# other} other {# alteres}} te ha sequite",
"notification.follow_request": "{name} ha requestate de sequer te",
@@ -533,7 +560,7 @@
"notification.label.private_reply": "Responsa private",
"notification.label.reply": "Responder",
"notification.mention": "Mention",
- "notification.mentioned_you": "{name} te mentionava",
+ "notification.mentioned_you": "{name} te ha mentionate",
"notification.moderation-warning.learn_more": "Apprender plus",
"notification.moderation_warning": "Tu ha recipite un advertimento de moderation",
"notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.",
@@ -546,7 +573,7 @@
"notification.own_poll": "Tu sondage ha finite",
"notification.poll": "Un sondage in le qual tu ha votate ha finite",
"notification.reblog": "{name} ha impulsate tu message",
- "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} promoveva tu message",
+ "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha impulsate tu message",
"notification.relationships_severance_event": "Connexiones perdite con {name}",
"notification.relationships_severance_event.account_suspension": "Un administrator de {from} ha suspendiute {target}. Isto significa que tu non pote plus reciper actualisationes de iste persona o interager con ille.",
"notification.relationships_severance_event.domain_block": "Un administrator de {from} ha blocate {target}, includente {followersCount} de tu sequitores e {followingCount, plural, one {# conto} other {# contos}} que tu seque.",
@@ -555,19 +582,19 @@
"notification.status": "{name} ha justo ora publicate",
"notification.update": "{name} ha modificate un message",
"notification_requests.accept": "Acceptar",
- "notification_requests.accept_multiple": "{count, plural, one {Accepta # requesta…} other {Accepta # requestas…}}",
- "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accepta requesta} other {Accepta requestas}}",
- "notification_requests.confirm_accept_multiple.message": "Tu acceptara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Desira tu vermente continuar?",
+ "notification_requests.accept_multiple": "{count, plural, one {Acceptar # requesta…} other {Acceptar # requestas…}}",
+ "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptar le requesta} other {Acceptar le requestas}}",
+ "notification_requests.confirm_accept_multiple.message": "Tu es sur le puncto de acceptar {count, plural, one {un requesta de notification} other {# requestas de notification}}. Es tu secur de voler continuar?",
"notification_requests.confirm_accept_multiple.title": "Acceptar petitiones de notification?",
- "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar requesta} other {Rejectar requestas}}",
- "notification_requests.confirm_dismiss_multiple.message": "Tu rejectara {count, plural, one {un requesta de aviso} other {# requestas de aviso}}. Tu non potera facilemente acceder {count, plural, one {lo} other {los}} ancora. Desira tu vermente continuar?",
+ "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar le requesta} other {Rejectar le requestas}}",
+ "notification_requests.confirm_dismiss_multiple.message": "Tu es sur le puncto de rejectar {count, plural, one {un requesta} other {# requestas}} de notification. Tu non potera facilemente acceder a {count, plural, one {illo} other {illos}} plus tarde. Es tu secur de voler continuar?",
"notification_requests.confirm_dismiss_multiple.title": "Dimitter petitiones de notification?",
"notification_requests.dismiss": "Clauder",
"notification_requests.dismiss_multiple": "{count, plural, one {Rejectar # requesta…} other {Rejectar # requestas…}}",
"notification_requests.edit_selection": "Modificar",
"notification_requests.exit_selection": "Facite",
- "notification_requests.explainer_for_limited_account": "Le avisos ab iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.",
- "notification_requests.explainer_for_limited_remote_account": "Le avisos ab iste conto ha essite filtrate perque le conto o su servitor ha essite limitate per un moderator.",
+ "notification_requests.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.notifications_from": "Notificationes de {name}",
@@ -628,6 +655,8 @@
"notifications_permission_banner.enable": "Activar notificationes de scriptorio",
"notifications_permission_banner.how_to_control": "Pro reciper notificationes quando Mastodon non es aperte, activa le notificationes de scriptorio. Post lor activation, es possibile controlar precisemente qual typos de interaction genera notificationes de scriptorio per medio del button {icon} hic supra.",
"notifications_permission_banner.title": "Non mancar jammais a un cosa",
+ "onboarding.follows.back": "Retro",
+ "onboarding.follows.done": "Facite",
"onboarding.follows.empty": "Regrettabilemente, non es possibile monstrar resultatos al momento. Tu pote tentar usar le recerca o percurrer le pagina de exploration pro cercar personas a sequer, o tentar lo de novo plus tarde.",
"onboarding.follows.search": "Cercar",
"onboarding.follows.title": "Seque personas pro comenciar",
@@ -753,10 +782,8 @@
"search_results.accounts": "Profilos",
"search_results.all": "Toto",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Nihil trovate pro iste terminos de recerca",
"search_results.see_all": "Vider toto",
"search_results.statuses": "Messages",
- "search_results.title": "Cercar {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:",
@@ -774,7 +801,7 @@
"status.bookmark": "Adder al marcapaginas",
"status.cancel_reblog_private": "Disfacer impulso",
"status.cannot_reblog": "Iste message non pote esser impulsate",
- "status.continued_thread": "Argumento continuitate",
+ "status.continued_thread": "Continuation del discussion",
"status.copy": "Copiar ligamine a message",
"status.delete": "Deler",
"status.detailed_status": "Vista detaliate del conversation",
@@ -829,6 +856,7 @@
"subscribed_languages.target": "Cambiar le linguas subscribite pro {target}",
"tabs_bar.home": "Initio",
"tabs_bar.notifications": "Notificationes",
+ "terms_of_service.title": "Conditiones de servicio",
"time_remaining.days": "{number, plural, one {# die} other {# dies}} restante",
"time_remaining.hours": "{number, plural, one {# hora} other {# horas}} restante",
"time_remaining.minutes": "{number, plural, one {# minuta} other {# minutas}} restante",
@@ -846,11 +874,11 @@
"upload_error.poll": "Incargamento de files non permittite con sondages.",
"upload_form.audio_description": "Describe lo pro le gente con difficultates auditive",
"upload_form.description": "Describe lo pro le gente con difficultates visual",
- "upload_form.drag_and_drop.instructions": "Pro colliger un annexo de medios, pressar Spatio o Inviar. Trahente lo, usar le claves flecha pro mover le annexo de medios in ulle direction date. De novo pressar Spatio o Inviar pro deponer le annexo de medios in su nove position, o pressar Escappar pro cancellar.",
- "upload_form.drag_and_drop.on_drag_cancel": "Le extraction era cancellate. Le annexo de medios {item} era deponite.",
- "upload_form.drag_and_drop.on_drag_end": "Le annexo de medios {item} era deponite.",
- "upload_form.drag_and_drop.on_drag_over": "Le annexo de medios {item} era movite.",
- "upload_form.drag_and_drop.on_drag_start": "Annexo de medios {item} colligite.",
+ "upload_form.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_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",
"upload_form.thumbnail": "Cambiar le miniatura",
"upload_form.video_description": "Describe lo pro le gente con difficultates auditive o visual",
diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json
index 12e4e83ba92fd1..dda0a8e43b5c2c 100644
--- a/app/javascript/mastodon/locales/id.json
+++ b/app/javascript/mastodon/locales/id.json
@@ -271,7 +271,6 @@
"error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika itu tidak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi asli.",
"errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip",
"errors.unexpected_crash.report_issue": "Laporkan masalah",
- "explore.search_results": "Hasil pencarian",
"explore.suggested_follows": "Orang",
"explore.title": "Jelajahi",
"explore.trending_links": "Berita",
@@ -535,9 +534,7 @@
"search.search_or_paste": "Cari atau ketik URL",
"search_results.all": "Semua",
"search_results.hashtags": "Tagar",
- "search_results.nothing_found": "Tidak dapat menemukan apa pun untuk istilah-istilah pencarian ini",
"search_results.statuses": "Kiriman",
- "search_results.title": "Cari {q}",
"server_banner.about_active_users": "Orang menggunakan server ini selama 30 hari terakhir (Pengguna Aktif Bulanan)",
"server_banner.active_users": "pengguna aktif",
"server_banner.administered_by": "Dikelola oleh:",
diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json
index dd1fafea1d1e71..aae8337d05e743 100644
--- a/app/javascript/mastodon/locales/ie.json
+++ b/app/javascript/mastodon/locales/ie.json
@@ -258,7 +258,6 @@
"error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.",
"errors.unexpected_crash.copy_stacktrace": "Copiar cumul-tracie a paperiere",
"errors.unexpected_crash.report_issue": "Raportar un problema",
- "explore.search_results": "Resultates de sercha",
"explore.suggested_follows": "Gente",
"explore.title": "Explorar",
"explore.trending_links": "Novas",
@@ -625,10 +624,8 @@
"search_results.accounts": "Profiles",
"search_results.all": "Omni",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Trovat se nullcos por ti término de sercha",
"search_results.see_all": "Vider omni",
"search_results.statuses": "Postas",
- "search_results.title": "Sercha por {q}",
"server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)",
"server_banner.active_users": "activ usatores",
"server_banner.administered_by": "Administrat de:",
diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json
index ad4baa1d4fbd70..560e01ecaf7204 100644
--- a/app/javascript/mastodon/locales/io.json
+++ b/app/javascript/mastodon/locales/io.json
@@ -276,7 +276,6 @@
"error.unexpected_crash.next_steps_addons": "Probez desaktivigar e rifreshar pagino. Se to ne helpas, vu forsan ankore povas uzar Mastodon per diferenta vidilo o provizita softwaro.",
"errors.unexpected_crash.copy_stacktrace": "Kopiez amastraso a klipplanko",
"errors.unexpected_crash.report_issue": "Reportigez problemo",
- "explore.search_results": "Trovuri",
"explore.suggested_follows": "Personi",
"explore.title": "Explorez",
"explore.trending_links": "Novaji",
@@ -713,10 +712,8 @@
"search_results.accounts": "Profili",
"search_results.all": "Omna",
"search_results.hashtags": "Hashtagi",
- "search_results.nothing_found": "Ne povas ganar irgo per ca trovvorti",
"search_results.see_all": "Videz omni",
"search_results.statuses": "Posti",
- "search_results.title": "Trovez {q}",
"server_banner.about_active_users": "Personi quo uzas ca servilo dum antea 30 dii (monate aktiva uzanti)",
"server_banner.active_users": "aktiva uzanti",
"server_banner.administered_by": "Administresis da:",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index 84fe1903cc0ea5..20bf53a456fe2c 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.",
"errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald",
"errors.unexpected_crash.report_issue": "Tilkynna vandamál",
- "explore.search_results": "Leitarniðurstöður",
"explore.suggested_follows": "Fólk",
"explore.title": "Kanna",
"explore.trending_links": "Fréttir",
@@ -781,10 +780,8 @@
"search_results.accounts": "Notendasnið",
"search_results.all": "Allt",
"search_results.hashtags": "Myllumerki",
- "search_results.nothing_found": "Gat ekki fundið neitt sem samsvarar þessum leitarorðum",
"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 8897d37141df8b..1b82399a509abf 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e a ricaricare la pagina. Se ciò non aiuta, potresti ancora utilizzare Mastodon tramite un browser differente o un'app nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti",
"errors.unexpected_crash.report_issue": "Segnala un problema",
- "explore.search_results": "Risultati della ricerca",
"explore.suggested_follows": "Persone",
"explore.title": "Esplora",
"explore.trending_links": "Notizie",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "Visualizza #Wrapstodon",
"notification.favourite": "{name} ha aggiunto il tuo post ai preferiti",
"notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti",
+ "notification.favourite_pm": "{name} ha aggiunto ai preferiti la tua menzione privata",
+ "notification.favourite_pm.name_and_others_with_link": "{name} e {count, plural, one {# altro utente} other {# altri utenti}} hanno aggiunto ai preferiti la tua menzione privata",
"notification.follow": "{name} ha iniziato a seguirti",
"notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti",
"notification.follow_request": "{name} ha richiesto di seguirti",
@@ -781,10 +782,11 @@
"search_results.accounts": "Profili",
"search_results.all": "Tutto",
"search_results.hashtags": "Hashtag",
- "search_results.nothing_found": "Impossibile trovare qualcosa per questi termini di ricerca",
+ "search_results.no_results": "Nessun risultato.",
+ "search_results.no_search_yet": "Prova a cercare post, profili o hashtag.",
"search_results.see_all": "Mostra tutto",
"search_results.statuses": "Post",
- "search_results.title": "Cerca {q}",
+ "search_results.title": "Cerca \"{q}\"",
"server_banner.about_active_users": "Persone che hanno utilizzato questo server negli ultimi 30 giorni (Utenti Attivi Mensilmente)",
"server_banner.active_users": "utenti attivi",
"server_banner.administered_by": "Amministrato da:",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 6039dcd340b7a5..1ceaa5e51c798e 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -313,7 +313,6 @@
"error.unexpected_crash.next_steps_addons": "それらを無効化してからリロードをお試しください。それでも解決しない場合、他のブラウザやアプリで Mastodon をお試しください。",
"errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー",
"errors.unexpected_crash.report_issue": "問題を報告",
- "explore.search_results": "検索結果",
"explore.suggested_follows": "ユーザー",
"explore.title": "探索する",
"explore.trending_links": "ニュース",
@@ -788,10 +787,8 @@
"search_results.accounts": "ユーザー",
"search_results.all": "すべて",
"search_results.hashtags": "ハッシュタグ",
- "search_results.nothing_found": "この検索条件では何も見つかりませんでした",
"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/kab.json b/app/javascript/mastodon/locales/kab.json
index a0f0a573779692..723ea01cb0553a 100644
--- a/app/javascript/mastodon/locales/kab.json
+++ b/app/javascript/mastodon/locales/kab.json
@@ -221,7 +221,6 @@
"error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.",
"errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus",
"errors.unexpected_crash.report_issue": "Mmel ugur",
- "explore.search_results": "Igemmaḍ n unadi",
"explore.suggested_follows": "Imdanen",
"explore.title": "Snirem",
"explore.trending_links": "Isallen",
@@ -538,7 +537,6 @@
"search_results.hashtags": "Ihacṭagen",
"search_results.see_all": "Wali-ten akk",
"search_results.statuses": "Tisuffaɣ",
- "search_results.title": "Anadi ɣef {q}",
"server_banner.active_users": "iseqdacen urmiden",
"server_banner.administered_by": "Yettwadbel sɣur :",
"server_banner.server_stats": "Tidaddanin n uqeddac:",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 9a772892b79cb3..c5d781776cfac8 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "그걸 끄고 페이지를 새로고침 해보세요. 그래도 해결되지 않으면, 다른 브라우저나 네이티브 앱으로 마스토돈을 이용해 보실 수 있습니다.",
"errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사",
"errors.unexpected_crash.report_issue": "문제 신고",
- "explore.search_results": "검색 결과",
"explore.suggested_follows": "사람들",
"explore.title": "둘러보기",
"explore.trending_links": "소식",
@@ -492,8 +491,8 @@
"lists.no_members_yet": "아직 구성원이 없습니다.",
"lists.no_results_found": "결과가 없습니다.",
"lists.remove_member": "삭제",
- "lists.replies_policy.followed": "팔로우 한 사용자 누구나",
- "lists.replies_policy.list": "리스트의 구성원",
+ "lists.replies_policy.followed": "팔로우 한 사용자 누구나에게",
+ "lists.replies_policy.list": "리스트의 구성원에게",
"lists.replies_policy.none": "모두 제외",
"lists.save": "저장",
"lists.search": "검색",
@@ -550,6 +549,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} 님이 팔로우 요청을 보냈습니다",
@@ -781,10 +782,8 @@
"search_results.accounts": "프로필",
"search_results.all": "전부",
"search_results.hashtags": "해시태그",
- "search_results.nothing_found": "검색어에 대한 결과를 찾을 수 없습니다",
"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": "관리자:",
@@ -857,6 +856,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/ku.json b/app/javascript/mastodon/locales/ku.json
index 34a616b52f860a..f69cc488c70b06 100644
--- a/app/javascript/mastodon/locales/ku.json
+++ b/app/javascript/mastodon/locales/ku.json
@@ -196,7 +196,6 @@
"error.unexpected_crash.next_steps_addons": "Neçalakkirin û nûkirina rûpelê biceribîne. Ku ev bi kêr neyê, dibe ku te hîn jî bi riya gerokeke cuda an jî sepana xwecihî ya Mastodon bi kar bînî.",
"errors.unexpected_crash.copy_stacktrace": "Şopa gemara (stacktrace) tûrikê ra jê bigire",
"errors.unexpected_crash.report_issue": "Pirsgirêkekê ragihîne",
- "explore.search_results": "Encamên lêgerînê",
"explore.title": "Vekole",
"explore.trending_links": "Nûçe",
"explore.trending_statuses": "Şandî",
@@ -446,9 +445,7 @@
"search_results.accounts": "Profîl",
"search_results.all": "Hemû",
"search_results.hashtags": "Hashtag",
- "search_results.nothing_found": "Ji bo van peyvên lêgerînê tiştek nehate dîtin",
"search_results.statuses": "Şandî",
- "search_results.title": "Li {q} bigere",
"server_banner.about_active_users": "Kesên ku di van 30 rojên dawî de vê rajekarê bi kar tînin (Bikarhênerên Çalak ên Mehane)",
"server_banner.active_users": "bikarhênerên çalak",
"server_banner.administered_by": "Tê bi rêvebirin ji aliyê:",
diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json
index 5161ed9803ccb2..13717206766484 100644
--- a/app/javascript/mastodon/locales/lad.json
+++ b/app/javascript/mastodon/locales/lad.json
@@ -274,7 +274,6 @@
"error.unexpected_crash.next_steps_addons": "Aprova inkapasitarlos i arefreskar la pajina. Si esto no te ayuda, es posivle ke ainda puedas kulanear Mastodon kon otro navigador u otra aplikasyon nativa.",
"errors.unexpected_crash.copy_stacktrace": "Kopia stacktrace al portapapeles",
"errors.unexpected_crash.report_issue": "Raporta problema",
- "explore.search_results": "Rizultados de bushkeda",
"explore.suggested_follows": "Djente",
"explore.title": "Eksplora",
"explore.trending_links": "Haberes",
@@ -678,10 +677,8 @@
"search_results.accounts": "Profiles",
"search_results.all": "Todos",
"search_results.hashtags": "Etiketas",
- "search_results.nothing_found": "No se pudo topar niente para estos terminos de bushkeda",
"search_results.see_all": "Ve todo",
"search_results.statuses": "Publikasyones",
- "search_results.title": "Bushka por {q}",
"server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)",
"server_banner.active_users": "utilizadores aktivos",
"server_banner.administered_by": "Administrado por:",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index a9b813deb3b725..107667f0561df2 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -305,7 +305,6 @@
"error.unexpected_crash.next_steps_addons": "Pabandyk juos išjungti ir atnaujinti puslapį. Jei tai nepadeda, galbūt vis dar galėsi naudotis Mastodon per kitą naršyklę arba savąją programėlę.",
"errors.unexpected_crash.copy_stacktrace": "Kopijuoti dėklo eigą į iškarpinę",
"errors.unexpected_crash.report_issue": "Pranešti apie problemą",
- "explore.search_results": "Paieškos rezultatai",
"explore.suggested_follows": "Žmonės",
"explore.title": "Naršyti",
"explore.trending_links": "Naujienos",
@@ -545,6 +544,7 @@
"notification.annual_report.message": "Jūsų laukia {year} #Wrapstodon! Atskleiskite savo metų svarbiausius įvykius ir įsimintinas akimirkas platformoje „Mastodon“.",
"notification.annual_report.view": "Peržiūrėti #Wrapstodon",
"notification.favourite": "{name} pamėgo tavo įrašą",
+ "notification.favourite_pm": "{name} pamėgo jūsų privatų paminėjimą",
"notification.follow": "{name} seka tave",
"notification.follow.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} seka tave",
"notification.follow_request": "{name} paprašė tave sekti",
@@ -769,10 +769,8 @@
"search_results.accounts": "Profiliai",
"search_results.all": "Visi",
"search_results.hashtags": "Saitažodžiai",
- "search_results.nothing_found": "Nepavyko rasti nieko pagal šiuos paieškos terminus.",
"search_results.see_all": "Žiūrėti viską",
"search_results.statuses": "Įrašai",
- "search_results.title": "Ieškoti {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 f554b2c2c58703..e1a0bfbfac25bf 100644
--- a/app/javascript/mastodon/locales/lv.json
+++ b/app/javascript/mastodon/locales/lv.json
@@ -281,7 +281,6 @@
"error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.",
"errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi",
"errors.unexpected_crash.report_issue": "Ziņot par problēmu",
- "explore.search_results": "Meklēšanas rezultāti",
"explore.suggested_follows": "Cilvēki",
"explore.title": "Izpētīt",
"explore.trending_links": "Jaunumi",
@@ -635,10 +634,8 @@
"search_results.accounts": "Profili",
"search_results.all": "Visi",
"search_results.hashtags": "Tēmturi",
- "search_results.nothing_found": "Nevarēja atrast neko, kas atbilstu šim meklēšanas vaicājumam",
"search_results.see_all": "Skatīt visus",
"search_results.statuses": "Ieraksti",
- "search_results.title": "Meklēt {q}",
"server_banner.about_active_users": "Cilvēki, kas izmantojuši šo serveri pēdējo 30 dienu laikā (aktīvie lietotāji mēnesī)",
"server_banner.active_users": "aktīvi lietotāji",
"server_banner.administered_by": "Pārvalda:",
diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json
index c82dddac2f217e..a067dc95badf1e 100644
--- a/app/javascript/mastodon/locales/ml.json
+++ b/app/javascript/mastodon/locales/ml.json
@@ -190,7 +190,6 @@
"empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.",
"empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക",
"errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക",
- "explore.search_results": "തിരയൽ ഫലങ്ങൾ",
"explore.suggested_follows": "ആൾക്കാർ",
"explore.title": "പര്യവേക്ഷണം നടത്തുക",
"explore.trending_links": "വാര്ത്ത",
diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json
index 5656217ed5ff91..fe8a7249186f31 100644
--- a/app/javascript/mastodon/locales/ms.json
+++ b/app/javascript/mastodon/locales/ms.json
@@ -233,7 +233,6 @@
"error.unexpected_crash.next_steps_addons": "Cuba nyahdaya pemalam dan segarkan semula halaman. Jika itu tidak membantu, anda masih boleh menggunakan Mastodon dengan pelayar yang berlainan atau aplikasi natif.",
"errors.unexpected_crash.copy_stacktrace": "Salin surih tindanan ke papan keratan",
"errors.unexpected_crash.report_issue": "Laporkan masalah",
- "explore.search_results": "Hasil carian",
"explore.suggested_follows": "Orang",
"explore.title": "Terokai",
"explore.trending_links": "Baru",
@@ -545,10 +544,8 @@
"search_results.accounts": "Profil",
"search_results.all": "Semua",
"search_results.hashtags": "Tanda pagar",
- "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut",
"search_results.see_all": "Lihat semua",
"search_results.statuses": "Hantaran",
- "search_results.title": "Mencari {q}",
"server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)",
"server_banner.active_users": "pengguna aktif",
"server_banner.administered_by": "Ditadbir oleh:",
diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json
index 750f7788b47d9f..ade740e17fee7d 100644
--- a/app/javascript/mastodon/locales/my.json
+++ b/app/javascript/mastodon/locales/my.json
@@ -219,7 +219,6 @@
"error.unexpected_crash.next_steps_addons": "၎င်းတို့ကို ပိတ်ပြီး စာမျက်နှာကို ပြန်လည်စတင်ကြည့်ပါ။ အဆင်မပြေပါက အခြားဘရောက်ဆာ သို့မဟုတ် မူရင်းအက်ပ်မှတစ်ဆင့် Mastodon ကို ဆက်ပြီးအသုံးပြုနိုင်ပါမည်။",
"errors.unexpected_crash.copy_stacktrace": "stacktrace ကို ကလစ်ဘုတ်သို့ ကူးယူပါ",
"errors.unexpected_crash.report_issue": "အဆင်မပြေမှုကို တိုင်ကြားရန်",
- "explore.search_results": "ရှာဖွေမှုရလဒ်များ",
"explore.suggested_follows": "လူများ",
"explore.title": "စူးစမ်းရန်",
"explore.trending_links": "သတင်းများ",
@@ -520,10 +519,8 @@
"search_results.accounts": "စာမျက်နှာ",
"search_results.all": "အားလုံး",
"search_results.hashtags": "ဟက်ရှ်တက်များ",
- "search_results.nothing_found": "ရှာဖွေလိုသောအရာမရှိပါ",
"search_results.see_all": "အားလုံးကို ကြည့်ရန်",
"search_results.statuses": "ပို့စ်တင်မယ်",
- "search_results.title": "{q} ကို ရှာပါ",
"server_banner.about_active_users": "ပြီးခဲ့သည့် ရက်ပေါင်း ၃၀ အတွင်း ဤဆာဗာကို အသုံးပြုသူများ (လအလိုက် လက်ရှိအသုံးပြုသူများ)",
"server_banner.active_users": "လက်ရှိအသုံးပြုသူများ",
"server_banner.administered_by": "မှ စီမံခန့်ခွဲသည် -",
diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json
index 2dfa9f1327f4e2..4cbcad35bd7f84 100644
--- a/app/javascript/mastodon/locales/nan.json
+++ b/app/javascript/mastodon/locales/nan.json
@@ -42,6 +42,8 @@
"block_modal.show_less": "看khah少",
"compose.language.change": "換語言",
"confirmations.follow_to_list.confirm": "跟tuè,加入kàu列單",
+ "notification.favourite_pm": "{name} kah意lí ê私人提起",
+ "notification.favourite_pm.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê私人提起",
"search_popout.language_code": "ISO語言代碼",
"status.translated_from_with": "用 {provider} 翻譯 {lang}"
}
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index f6b61b01cb7124..c76c134becd7f3 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Probeer deze uit te schakelen en de pagina te verversen. Wanneer dat niet helpt, kun je Mastodon nog altijd met een andere webbrowser of mobiele app gebruiken.",
"errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren",
"errors.unexpected_crash.report_issue": "Technisch probleem melden",
- "explore.search_results": "Zoekresultaten",
"explore.suggested_follows": "Mensen",
"explore.title": "Verkennen",
"explore.trending_links": "Nieuws",
@@ -550,6 +549,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.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",
@@ -781,10 +782,11 @@
"search_results.accounts": "Accounts",
"search_results.all": "Alles",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Deze zoektermen leveren geen resultaat op",
+ "search_results.no_results": "Geen resultaten.",
+ "search_results.no_search_yet": "Probeer te zoeken naar berichten, profielen of hashtags.",
"search_results.see_all": "Alles bekijken",
"search_results.statuses": "Berichten",
- "search_results.title": "Naar {q} zoeken",
+ "search_results.title": "Zoeken naar \"{q}\"",
"server_banner.about_active_users": "Aantal gebruikers tijdens de afgelopen 30 dagen (MAU)",
"server_banner.active_users": "actieve gebruikers",
"server_banner.administered_by": "Beheerd door:",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 7d24d26ec18c49..21eafffe767a3b 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -305,7 +305,6 @@
"error.unexpected_crash.next_steps_addons": "Prøv å skru dei av og last inn sida på nytt. Hjelper ikkje det kan du framleis bruka Mastodon i ein annan nettlesar eller app.",
"errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace til utklippstavla",
"errors.unexpected_crash.report_issue": "Rapporter problem",
- "explore.search_results": "Søkeresultat",
"explore.suggested_follows": "Folk",
"explore.title": "Utforsk",
"explore.trending_links": "Nytt",
@@ -750,10 +749,8 @@
"search_results.accounts": "Profiler",
"search_results.all": "Alt",
"search_results.hashtags": "Emneknaggar",
- "search_results.nothing_found": "Kunne ikkje finne noko for desse søkeorda",
"search_results.see_all": "Sjå alle",
"search_results.statuses": "Tut",
- "search_results.title": "Søk etter {q}",
"server_banner.about_active_users": "Personar som har brukt denne tenaren dei siste 30 dagane (Månadlege Aktive Brukarar)",
"server_banner.active_users": "aktive brukarar",
"server_banner.administered_by": "Administrert av:",
diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json
index 5e4ae512ecf69f..5ada8c6fe6a6e1 100644
--- a/app/javascript/mastodon/locales/no.json
+++ b/app/javascript/mastodon/locales/no.json
@@ -273,7 +273,6 @@
"error.unexpected_crash.next_steps_addons": "Prøv å deaktivere dem og laste siden på nytt. Hvis det ikke hjelper, kan du fremdeles bruke Mastodon via en annen nettleser eller en annen app.",
"errors.unexpected_crash.copy_stacktrace": "Kopier stacktrace-en til utklippstavlen",
"errors.unexpected_crash.report_issue": "Rapporter en feil",
- "explore.search_results": "Søkeresultater",
"explore.suggested_follows": "Personer",
"explore.title": "Utforsk",
"explore.trending_links": "Nyheter",
@@ -656,10 +655,8 @@
"search_results.accounts": "Profiler",
"search_results.all": "Alle",
"search_results.hashtags": "Emneknagger",
- "search_results.nothing_found": "Fant ikke noe for disse søkeordene",
"search_results.see_all": "Se alle",
"search_results.statuses": "Innlegg",
- "search_results.title": "Søk etter {q}",
"server_banner.about_active_users": "Personer som har brukt denne serveren i løpet av de siste 30 dagene (aktive brukere månedlig)",
"server_banner.active_users": "aktive brukere",
"server_banner.administered_by": "Administrert av:",
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 051ea7fd4e7e00..5173fe4e7e3ba8 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -208,7 +208,6 @@
"error.unexpected_crash.next_steps_addons": "Ensajatz de los desactivar o actualizatz la pagina. Se aquò ajuda pas, podètz ensajar d’utilizar Mastodon via un autre navigador o una aplicacion nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs",
"errors.unexpected_crash.report_issue": "Senhalar un problèma",
- "explore.search_results": "Resultats de recèrca",
"explore.suggested_follows": "Personas",
"explore.title": "Explorar",
"explore.trending_links": "Novèlas",
@@ -457,10 +456,8 @@
"search_results.accounts": "Perfils",
"search_results.all": "Tot",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "Cap de resultat per aquestes tèrmes de recèrca",
"search_results.see_all": "O veire tot",
"search_results.statuses": "Tuts",
- "search_results.title": "Recèrca : {q}",
"server_banner.active_users": "utilizaires actius",
"server_banner.administered_by": "Administrat per :",
"server_banner.server_stats": "Estatisticas del servidor :",
diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json
index 5c0d4efe8b049e..6cc90059a1283d 100644
--- a/app/javascript/mastodon/locales/pa.json
+++ b/app/javascript/mastodon/locales/pa.json
@@ -197,7 +197,6 @@
"empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।",
"empty_column.list": "ਇਸ ਸੂਚੀ ਵਿੱਚ ਹਾਲੇ ਕੁਝ ਵੀ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਇਸ ਸੂਚੀ ਦੇ ਮੈਂਬਰ ਨਵੀਆਂ ਪੋਸਟਾਂ ਪਾਉਂਦੇ ਹਨ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੀਆਂ।",
"errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
- "explore.search_results": "ਖੋਜ ਦੇ ਨਤੀਜੇ",
"explore.suggested_follows": "ਲੋਕ",
"explore.title": "ਪੜਚੋਲ ਕਰੋ",
"explore.trending_links": "ਖ਼ਬਰਾਂ",
@@ -462,7 +461,6 @@
"search_results.hashtags": "ਹੈਸ਼ਟੈਗ",
"search_results.see_all": "ਸਭ ਵੇਖੋ",
"search_results.statuses": "ਪੋਸਟਾਂ",
- "search_results.title": "{q} ਲਈ ਖੋਜ",
"server_banner.active_users": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ",
"sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ",
"sign_in_banner.sign_in": "ਲਾਗਇਨ",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index e1b3b8423696ba..5c1ef9d6042db9 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -238,6 +238,10 @@
"disabled_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone.",
"dismissable_banner.community_timeline": "To są najnowsze wpisy publiczne od osób, które mają założone konta na {domain}.",
"dismissable_banner.dismiss": "Schowaj",
+ "dismissable_banner.explore_links": "Te wiadomości obecnie są komentowane przez osoby z tego serwera i pozostałych w fediwersum.",
+ "dismissable_banner.explore_statuses": "Obecnie te wpisy z tego serwera i pozostałych serwerów w fediwersum zyskują popularność na tym serwerze.",
+ "dismissable_banner.explore_tags": "Te hasztagi obecnie zyskują popularność wśród osób z tego serwera i pozostałych w fediwersum.",
+ "dismissable_banner.public_timeline": "Są to najnowsze publiczne wpisy osób w fediwersum, które obserwują ludzie w serwisie {domain}.",
"domain_block_modal.block": "Blokuj serwer",
"domain_block_modal.block_account_instead": "Zamiast tego zablokuj @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Ludzie z tego serwera mogą wchodzić w interakcje z Twoimi starymi wpisami.",
@@ -304,7 +308,6 @@
"error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.",
"errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka",
"errors.unexpected_crash.report_issue": "Zgłoś problem",
- "explore.search_results": "Wyniki wyszukiwania",
"explore.suggested_follows": "Ludzie",
"explore.title": "Odkrywaj",
"explore.trending_links": "Aktualności",
@@ -544,6 +547,8 @@
"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}}",
+ "notification.favourite_pm": "{name} polubił(-a) twoją prywatną wzmiankę",
+ "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} polubiło twoją prywatną wzmiankę",
"notification.follow": "{name} obserwuje Cię",
"notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}",
"notification.follow_request": "{name} chce cię zaobserwować",
@@ -652,6 +657,7 @@
"onboarding.follows.done": "Gotowe",
"onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.",
"onboarding.follows.search": "Szukaj",
+ "onboarding.follows.title": "Zaobserwuj konta by zacząć",
"onboarding.profile.discoverable": "Spraw mój profil odkrywalnym",
"onboarding.profile.discoverable_hint": "Kiedy zapisujesz się do odkrywalności w Mastodonie, twoje wpisy mogą pokazywać się w wynikach wyszukiwania i trendach, a twój profil może być sugerowany użytkownikom o podobnych zainteresowaniach.",
"onboarding.profile.display_name": "Nazwa wyświetlana",
@@ -774,10 +780,11 @@
"search_results.accounts": "Profile",
"search_results.all": "Wszystkie",
"search_results.hashtags": "Hasztagi",
- "search_results.nothing_found": "Nie znaleziono innych wyników dla tego wyszukania",
+ "search_results.no_results": "Brak wyników.",
+ "search_results.no_search_yet": "Spróbuj poszukać wpisów, profili, lub hasztagów.",
"search_results.see_all": "Pokaż wszystkie",
"search_results.statuses": "Wpisy",
- "search_results.title": "Wyszukiwanie {q}",
+ "search_results.title": "Wyszukiwanie \"{q}\"",
"server_banner.about_active_users": "Osoby korzystające z tego serwera w ciągu ostatnich 30 dni (Miesięcznie aktywni użytkownicy)",
"server_banner.active_users": "aktywni użytkownicy",
"server_banner.administered_by": "Zarządzana przez:",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index d9f3d2b631d07a..b7221f541734ff 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -308,7 +308,6 @@
"error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
"errors.unexpected_crash.copy_stacktrace": "Copiar dados do erro para área de transferência",
"errors.unexpected_crash.report_issue": "Reportar problema",
- "explore.search_results": "Resultado da pesquisa",
"explore.suggested_follows": "Pessoas",
"explore.title": "Explorar",
"explore.trending_links": "Notícias",
@@ -780,10 +779,8 @@
"search_results.accounts": "Perfis",
"search_results.all": "Tudo",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Não foi possível encontrar nada para estes termos de busca",
"search_results.see_all": "Ver tudo",
"search_results.statuses": "Toots",
- "search_results.title": "Buscar {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 289335dc67f3ea..04aec252b7140e 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -277,7 +277,6 @@
"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.report_issue": "Reportar problema",
- "explore.search_results": "Resultados da pesquisa",
"explore.suggested_follows": "Pessoas",
"explore.title": "Explorar",
"explore.trending_links": "Notícias",
@@ -712,10 +711,8 @@
"search_results.accounts": "Perfis",
"search_results.all": "Tudo",
"search_results.hashtags": "Etiquetas",
- "search_results.nothing_found": "Não foi possível encontrar resultados para os termos pesquisados",
"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:",
diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json
index 3484f6e7aee438..81057871dde75a 100644
--- a/app/javascript/mastodon/locales/ro.json
+++ b/app/javascript/mastodon/locales/ro.json
@@ -219,7 +219,6 @@
"error.unexpected_crash.next_steps_addons": "Încearcă să le dezactivezi și să reîmprospătezi pagina. Dacă tot nu funcționează, poți accesa Mastodon dintr-un alt navigator sau dintr-o aplicație nativă.",
"errors.unexpected_crash.copy_stacktrace": "Copiere stacktrace în clipboard",
"errors.unexpected_crash.report_issue": "Raportează o problemă",
- "explore.search_results": "Rezultatele căutării",
"explore.suggested_follows": "Persoane",
"explore.title": "Explorează",
"explore.trending_links": "Noutăți",
@@ -496,10 +495,8 @@
"search_results.accounts": "Profiluri",
"search_results.all": "Toate",
"search_results.hashtags": "Hashtag-uri",
- "search_results.nothing_found": "Nu am putut găsi nimic care să corespundă termenilor de căutare",
"search_results.see_all": "Vezi tot",
"search_results.statuses": "Postări",
- "search_results.title": "Caută „{q}”",
"server_banner.about_active_users": "Persoane care au folosit acest server în ultimele 30 de zile (Utilizatori Lunari Activi)",
"server_banner.active_users": "utilizatori activi",
"server_banner.administered_by": "Administrat de:",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index a9433a687cc1f3..4e2b845c83da90 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.",
"errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию",
"errors.unexpected_crash.report_issue": "Сообщить о проблеме",
- "explore.search_results": "Результаты поиска",
"explore.suggested_follows": "Люди",
"explore.title": "Обзор",
"explore.trending_links": "Новости",
@@ -780,10 +779,8 @@
"search_results.accounts": "Профили",
"search_results.all": "Все",
"search_results.hashtags": "Хэштеги",
- "search_results.nothing_found": "Ничего не найдено по этому запросу",
"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/sa.json b/app/javascript/mastodon/locales/sa.json
index 9f03840b25a155..1d0d91fc60fece 100644
--- a/app/javascript/mastodon/locales/sa.json
+++ b/app/javascript/mastodon/locales/sa.json
@@ -200,7 +200,6 @@
"error.unexpected_crash.next_steps_addons": "तानि निष्क्रियं कृत्वा पृष्ठं रिफ्रेशं कर्तुं यतस्व। यदि तत्परेऽपि कार्यं नाकार्षीत्तर्ह्यप्यन्यब्रौसरा उत नेटिवेपा मास्टोडोनुपयोक्तुं शक्नोषि।",
"errors.unexpected_crash.copy_stacktrace": "स्तेक्त्रेसमनुलिपिं कुरु क्लिप्फलकं",
"errors.unexpected_crash.report_issue": "दोषमावेदय",
- "explore.search_results": "परिणामानविच्छ",
"explore.suggested_follows": "जनाः",
"explore.title": "अन्विच्छ",
"explore.trending_links": "वार्ताः",
@@ -444,9 +443,7 @@
"search.search_or_paste": "URL अन्विच्छ वा लेपनं कुरु",
"search_results.all": "सर्वम्",
"search_results.hashtags": "प्रचलितवस्तूनि",
- "search_results.nothing_found": "एतेभ्योऽन्वेषणपदेभ्यः किमपि न प्राप्तम्",
"search_results.statuses": "पत्राणि",
- "search_results.title": "{q} कृते अन्विष्य",
"server_banner.about_active_users": "विगतेषु ३० दिनेषु सर्वरमिममुपयुज्यमाणा जनाः (मासिकसक्रियोपभोक्तारः)",
"server_banner.active_users": "सक्रियोपभोक्तारः",
"server_banner.administered_by": "इत्यनेन अधिकृतः : ",
diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json
index 396401511bd87d..0c26ab404642bb 100644
--- a/app/javascript/mastodon/locales/sc.json
+++ b/app/javascript/mastodon/locales/sc.json
@@ -263,7 +263,6 @@
"error.unexpected_crash.next_steps_addons": "Proa a ddos disabilitare e torra a carrigare sa pàgina. Si custu no acontzat su problema, podes chircare de impreare Mastodon in unu navigadore diferente o in un'aplicatzione nativa.",
"errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace in punta de billete",
"errors.unexpected_crash.report_issue": "Sinnala unu problema",
- "explore.search_results": "Resurtados de sa chirca",
"explore.suggested_follows": "Gente",
"explore.title": "Esplora",
"explore.trending_links": "Noas",
@@ -625,10 +624,8 @@
"search_results.accounts": "Profilos",
"search_results.all": "Totus",
"search_results.hashtags": "Etichetas",
- "search_results.nothing_found": "Impossìbile agatare currispondèntzias pro custos tèrmines de chirca",
"search_results.see_all": "Bide totu",
"search_results.statuses": "Publicatziones",
- "search_results.title": "Chirca {q}",
"server_banner.about_active_users": "Gente chi at impreadu custu serbidore is ùrtimas 30 dies (Utentes cun Atividade a su Mese)",
"server_banner.active_users": "utentes ativos",
"server_banner.administered_by": "Amministradu dae:",
diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json
index a06cb7361a040b..8b442d1ac87174 100644
--- a/app/javascript/mastodon/locales/sco.json
+++ b/app/javascript/mastodon/locales/sco.json
@@ -191,7 +191,6 @@
"error.unexpected_crash.next_steps_addons": "Try oot pittin them aff an rejiggin the page. Gin thon disnae wirk, ye kin mibbie uise Mastodon on a different brooser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace tae yer clipboord",
"errors.unexpected_crash.report_issue": "Sen in a issue",
- "explore.search_results": "Seirch finnins",
"explore.title": "Splore",
"filter_modal.added.context_mismatch_explanation": "This filter caitegory disnae apply tae the context thit ye'v uised tae access this post. Gin ye'r wantin the post tae be filtert in this context tae, ye'll hae tae edit the filter.",
"filter_modal.added.context_mismatch_title": "Context disnae match!",
@@ -426,9 +425,7 @@
"search.search_or_paste": "Seirch or paste URL",
"search_results.all": "Aw",
"search_results.hashtags": "Hashtags",
- "search_results.nothing_found": "Cuidnae fin ocht fir thir seirch terms",
"search_results.statuses": "Posts",
- "search_results.title": "Seirch fir {q}",
"server_banner.about_active_users": "Fowk uisin this server in the last 30 days (Monthly Active Uisers)",
"server_banner.active_users": "active uisers",
"server_banner.administered_by": "Administert bi:",
diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json
index 683cd62b3f04fd..f2e290f0402923 100644
--- a/app/javascript/mastodon/locales/si.json
+++ b/app/javascript/mastodon/locales/si.json
@@ -172,7 +172,6 @@
"error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.",
"error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.",
"errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව",
- "explore.search_results": "සෙවුම් ප්රතිඵල",
"explore.suggested_follows": "පුද්ගලයින්",
"explore.title": "ගවේශනය",
"explore.trending_links": "පුවත්",
@@ -383,10 +382,8 @@
"search_popout.user": "පරිශ්රීලකයා",
"search_results.accounts": "පැතිකඩ",
"search_results.all": "සියල්ල",
- "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය",
"search_results.see_all": "සියල්ල බලන්න",
"search_results.statuses": "ලිපි",
- "search_results.title": "{q} සොයන්න",
"server_banner.active_users": "සක්රිය පරිශ්රීලකයින්",
"sign_in_banner.create_account": "ගිණුමක් සාදන්න",
"sign_in_banner.sign_in": "පිවිසෙන්න",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index fce2b0109f8be7..7806104c9c7ac6 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -87,8 +87,10 @@
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Alternatívny popis",
"announcement.announcement": "Oznámenie",
+ "annual_report.summary.archetype.oracle": "Veštec",
"annual_report.summary.followers.followers": "sledovatelia",
"annual_report.summary.followers.total": "{count} celkovo",
+ "annual_report.summary.here_it_is": "Tu je tvoja {year} v zhrnutí:",
"annual_report.summary.highlighted_post.by_favourites": "najviac obľúbený príspevok",
"annual_report.summary.highlighted_post.by_reblogs": "najviac vyzdvihovaný príspevok",
"annual_report.summary.highlighted_post.by_replies": "príspevok s najviac odpoveďami",
@@ -137,6 +139,7 @@
"column.firehose": "Živé kanály",
"column.follow_requests": "Žiadosti o sledovanie",
"column.home": "Domov",
+ "column.list_members": "Spravuj členov zoznamu",
"column.lists": "Zoznamy",
"column.mutes": "Stíšené účty",
"column.notifications": "Upozornenia",
@@ -192,6 +195,9 @@
"confirmations.edit.confirm": "Upraviť",
"confirmations.edit.message": "Úpravou prepíšete príspevok, ktorý máte rozpísaný. Určite chcete pokračovať?",
"confirmations.edit.title": "Prepísať príspevok?",
+ "confirmations.follow_to_list.confirm": "Nasleduj a pridaj do zoznamu",
+ "confirmations.follow_to_list.message": "Musíš nasledovať {name} aby si ho/ju mohol/la pridať do zoznamu.",
+ "confirmations.follow_to_list.title": "Nasleduj užívateľa?",
"confirmations.logout.confirm": "Odhlásiť sa",
"confirmations.logout.message": "Určite sa chcete odhlásiť?",
"confirmations.logout.title": "Odhlásiť sa?",
@@ -278,7 +284,6 @@
"error.unexpected_crash.next_steps_addons": "Skúste ich vypnúť a stránku obnoviť. Ak to nepomôže, pravdepodobne budete stále môcť Mastodon používať cez iný prehliadač alebo natívnu aplikáciu.",
"errors.unexpected_crash.copy_stacktrace": "Kopírovať stacktrace do schránky",
"errors.unexpected_crash.report_issue": "Nahlásiť problém",
- "explore.search_results": "Výsledky hľadania",
"explore.suggested_follows": "Ľudia",
"explore.title": "Objavovať",
"explore.trending_links": "Správy",
@@ -428,8 +433,13 @@
"lists.add_member": "Pridaj",
"lists.add_to_list": "Pridaj do zoznamu",
"lists.add_to_lists": "Pridaj {name} do zoznamov",
+ "lists.create": "Vytvor",
+ "lists.create_a_list_to_organize": "Vytvor nový zoznam pre spravovanie tvojej domovskej osi",
+ "lists.create_list": "Vytvor zoznam",
"lists.delete": "Vymazať zoznam",
+ "lists.done": "Hotovo",
"lists.edit": "Upraviť zoznam",
+ "lists.find_users_to_add": "Nájdi užívateľov na pridanie",
"lists.list_members": "Členovia zoznamu",
"lists.list_name": "Názov zoznamu",
"lists.new_list_name": "Názov nového zoznamu",
@@ -441,6 +451,7 @@
"lists.replies_policy.list": "Členom zoznamu",
"lists.replies_policy.none": "Nikomu",
"lists.save": "Ulož",
+ "lists.search": "Hľadaj",
"load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}",
"loading_indicator.label": "Načítavanie…",
"media_gallery.hide": "Skryť",
@@ -483,6 +494,7 @@
"navigation_bar.security": "Zabezpečenie",
"not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, prihláste sa.",
"notification.admin.report": "Účet {name} nahlásil {target}",
+ "notification.admin.report_statuses": "{name} nahlásil/a {target} za {category}",
"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",
@@ -687,10 +699,8 @@
"search_results.accounts": "Profily",
"search_results.all": "Všetky",
"search_results.hashtags": "Hashtagy",
- "search_results.nothing_found": "Pre tieto výrazy nebolo možné nič nájsť",
"search_results.see_all": "Zobraziť všetky",
"search_results.statuses": "Príspevky",
- "search_results.title": "Hľadať {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:",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index ca879324feb88a..a297dd4a83e4ca 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -285,7 +285,6 @@
"error.unexpected_crash.next_steps_addons": "Poskusite jih onemogočiti in osvežiti stran. Če to ne pomaga, boste morda še vedno lahko uporabljali Mastodon prek drugega brskalnika ali z domorodno aplikacijo.",
"errors.unexpected_crash.copy_stacktrace": "Kopiraj sledenje skladu na odložišče",
"errors.unexpected_crash.report_issue": "Prijavi težavo",
- "explore.search_results": "Rezultati iskanja",
"explore.suggested_follows": "Ljudje",
"explore.title": "Razišči",
"explore.trending_links": "Novice",
@@ -706,10 +705,8 @@
"search_results.accounts": "Profili",
"search_results.all": "Vse",
"search_results.hashtags": "Ključniki",
- "search_results.nothing_found": "Za ta iskalni niz ni zadetkov",
"search_results.see_all": "Poglej vse",
"search_results.statuses": "Objave",
- "search_results.title": "Išči {q}",
"server_banner.about_active_users": "Osebe, ki so uporabljale ta strežnik zadnjih 30 dni (dejavni uporabniki meseca)",
"server_banner.active_users": "dejavnih uporabnikov",
"server_banner.administered_by": "Upravlja:",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 49e51c3030fff8..8da648e4ff9834 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -304,7 +304,6 @@
"error.unexpected_crash.next_steps_addons": "Provoni t’i çaktivizoni dhe të rifreskoni faqen. Nëse kjo s’bën punë, mundeni prapë të jeni në gjendje të përdorni Mastodon-in përmes një shfletuesi tjetër, apo një aplikacioni prej Mastodon-it.",
"errors.unexpected_crash.copy_stacktrace": "Kopjo stacktrace-in në të papastër",
"errors.unexpected_crash.report_issue": "Raportoni problemin",
- "explore.search_results": "Përfundime kërkimi",
"explore.suggested_follows": "Persona",
"explore.title": "Eksploroni",
"explore.trending_links": "Lajme",
@@ -545,6 +544,8 @@
"notification.annual_report.view": "Shihni #Wrapstodon",
"notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer",
"notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer",
+ "notification.favourite_pm": "{name} i vuri shenjë si të parapëlqyer përmendjes tuaj private",
+ "notification.favourite_pm.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë si të parapëlqyer përmendjes tuaj private",
"notification.follow": "{name} zuri t’ju ndjekë",
"notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}",
"notification.follow_request": "{name} ka kërkuar t’ju ndjekë",
@@ -776,10 +777,8 @@
"search_results.accounts": "Profile",
"search_results.all": "Krejt",
"search_results.hashtags": "Hashtag-ë",
- "search_results.nothing_found": "S’u gjet gjë për këto terma kërkimi",
"search_results.see_all": "Shihni krejt",
"search_results.statuses": "Mesazhe",
- "search_results.title": "Kërkoni 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 d3c93eefe29c8e..77d3ef71564a95 100644
--- a/app/javascript/mastodon/locales/sr-Latn.json
+++ b/app/javascript/mastodon/locales/sr-Latn.json
@@ -261,7 +261,6 @@
"error.unexpected_crash.next_steps_addons": "Pokušajte da ih onemogućite i osvežite stranicu. Ako to ne pomogne, možete da nastavite da koristite Mastodon korišćenjem drugog pregledača ili matične aplikacije.",
"errors.unexpected_crash.copy_stacktrace": "Kopiraj „stacktrace” u klipbord",
"errors.unexpected_crash.report_issue": "Prijavi problem",
- "explore.search_results": "Rezultati pretrage",
"explore.suggested_follows": "Ljudi",
"explore.title": "Istraži",
"explore.trending_links": "Vesti",
@@ -630,10 +629,8 @@
"search_results.accounts": "Profili",
"search_results.all": "Sve",
"search_results.hashtags": "Heš oznake",
- "search_results.nothing_found": "Nije moguće pronaći ništa za ove termine za pretragu",
"search_results.see_all": "Vidi sve",
"search_results.statuses": "Objave",
- "search_results.title": "Traži {q}",
"server_banner.about_active_users": "Ljudi koji su koristili ovaj server u prethodnih 30 dana (mesečno aktivnih korisnika)",
"server_banner.active_users": "aktivnih korisnika",
"server_banner.administered_by": "Administrira:",
diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json
index 4c790e0fd917b8..06290cfcd7ea2c 100644
--- a/app/javascript/mastodon/locales/sr.json
+++ b/app/javascript/mastodon/locales/sr.json
@@ -261,7 +261,6 @@
"error.unexpected_crash.next_steps_addons": "Покушајте да их онемогућите и освежите страницу. Ако то не помогне, можете да наставите да користите Mastodon коришћењем другог прегледача или матичне апликације.",
"errors.unexpected_crash.copy_stacktrace": "Копирај „stacktrace” у клипборд",
"errors.unexpected_crash.report_issue": "Пријави проблем",
- "explore.search_results": "Резултати претраге",
"explore.suggested_follows": "Људи",
"explore.title": "Истражи",
"explore.trending_links": "Вести",
@@ -630,10 +629,8 @@
"search_results.accounts": "Профили",
"search_results.all": "Све",
"search_results.hashtags": "Хеш ознаке",
- "search_results.nothing_found": "Није могуће пронаћи ништа за ове термине за претрагу",
"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/sv.json b/app/javascript/mastodon/locales/sv.json
index 1ee01af7f54064..2cd10bdb1f84f3 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -103,6 +103,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest använda hashtag",
"annual_report.summary.most_used_hashtag.none": "Inga",
"annual_report.summary.new_posts.new_posts": "nya inlägg",
+ "annual_report.summary.percentile.text": "Det placerar dig i toppbland {domain} användare.",
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi berättar inte för Bernie.",
"annual_report.summary.thanks": "Tack för att du är en del av Mastodon!",
"attachments_list.unprocessed": "(obehandlad)",
@@ -128,6 +129,7 @@
"bundle_column_error.routing.body": "Den begärda sidan kunde inte hittas. Är du säker på att adressen angivits korrekt?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Stäng",
+ "bundle_modal_error.message": "Något gick fel när skärmen laddades.",
"bundle_modal_error.retry": "Försök igen",
"closed_registrations.other_server_instructions": "Eftersom Mastodon är decentraliserat kan du skapa ett konto på en annan server och fortfarande interagera med denna.",
"closed_registrations_modal.description": "Det är för närvarande inte möjligt att skapa ett konto på {domain} men kom ihåg att du inte behöver ett konto specifikt på {domain} för att använda Mastodon.",
@@ -138,13 +140,16 @@
"column.blocks": "Blockerade användare",
"column.bookmarks": "Bokmärken",
"column.community": "Lokal tidslinje",
+ "column.create_list": "Skapa lista",
"column.direct": "Privata nämningar",
"column.directory": "Bläddra bland profiler",
"column.domain_blocks": "Blockerade domäner",
+ "column.edit_list": "Redigera lista",
"column.favourites": "Favoriter",
"column.firehose": "Direktflöden",
"column.follow_requests": "Följarförfrågningar",
"column.home": "Hem",
+ "column.list_members": "Hantera listmedlemmar",
"column.lists": "Listor",
"column.mutes": "Tystade användare",
"column.notifications": "Notifikationer",
@@ -157,6 +162,7 @@
"column_header.pin": "Fäst",
"column_header.show_settings": "Visa inställningar",
"column_header.unpin": "Ångra fäst",
+ "column_search.cancel": "Avbryt",
"column_subheading.settings": "Inställningar",
"community.column_settings.local_only": "Endast lokalt",
"community.column_settings.media_only": "Endast media",
@@ -199,6 +205,9 @@
"confirmations.edit.confirm": "Redigera",
"confirmations.edit.message": "Om du svarar nu kommer det att ersätta meddelandet du håller på att skapa. Är du säker på att du vill fortsätta?",
"confirmations.edit.title": "Skriva över inlägg?",
+ "confirmations.follow_to_list.confirm": "Följ och lägg till i listan",
+ "confirmations.follow_to_list.message": "Du måste följa {name} för att lägga till dem i en lista.",
+ "confirmations.follow_to_list.title": "Följ användare?",
"confirmations.logout.confirm": "Logga ut",
"confirmations.logout.message": "Är du säker på att du vill logga ut?",
"confirmations.logout.title": "Logga ut?",
@@ -296,7 +305,6 @@
"error.unexpected_crash.next_steps_addons": "Prova att avaktivera dem och uppdatera sidan. Om detta inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller en app.",
"errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp",
"errors.unexpected_crash.report_issue": "Rapportera problem",
- "explore.search_results": "Sökresultat",
"explore.suggested_follows": "Personer",
"explore.title": "Utforska",
"explore.trending_links": "Nyheter",
@@ -350,8 +358,10 @@
"footer.privacy_policy": "Integritetspolicy",
"footer.source_code": "Visa källkod",
"footer.status": "Status",
+ "footer.terms_of_service": "Användarvillkor",
"generic.saved": "Sparad",
"getting_started.heading": "Kom igång",
+ "hashtag.admin_moderation": "Öppet modereringsgränssnittet för #{name}",
"hashtag.column_header.tag_mode.all": "och {additional}",
"hashtag.column_header.tag_mode.any": "eller {additional}",
"hashtag.column_header.tag_mode.none": "utan {additional}",
@@ -457,8 +467,23 @@
"link_preview.author": "Av {name}",
"link_preview.more_from_author": "Mer från {name}",
"link_preview.shares": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}",
+ "lists.add_member": "Lägg till",
+ "lists.add_to_list": "Lägg till i lista",
+ "lists.add_to_lists": "Lägg till {name} i listor",
+ "lists.create": "Skapa",
+ "lists.create_a_list_to_organize": "Skapa en ny lista för att organisera ditt hemtidlinje",
+ "lists.create_list": "Skapa lista",
"lists.delete": "Radera lista",
+ "lists.done": "Klar",
"lists.edit": "Redigera lista",
+ "lists.exclusive_hint": "Om någon är med på den här listan, göm dem i ditt Hemtidlinje för att undvika att se deras inlägg två gånger.",
+ "lists.find_users_to_add": "Hitta användare att lägga till",
+ "lists.list_members": "Lista medlemmar",
+ "lists.list_members_count": "{count, plural, one {# medlem} other {# medlemmar}}",
+ "lists.list_name": "Listnamn",
+ "lists.new_list_name": "Nytt listnamn",
+ "lists.no_lists_yet": "Ännu inga listor.",
+ "lists.no_members_yet": "Inga medlemmar ännu.",
"lists.replies_policy.followed": "Alla användare som följs",
"lists.replies_policy.list": "Medlemmar i listan",
"lists.replies_policy.none": "Ingen",
@@ -741,10 +766,8 @@
"search_results.accounts": "Profiler",
"search_results.all": "Alla",
"search_results.hashtags": "Hashtaggar",
- "search_results.nothing_found": "Kunde inte hitta något för dessa sökord",
"search_results.see_all": "Visa alla",
"search_results.statuses": "Inlägg",
- "search_results.title": "Sök efter {q}",
"server_banner.about_active_users": "Personer som använt denna server de senaste 30 dagarna (månatligt aktiva användare)",
"server_banner.active_users": "aktiva användare",
"server_banner.administered_by": "Administrerad av:",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 2f29e219ecec28..09b2ab38d4e79b 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -295,7 +295,6 @@
"error.unexpected_crash.next_steps_addons": "ลองปิดใช้งานส่วนเสริมหรือเครื่องมือเหล่านั้นและรีเฟรชหน้า หากนั่นไม่ช่วย คุณอาจยังสามารถใช้ Mastodon ได้ผ่านเบราว์เซอร์อื่นหรือแอปเนทีฟ",
"errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
"errors.unexpected_crash.report_issue": "รายงานปัญหา",
- "explore.search_results": "ผลลัพธ์การค้นหา",
"explore.suggested_follows": "ผู้คน",
"explore.title": "สำรวจ",
"explore.trending_links": "ข่าว",
@@ -759,10 +758,8 @@
"search_results.accounts": "โปรไฟล์",
"search_results.all": "ทั้งหมด",
"search_results.hashtags": "แฮชแท็ก",
- "search_results.nothing_found": "ไม่พบสิ่งใดสำหรับคำค้นหาเหล่านี้",
"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/tok.json b/app/javascript/mastodon/locales/tok.json
index bdd91a56af9df4..f0661413bfd4c1 100644
--- a/app/javascript/mastodon/locales/tok.json
+++ b/app/javascript/mastodon/locales/tok.json
@@ -226,7 +226,6 @@
"empty_column.mutes": "jan ala li len tawa sina.",
"error.unexpected_crash.explanation": "ilo li ken ala pana e lipu ni. ni li ken tan pakala mi tan pakala pi ilo sina.",
"errors.unexpected_crash.report_issue": "o toki e pakala tawa lawa",
- "explore.search_results": "ijo pi alasa ni",
"explore.suggested_follows": "jan",
"explore.title": "o alasa",
"explore.trending_links": "sin",
@@ -372,10 +371,8 @@
"search_results.accounts": "lipu jan",
"search_results.all": "ale",
"search_results.hashtags": "kulupu pi toki suli",
- "search_results.nothing_found": "nimi alasa ni la mi lukin e ala",
"search_results.see_all": "ale",
"search_results.statuses": "toki",
- "search_results.title": "o alasa e {q}",
"server_banner.administered_by": "jan lawa:",
"status.block": "o weka e @{name}",
"status.cancel_reblog_private": "o pini e pana",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index ec7195c234b6b6..49116eeaadb3ca 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -21,7 +21,7 @@
"account.blocked": "Engellendi",
"account.cancel_follow_request": "Takip isteğini geri çek",
"account.copy": "Gönderi bağlantısını kopyala",
- "account.direct": "@{name} kullanıcısına özelden değin",
+ "account.direct": "@{name} kullanıcısına özel olarak değin",
"account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat",
"account.domain_blocked": "Alan adı engellendi",
"account.edit_profile": "Profili düzenle",
@@ -111,11 +111,11 @@
"block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.",
"block_modal.show_less": "Daha az göster",
"block_modal.show_more": "Daha fazla göster",
- "block_modal.they_cant_mention": "Sizden bahsedemez veya sizi takip edemezler.",
+ "block_modal.they_cant_mention": "Size değinemez veya sizi takip edemezler.",
"block_modal.they_cant_see_posts": "Onlar sizin gönderilerinizi görmeye devam edebilir, ancak siz onlarınkini göremezsiniz.",
"block_modal.they_will_know": "Engellendiklerini görebiliyorlar.",
"block_modal.title": "Kullanıcıyı engelle?",
- "block_modal.you_wont_see_mentions": "Onlardan bahseden gönderiler göremezsiniz.",
+ "block_modal.you_wont_see_mentions": "Onlara değinen gönderileri göremezsiniz.",
"boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin",
"boost_modal.reblog": "Gönderiyi yeniden paylaş?",
"boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?",
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Bunları devre dışı bırakmayı ve sayfayı yenilemeyi deneyin. Bu yardımcı olmazsa, Mastodon'u başka bir tarayıcı veya yerel uygulama aracılığıyla kullanabilirsiniz.",
"errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi panoya kopyala",
"errors.unexpected_crash.report_issue": "Sorun bildir",
- "explore.search_results": "Arama sonuçları",
"explore.suggested_follows": "Kullanıcılar",
"explore.title": "Keşfet",
"explore.trending_links": "Haberler",
@@ -550,6 +549,8 @@
"notification.annual_report.view": "#Wrapstodon'u Görüntüle",
"notification.favourite": "{name} gönderinizi beğendi",
"notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi",
+ "notification.favourite_pm": "{name} özel değininizi beğendi",
+ "notification.favourite_pm.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} özel değininizi beğendi",
"notification.follow": "{name} seni takip etti",
"notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti",
"notification.follow_request": "{name} size takip isteği gönderdi",
@@ -781,10 +782,8 @@
"search_results.accounts": "Profiller",
"search_results.all": "Tümü",
"search_results.hashtags": "Etiketler",
- "search_results.nothing_found": "Bu arama seçenekleriyle bir sonuç bulunamadı",
"search_results.see_all": "Tümünü gör",
"search_results.statuses": "Gönderiler",
- "search_results.title": "{q} araması",
"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 df4bdfca0ac087..8c89e1ad0094b4 100644
--- a/app/javascript/mastodon/locales/tt.json
+++ b/app/javascript/mastodon/locales/tt.json
@@ -189,7 +189,6 @@
"empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"errors.unexpected_crash.report_issue": "Хата турында белдерү",
- "explore.search_results": "Эзләү нәтиҗәләре",
"explore.suggested_follows": "Кешеләр",
"explore.title": "Күзәтү",
"explore.trending_links": "Яңалыклар",
@@ -373,7 +372,6 @@
"search_results.all": "Барысы да",
"search_results.hashtags": "Хәштәгләр",
"search_results.statuses": "Язмалар",
- "search_results.title": "{q} өчен эзләү",
"server_banner.administered_by": "Идарә итүче:",
"server_banner.server_stats": "Сервер статистикасы:",
"sign_in_banner.create_account": "Аккаунтны ясау",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index 0861a8de02a292..624de8cd690984 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -303,7 +303,6 @@
"error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.",
"errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну",
"errors.unexpected_crash.report_issue": "Повідомити про проблему",
- "explore.search_results": "Результати пошуку",
"explore.suggested_follows": "Люди",
"explore.title": "Огляд",
"explore.trending_links": "Новини",
@@ -755,10 +754,11 @@
"search_results.accounts": "Профілі",
"search_results.all": "Усі",
"search_results.hashtags": "Хештеґи",
- "search_results.nothing_found": "Нічого не вдалося знайти за цими пошуковими термінами",
+ "search_results.no_results": "Жодних результатів.",
+ "search_results.no_search_yet": "Спробуйте пошукати записи, профілі або хештеґи.",
"search_results.see_all": "Показати все",
"search_results.statuses": "Дописів",
- "search_results.title": "Шукати {q}",
+ "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/uz.json b/app/javascript/mastodon/locales/uz.json
index b9670cb32e82ce..4ea1191945cb49 100644
--- a/app/javascript/mastodon/locales/uz.json
+++ b/app/javascript/mastodon/locales/uz.json
@@ -193,7 +193,6 @@
"error.unexpected_crash.next_steps_addons": "Ularni o'chirib ko'ring va sahifani yangilang. Agar bu yordam bermasa, siz boshqa brauzer yoki mahalliy ilova orqali Mastodondan foydalanishingiz mumkin.",
"errors.unexpected_crash.copy_stacktrace": "Stacktrace-ni vaqtinchalik xotiraga nusxalash",
"errors.unexpected_crash.report_issue": "Muammo haqida xabar berish",
- "explore.search_results": "Qidiruv natijalari",
"explore.title": "Ko'rib chiqish",
"explore.trending_links": "Yangiliklar",
"explore.trending_statuses": "Postlar",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 8a8e84df1bbbe3..9346b83e8c9caa 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "Hãy tắt add-on và làm tươi trang. Nếu vẫn không được, bạn nên thử đăng nhập Mastodon trên trình duyệt khác hoặc app khác.",
"errors.unexpected_crash.copy_stacktrace": "Sao chép stacktrace vào clipboard",
"errors.unexpected_crash.report_issue": "Báo cáo lỗi",
- "explore.search_results": "Kết quả tìm kiếm",
"explore.suggested_follows": "Mọi người",
"explore.title": "Khám phá",
"explore.trending_links": "Tin tức",
@@ -548,8 +547,10 @@
"notification.admin.sign_up.name_and_others": "{name} và {count, plural, other {# người}} đã đăng ký",
"notification.annual_report.message": "#Wrapstodon {year} của bạn có rồi đây! Hãy chia sẻ những điểm nhấn và khoảnh khắc đáng nhớ trên Mastodon của bạn trong năm qua!",
"notification.annual_report.view": "Xem #Wrapstodon",
- "notification.favourite": "{name} thích tút của bạn",
+ "notification.favourite": "{name} đã thích tút của bạn",
"notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn",
+ "notification.favourite_pm": "{name} đã thích lượt nhắn riêng của bạn",
+ "notification.favourite_pm.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích lượt nhắn riêng của bạn",
"notification.follow": "{name} theo dõi bạn",
"notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} theo dõi bạn",
"notification.follow_request": "{name} yêu cầu theo dõi bạn",
@@ -781,10 +782,8 @@
"search_results.accounts": "Mọi người",
"search_results.all": "Toàn bộ",
"search_results.hashtags": "Hashtag",
- "search_results.nothing_found": "Không tìm thấy gì",
"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/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 791089b8d3948c..666bb54e0b0aa3 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "请尝试禁用它们并刷新页面。如果没有帮助,你仍可以尝试使用其他浏览器或原生应用来使用 Mastodon。",
"errors.unexpected_crash.copy_stacktrace": "复制堆栈跟踪信息到剪贴板",
"errors.unexpected_crash.report_issue": "报告问题",
- "explore.search_results": "搜索结果",
"explore.suggested_follows": "用户",
"explore.title": "探索",
"explore.trending_links": "新闻",
@@ -550,6 +549,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} 向你发送了关注请求",
@@ -781,10 +782,11 @@
"search_results.accounts": "用户",
"search_results.all": "全部",
"search_results.hashtags": "话题",
- "search_results.nothing_found": "无法找到符合这些搜索词的任何内容",
+ "search_results.no_results": "未找到结果。",
+ "search_results.no_search_yet": "可以尝试搜索嘟文、账户或话题。",
"search_results.see_all": "查看全部",
"search_results.statuses": "嘟文",
- "search_results.title": "搜索 {q}",
+ "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/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 608734172ec62c..224bc88f26c106 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -268,7 +268,6 @@
"error.unexpected_crash.next_steps_addons": "請嘗試停止使用這些附加元件然後重新載入頁面。如果問題沒有解決,你仍然可以使用不同的瀏覽器或 Mastodon 應用程式來檢視。",
"errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
"errors.unexpected_crash.report_issue": "舉報問題",
- "explore.search_results": "搜尋結果",
"explore.suggested_follows": "使用者",
"explore.title": "探索",
"explore.trending_links": "最新消息",
@@ -636,10 +635,8 @@
"search_results.accounts": "個人檔案",
"search_results.all": "全部",
"search_results.hashtags": "標籤",
- "search_results.nothing_found": "找不到與搜尋字詞相關的內容",
"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/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 4cdea0703b2796..dbbfb51abf86da 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -309,7 +309,6 @@
"error.unexpected_crash.next_steps_addons": "請嘗試關閉它們然後重新整理頁面。如果狀況沒有改善,您可以使用不同的瀏覽器或應用程式來檢視來使用 Mastodon。",
"errors.unexpected_crash.copy_stacktrace": "複製 stacktrace 到剪貼簿",
"errors.unexpected_crash.report_issue": "回報問題",
- "explore.search_results": "搜尋結果",
"explore.suggested_follows": "使用者",
"explore.title": "探索",
"explore.trending_links": "最新消息",
@@ -550,6 +549,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} 要求跟隨您",
@@ -781,10 +782,11 @@
"search_results.accounts": "個人檔案",
"search_results.all": "全部",
"search_results.hashtags": "主題標籤",
- "search_results.nothing_found": "無法找到符合搜尋條件之結果",
+ "search_results.no_results": "沒有結果。",
+ "search_results.no_search_yet": "嘗試搜尋嘟文、個人檔案或主題標籤。",
"search_results.see_all": "檢視全部",
"search_results.statuses": "嘟文",
- "search_results.title": "搜尋:{q}",
+ "search_results.title": "搜尋「{q}」",
"server_banner.about_active_users": "最近三十日內使用此伺服器的人(月活躍使用者)",
"server_banner.active_users": "活躍使用者",
"server_banner.administered_by": "管理者:",
diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts
index 34fd1b57e99484..4d95d24757109c 100644
--- a/app/javascript/mastodon/models/account.ts
+++ b/app/javascript/mastodon/models/account.ts
@@ -8,12 +8,11 @@ import type {
ApiAccountRoleJSON,
ApiAccountJSON,
} from 'mastodon/api_types/accounts';
-import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji';
import emojify from 'mastodon/features/emoji/emoji';
import { unescapeHTML } from 'mastodon/utils/html';
-import { CustomEmojiFactory } from './custom_emoji';
-import type { CustomEmoji } from './custom_emoji';
+import { CustomEmojiFactory, makeEmojiMap } from './custom_emoji';
+import type { CustomEmoji, EmojiMap } from './custom_emoji';
// AccountField
interface AccountFieldShape extends Required {
@@ -102,15 +101,6 @@ export const accountDefaultValues: AccountShape = {
const AccountFactory = ImmutableRecord(accountDefaultValues);
-type EmojiMap = Record;
-
-function makeEmojiMap(emojis: ApiCustomEmojiJSON[]) {
- return emojis.reduce((obj, emoji) => {
- obj[`:${emoji.shortcode}:`] = emoji;
- return obj;
- }, {});
-}
-
function createAccountField(
jsonField: ApiAccountFieldJSON,
emojiMap: EmojiMap,
diff --git a/app/javascript/mastodon/models/custom_emoji.ts b/app/javascript/mastodon/models/custom_emoji.ts
index 76479f3aebf54e..5297dcd4704286 100644
--- a/app/javascript/mastodon/models/custom_emoji.ts
+++ b/app/javascript/mastodon/models/custom_emoji.ts
@@ -1,15 +1,32 @@
-import type { RecordOf } from 'immutable';
-import { Record } from 'immutable';
+import type { RecordOf, List as ImmutableList } from 'immutable';
+import { Record as ImmutableRecord, isList } from 'immutable';
import type { ApiCustomEmojiJSON } from 'mastodon/api_types/custom_emoji';
type CustomEmojiShape = Required; // no changes from server shape
export type CustomEmoji = RecordOf;
-export const CustomEmojiFactory = Record({
+export const CustomEmojiFactory = ImmutableRecord({
shortcode: '',
static_url: '',
url: '',
category: '',
visible_in_picker: false,
});
+
+export type EmojiMap = Record;
+
+export function makeEmojiMap(
+ emojis: ApiCustomEmojiJSON[] | ImmutableList,
+) {
+ if (isList(emojis)) {
+ return emojis.reduce((obj, emoji) => {
+ obj[`:${emoji.shortcode}:`] = emoji.toJS();
+ return obj;
+ }, {});
+ } else
+ return emojis.reduce((obj, emoji) => {
+ obj[`:${emoji.shortcode}:`] = emoji;
+ return obj;
+ }, {});
+}
diff --git a/app/javascript/mastodon/models/poll.ts b/app/javascript/mastodon/models/poll.ts
new file mode 100644
index 00000000000000..b4ba38a9c6f6ae
--- /dev/null
+++ b/app/javascript/mastodon/models/poll.ts
@@ -0,0 +1,109 @@
+import type { RecordOf } from 'immutable';
+import { Record, List } from 'immutable';
+
+import escapeTextContentForBrowser from 'escape-html';
+
+import type { ApiPollJSON, ApiPollOptionJSON } from 'mastodon/api_types/polls';
+import emojify from 'mastodon/features/emoji/emoji';
+
+import { CustomEmojiFactory, makeEmojiMap } from './custom_emoji';
+import type { CustomEmoji, EmojiMap } from './custom_emoji';
+
+interface PollOptionTranslationShape {
+ title: string;
+ titleHtml: string;
+}
+
+export type PollOptionTranslation = RecordOf;
+
+export const PollOptionTranslationFactory = Record({
+ title: '',
+ titleHtml: '',
+});
+
+interface PollOptionShape extends Required {
+ voted: boolean;
+ titleHtml: string;
+ translation: PollOptionTranslation | null;
+}
+
+export function createPollOptionTranslationFromServerJSON(
+ translation: { title: string },
+ emojiMap: EmojiMap,
+) {
+ return PollOptionTranslationFactory({
+ ...translation,
+ titleHtml: emojify(
+ escapeTextContentForBrowser(translation.title),
+ emojiMap,
+ ),
+ });
+}
+
+export type PollOption = RecordOf;
+
+export const PollOptionFactory = Record({
+ title: '',
+ votes_count: 0,
+ voted: false,
+ titleHtml: '',
+ translation: null,
+});
+
+interface PollShape
+ extends Omit {
+ emojis: List;
+ options: List;
+ own_votes?: List;
+}
+export type Poll = RecordOf;
+
+export const PollFactory = Record({
+ id: '',
+ expires_at: '',
+ expired: false,
+ multiple: false,
+ voters_count: 0,
+ votes_count: 0,
+ voted: false,
+ emojis: List(),
+ options: List(),
+ own_votes: List(),
+});
+
+export function createPollFromServerJSON(
+ serverJSON: ApiPollJSON,
+ previousPoll?: Poll,
+) {
+ const emojiMap = makeEmojiMap(serverJSON.emojis);
+
+ return PollFactory({
+ ...serverJSON,
+ emojis: List(serverJSON.emojis.map((emoji) => CustomEmojiFactory(emoji))),
+ own_votes: serverJSON.own_votes ? List(serverJSON.own_votes) : undefined,
+ options: List(
+ serverJSON.options.map((optionJSON, index) => {
+ const option = PollOptionFactory({
+ ...optionJSON,
+ voted: serverJSON.own_votes?.includes(index) || false,
+ titleHtml: emojify(
+ escapeTextContentForBrowser(optionJSON.title),
+ emojiMap,
+ ),
+ });
+
+ const prevOption = previousPoll?.options.get(index);
+ if (prevOption?.translation && prevOption.title === option.title) {
+ const { translation } = prevOption;
+
+ option.set(
+ 'translation',
+ createPollOptionTranslationFromServerJSON(translation, emojiMap),
+ );
+ }
+
+ return option;
+ }),
+ ),
+ });
+}
diff --git a/app/javascript/mastodon/models/search.ts b/app/javascript/mastodon/models/search.ts
new file mode 100644
index 00000000000000..75a65bf99cf78c
--- /dev/null
+++ b/app/javascript/mastodon/models/search.ts
@@ -0,0 +1,21 @@
+import type { ApiSearchResultsJSON } from 'mastodon/api_types/search';
+import type { ApiHashtagJSON } from 'mastodon/api_types/tags';
+
+export type SearchType = 'account' | 'hashtag' | 'accounts' | 'statuses';
+
+export interface RecentSearch {
+ q: string;
+ type?: SearchType;
+}
+
+export interface SearchResults {
+ accounts: string[];
+ statuses: string[];
+ hashtags: ApiHashtagJSON[];
+}
+
+export const createSearchResults = (serverJSON: ApiSearchResultsJSON) => ({
+ accounts: serverJSON.accounts.map((account) => account.id),
+ statuses: serverJSON.statuses.map((status) => status.id),
+ hashtags: serverJSON.hashtags,
+});
diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts
index 6da6abd81b5e5a..fe9f59fcc39778 100644
--- a/app/javascript/mastodon/reducers/index.ts
+++ b/app/javascript/mastodon/reducers/index.ts
@@ -27,10 +27,10 @@ import { notificationPolicyReducer } from './notification_policy';
import { notificationRequestsReducer } from './notification_requests';
import notifications from './notifications';
import { pictureInPictureReducer } from './picture_in_picture';
-import polls from './polls';
+import { pollsReducer } from './polls';
import push_notifications from './push_notifications';
import { relationshipsReducer } from './relationships';
-import search from './search';
+import { searchReducer } from './search';
import server from './server';
import settings from './settings';
import status_lists from './status_lists';
@@ -60,7 +60,7 @@ const reducers = {
server,
contexts,
compose,
- search,
+ search: searchReducer,
media_attachments,
notifications,
notificationGroups: notificationGroupsReducer,
@@ -70,7 +70,7 @@ const reducers = {
filters,
conversations,
suggestions: suggestionsReducer,
- polls,
+ polls: pollsReducer,
trends,
markers: markersReducer,
picture_in_picture: pictureInPictureReducer,
diff --git a/app/javascript/mastodon/reducers/polls.js b/app/javascript/mastodon/reducers/polls.js
deleted file mode 100644
index 5e8e775dac8f2b..00000000000000
--- a/app/javascript/mastodon/reducers/polls.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import { Map as ImmutableMap, fromJS } from 'immutable';
-
-import { POLLS_IMPORT } from 'mastodon/actions/importer';
-
-import { normalizePollOptionTranslation } from '../actions/importer/normalizer';
-import { STATUS_TRANSLATE_SUCCESS, STATUS_TRANSLATE_UNDO } from '../actions/statuses';
-
-const importPolls = (state, polls) => state.withMutations(map => polls.forEach(poll => map.set(poll.id, fromJS(poll))));
-
-const statusTranslateSuccess = (state, pollTranslation) => {
- return state.withMutations(map => {
- if (pollTranslation) {
- const poll = state.get(pollTranslation.id);
-
- pollTranslation.options.forEach((item, index) => {
- map.setIn([pollTranslation.id, 'options', index, 'translation'], fromJS(normalizePollOptionTranslation(item, poll)));
- });
- }
- });
-};
-
-const statusTranslateUndo = (state, id) => {
- return state.withMutations(map => {
- const options = map.getIn([id, 'options']);
-
- if (options) {
- options.forEach((item, index) => map.deleteIn([id, 'options', index, 'translation']));
- }
- });
-};
-
-const initialState = ImmutableMap();
-
-export default function polls(state = initialState, action) {
- switch(action.type) {
- case POLLS_IMPORT:
- return importPolls(state, action.polls);
- case STATUS_TRANSLATE_SUCCESS:
- return statusTranslateSuccess(state, action.translation.poll);
- case STATUS_TRANSLATE_UNDO:
- return statusTranslateUndo(state, action.pollId);
- default:
- return state;
- }
-}
diff --git a/app/javascript/mastodon/reducers/polls.ts b/app/javascript/mastodon/reducers/polls.ts
new file mode 100644
index 00000000000000..9b9a5d2ff8e192
--- /dev/null
+++ b/app/javascript/mastodon/reducers/polls.ts
@@ -0,0 +1,67 @@
+import type { Reducer } from '@reduxjs/toolkit';
+import { Map as ImmutableMap } from 'immutable';
+
+import { importPolls } from 'mastodon/actions/importer/polls';
+import { makeEmojiMap } from 'mastodon/models/custom_emoji';
+import { createPollOptionTranslationFromServerJSON } from 'mastodon/models/poll';
+import type { Poll } from 'mastodon/models/poll';
+
+import {
+ STATUS_TRANSLATE_SUCCESS,
+ STATUS_TRANSLATE_UNDO,
+} from '../actions/statuses';
+
+const initialState = ImmutableMap();
+type PollsState = typeof initialState;
+
+const statusTranslateSuccess = (
+ state: PollsState,
+ pollTranslation: Poll | undefined,
+) => {
+ if (!pollTranslation) return state;
+
+ return state.withMutations((map) => {
+ const poll = state.get(pollTranslation.id);
+
+ if (!poll) return;
+
+ const emojiMap = makeEmojiMap(poll.emojis);
+
+ pollTranslation.options.forEach((item, index) => {
+ map.setIn(
+ [pollTranslation.id, 'options', index, 'translation'],
+ createPollOptionTranslationFromServerJSON(item, emojiMap),
+ );
+ });
+ });
+};
+
+const statusTranslateUndo = (state: PollsState, id: string) => {
+ return state.withMutations((map) => {
+ const options = map.get(id)?.options;
+
+ if (options) {
+ options.forEach((item, index) =>
+ map.deleteIn([id, 'options', index, 'translation']),
+ );
+ }
+ });
+};
+
+export const pollsReducer: Reducer = (
+ state = initialState,
+ action,
+) => {
+ if (importPolls.match(action)) {
+ return state.withMutations((polls) => {
+ action.payload.polls.forEach((poll) => polls.set(poll.id, poll));
+ });
+ } else if (action.type === STATUS_TRANSLATE_SUCCESS)
+ return statusTranslateSuccess(
+ state,
+ (action.translation as { poll?: Poll }).poll,
+ );
+ else if (action.type === STATUS_TRANSLATE_UNDO)
+ return statusTranslateUndo(state, action.pollId as string);
+ else return state;
+};
diff --git a/app/javascript/mastodon/reducers/search.js b/app/javascript/mastodon/reducers/search.js
deleted file mode 100644
index 7de1c65c07a295..00000000000000
--- a/app/javascript/mastodon/reducers/search.js
+++ /dev/null
@@ -1,84 +0,0 @@
-import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
-
-import {
- COMPOSE_MENTION,
- COMPOSE_REPLY,
- COMPOSE_DIRECT,
-} from '../actions/compose';
-import {
- SEARCH_CHANGE,
- SEARCH_CLEAR,
- SEARCH_FETCH_REQUEST,
- SEARCH_FETCH_FAIL,
- SEARCH_FETCH_SUCCESS,
- SEARCH_SHOW,
- SEARCH_EXPAND_REQUEST,
- SEARCH_EXPAND_SUCCESS,
- SEARCH_EXPAND_FAIL,
- SEARCH_HISTORY_UPDATE,
-} from '../actions/search';
-
-const initialState = ImmutableMap({
- value: '',
- submitted: false,
- hidden: false,
- results: ImmutableMap(),
- isLoading: false,
- searchTerm: '',
- type: null,
- recent: ImmutableOrderedSet(),
-});
-
-export default function search(state = initialState, action) {
- switch(action.type) {
- case SEARCH_CHANGE:
- return state.set('value', action.value);
- case SEARCH_CLEAR:
- return state.withMutations(map => {
- map.set('value', '');
- map.set('results', ImmutableMap());
- map.set('submitted', false);
- map.set('hidden', false);
- map.set('searchTerm', '');
- map.set('type', null);
- });
- case SEARCH_SHOW:
- return state.set('hidden', false);
- case COMPOSE_REPLY:
- case COMPOSE_MENTION:
- case COMPOSE_DIRECT:
- return state.set('hidden', true);
- case SEARCH_FETCH_REQUEST:
- return state.withMutations(map => {
- map.set('results', ImmutableMap());
- map.set('isLoading', true);
- map.set('submitted', true);
- map.set('type', action.searchType);
- });
- case SEARCH_FETCH_FAIL:
- case SEARCH_EXPAND_FAIL:
- return state.set('isLoading', false);
- case SEARCH_FETCH_SUCCESS:
- return state.withMutations(map => {
- map.set('results', ImmutableMap({
- accounts: ImmutableOrderedSet(action.results.accounts.map(item => item.id)),
- statuses: ImmutableOrderedSet(action.results.statuses.map(item => item.id)),
- hashtags: ImmutableOrderedSet(fromJS(action.results.hashtags)),
- }));
-
- map.set('searchTerm', action.searchTerm);
- map.set('type', action.searchType);
- map.set('isLoading', false);
- });
- case SEARCH_EXPAND_REQUEST:
- return state.set('type', action.searchType).set('isLoading', true);
- case SEARCH_EXPAND_SUCCESS: {
- const results = action.searchType === 'hashtags' ? ImmutableOrderedSet(fromJS(action.results.hashtags)) : action.results[action.searchType].map(item => item.id);
- return state.updateIn(['results', action.searchType], list => list.union(results)).set('isLoading', false);
- }
- case SEARCH_HISTORY_UPDATE:
- return state.set('recent', ImmutableOrderedSet(fromJS(action.recent)));
- default:
- return state;
- }
-}
diff --git a/app/javascript/mastodon/reducers/search.ts b/app/javascript/mastodon/reducers/search.ts
new file mode 100644
index 00000000000000..3f6b96fa072a50
--- /dev/null
+++ b/app/javascript/mastodon/reducers/search.ts
@@ -0,0 +1,74 @@
+import { createReducer, isAnyOf } from '@reduxjs/toolkit';
+
+import type { ApiSearchType } from 'mastodon/api_types/search';
+import type { RecentSearch, SearchResults } from 'mastodon/models/search';
+import { createSearchResults } from 'mastodon/models/search';
+
+import {
+ updateSearchHistory,
+ submitSearch,
+ expandSearch,
+} from '../actions/search';
+
+interface State {
+ recent: RecentSearch[];
+ q: string;
+ type?: ApiSearchType;
+ loading: boolean;
+ results?: SearchResults;
+}
+
+const initialState: State = {
+ recent: [],
+ q: '',
+ type: undefined,
+ loading: false,
+ results: undefined,
+};
+
+export const searchReducer = createReducer(initialState, (builder) => {
+ builder.addCase(submitSearch.fulfilled, (state, action) => {
+ state.q = action.meta.arg.q;
+ state.type = action.meta.arg.type;
+ state.results = createSearchResults(action.payload);
+ state.loading = false;
+ });
+
+ builder.addCase(expandSearch.fulfilled, (state, action) => {
+ const type = action.meta.arg.type;
+ const results = createSearchResults(action.payload);
+
+ state.type = type;
+ state.results = {
+ accounts: state.results
+ ? [...state.results.accounts, ...results.accounts]
+ : results.accounts,
+ statuses: state.results
+ ? [...state.results.statuses, ...results.statuses]
+ : results.statuses,
+ hashtags: state.results
+ ? [...state.results.hashtags, ...results.hashtags]
+ : results.hashtags,
+ };
+ state.loading = false;
+ });
+
+ builder.addCase(updateSearchHistory, (state, action) => {
+ state.recent = action.payload;
+ });
+
+ builder.addMatcher(
+ isAnyOf(expandSearch.pending, submitSearch.pending),
+ (state, action) => {
+ state.type = action.meta.arg.type;
+ state.loading = true;
+ },
+ );
+
+ builder.addMatcher(
+ isAnyOf(expandSearch.rejected, submitSearch.rejected),
+ (state) => {
+ state.loading = false;
+ },
+ );
+});
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 7495e8a86b6f2d..46784c8475b63c 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -1975,6 +1975,8 @@ body > [data-popper-placement] {
}
&__handle {
+ overflow: hidden;
+ text-overflow: ellipsis;
user-select: all;
}
}
@@ -3032,7 +3034,9 @@ $ui-header-logo-wordmark-width: 99px;
.column > .scrollable,
.tabs-bar__wrapper .column-header,
- .tabs-bar__wrapper .column-back-button {
+ .tabs-bar__wrapper .column-back-button,
+ .explore__search-header,
+ .column-search-header {
border-left: 0;
border-right: 0;
}
@@ -3075,10 +3079,6 @@ $ui-header-logo-wordmark-width: 99px;
}
}
-.explore__search-header {
- display: none;
-}
-
.explore__suggestions__card {
padding: 12px 16px;
gap: 8px;
@@ -3152,10 +3152,6 @@ $ui-header-logo-wordmark-width: 99px;
.columns-area__panels__pane--compositional {
display: none;
}
-
- .explore__search-header {
- display: flex;
- }
}
.icon-with-badge {
@@ -5461,6 +5457,17 @@ a.status-card {
}
.search__icon {
+ background: transparent;
+ border: 0;
+ padding: 0;
+ position: absolute;
+ top: 12px + 2px;
+ cursor: default;
+ pointer-events: none;
+ margin-inline-start: 16px - 2px;
+ width: 20px;
+ height: 20px;
+
&::-moz-focus-inner {
border: 0;
}
@@ -5472,17 +5479,14 @@ a.status-card {
.icon {
position: absolute;
- top: 12px + 2px;
- display: inline-block;
+ top: 0;
+ inset-inline-start: 0;
opacity: 0;
transition: all 100ms linear;
transition-property: transform, opacity;
width: 20px;
height: 20px;
color: $darker-text-color;
- cursor: default;
- pointer-events: none;
- margin-inline-start: 16px - 2px;
&.active {
pointer-events: auto;
@@ -7946,6 +7950,8 @@ noscript {
text-overflow: ellipsis;
span {
+ overflow: hidden;
+ text-overflow: ellipsis;
user-select: all;
}
@@ -8668,6 +8674,9 @@ noscript {
.explore__search-header {
justify-content: center;
align-items: center;
+ border: 1px solid var(--background-border-color);
+ border-top: 0;
+ border-bottom: 0;
padding: 16px;
padding-bottom: 8px;
@@ -8686,13 +8695,21 @@ noscript {
border: 1px solid var(--background-border-color);
}
- .search .icon {
+ .search__icon {
top: 12px;
inset-inline-end: 12px;
color: $dark-text-color;
}
}
+.layout-single-column .explore__search-header {
+ display: none;
+
+ @media screen and (max-width: $no-gap-breakpoint - 1px) {
+ display: flex;
+ }
+}
+
.explore__search-results {
flex: 1 1 auto;
display: flex;
diff --git a/app/lib/video_metadata_extractor.rb b/app/lib/video_metadata_extractor.rb
index fda6405121858c..6e544486d6340f 100644
--- a/app/lib/video_metadata_extractor.rb
+++ b/app/lib/video_metadata_extractor.rb
@@ -48,7 +48,7 @@ def parse_metadata
@frame_rate ||= @r_frame_rate
# If the video has not been re-encoded by ffmpeg, it may contain rotation information,
# and we need to simulate applying it to the dimensions
- @width, @height = @height, @width if video_stream[:side_data_list]&.any? { |x| x[:rotation].abs == 90 }
+ @width, @height = @height, @width if video_stream[:side_data_list]&.any? { |x| x[:rotation]&.abs == 90 }
end
if (audio_stream = audio_streams.first)
diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb
index 41623ddedb8a1f..af156f14973f35 100644
--- a/app/models/account_alias.rb
+++ b/app/models/account_alias.rb
@@ -5,11 +5,11 @@
# Table name: account_aliases
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
# acct :string default(""), not null
# uri :string default(""), not null
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
#
class AccountAlias < ApplicationRecord
diff --git a/app/models/account_deletion_request.rb b/app/models/account_deletion_request.rb
index 7d0c346cc27e28..c65d2cc217177c 100644
--- a/app/models/account_deletion_request.rb
+++ b/app/models/account_deletion_request.rb
@@ -5,9 +5,9 @@
# Table name: account_deletion_requests
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
#
class AccountDeletionRequest < ApplicationRecord
DELAY_TO_DELETION = 30.days.freeze
diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb
index 753935d6af6a86..c3a8c49da088d5 100644
--- a/app/models/account_domain_block.rb
+++ b/app/models/account_domain_block.rb
@@ -5,10 +5,10 @@
# Table name: account_domain_blocks
#
# id :bigint(8) not null, primary key
-# domain :string
+# domain :string not null
# created_at :datetime not null
# updated_at :datetime not null
-# account_id :bigint(8)
+# account_id :bigint(8) not null
#
class AccountDomainBlock < ApplicationRecord
diff --git a/app/models/account_pin.rb b/app/models/account_pin.rb
index 2dc32809b890b8..dc05d3cd256674 100644
--- a/app/models/account_pin.rb
+++ b/app/models/account_pin.rb
@@ -5,10 +5,10 @@
# Table name: account_pins
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# target_account_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
+# target_account_id :bigint(8) not null
#
class AccountPin < ApplicationRecord
diff --git a/app/models/admin/action_log.rb b/app/models/admin/action_log.rb
index 49ae679809fc63..b6834c4784806d 100644
--- a/app/models/admin/action_log.rb
+++ b/app/models/admin/action_log.rb
@@ -5,15 +5,15 @@
# Table name: admin_action_logs
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
# action :string default(""), not null
+# human_identifier :string
+# permalink :string
+# route_param :string
# target_type :string
-# target_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
-# human_identifier :string
-# route_param :string
-# permalink :string
+# account_id :bigint(8) not null
+# target_id :bigint(8)
#
class Admin::ActionLog < ApplicationRecord
diff --git a/app/models/announcement_mute.rb b/app/models/announcement_mute.rb
index 46fda2f5d6f80d..0f34a6a4dc291c 100644
--- a/app/models/announcement_mute.rb
+++ b/app/models/announcement_mute.rb
@@ -5,10 +5,10 @@
# Table name: announcement_mutes
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# announcement_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
+# announcement_id :bigint(8) not null
#
class AnnouncementMute < ApplicationRecord
diff --git a/app/models/announcement_reaction.rb b/app/models/announcement_reaction.rb
index f953402b7ed84b..46d9fc290ff4b0 100644
--- a/app/models/announcement_reaction.rb
+++ b/app/models/announcement_reaction.rb
@@ -5,12 +5,12 @@
# Table name: announcement_reactions
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# announcement_id :bigint(8)
# name :string default(""), not null
-# custom_emoji_id :bigint(8)
# created_at :datetime not null
# updated_at :datetime not null
+# account_id :bigint(8) not null
+# announcement_id :bigint(8) not null
+# custom_emoji_id :bigint(8)
#
class AnnouncementReaction < ApplicationRecord
diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb
index bacf1582618edc..a351a140a0cd42 100644
--- a/app/models/custom_filter.rb
+++ b/app/models/custom_filter.rb
@@ -5,13 +5,13 @@
# Table name: custom_filters
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
+# action :integer default("warn"), not null
+# context :string default([]), not null, is an Array
# expires_at :datetime
# phrase :text default(""), not null
-# context :string default([]), not null, is an Array
# created_at :datetime not null
# updated_at :datetime not null
-# action :integer default("warn"), not null
+# account_id :bigint(8) not null
#
class CustomFilter < ApplicationRecord
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index ac90844d3e2d11..5c006427d7a729 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -58,6 +58,7 @@ 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
@@ -102,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
- '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
+ '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
'c:v' => 'h264',
'c:a' => 'aac',
'b:a' => '192k',
@@ -296,7 +297,7 @@ def supported_file_extensions
private
def file_styles(attachment)
- if attachment.instance.file_content_type == 'image/gif' || VIDEO_CONVERTIBLE_MIME_TYPES.include?(attachment.instance.file_content_type)
+ if attachment.instance.animated_image? || 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
@@ -310,8 +311,8 @@ def file_styles(attachment)
end
def file_processors(instance)
- if instance.file_content_type == 'image/gif'
- [:gif_transcoder, :blurhash_transcoder]
+ if instance.animated_image?
+ [:gifv_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)
@@ -322,6 +323,17 @@ def file_processors(instance)
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/mention.rb b/app/models/mention.rb
index a508ed630e2f2f..e921d41de357db 100644
--- a/app/models/mention.rb
+++ b/app/models/mention.rb
@@ -18,7 +18,7 @@ class Mention < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy
- validates :account, uniqueness: { scope: :status }
+ validates :account_id, uniqueness: { scope: :status_id }
scope :active, -> { where(silent: false) }
scope :silent, -> { where(silent: true) }
diff --git a/app/models/scheduled_status.rb b/app/models/scheduled_status.rb
index cb49e907057ac1..1f4f04268d44f0 100644
--- a/app/models/scheduled_status.rb
+++ b/app/models/scheduled_status.rb
@@ -5,9 +5,9 @@
# Table name: scheduled_statuses
#
# id :bigint(8) not null, primary key
-# account_id :bigint(8)
-# scheduled_at :datetime
# params :jsonb
+# scheduled_at :datetime
+# account_id :bigint(8) not null
#
class ScheduledStatus < ApplicationRecord
diff --git a/app/models/user.rb b/app/models/user.rb
index 310ec77a153859..ce24d34651a500 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -350,7 +350,7 @@ def reset_password(new_password, new_password_confirmation)
end
def revoke_access!
- Doorkeeper::AccessGrant.by_resource_owner(self).update_all(revoked_at: Time.now.utc)
+ Doorkeeper::AccessGrant.by_resource_owner(self).touch_all(:revoked_at)
Doorkeeper::AccessToken.by_resource_owner(self).in_batches do |batch|
batch.touch_all(:revoked_at)
diff --git a/app/models/user_invite_request.rb b/app/models/user_invite_request.rb
index 9dd67751668835..23b5428d4822e7 100644
--- a/app/models/user_invite_request.rb
+++ b/app/models/user_invite_request.rb
@@ -5,10 +5,10 @@
# Table name: user_invite_requests
#
# id :bigint(8) not null, primary key
-# user_id :bigint(8)
# text :text
# created_at :datetime not null
# updated_at :datetime not null
+# user_id :bigint(8) not null
#
class UserInviteRequest < ApplicationRecord
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 2ddecb63417367..dba4ea7aef7ba2 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -190,40 +190,30 @@ def update_tags!
end
def update_mentions!
- previous_mentions = @status.active_mentions.includes(:account).to_a
- current_mentions = []
unresolved_mentions = []
- @raw_mentions.each do |href|
+ currently_mentioned_account_ids = @raw_mentions.filter_map do |href|
next if href.blank?
account = ActivityPub::TagManager.instance.uri_to_resource(href, Account)
account ||= ActivityPub::FetchRemoteAccountService.new.call(href, request_id: @request_id)
- next if account.nil?
-
- mention = previous_mentions.find { |x| x.account_id == account.id }
- mention ||= account.mentions.new(status: @status)
-
- current_mentions << mention
+ account&.id
rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
# Since previous mentions are about already-known accounts,
# they don't try to resolve again and won't fall into this case.
# In other words, this failure case is only for new mentions and won't
# affect `removed_mentions` so they can safely be retried asynchronously
unresolved_mentions << href
+ nil
end
- current_mentions.each do |mention|
- mention.save if mention.new_record?
- end
+ @status.mentions.upsert_all(currently_mentioned_account_ids.map { |id| { account_id: id, silent: false } }, unique_by: %w(status_id account_id))
# If previous mentions are no longer contained in the text, convert them
# to silent mentions, since withdrawing access from someone who already
# received a notification might be more confusing
- removed_mentions = previous_mentions - current_mentions
-
- Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty?
+ @status.mentions.where.not(account_id: currently_mentioned_account_ids).update_all(silent: true)
# Queue unresolved mentions for later
unresolved_mentions.uniq.each do |uri|
diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb
index 3839eb4df4aa3f..6906f77e1eeaf0 100644
--- a/app/services/process_mentions_service.rb
+++ b/app/services/process_mentions_service.rb
@@ -13,7 +13,7 @@ def call(status, save_records: true)
return unless @status.local?
- @previous_mentions = @status.active_mentions.includes(:account).to_a
+ @previous_mentions = @status.mentions.includes(:account).to_a
@current_mentions = []
Status.transaction do
@@ -57,6 +57,8 @@ def scan_text!
mention ||= @current_mentions.find { |x| x.account_id == mentioned_account.id }
mention ||= @status.mentions.new(account: mentioned_account)
+ mention.silent = false
+
@current_mentions << mention
"@#{mentioned_account.acct}"
@@ -78,7 +80,7 @@ def assign_mentions!
end
@current_mentions.each do |mention|
- mention.save if mention.new_record? && @save_records
+ mention.save if (mention.new_record? || mention.silent_changed?) && @save_records
end
# If previous mentions are no longer contained in the text, convert them
@@ -86,7 +88,7 @@ def assign_mentions!
# received a notification might be more confusing
removed_mentions = @previous_mentions - @current_mentions
- Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty?
+ Mention.where(id: removed_mentions.map(&:id), silent: false).update_all(silent: true) unless removed_mentions.empty?
end
def mention_undeliverable?(mentioned_account)
diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb
index 8d5446f1a88099..44210799f9518f 100644
--- a/app/services/suspend_account_service.rb
+++ b/app/services/suspend_account_service.rb
@@ -20,7 +20,7 @@ def call(account)
private
def reject_remote_follows!
- return if @account.local? || !@account.activitypub?
+ return if @account.local? || !@account.activitypub? || @account.suspension_origin_remote?
# When suspending a remote account, the account obviously doesn't
# actually become suspended on its origin server, i.e. unlike a
diff --git a/app/views/.rubocop.yml b/app/views/.rubocop.yml
deleted file mode 100644
index 4e268848c7d9b6..00000000000000
--- a/app/views/.rubocop.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-inherit_from: ../../.rubocop.yml
-
-# Disable for the `Rubocop` lints in haml-lint
-Style/IfUnlessModifier:
- Enabled: false
diff --git a/app/workers/mention_resolve_worker.rb b/app/workers/mention_resolve_worker.rb
index 72dcd9633f32fe..8c5938aeaf1cb5 100644
--- a/app/workers/mention_resolve_worker.rb
+++ b/app/workers/mention_resolve_worker.rb
@@ -16,7 +16,7 @@ def perform(status_id, uri, options = {})
return if account.nil?
- status.mentions.create!(account: account, silent: false)
+ status.mentions.upsert({ account_id: account.id, silent: false }, unique_by: %w(status_id account_id))
rescue ActiveRecord::RecordNotFound
# Do nothing
rescue Mastodon::UnexpectedResponseError => e
diff --git a/config/application.rb b/config/application.rb
index e4e9680e6637fd..59afafd5be504e 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -28,7 +28,7 @@
require_relative '../lib/paperclip/url_generator_extensions'
require_relative '../lib/paperclip/attachment_extensions'
-require_relative '../lib/paperclip/gif_transcoder'
+require_relative '../lib/paperclip/gifv_transcoder'
require_relative '../lib/paperclip/media_type_spoof_detector_extensions'
require_relative '../lib/paperclip/transcoder'
require_relative '../lib/paperclip/type_corrector'
diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb
index a40cd4e4c544c5..90217139a83467 100644
--- a/config/initializers/opentelemetry.rb
+++ b/config/initializers/opentelemetry.rb
@@ -54,6 +54,9 @@
'OpenTelemetry::Instrumentation::Sidekiq' => {
span_naming: :job_class, # Use the job class as the span name, otherwise this is the queue name and not very helpful
},
+ 'OpenTelemetry::Instrumentation::Redis' => {
+ trace_root_spans: false, # don't start traces with Redis spans
+ },
})
prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon')
diff --git a/config/locales/activerecord.az.yml b/config/locales/activerecord.az.yml
new file mode 100644
index 00000000000000..e9ba86bc793aee
--- /dev/null
+++ b/config/locales/activerecord.az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml
index ef08304c3d18bd..262b8c5e77d3c5 100644
--- a/config/locales/activerecord.zh-CN.yml
+++ b/config/locales/activerecord.zh-CN.yml
@@ -54,16 +54,16 @@ zh-CN:
blocked: 使用了被封禁的电子邮件提供商
unreachable: 似乎不存在
role_id:
- elevated: 不能高于你现在的身份
+ elevated: 不能高于你目前所处角色拥有的权限
user_role:
attributes:
permissions_as_keys:
- dangerous: 包含对基本角色不安全的权限
+ dangerous: 包含对基本角色而言不安全的权限
elevated: 不能包含你当前身份未有的权限
- own_role: 无权以你当前的身份更改
+ own_role: 你当前的角色无权执行此更改
position:
elevated: 不能高于你当前的角色
- own_role: 无权以你当前的身份更改
+ own_role: 你当前的角色无权执行此更改
webhook:
attributes:
events:
diff --git a/config/locales/az.yml b/config/locales/az.yml
new file mode 100644
index 00000000000000..e9ba86bc793aee
--- /dev/null
+++ b/config/locales/az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 1193e7869b49d6..94a75c01f35716 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -207,9 +207,11 @@ bg:
disable_sign_in_token_auth_user: Изключване на удостоверяването с код по имейл за потребител
disable_user: Изключване на потребител
enable_custom_emoji: Включване на персонализирано емоджи
+ enable_sign_in_token_auth_user: Включване на аутентикацията на потребителя с имейл токен
enable_user: Активиране на потребител
memorialize_account: Възпоменаване на акаунта
promote_user: Повишаване на потребител
+ publish_terms_of_service: Публикуване на условията за ползване
reject_appeal: Отхвърляне на обжалването
reject_user: Отхвърляне на потребителя
remove_avatar_user: Премахване на аватара
@@ -917,6 +919,7 @@ bg:
title: Хаштагове
updated_msg: Успешно осъвременени настройки на хаштага
terms_of_service:
+ back: Обратно към условията за ползване
changelog: Какво е променено
current: Текущо
draft: Чернова
@@ -924,10 +927,16 @@ bg:
generates:
action: Пораждане
chance_to_review_html: "Пораждани условия на услугата няма да се публикуват самодейно. Ще имате възможност да видите предварително резултата. Попълнете необходимите подробности, за да продължите."
+ explanation_html: Предоставеният шаблон на условията за услугата е само за осведомителни цели и не трябва да се тълкува като правен съвет, по който и да е въпрос. Посъветвайте се със собствения си правен адвокат относно ситуацията ви и конкретни правни въпроси, които имате.
+ title: Настройка на условията за услугата
history: История
live: На живо
no_history: Още няма записани промени в условията на услугата.
notified_on_html: Потребители, известени на %{date}
+ preview:
+ explanation_html: 'Имейлът ще се изпрати до %{display_count} потребители, регистрирали се преди %{date}. Следният текст ще се включи в е-писмо:'
+ send_preview: Изпращане на предварителен преглед до %{email}
+ title: Предварителен преглед на известие за условията на услугата
publish: Публикуване
published_on_html: Публикувано на %{date}
save_draft: Запазване на чернова
@@ -1138,6 +1147,7 @@ bg:
migrate_account_html: Ако желаете да пренасочите този акаунт към друг, можете да настроите това тук.
or_log_in_with: Или влизане с помощта на
progress:
+ confirm: Потвърждаване на имейл
details: Вашите подробности
review: Нашият преглед
rules: Приемане на правилата
@@ -1160,6 +1170,7 @@ bg:
set_new_password: Задаване на нова парола
setup:
email_below_hint_html: Проверете папката си за спам или поискайте друго е-писмо. Може да поправите адреса на имейла си, ако е грешен.
+ email_settings_hint_html: Щракнете на връзката, която изпратихме до %{email}, за да започнете да употребявате Mastodon. Ще изчакаме точно тук.
link_not_received: Не получихте ли връзка?
new_confirmation_instructions_sent: До няколко минути ще получите друго е-писмо с връзка за потвърждаване!
title: Проверете входящата си поща
@@ -1168,6 +1179,7 @@ bg:
title: Влизане в %{domain}
sign_up:
manual_review: Регистрирането в %{domain} преминава през ръчен преглед от модераторите ни. Напишете малко за себе си и защо искате акаунт в %{domain}, за да ни помогнете в процеса на регистрацията си.
+ preamble: Имайки акаунт на този съвър в Mastodon, то ще може да последвате всекиго във федивселената, независимо къде се намира акаунтът му.
title: Първоначални настройки за %{domain}.
status:
account_status: Състояние на акаунта
@@ -1179,6 +1191,7 @@ bg:
view_strikes: Преглед на предишните предупреждения против акаунта ви
too_fast: Образецът подаден пребързо, опитайте пак.
use_security_key: Употреба на ключ за сигурност
+ user_agreement_html: Прочетох и се съгласявам с условията на услугата и политиката за поверителност
author_attribution:
example_title: Примерен текст
hint_html: Пишете ли новинарски статии или блогове извън Mastodon? Управлявайте как ви приписват авторството, когато са споделени в Mastodon.
@@ -1802,6 +1815,8 @@ bg:
too_late: Твърде късно е за обжалване на това предупреждение
tags:
does_not_match_previous_name: не съвпада с предишното име
+ terms_of_service:
+ title: Условия на услугата
themes:
contrast: Mastodon (висок контраст)
default: Mastodon (тъмно)
@@ -1862,6 +1877,15 @@ bg:
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/cy.yml b/config/locales/cy.yml
index 8d7e8415010ce3..c2cf6855035c52 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -226,6 +226,7 @@ cy:
enable_user: Galluogi Defnyddiwr
memorialize_account: Cofadeilio Cyfrif
promote_user: Dyrchafu Defnyddiwr
+ publish_terms_of_service: Cyhoeddi Telerau Gwasanaeth
reject_appeal: Gwrthod Apêl
reject_user: Gwrthod Defnyddiwr
remove_avatar_user: Tynnu Afatar
@@ -290,6 +291,7 @@ cy:
enable_user_html: Mae %{name} wedi galluogi mewngofnodi defnyddiwr %{target}
memorialize_account_html: Newidiodd %{name} gyfrif %{target} i dudalen memoriam
promote_user_html: Mae %{name} wedi hyrwyddo defnyddiwr %{target}
+ publish_terms_of_service_html: Mae %{name} wedi cyhoeddi diweddariadau i'r telerau gwasanaeth
reject_appeal_html: Mae %{name} wedi gwrthod apêl penderfyniad cymedroli %{target}
reject_user_html: Mae %{name} wedi gwrthod cofrestriad gan %{target}
remove_avatar_user_html: Mae %{name} wedi tynnu afatar %{target}
@@ -981,6 +983,39 @@ cy:
search: Chwilio
title: Hashnodau
updated_msg: Gosodiadau hashnodau wedi'i diweddaru'n llwyddiannus
+ terms_of_service:
+ back: Nôl i delerau gwasanaeth
+ changelog: Beth sydd wedi newid
+ create: Defnyddiwch eich un eich hun
+ current: Cyfredol
+ draft: Drafft
+ generate: Defnyddiwch dempled
+ generates:
+ action: Cynhyrchu
+ chance_to_review_html: "Ni fydd y telerau gwasanaeth sy'n cael eu cynhyrchu'n cael eu cyhoeddi'n awtomatig. Bydd cyfle i chi adolygu'r canlyniadau. Cwblhewch y manylion angenrheidiol i symud ymlaen."
+ explanation_html: Mae'r templed telerau gwasanaeth sy'n cael eu darparu at ddibenion gwybodaeth yn unig, ac ni ddylid ei ddehongli fel cyngor cyfreithiol ar unrhyw bwnc. Ymgynghorwch â'ch cyngor cyfreithiol eich hun ar eich sefyllfa ag unrhyw gwestiynau cyfreithiol penodol sydd gennych.
+ title: Telerau Gosod Gwasanaeth
+ history: Hanes
+ live: Byw
+ no_history: Nid oes unrhyw newidiadau i delerau gwasanaeth wedi'u cofnodi eto.
+ no_terms_of_service_html: Nid oes gennych unrhyw delerau gwasanaeth wedi'u ffurfweddu ar hyn o bryd. Bwriad telerau gwasanaeth yw darparu eglurder a'ch amddiffyn rhag rhwymedigaethau posibl mewn anghydfodau gyda'ch defnyddwyr.
+ notified_on_html: Hysbyswyd defnyddwyr ar %{date}
+ notify_users: Hysbysu defnyddwyr
+ preview:
+ explanation_html: 'Bydd yr e-bost yn cael ei anfon at %{display_count} o ddefnyddwyr sydd wedi cofrestru cyn %{date}. Bydd y testun canlynol yn cael ei gynnwys yn yr e-bost:'
+ send_preview: Anfon rhagolwg at %{email}
+ send_to_all:
+ few: Anfon %{display_count} e-bost
+ many: Anfon %{display_count} e-bost
+ one: Anfon %{display_count} e-bost
+ other: Anfon %{display_count} e-bost
+ two: Anfon %{display_count} e-bost
+ zero: Anfon %{display_count} e-bost
+ title: Darllenwcy yr hysbysiad telerau gwasanaeth
+ publish: Cyhoeddi
+ published_on_html: Cyhoeddwyd ar %{date}
+ save_draft: Cadw drafft
+ title: Telerau Gwasanaeth
title: Gweinyddiaeth
trends:
allow: Caniatáu
@@ -1228,6 +1263,7 @@ cy:
set_new_password: Gosod cyfrinair newydd
setup:
email_below_hint_html: Gwiriwch eich ffolder sbam, neu gofynnwch am un arall. Gallwch gywiro eich cyfeiriad e-bost os yw'n anghywir.
+ email_settings_hint_html: Cliciwch y ddolen anfonwyd at %{email} i ddechrau defnyddio Mastodon. Byddwn yn aros yn fan hyn.
link_not_received: Heb gael dolen?
new_confirmation_instructions_sent: Byddwch yn derbyn e-bost newydd gyda'r ddolen gadarnhau ymhen ychydig funudau!
title: Gwiriwch eich blwch derbyn
@@ -1236,6 +1272,7 @@ cy:
title: Mewngofnodi i %{domain}
sign_up:
manual_review: Mae cofrestriadau ar %{domain} yn cael eu hadolygu â llaw gan ein cymedrolwyr. Er mwyn ein helpu i brosesu eich cofrestriad, ysgrifennwch ychydig amdanoch chi'ch hun a pham rydych chi eisiau cyfrif ar %{domain}.
+ preamble: Gyda chyfrif ar y gweinydd Mastodon hwn, byddwch chi'n gallu dilyn unrhyw berson arall ar y ffedysawd, waeth ble mae eu cyfrif yn cael ei gynnal.
title: Gadewch i ni eich gosod ar %{domain}.
status:
account_status: Statws cyfrif
@@ -1247,6 +1284,7 @@ cy:
view_strikes: Gweld rybuddion y gorffennol yn erbyn eich cyfrif
too_fast: Cafodd y ffurflen ei chyflwyno'n rhy gyflym, ceisiwch eto.
use_security_key: Defnyddiwch allwedd diogelwch
+ user_agreement_html: Rwyf wedi darllen ac yn cytuno i delerau gwasanaeth a'r polisi preifatrwydd
author_attribution:
example_title: Testun enghreifftiol
hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon.
@@ -1825,6 +1863,7 @@ cy:
scheduled_statuses:
over_daily_limit: Rydych wedi mynd dros y terfyn o %{limit} postiad a drefnwyd ar gyfer heddiw
over_total_limit: Rydych wedi mynd dros y terfyn o %{limit} postiad a drefnwyd
+ too_soon: rhaid i'r dyddiad fod yn y dyfodol
self_destruct:
lead_html: Yn anffodus mae %{domain} yn cau'n barhaol. Os oedd gennych gyfrif yno, ni fydd modd i chi barhau i'w ddefnyddio, ond mae dal modd gofyn i gael copi wrth gefn o'ch data.
title: Mae'r gweinydd hwn yn cau
@@ -2003,6 +2042,8 @@ cy:
too_late: Mae'n rhy hwyr i apelio yn erbyn y rhybudd hwn
tags:
does_not_match_previous_name: ddim yn cyfateb i'r enw blaenorol
+ terms_of_service:
+ title: Telerau Gwasanaeth
themes:
contrast: Mastodon (Cyferbyniad uchel)
default: Mastodon (Tywyll)
@@ -2063,6 +2104,15 @@ cy:
further_actions_html: Os nad chi oedd hwn, rydym yn argymell eich bod yn %{action} ar unwaith ac yn galluogi dilysu dau ffactor i gadw'ch cyfrif yn ddiogel.
subject: Mae eich cyfrif wedi'i gyrchu o gyfeiriad IP newydd
title: Mewngofnodiad newydd
+ terms_of_service_changed:
+ agreement: Drwy barhau i ddefnyddio %{domain}, rydych yn cytuno i'r telerau hyn. Os ydych yn anghytuno â'r telerau a ddiweddarwyd, gallwch derfynu eich cytundeb â %{domain} ar unrhyw adeg drwy ddileu eich cyfrif.
+ changelog: 'Yn fyr, dyma beth mae''r diweddariad hwn yn ei olygu i chi:'
+ description: 'Rydych yn derbyn yr e-bost hwn oherwydd ein bod yn gwneud rhai newidiadau i''n telerau gwasanaeth yn %{domain}. Rydym yn eich annog i adolygu''r telerau diweddaraf yn llawn yma:'
+ description_html: Rydych yn derbyn yr e-bost hwn oherwydd ein bod yn gwneud rhai newidiadau i'n telerau gwasanaeth yn %{domain}. Rydym yn eich annog i adolygu'r telerau diweddaraf yn llawn yma .
+ sign_off: Tîm %{domain}
+ subject: Diweddariadau i'n telerau gwasanaeth
+ subtitle: Mae telerau gwasanaeth %{domain} yn newid
+ title: Diweddariad pwysig
warning:
appeal: Cyflwyno apêl
appeal_description: Os credwch fod hwn yn gamgymeriad, gallwch gyflwyno apêl i staff %{instance}.
diff --git a/config/locales/devise.az.yml b/config/locales/devise.az.yml
new file mode 100644
index 00000000000000..e9ba86bc793aee
--- /dev/null
+++ b/config/locales/devise.az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/doorkeeper.az.yml b/config/locales/doorkeeper.az.yml
new file mode 100644
index 00000000000000..e9ba86bc793aee
--- /dev/null
+++ b/config/locales/doorkeeper.az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 749c6ee5117145..912de854c669e8 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -928,9 +928,11 @@ eo:
updated_msg: Kradvorto agordoj ĝisdatigis sukcese
terms_of_service:
back: Reen al kondiĉoj de uzado
- create: Uzu vian propran
+ changelog: Kio ŝanĝiĝis
+ create: Uzu viajn proprajn
current: Nuna
draft: Malneto
+ generate: Uzi ŝablonon
generates:
title: Agordo de kondiĉoj de uzado
preview:
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index e28a863024e1c6..d9fa28a3a1e1be 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -930,22 +930,32 @@ es-AR:
terms_of_service:
back: Volver a los términos del servicio
changelog: Qué ha cambiado
- create: Usa el tuyo
+ create: Usa los tuyos
current: Actual
draft: Borrador
generate: Usar plantilla
generates:
action: Generar
+ chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar."
+ explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas.
+ title: Configuración de términos del servicio
+ history: Historial
+ live: En vivo
no_history: Aún no se han registrado cambios en los términos del servicio.
no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
+ notified_on_html: Usuarios notificados el %{date}
+ notify_users: Notificar usuarios
preview:
+ explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:'
+ send_preview: Enviar vista previa a %{email}
send_to_all:
one: Enviar %{display_count} correo electrónico
other: Enviar %{display_count} correos electrónicos
+ title: Vista previa de la notificación de términos del servicios
publish: Publicar
published_on_html: Publicado el %{date}
save_draft: Guardar borrador
- title: Términos del servicio
+ title: Términos del Servicio
title: Administración
trends:
allow: Permitir
@@ -1177,6 +1187,7 @@ es-AR:
set_new_password: Establecer nueva contraseña
setup:
email_below_hint_html: Revisá tu carpeta de correo no deseado / spam, o solicitá otro enlace de confirmación. Podés corregir tu dirección de correo electrónico si está mal.
+ email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo.
link_not_received: "¿No recibiste un enlace?"
new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
title: Revisá tu bandeja de entrada
@@ -1197,6 +1208,7 @@ es-AR:
view_strikes: Ver incumplimientos pasados contra tu cuenta
too_fast: Formulario enviado demasiado rápido, probá de nuevo.
use_security_key: Usar la llave de seguridad
+ user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad
author_attribution:
example_title: Texto de ejemplo
hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon."
@@ -1859,7 +1871,7 @@ es-AR:
tags:
does_not_match_previous_name: no coincide con el nombre anterior
terms_of_service:
- title: Términos del servicio
+ title: Términos del Servicio
themes:
contrast: Alto contraste
default: Oscuro
@@ -1921,9 +1933,13 @@ es-AR:
subject: Se accedió a tu cuenta desde una nueva dirección IP
title: Un nuevo inicio de sesión
terms_of_service_changed:
+ agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta.
changelog: 'En resumen, esto es lo que esta actualización significa para ti:'
+ description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:'
+ description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí.
sign_off: El equipo de %{domain}
subject: Actualizaciones en nuestros términos del servicio
+ subtitle: Los términos del servicio de %{domain} están cambiando
title: Actualización importante
warning:
appeal: Enviar una apelación
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index e71098a97cbc48..6bdee869e7b841 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -930,7 +930,7 @@ es-MX:
terms_of_service:
back: Regresar a las condiciones del servicio
changelog: Lo que ha cambiado
- create: Usa el tuyo
+ create: Usa los tuyos
current: Actual
draft: Borrador
generate: Usar plantilla
@@ -940,6 +940,7 @@ es-MX:
explanation_html: La plantilla de condiciones de servicio que se proporciona tiene únicamente fines informativos y no debe interpretarse como asesoramiento jurídico sobre ningún tema. Por favor, consulte con su propio asesor legal sobre su situación y las cuestiones legales específicas que tenga.
title: Configuración de las condiciones del servicio
history: Historial
+ live: Actual
no_history: No se han registrado cambios en las condiciones del servicio hasta el momento.
no_terms_of_service_html: Actualmente, no tiene configuradas condiciones del servicio. Las condiciones del servicio están diseñadas para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
notified_on_html: Usuarios notificados el %{date}
diff --git a/config/locales/es.yml b/config/locales/es.yml
index c9092db99f03fd..5e3374ae8ccfa7 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -930,22 +930,32 @@ es:
terms_of_service:
back: Volver a los términos del servicio
changelog: Qué ha cambiado
- create: Usa el tuyo
+ create: Usa los tuyos
current: Actual
draft: Borrador
generate: Usar plantilla
generates:
action: Generar
+ chance_to_review_html: "Los términos del servicio generados no se publicarán automáticamente.. Tendrás la oportunidad de revisar el resultado. Por favor, rellena los detalles necesarios para continuar."
+ explanation_html: La plantilla de términos de servicio ofrecida es únicamente para propósito informativo, y no debería ser considerada asesoramiento legal sobre ningún tema. Por favor, consulta con tu propio consejo legal sobre tu situación y las cuestiones legales específicas que tengas.
+ title: Configuración de términos del servicio
+ history: Historial
+ live: En vivo
no_history: Aún no se han registrado cambios en los términos del servicio.
no_terms_of_service_html: Actualmente no tienes configurado ningún término del servicio. Los términos del servicio están pensados para proporcionar claridad y protegerte de posibles responsabilidades en disputas con tus usuarios.
+ notified_on_html: Usuarios notificados el %{date}
+ notify_users: Notificar usuarios
preview:
+ explanation_html: 'El correo se enviará a %{display_count} usuarios que se registraron antes de %{date}. El siguiente texto se incluirá en el correo:'
+ send_preview: Enviar vista previa a %{email}
send_to_all:
one: Enviar %{display_count} correo electrónico
other: Enviar %{display_count} correos electrónicos
+ title: Vista previa de la notificación de términos del servicios
publish: Publicar
published_on_html: Publicado el %{date}
save_draft: Guardar borrador
- title: Términos del servicio
+ title: Términos del Servicio
title: Administración
trends:
allow: Permitir
@@ -1177,6 +1187,7 @@ es:
set_new_password: Establecer nueva contraseña
setup:
email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal.
+ email_settings_hint_html: Haz clic en el enlace que enviamos a %{email} para comenzar a usar Mastodon. Estaremos esperando aquí mismo.
link_not_received: "¿No recibiste un enlace?"
new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!"
title: Revisa tu bandeja de entrada
@@ -1197,6 +1208,7 @@ es:
view_strikes: Ver amonestaciones pasadas contra tu cuenta
too_fast: Formulario enviado demasiado rápido, inténtelo de nuevo.
use_security_key: Usar la clave de seguridad
+ user_agreement_html: He leído y acepto los términos del servicio y la política de privacidad
author_attribution:
example_title: Texto de ejemplo
hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon."
@@ -1859,7 +1871,7 @@ es:
tags:
does_not_match_previous_name: no coincide con el nombre anterior
terms_of_service:
- title: Términos del servicio
+ title: Términos del Servicio
themes:
contrast: Mastodon (alto contraste)
default: Mastodon (oscuro)
@@ -1921,9 +1933,13 @@ es:
subject: Tu cuenta ha sido accedida desde una nueva dirección IP
title: Un nuevo inicio de sesión
terms_of_service_changed:
+ agreement: Al seguir usando %{domain}, aceptas estos términos. Si no estás de acuerdo con los términos actualizados, puedes cancelar tu acuerdo con %{domain} en cualquier momento eliminando tu cuenta.
changelog: 'En resumen, esto es lo que esta actualización significa para ti:'
+ description: 'Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí:'
+ description_html: Estás recibiendo este correo electrónico porque estamos haciendo algunos cambios en nuestros términos del servicio en %{domain}. Te animamos a revisar los términos actualizados en su totalidad aquí.
sign_off: El equipo de %{domain}
subject: Actualizaciones en nuestros términos del servicio
+ subtitle: Los términos del servicio de %{domain} están cambiando
title: Actualización importante
warning:
appeal: Enviar una apelación
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 9530901f02cbe2..ac6581c8c9813a 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -1502,7 +1502,7 @@ gl:
table:
expires_at: Caduca
uses: Usos
- title: Convidar xente
+ title: Convidar a persoas
lists:
errors:
limit: Xa acadaches o número máximo de listas
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 0db1bf0b9817ef..da51e3b5a90bcd 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -1935,6 +1935,8 @@ hu:
terms_of_service_changed:
agreement: A(z) %{domain} használatának folytatásával beleegyezel ezekbe a feltételekbe. Ha nem értesz egyet a frissített feltételekkel, akkor a fiókod törlésével megszakíthatod a(z) %{domain} weboldallal való megállapodásodat.
changelog: 'Dióhéjban ez a frissítés ezt jelenti számodra:'
+ description: 'Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt:'
+ description_html: Azért kapod ezt az e-mailt, mert a %{domain} felhasználási feltételein változtatunk. Javasoljuk, hogy tekintsd át a frissített feltételeket teljes egészében itt.
sign_off: A(z) %{domain} csapata
subject: A felhasználási feltételei frissítései
subtitle: A(z) %{domain} felhasználási feltételei megváltoznak
diff --git a/config/locales/is.yml b/config/locales/is.yml
index ddb38b61afc05f..f714409ff1e0cb 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -938,12 +938,16 @@ is:
generate: Nota sniðmát
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."
title: Uppsetning þjónustuskilmála
history: Ferill
live: Í beinni
+ no_history: Það eru engar breytingar ennþá á þjónustuskilmálunum.
+ no_terms_of_service_html: Þú ert ekki með neina þjónustuskilmála stillta í augnablikinu. Þjónustuskilmálum er ætlað að gera ábyrgð ljósa og vernda þig fyrir mögulegum kröfum sem notendur gætu gert í ágreiningsmálum við þig.
notified_on_html: Notendur látnir vita þann %{date}
notify_users: Láta notendur vita
preview:
+ explanation_html: 'Tölvupósturinn verður sendur til %{display_count} notenda sem hafa skráð sig fyrir %{date}. Eftirfarandi texti verður hafður með í póstinum:'
send_preview: Senda forskoðun til %{email}
send_to_all:
one: Senda %{display_count} tölvupóst
@@ -1932,6 +1936,8 @@ is:
subject: Skráð hefur verið inn á aðganginn þinn frá nýju IP-vistfangi
title: Ný innskráning
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:'
sign_off: "%{domain}-teymið"
subject: Breytingar á þjónustuskilmálum okkar
subtitle: Þjónustuskilmálar eru að breytast á %{domain}
@@ -2040,4 +2046,4 @@ is:
not_enabled: Þú hefur ennþá ekki virkjað WebAuthn
not_supported: Þessi vafri styður ekki öryggislykla
otp_required: Til að nota öryggislykla skaltu fyrst virkja tveggja-þátta auðkenningu.
- registered_on: Nýskráður %{date}
+ registered_on: Skráði sig %{date}
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 9f248795fe1e06..f7469ce25a1cc5 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -211,6 +211,7 @@ ko:
enable_user: 사용자 활성화
memorialize_account: 고인의 계정으로 전환
promote_user: 사용자 승급
+ publish_terms_of_service: 이용 약관 게시
reject_appeal: 이의 제기 거절
reject_user: 사용자 거부
remove_avatar_user: 아바타 지우기
@@ -275,6 +276,7 @@ ko:
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} 님의 아바타를 지웠습니다"
@@ -916,17 +918,28 @@ ko:
terms_of_service:
back: 이용약관으로 돌아가기
changelog: 변경사항
+ create: 직접 사용
current: 현재
draft: 초안
generate: 템플릿 사용
generates:
action: 생성
+ chance_to_review_html: "생성된 이용 약관은 자동으로 게시되지 않을 것입니다. 결과를 확인할 기회가 있습니다. 진행하려면 필요한 정보들을 입력하세요."
+ title: 이용 약관 설정
history: 역사
live: 활성
+ 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: 허용
@@ -1175,6 +1188,7 @@ ko:
view_strikes: 내 계정에 대한 과거 중재 기록 보기
too_fast: 너무 빠르게 양식이 제출되었습니다, 다시 시도하세요.
use_security_key: 보안 키 사용
+ user_agreement_html: 이용 약관과 개인정보처리방침을 읽었고 동의합니다
author_attribution:
example_title: 예시 텍스트
hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요.
@@ -1874,6 +1888,15 @@ ko:
further_actions_html: 직접 로그인한 것이 아니라면, 지금 바로 %{action}과 2단계 인증을 활성화하여 계정을 안전하게 보호하시길 권해드립니다.
subject: 계정이 새로운 IP에서 접근됨
title: 새로운 로그인
+ terms_of_service_changed:
+ agreement: "%{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.az.yml b/config/locales/simple_form.az.yml
new file mode 100644
index 00000000000000..e9ba86bc793aee
--- /dev/null
+++ b/config/locales/simple_form.az.yml
@@ -0,0 +1 @@
+az:
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 6c21683b0760bc..d5a785e3877aca 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -60,6 +60,7 @@ cy:
setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif
setting_display_media_hide_all: Cuddio cyfryngau bob tro
setting_display_media_show_all: Dangos cyfryngau bob tro
+ setting_system_scrollbars_ui: Yn berthnasol i borwyr bwrdd gwaith yn seiliedig ar Safari a Chrome yn unig
setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maen nhw'n cuddio unrhyw fanylion
setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio'n awtomatig
username: Gallwch ddefnyddio nodau, rhifau a thanlinellau
@@ -129,6 +130,17 @@ cy:
show_application: Byddwch bob amser yn gallu gweld pa ap a gyhoeddodd eich postiad beth bynnag.
tag:
name: Dim ond er mwyn ei gwneud yn fwy darllenadwy y gallwch chi newid y llythrennau, er enghraifft
+ terms_of_service:
+ changelog: Mae modd ei strwythuro gyda chystrawen Markdown.
+ text: Mae modd ei strwythuro gyda chystrawen Markdown.
+ terms_of_service_generator:
+ admin_email: Mae hysbysiadau cyfreithiol yn cynnwys gwrth-hysbysiadau, gorchmynion llys, ceisiadau tynnu i lawr, a cheisiadau gorfodi'r gyfraith.
+ arbitration_address: Gall fod yr un peth â'r cyfeiriad ffisegol uchod, neu “D/A” os ydych chi'n defnyddio e-bost
+ arbitration_website: Gall fod yn ffurflen we, neu “D/A” os ydych chi'n defnyddio e-bost
+ dmca_address: Ar gyfer gweithredwyr yr Unol Daleithiau, defnyddiwch y cyfeiriad sydd wedi'i gofrestru yn Designated Agent Directory y DMCA. Mae rhestriad blychau post ar gael ar gais uniongyrchol, defnyddiwch gais Designated Agent Post Office Box Waiver Request y DMCA i anfon e-bost at y Swyddfa Hawlfraint a disgrifiwch eich bod yn gymedrolwr cynnwys yn y cartref sy'n ofni dial neu ddialedd am eich gweithredoedd ac sydd angen defnyddio Blwch P.O. i dynnu eich cyfeiriad cartref o olwg y cyhoedd.
+ dmca_email: Gall fod yr un e-bost sy'n cael ei ddefnyddio ar gyfer “Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol” uchod
+ domain: Dynodiad unigryw o'r gwasanaeth ar-lein rydych chi'n ei ddarparu.
+ jurisdiction: Rhestrwch y wlad lle mae pwy bynnag sy'n talu'r biliau yn byw. Os yw'n gwmni neu'n endid arall, rhestrwch y wlad lle mae wedi'i ymgorffori, a'r ddinas, rhanbarth, tiriogaeth neu wladwriaeth fel y bo'n briodol.
user:
chosen_languages: Wedi eu dewis, dim ond tŵtiau yn yr ieithoedd hyn bydd yn cael eu harddangos mewn ffrydiau cyhoeddus
role: Mae'r rôl yn rheoli pa ganiatâd sydd gan y defnyddiwr.
@@ -223,6 +235,7 @@ cy:
setting_hide_network: Cuddio eich graff cymdeithasol
setting_reduce_motion: Lleihau mudiant mewn animeiddiadau
setting_system_font_ui: Defnyddio ffont rhagosodedig y system
+ setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system
setting_theme: Thema'r wefan
setting_trends: Dangos pynciau llosg heddiw
setting_unfollow_modal: Dangos deialog cadarnhau cyn dad-ddilyn rhywun
@@ -317,6 +330,17 @@ cy:
name: Hashnod
trendable: Caniatáu i'r hashnod hwn ymddangos o dan bynciau llosg
usable: Caniatáu i bostiadau ddefnyddio'r hashnod hwn yn lleol
+ terms_of_service:
+ changelog: Beth sydd wedi newid?
+ text: Telerau Gwasanaeth
+ terms_of_service_generator:
+ admin_email: Cyfeiriad e-bost ar gyfer hysbysiadau cyfreithiol
+ arbitration_address: Cyfeiriad ffisegol ar gyfer hysbysiadau cyflafareddu
+ arbitration_website: Gwefan ar gyfer cyflwyno hysbysiadau cyflafareddu
+ dmca_address: Cyfeiriad ffisegol ar gyfer DMCA/hysbysiadau hawlfraint
+ dmca_email: Cyfeiriad e-bost ar gyfer DMCA/hysbysiadau hawlfraint
+ domain: Parth
+ jurisdiction: Awdurdodaeth gyfreithiol
user:
role: Rôl
time_zone: Cylchfa amser
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 146c6d508655cf..a741040477aada 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -320,6 +320,7 @@ eo:
trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj
usable: Permesi afiŝojn uzi ĉi tiun kradvorton loke
terms_of_service:
+ changelog: Kio ŝanĝiĝis?
text: Kondiĉoj de uzado
terms_of_service_generator:
domain: Domajno
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index c9aaa3ab686c58..1dfac9d0437c18 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -133,6 +133,13 @@ es-AR:
terms_of_service:
changelog: Se puede estructurar con sintaxis Markdown.
text: Se puede estructurar con sintaxis Markdown.
+ terms_of_service_generator:
+ 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.
+ dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba
+ domain: Identificación única del servicio en línea que estás proporcionando.
+ jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda.
user:
chosen_languages: Cuando estén marcados, sólo se mostrarán los mensajes en los idiomas seleccionados en las líneas temporales públicas
role: El rol controla qué permisos tiene el usuario.
@@ -326,6 +333,9 @@ es-AR:
changelog: "¿Qué ha cambiado?"
text: Términos del servicio
terms_of_service_generator:
+ admin_email: Dirección de correo electrónico para avisos legales
+ arbitration_address: Dirección física para avisos de arbitraje
+ arbitration_website: Sitio web para enviar avisos de arbitraje
dmca_address: Dirección física para avisos de DMCA/derechos de autor
dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor
domain: Dominio
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index c79e50a0437352..8dc1c4a3a6d85c 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -135,8 +135,12 @@ es-MX:
text: Puede estructurarse con la sintaxis Markdown.
terms_of_service_generator:
admin_email: Las notificaciones legales incluyen contraavisos, órdenes judiciales, solicitudes de retirada y solicitudes de aplicación de la ley.
+ arbitration_address: Puede ser la misma que la dirección física anterior, o “N/A” si se utiliza el correo electrónico
+ arbitration_website: Puede ser un formulario web, o “N/A” si se utiliza el correo electrónico
+ dmca_address: Para los operadores de EE. UU., utilice la dirección registrada en el Directorio de Agentes Designados de la DMCA. Un listado de apartados de correos está disponible bajo petición directa, utilice la Solicitud de Renuncia de Apartado de Correos de Agente Designado de la DMCA para enviar un correo electrónico a la Oficina de Derechos de Autor y describa que usted es un moderador de contenidos desde su casa que teme venganza o represalias por sus acciones y necesita utilizar un apartado de correos para eliminar su dirección particular de la vista del público.
dmca_email: Puede ser la misma dirección de correo electrónico usada en “Dirección de correo electrónico para notificaciones legales”
domain: Identificación única del servicio en línea que presta.
+ jurisdiction: Indique el país de residencia de quien paga las facturas. Si se trata de una empresa u otra entidad, indique el país en el que está constituida y la ciudad, región, territorio o estado, según proceda.
user:
chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas
role: El rol controla qué permisos tiene el usuario.
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 05560c918ec93f..269fdb70917a7b 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -133,6 +133,13 @@ es:
terms_of_service:
changelog: Se puede estructurar con sintaxis Markdown.
text: Se puede estructurar con sintaxis Markdown.
+ terms_of_service_generator:
+ 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.
+ dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba
+ domain: Identificación única del servicio en línea que estás proporcionando.
+ jurisdiction: Lista el país donde vive quien paga las facturas. Si es una empresa u otra entidad, enumere el país donde está basada y la ciudad, región, territorio o estado según corresponda.
user:
chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas
role: El rol controla qué permisos tiene el usuario.
@@ -326,6 +333,9 @@ es:
changelog: "¿Qué ha cambiado?"
text: Términos del servicio
terms_of_service_generator:
+ admin_email: Dirección de correo electrónico para avisos legales
+ arbitration_address: Dirección física para avisos de arbitraje
+ arbitration_website: Sitio web para enviar avisos de arbitraje
dmca_address: Dirección física para avisos de DMCA/derechos de autor
dmca_email: Dirección de correo electrónico para avisos de DMCA/derechos de autor
domain: Dominio
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index d05362639eec5a..8a0f867f147ddd 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -134,6 +134,8 @@ hu:
changelog: Markdown szintaxissal adható meg.
text: Markdown szintaxissal adható meg.
terms_of_service_generator:
+ admin_email: A jogi közlemények közé tartoznak az ellenkeresetek, a bírósági végzések, az eltávolítási kérelmek és a bűnüldöző szervek kérelmei is.
+ arbitration_address: Lehet a fent használt valós cím, vagy e-mail használata esetén „N/A”
arbitration_website: Lehet webes űrlap, vagy e-mail használata esetén „N/A”
domain: A nyújtott online szolgáltatás egyedi azonosítója.
user:
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 1a405980c027a2..113f55a2ba764b 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -40,14 +40,14 @@ ia:
text: Tu pote solo appellar contra un sanction un vice
defaults:
autofollow: Le personas qui se inscribe per medio del invitation te sequera automaticamente
- avatar: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px
+ avatar: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px
bot: Signala a alteres que le conto principalmente exeque actiones automatisate e poterea non esser surveliate
context: Un o plure contextos ubi le filtro deberea applicar se
current_password: Pro propositos de securitate insere le contrasigno del conto actual
current_username: Pro confirmar, insere le nomine de usator del conto actual
digest: Solo inviate post un longe periodo de inactivitate e solo si tu ha recipite alcun messages personal in tu absentia
email: Te sera inviate un email de confirmation
- header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px
+ header: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px
inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar
irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite
locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate
@@ -60,8 +60,8 @@ 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_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios
- setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo
+ 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
whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola
domain_allow:
@@ -98,7 +98,7 @@ ia:
site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio.
status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption
theme: Thema que le visitatores disconnexe e le nove usatores vide.
- thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor.
+ thumbnail: Un imagine de circa 2:1 monstrate al latere del informationes de tu servitor.
timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor.
trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto.
trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor.
@@ -181,7 +181,7 @@ ia:
text: Explicar perque iste decision deberea esser revertite
defaults:
autofollow: Invitar a sequer tu conto
- avatar: Pictura de profilo
+ avatar: Imagine de profilo
bot: Isto es un conto automatisate
chosen_languages: Filtrar linguas
confirm_new_password: Confirmar nove contrasigno
@@ -193,14 +193,14 @@ ia:
email: Adresse de e-mail
expires_in: Expira post
fields: Campos extra
- header: Imagine titulo
+ header: Imagine de titulo
honeypot: "%{label} (non compilar)"
inbox_url: URL del cassa de ingresso de repetitor
irreversible: Declinar in vice que celar
locale: Lingua de interfacie
max_uses: Numero max de usos
new_password: Nove contrasigno
- note: Bio
+ note: Biographia
otp_attempt: Codice a duo factores
password: Contrasigno
phrase: Parola o phrase clave
@@ -311,7 +311,7 @@ ia:
text: Regula
settings:
indexable: Includer pagina de profilo in le motores de recerca
- show_application: Monstrar ab que app tu ha inviate un message
+ show_application: Monstrar desde qual app tu ha inviate un message
tag:
listable: Permitter a iste hashtag apparer in le recercas e suggestiones
name: Hashtag
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 90c3d7f4b067bc..71af0b42fd44de 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -130,6 +130,12 @@ ko:
show_application: 나 자신은 이 설정과 관계 없이 어떤 앱으로 게시물을 작성했는지 볼 수 있습니다.
tag:
name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다.
+ terms_of_service:
+ changelog: 마크다운 문법을 사용할 수 있습니다.
+ text: 마크다운 문법을 사용할 수 있습니다.
+ terms_of_service_generator:
+ arbitration_website: 웹 형태를 사용할 수 있습니다. 이메일을 사용한다면 "N/A"로 둘 수 있습니다
+ dmca_email: 상단의 "법적 통지를 위한 이메일 주소"와 같은 주소를 사용할 수 있습니다
user:
chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다
role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다.
@@ -319,6 +325,17 @@ ko:
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.tr.yml b/config/locales/simple_form.tr.yml
index 1ef07d03285cdd..26cade806e61b1 100644
--- a/config/locales/simple_form.tr.yml
+++ b/config/locales/simple_form.tr.yml
@@ -130,6 +130,17 @@ tr:
show_application: Ne olursa olsun gönderinizi yayınlayan uygulamayı her zaman görebileceksiniz.
tag:
name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz
+ terms_of_service:
+ changelog: Markdown sözdizimiyle yapılandırılabilir.
+ text: Markdown sözdizimiyle yapılandırılabilir.
+ terms_of_service_generator:
+ admin_email: Yasal bildirimler arasında karşı bildirimler, mahkeme kararları, yayından kaldırma talepleri ve kolluk kuvvetleri talepleri yer alır.
+ arbitration_address: Yukarıdaki fiziksel adresle aynı olabilir, veya e-posta kullanıyorsanız "N/A"
+ arbitration_website: Web formu olabilir, veya e-posta kullanıyorsanız "N/A"
+ dmca_address: ABD operatörleri için DMCA Atanmış Temsilci Dizininde kayıtlı adresi kullanın. Doğrudan taleple Posta Kutusu kullanımı mümkündür, Telif Hakkı Ofisine e-posta göndermek için DMCA Atanmış Temsilci Posta Kutusu Feragat Talebini kullanın ve eylemleriniz nedeniyle intikam veya cezalandırılmaktan çekinen ve herkese açık ev adresini kullanmamak için Posta Kutusu kullanması gereken ev tabanlı bir içerik moderatörü olduğunuzu açıklayın.
+ dmca_email: Yukarıdaki "Yasal bildirimler için e-posta adresi" için kullanılan e-posta ile aynı olabilir
+ domain: Sağladığınız çevrimiçi hizmetin benzersiz tanımlaması.
+ jurisdiction: Faturaları ödeyen kişinin yaşadığı ülkeyi listeleyin. Bir şirket veya başka bir kuruluş ise, kurulduğu ülkeyi ve uygun şekilde şehri, bölgeyi, yöreyi veya eyaleti listeleyin.
user:
chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki gönderiler genel zaman çizelgelerinde görüntülenir
role: Rol, kullanıcıların sahip olduğu izinleri denetler.
@@ -322,6 +333,14 @@ tr:
terms_of_service:
changelog: Ne Değişti?
text: Hizmet Şartları
+ terms_of_service_generator:
+ admin_email: Yasal bildirimler için e-posta adresi
+ arbitration_address: Tahkim bildirimleri için fiziksel adres
+ arbitration_website: Tahkim bildirimlerini göndermek için website
+ dmca_address: DMCA/telif hakkı bildirimleri için fiziksel adres
+ dmca_email: DMCA/telif hakkı bildirimleri için e-posta adresi
+ domain: Alan adı
+ jurisdiction: Yasal yetki alanı
user:
role: Rol
time_zone: Zaman dilimi
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 91b35ead328d9b..49f191bcdd9bda 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -319,6 +319,11 @@ uk:
name: Хештеґ
trendable: Дозволити появу цього хештеґа у списку популярних хештеґів
usable: Дозволити дописам використовувати цей хештег локально
+ terms_of_service:
+ changelog: Що змінилося?
+ text: Умови використання
+ terms_of_service_generator:
+ domain: Домен
user:
role: Роль
time_zone: Часовий пояс
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index c04e541f70e779..6d9a8c749ecef9 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -130,6 +130,17 @@ vi:
show_application: Bạn sẽ luôn có thể xem ứng dụng nào đã đăng tút của mình.
tag:
name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn
+ terms_of_service:
+ changelog: Có thể dùng cú pháp Markdown.
+ text: Có thể dùng cú pháp Markdown.
+ terms_of_service_generator:
+ admin_email: Thông báo pháp lý bao gồm thông báo phản đối, lệnh của tòa án, yêu cầu gỡ bỏ và yêu cầu của cơ quan thực thi pháp luật.
+ arbitration_address: Có thể giống với Địa chỉ liên hệ ở trên hoặc “N/A” nếu sử dụng email
+ arbitration_website: Có thể dùng biểu mẫu online, hoặc “N/A” nếu dùng email
+ dmca_address: Đối với các quản trị viên tại Hoa Kỳ, hãy sử dụng địa chỉ đã đăng ký trong Danh bạ đại lý được chỉ định của DMCA. Danh sách hộp thư bưu điện có sẵn khi yêu cầu trực tiếp, hãy sử dụng Yêu cầu miễn trừ hộp thư bưu điện của đại lý được chỉ định của DMCA để gửi email đến Văn phòng bản quyền và mô tả rằng bạn là người kiểm duyệt nội dung tại nhà, người sợ bị trả thù hoặc trừng phạt vì hành động của mình và cần sử dụng hộp thư bưu điện để xóa địa chỉ nhà của bạn khỏi chế độ xem công khai.
+ dmca_email: Có thể là cùng một email được sử dụng cho “Địa chỉ email để nhận thông báo pháp lý” ở trên
+ domain: Mã nhận dạng duy nhất của dịch vụ trực tuyến mà bạn đang cung cấp.
+ jurisdiction: Liệt kê quốc gia nơi người trả hóa đơn sinh sống. Nếu đó là công ty hoặc tổ chức khác, hãy liệt kê quốc gia nơi công ty được thành lập và thành phố, khu vực, lãnh thổ hoặc tiểu bang nếu phù hợp.
user:
chosen_languages: Chỉ hiển thị những tút viết bằng các ngôn ngữ sau
role: Vai trò kiểm soát những quyền mà người dùng có.
@@ -319,6 +330,17 @@ vi:
name: Hashtag
trendable: Cho phép hashtag này lên xu hướng
usable: Cho phép dùng hashtag này khi soạn tút
+ terms_of_service:
+ changelog: Điểm mới?
+ text: Điều khoản Dịch vụ
+ terms_of_service_generator:
+ admin_email: Địa chỉ email để nhận thông báo pháp lý
+ arbitration_address: Địa chỉ thực tế để nhận thông báo trọng tài
+ arbitration_website: Trang web để nộp thông báo trọng tài
+ dmca_address: Địa chỉ liên lạc để nhận thông báo DMCA/bản quyền
+ dmca_email: Địa chỉ email để nhận thông báo DMCA/bản quyền
+ domain: Tên miền
+ jurisdiction: Quyền tài phán pháp lý
user:
role: Vai trò
time_zone: Múi giờ
diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml
index b2c37d8dd3c14f..226ebfd0b88093 100644
--- a/config/locales/simple_form.zh-CN.yml
+++ b/config/locales/simple_form.zh-CN.yml
@@ -147,7 +147,7 @@ zh-CN:
user_role:
color: 在界面各处用于标记该角色的颜色,以十六进制 RGB 格式表示
highlighted: 使角色公开可见
- name: 角色的公开名称,将在设为展示徽章时使用
+ name: 角色的公开名称,将在外显为徽章时使用
permissions_as_keys: 具有此角色的用户将有权访问...
position: 用于在特定情况下处理决策冲突。一些特定操作只能对优先级更低的角色执行
webhook:
@@ -337,7 +337,7 @@ zh-CN:
admin_email: 接收法务通知的邮箱地址
arbitration_address: 仲裁通知的实际送达地址
arbitration_website: 仲裁通知的在线提交入口
- dmca_address: DMCA/版权通知的实际地址
+ dmca_address: 接收DMCA/版权通知的实际地址
dmca_email: 接收DMCA/版权通知的邮箱地址
domain: 域名
jurisdiction: 法律管辖区
@@ -346,9 +346,9 @@ zh-CN:
time_zone: 时区
user_role:
color: 徽章颜色
- highlighted: 在用户资料中显示角色徽章
+ highlighted: 在账户页显示角色徽章
name: 名称
- permissions_as_keys: 权限设置
+ permissions_as_keys: 权限
position: 优先级
webhook:
events: 已启用事件
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 62d9eba758e376..72ff7af37fc810 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -182,11 +182,13 @@ sk:
create_custom_emoji: Vytvor vlastné emotikony
create_domain_allow: Vytvor povolenie pre doménu
create_domain_block: Vytvor zákaz domény
+ create_email_domain_block: Vytvor zákaz emailovej domény
create_ip_block: Vytvor IP pravidlo
create_unavailable_domain: Vytvor nedostupnú doménu
create_user_role: Vytvoriť rolu
demote_user: Zniž užívateľskú rolu
destroy_announcement: Vymaž oboznámenie
+ destroy_canonical_email_block: Zruš blokovanie emailu
destroy_custom_emoji: Vymaž vlastné emotikony
destroy_domain_allow: Zmaž povolenie pre doménu
destroy_domain_block: Zruš blokovanie domény
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index f01ef42d0bbb93..0eee797fecffb9 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -1835,6 +1835,8 @@ sv:
too_late: Det är för sent att överklaga denna strejk
tags:
does_not_match_previous_name: matchar inte det föregående namnet
+ terms_of_service:
+ title: Användarvillkor
themes:
contrast: Mastodon (Hög kontrast)
default: Mastodon (Mörk)
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 48e8381189f520..7c4840be606c49 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -214,6 +214,7 @@ tr:
enable_user: Kullanıcıyı Etkinleştir
memorialize_account: Hesabı Anıtlaştır
promote_user: Kullanıcıyı Yükselt
+ publish_terms_of_service: Hizmet Şartlarını Yayınla
reject_appeal: İtirazı Reddet
reject_user: Kullanıcıyı Reddet
remove_avatar_user: Profil Resmini Kaldır
@@ -278,6 +279,7 @@ tr:
enable_user_html: "%{name}, %{target} kullanıcısı için oturum açmayı etkinleştirdi"
memorialize_account_html: "%{name}, %{target} kullanıcısının hesabını bir anıt sayfaya dönüştürdü"
promote_user_html: "%{name}, %{target} kullanıcısını yükseltti"
+ publish_terms_of_service_html: "%{name} hizmet şartları güncellemelerini yayınladı"
reject_appeal_html: "%{name}, %{target} kullanıcısının yönetim kararına itirazını reddetti"
reject_user_html: "%{name}, %{target} konumundan kaydı reddetti"
remove_avatar_user_html: "%{name}, %{target} kullanıcısının avatarını kaldırdı"
@@ -928,14 +930,25 @@ tr:
terms_of_service:
back: Hizmet şartlarına dön
changelog: Ne Değişti
+ create: Kendinizinkini kullanın
current: Şimdiki
draft: Taslak
generate: Şablon kullan
generates:
action: Oluştur
+ chance_to_review_html: "Üretilmiş hizmet şartları otomatik olarak yayınlanmayacaktır. Sonucu gözden geçirme şansınız olacaktır. Devam etmek için lütfen gerekli ayrıntıları doldurun."
+ explanation_html: Sağlanan hizmet şartları şablonu yalnızca bilgilendirme amaçlıdır ve herhangi bir konuda yasal tavsiye olarak yorumlanmamalıdır. Lütfen durumunuz ve belirli yasal sorularınız hakkında kendi hukuk müşavirinize danışın.
+ title: Hizmet Şartları Kurulumu
history: Tarihçe
live: Canlı
+ no_history: Henüz kaydedilmiş hizmet şartları değişikliği yok.
+ no_terms_of_service_html: Şu anda yapılandırılmış herhangi bir hizmet şartınız yok. Hizmet şartları, kullanıcılarınızla olan anlaşmazlıklarda netlik sağlamak ve sizi olası yükümlülüklerden korumak içindir.
+ notified_on_html: Kullanıcılar %{date} tarihinde bilgilendirildi
notify_users: Kullanıcılara bildir
+ 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
+ title: Hizmet şartları bildirimini öz izle
publish: Yayınla
published_on_html: "%{date} tarihinde yayınlandı"
save_draft: Taslağı kaydet
@@ -1192,6 +1205,7 @@ tr:
view_strikes: Hesabınıza yönelik eski eylemleri görüntüleyin
too_fast: Form çok hızlı gönderildi, tekrar deneyin.
use_security_key: Güvenlik anahtarını kullan
+ user_agreement_html: hizmet şartları ve gizlilik politikasını okudum ve kabul ediyorum
author_attribution:
example_title: Örnek metin
hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin.
@@ -1916,8 +1930,13 @@ tr:
subject: Hesabınıza yeni bir IP adresinden erişim oldu
title: Yeni bir oturum açma
terms_of_service_changed:
+ agreement: "%{domain} sunucusunu kullanmaya devam ederek bu şartları kabul etmiş olursunuz. Güncellenen şartları kabul etmiyorsanız, %{domain} ile olan sözleşmenizi istediğiniz zaman hesabınızı silerek feshedebilirsiniz."
+ changelog: 'Bir bakışta, bu güncellemenin sizin için anlamı şudur:'
+ description: 'Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Aşağıda tümü yer alan güncellenen şartları incelemenizi öneriyoruz:'
+ description_html: Bu e-postayı alıyorsunuz çünkü %{domain} adresindeki hizmet şartlarımızda bazı değişiklikler yapıyoruz. Tüm güncellenen şartları buraya tıklayarak incelemenizi öneririz.
sign_off: "%{domain} Ekibi"
subject: Şimdiki hizmet şartlarımıza güncellemeler
+ subtitle: "%{domain} adresindeki hizmet şartları değişiyor"
title: Önemli güncelleme
warning:
appeal: Bir itiraz gönder
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 3f37aef747d6d9..33c743188d60b9 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -276,6 +276,7 @@ vi:
enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}"
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
promote_user_html: "%{name} đã nâng vai trò của %{target}"
+ publish_terms_of_service_html: "%{name} đã cập nhật điều khoản dịch vụ"
reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}"
reject_user_html: "%{name} đã từ chối đăng ký từ %{target}"
remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}"
@@ -912,6 +913,34 @@ vi:
search: Tìm kiếm
title: Hashtag
updated_msg: Hashtag đã được cập nhật thành công
+ terms_of_service:
+ back: Trở về điều khoản dịch vụ
+ changelog: Điểm mới
+ create: Dùng của bạn
+ current: Hiện tại
+ draft: Bản nháp
+ generate: Dùng mẫu
+ generates:
+ action: Tạo
+ chance_to_review_html: "Các điều khoản dịch vụ đã tạo sẽ không được tự động công bố. Bạn sẽ cần xem lại trước. Vui lòng điền thông tin cần thiết để tiếp tục."
+ explanation_html: Mẫu điều khoản dịch vụ được cung cấp chỉ nhằm mục đích cung cấp thông tin và không được hiểu là tư vấn pháp lý về bất kỳ vấn đề nào. Vui lòng tham khảo ý kiến cố vấn pháp lý của riêng bạn về tình huống của bạn và các câu hỏi pháp lý cụ thể mà bạn có.
+ title: Thiết lập Điều khoản Dịch vụ
+ history: Lịch sử
+ live: Đang hiển thị
+ no_history: Hiện tại chưa có ghi nhận thay đổi nào về các điều khoản dịch vụ.
+ no_terms_of_service_html: Hiện tại bạn chưa cấu hình bất kỳ điều khoản dịch vụ nào. Điều khoản dịch vụ nhằm mục đích cung cấp sự rõ ràng và bảo vệ bạn khỏi các trách nhiệm pháp lý tiềm ẩn trong các tranh chấp với người dùng của bạn.
+ notified_on_html: Đã thông báo tới thành viên vào %{date}
+ notify_users: Thông báo tới thành viên
+ preview:
+ explanation_html: 'Gửi email tới %{display_count} thành viên đã đăng ký trước %{date}. Nội dung sau đây sẽ được đưa vào email:'
+ send_preview: Gửi bản xem thử tới %{email}
+ send_to_all:
+ other: Gửi tới %{display_count} email
+ title: Xem trước thông báo về điều khoản dịch vụ
+ publish: Đăng
+ published_on_html: Đăng vào %{date}
+ save_draft: Lưu bản nháp
+ title: Điều khoản Dịch vụ
title: Quản trị
trends:
allow: Cho phép
@@ -1160,6 +1189,7 @@ vi:
view_strikes: Xem những lần cảnh cáo cũ
too_fast: Nghi vấn đăng ký spam, xin thử lại.
use_security_key: Dùng khóa bảo mật
+ user_agreement_html: Tôi đã đọc và đồng ý với điều khoản dịch vụ và chính sách bảo mật
author_attribution:
example_title: Văn bản mẫu
hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon.
@@ -1797,6 +1827,8 @@ vi:
too_late: Đã quá trễ để khiếu nại
tags:
does_not_match_previous_name: không khớp với tên trước
+ terms_of_service:
+ title: Điều khoản Dịch vụ
themes:
contrast: Mastodon (Tương phản)
default: Mastodon (Tối)
@@ -1857,6 +1889,15 @@ vi:
further_actions_html: Nếu đây không phải là bạn, hãy %{action} lập tức và bật xác minh hai bước để giữ tài khoản được an toàn.
subject: Đăng nhập tài khoản từ địa chỉ IP mới
title: Lần đăng nhập mới
+ terms_of_service_changed:
+ agreement: Tiếp tục sử dụng %{domain}, đồng nghĩa bạn đồng ý điều khoản dịch vụ. Nếu bạn không đồng ý với các điều khoản đã cập nhật, hãy xóa tài khoản %{domain} của bạn.
+ changelog: 'Nhìn sơ qua, bản cập nhật này:'
+ description: 'Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản đã cập nhật tại đây:'
+ description_html: Bạn nhận được email này vì chúng tôi đang thực hiện một số thay đổi đối với các điều khoản dịch vụ tại %{domain}. Hãy xem lại đầy đủ các điều khoản được cập nhật ở đây.
+ sign_off: Đội ngũ %{domain}
+ subject: Cập nhật điều khoản dịch vụ
+ subtitle: Điều khoản dịch vụ tại %{domain} đã thay đổi
+ title: Cập nhật quan trọng
warning:
appeal: Gửi khiếu nại
appeal_description: Nếu bạn nghĩ đây chỉ là nhầm lẫn, hãy gửi một khiếu nại cho %{instance}.
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index d0520b6afc70fd..2249875b6d59f7 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -102,7 +102,7 @@ zh-CN:
most_recent_ip: 最后活跃IP
no_account_selected: 因为没有选中任何账号,所以没有更改
no_limits_imposed: 无限制
- no_role_assigned: 未定角色
+ no_role_assigned: 未指派角色
not_subscribed: 未订阅
pending: 待审核
perform_full_suspension: 封禁
@@ -199,7 +199,7 @@ zh-CN:
destroy_relay: 删除中继站
destroy_status: 删除嘟文
destroy_unavailable_domain: 删除不可用域名
- destroy_user_role: 销毁角色
+ destroy_user_role: 删除角色
disable_2fa_user: 停用双因素认证
disable_custom_emoji: 禁用自定义表情符号
disable_relay: 禁用中继站
@@ -251,7 +251,7 @@ zh-CN:
create_ip_block_html: "%{name} 为 IP %{target} 创建了规则"
create_relay_html: "%{name} 添加了中继站 %{target}"
create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
- create_user_role_html: "%{name} 创建了 %{target} 角色"
+ create_user_role_html: "%{name} 创建了角色 %{target}"
demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限"
destroy_announcement_html: "%{name} 删除了公告 %{target}"
destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址"
@@ -264,7 +264,7 @@ zh-CN:
destroy_relay_html: "%{name} 删除了中继站 %{target}"
destroy_status_html: "%{name} 删除了 %{target} 的嘟文"
destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递"
- destroy_user_role_html: "%{name} 删除了 %{target} 角色"
+ destroy_user_role_html: "%{name} 删除了角色 %{target}"
disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证"
disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}"
disable_relay_html: "%{name} 停用了中继站 %{target}"
@@ -298,7 +298,7 @@ zh-CN:
update_ip_block_html: "%{name} 修改了对 IP %{target} 的规则"
update_report_html: "%{name} 更新了举报 %{target}"
update_status_html: "%{name} 刷新了 %{target} 的嘟文"
- update_user_role_html: "%{name} 更改了 %{target} 角色"
+ update_user_role_html: "%{name} 更改了角色 %{target}"
deleted_account: 账号已注销
empty: 没有找到日志
filter_by_action: 根据操作筛选
@@ -679,61 +679,61 @@ zh-CN:
roles:
add_new: 添加角色
assigned_users:
- other: "%{count} 用户"
+ other: "%{count} 名用户"
categories:
administration: 管理
devops: 开发运维
invites: 邀请
- moderation: 监察
+ moderation: 审核
special: 特殊
delete: 刪除
- description_html: 使用 用户角色,你可以自定义你的用户可以访问的功能和区域。
- edit: 编辑 '%{name}' 角色
+ description_html: 使用 用户角色,你可以自定义你的用户可以访问的 Mastodon 功能和区域。
+ edit: 编辑角色 '%{name}'
everyone: 默认权限
- everyone_full_description_html: 这是影响到 所有用户的基础角色,包括未指定角色的用户。 其他所有的角色都继承着它的权限。
+ everyone_full_description_html: 该角色是基础角色,会影响所有用户,包括未指定角色的用户。 其他所有的角色都继承该角色的权限。
permissions_count:
- other: "%{count} 权限"
+ other: "%{count} 个权限"
privileges:
administrator: 管理员
- administrator_description: 拥有此权限的用户将绕过每个权限
+ administrator_description: 拥有此权限的用户将绕过所有权限限制。
delete_user_data: 删除用户数据
delete_user_data_description: 允许用户立即删除其他用户的数据
invite_users: 邀请用户
- invite_users_description: 允许用户邀请新人加入服务器
+ invite_users_description: 允许用户邀请新人加入站点
manage_announcements: 管理公告
- manage_announcements_description: 允许用户管理服务器上的通知
+ manage_announcements_description: 允许用户管理站点上的公告
manage_appeals: 管理申诉
- manage_appeals_description: 允许用户审阅针对管理操作的申诉
- manage_blocks: 管理地址段
- manage_blocks_description: 允许用户屏蔽邮箱提供商和IP地址
+ manage_appeals_description: 允许用户复核针对管理操作的申诉
+ manage_blocks: 管理地址屏蔽列表
+ manage_blocks_description: 允许用户屏蔽邮箱域名与IP地址
manage_custom_emojis: 管理自定义表情
- manage_custom_emojis_description: 允许用户管理服务器上的自定义表情
+ manage_custom_emojis_description: 允许用户管理站点上的自定义表情
manage_federation: 管理联合
manage_federation_description: 允许用户禁止或允许本站同其他站点的联合,并控制消息投递能力
manage_invites: 管理邀请
- manage_invites_description: 允许用户浏览和停用邀请链接
+ manage_invites_description: 允许用户浏览与停用邀请链接
manage_reports: 管理举报
manage_reports_description: 允许用户审核举报并执行管理操作
manage_roles: 管理角色
- manage_roles_description: 允许用户管理和分配比他们权限低的角色
+ manage_roles_description: 允许用户管理与指派比自己权限低的角色
manage_rules: 管理规则
- manage_rules_description: 允许用户更改服务器规则
+ manage_rules_description: 允许用户修改站点规则
manage_settings: 管理设置
manage_settings_description: 允许用户更改站点设置
- manage_taxonomies: 管理分类
- manage_taxonomies_description: 允许用户查看热门内容并更新标签设置
- manage_user_access: 管理访问
- manage_user_access_description: 允许用户禁用其它用户的双因素身份验证,更改他们的邮箱地址,以及重置他们的密码。
+ manage_taxonomies: 管理热门与话题
+ manage_taxonomies_description: 允许用户审核热门内容并更新话题设置
+ manage_user_access: 管理用户身份验证信息
+ manage_user_access_description: 允许用户允许用户为其他用户关闭双因素身份验证、修改邮箱并重置密码。
manage_users: 管理用户
manage_users_description: 允许用户查看其他用户的信息并执行管理操作
manage_webhooks: 管理 Webhooks
manage_webhooks_description: 允许用户为管理事件配置 Webhook
view_audit_log: 查看审核日志
- view_audit_log_description: 允许用户查看此服务器上的管理操作记录
- view_dashboard: 查看仪表板
- view_dashboard_description: 允许用户访问仪表盘和各种指标
+ view_audit_log_description: 允许用户查看此站点上的管理操作记录
+ view_dashboard: 查看信息面板
+ view_dashboard_description: 允许用户访问信息面板和各种指标
view_devops: 开发运维
- view_devops_description: 允许用户访问 Sidekiq 和 pgHero 仪表板
+ view_devops_description: 允许用户访问 Sidekiq 和 pgHero 控制面板
title: 角色
rules:
add_new: 添加规则
@@ -918,11 +918,11 @@ zh-CN:
changelog: 变更说明
create: 自定义
current: 当前版本
- draft: 草案
+ draft: 草稿
generate: 使用模板
generates:
action: 生成
- chance_to_review_html: "服务条款生成后不会自动发布。你可以审核生成的草案,填写必要的信息后继续操作。"
+ chance_to_review_html: "服务条款生成后不会自动发布。你可以审核生成的草稿,填写必要的信息后继续操作。"
explanation_html: 此服务条款模板仅供参考,不构成法律意见。如有任何法律问题,请咨询法律顾问。
title: 设置服务条款
history: 历史记录
@@ -939,7 +939,7 @@ zh-CN:
title: 服务条款变更通知预览
publish: 发布
published_on_html: 发表于 %{date}
- save_draft: 保存草案
+ save_draft: 保存草稿
title: 服务条款
title: 管理
trends:
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 30778e8bb7666b..fd03b0d66d7539 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -39,7 +39,7 @@
resource :draft, only: [:show, :update]
end
- resources :terms_of_service, only: [:index, :create, :update] do
+ resources :terms_of_service, only: [:index] do
resource :preview, only: [:show], module: :terms_of_service
resource :test, only: [:create], module: :terms_of_service
resource :distribution, only: [:create], module: :terms_of_service
diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml
index 6f8b6cc60da42e..f594b8799ae4c1 100644
--- a/db/migrate/.rubocop.yml
+++ b/db/migrate/.rubocop.yml
@@ -1,9 +1,16 @@
inherit_from: ../../.rubocop.yml
-Naming/VariableNumber:
- CheckSymbols: false
+# 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
-# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity
Rails/CreateTableWithTimestamps:
Include:
- '*.rb'
+
+Rails/ThreeStateBooleanColumn:
+ Include:
+ - '*.rb'
+
+Rails/ReversibleMigration:
+ Include:
+ - '*.rb'
diff --git a/db/migrate/20160325130944_add_admin_to_users.rb b/db/migrate/20160325130944_add_admin_to_users.rb
index 6b701ebcc83fb3..a78d08a156c42a 100644
--- a/db/migrate/20160325130944_add_admin_to_users.rb
+++ b/db/migrate/20160325130944_add_admin_to_users.rb
@@ -2,6 +2,6 @@
class AddAdminToUsers < ActiveRecord::Migration[4.2]
def change
- add_column :users, :admin, :boolean, default: false
+ add_column :users, :admin, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20161123093447_add_sensitive_to_statuses.rb b/db/migrate/20161123093447_add_sensitive_to_statuses.rb
index 7487b2ee33ed5a..93388126e975e8 100644
--- a/db/migrate/20161123093447_add_sensitive_to_statuses.rb
+++ b/db/migrate/20161123093447_add_sensitive_to_statuses.rb
@@ -2,6 +2,6 @@
class AddSensitiveToStatuses < ActiveRecord::Migration[5.0]
def change
- add_column :statuses, :sensitive, :boolean, default: false
+ add_column :statuses, :sensitive, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
index 5282602ce95313..d05be7673ea208 100644
--- a/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
+++ b/db/migrate/20170123203248_add_reject_media_to_domain_blocks.rb
@@ -2,6 +2,6 @@
class AddRejectMediaToDomainBlocks < ActiveRecord::Migration[5.0]
def change
- add_column :domain_blocks, :reject_media, :boolean
+ add_column :domain_blocks, :reject_media, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
index 0f60758d3b54e0..5e29e2f0037564 100644
--- a/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
+++ b/db/migrate/20170127165745_add_devise_two_factor_to_users.rb
@@ -7,7 +7,7 @@ def change
t.column :encrypted_otp_secret_iv, :string
t.column :encrypted_otp_secret_salt, :string
t.column :consumed_timestep, :integer
- t.column :otp_required_for_login, :boolean
+ t.column :otp_required_for_login, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
end
diff --git a/db/migrate/20170205175257_remove_devices.rb b/db/migrate/20170205175257_remove_devices.rb
index 643e196bf33e57..d4af5ab6133473 100644
--- a/db/migrate/20170205175257_remove_devices.rb
+++ b/db/migrate/20170205175257_remove_devices.rb
@@ -1,7 +1,11 @@
# frozen_string_literal: true
class RemoveDevices < ActiveRecord::Migration[5.0]
- def change
+ def up
drop_table :devices if table_exists?(:devices)
end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
end
diff --git a/db/migrate/20170209184350_add_reply_to_statuses.rb b/db/migrate/20170209184350_add_reply_to_statuses.rb
index ffef97609dac1a..030ceb4db04de0 100644
--- a/db/migrate/20170209184350_add_reply_to_statuses.rb
+++ b/db/migrate/20170209184350_add_reply_to_statuses.rb
@@ -2,7 +2,7 @@
class AddReplyToStatuses < ActiveRecord::Migration[5.0]
def up
- add_column :statuses, :reply, :boolean, nil: false, default: false
+ add_column :statuses, :reply, :boolean, default: false # rubocop:disable Rails/ThreeStateBooleanColumn
Status.unscoped.update_all('reply = (in_reply_to_id IS NOT NULL)')
end
diff --git a/db/migrate/20170304202101_add_type_to_media_attachments.rb b/db/migrate/20170304202101_add_type_to_media_attachments.rb
index e49d87fc746ac8..8f863fba4095fe 100644
--- a/db/migrate/20170304202101_add_type_to_media_attachments.rb
+++ b/db/migrate/20170304202101_add_type_to_media_attachments.rb
@@ -3,7 +3,7 @@
class AddTypeToMediaAttachments < ActiveRecord::Migration[5.0]
class MigrationMediaAttachment < ApplicationRecord
self.table_name = :media_attachments
- enum type: [:image, :gifv, :video]
+ enum :type, [:image, :gifv, :video]
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze
end
diff --git a/db/migrate/20170330163835_create_imports.rb b/db/migrate/20170330163835_create_imports.rb
index 6bd9e28b5b3385..7548a376d45797 100644
--- a/db/migrate/20170330163835_create_imports.rb
+++ b/db/migrate/20170330163835_create_imports.rb
@@ -5,7 +5,7 @@ def change
create_table :imports do |t|
t.integer :account_id, null: false
t.integer :type, null: false
- t.boolean :approved
+ t.boolean :approved # rubocop:disable Rails/ThreeStateBooleanColumn
t.timestamps
end
diff --git a/db/migrate/20170711225116_fix_null_booleans.rb b/db/migrate/20170711225116_fix_null_booleans.rb
index 12cc9b8b86cea4..7b0ee32293f06c 100644
--- a/db/migrate/20170711225116_fix_null_booleans.rb
+++ b/db/migrate/20170711225116_fix_null_booleans.rb
@@ -3,10 +3,10 @@
class FixNullBooleans < ActiveRecord::Migration[5.1]
def change
safety_assured do
- change_column_default :domain_blocks, :reject_media, false
+ change_column_default :domain_blocks, :reject_media, false # rubocop:disable Rails/ReversibleMigration
change_column_null :domain_blocks, :reject_media, false, false
- change_column_default :imports, :approved, false
+ change_column_default :imports, :approved, false # rubocop:disable Rails/ReversibleMigration
change_column_null :imports, :approved, false, false
change_column_null :statuses, :sensitive, false, false
@@ -14,7 +14,7 @@ def change
change_column_null :users, :admin, false, false
- change_column_default :users, :otp_required_for_login, false
+ change_column_default :users, :otp_required_for_login, false # rubocop:disable Rails/ReversibleMigration
change_column_null :users, :otp_required_for_login, false, false
end
end
diff --git a/db/migrate/20170905165803_add_local_to_statuses.rb b/db/migrate/20170905165803_add_local_to_statuses.rb
index cb6307c265a04d..90f01cb3730323 100644
--- a/db/migrate/20170905165803_add_local_to_statuses.rb
+++ b/db/migrate/20170905165803_add_local_to_statuses.rb
@@ -2,6 +2,6 @@
class AddLocalToStatuses < ActiveRecord::Migration[5.1]
def change
- add_column :statuses, :local, :boolean, null: true, default: nil
+ add_column :statuses, :local, :boolean, null: true, default: nil # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
index 4c3a25e838ace3..34b7951551aa8f 100644
--- a/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
+++ b/db/migrate/20180106000232_add_index_on_statuses_for_api_v1_accounts_account_id_statuses.rb
@@ -5,7 +5,7 @@ class AddIndexOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecord::Migrat
def change
safety_assured do
- add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106
+ add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber
end
remove_index :statuses, [:account_id, :id], name: :index_statuses_on_account_id_id
end
diff --git a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
index 242ae74107ac22..317c48bb6913fc 100644
--- a/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
+++ b/db/migrate/20180514140000_revert_index_change_on_statuses_for_api_v1_accounts_account_id_statuses.rb
@@ -5,7 +5,7 @@ class RevertIndexChangeOnStatusesForApiV1AccountsAccountIdStatuses < ActiveRecor
def change
safety_assured do
- add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106')
+ add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 unless index_name_exists?(:statuses, 'index_statuses_20180106') # rubocop:disable Naming/VariableNumber
end
# These index may not exists (see migration 20180514130000)
diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb
index d879fd88a24228..643b3d46c4beda 100644
--- a/db/migrate/20181024224956_migrate_account_conversations.rb
+++ b/db/migrate/20181024224956_migrate_account_conversations.rb
@@ -21,7 +21,7 @@ class MigrationStatus < ApplicationRecord
belongs_to :account, class_name: 'MigrationAccount'
has_many :mentions, dependent: :destroy, inverse_of: :status, class_name: 'MigrationMention', foreign_key: :status_id
scope :local, -> { where(local: true).or(where(uri: nil)) }
- enum visibility: { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, _suffix: :visibility
+ enum :visibility, { public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 }, suffix: :visibility
has_many :active_mentions, -> { active }, class_name: 'MigrationMention', inverse_of: :status, foreign_key: :status_id
end
diff --git a/db/migrate/20181203021853_add_discoverable_to_accounts.rb b/db/migrate/20181203021853_add_discoverable_to_accounts.rb
index 16576aa043e0bb..333a2ce2104cdc 100644
--- a/db/migrate/20181203021853_add_discoverable_to_accounts.rb
+++ b/db/migrate/20181203021853_add_discoverable_to_accounts.rb
@@ -2,6 +2,6 @@
class AddDiscoverableToAccounts < ActiveRecord::Migration[5.2]
def change
- add_column :accounts, :discoverable, :boolean
+ add_column :accounts, :discoverable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
index 656cd0af585609..8dfa4cca4ae688 100644
--- a/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
+++ b/db/migrate/20190509164208_add_by_moderator_to_tombstone.rb
@@ -2,6 +2,6 @@
class AddByModeratorToTombstone < ActiveRecord::Migration[5.2]
def change
- add_column :tombstones, :by_moderator, :boolean
+ add_column :tombstones, :by_moderator, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
index cbb5fc67b4f531..37812f2b5496de 100644
--- a/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
+++ b/db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb
@@ -7,7 +7,7 @@ class Account < ApplicationRecord
class DomainBlock < ApplicationRecord
# Dummy class, to make migration possible across version changes
- enum severity: [:silence, :suspend, :noop]
+ enum :severity, [:silence, :suspend, :noop]
has_many :accounts, foreign_key: :domain, primary_key: :domain
end
diff --git a/db/migrate/20190805123746_add_capabilities_to_tags.rb b/db/migrate/20190805123746_add_capabilities_to_tags.rb
index 949938bb1ef528..628617cb7ead04 100644
--- a/db/migrate/20190805123746_add_capabilities_to_tags.rb
+++ b/db/migrate/20190805123746_add_capabilities_to_tags.rb
@@ -4,9 +4,11 @@ class AddCapabilitiesToTags < ActiveRecord::Migration[5.2]
def change
safety_assured do
change_table(:tags, bulk: true) do |t|
+ # rubocop:disable Rails/ThreeStateBooleanColumn
t.column :usable, :boolean
t.column :trendable, :boolean
t.column :listable, :boolean
+ # rubocop:enable Rails/ThreeStateBooleanColumn
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
diff --git a/db/migrate/20190820003045_update_statuses_index.rb b/db/migrate/20190820003045_update_statuses_index.rb
index df9ce0638f1e7d..4bd9c156db866b 100644
--- a/db/migrate/20190820003045_update_statuses_index.rb
+++ b/db/migrate/20190820003045_update_statuses_index.rb
@@ -4,12 +4,12 @@ class UpdateStatusesIndex < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 }
- remove_index :statuses, name: :index_statuses_20180106
+ safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 } # rubocop:disable Naming/VariableNumber
+ remove_index :statuses, name: :index_statuses_20180106 # rubocop:disable Naming/VariableNumber
end
def down
- safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 }
- remove_index :statuses, name: :index_statuses_20190820
+ safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 } # rubocop:disable Naming/VariableNumber
+ remove_index :statuses, name: :index_statuses_20190820 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20190823221802_add_local_index_to_statuses.rb b/db/migrate/20190823221802_add_local_index_to_statuses.rb
index b5baa30287f0df..5cab5547e5aa44 100644
--- a/db/migrate/20190823221802_add_local_index_to_statuses.rb
+++ b/db/migrate/20190823221802_add_local_index_to_statuses.rb
@@ -4,10 +4,10 @@ class AddLocalIndexToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))'
+ add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
end
def down
- remove_index :statuses, name: :index_statuses_local_20190824
+ remove_index :statuses, name: :index_statuses_local_20190824 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
index d6740f19b826c7..0cf1e9fee7ade8 100644
--- a/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
+++ b/db/migrate/20191212163405_add_hide_collections_to_accounts.rb
@@ -2,6 +2,6 @@
class AddHideCollectionsToAccounts < ActiveRecord::Migration[5.2]
def change
- add_column :accounts, :hide_collections, :boolean
+ add_column :accounts, :hide_collections, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20200119112504_add_public_index_to_statuses.rb b/db/migrate/20200119112504_add_public_index_to_statuses.rb
index 6451b9254e2a2f..21a361d5b653bb 100644
--- a/db/migrate/20200119112504_add_public_index_to_statuses.rb
+++ b/db/migrate/20200119112504_add_public_index_to_statuses.rb
@@ -4,10 +4,10 @@ class AddPublicIndexToStatuses < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
- add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))'
+ add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
end
def down
- remove_index :statuses, name: :index_statuses_public_20200119
+ remove_index :statuses, name: :index_statuses_public_20200119 # rubocop:disable Naming/VariableNumber
end
end
diff --git a/db/migrate/20200309150742_add_forwarded_to_reports.rb b/db/migrate/20200309150742_add_forwarded_to_reports.rb
index 60db0167e38ced..ba835ded3aaf81 100644
--- a/db/migrate/20200309150742_add_forwarded_to_reports.rb
+++ b/db/migrate/20200309150742_add_forwarded_to_reports.rb
@@ -2,6 +2,6 @@
class AddForwardedToReports < ActiveRecord::Migration[5.2]
def change
- add_column :reports, :forwarded, :boolean
+ add_column :reports, :forwarded, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20210609202149_create_login_activities.rb b/db/migrate/20210609202149_create_login_activities.rb
index f2da335997254c..4add47a725b774 100644
--- a/db/migrate/20210609202149_create_login_activities.rb
+++ b/db/migrate/20210609202149_create_login_activities.rb
@@ -6,7 +6,7 @@ def change
t.belongs_to :user, null: false, foreign_key: { on_delete: :cascade }
t.string :authentication_method
t.string :provider
- t.boolean :success
+ t.boolean :success # rubocop:disable Rails/ThreeStateBooleanColumn
t.string :failure_reason
t.inet :ip
t.string :user_agent
diff --git a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
index 8c5d9c368ae9b7..eaeba5447374e5 100644
--- a/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
+++ b/db/migrate/20210621221010_add_skip_sign_in_token_to_users.rb
@@ -2,6 +2,6 @@
class AddSkipSignInTokenToUsers < ActiveRecord::Migration[6.1]
def change
- add_column :users, :skip_sign_in_token, :boolean
+ add_column :users, :skip_sign_in_token, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20211031031021_create_preview_card_providers.rb b/db/migrate/20211031031021_create_preview_card_providers.rb
index 83255614b60d4e..577cfc53b80607 100644
--- a/db/migrate/20211031031021_create_preview_card_providers.rb
+++ b/db/migrate/20211031031021_create_preview_card_providers.rb
@@ -5,7 +5,7 @@ def change
create_table :preview_card_providers do |t|
t.string :domain, null: false, default: '', index: { unique: true }
t.attachment :icon
- t.boolean :trendable
+ t.boolean :trendable # rubocop:disable Rails/ThreeStateBooleanColumn
t.datetime :reviewed_at
t.datetime :requested_review_at
t.timestamps
diff --git a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
index 21fc4ecf466b8c..561a4d91c01803 100644
--- a/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
+++ b/db/migrate/20211115032527_add_trendable_to_preview_cards.rb
@@ -2,6 +2,6 @@
class AddTrendableToPreviewCards < ActiveRecord::Migration[6.1]
def change
- add_column :preview_cards, :trendable, :boolean
+ add_column :preview_cards, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20220202200743_add_trendable_to_accounts.rb b/db/migrate/20220202200743_add_trendable_to_accounts.rb
index 539717b751d316..ad97e1fd1e6ddb 100644
--- a/db/migrate/20220202200743_add_trendable_to_accounts.rb
+++ b/db/migrate/20220202200743_add_trendable_to_accounts.rb
@@ -4,7 +4,7 @@ class AddTrendableToAccounts < ActiveRecord::Migration[6.1]
def change
safety_assured do
change_table(:accounts, bulk: true) do |t|
- t.column :trendable, :boolean
+ t.column :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
diff --git a/db/migrate/20220202200926_add_trendable_to_statuses.rb b/db/migrate/20220202200926_add_trendable_to_statuses.rb
index 5d101132b81d48..3eaf2d0bb0c280 100644
--- a/db/migrate/20220202200926_add_trendable_to_statuses.rb
+++ b/db/migrate/20220202200926_add_trendable_to_statuses.rb
@@ -2,6 +2,6 @@
class AddTrendableToStatuses < ActiveRecord::Migration[6.1]
def change
- add_column :statuses, :trendable, :boolean
+ add_column :statuses, :trendable, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
diff --git a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
index 55567d62e17011..c3dfc786a59858 100644
--- a/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
+++ b/db/migrate/20220303000827_add_ordered_media_attachment_ids_to_status_edits.rb
@@ -7,7 +7,7 @@ def change
t.column :ordered_media_attachment_ids, :bigint, array: true
t.column :media_descriptions, :text, array: true
t.column :poll_options, :string, array: true
- t.column :sensitive, :boolean
+ t.column :sensitive, :boolean # rubocop:disable Rails/ThreeStateBooleanColumn
end
end
end
diff --git a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
index e794824afca9a8..b3b5ed389407fb 100644
--- a/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
+++ b/db/migrate/20220827195229_change_canonical_email_blocks_nullable.rb
@@ -2,6 +2,6 @@
class ChangeCanonicalEmailBlocksNullable < ActiveRecord::Migration[6.1]
def change
- safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil }
+ safety_assured { change_column :canonical_email_blocks, :reference_account_id, :bigint, null: true, default: nil } # rubocop:disable Rails/ReversibleMigration
end
end
diff --git a/db/migrate/20240312105620_create_severed_relationships.rb b/db/migrate/20240312105620_create_severed_relationships.rb
index 1ed911cd55a379..3269298e807215 100644
--- a/db/migrate/20240312105620_create_severed_relationships.rb
+++ b/db/migrate/20240312105620_create_severed_relationships.rb
@@ -14,8 +14,10 @@ def change
t.integer :direction, null: false
# Those attributes are carried over from the `follows` table
+ # rubocop:disable Rails/ThreeStateBooleanColumn
t.boolean :show_reblogs
t.boolean :notify
+ # rubocop:enable Rails/ThreeStateBooleanColumn
t.string :languages, array: true
t.timestamps
diff --git a/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb
new file mode 100644
index 00000000000000..69b5b4a025476f
--- /dev/null
+++ b/db/migrate/20241210140838_add_not_null_to_account_pin_account_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountPinAccountColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_pins
+ WHERE account_id IS NULL
+ OR target_account_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :account_pins, :account_id, false
+ change_column_null :account_pins, :target_account_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :account_pins, :account_id, true
+ change_column_null :account_pins, :target_account_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb
new file mode 100644
index 00000000000000..cd57f3b2faf115
--- /dev/null
+++ b/db/migrate/20241212152158_add_not_null_to_account_alias_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountAliasColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_aliases
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :account_aliases, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :account_aliases, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb
new file mode 100644
index 00000000000000..80c57b1e393e02
--- /dev/null
+++ b/db/migrate/20241212152618_add_not_null_to_account_deletion_request_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountDeletionRequestColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_deletion_requests
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :account_deletion_requests, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :account_deletion_requests, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb
new file mode 100644
index 00000000000000..38ab6b9ad48d21
--- /dev/null
+++ b/db/migrate/20241212152734_add_not_null_to_account_domain_block_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAccountDomainBlockColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM account_domain_blocks
+ WHERE account_id IS NULL
+ OR domain IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :account_domain_blocks, :account_id, false
+ change_column_null :account_domain_blocks, :domain, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :account_domain_blocks, :account_id, true
+ change_column_null :account_domain_blocks, :domain, true
+ end
+ end
+end
diff --git a/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb
new file mode 100644
index 00000000000000..092ad00e85cf68
--- /dev/null
+++ b/db/migrate/20241212152910_add_not_null_to_admin_action_log_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToAdminActionLogColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM admin_action_logs
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :admin_action_logs, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :admin_action_logs, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb
new file mode 100644
index 00000000000000..052f0300a9abac
--- /dev/null
+++ b/db/migrate/20241212153054_add_not_null_to_announcement_mute_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAnnouncementMuteColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM announcement_mutes
+ WHERE account_id IS NULL
+ OR announcement_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :announcement_mutes, :account_id, false
+ change_column_null :announcement_mutes, :announcement_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :announcement_mutes, :account_id, true
+ change_column_null :announcement_mutes, :announcement_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb
new file mode 100644
index 00000000000000..a877eccb3a3dec
--- /dev/null
+++ b/db/migrate/20241212153202_add_not_null_to_announcement_reaction_columns.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddNotNullToAnnouncementReactionColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM announcement_reactions
+ WHERE account_id IS NULL
+ OR announcement_id IS NULL
+ SQL
+
+ safety_assured do
+ change_column_null :announcement_reactions, :account_id, false
+ change_column_null :announcement_reactions, :announcement_id, false
+ end
+ end
+
+ def down
+ safety_assured do
+ change_column_null :announcement_reactions, :account_id, true
+ change_column_null :announcement_reactions, :announcement_id, true
+ end
+ end
+end
diff --git a/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb
new file mode 100644
index 00000000000000..5eeb5f942a3df2
--- /dev/null
+++ b/db/migrate/20241212153254_add_not_null_to_custom_filter_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToCustomFilterColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM custom_filters
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :custom_filters, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :custom_filters, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb
new file mode 100644
index 00000000000000..141b95b63a4e1c
--- /dev/null
+++ b/db/migrate/20241212154231_add_not_null_to_scheduled_status_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToScheduledStatusColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM scheduled_statuses
+ WHERE account_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :scheduled_statuses, :account_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :scheduled_statuses, :account_id, true }
+ end
+end
diff --git a/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb
new file mode 100644
index 00000000000000..7066f69691278d
--- /dev/null
+++ b/db/migrate/20241212154346_add_not_null_to_user_invite_request_columns.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+class AddNotNullToUserInviteRequestColumns < ActiveRecord::Migration[7.2]
+ def up
+ connection.execute(<<~SQL.squish)
+ DELETE FROM user_invite_requests
+ WHERE user_id IS NULL
+ SQL
+
+ safety_assured { change_column_null :user_invite_requests, :user_id, false }
+ end
+
+ def down
+ safety_assured { change_column_null :user_invite_requests, :user_id, true }
+ end
+end
diff --git a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
index 7788431cd5af77..ff4012ffa17b30 100644
--- a/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
+++ b/db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb
@@ -7,7 +7,7 @@ class Account < ApplicationRecord
class DomainBlock < ApplicationRecord
# Dummy class, to make migration possible across version changes
- enum severity: [:silence, :suspend, :noop]
+ enum :severity, [:silence, :suspend, :noop]
has_many :accounts, foreign_key: :domain, primary_key: :domain
end
diff --git a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
index b00f9df5331d4e..0bf9dbff03abe5 100644
--- a/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
+++ b/db/post_migrate/20201017234926_fill_account_suspension_origin.rb
@@ -6,7 +6,7 @@ class FillAccountSuspensionOrigin < ActiveRecord::Migration[5.2]
class MigrationAccount < ApplicationRecord
self.table_name = :accounts
scope :suspended, -> { where.not(suspended_at: nil) }
- enum suspension_origin: { local: 0, remote: 1 }, _prefix: true
+ enum :suspension_origin, { local: 0, remote: 1 }, prefix: true
end
def up
diff --git a/db/schema.rb b/db/schema.rb
index fd9e03cc1c9fe0..ff34664bf6597c 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,12 +10,12 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.2].define(version: 2024_12_05_163118) do
+ActiveRecord::Schema[7.2].define(version: 2024_12_12_154346) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "account_aliases", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.string "acct", default: "", null: false
t.string "uri", default: "", null: false
t.datetime "created_at", precision: nil, null: false
@@ -36,17 +36,17 @@
end
create_table "account_deletion_requests", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id"], name: "index_account_deletion_requests_on_account_id"
end
create_table "account_domain_blocks", force: :cascade do |t|
- t.string "domain"
+ t.string "domain", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.index ["account_id", "domain"], name: "index_account_domain_blocks_on_account_id_and_domain", unique: true
end
@@ -82,8 +82,8 @@
end
create_table "account_pins", 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.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "target_account_id"], name: "index_account_pins_on_account_id_and_target_account_id", unique: true
@@ -213,7 +213,7 @@
end
create_table "admin_action_logs", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.string "action", default: "", null: false
t.string "target_type"
t.bigint "target_id"
@@ -227,8 +227,8 @@
end
create_table "announcement_mutes", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "announcement_id"
+ t.bigint "account_id", null: false
+ t.bigint "announcement_id", null: false
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
t.index ["account_id", "announcement_id"], name: "index_announcement_mutes_on_account_id_and_announcement_id", unique: true
@@ -236,8 +236,8 @@
end
create_table "announcement_reactions", force: :cascade do |t|
- t.bigint "account_id"
- t.bigint "announcement_id"
+ t.bigint "account_id", null: false
+ t.bigint "announcement_id", null: false
t.string "name", default: "", null: false
t.bigint "custom_emoji_id"
t.datetime "created_at", precision: nil, null: false
@@ -405,7 +405,7 @@
end
create_table "custom_filters", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "expires_at", precision: nil
t.text "phrase", default: "", null: false
t.string "context", default: [], null: false, array: true
@@ -915,7 +915,7 @@
end
create_table "scheduled_statuses", force: :cascade do |t|
- t.bigint "account_id"
+ t.bigint "account_id", null: false
t.datetime "scheduled_at", precision: nil
t.jsonb "params"
t.index ["account_id"], name: "index_scheduled_statuses_on_account_id"
@@ -1130,7 +1130,7 @@
end
create_table "user_invite_requests", force: :cascade do |t|
- t.bigint "user_id"
+ t.bigint "user_id", null: false
t.text "text"
t.datetime "created_at", precision: nil, null: false
t.datetime "updated_at", precision: nil, null: false
diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb
index b4ff4a12a0e0f6..fe58d1bce142f3 100644
--- a/lib/paperclip/blurhash_transcoder.rb
+++ b/lib/paperclip/blurhash_transcoder.rb
@@ -23,7 +23,7 @@ def blurhash_params
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 -depth 8 RGB:-', source: File.expand_path(@file.path)).unpack('C*')
+ pixels = convert(':source -flatten -depth 8 -compress none 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
deleted file mode 100644
index 32bdb8a8638fe8..00000000000000
--- a/lib/paperclip/gif_transcoder.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-# 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
new file mode 100644
index 00000000000000..4bb27e3b756f64
--- /dev/null
+++ b/lib/paperclip/gifv_transcoder.rb
@@ -0,0 +1,20 @@
+# 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/package.json b/package.json
index e3db943862f9fa..cc7d3ea39ef079 100644
--- a/package.json
+++ b/package.json
@@ -42,13 +42,14 @@
"@babel/preset-react": "^7.22.3",
"@babel/preset-typescript": "^7.21.5",
"@babel/runtime": "^7.22.3",
+ "@csstools/stylelint-formatter-github": "^1.0.0",
"@dnd-kit/core": "^6.1.0",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@rails/ujs": "7.1.500",
+ "@rails/ujs": "7.1.501",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
@@ -196,9 +197,9 @@
"lint-staged": "^15.0.0",
"prettier": "^3.3.3",
"react-test-renderer": "^18.2.0",
- "stylelint": "^16.0.2",
+ "stylelint": "^16.11.0",
"stylelint-config-prettier-scss": "^1.0.0",
- "stylelint-config-standard-scss": "^13.0.0",
+ "stylelint-config-standard-scss": "^14.0.0",
"typescript": "^5.0.4",
"webpack-dev-server": "^3.11.3"
},
diff --git a/public/emoji/sheet_13.png b/public/emoji/sheet_13.png
index 1ba12b619111ff..ade40777197d7f 100644
Binary files a/public/emoji/sheet_13.png and b/public/emoji/sheet_13.png differ
diff --git a/spec/controllers/admin/export_domain_allows_controller_spec.rb b/spec/controllers/admin/export_domain_allows_controller_spec.rb
index 0a2e342620a0ac..0a5639419333a2 100644
--- a/spec/controllers/admin/export_domain_allows_controller_spec.rb
+++ b/spec/controllers/admin/export_domain_allows_controller_spec.rb
@@ -32,15 +32,16 @@
it 'allows imported domains' do
post :import, params: { admin_import: { data: fixture_file_upload('domain_allows.csv') } }
- expect(response).to redirect_to(admin_instances_path)
-
- # Header should not be imported
- expect(DomainAllow.where(domain: '#domain').present?).to be(false)
-
- # Domains should now be added
- get :export, params: { format: :csv }
- expect(response).to have_http_status(200)
- expect(response.body).to eq(domain_allows_csv_file)
+ expect(response)
+ .to redirect_to(admin_instances_path)
+
+ # Header row should not be imported, but domains should
+ expect(DomainAllow)
+ .to_not exist(domain: '#domain')
+ expect(DomainAllow)
+ .to exist(domain: 'good.domain')
+ expect(DomainAllow)
+ .to exist(domain: 'better.domain')
end
it 'displays error on no file selected' do
diff --git a/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb
index d0a12f8b3eea27..6c19b973d064cf 100644
--- a/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb
+++ b/spec/controllers/admin/terms_of_service/drafts_controller_spec.rb
@@ -18,4 +18,49 @@
expect(response).to have_http_status(:success)
end
end
+
+ describe 'PUT #update' do
+ subject { put :update, params: params }
+
+ let!(:terms) { Fabricate :terms_of_service, published_at: nil }
+
+ context 'with publishing params' do
+ let(:params) { { terms_of_service: { text: 'new' }, action_type: 'publish' } }
+
+ it 'publishes the record' do
+ expect { subject }
+ .to change(Admin::ActionLog, :count).by(1)
+
+ expect(response)
+ .to redirect_to(admin_terms_of_service_index_path)
+ expect(terms.reload.published_at)
+ .to_not be_nil
+ end
+ end
+
+ context 'with non publishing params' do
+ let(:params) { { terms_of_service: { text: 'new' }, action_type: 'save_draft' } }
+
+ it 'updates but does not publish the record' do
+ expect { subject }
+ .to_not change(Admin::ActionLog, :count)
+
+ expect(response)
+ .to redirect_to(admin_terms_of_service_draft_path)
+ expect(terms.reload.published_at)
+ .to be_nil
+ end
+ end
+
+ context 'with invalid params' do
+ let(:params) { { terms_of_service: { text: '' }, action_type: 'save_draft' } }
+
+ it 'does not update the record' do
+ subject
+
+ expect(response)
+ .to have_http_status(:success)
+ end
+ end
+ end
end
diff --git a/spec/controllers/admin/terms_of_service/generates_controller_spec.rb b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb
index 1f33376de02d02..2f85fbc25fbb90 100644
--- a/spec/controllers/admin/terms_of_service/generates_controller_spec.rb
+++ b/spec/controllers/admin/terms_of_service/generates_controller_spec.rb
@@ -18,4 +18,48 @@
expect(response).to have_http_status(:success)
end
end
+
+ describe 'POST #create' do
+ subject { post :create, params: params }
+
+ context 'with valid params' do
+ let(:params) do
+ {
+ terms_of_service_generator: {
+ admin_email: 'test@host.example',
+ arbitration_address: '123 Main Street',
+ arbitration_website: 'https://host.example',
+ dmca_address: '123 DMCA Ave',
+ dmca_email: 'dmca@host.example',
+ domain: 'host.example',
+ jurisdiction: 'Europe',
+ },
+ }
+ end
+
+ it 'saves new record' do
+ expect { subject }
+ .to change(TermsOfService, :count).by(1)
+ expect(response)
+ .to redirect_to(admin_terms_of_service_draft_path)
+ end
+ end
+
+ context 'with invalid params' do
+ let(:params) do
+ {
+ terms_of_service_generator: {
+ admin_email: 'what the',
+ },
+ }
+ end
+
+ it 'does not save new record' do
+ expect { subject }
+ .to_not change(TermsOfService, :count)
+ expect(response)
+ .to have_http_status(200)
+ end
+ end
+ end
end
diff --git a/spec/controllers/settings/verifications_controller_spec.rb b/spec/controllers/settings/verifications_controller_spec.rb
deleted file mode 100644
index 1a8df485b5f45d..00000000000000
--- a/spec/controllers/settings/verifications_controller_spec.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Settings::VerificationsController 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)
- .and have_attributes(
- headers: include(
- 'Cache-Control' => 'private, no-store'
- )
- )
- end
- end
-end
diff --git a/spec/fabricators/status_edit_fabricator.rb b/spec/fabricators/status_edit_fabricator.rb
new file mode 100644
index 00000000000000..4df61dcfda65e9
--- /dev/null
+++ b/spec/fabricators/status_edit_fabricator.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+Fabricator(:status_edit) do
+ status { Fabricate.build(:status) }
+end
diff --git a/spec/fixtures/files/600x400-animated.gif b/spec/fixtures/files/600x400-animated.gif
new file mode 100644
index 00000000000000..1a773c0af1d1aa
Binary files /dev/null and b/spec/fixtures/files/600x400-animated.gif differ
diff --git a/spec/fixtures/files/600x400-animated.png b/spec/fixtures/files/600x400-animated.png
new file mode 100644
index 00000000000000..6430fceabbe4a0
Binary files /dev/null and b/spec/fixtures/files/600x400-animated.png differ
diff --git a/spec/fixtures/files/600x400.gif b/spec/fixtures/files/600x400.gif
new file mode 100644
index 00000000000000..bab39cb6f7a401
Binary files /dev/null and b/spec/fixtures/files/600x400.gif differ
diff --git a/spec/fixtures/files/attachment.gif b/spec/fixtures/files/attachment.gif
deleted file mode 100644
index 89dd73ad3e9fb6..00000000000000
Binary files a/spec/fixtures/files/attachment.gif and /dev/null differ
diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb
index 18b791a73acd15..517cc4f6ae1dc5 100644
--- a/spec/models/custom_filter_spec.rb
+++ b/spec/models/custom_filter_spec.rb
@@ -7,19 +7,8 @@
it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_presence_of(:context) }
- it 'requires non-empty of context' do
- record = described_class.new(context: [])
- record.valid?
-
- expect(record).to model_have_error_on_field(:context)
- end
-
- it 'requires valid context value' do
- record = described_class.new(context: ['invalid'])
- record.valid?
-
- expect(record).to model_have_error_on_field(:context)
- end
+ it { is_expected.to_not allow_values([], %w(invalid)).for(:context) }
+ it { is_expected.to allow_values(%w(home)).for(:context) }
end
describe 'Normalizations' do
diff --git a/spec/models/form/import_spec.rb b/spec/models/form/import_spec.rb
index e14ad6eca03523..dd8fd35a05fa87 100644
--- a/spec/models/form/import_spec.rb
+++ b/spec/models/form/import_spec.rb
@@ -61,10 +61,7 @@
let(:import_type) { 'following' }
let(:import_file) { 'boop.ogg' }
- it 'has errors' do
- # NOTE: not testing more specific error because we don't know the string to match
- expect(subject).to model_have_error_on_field(:data)
- end
+ it { is_expected.to_not allow_value(data).for(:data) }
end
context 'when importing more follows than allowed' do
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index 5f91ae096734c7..cce4b304798561 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -90,7 +90,7 @@
media.destroy
end
- it 'saves media attachment with correct file and size metadata' do
+ it 'saves metadata and generates styles' do
expect(media)
.to be_persisted
.and be_processing_complete
@@ -98,18 +98,28 @@
file: be_present,
type: eq('image'),
file_content_type: eq(content_type),
- file_file_name: end_with(extension)
+ file_file_name: end_with(extension),
+ blurhash: have_attributes(size: eq(36))
)
- # 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.file.meta.deep_symbolize_keys)
+ expect(media_metadata)
.to include(
original: include(
width: eq(600),
@@ -122,6 +132,60 @@
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
@@ -137,10 +201,10 @@
it_behaves_like 'static 600x400 image', 'image/png', '.png'
end
- describe 'monochrome jpg' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('monochrome.png')) }
+ describe 'gif' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400.gif')) }
- it_behaves_like 'static 600x400 image', 'image/png', '.png'
+ it_behaves_like 'static 600x400 image', 'image/gif', '.gif'
end
describe 'webp' do
@@ -161,6 +225,12 @@
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) }
@@ -169,51 +239,15 @@
end
describe 'animated gif' do
- let(:media) { Fabricate(:media_attachment, file: attachment_fixture('avatar.gif')) }
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.gif')) }
- 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
+ it_behaves_like 'animated 600x400 image'
end
- 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 },
- ]
-
- 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
+ describe 'animated png' do
+ let(:media) { Fabricate(:media_attachment, file: attachment_fixture('600x400-animated.png')) }
+
+ it_behaves_like 'animated 600x400 image'
end
describe 'ogg with cover art' do
diff --git a/spec/models/mention_spec.rb b/spec/models/mention_spec.rb
index 3a9b9fddf2d3dd..67c22b5d1f9011 100644
--- a/spec/models/mention_spec.rb
+++ b/spec/models/mention_spec.rb
@@ -3,8 +3,14 @@
require 'rails_helper'
RSpec.describe Mention do
- describe 'validations' do
+ describe 'Associations' do
it { is_expected.to belong_to(:account).required }
it { is_expected.to belong_to(:status).required }
end
+
+ describe 'Validations' do
+ subject { Fabricate.build :mention }
+
+ it { is_expected.to validate_uniqueness_of(:account_id).scoped_to(:status_id) }
+ end
end
diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb
index e62b2e9094d661..0bee7dfed1dd81 100644
--- a/spec/models/report_spec.rb
+++ b/spec/models/report_spec.rb
@@ -105,25 +105,32 @@
describe 'history' do
subject(:action_logs) { report.history }
- let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id], created_at: 3.days.ago, updated_at: 1.day.ago) }
+ let(:report) { Fabricate(:report, target_account_id: target_account.id, status_ids: [status.id]) }
let(:target_account) { Fabricate(:account) }
let(:status) { Fabricate(:status) }
let(:account_warning) { Fabricate(:account_warning, report_id: report.id) }
- before do
- Fabricate(:action_log, target_type: 'Report', account_id: target_account.id, target_id: report.id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'Account', account_id: target_account.id, target_id: report.target_account_id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'Status', account_id: target_account.id, target_id: status.id, created_at: 2.days.ago)
- Fabricate(:action_log, target_type: 'AccountWarning', account_id: target_account.id, target_id: account_warning.id, created_at: 2.days.ago)
- end
+ let!(:matched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning', target_id: account_warning.id) }
+ let!(:matched_type_account) { Fabricate(:action_log, target_type: 'Account', target_id: report.target_account_id) }
+ let!(:matched_type_report) { Fabricate(:action_log, target_type: 'Report', target_id: report.id) }
+ let!(:matched_type_status) { Fabricate(:action_log, target_type: 'Status', target_id: status.id) }
+
+ let!(:unmatched_type_account_warning) { Fabricate(:action_log, target_type: 'AccountWarning') }
+ let!(:unmatched_type_account) { Fabricate(:action_log, target_type: 'Account') }
+ let!(:unmatched_type_report) { Fabricate(:action_log, target_type: 'Report') }
+ let!(:unmatched_type_status) { Fabricate(:action_log, target_type: 'Status') }
it 'returns expected logs' do
expect(action_logs)
.to have_attributes(count: 4)
- .and include(have_attributes(target_type: 'Account'))
- .and include(have_attributes(target_type: 'AccountWarning'))
- .and include(have_attributes(target_type: 'Report'))
- .and include(have_attributes(target_type: 'Status'))
+ .and include(matched_type_account_warning)
+ .and include(matched_type_account)
+ .and include(matched_type_report)
+ .and include(matched_type_status)
+ .and not_include(unmatched_type_account_warning)
+ .and not_include(unmatched_type_account)
+ .and not_include(unmatched_type_report)
+ .and not_include(unmatched_type_status)
end
end
@@ -149,13 +156,13 @@
end
end
- describe 'validations' do
+ describe 'Validations' do
let(:remote_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
it 'is invalid if comment is longer than character limit and reporter is local' do
- report = Fabricate.build(:report, comment: comment_over_limit)
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:comment)
+ report = Fabricate.build(:report)
+
+ expect(report).to_not allow_value(comment_over_limit).for(:comment)
end
it 'is valid if comment is longer than character limit and reporter is not local' do
@@ -164,16 +171,16 @@
end
it 'is invalid if it references invalid rules' do
- report = Fabricate.build(:report, category: :violation, rule_ids: [-1])
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:rule_ids)
+ report = Fabricate.build(:report, category: :violation)
+
+ expect(report).to_not allow_value([-1]).for(:rule_ids)
end
it 'is invalid if it references rules but category is not "violation"' do
rule = Fabricate(:rule)
- report = Fabricate.build(:report, category: :spam, rule_ids: rule.id)
- expect(report.valid?).to be false
- expect(report).to model_have_error_on_field(:rule_ids)
+ report = Fabricate.build(:report, category: :spam)
+
+ expect(report).to_not allow_value(rule.id).for(:rule_ids)
end
def comment_over_limit
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
index 18dd26be947668..a1cc6a064fc13f 100644
--- a/spec/models/tag_spec.rb
+++ b/spec/models/tag_spec.rb
@@ -5,7 +5,39 @@
RSpec.describe Tag do
include_examples 'Reviewable'
- describe 'validations' do
+ describe 'Validations' do
+ describe 'name' do
+ context 'with a new record' do
+ subject { Fabricate.build :tag, name: 'original' }
+
+ it { is_expected.to allow_value('changed').for(:name) }
+ end
+
+ context 'with an existing record' do
+ subject { Fabricate :tag, name: 'original' }
+
+ it { is_expected.to_not allow_value('changed').for(:name).with_message(previous_name_error_message) }
+ end
+ end
+
+ describe 'display_name' do
+ context 'with a new record' do
+ subject { Fabricate.build :tag, name: 'original', display_name: 'OriginalDisplayName' }
+
+ it { is_expected.to allow_value('ChangedDisplayName').for(:display_name) }
+ end
+
+ context 'with an existing record' do
+ subject { Fabricate :tag, name: 'original', display_name: 'OriginalDisplayName' }
+
+ it { is_expected.to_not allow_value('ChangedDisplayName').for(:display_name).with_message(previous_name_error_message) }
+ end
+ end
+
+ def previous_name_error_message
+ I18n.t('tags.does_not_match_previous_name')
+ end
+
it 'invalid with #' do
expect(described_class.new(name: '#hello_world')).to_not be_valid
end
diff --git a/spec/requests/api/v1/media_spec.rb b/spec/requests/api/v1/media_spec.rb
index d7d0b92f11bfb5..3340e26b986848 100644
--- a/spec/requests/api/v1/media_spec.rb
+++ b/spec/requests/api/v1/media_spec.rb
@@ -137,7 +137,7 @@
end
context 'with image/gif', :attachment_processing do
- let(:params) { { file: fixture_file_upload('attachment.gif', 'image/gif') } }
+ let(:params) { { file: fixture_file_upload('600x400.gif', 'image/gif') } }
it_behaves_like 'a successful media upload', 'image'
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 95b4d7dcd2a6b0..a69e1c2776cbf8 100644
--- a/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
+++ b/spec/serializers/rest/account_relationship_severance_event_serializer_spec.rb
@@ -5,7 +5,7 @@
RSpec.describe REST::AccountRelationshipSeveranceEventSerializer do
subject { serialized_record_json(record, described_class) }
- let(:record) { Fabricate.build :account_relationship_severance_event, id: 123 }
+ let(:record) { Fabricate.build :account_relationship_severance_event, id: 123, created_at: DateTime.new(2024, 11, 28, 16, 20, 0) }
describe 'serialization' do
it 'returns expected values' do
@@ -15,4 +15,10 @@
)
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
new file mode 100644
index 00000000000000..57f2b529c5615e
--- /dev/null
+++ b/spec/serializers/rest/account_serializer/field_serializer_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+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 }
+
+ 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
+ end
+ end
+end
diff --git a/spec/serializers/rest/account_serializer_spec.rb b/spec/serializers/rest/account_serializer_spec.rb
index 7daa0796a9c964..37c6a776b0f463 100644
--- a/spec/serializers/rest/account_serializer_spec.rb
+++ b/spec/serializers/rest/account_serializer_spec.rb
@@ -5,6 +5,7 @@
RSpec.describe REST::AccountSerializer do
subject { serialized_record_json(account, described_class) }
+ let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
let(:role) { Fabricate(:user_role, name: 'Role', highlighted: true) }
let(:user) { Fabricate(:user, role: role) }
let(:account) { user.account }
@@ -44,4 +45,24 @@
expect(subject['memorial']).to be true
end
end
+
+ context 'when created_at is populated' do
+ before do
+ account.account_stat.update!(created_at: default_datetime)
+ end
+
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['created_at']) }.to_not raise_error
+ end
+ end
+
+ context 'when last_status_at is populated' do
+ before do
+ account.account_stat.update!(last_status_at: default_datetime)
+ end
+
+ it 'is serialized as yyyy-mm-dd' do
+ expect(subject['last_status_at']).to eq('2024-11-28')
+ end
+ end
end
diff --git a/spec/serializers/rest/account_warning_serializer_spec.rb b/spec/serializers/rest/account_warning_serializer_spec.rb
index 0f335d12159f43..ea2e48fbb41d6e 100644
--- a/spec/serializers/rest/account_warning_serializer_spec.rb
+++ b/spec/serializers/rest/account_warning_serializer_spec.rb
@@ -14,6 +14,7 @@
'id' => be_a(String).and(eq('123')),
'status_ids' => be_a(Array).and(eq(['456', '789']))
)
+ 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 58f58a997b17c8..ac7cec0bae806d 100644
--- a/spec/serializers/rest/admin/account_serializer_spec.rb
+++ b/spec/serializers/rest/admin/account_serializer_spec.rb
@@ -5,6 +5,14 @@
RSpec.describe REST::Admin::AccountSerializer do
subject { serialized_record_json(record, described_class) }
+ context 'when created_at is populated' 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
+ end
+ end
+
describe 'created_by_application_id' do
context 'when account is application-created' do
let(:record) { Fabricate :account, user: Fabricate(:user, created_by_application: application) }
diff --git a/spec/serializers/rest/admin/cohort_serializer_spec.rb b/spec/serializers/rest/admin/cohort_serializer_spec.rb
index ed6067c0d21f07..a2bd8fbfa26632 100644
--- a/spec/serializers/rest/admin/cohort_serializer_spec.rb
+++ b/spec/serializers/rest/admin/cohort_serializer_spec.rb
@@ -14,6 +14,8 @@
'data' => be_a(Array),
'period' => /2024-01-01/
)
+ 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
new file mode 100644
index 00000000000000..39c013d31c0b98
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_allow_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::DomainAllowSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:domain_allow) }
+
+ 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/admin/domain_block_serializer_spec.rb b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
new file mode 100644
index 00000000000000..5ab3ddc169fade
--- /dev/null
+++ b/spec/serializers/rest/admin/domain_block_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::DomainBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:domain_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
+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
new file mode 100644
index 00000000000000..2a1501a158baa0
--- /dev/null
+++ b/spec/serializers/rest/admin/email_domain_block_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::EmailDomainBlockSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { Fabricate(:email_domain_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
+end
diff --git a/spec/serializers/rest/admin/ip_block_serializer_spec.rb b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
new file mode 100644
index 00000000000000..c1239b50577e10
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_block_serializer_spec.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+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
+ 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
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/ip_serializer_spec.rb b/spec/serializers/rest/admin/ip_serializer_spec.rb
new file mode 100644
index 00000000000000..f93eada7591ce6
--- /dev/null
+++ b/spec/serializers/rest/admin/ip_serializer_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::IpSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:record) { UserIp.new(used_at: 3.days.ago) }
+
+ context 'when used_at is populated' do
+ it 'parses as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['used_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/measure_serializer_spec.rb b/spec/serializers/rest/admin/measure_serializer_spec.rb
new file mode 100644
index 00000000000000..08c7170a4afbfd
--- /dev/null
+++ b/spec/serializers/rest/admin/measure_serializer_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::Admin::MeasureSerializer do
+ subject { serialized_record_json(record, described_class) }
+
+ let(:start_at) { 2.days.ago }
+ let(:end_at) { Time.now.utc }
+ let(:params) { ActionController::Parameters.new({ instance_accounts: [123] }) }
+ let(:record) { Admin::Metrics::Measure::ActiveUsersMeasure.new(start_at, end_at, params) }
+
+ 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 }
+ end
+ end
+end
diff --git a/spec/serializers/rest/admin/report_serializer_spec.rb b/spec/serializers/rest/admin/report_serializer_spec.rb
new file mode 100644
index 00000000000000..c0f841d6bf5b7e
--- /dev/null
+++ b/spec/serializers/rest/admin/report_serializer_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+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
+
+ it 'is serialized as RFC 3339 datetime' do
+ expect { DateTime.rfc3339(subject['action_taken_at']) }.to_not raise_error
+ end
+ end
+end
diff --git a/spec/serializers/rest/announcement_serializer_spec.rb b/spec/serializers/rest/announcement_serializer_spec.rb
new file mode 100644
index 00000000000000..6b746e5c2ffec4
--- /dev/null
+++ b/spec/serializers/rest/announcement_serializer_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe REST::AnnouncementSerializer do
+ subject do
+ serialized_record_json(
+ announcement,
+ described_class,
+ options: {
+ scope: current_user,
+ scope_name: :current_user,
+ }
+ )
+ end
+
+ let(:current_user) { Fabricate(:user) }
+ let(:announcement) { Fabricate(:announcement, starts_at: 10.days.ago, published_at: 10.days.ago, ends_at: 5.days.from_now) }
+
+ 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
+ end
+ end
+end
diff --git a/spec/serializers/rest/extended_description_serializer_spec.rb b/spec/serializers/rest/extended_description_serializer_spec.rb
index d7bd078e1d6f02..dc6e86e9091bf5 100644
--- a/spec/serializers/rest/extended_description_serializer_spec.rb
+++ b/spec/serializers/rest/extended_description_serializer_spec.rb
@@ -5,9 +5,11 @@
RSpec.describe REST::ExtendedDescriptionSerializer do
subject { serialized_record_json(record, described_class) }
+ let(:default_datetime) { DateTime.new(2024, 11, 28, 16, 20, 0) }
+
describe 'serialization' do
context 'with text present' do
- let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: Date.new(2024, 1, 1) }
+ let(:record) { ExtendedDescription.new text: 'Hello world', updated_at: default_datetime }
it 'returns expected values' do
expect(subject)
@@ -15,19 +17,19 @@
'content' => eq(<<~HTML),