ES_PRESET
i single_node_cluster
.
+ message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET
i single_node_cluster
.
elasticsearch_reset_chewy:
message_html: Mae eich mynegai system Elasticsearch wedi dyddio oherwydd newid gosodiad. Rhedwch chwiliad tootctl search deploy --reset-chewy
i'w ddiweddaru.
elasticsearch_running_check:
@@ -1062,7 +1063,7 @@ cy:
webhooks:
add_new: Ychwanegu diweddbwynt
delete: Dileu
- description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig .
+ description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig.
disable: Analluogi
disabled: Wedi'i analluogi
edit: Golygu diweddbwynt
@@ -1126,7 +1127,7 @@ cy:
created_msg: Wedi creu enw arall yn llwyddiannus. Gallwch nawr ddechrau symud o'r hen gyfrif.
deleted_msg: Wedi tynnu enw arall yn llwyddiannus. Ni fydd symud o'r cyfrif hynny i'r cyfrif hon yn bosib.
empty: Nid oes gennych enwau eraill.
- hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif .
+ hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif.
remove: Dadgysylltu'r enw arall
appearance:
advanced_web_interface: Rhyngwyneb gwe uwch
@@ -1367,7 +1368,7 @@ cy:
add_keyword: Ychwanegu allweddair
keywords: Allweddeiriau
statuses: Postiadau unigol
- statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd .
+ statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd.
title: Golygu hidlydd
errors:
deprecated_api_multiple_keywords: Nid oes modd newid y paramedrau hyn o'r cais hwn oherwydd eu bod yn berthnasol i fwy nag un allweddair hidlo. Defnyddiwch raglen fwy diweddar neu'r rhyngwyneb gwe.
@@ -1465,6 +1466,92 @@ cy:
merge_long: Cadw'r cofnodion presennol ac ychwanegu rhai newydd
overwrite: Trosysgrifio
overwrite_long: Amnewid y cofnodion cyfredol gyda'r rhai newydd
+ overwrite_preambles:
+ blocking_html:
+ few: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ one: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ zero: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{count} o gyfrifon o %{filename}.
+ bookmarks_html:
+ few: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ many: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ one: Rydych ar fin disodli eich nodau tudalen gyda hyd at %{count} postiad o %{filename}.
+ other: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ two: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ zero: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{count} postiadau gan %{filename}.
+ domain_blocking_html:
+ few: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ one: Rydych ar fin disodli eich rhestr blociau parth gyda hyd at %{count} parth o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}amnewid eich rhestr rhwystro parthau gyda hyd at %{count} parth o %{filename}.
+ following_html:
+ few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename} a rhoi'r gorau i ddilyn unrhyw un arall.
+ other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename} a pheidio â dilyn unrhyw un arall.
+ lists_html:
+ few: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ many: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ one: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ other: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ two: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ zero: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename}. Bydd hyd at %{count} cyfrif yn cael eu hychwanegu at restrau newydd.
+ muting_html:
+ few: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ many: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ one: Rydych ar fin disodli eich rhestr o gyfrifon wedi'u tewi am hyd at %{count} gyfrif o %{filename}.
+ other: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ two: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ zero: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{count} o gyfrifon o %{filename}.
+ preambles:
+ blocking_html:
+ few: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ many: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ one: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ other: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ two: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ zero: Rydych ar fin rhwystro hyd at %{count} cyfrif o %{filename}.
+ bookmarks_html:
+ few: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ many: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ one: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ other: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ two: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ zero: Rydych ar fin ychwanegu hyd at %{count} pbostiad o %{filename} at eich nodau tudalen.
+ domain_blocking_html:
+ few: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ many: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ one: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ other: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ two: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ zero: Rydych ar fin rhwystro hyd at %{count} parth o %{filename}.
+ following_html:
+ few: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ many: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ one: Rydych ar fin dilyn hyd at %{count} gyfrif o %{filename}.
+ other: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ two: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ zero: Rydych ar fin dilyn hyd at %{count} cyfrif gan %{filename}.
+ lists_html:
+ few: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ many: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ one: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ other: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ two: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ zero: Rydych ar fin ychwanegu hyd at %{count} cyfrif o %{filename} at eich rhestrau. Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
+ muting_html:
+ few: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ many: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ one: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ other: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ two: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
+ zero: Rydych ar fin tewi hyd at %{count} cyfrif o %{filename}.
preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
recent_imports: Mewnforion diweddar
states:
@@ -1547,7 +1634,7 @@ cy:
follow_request: e-byst ceisiadau dilyn
mention: e-byst hysbysu crybwylliadau
reblog: e-byst hysbysiadau hybu
- resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost .
+ resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost.
success_html: Ni fyddwch bellach yn derbyn %{type} ar gyfer Mastodon ar %{domain} i'ch e-bost am %{email}.
title: Dad-danysgrifio
media_attachments:
@@ -1569,7 +1656,7 @@ cy:
on_cooldown: Rydych ar amser allan
followers_count: Dilynwyr ar adeg y symud
incoming_migrations: Symud o gyfrif wahanol
- incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif .
+ incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif.
moved_msg: Mae eich cyfrif bellach yn ailgyfeirio i %{acct} ac mae eich dilynwyr yn cael eu symud drosodd.
not_redirecting: Nid yw eich cyfrif yn ailgyfeirio i unrhyw gyfrif arall ar hyn o bryd.
on_cooldown: Rydych chi wedi mudo'ch cyfrif yn ddiweddar. Bydd y swyddogaeth hon ar gael eto ymhen %{count} diwrnod.
@@ -1584,7 +1671,7 @@ cy:
cooldown: Ar ôl symud, bydd yna cyfnod aros na fydd modd i chi symud eto
disabled_account: Ni fydd modd defnyddio'ch cyfrif cyfredol yn llawn wedyn. Fodd bynnag, bydd gennych fynediad i allforio data yn ogystal ag ail agor.
followers: Bydd y weithred hon yn symud yr holl ddilynwyr o'r cyfrif cyfredol i'r cyfrif newydd
- only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil .
+ only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil.
other_data: Ni fydd unrhyw data arall yn cael ei symud yn awtomatig
redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau
moderation:
diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml
index 43aef271f9ba14..88514ab5e2824f 100644
--- a/config/locales/devise.eo.yml
+++ b/config/locales/devise.eo.yml
@@ -6,7 +6,7 @@ eo:
send_instructions: Vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon.
send_paranoid_instructions: Se via retadreso ekzistas en nia datumbazo, vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon.
failure:
- already_authenticated: Vi jam salutis.
+ already_authenticated: Vi jam ensalutis.
inactive: Via konto ankoraŭ ne estas konfirmita.
invalid: Nevalida %{authentication_keys} aŭ pasvorto.
last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita.
diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml
index c9c831f7f5bf77..3df18d6f7a4978 100644
--- a/config/locales/doorkeeper.ast.yml
+++ b/config/locales/doorkeeper.ast.yml
@@ -50,7 +50,9 @@ ast:
confirmations:
revoke: "¿De xuru que quies facer esta aición?"
index:
+ authorized_at: 'Data d''autorización: %{date}'
description_html: Estes son les aplicaciones que puen acceder a la cuenta cola API. Si equí hai aplicaciones que nun conoces o hai dalguna aplicación que nun funciona correutamente, pues revocar el so accesu.
+ last_used_at: 'Últimu usu: %{date}'
never_used: Enxamás s'usó
scopes: Permisos
title: Les aplicaciones qu'autoricesti
diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml
index e119d71f4e7028..eaf1bf69fb7673 100644
--- a/config/locales/doorkeeper.es-MX.yml
+++ b/config/locales/doorkeeper.es-MX.yml
@@ -60,7 +60,7 @@ es-MX:
error:
title: Ha ocurrido un error
new:
- prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente.
+ prompt_html: "%{client_name} desea obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solamente si reconoces y confías en esta fuente."
review_permissions: Revisar permisos
title: Se requiere autorización
show:
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
index ebfaf5c710d509..fb135b1f96cf3b 100644
--- a/config/locales/doorkeeper.et.yml
+++ b/config/locales/doorkeeper.et.yml
@@ -60,6 +60,7 @@ et:
error:
title: Ilmnes viga
new:
+ prompt_html: "%{client_name} soovib saada ligipääsu su kontole. Kinnita see taotlus ainult siis, kui sa tunned ja usaldad seda allikat."
review_permissions: Lubade ülevaade
title: Autoriseerimine vajalik
show:
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
index 4ff03950b55f80..8e2bc864a27cd2 100644
--- a/config/locales/doorkeeper.fa.yml
+++ b/config/locales/doorkeeper.fa.yml
@@ -130,7 +130,7 @@ fa:
favourites: برگزیدهها
filters: پالایهها
follow: پیگیری، خموشی و مسدودیها
- follows: پیگرفتگان
+ follows: پیگرفتنها
lists: سیاههها
media: پیوستهای رسانهای
mutes: خموشها
diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml
index 05f2415eea537a..1fabd1b55f3f13 100644
--- a/config/locales/doorkeeper.is.yml
+++ b/config/locales/doorkeeper.is.yml
@@ -60,6 +60,7 @@ is:
error:
title: Villa kom upp
new:
+ prompt_html: "%{client_name} vill fá heimild til að skoða aðganginn þinn. Ekki samþykkja þessa beiðni nema þú þekkir og treystir viðkomandi."
review_permissions: Yfirfara heimildir
title: Auðkenning er nauðsynleg
show:
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index 7cfddf50a16c65..d44451c74630ce 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -60,6 +60,7 @@ ja:
error:
title: エラーが発生しました
new:
+ prompt_html: "%{client_name} があなたのアカウントにアクセスするための許可を求めています。このリクエストを承認するのは、信頼できる相手であると認識している場合のみです。"
review_permissions: アクセス許可を確認
title: 認証が必要です
show:
diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml
index 9f646fd3e4b454..ca8271ebf1c5d1 100644
--- a/config/locales/doorkeeper.sv.yml
+++ b/config/locales/doorkeeper.sv.yml
@@ -60,6 +60,7 @@ sv:
error:
title: Ett fel har uppstått
new:
+ prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Godkänn bara denna begäran om du känner igen och litar på källan."
review_permissions: Granska behörigheter
title: Godkännande krävs
show:
@@ -132,7 +133,7 @@ sv:
follow: Följare, mjutade och blockerade
follows: Följer
lists: Listor
- media: Mediabilagor
+ media: Mediebilagor
mutes: Tystade användare
notifications: Aviseringar
profile: Din Mastodon-profil
diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml
index 6687c0339d3388..2219599c57653d 100644
--- a/config/locales/doorkeeper.vi.yml
+++ b/config/locales/doorkeeper.vi.yml
@@ -150,30 +150,30 @@ vi:
title: Đăng nhập bằng OAuth
scopes:
admin:read: đọc mọi dữ liệu trên máy chủ
- admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản
- admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả khối email chuẩn
- admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép
- admin:read:domain_blocks: đọc thông tin nhạy cảm của tất cả các tên miền chặn
- admin:read:email_domain_blocks: đọc thông tin nhạy cảm của tất cả các miền email chặn
- admin:read:ip_blocks: đọc thông tin nhạy cảm của tất cả các IP chặn
+ admin:read:accounts: đọc thông tin nhạy cảm của mọi tài khoản
+ admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của mọi khối email biến thể
+ admin:read:domain_allows: đọc thông tin nhạy cảm của mọi máy chủ liên hợp
+ admin:read:domain_blocks: đọc thông tin nhạy cảm của mọi máy chủ chặn
+ admin:read:email_domain_blocks: đọc thông tin nhạy cảm của mọi tên miền email chặn
+ admin:read:ip_blocks: đọc thông tin nhạy cảm của mọi IP chặn
admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo
admin:write: sửa đổi tất cả dữ liệu trên máy chủ
admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản
- admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email
+ admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email biến thể
admin:write:domain_allows: áp đặt kiểm duyệt đối với các email cho phép
admin:write:domain_blocks: áp đặt kiểm duyệt đối với các tên miền chặn
admin:write:email_domain_blocks: áp đặt kiểm duyệt đối với các tên miền email chặn
admin:write:ip_blocks: áp đặt kiểm duyệt với các IP chặn
admin:write:reports: áp đặt kiểm duyệt với các báo cáo
crypto: dùng mã hóa đầu cuối
- follow: sửa đổi các mối quan hệ tài khoản
- profile: chỉ đọc thông tin tài khoản cơ bản
+ follow: sửa đổi các mối quan hệ
+ profile: chỉ xem thông tin tài khoản cơ bản
push: nhận thông báo đẩy
read: đọc mọi dữ liệu tài khoản
read:accounts: xem thông tin tài khoản
read:blocks: xem những người đã chặn
read:bookmarks: xem tút đã lưu
- read:favourites: xem lượt thích
+ read:favourites: xem tút đã thích
read:filters: xem bộ lọc
read:follows: xem những người theo dõi
read:lists: xem danh sách
@@ -182,7 +182,7 @@ vi:
read:reports: xem báo cáo của bạn
read:search: tìm kiếm
read:statuses: xem toàn bộ tút
- write: sửa đổi mọi dữ liệu tài khoản của bạn
+ write: sửa đổi mọi dữ liệu tài khoản
write:accounts: sửa đổi trang hồ sơ
write:blocks: chặn người và máy chủ
write:bookmarks: sửa đổi những tút lưu
@@ -194,5 +194,5 @@ vi:
write:media: tải lên tập tin
write:mutes: ẩn người và thảo luận
write:notifications: xóa thông báo
- write:reports: báo cáo người khác
+ write:reports: báo cáo
write:statuses: đăng tút
diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml
index 46253d01b3f57c..08f9885894d0d3 100644
--- a/config/locales/doorkeeper.zh-CN.yml
+++ b/config/locales/doorkeeper.zh-CN.yml
@@ -167,7 +167,7 @@ zh-CN:
admin:write:reports: 对举报执行管理操作
crypto: 使用端到端加密
follow: 关注或屏蔽用户
- profile: 仅读取你账户中的个人资料信息
+ profile: 仅读取你账号的个人资料信息
push: 接收你的账户的推送通知
read: 读取你的账户数据
read:accounts: 查看账号信息
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 57ad9bc7d9042a..645c13a43e88ff 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1170,9 +1170,11 @@ en:
use_security_key: Use security key
author_attribution:
example_title: Sample text
- hint_html: Control how you're credited when links are shared on Mastodon.
+ hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon.
+ instructions: 'Make sure this code is in your article''s HTML:'
more_from_html: More from %{name}
s_blog: "%{name}'s Blog"
+ then_instructions: Then, add the domain name of the publication in the field below.
title: Author attribution
challenge:
confirm: Continue
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 1e683b1725087c..9a3ba24562f250 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -19,7 +19,7 @@ eo:
following: Vi devas sekvi la homon, kiun vi volas proponi
posts:
one: Afiŝo
- other: Mesaĝoj
+ other: Afiŝoj
posts_tab_heading: Afiŝoj
self_follow_error: Sekvi vian propran konton ne estas permesita
admin:
@@ -61,6 +61,7 @@ eo:
demote: Degradi
destroyed_msg: Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ
disable: Frostigi
+ disable_sign_in_token_auth: Malebligu retpoŝtan ĵeton-aŭtentikigon
disable_two_factor_authentication: Malŝalti 2FA-n
disabled: Frostigita
display_name: Montrata nomo
@@ -69,6 +70,7 @@ eo:
email: Retpoŝto
email_status: Stato de retpoŝto
enable: Malfrostigi
+ enable_sign_in_token_auth: Ebligu retpoŝtan ĵeton-aŭtentikigon
enabled: Ebligita
enabled_msg: Sukcese malfrostigis konton de %{username}
followers: Sekvantoj
@@ -81,8 +83,8 @@ eo:
joined: Aliĝis
location:
all: Ĉiuj
- local: Lokaj
- remote: Foraj
+ local: Loka
+ remote: Fora
title: Loko
login_status: Ensaluta stato
media_attachments: Plurmediaj aldonaĵoj
@@ -133,6 +135,7 @@ eo:
resubscribe: Reaboni
role: Rolo
search: Serĉi
+ search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno
search_same_ip: Aliaj uzantoj kun la sama IP
security: Sekureco
security_measures:
@@ -173,21 +176,26 @@ eo:
approve_appeal: Aprobis Apelacion
approve_user: Aprobi Uzanton
assigned_to_self_report: Atribui Raporton
+ change_email_user: Ŝanĝu retpoŝton por uzanto
change_role_user: Ŝanĝi Rolon de Uzanton
confirm_user: Konfirmi uzanton
create_account_warning: Krei averton
create_announcement: Krei Anoncon
+ create_canonical_email_block: Krei retpoŝtan blokon
create_custom_emoji: Krei Propran Emoĝion
create_domain_allow: Krei Domajnan Permeson
create_domain_block: Krei Blokadon De Domajno
+ create_email_domain_block: Krei retpoŝtan domajnan blokon
create_ip_block: Krei IP-regulon
create_unavailable_domain: Krei Nehaveblan Domajnon
create_user_role: Krei Rolon
demote_user: Malpromocii Uzanton
destroy_announcement: Forigi Anoncon
+ destroy_canonical_email_block: Forigi retpoŝtan blokon
destroy_custom_emoji: Forigi Propran Emoĝion
destroy_domain_allow: Forigi Domajnan Permeson
destroy_domain_block: Forigi blokadon de domajno
+ destroy_email_domain_block: Forigi retpoŝtan domajnan blokon
destroy_instance: Forigi Domajnon
destroy_ip_block: Forigi IP-regulon
destroy_status: Forigi Afiŝon
@@ -431,6 +439,7 @@ eo:
title: Bloki novan retpoŝtan domajnon
not_permitted: Ne permesita
resolved_through_html: Solvis tra %{domain}
+ title: Blokis retpoŝtajn domajnojn
export_domain_allows:
new:
title: Importi domajnpermesojn
@@ -583,6 +592,9 @@ eo:
actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon.
actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi
add_to_report: Aldoni pli al raporto
+ already_suspended_badges:
+ local: Jam malakceptita sur ĉi tiu servilo
+ remote: Jam malakceptita sur ilia servilo
are_you_sure: Ĉu vi certas?
assign_to_self: Asigni al mi
assigned: Asignita kontrolanto
@@ -731,6 +743,7 @@ eo:
desc_html: Ĉi tio dependas de eksteraj hCaptcha-skriptoj, kiuj povas esti problemo pri sekureco kaj privateco. Ankaŭ, ĝi povas igi la registran procezon multe malpli alirebla por iuj homoj (precipe homoj kun handikapoj). Pro ĉi tiuj kialoj, bonvolu konsideri alternativajn rimedojn kiel registradon per aprobo aŭ per invito.
title: Postuli novajn uzantojn solvi CAPTCHA por konfirmi sian konton
content_retention:
+ danger_zone: Danĝera zono
preamble: Regi kiel uzantogenerita enhavo konservitis en Mastodon.
title: Enhavkonservo
default_noindex:
@@ -828,9 +841,11 @@ eo:
sidekiq_process_check:
message_html: Neniu Sidekiq-procezo por la %{value} vico
software_version_check:
+ action: Vidi disponeblajn ĝisdatigojn
message_html: Mastodon-ĝisdatigo disponeblas.
software_version_critical_check:
action: Vidi disponeblajn ĝisdatigojn
+ message_html: Grava ĝisdatigo de Mastodon disponeblas, bonvolu ĝisdatigi kiel eble plej rapide.
software_version_patch_check:
action: Vidi disponeblajn ĝisdatigojn
upload_check_privacy_error:
@@ -845,6 +860,8 @@ eo:
name: Nomo
newest: Plej novaj
oldest: Plej malnovaj
+ open: Vidu publike
+ reset: Restartigi
review: La statuso de la recenzo
search: Serĉi
title: Kradvortoj
@@ -860,7 +877,9 @@ eo:
allow: Permesi ligilon
allow_provider: Permesi publikiganto
confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn?
+ confirm_allow_provider: Ĉu vi certas, ke vi volas permesi elektitajn provizantojn?
confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn?
+ confirm_disallow_provider: Ĉu vi certas, ke vi volas malpermesi elektitajn provizantojn?
description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton.
disallow: Malpermesi ligilon
disallow_provider: Malpermesi publikiganton
@@ -918,6 +937,7 @@ eo:
used_by_over_week:
one: Uzita de 1 persono ekde lasta semajno
other: Uzita de %{count} personoj ekde lasta semajno
+ title: Rekomendoj kaj Tendencoj
trending: Popularaĵoj
warning_presets:
add_new: Aldoni novan
@@ -1063,6 +1083,7 @@ eo:
set_new_password: Elekti novan pasvorton
setup:
link_not_received: Ĉu vi ne ricevis ligilon?
+ new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj!
title: Kontrolu vian retpoŝta enirkesto
sign_in:
preamble_html: Ensalutu per via detaloj de %{domain}. Se via konto gastigantigas sur malsama servilo, vi ne povas ensaluti ĉi tie.
@@ -1281,6 +1302,7 @@ eo:
states:
finished: Finita
in_progress: Farata
+ scheduled: Planitaj
unconfirmed: Nekonfirmita
status: Stato
success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite
@@ -1476,6 +1498,8 @@ eo:
errors:
limit_reached: Limito de malsamaj reagoj atinginta
unrecognized_emoji: ne estas rekonita emoĝio
+ redirects:
+ prompt: Se vi fidas ĉi tiun ligon, alklaku ĝin por daŭrigi.
relationships:
activity: Konta aktiveco
confirm_follow_selected_followers: Ĉu vi certas ke vi volas sekvi la elektitajn sekvantojn?
@@ -1570,10 +1594,12 @@ eo:
delete: Konta forigo
development: Evoluigado
edit_profile: Redakti profilon
+ export: Eksporti
featured_tags: Elstarigitaj kradvortoj
import: Enporti
import_and_export: Importi kaj eksporti
migrate: Konta migrado
+ notifications: Retpoŝtaj sciigoj
preferences: Preferoj
profile: Profilo
relationships: Sekvatoj kaj sekvantoj
@@ -1582,6 +1608,9 @@ eo:
two_factor_authentication: Dufaktora aŭtentigo
webauthn_authentication: Sekurecaj ŝlosiloj
severed_relationships:
+ download: Elŝuti (%{count})
+ event_type:
+ user_domain_block: Vi blokis %{target_name}
lost_followers: Perditaj sekvantoj
type: Evento
statuses:
@@ -1750,11 +1779,17 @@ eo:
explanation: Jen kelkaj konsiloj por helpi vin komenci
feature_action: Lerni pli
follow_action: Sekvi
+ hashtags_recent_count:
+ one: "%{people} homo en la pasintaj 2 tagoj"
+ other: "%{people} homoj en la pasintaj 2 tagoj"
hashtags_title: Popularaj kradvortoj
hashtags_view_more: Vidi pli da popularaj kradvortoj
+ post_action: Redakti
post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj.
post_title: Faru vian unuan afiŝon
+ share_action: Kundividi
share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon.
+ share_title: Kunhavigu vian Mastodon-profilon
sign_in_action: Ensaluti
subject: Bonvenon en Mastodon
title: Bonvenon, %{name}!
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 2c18465a26af53..5b44ed85d639a9 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -241,7 +241,7 @@ es-MX:
confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}"
create_account_warning_html: "%{name} envió una advertencia a %{target}"
create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}"
- create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}"
+ create_canonical_email_block_html: "%{name} ha bloqueado el correo electrónico con el hash %{target}"
create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}"
create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}"
create_domain_block_html: "%{name} bloqueó el dominio %{target}"
@@ -251,7 +251,7 @@ es-MX:
create_user_role_html: "%{name} creó el rol %{target}"
demote_user_html: "%{name} degradó al usuario %{target}"
destroy_announcement_html: "%{name} eliminó el anuncio %{target}"
- destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}"
+ destroy_canonical_email_block_html: "%{name} ha desbloqueado el correo electrónico con el hash %{target}"
destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}"
destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}"
destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}"
@@ -263,10 +263,10 @@ es-MX:
destroy_user_role_html: "%{name} eliminó el rol %{target}"
disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}"
disable_custom_emoji_html: "%{name} desactivó el emoji %{target}"
- disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} desactivó la autenticación por token de correo electrónico para %{target}"
disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}"
enable_custom_emoji_html: "%{name} activó el emoji %{target}"
- enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} activó autenticación por token de correo electrónico para %{target}"
enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}"
memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam"
promote_user_html: "%{name} promoción al usuario %{target}"
@@ -274,7 +274,7 @@ es-MX:
reject_user_html: "%{name} rechazó el registro de %{target}"
remove_avatar_user_html: "%{name} eliminó el avatar de %{target}"
reopen_report_html: "%{name} reabrió el informe %{target}"
- resend_user_html: "%{name} ha reenviado el correo de confirmación para %{target}"
+ resend_user_html: "%{name} reenvió correo electrónico de confirmación para %{target}"
reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}"
resolve_report_html: "%{name} resolvió el informe %{target}"
sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible"
@@ -605,7 +605,7 @@ es-MX:
suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta.
actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam.
actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido.
- actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar
+ actions_no_posts: Este informe no tiene ninguna publicación asociada para eliminar
add_to_report: Añadir más al reporte
already_suspended_badges:
local: Ya suspendido en este servidor
@@ -802,7 +802,7 @@ es-MX:
destroyed_msg: "¡Carga del sitio eliminada con éxito!"
software_updates:
critical_update: Crítico — por favor actualiza rápidamente
- description: Se recomienda mantener actualizada tu instalación de Mastodon para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon de manera oportuna para evitar problemas de seguridad. Por estas razones, Mastodon comprueba si hay actualizaciones cada 30 minutos, y te notificará de acuerdo a tus preferencias de notificación por correo electrónico.
+ description: Se recomienda mantener tu instalación de Mastodon actualizada para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon a tiempo para evitar problemas de seguridad. Por estas razones, Mastodon busca actualizaciones cada 30 minutos, y le notificará de acuerdo a sus preferencias de notificación por correo electrónico.
documentation_link: Saber más
release_notes: Notas de la versión
title: Actualizaciones disponibles
@@ -1557,9 +1557,9 @@ es-MX:
poll:
subject: Una encuesta de %{name} ha terminado
reblog:
- body: "%{name} ha retooteado tu estado:"
- subject: "%{name} ha retooteado tu estado"
- title: Nueva difusión
+ body: 'Tu publicación fue impulsada por %{name}:'
+ subject: "%{name} ha impulsado tu publicación"
+ title: Nuevo impulso
status:
subject: "%{name} acaba de publicar"
update:
@@ -1771,7 +1771,7 @@ es-MX:
direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse
limit: Ya has fijado el número máximo de publicaciones
ownership: El toot de alguien más no puede fijarse
- reblog: Un boost no puede fijarse
+ reblog: No se puede fijar una publicación impulsada
title: "%{name}: «%{quote}»"
visibilities:
direct: Directa
@@ -1787,9 +1787,9 @@ es-MX:
exceptions: Excepciones
explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado.
ignore_favs: Ignorar favoritos
- ignore_reblogs: Ignorar reblogueos
+ ignore_reblogs: Ignorar impulsos
interaction_exceptions: Excepciones basadas en interacciones
- interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento.
+ interaction_exceptions_explanation: Ten en cuenta que no se garantiza la eliminación de las publicaciones si bajan del umbral de favoritos o de impulso después de haberlos superado una vez.
keep_direct: Mantener mensajes directos
keep_direct_hint: No elimina ninguno de tus mensajes directos
keep_media: Mantener publicaciones con multimedia adjunto
@@ -1814,7 +1814,7 @@ es-MX:
min_age_label: Umbral de tiempo
min_favs: Mantener mensajes con un número de favoritos mayor que
min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos
- min_reblogs: Mantener publicaciones reblogueadas más de
+ min_reblogs: Mantener publicaciones impulsadas más de
min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos
stream_entries:
sensitive_content: Contenido sensible
@@ -1922,7 +1922,7 @@ es-MX:
checklist_subtitle: 'Comencemos en esta nueva frontera social:'
checklist_title: Lista de bienvenida
edit_profile_action: Personalizar
- edit_profile_step: Aumenta tus interacciones con un perfil completo.
+ edit_profile_step: Aumenta tus interacciones completando tu perfil.
edit_profile_title: Personaliza tu perfil
explanation: Aquí hay algunos consejos para empezar
feature_action: Leer más
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 4372a92843161a..4d231ae764e63c 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -21,6 +21,7 @@ et:
one: Postitus
other: Postitused
posts_tab_heading: Postitused
+ self_follow_error: Omaenda konto jälgimine ei ole lubatud
admin:
account_actions:
action: Täida tegevus
@@ -875,6 +876,9 @@ et:
message_html: Serverireegleid pole defineeritud.
sidekiq_process_check:
message_html: Ühtegi Sidekiq protsessi pole %{value} järjekorra jaoks. Sidekiq seadistus vajab üle vaatamist
+ software_version_check:
+ action: Vaata saadaval uuendusi
+ message_html: Mastodoni uuendus on saadaval.
software_version_critical_check:
action: Vaata saadaolevaid uuendusi
message_html: Saadaval on Mastodoni kriitiline uuendus, uuenda nii kiiresti kui võimalik.
@@ -1362,6 +1366,44 @@ et:
merge_long: Hoia olemasolevad andmed ja lisa uusi
overwrite: Kirjuta üle
overwrite_long: Vaheta praegused andmed uute vastu
+ overwrite_preambles:
+ blocking_html:
+ one: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} konto.
+ other: Oled asendamas oma blokeeringute loetelu faili %{filename} sisuga, milles on kuni %{count} kontot.
+ bookmarks_html:
+ one: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitus.
+ other: Oled asendamas oma järjehoidjad faili %{filename} sisuga, milles on kuni %{count} postitust.
+ domain_blocking_html:
+ one: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen.
+ other: Oled asendamas oma domeenide blokeeringu loetelu faili %{filename} sisuga, milles on kuni %{count} domeen.
+ following_html:
+ one: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise.
+ other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename} ja lõpetad kõigi teiste jälgimise.
+ lists_html:
+ one: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} konto.
+ other: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{count} kontot.
+ muting_html:
+ one: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} konto.
+ other: Oled asendamas oma vaigistatud kontode loetelu faili %{filename} sisuga, milles on kuni %{count} kontot.
+ preambles:
+ blocking_html:
+ one: Oled blokeerimas kuni %{count} konto failist %{filename}.
+ other: Oled blokeerimas kuni %{count} kontot failist %{filename}.
+ bookmarks_html:
+ one: Oled lisamas kuni %{count} postituse failist %{filename} oma järjehoidjatesse.
+ other: Oled lisamas kuni %{count} postitust failist %{filename} oma järjehoidjatesse.
+ domain_blocking_html:
+ one: Oled blokeerimas kuni %{count} domeeni failist %{filename}.
+ other: Oled blokeerimas kuni %{count} domeeni failist %{filename}.
+ following_html:
+ one: Oled jälgima hakkamas kuni %{count} konto failist %{filename}.
+ other: Oled jälgima hakkamas kuni %{count} kontot failist %{filename}.
+ lists_html:
+ one: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} konto. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud.
+ other: Oled lisamas oma loeteludesse failist %{filename} kuni %{count} kontot. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud.
+ muting_html:
+ one: Oled vaigistamas kuni %{count} konto failist %{filename}.
+ other: Oled vaigistamas kuni %{count} kontot failist %{filename}.
preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid.
recent_imports: Viimati imporditud
states:
@@ -1678,6 +1720,7 @@ et:
delete: Konto kustutamine
development: Arendus
edit_profile: Muuda profiili
+ export: Eksport
featured_tags: Esile toodud sildid
import: Impordi
import_and_export: Import / eksport
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index e7d932de113a84..fbfd78b6d4261d 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -961,8 +961,10 @@ fa:
use_security_key: استفاده از کلید امنیتی
author_attribution:
example_title: متن نمونه
+ hint_html: واپایش چگونگی اعتبار دادن به شما هنگام همرسانی پیوندها روی ماستودون.
more_from_html: بیشتر از %{name}
s_blog: بلاگ %{name}
+ title: اعتباردهی به نگارنده
challenge:
confirm: ادامه
hint_html: "نکته: ما در یک ساعت آینده گذرواژهتان را از شما نخواهیم پرسید."
@@ -1294,6 +1296,7 @@ fa:
update:
subject: "%{name} فرستهای را ویرایست"
notifications:
+ email_events: رویدادها برای آگاهیهای رایانامهای
email_events_hint: 'گزینش رویدادهایی که میخواهید برایشان آگاهی دریافت کنید:'
number:
human:
@@ -1338,6 +1341,7 @@ fa:
privacy:
hint_html: "شخصیسازی چگونگی پیدا شدن فرستهها و نمایهتان. ویژگیهای متعدّدی در ماستودون میتوانند هنگام به کار افتادن در رسیدن به مخاطبینی گستردهتر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند."
privacy: محرمانگی
+ privacy_hint_html: واپایش میزان باز شدن به نفع دیگران. افراد نمایههای جالب و کارههای باحال را با مرور پیگرفتگان دیگران و دیدن کارههایی که از آنها میفرستند پیدا میکنند. با این حال شاید بخواهید پنهان نگهشان دارید.
reach: دسترسی
reach_hint_html: واپایش این که میخواهید به دست افراد جدید قابل کشف و پیگیری باشید یا نه. میخواهید فرستههایتان روی صفحهٔ کشف ظاهر شوند؟ میخواهید دیگر افراد در پیشنهادهای پیگیریشان ببینندتان؟ میخواهید پیگیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟
search: جستوجو
@@ -1438,6 +1442,7 @@ fa:
delete: پاککردن حساب
development: فرابری
edit_profile: ویرایش نمایه
+ export: برونریزی
featured_tags: برچسبهای برگزیده
import: درونریزی
import_and_export: درونریزی و برونبری
@@ -1446,12 +1451,21 @@ fa:
preferences: ترجیحات
profile: نمایه
relationships: پیگیریها و پیگیران
+ severed_relationships: ارتباطهای قطع شده
statuses_cleanup: حذف فرستهٔ خودکار
strikes: شکایتهای مدیریتی
two_factor_authentication: ورود دومرحلهای
webauthn_authentication: کلیدهای امنیتی
severed_relationships:
download: بارگیری (%{count})
+ event_type:
+ account_suspension: تعلیق حساب (%{target_name})
+ domain_block: تعلیق کارساز (%{target_name})
+ user_domain_block: "%{target_name} را مسدود کردید"
+ lost_followers: پیگیرندگان از دست رفته
+ lost_follows: پیگرفتهّای از دست رفته
+ preamble: وقتی دامنهای را مسدود کرده یا ناظرانتان تصمیم به تعلیق کارسازی دوردست میگیرند، ممکن است پیگیران و پیگرفتههایتان را از دست بدهید. با این حال قادرید سیاهههایی از ارتباطهای قطع شده را برای بررسی و درونریزی احتمالی روی کارسازی دیگر بار بگیرید.
+ purged: اطّلاعات دربارهٔ این کارساز به دست مدیران کارسازتان پاک سازی شده.
type: رویداد
statuses:
attached:
@@ -1535,6 +1549,7 @@ fa:
contrast: ماستودون (سایهروشن بالا)
default: ماستودون (تیره)
mastodon-light: ماستودون (روشن)
+ system: خودکار (استفاده از زمینهٔ سامانه)
time:
formats:
default: "%d %b %Y, %H:%M"
@@ -1616,6 +1631,7 @@ fa:
instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینههای اضافی روی نمایهتان افزوده و تغییرات را ذخیره کنید.
verification: تأیید
verified_links: "پیوندهای تأییدشده شما"
+ website_verification: تأیید پایگاه وب
webauthn_credentials:
add: افزودن کلید امنیتی
create:
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 01463edacb4603..eea31e9fbfb862 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -21,6 +21,7 @@ fr-CA:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Il n'est pas possible de suivre votre propre compte
admin:
account_actions:
action: Effectuer l'action
@@ -1368,6 +1369,44 @@ fr-CA:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
+ overwrite_preambles:
+ blocking_html:
+ one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}.
+ other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}.
+ domain_blocking_html:
+ one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ lists_html:
+ one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes.
+ other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes.
+ muting_html:
+ one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}.
+ preambles:
+ blocking_html:
+ one: Vous allez bloquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez ajouter près de %{count} message de %{filename} à vos signets.
+ other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets.
+ domain_blocking_html:
+ one: Vous allez bloquer près de %{count} domaine tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre près de %{count} compte tiré de %{filename}.
+ other: Vous allez suivre près de %{count} comptes tirés de %{filename}.
+ lists_html:
+ one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ muting_html:
+ one: Vous allez masquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez masquer près de %{count} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Importations récentes
states:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index c3ce66c3976817..cbe0ae040778c3 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -21,6 +21,7 @@ fr:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Il n'est pas possible de suivre votre propre compte
admin:
account_actions:
action: Effectuer l'action
@@ -1368,6 +1369,44 @@ fr:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
+ overwrite_preambles:
+ blocking_html:
+ one: Vous allez remplacer votre liste de blocage par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage par près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez remplacer vos signets par près de %{count} post tiré de %{filename}.
+ other: Vous allez remplacer vos signets par près de %{count} posts tirés de %{filename}.
+ domain_blocking_html:
+ one: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaine tiré de %{filename}.
+ other: Vous allez remplacer votre liste de blocage de domaines par près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre jusqu’à %{count} compte depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ other: Vous allez suivre jusqu’à %{count} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
+ lists_html:
+ one: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} compte sera ajouté à de nouvelles listes.
+ other: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{count} comptes seront ajoutés à de nouvelles listes.
+ muting_html:
+ one: Vous allez remplacer votre liste de comptes masqués par près de %{count} compte tiré de %{filename}.
+ other: Vous allez remplacer votre liste de comptes masqués par près de %{count} comptes tirés de %{filename}.
+ preambles:
+ blocking_html:
+ one: Vous allez bloquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} comptes tirés de %{filename}.
+ bookmarks_html:
+ one: Vous allez ajouter près de %{count} message de %{filename} à vos signets.
+ other: Vous allez ajouter près de %{count} messages de %{filename} à vos signets.
+ domain_blocking_html:
+ one: Vous allez bloquer près de %{count} domaine tiré de %{filename}.
+ other: Vous allez bloquer près de %{count} domaines tirés de %{filename}.
+ following_html:
+ one: Vous allez suivre près de %{count} compte tiré de %{filename}.
+ other: Vous allez suivre près de %{count} comptes tirés de %{filename}.
+ lists_html:
+ one: Vous allez ajouter près de %{count} compte depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ other: Vous allez ajouter près de %{count} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
+ muting_html:
+ one: Vous allez masquer près de %{count} compte tiré de %{filename}.
+ other: Vous allez masquer près de %{count} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Récents imports
states:
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index a201b733258f47..83ac6ce910f78c 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -27,6 +27,7 @@ ga:
other: Postálacha
two: Postálacha
posts_tab_heading: Postálacha
+ self_follow_error: Ní cheadaítear do chuntas féin a leanúint
admin:
account_actions:
action: Déan gníomh
@@ -1440,6 +1441,80 @@ ga:
merge_long: Coinnigh taifid atá ann cheana féin agus cuir cinn nua leis
overwrite: Forscríobh
overwrite_long: Cuir na cinn nua in ionad na dtaifead reatha
+ overwrite_preambles:
+ blocking_html:
+ few: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí do liosta bloc a chur in ionad suas le %{count} cuntais ó %{filename}.
+ bookmarks_html:
+ few: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ many: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ one: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ other: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ two: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{count} postáil ó %{filename}.
+ domain_blocking_html:
+ few: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ many: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ one: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ other: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ two: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{count} fearainn ó %{filename}.
+ following_html:
+ few: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ many: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ one: Tá tú ar tí leanúint suas go dtí %{count} chuntais ó %{filename} agus stop a leanúint aon duine eile.
+ other: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ two: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename} agus stop ag leanúint aon duine eile.
+ lists_html:
+ few: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ many: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ one: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntas le liostaí nua.
+ other: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ two: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{count} cuntais le liostaí nua.
+ muting_html:
+ few: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí do liosta cuntais balbhaithe a chur in ionad suas le %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{count} cuntais ó %{filename}.
+ preambles:
+ blocking_html:
+ few: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí bac suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí bhac suas le %{count} cuntais ó %{filename}.
+ bookmarks_html:
+ few: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ many: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ one: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ other: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ two: Tá tú ar tí %{count} postáil ó %{filename} a chur le do leabharmharcanna.
+ domain_blocking_html:
+ few: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ many: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ one: Tá tú ar tí bac suas go dtí %{count} fearann ó %{filename}.
+ other: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ two: Tá tú ar tí bhac suas le %{count} bhfearainn ó %{filename}.
+ following_html:
+ few: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí leanúint suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí leanúint suas go dtí %{count} cuntais ó %{filename}.
+ lists_html:
+ few: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ many: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ one: Tá tú ar tí cuntas %{count} ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ other: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ two: Tá tú ar tí %{count} cuntais ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
+ muting_html:
+ few: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ many: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ one: Tá tú ar tí balbhú suas go dtí %{count} cuntas ó %{filename}.
+ other: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
+ two: Tá tú ar tí balbhú suas le %{count} cuntais ó %{filename}.
preface: Is féidir leat sonraí a d’easpórtáil tú a allmhairiú ó fhreastalaí eile, mar shampla liosta de na daoine a bhfuil tú ag leanúint nó ag cur bac orthu.
recent_imports: Allmhairí le déanaí
states:
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index cb7c6254bc3e45..32aa3e23478406 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -25,6 +25,7 @@ gd:
other: Postaichean
two: Postaichean
posts_tab_heading: Postaichean
+ self_follow_error: Chan fhaod thu an cunntas agad fhèn a leantainn
admin:
account_actions:
action: Gabh an gnìomh
@@ -1415,6 +1416,68 @@ gd:
merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris
overwrite: Sgrìobh thairis air
overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann
+ overwrite_preambles:
+ blocking_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nam bacaidhean agad.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nam bacaidhean agad.
+ bookmarks_html:
+ few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur an àite nan comharra-lìn agad.
+ one: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad.
+ other: Tha thu an impis suas ri %{count} post o %{filename} a chur an àite nan comharra-lìn agad.
+ two: Tha thu an impis suas ri %{count} phost o %{filename} a chur an àite nan comharra-lìn agad.
+ domain_blocking_html:
+ few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ one: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ other: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ two: Tha thu an impis suas ri %{count} àrainn o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
+ following_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn agus sguiridh tu a leantainn duine sam bith eile.
+ lists_html:
+ few: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntasan a chur ri liostaichean ùra.
+ one: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra.
+ other: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} cunntas a chur ri liostaichean ùra.
+ two: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{count} chunntas a chur ri liostaichean ùra.
+ muting_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
+ preambles:
+ blocking_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a bhacadh.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a bhacadh.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a bhacadh.
+ bookmarks_html:
+ few: Tha thu an impis suas ri %{count} postaichean o %{filename} a chur ris na h-annsachdan agad.
+ one: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad.
+ other: Tha thu an impis suas ri %{count} post o %{filename} a chur ris na h-annsachdan agad.
+ two: Tha thu an impis suas ri %{count} phost o %{filename} a chur ris na h-annsachdan agad.
+ domain_blocking_html:
+ few: Tha thu an impis suas ri %{count} àrainnean o %{filename} a bhacadh.
+ one: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ other: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ two: Tha thu an impis suas ri %{count} àrainn o %{filename} a bhacadh.
+ following_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a leantainn.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a leantainn.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a leantainn.
+ lists_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
+ muting_html:
+ few: Tha thu an impis suas ri %{count} cunntasan o %{filename} a mhùchadh.
+ one: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh.
+ other: Tha thu an impis suas ri %{count} cunntas o %{filename} a mhùchadh.
+ two: Tha thu an impis suas ri %{count} chunntas o %{filename} a mhùchadh.
preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh."
recent_imports: Ion-phortaidhean o chionn goirid
states:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index cdc94213248df7..3ee93bf7318bd7 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -1785,11 +1785,11 @@ gl:
enabled: Borrar automáticamente publicacións antigas
enabled_hint: Borra automáticamente as túas publicacións unha vez acadan certa lonxevidade, a menos que cumpran algunha destas excepcións
exceptions: Excepcións
- explanation: Como o borrado de publicacións consume moitos recursos, esta faise aos poucos cando o servidor non ten moita carga de traballo. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por idade.
+ explanation: O borrado de publicacións vaise facendo aos poucos cando o servidor non ten moito traballo, é unha tarefa que consume moitos recursos. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por antigüidade.
ignore_favs: Ignorar favoritas
ignore_reblogs: Ignorar promocións
interaction_exceptions: Excepcións baseadas en interaccións
- interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións e favorecementos se nalgún momento o superaron.
+ interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións ou favorecementos se nalgún momento o tivese superado.
keep_direct: Manter mensaxes directas
keep_direct_hint: Non borrar ningunha das túas mensaxes directas
keep_media: Manter publicacións que conteñen multimedia
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 15c632adc9c685..aad90b3ac3c2f7 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -21,6 +21,7 @@ hu:
one: Bejegyzés
other: Bejegyzés
posts_tab_heading: Bejegyzés
+ self_follow_error: A saját fiók nem követhető
admin:
account_actions:
action: Művelet végrehajtása
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 4d9148674d9d97..70dfa658b2d06a 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -21,6 +21,7 @@ ia:
one: Message
other: Messages
posts_tab_heading: Messages
+ self_follow_error: Sequer tu proprie conto non es permittite
admin:
account_actions:
action: Exequer action
@@ -473,6 +474,9 @@ ia:
title: Recommendationes de contos a sequer
unsuppress: Restaurar recommendation de sequimento
instances:
+ audit_log:
+ title: Registros de controlo recente
+ view_all: Vider registros de controlo integre
availability:
description_html:
one: Si le livration al dominio falle %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio.
@@ -599,7 +603,9 @@ ia:
resolve_description_html: Necun mesura essera prendite contra le conto denunciate, necun sanction registrate, e le reporto essera claudite.
silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le reportos contra iste conto.
suspend_description_html: Le conto e tote su contento essera inaccessibile e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le reportos contra iste conto.
+ actions_description_html: Decider que mesuras prender pro resolver iste reporto. Si tu prende un mesura punitive contra le conto reportate, un aviso email les sera inviate, salvo quando le categoria Spam es seligite.
actions_description_remote_html: Decide qual mesura prender pro resolver iste reporto. Isto affectara solmente le maniera in que tu servitor communica con iste conto remote e gere su contento.
+ actions_no_posts: Iste reporto non ha alcun message associate a deler
add_to_report: Adder plus al reporto
already_suspended_badges:
local: Ja suspendite sur iste servitor
@@ -870,6 +876,9 @@ ia:
message_html: Tu non ha definite alcun regula de servitor.
sidekiq_process_check:
message_html: Necun processo Sidekiq es active pro le cauda(s) %{value}. Per favor verifica tu configuration de Sidekiq
+ software_version_check:
+ action: Vider le actualisationes disponibile
+ message_html: Un actualisation de Mastodon es disponibile.
software_version_critical_check:
action: Vider le actualisationes disponibile
message_html: Un actualisation critic de Mastodon es disponibile. Per favor actualisa lo le plus tosto possibile.
@@ -885,11 +894,18 @@ ia:
tags:
moderation:
not_trendable: Non pro tendentia
+ not_usable: Non usabile
pending_review: Attende revision
+ review_requested: Revision demandate
+ reviewed: Revidite
title: Stato
+ trendable: De tendentia
+ unreviewed: Non revidite
+ usable: Usabile
name: Nomine
newest: Le plus nove
oldest: Le plus ancian
+ open: Vider publicamente
reset: Reinitialisar
review: Revide le stato
search: Cercar
@@ -932,7 +948,9 @@ ia:
statuses:
allow: Permitter message
allow_account: Permitter autor
+ confirm_allow: Desira tu vermente permitter le statos seligite?
confirm_allow_account: Es tu secur que tu vole permitter le contos seligite?
+ confirm_disallow: Desira tu vermente impedir le statos seligite?
confirm_disallow_account: Es tu secur que tu vole cessar de permitter le contos seligite?
description_html: Istes es le messages cognoscite sur tu servitor que al momento es multo compartite e marcate como favorite. Illos pote adjutar tu usatores nove e reveniente a trovar plus personas a sequer. Necun message es monstrate publicamente usque tu approba le autor, a condition que le autor permitte que su conto es suggerite a alteres. Tu pote tamben permitter o rejectar messages singule.
disallow: Non permitter message
@@ -1148,8 +1166,10 @@ ia:
use_security_key: Usar clave de securitate
author_attribution:
example_title: Texto de exemplo
+ hint_html: Controlar como tu es accreditate quando ligamines es compartite sur Mastodon.
more_from_html: Plus de %{name}
s_blog: Blog de %{name}
+ title: Attribution de autor
challenge:
confirm: Continuar
hint_html: "Consilio: Nos non te demandara tu contrasigno de novo in le proxime hora."
@@ -1346,6 +1366,44 @@ ia:
merge_long: Conservar le registros existente e adder noves
overwrite: Superscriber
overwrite_long: Reimplaciar registros actual con le noves
+ overwrite_preambles:
+ blocking_html:
+ one: Tu va reimplaciar tu lista de blocada con usque %{count} conto ab %{filename}.
+ other: Tu va reimplaciar tu lista de blocada con usque %{count} contos ab %{filename}.
+ bookmarks_html:
+ one: Tu va reimplaciar tu marcapaginas con usque %{count} message ab %{filename}.
+ other: Tu va reimplaciar tu marcapaginas con usque %{count} messages ab %{filename}.
+ domain_blocking_html:
+ one: Tu va reimplaciar tu blocada lista de dominios blocate con usque %{count} dominio ab %{filename}.
+ other: Tu va reimplaciar tu lista de dominios blocate con usque %{count} dominios ab %{filename}.
+ following_html:
+ one: Tu va sequer usque %{count} conto ab %{filename} e cessar de sequer ulle altere.
+ other: Tu va sequer usque %{count} contos ab %{filename} e cessar de sequer ulle altere.
+ lists_html:
+ one: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} conto sera addite al nove listas.
+ other: Tu va reimplaciar tu listas con contentos ab %{filename}. Usque %{count} contos sera addite a nove listas.
+ muting_html:
+ one: Tu va reimplaciar tu lista de conto silentiate con usque %{count} conto ab %{filename}.
+ other: Tu va reimplaciar tu lista de contos silentiate con usque %{count} contos ab %{filename}.
+ preambles:
+ blocking_html:
+ one: Tu va blocar usque %{count} conto ab %{filename}.
+ other: Tu va blocar usque %{count} contos de %{filename}.
+ bookmarks_html:
+ one: Tu va adder usque %{count} message ab %{filename} a tu marcapaginas.
+ other: Tu va adder usque %{count} messages ab %{filename} a tu marcapaginas.
+ domain_blocking_html:
+ one: Tu va blocar usque %{count} dominio ab %{filename}.
+ other: Tu va blocar usque %{count} dominios ab %{filename}.
+ following_html:
+ one: Tu va sequer usque %{count} conto ab %{filename}.
+ other: Tu va sequer usque %{count} contos de %{filename}.
+ lists_html:
+ one: Tu va adder usque %{count} conto ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder.
+ other: Tu va adder usque %{count} contos ab %{filename} a tu lista. Nove listas sera create si il non ha lista a adder.
+ muting_html:
+ one: Tu va silentiar usque %{count} conto ab %{filename}.
+ other: Tu va silentiar usque %{count} contos ab %{filename}.
preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
recent_imports: Importationes recente
states:
@@ -1430,6 +1488,7 @@ ia:
media_attachments:
validations:
images_and_video: Impossibile annexar un video a un message que jam contine imagines
+ not_found: Medios %{ids} non trovate o jam attachate a un altere message
not_ready: Impossibile annexar files que non ha ancora essite processate. Retenta post un momento!
too_many: Impossibile annexar plus de 4 files
migrations:
@@ -1661,6 +1720,7 @@ ia:
delete: Deletion de conto
development: Disveloppamento
edit_profile: Modificar profilo
+ export: Exportar
featured_tags: Hashtags in evidentia
import: Importar
import_and_export: Importar e exportar
diff --git a/config/locales/is.yml b/config/locales/is.yml
index f181470e495211..ed08663b5a3739 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -1370,6 +1370,44 @@ is:
merge_long: Halda fyrirliggjandi færslum og bæta við nýjum
overwrite: Skrifa yfir
overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju
+ overwrite_preambles:
+ blocking_html:
+ one: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{count} aðgöngum úr %{filename}.
+ bookmarks_html:
+ one: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslu úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{count} færslum úr %{filename}.
+ domain_blocking_html:
+ one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} léni úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{count} lénum úr %{filename}.
+ following_html:
+ one: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgangi úr %{filename} og hætta að fylgjast með öllum öðrum.
+ other: Þú er í þann mund að fara að fylgjast með allt að %{count} aðgöngum úr %{filename} og hætta að fylgjast með öllum öðrum.
+ lists_html:
+ one: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgangi verður bætt við nýju listana.
+ other: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{count} aðgöngum verður bætt við nýju listana.
+ muting_html:
+ one: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{count} aðgöngum úr %{filename}.
+ preambles:
+ blocking_html:
+ one: Þú ert í þann mund að útiloka allt að %{count} aðgang úr %{filename}.
+ other: Þú ert í þann mund að útiloka allt að %{count} aðganga úr %{filename}.
+ bookmarks_html:
+ one: Þú er í þann mund að fara að bæta við allt að %{count} færslu úr %{filename} við bókamerkin þín.
+ other: Þú er í þann mund að fara að bæta við allt að %{count} færslum úr %{filename} við bókamerkin þín.
+ domain_blocking_html:
+ one: Þú ert í þann mund að útiloka allt að %{count} lén úr %{filename}.
+ other: Þú er í þann mund að fara að útiloka allt að %{count} lén úr %{filename}.
+ following_html:
+ one: Þú ert að fara að fylgjast með allt að %{count} aðgangi úr %{filename}.
+ other: Þú er að fara að fylgjast með allt að %{count} aðgöngum úr %{filename}.
+ lists_html:
+ one: Þú ert í þann mund að fara að bæta við allt að %{count} aðgangi úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í.
+ other: Þú ert í þann mund að fara að bæta við allt að %{count} aðgöngum úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í.
+ muting_html:
+ one: Þú ert að fara að þagga niður í allt að %{count} aðgangi úr %{filename}.
+ other: Þú ert að fara að þagga niður í allt að %{count} aðgöngum úr %{filename}.
preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar.
recent_imports: Nýlega flutt inn
states:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 91b67c2b4d65bf..22bfd7df24113b 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -1,7 +1,7 @@
---
it:
about:
- about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza azienale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodon!'
+ about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza aziendale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodonte!'
contact_missing: Non impostato
contact_unavailable: N/D
hosted_on: Mastodon ospitato su %{domain}
@@ -21,6 +21,7 @@ it:
one: Toot
other: Toot
posts_tab_heading: Toot
+ self_follow_error: Seguire il tuo stesso profilo non è consentito
admin:
account_actions:
action: Esegui azione
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index a715a95e8b28c4..235f1a292a7fe4 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -46,6 +46,7 @@ ja:
title: "%{username}さんのメールアドレスを変更"
change_role:
changed_msg: ロールを変更しました!
+ edit_roles: ユーザーのロールを管理
label: ロールを変更
no_role: ロールがありません
title: "%{username}さんのロールを変更"
@@ -232,22 +233,22 @@ ja:
approve_appeal_html: "%{name}さんが%{target}さんからの抗議を承認しました"
approve_user_html: "%{name}さんが%{target}さんからの登録を承認しました"
assigned_to_self_report_html: "%{name}さんが通報 %{target}を自身の担当に割り当てました"
- change_email_user_html: "%{name}さんが%{target}さんのメールアドレスを変更しました"
+ change_email_user_html: "%{name} さんが %{target} さんのメールアドレスを変更しました"
change_role_user_html: "%{name}さんが%{target}さんのロールを変更しました"
- confirm_user_html: "%{name}さんが%{target}さんのメールアドレスを確認済みにしました"
+ confirm_user_html: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました"
create_account_warning_html: "%{name}さんが%{target}さんに警告メールを送信しました"
create_announcement_html: "%{name}さんが新しいお知らせ %{target}を作成しました"
- create_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) をブロックしました"
+ create_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} をブロックしました"
create_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を追加しました"
create_domain_allow_html: "%{name}さんが%{target}の連合を許可しました"
create_domain_block_html: "%{name}さんがドメイン %{target}をブロックしました"
- create_email_domain_block_html: "%{name}さんがメールドメイン %{target} をブロックしました"
+ create_email_domain_block_html: "%{name} さんがメールドメイン %{target} をブロックしました"
create_ip_block_html: "%{name}さんがIP %{target}のルールを作成しました"
create_unavailable_domain_html: "%{name}がドメイン %{target}への配送を停止しました"
create_user_role_html: "%{name}さんがロール『%{target}』を作成しました"
demote_user_html: "%{name}さんが%{target}さんを降格しました"
destroy_announcement_html: "%{name}さんがお知らせ %{target}を削除しました"
- destroy_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) のブロックを外しました"
+ destroy_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} のブロックを外しました"
destroy_custom_emoji_html: "%{name}さんがカスタム絵文字『%{target}』を削除しました"
destroy_domain_allow_html: "%{name}さんが%{target}の連合許可を外しました"
destroy_domain_block_html: "%{name}さんがドメイン %{target}のブロックを外しました"
@@ -270,7 +271,7 @@ ja:
reject_user_html: "%{name}さんが%{target}さんからの登録を拒否しました"
remove_avatar_user_html: "%{name}さんが%{target}さんのアイコンを削除しました"
reopen_report_html: "%{name}さんが通報 %{target}を未解決に戻しました"
- resend_user_html: "%{name}さんが %{target} の確認メールを再送信しました"
+ resend_user_html: "%{name} さんが %{target} の確認メールを再送信しました"
reset_password_user_html: "%{name}さんが%{target}さんのパスワードをリセットしました"
resolve_report_html: "%{name}さんが通報 %{target}を解決済みにしました"
sensitive_account_html: "%{name}さんが%{target}さんのメディアを閲覧注意にマークしました"
@@ -285,7 +286,7 @@ ja:
update_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を更新しました"
update_domain_block_html: "%{name}さんが%{target}のドメインブロックを更新しました"
update_ip_block_html: "%{name} さんがIP %{target} のルールを更新しました"
- update_report_html: "%{name}さんが通報 %{target} を更新しました"
+ update_report_html: "%{name} さんが通報 %{target} を更新しました"
update_status_html: "%{name}さんが%{target}さんの投稿を更新しました"
update_user_role_html: "%{name}さんがロール『%{target}』を変更しました"
deleted_account: 削除されたアカウント
@@ -861,6 +862,9 @@ ja:
message_html: サーバーのルールを定義していません。
sidekiq_process_check:
message_html: "%{value}キューに対応するSidekiqプロセスがありません。Sidekiqの設定を確認してください。"
+ software_version_check:
+ action: 利用可能な更新を確認
+ message_html: Mastodonの更新が利用可能です。
software_version_critical_check:
action: 利用可能な更新を見る
message_html: 緊急のMastodonアップデートがあります。速やかに適用してください。
@@ -1145,7 +1149,10 @@ ja:
use_security_key: セキュリティキーを使用
author_attribution:
example_title: サンプルテキスト
+ hint_html: Mastodonでリンクが共有されたときのクレジットの表示方法を管理する。
+ more_from_html: "%{name} のその他の情報"
s_blog: "%{name} のブログ"
+ title: 著者の帰属
challenge:
confirm: 続ける
hint_html: 以後1時間はパスワードの再入力を求めません
@@ -1335,6 +1342,32 @@ ja:
merge_long: 現在のレコードを保持したまま新しいものを追加します
overwrite: 上書き
overwrite_long: 現在のレコードを新しいもので置き換えます
+ overwrite_preambles:
+ blocking_html:
+ other: あなたは%{filename}から最大%{count}のアカウントでブロックリストを置き換えようとしています。
+ bookmarks_html:
+ other: あなたは%{filename}から最大%{count}の投稿でブックマークを置き換えようとしています。
+ domain_blocking_html:
+ other: あなたは%{filename}から最大%{count}のドメインでドメインブロックリストを置き換えようとしています。
+ following_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをフォローし、他のすべてのユーザーのフォローを解除します。
+ lists_html:
+ other: あなたは%{filename}の内容でリストを置き換えようとしています。最大%{count}のアカウントが新しいリストに追加されます。
+ muting_html:
+ other: あなたは%{filename}から最大%{count}のアカウントでミュートアカウントのリストを置き換えようとしています。
+ preambles:
+ blocking_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをブロックしようとしています。
+ bookmarks_html:
+ other: あなたは%{filename}から最大%{count}の投稿をブックマークに追加しようとしています。
+ domain_blocking_html:
+ other: あなたは%{filename}から最大%{count}のドメインをブロックしようとしています。
+ following_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをフォローしようとしています。
+ lists_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをリストに追加しようとしています。追加するリストがない場合は新しいリストが作成されます。
+ muting_html:
+ other: あなたは%{filename}から最大%{count}のアカウントをミュートしようとしています。
preface: 他のサーバーでエクスポートされたファイルから、フォロー/ブロックした情報をこのサーバー上のアカウントにインポートできます。
recent_imports: 最近のインポート
states:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 615783738abb4b..4a39cce4ce336c 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -193,7 +193,7 @@ ko:
destroy_domain_allow: 도메인 허용 삭제
destroy_domain_block: 도메인 차단 삭제
destroy_email_domain_block: 이메일 도메인 차단 삭제
- destroy_instance: 도메인 제거
+ destroy_instance: 도메인 퍼지하기
destroy_ip_block: IP 규칙 삭제
destroy_status: 게시물 삭제
destroy_unavailable_domain: 사용 불가능한 도메인 제거
@@ -526,7 +526,7 @@ ko:
title: 중재
private_comment: 비공개 주석
public_comment: 공개 주석
- purge: 제거
+ purge: 퍼지
purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다.
title: 연합
total_blocked_by_us: 우리에게 차단 됨
@@ -1707,7 +1707,7 @@ ko:
lost_followers: 잃은 팔로워
lost_follows: 잃은 팔로우
preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다.
- purged: 이 서버에 대한 정보는 관리자에 의해 삭제되었습니다.
+ purged: 이 서버의 정보는 관리자가 퍼지하였습니다.
type: 이벤트
statuses:
attached:
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 97fcf751802067..ad241856a43161 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -46,6 +46,7 @@ lad:
title: Troka la posta elektronika de %{username}
change_role:
changed_msg: Rolo trokado kon sukseso!
+ edit_roles: Administra reglas de utilizadores
label: Troka rolo
no_role: Sin rolo
title: Troka rolo para %{username}
@@ -595,6 +596,7 @@ lad:
resolve_description_html: No se tomaran aksyones kontra el kuento denunsiado, no se enrejistrara el amonestamiento, i se serrara el raporto.
silence_description_html: El profil sera vizivle solo para akeyos ke ya lo sigan o lo bushken manualmente, limitando seriamente su alkanse. Siempre puede ser revertido.
suspend_description_html: El profil i todos sus kontenidos seran inaksesivles asta ke sean enfin supremidos. La enteraksion kon el kuento sera emposivle. Reversivle durante un tiempo de 30 diyas.
+ actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam.
actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido.
add_to_report: Adjusta mas al raporto
already_suspended_badges:
@@ -697,6 +699,7 @@ lad:
manage_appeals: Administra apelasiones
manage_appeals_description: Permete a los utilizadores revizar apelasiones kontra aksyones de moderasyon
manage_blocks: Administra blokos
+ manage_blocks_description: Permete a los utilizadores blokar los prokuradores de posta elektronika i los adresos IP
manage_custom_emojis: Administra emojis personalizados
manage_custom_emojis_description: Permete a los utilizadores editar emojis personalizados en el sirvidor
manage_federation: Administra federasyon
@@ -714,6 +717,7 @@ lad:
manage_taxonomies: Administra etiketas
manage_taxonomies_description: Permete a los utilizadores revizar el kontenido en trend i aktualizar la konfigurasyon de las etiketas
manage_user_access: Administra akseso de utilizadores
+ manage_user_access_description: Permete a los utilizadores dezaktivar la autentifikasyon en dos pasos de otros utilizadores, trokar sus adreso de posta elektronika i restableser sus kod
manage_users: Administra utilizadores
manage_users_description: Permete a los utilizadores ver los peratim de otros utilizadores i realizar aksyones de moderasyon kontra eyos
manage_webhooks: Administrar webhooks
@@ -787,6 +791,7 @@ lad:
destroyed_msg: Dosya supremida kon sukseso!
software_updates:
critical_update: Kritiko – por favor aktualiza pishin
+ description: Rekomendamos ke mantengas aktualizada tu enstalasyon de Mastodon para benefisyar de las muevas koreksyones y funksyones. Ademas, a vezes es kritiko aktualizar Mastodon punktualmente para evitar problemas de sigurita. Por estas razones, Mastodon komprova si ay aktualizasyones kada 30 minutos, i te avizara de akodro a tus preferensyas de avizos por posta elektronika.
documentation_link: Ambezate mas
release_notes: Notas sovre la versyon
title: Aktualizasyones desponivles
@@ -860,6 +865,9 @@ lad:
message_html: No tienes definido dinguna regla del sirvidor.
sidekiq_process_check:
message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq
+ software_version_check:
+ action: Amostra aktualizasyones desponivles
+ message_html: Una aktualizasyon de Mastodon esta desponivle.
software_version_critical_check:
action: Amostra aktualizasyones desponivles
message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin.
@@ -875,11 +883,14 @@ lad:
tags:
moderation:
pending_review: Revizion esta asperando
+ reviewed: Revizado
title: Estado
+ unreviewed: No revizado
usable: Uzavle
name: Nombre
newest: Mas muevos
oldest: Mas viejos
+ open: Ve puvlikamente
reset: Reinisya
review: Estado de revizion
search: Bushka
@@ -1118,6 +1129,7 @@ lad:
title: Kriya kuento de Mastodon en %{domain}.
status:
account_status: Estado del kuento
+ confirming: Bekleando konfirmasyon de posta elektronika.
functional: Tu kuento esta kompletamente funksyonal.
pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada.
redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}.
@@ -1638,6 +1650,7 @@ lad:
delete: Efasa kuento
development: Dezvelopamiento
edit_profile: Edita profil
+ export: Eksporto
featured_tags: Etiketas avaliadas
import: Importo
import_and_export: Importo i eksporto
@@ -1876,6 +1889,7 @@ lad:
instructions_html: Kopia i apega este kodiche en el HTML de tu sitio web. Estonses, adjusta el adreso de tu sitio web en uno de los kutis adisyonales de tu profil dizde la seksyon "Edita profil" i guadra los trokamyentos.
verification: Verifikasyon
verified_links: Tus atadijos verifikados
+ website_verification: Verifikasyon de sityo web
webauthn_credentials:
add: Adjusta mueva yave de sigurita
create:
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 5f90b575e777d0..908b15e851bc09 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -23,6 +23,7 @@ lv:
other: Ziņas
zero: Ziņu
posts_tab_heading: Ziņas
+ self_follow_error: Nav ļauts sekot savam kontam
admin:
account_actions:
action: Veikt darbību
@@ -205,8 +206,10 @@ lv:
destroy_user_role: Iznīcināt lomu
disable_2fa_user: Atspējot 2FA
disable_custom_emoji: Atspējot pielāgotu emocijzīmi
+ disable_sign_in_token_auth_user: Atspējot autentificēšanos ar e-pasta pilnvaru lietotājam
disable_user: Atspējot Lietotāju
enable_custom_emoji: Iespējot pielāgotu emocijzīmi
+ enable_sign_in_token_auth_user: Iespējot autentificēšanos ar e-pasta pilnvaru lietotājam
enable_user: Ieslēgt Lietotāju
memorialize_account: Saglabāt Kontu Piemiņai
promote_user: Izceltt Lietotāju
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index bdc0475a6f9086..c27e5e5467a802 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -4,18 +4,25 @@ ml:
contact_missing: സജ്ജമാക്കിയിട്ടില്ല
contact_unavailable: ലഭ്യമല്ല
accounts:
+ followers:
+ one: പിന്തുടരാളി
+ other: പിന്തുടരുന്നവർ
following: പിന്തുടരുന്നു
last_active: അവസാനം സജീവമായിരുന്നത്
link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു
nothing_here: ഇവിടെ ഒന്നുമില്ല!
posts_tab_heading: ടൂട്ടുകൾ
admin:
+ account_moderation_notes:
+ create: ഒരു കുറിപ്പു് വിടുക
accounts:
+ add_email_domain_block: ഈ ഇ-തപാൽ മേഖല തടസ്സപെടുത്തുക
approve: അംഗീകരിക്കുക
are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ?
avatar: അവതാർ
by_domain: മേഖല
change_email:
+ changed_msg: ഇ-തപാൽ ശരിയായിട്ടു് മാറ്റീ!
current_email: ഇപ്പോഴത്തെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം
label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം
new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത്
@@ -24,6 +31,7 @@ ml:
confirm: നിജപ്പെടുത്തുക
confirmed: നിജപ്പെടുത്തി
confirming: സ്ഥിരീകരിക്കുന്നു
+ custom: സ്വന്തമായ ഭേദഗതി
delete: ഡാറ്റ ഇല്ലാതാക്കുക
deleted: മായിച്ചു
demote: തരം താഴ്ത്തുക
@@ -34,7 +42,9 @@ ml:
domain: മേഖല
edit: തിരുത്തുക
email: ഇമെയിൽ
+ email_status: ഇ-തപാൽ അവസ്ഥ
header: തലക്കെട്ട്
+ inbox_url: ഇ-തപാല്പെട്ടി വിലാസം
joined: ജോയിൻ ചെയ്തിരിക്കുന്നു
location:
all: എല്ലാം
@@ -46,9 +56,18 @@ ml:
all: എല്ലാം
suspended: താൽക്കാലികമായി നിർത്തി
title: മധ്യസ്ഥന്
+ protocol: പെരുമാറ്റച്ചട്ടം
+ public: പൊതുവു്
+ remove_header: തലക്കെട്ടു് മാറ്റുക
+ resend_confirmation:
+ send: ഉറപ്പിക്കൽ-വിലാസം വീണ്ടും അയക്കുക
reset: പുനഃക്രമീകരിക്കുക
reset_password: പാസ്വേഡ് പുനഃക്രമീകരിക്കുക
search: തിരയുക
+ security: സുരക്ഷ
+ security_measures:
+ only_password: രഹസ്യവാക്ക് മാത്രം
+ silence: അതിർ
title: അക്കൗണ്ടുകൾ
unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ
username: ഉപയോക്തൃനാമം
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index b28cf30162a363..59bc242dcb4ff4 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -690,10 +690,10 @@ nn:
moderation: Moderering
special: Særskild
delete: Slett
- description_html: Med brukarrollar kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgong til.
+ description_html: Med brukarroller kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgang til.
edit: Endr rollen '%{name}'
everyone: Standard-tillatelser
- everyone_full_description_html: Dette er grunnrollen som påverkar alle brukarar, jamvel dei utan ei tilsett rolle. Alle andre rollar arvar tillatingar frå denne.
+ everyone_full_description_html: Dette er grunnrolla som påverkar alle brukarar, jamvel dei utan ei tildelt rolle. Alle andre rollar arvar tilgangsløve frå denne.
permissions_count:
one: "%{count} tillatelse"
other: "%{count} tillatelser"
@@ -719,7 +719,7 @@ nn:
manage_reports: Handtere rapporteringar
manage_reports_description: Let brukarar gjennomgå rapportar og utføre modereringshandlingar i samsvar med desse
manage_roles: Handsam roller
- manage_roles_description: Tillet at brukarar handsamar og tilset rollar under deira eiga
+ manage_roles_description: Tillet at brukarar handsamar og tildeler roller som er lågare enn dera eiga
manage_rules: Handtere reglar
manage_rules_description: Let brukarar endre reglane for tenaren
manage_settings: Handtere innstillingar
@@ -738,7 +738,7 @@ nn:
view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker
view_devops: DevOps
view_devops_description: Gir brukere tilgang til Sidekiq og pgHero-dashbord
- title: Rollar
+ title: Roller
rules:
add_new: Legg til regel
delete: Slett
@@ -1417,7 +1417,7 @@ nn:
one: 1 bruk
other: "%{count} bruk"
max_uses_prompt: Inga grense
- prompt: Generer og del lenkjer med andre for å gje tilgong til denne tenaren
+ prompt: Generer og del lenkjer med andre for å gje tilgang til denne tenaren
table:
expires_at: Vert ugyldig
uses: Bruk
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 25ca703732aafa..d70499ae17ef16 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -901,6 +901,8 @@ ru:
message_html: Вы не определили правила сервера.
sidekiq_process_check:
message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq
+ software_version_check:
+ message_html: Доступно обновление для Mastodon.
software_version_critical_check:
action: Посмотреть доступные обновления
message_html: Доступно критическое обновление Mastodon, пожалуйста, обновитесь как можно скорее.
diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml
index 5e3f1af89a5299..00617c4e3cc072 100644
--- a/config/locales/simple_form.ast.yml
+++ b/config/locales/simple_form.ast.yml
@@ -25,11 +25,11 @@ ast:
password: Usa polo menos 8 caráuteres
setting_aggregate_reblogs: Nun amuesa los artículos compartíos nuevos que yá se compartieren de recién (namás afeuta a los artículos compartíos d'agora)
setting_always_send_emails: Los avisos nun se suelen unviar per corréu electrónicu si uses activamente Mastodon
- setting_default_sensitive: El conteníu multimedia sensible anúbrese por defeutu y pue amosase al calcar nelli
- setting_display_media_default: Anubrilu cuando se marque como sensible
- setting_display_media_hide_all: Anubrilu siempres
- setting_display_media_show_all: Amosalu siempres
- setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia anubríu mas desenfonca los detalles
+ setting_default_sensitive: El conteníu multimedia sensible escuéndrese por defeutu y pue amosase al calcar nelli
+ setting_display_media_default: Escondelu cuando se marque como sensible
+ setting_display_media_hide_all: Escondelu siempre
+ setting_display_media_show_all: Amosalu siempre
+ setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia escondíu mas desenfonca los detalles
featured_tag:
name: 'Equí tán dalgunes de les etiquetes qu''usesti apocayá:'
form_admin_settings:
@@ -93,7 +93,7 @@ ast:
expires_in: Caduca dempués de
fields: Campos adicionales
header: Semeya de la testera
- irreversible: Escartar en cuentes d'anubrir
+ irreversible: Escartar en cuentes d'esconder
locale: Llingua de la interfaz
max_uses: Númberu máximu d'usos
new_password: Contraseña nueva
@@ -103,24 +103,24 @@ ast:
phrase: Pallabra clave o fras
setting_advanced_layout: Activar la interfaz web avanzada
setting_aggregate_reblogs: Agrupar los artículos compartíos nes llinies de tiempu
- setting_always_send_emails: Unviar siempres los avisos per corréu electrónicu
+ setting_always_send_emails: Unviar siempre los avisos per corréu electrónicu
setting_auto_play_gif: Reproducir automáticamente los GIFs
setting_boost_modal: Amosar el diálogu de confirmación enantes de compartir un artículu
setting_default_language: Llingua de los artículos
setting_default_privacy: Privacidá de los artículos
- setting_default_sensitive: Marcar siempres tol conteníu como sensible
+ setting_default_sensitive: Marcar siempre tol conteníu como sensible
setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar un artículu
setting_disable_hover_cards: Desactivar la previsualización de perfiles al pasar el mur penriba
setting_disable_swiping: Desactivar el movimientu de desplazamientu
setting_display_media: Conteníu multimedia
- setting_expand_spoilers: Espander siempres los artículos marcaos con alvertencies de conteníu
- setting_hide_network: Anubrir les cuentes que sigas y te sigan
+ setting_expand_spoilers: Espander siempre los artículos marcaos con alvertencies de conteníu
+ setting_hide_network: Esconder les cuentes que sigas y te sigan
setting_reduce_motion: Amenorgar el movimientu de les animaciones
setting_system_font_ui: Usar la fonte predeterminada del sistema
setting_theme: Estilu del sitiu
setting_trends: Amosar les tendencies de güei
setting_unfollow_modal: Amosar el diálogu de confirmación enantes de dexar de siguir a daquién
- setting_use_blurhash: Facer que'l conteníu multimedia anubríu tenga dilíos coloríos
+ setting_use_blurhash: Facer que'l conteníu multimedia escondíu tenga dilíos coloríos
setting_use_pending_items: Mou lentu
severity: Gravedá
sign_in_token_attempt: Códigu de seguranza
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 591cd1f04b7d51..9941c82c35d689 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -3,7 +3,7 @@ en:
simple_form:
hints:
account:
- attribution_domains_as_text: Protects from false attributions.
+ attribution_domains_as_text: One per line. Protects from false attributions.
discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users.
display_name: Your full name or your fun name.
fields: Your homepage, pronouns, age, anything you want.
@@ -151,7 +151,7 @@ en:
url: Where events will be sent to
labels:
account:
- attribution_domains_as_text: Only allow specific websites
+ attribution_domains_as_text: Websites allowed to credit you
discoverable: Feature profile and posts in discovery algorithms
fields:
name: Label
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index cb4a9041e81eb6..0d02969b4dbed7 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -76,6 +76,7 @@ eo:
warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro
form_admin_settings:
activity_api_enabled: Nombroj de loke publikigitaj afiŝoj, aktivaj uzantoj kaj novaj registradoj en semajnaj siteloj
+ backups_retention_period: Uzantoj havas la kapablon generi arkivojn de siaj afiŝoj por elŝuti poste. Kiam estas agordita al pozitiva valoro, ĉi tiuj arkivoj estos aŭtomate forigitaj de via stokado post la specifita nombro da tagoj.
bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj.
closed_registrations_message: Montrita kiam registroj fermitas
custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon.
@@ -243,6 +244,7 @@ eo:
backups_retention_period: Uzantoarkivretendauro
bootstrap_timeline_accounts: Ĉiam rekomendi ĉi tiujn kontojn al novaj uzantoj
closed_registrations_message: Kutima mesaĝo kiam registroj ne estas disponeblaj
+ content_cache_retention_period: Retenperiodo de fora enhavo
custom_css: Propa CSS
favicon: Favorikono
mascot: Propa maskoto
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index bbb0523b174738..fdaa156e5d6265 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -3,6 +3,7 @@ fa:
simple_form:
hints:
account:
+ attribution_domains_as_text: محافظت از اعتباردهیهای اشتباه.
discoverable: ممکن است نمایه و فرستههای عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایهتان به دیگر کاربران پیشنهاد شود.
display_name: نام کامل یا باحالتان.
fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید.
@@ -39,12 +40,14 @@ fa:
text: فقط یک بار میتوانید برای اخطار درخواست تجدیدنظر کنید
defaults:
autofollow: کسانی که از راه دعوتنامه عضو میشوند به طور خودکار پیگیر شما خواهند شد
+ avatar: یکی از قالبهای WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد
context: یک یا چند زمینه که پالایه باید در آنها اعمال شود
current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید
current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید
digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد
email: به شما ایمیل تأییدی فرستاده خواهد شد
+ header: یکی از قالبهای WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد
inbox_url: نشانی صفحهٔ اصلی رلهای را که میخواهید به کار ببرید کپی کنید
irreversible: فرستههای پالوده به طور برگشتناپذیری ناپدید میشوند، حتا اگر بعدها پالایه برداشته شود
locale: زبان واسط کاربری، رایانامهها و آگاهیهای ارسالی
@@ -120,6 +123,7 @@ fa:
url: جایی که رویدادها فرستاده میشوند
labels:
account:
+ attribution_domains_as_text: اجازه فقط به پایگاههای وب خاص
discoverable: معرّفی نمایه و فرستهها در الگوریتمهای کشف
fields:
name: برچسب
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 6591bd7be7e20e..5acea5f57e6e3b 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -3,6 +3,7 @@ ja:
simple_form:
hints:
account:
+ attribution_domains_as_text: 誤った帰属から保護します。
discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。
display_name: フルネーム、ハンドルネームなど
fields: ホームページ、代名詞、年齢など何でも構いません。
@@ -137,6 +138,7 @@ ja:
name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます
user:
chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります
+ role: そのロールは、ユーザーが持つ権限を制御します。
user_role:
color: UI 全体でロールの表示に使用される色(16進数RGB形式)
highlighted: これによりロールが公開されます。
@@ -149,6 +151,7 @@ ja:
url: イベントの送信先
labels:
account:
+ attribution_domains_as_text: 特定のウェブサイトのみを許可します
discoverable: アカウントを見つけやすくする
fields:
name: ラベル
diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml
index 94e387107abb59..de37005312d456 100644
--- a/config/locales/simple_form.lad.yml
+++ b/config/locales/simple_form.lad.yml
@@ -307,6 +307,7 @@ lad:
listable: Permite ke esta etiketa apareska en bushkedas i sujestyones
name: Etiketa
trendable: Permite ke esta etiketa apareska en trendes
+ usable: Permite ke publikasyones uzen esta etiketa lokalmente
user:
role: Rolo
time_zone: Zona de tiempo
diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml
index ddd5ed8995d541..271c384391e5ac 100644
--- a/config/locales/simple_form.nn.yml
+++ b/config/locales/simple_form.nn.yml
@@ -137,7 +137,7 @@ nn:
highlighted: Dette gjer rolla synleg offentleg
name: Offentleg namn på rolla, dersom rolla skal visast som eit emblem
permissions_as_keys: Brukarar med denne rolla vil ha tilgang til...
- position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet
+ position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan berre utførast på roller med lågare prioritet
webhook:
events: Vel hendingar å senda
template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON.
diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml
index 297e96a2bdf125..c588c9c0718996 100644
--- a/config/locales/simple_form.sv.yml
+++ b/config/locales/simple_form.sv.yml
@@ -3,6 +3,7 @@ sv:
simple_form:
hints:
account:
+ attribution_domains_as_text: Skyddar mot falska attributioner.
discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare.
display_name: Ditt fullständiga namn eller ditt roliga namn.
fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill.
@@ -143,6 +144,7 @@ sv:
url: Dit händelser kommer skickas
labels:
account:
+ attribution_domains_as_text: Tillåt endast specifika webbplatser
discoverable: Presentera profil och inlägg med upptäcktsalgoritmer
fields:
name: Etikett
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index 010bb262adcd27..8330ec3de452a6 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -43,7 +43,7 @@ vi:
avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px
bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật
context: Chọn những nơi mà bộ lọc sẽ áp dụng
- current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
+ current_password: Để bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại
current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại
digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt)
email: Bạn sẽ được gửi một email xác minh
@@ -290,7 +290,7 @@ vi:
sign_up_requires_approval: Giới hạn đăng ký
severity: Mức độ
notification_emails:
- appeal: Ai đó kháng cáo kiểm duyệt
+ appeal: Ai đó khiếu nại kiểm duyệt
digest: Gửi email định kỳ
favourite: Ai đó thích tút của bạn
follow: Ai đó theo dõi bạn
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 0b276393a670a3..fdeb959f88db8f 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -21,6 +21,7 @@ sq:
one: Mesazh
other: Mesazhe
posts_tab_heading: Mesazhe
+ self_follow_error: Ndjekja e llogarisë personale nuk lejohet
admin:
account_actions:
action: Kryeje veprimin
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 0d19d17c3b1935..b79820310c76ac 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -21,10 +21,12 @@ sv:
one: Inlägg
other: Inlägg
posts_tab_heading: Inlägg
+ self_follow_error: Det är inte tillåtet att följa ditt eget konto
admin:
account_actions:
action: Utför åtgärd
already_silenced: Detta konto är redan begränsat.
+ already_suspended: Detta konto är redan avstängt.
title: Utför aktivitet för moderering på %{acct}
account_moderation_notes:
create: Lämna kommentar
@@ -85,7 +87,7 @@ sv:
remote: Avlägsen
title: Plats
login_status: Inloggningsstatus
- media_attachments: Media bifogade filer
+ media_attachments: Mediebilagor
memorialize: Förvandla till ett memoriam
memorialized: Memorialiserad
memorialized_msg: Omvandlingen av %{username} till ett minneskonto lyckades
@@ -261,8 +263,10 @@ sv:
destroy_user_role_html: "%{name} raderade rollen %{target}"
disable_2fa_user_html: "%{name} inaktiverade tvåfaktorsautentiseringskrav för användaren %{target}"
disable_custom_emoji_html: "%{name} inaktiverade emoji %{target}"
+ disable_sign_in_token_auth_user_html: "%{name} inaktiverade e-posttokenautentisering för %{target}"
disable_user_html: "%{name} stängde av inloggning för användaren %{target}"
enable_custom_emoji_html: "%{name} aktiverade emoji %{target}"
+ enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}"
enable_user_html: "%{name} aktiverade inloggning för användaren %{target}"
memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida"
promote_user_html: "%{name} befordrade användaren %{target}"
@@ -270,6 +274,7 @@ sv:
reject_user_html: "%{name} avvisade registrering från %{target}"
remove_avatar_user_html: "%{name} tog bort %{target}'s avatar"
reopen_report_html: "%{name} öppnade rapporten igen %{target}"
+ resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt"
reset_password_user_html: "%{name} återställ användarens lösenord %{target}"
resolve_report_html: "%{name} löste rapporten %{target}"
sensitive_account_html: "%{name} markerade %{target}'s media som känsligt"
@@ -430,6 +435,7 @@ sv:
attempts_over_week:
one: "%{count} försök under den senaste veckan"
other: "%{count} registreringsförsök under den senaste veckan"
+ created_msg: Blockerade e-postdomänen
delete: Radera
dns:
types:
@@ -438,8 +444,12 @@ sv:
new:
create: Skapa domän
resolve: Slå upp domän
+ title: Blockera ny e-postdomän
+ no_email_domain_block_selected: Inga blockeringar av e-postdomäner ändrades eftersom inga valdes
not_permitted: Ej tillåtet
+ resolved_dns_records_hint_html: Domännamnet ger uppslag till följande MX-domäner, vilka är ytterst ansvariga för att e-post tas emot. Att blockera en MX-domän blockerar även registreringar från alla e-postadresser som använder samma MX-domän, även om det synliga domännamnet är annorlunda. Var noga med att inte blockera stora e-postleverantörer.
resolved_through_html: Uppslagen genom %{domain}
+ title: Blockerade e-postdomäner
export_domain_allows:
new:
title: Importera domäntillåtelser
@@ -593,7 +603,9 @@ sv:
resolve_description_html: Ingen åtgärd vidtas mot det rapporterade kontot, ingen prick registreras och rapporten stängs.
silence_description_html: Kontot kommer endast synas för de som redan följer den eller manuellt söker på den, vilket dramatiskt minskar dess räckvidd. Kan alltid ångras. Stänger alla anmälningar mot detta konto.
suspend_description_html: Kontot och allt dess innehåll kommer att vara oåtkomligt och så småningom tas bort, det kommer inte gå att interagera med kontot. Kan ångras inom 30 dagar. Stänger alla anmälningar mot detta konto.
+ actions_description_html: Välj vilken åtgärd som skall vidtas för att lösa denna rapport. Om du vidtar en bestraffningsåtgärd mot det rapporterade kontot kommer en e-postnotis att skickas till dem, förutom om du valt kategorin Skräppost.
actions_description_remote_html: Bestäm vilka åtgärder som ska vidtas för att lösa denna rapport. Detta kommer bara att påverka hur din server kommunicerar med detta fjärrkonto och hanterar dess innehåll.
+ actions_no_posts: Denna rapport har inga associerade inlägg att ta bort
add_to_report: Lägg till mer i rapporten
already_suspended_badges:
local: Redan avstängd på denna server
@@ -657,6 +669,7 @@ sv:
delete_data_html: Ta bort @%{acct}s profil och innehåll om 30 dagar ifall deras avstängning inte tagits bort under tiden
preview_preamble_html: "@%{acct} kommer få en varning med följande innehåll:"
record_strike_html: Registrera en varning mot @%{acct} för att hjälpa dig eskalera vid framtida överträdelser från detta konto
+ send_email_html: Skicka @%{acct} ett varningsmejl
warning_placeholder: Valfri ytterligare resonemang för modereringsåtgärd.
target_origin: Ursprung för anmält konto
title: Anmälningar
@@ -696,6 +709,7 @@ sv:
manage_appeals: Hantera överklaganden
manage_appeals_description: Tillåter användare att granska överklaganden av modereringsåtgärder
manage_blocks: Hantera blockeringar
+ manage_blocks_description: Tillåter användare att blockera e-postleverantörer och IP-adresser
manage_custom_emojis: Hantera egna emojier
manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern
manage_federation: Hantera federering
@@ -713,6 +727,7 @@ sv:
manage_taxonomies: Hantera taxonomier
manage_taxonomies_description: Tillåter användare att granska trendande innehåll och uppdatera inställningar för hashtaggar
manage_user_access: Hantera användaråtkomst
+ manage_user_access_description: Tillåter användare att inaktivera andra användares tvåfaktorsautentisering, ändra deras e-postadress samt återställa deras lösenord
manage_users: Hantera användare
manage_users_description: Tillåter användare att granska användares data och utföra modereringsåtgärder på dessa
manage_webhooks: Hantera webhooks
@@ -787,6 +802,7 @@ sv:
destroyed_msg: Webbplatsuppladdningen har raderats!
software_updates:
critical_update: Kritiskt — vänligen uppdatera omgående
+ description: Det rekommenderas att hålla din Mastodon-installation uppdaterad för att ta nytta av de senaste fixarna och funktionerna. Dessutom är det ibland viktigt att uppdatera Mastodon i tid för att undvika säkerhetsproblem. Av dessa skäl kontrollerar Mastodon efter uppdateringar var 30:e minut och meddelar dig i enlighet med dina e-postaviseringsinställningar.
documentation_link: Läs mer
release_notes: Ändringslogg
title: Tillgängliga uppdateringar
@@ -861,6 +877,7 @@ sv:
sidekiq_process_check:
message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration
software_version_check:
+ action: Se tillgängliga uppdateringar
message_html: En Mastodon-uppdatering är tillgänglig.
software_version_critical_check:
action: Se tillgängliga uppdateringar
@@ -876,22 +893,36 @@ sv:
message_html: "Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen."
tags:
moderation:
+ not_usable: Inte användbar
+ pending_review: Väntar på granskning
+ review_requested: Granskning begärd
reviewed: Granskat
title: Status
trendable:
+ unreviewed: Ogranskad
+ usable: Användbar
name: Namn
+ newest: Nyaste
+ oldest: Äldsta
reset: Återställ
review: Granskningsstatus
search: Sök
+ title: Hashtaggar
updated_msg: Hashtagg-inställningarna har uppdaterats
title: Administration
trends:
allow: Tillåt
approved: Godkänd
+ confirm_allow: Är du säker på att du vill tillåta valda taggar?
+ confirm_disallow: Är du säker på att du vill förbjuda valda taggar?
disallow: Neka
links:
allow: Tillåt länk
allow_provider: Tillåt utgivare
+ confirm_allow: Är du säker på att du vill tillåta valda länkar?
+ confirm_allow_provider: Är du säker på att du vill tillåta valda leverantörer?
+ confirm_disallow: Är du säker på att du vill förbjuda valda länkar?
+ confirm_disallow_provider: Är du säker på att du vill förbjuda valda leverantörer?
description_html: Detta är länkar som för närvarande delas mycket av konton som din server ser inlägg från. Det kan hjälpa dina användare att ta reda på vad som händer i världen. Inga länkar visas offentligt tills du godkänner utgivaren. Du kan också tillåta eller avvisa enskilda länkar.
disallow: Blockera länk
disallow_provider: Blockera utgivare
@@ -915,6 +946,10 @@ sv:
statuses:
allow: Tillåt inlägg
allow_account: Godkänn författare
+ confirm_allow: Är du säker på att du vill tillåta valda statusar?
+ confirm_allow_account: Är du säker på att du vill tillåta valda konton?
+ confirm_disallow: Är du säker på att du vill förbjuda valda statusar?
+ confirm_disallow_account: Är du säker på att du vill förbjuda valda konton?
description_html: Detta är inlägg som din server vet om som för närvarande delas och favoriseras mycket just nu. Det kan hjälpa dina nya och återvändande användare att hitta fler människor att följa. Inga inlägg visas offentligt förrän du godkänner författaren, och författaren tillåter att deras konto föreslås till andra. Du kan också tillåta eller avvisa enskilda inlägg.
disallow: Tillåt inte inlägg
disallow_account: Tillåt inte författare
@@ -1034,6 +1069,7 @@ sv:
application_mailer:
notification_preferences: Ändra e-postpreferenser
salutation: "%{name},"
+ settings: 'Ändra e-postinställningar: %{link}'
unsubscribe: Avprenumerera
view: 'Granska:'
view_profile: Visa profil
@@ -1053,6 +1089,7 @@ sv:
hint_html: En sista sak till! Vi måste bekräfta att du är en människa (för att hålla borta skräpinlägg!). Lös CAPTCHA nedan och klicka på "Fortsätt".
title: Säkerhetskontroll
confirmations:
+ awaiting_review: Din e-postadress är bekräftad! %{domain} personalen granskar nu din registrering. Du kommer att få ett e-postmeddelande om de godkänner ditt konto!
awaiting_review_title: Din registrering är under granskning
clicking_this_link: klicka på denna länk
login_link: logga in
@@ -1060,6 +1097,7 @@ sv:
redirect_to_app_html: Du borde ha omdirigerats till appen %{app_name}. Om det inte hände, försök att %{clicking_this_link} eller återgå manuellt till appen.
registration_complete: Din registrering på %{domain} är nu slutförd!
welcome_title: Välkommen %{name}!
+ wrong_email_hint: Om e-postadressen inte är rätt, kan du ändra den i kontoinställningarna.
delete_account: Radera konto
delete_account_html: Om du vill radera ditt konto kan du fortsätta här. Du kommer att bli ombedd att bekräfta.
description:
@@ -1080,6 +1118,7 @@ sv:
or_log_in_with: Eller logga in med
privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn
progress:
+ confirm: Bekräfta e-postadress
details: Dina uppgifter
review: Vår recension
rules: Acceptera regler
@@ -1101,8 +1140,10 @@ sv:
security: Säkerhet
set_new_password: Skriv in nytt lösenord
setup:
+ email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel.
email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här.
link_not_received: Fick du ingen länk?
+ new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter!
title: Kolla din inkorg
sign_in:
preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här.
@@ -1113,6 +1154,7 @@ sv:
title: Låt oss få igång dig på %{domain}.
status:
account_status: Kontostatus
+ confirming: Väntar på att e-postbekräftelsen ska slutföras.
functional: Ditt konto fungerar som det ska.
pending: Din ansökan inväntar granskning. Detta kan ta tid. Du kommer att få ett e-postmeddelande om din ansökan har godkänts.
redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}.
@@ -1122,6 +1164,9 @@ sv:
use_security_key: Använd säkerhetsnyckel
author_attribution:
example_title: Exempeltext
+ more_from_html: Mer från %{name}
+ s_blog: "%{name}s blogg"
+ title: Författarattribution
challenge:
confirm: Fortsätt
hint_html: "Tips: Vi frågar dig inte efter ditt lösenord igen under nästkommande timme."
@@ -1318,6 +1363,10 @@ sv:
merge_long: Behåll befintliga uppgifter och lägg till nya
overwrite: Skriv över
overwrite_long: Ersätt de nuvarande uppgifterna med de nya
+ overwrite_preambles:
+ bookmarks_html:
+ one: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}.
+ other: Du är på väg att ersätta din blockeringslista med upp till %{count} inlägg från %{filename}.
preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar.
recent_imports: Nyligen importerade
states:
@@ -1402,6 +1451,7 @@ sv:
media_attachments:
validations:
images_and_video: Det går inte att bifoga en video till ett inlägg som redan innehåller bilder
+ not_found: Media %{ids} hittades inte eller är redan anslutet till ett annat inlägg
not_ready: Kan inte bifoga filer som inte har behandlats färdigt. Försök igen om ett ögonblick!
too_many: Det går inte att bifoga mer än 4 filer
migrations:
@@ -1883,6 +1933,7 @@ sv:
instructions_html: Kopiera och klistra in koden nedan in i HTML-koden på din webbplats. Lägg sedan till adressen till din webbplats i ett av de extra fälten på din profil från fliken "Redigera profil" och spara ändringar.
verification: Bekräftelse
verified_links: Dina verifierade länkar
+ website_verification: Webbplats verifiering
webauthn_credentials:
add: Lägg till ny säkerhetsnyckel
create:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index c6ba60736d8f4f..dd57a8df7f5ee2 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -19,6 +19,7 @@ th:
posts:
other: โพสต์
posts_tab_heading: โพสต์
+ self_follow_error: ไม่อนุญาตการติดตามบัญชีของคุณเอง
admin:
account_actions:
action: ทำการกระทำ
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 7c30c5b127b043..097e573efaa584 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -33,7 +33,7 @@ vi:
accounts:
add_email_domain_block: Chặn tên miền email
approve: Phê duyệt
- approved_msg: Đã phê duyệt đăng ký %{username}
+ approved_msg: Đã chấp nhận đăng ký %{username}
are_you_sure: Bạn có chắc không?
avatar: Ảnh đại diện
by_domain: Máy chủ
@@ -132,7 +132,7 @@ vi:
resubscribe: Đăng ký lại
role: Vai trò
search: Tìm kiếm
- search_same_email_domain: Những người khác với cùng tên miền email
+ search_same_email_domain: Những người có cùng tên miền email
search_same_ip: Tra cứu IP
security: Bảo mật
security_measures:
@@ -165,49 +165,49 @@ vi:
unsuspended_msg: Đã kích hoạt lại %{username} thành công
username: Tài khoản
view_domain: Xem mô tả tài khoản này
- warn: Nhắc
+ warn: Cảnh cáo
web: Web
whitelisted: Danh sách trắng
action_logs:
action_types:
- approve_appeal: Chấp nhận kháng cáo
- approve_user: Duyệt đăng ký
+ approve_appeal: Chấp nhận khiếu nại
+ approve_user: Chấp nhận đăng ký
assigned_to_self_report: Tự xử lý báo cáo
change_email_user: Đổi email người dùng
change_role_user: Đổi vai trò
confirm_user: Xác minh
create_account_warning: Cảnh cáo
create_announcement: Tạo thông báo mới
- create_canonical_email_block: Chặn địa chỉ email
+ create_canonical_email_block: Chặn địa chỉ email biến thể
create_custom_emoji: Tạo emoji
create_domain_allow: Cho phép máy chủ
create_domain_block: Chặn máy chủ
- create_email_domain_block: Tạo chặn tên miền email
+ create_email_domain_block: Chặn tên miền email
create_ip_block: Chặn IP
- create_unavailable_domain: Ngừng liên hợp
+ create_unavailable_domain: Bỏ liên hợp
create_user_role: Tạo vai trò
demote_user: Hạ vai trò
destroy_announcement: Xóa thông báo
- destroy_canonical_email_block: Bỏ chặn địa chỉ email
+ destroy_canonical_email_block: Bỏ chặn địa chỉ email biến thể
destroy_custom_emoji: Xóa emoji
- destroy_domain_allow: Bỏ thanh trừng máy chủ
+ destroy_domain_allow: Bỏ máy chủ cho phép
destroy_domain_block: Bỏ chặn máy chủ
destroy_email_domain_block: Bỏ chặn tên miền email
destroy_instance: Thanh trừng máy chủ
destroy_ip_block: Bỏ chặn IP
destroy_status: Xóa tút
- destroy_unavailable_domain: Tái liên hợp
+ destroy_unavailable_domain: Cho phép liên hợp
destroy_user_role: Xóa vai trò
disable_2fa_user: Vô hiệu hóa 2FA
disable_custom_emoji: Vô hiệu hóa emoji
disable_sign_in_token_auth_user: Tắt xác minh bằng email cho người dùng
disable_user: Vô hiệu hóa đăng nhập
- enable_custom_emoji: Duyệt emoji
+ enable_custom_emoji: Cho phép emoji
enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng
enable_user: Cho phép đăng nhập
- memorialize_account: Đánh dấu tưởng niệm
+ memorialize_account: Gán tưởng niệm
promote_user: Nâng vai trò
- reject_appeal: Từ chối kháng cáo
+ reject_appeal: Từ chối khiếu nại
reject_user: Từ chối đăng ký
remove_avatar_user: Xóa ảnh đại diện
reopen_report: Mở lại báo cáo
@@ -217,7 +217,7 @@ vi:
sensitive_account: Gán nhạy cảm
silence_account: Gán ẩn
suspend_account: Gán vô hiệu hóa
- unassigned_report: Báo cáo chưa xử lý
+ unassigned_report: Bỏ xử lý báo cáo
unblock_email_account: Bỏ chặn địa chỉ email
unsensitive_account: Bỏ nhạy cảm
unsilence_account: Bỏ ẩn
@@ -230,64 +230,64 @@ vi:
update_status: Cập nhật tút
update_user_role: Cập nhật vai trò
actions:
- approve_appeal_html: "%{name} đã duyệt kháng cáo của %{target}"
+ approve_appeal_html: "%{name} đã chấp nhận khiếu nại từ %{target}"
approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}"
- assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}"
+ assigned_to_self_report_html: "%{name} đã tự xử lý báo cáo %{target}"
change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}"
- change_role_user_html: "%{name} đã thay đổi vai trò %{target}"
+ change_role_user_html: "%{name} đã thay đổi vai trò của %{target}"
confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}"
create_account_warning_html: "%{name} đã cảnh cáo %{target}"
- create_announcement_html: "%{name} tạo thông báo mới %{target}"
- create_canonical_email_block_html: "%{name} đã chặn địa chỉ email với hash %{target}"
+ create_announcement_html: "%{name} đã tạo thông báo %{target}"
+ create_canonical_email_block_html: "%{name} đã chặn địa chỉ email biến thể %{target}"
create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
- create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}"
- create_domain_block_html: "%{name} chặn máy chủ %{target}"
+ create_domain_allow_html: "%{name} đã bật liên hợp với %{target}"
+ create_domain_block_html: "%{name} đã chặn máy chủ %{target}"
create_email_domain_block_html: "%{name} đã chặn tên miền email %{target}"
create_ip_block_html: "%{name} đã chặn IP %{target}"
- create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}"
+ create_unavailable_domain_html: "%{name} đã bỏ liên hợp với máy chủ %{target}"
create_user_role_html: "%{name} đã tạo vai trò %{target}"
demote_user_html: "%{name} đã hạ vai trò của %{target}"
- destroy_announcement_html: "%{name} xóa thông báo %{target}"
- destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email với hash %{target}"
+ destroy_announcement_html: "%{name} đã xóa thông báo %{target}"
+ destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email biến thể %{target}"
destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}"
destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}"
- destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}"
+ destroy_domain_block_html: "%{name} đã bỏ chặn máy chủ %{target}"
destroy_email_domain_block_html: "%{name} đã bỏ chặn email %{target}"
- destroy_instance_html: "%{name} thanh trừng máy chủ %{target}"
- destroy_ip_block_html: "%{name} bỏ chặn IP %{target}"
+ destroy_instance_html: "%{name} đã thanh trừng máy chủ %{target}"
+ destroy_ip_block_html: "%{name} đã bỏ chặn IP %{target}"
destroy_status_html: "%{name} đã xóa tút của %{target}"
- destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}"
+ destroy_unavailable_domain_html: "%{name} tiếp tục liên hợp với máy chủ %{target}"
destroy_user_role_html: "%{name} đã xóa vai trò %{target}"
disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}"
disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}"
disable_sign_in_token_auth_user_html: "%{name} đã tắt xác minh email của %{target}"
- disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}"
- enable_custom_emoji_html: "%{name} cho phép emoji %{target}"
+ disable_user_html: "%{name} đã vô hiệu hóa đăng nhập %{target}"
+ enable_custom_emoji_html: "%{name} đã cho phép emoji %{target}"
enable_sign_in_token_auth_user_html: "%{name} đã bật xác minh email của %{target}"
- enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}"
+ enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}"
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
promote_user_html: "%{name} đã nâng vai trò của %{target}"
- reject_appeal_html: "%{name} đã từ chối kháng cáo của %{target}"
+ reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}"
reject_user_html: "%{name} đã từ chối đăng ký từ %{target}"
remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}"
- reopen_report_html: "%{name} mở lại báo cáo %{target}"
+ reopen_report_html: "%{name} đã mở lại báo cáo %{target}"
resend_user_html: "%{name} đã gửi lại email xác minh cho %{target}"
reset_password_user_html: "%{name} đã đặt lại mật khẩu của %{target}"
resolve_report_html: "%{name} đã xử lý báo cáo %{target}"
- sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm"
+ sensitive_account_html: "%{name} đã gán nội dung của %{target} là nhạy cảm"
silence_account_html: "%{name} đã ẩn %{target}"
suspend_account_html: "%{name} đã vô hiệu hóa %{target}"
- unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí"
- unblock_email_account_html: "%{name} bỏ chặn địa chỉ email của %{target}"
- unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường"
+ unassigned_report_html: "%{name} đã thôi xử lý báo cáo %{target}"
+ unblock_email_account_html: "%{name} đã bỏ chặn địa chỉ email của %{target}"
+ unsensitive_account_html: "%{name} đã gán nội dung của %{target} là bình thường"
unsilence_account_html: "%{name} đã bỏ ẩn %{target}"
unsuspend_account_html: "%{name} đã bỏ vô hiệu hóa %{target}"
- update_announcement_html: "%{name} cập nhật thông báo %{target}"
+ update_announcement_html: "%{name} đã cập nhật thông báo %{target}"
update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}"
- update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}"
- update_ip_block_html: "%{name} cập nhật chặn IP %{target}"
- update_report_html: "%{name} cập nhật báo cáo %{target}"
- update_status_html: "%{name} cập nhật tút của %{target}"
+ update_domain_block_html: "%{name} đã cập nhật chặn máy chủ %{target}"
+ update_ip_block_html: "%{name} đã cập nhật chặn IP %{target}"
+ update_report_html: "%{name} đã cập nhật báo cáo %{target}"
+ update_status_html: "%{name} đã cập nhật tút của %{target}"
update_user_role_html: "%{name} đã cập nhật vai trò %{target}"
deleted_account: tài khoản đã xóa
empty: Không tìm thấy bản ghi.
@@ -354,7 +354,7 @@ vi:
new_users: người mới
opened_reports: báo cáo
pending_appeals_html:
- other: "%{count} kháng cáo đang chờ"
+ other: "%{count} khiếu nại đang chờ"
pending_reports_html:
other: "%{count} báo cáo đang chờ"
pending_tags_html:
@@ -372,7 +372,7 @@ vi:
disputes:
appeals:
empty: Không tìm thấy.
- title: Kháng cáo
+ title: Khiếu nại
domain_allows:
add_new: Cho phép liên hợp với máy chủ
created_msg: Máy chủ đã được kích hoạt liên hợp thành công
@@ -692,8 +692,8 @@ vi:
invite_users_description: Cho phép mời những người mới vào máy chủ
manage_announcements: Quản lý thông báo
manage_announcements_description: Cho phép quản lý thông báo trên máy chủ
- manage_appeals: Quản lý kháng cáo
- manage_appeals_description: Cho phép thành viên kháng cáo đối với các hành động kiểm duyệt
+ manage_appeals: Quản lý khiếu nại
+ manage_appeals_description: Cho phép thành viên khiếu nại đối với các hành động kiểm duyệt
manage_blocks: Quản lý chặn
manage_blocks_description: Cho phép người dùng tự chặn các nhà cung cấp email và địa chỉ IP
manage_custom_emojis: Quản lý emoji
@@ -819,7 +819,7 @@ vi:
original_status: Tút gốc
reblogs: Lượt đăng lại
status_changed: Tút đã sửa
- title: Toàn bộ tút
+ title: Tất cả tút
trending: Xu hướng
visibility: Hiển thị
with_media: Có media
@@ -1008,7 +1008,7 @@ vi:
silence: hạn chế tài khoản của họ
suspend: vô hiệu hóa tài khoản của họ
body: "%{target} đã khiếu nại vì bị %{action_taken_by} %{type} vào %{date}. Họ cho biết:"
- next_steps: Bạn có thể duyệt kháng cáo để hủy kiểm duyệt hoặc bỏ qua.
+ next_steps: Bạn có thể chấp nhận khiếu nại để bỏ kiểm duyệt, hoặc không.
subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}"
new_critical_software_updates:
body: Các phiên bản quan trọng mới của Mastodon đã được phát hành, bạn nên cập nhật càng sớm càng tốt!
@@ -1149,7 +1149,7 @@ vi:
author_attribution:
example_title: Văn bản mẫu
hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon.
- more_from_html: Thêm từ %{name}
+ more_from_html: Viết bởi %{name}
s_blog: "%{name}'s Blog"
title: Ghi nhận người đăng
challenge:
@@ -1205,12 +1205,12 @@ vi:
appealed_msg: Khiếu nại của bạn đã được gửi đi. Nếu nó được chấp nhận, bạn sẽ nhận được thông báo.
appeals:
submit: Gửi khiếu nại
- approve_appeal: Duyệt kháng cáo
+ approve_appeal: Chấp nhận khiếu nại
associated_report: Báo cáo đính kèm
created_at: Ngày
description_html: Đây là những cảnh cáo và áp đặt kiểm duyệt đối với bạn bởi đội ngũ %{instance}.
recipient: Người nhận
- reject_appeal: Từ chối kháng cáo
+ reject_appeal: Từ chối khiếu nại
status: 'Tút #%{id}'
status_removed: Tút này đã được xóa khỏi hệ thống
title: "%{action} từ %{date}"
@@ -1386,10 +1386,10 @@ vi:
muting: Đang nhập người đã ẩn
type: Kiểu nhập
type_groups:
- constructive: Lượt theo dõi và những thứ đã lưu
- destructive: Lượt chặn và ẩn
+ constructive: Theo dõi và lưu
+ destructive: Chặn và ẩn
types:
- blocking: Danh sách chặn
+ blocking: Danh sách người đã chặn
bookmarks: Tút đã lưu
domain_blocking: Danh sách máy chủ đã chặn
following: Danh sách người theo dõi
@@ -1747,7 +1747,7 @@ vi:
ignore_favs: Bỏ qua số lượt thích
ignore_reblogs: Bỏ qua lượt đăng lại
interaction_exceptions: Ngoại lệ dựa trên tương tác
- interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt.
+ interaction_exceptions_explanation: Lưu ý là không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng bị giảm lượt thích hoặc đăng lại, dù đã từng đạt.
keep_direct: Giữ lại tin nhắn
keep_direct_hint: Không xóa tin nhắn của bạn
keep_media: Giữ lại những tút có đính kèm media
@@ -1778,7 +1778,7 @@ vi:
sensitive_content: NSFW
strikes:
errors:
- too_late: Đã quá trễ để kháng cáo
+ too_late: Đã quá trễ để khiếu nại
tags:
does_not_match_previous_name: không khớp với tên trước
themes:
@@ -1852,8 +1852,8 @@ vi:
disable: Bạn không còn có thể sử dụng tài khoản của mình, nhưng hồ sơ của bạn và dữ liệu khác vẫn còn nguyên. Bạn có thể yêu cầu sao lưu dữ liệu của mình, thay đổi cài đặt tài khoản hoặc xóa tài khoản của bạn.
mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm.
sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột.
- silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn.
- suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa.
+ silence: Bạn vẫn có thể sử dụng tài khoản của mình và người khác vẫn có thể theo dõi bạn, nhưng chỉ những người đã theo dõi bạn mới thấy tút của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác.
+ suspend: Tài khoản của bạn, hồ sơ và các dữ liệu khác sẽ không thể truy cập được nữa. Bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn trong vòng 30 ngày, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để phòng khi bạn được bỏ vô hiệu hóa.
reason: 'Lý do:'
statuses: 'Tút vi phạm:'
subject:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 26548046974a6b..025bc2b6dd100d 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -596,7 +596,7 @@ zh-CN:
actions_no_posts: 该举报没有相关嘟文可供删除
add_to_report: 增加更多举报内容
already_suspended_badges:
- local: 已经在此服务器上暂停
+ local: 已在此服务器上被封禁
remote: 已在其所属服务器被封禁
are_you_sure: 你确定吗?
assign_to_self: 接管
@@ -1699,8 +1699,8 @@ zh-CN:
severed_relationships:
download: 下载 (%{count})
event_type:
- account_suspension: 账户被封禁 (%{target_name})
- domain_block: 服务器被封禁 (%{target_name})
+ account_suspension: 封禁账户 (%{target_name})
+ domain_block: 封禁服务器 (%{target_name})
user_domain_block: 你屏蔽了 %{target_name}
lost_followers: 失去的关注者
lost_follows: 失去的关注
@@ -1876,7 +1876,7 @@ zh-CN:
apps_android_action: 从 Google Play 下载
apps_ios_action: 从 App Store 下载
apps_step: 下载我们的官方应用。
- apps_title: Mastodon应用
+ apps_title: Mastodon 应用
checklist_subtitle: 让我们带你开启这片社交新天地:
checklist_title: 欢迎清单
edit_profile_action: 个性化
@@ -1884,16 +1884,16 @@ zh-CN:
edit_profile_title: 个性化你的个人资料
explanation: 下面是几个小贴士,希望它们能帮到你
feature_action: 了解更多
- feature_audience: Mastodon为你提供了无需中间商即可管理受众的独特可能。Mastodon可被部署在你自己的基础设施上,允许你关注其它任何Mastodon在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。
+ feature_audience: Mastodon 为你提供了无需中间商即可管理受众的独特可能。Mastodon 可被部署在你自己的基础设施上,允许你关注其它任何 Mastodon 在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。
feature_audience_title: 放手去建立起你的受众
feature_control: 你最清楚你想在你自己的主页中看到什么动态。没有算法或广告浪费你的时间。你可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让你的互联网的角落更合自己的心意。
feature_control_title: 掌控自己的时间线
- feature_creativity: Mastodon支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。
+ feature_creativity: Mastodon 支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。
feature_creativity_title: 无与伦比的创造力
- feature_moderation: Mastodon将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。
+ feature_moderation: Mastodon 将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。
feature_moderation_title: 管理,本应如此
follow_action: 关注
- follow_step: 关注有趣的人,这就是Mastodon的意义所在。
+ follow_step: 关注有趣的人,这就是 Mastodon 的意义所在。
follow_title: 个性化你的首页动态
follows_subtitle: 关注知名账户
follows_title: 推荐关注
@@ -1907,8 +1907,8 @@ zh-CN:
post_step: 向世界打个招呼吧。
post_title: 发布你的第一条嘟文
share_action: 分享
- share_step: 让你的朋友知道如何在Mastodon找到你。
- share_title: 分享你的Mastodon个人资料
+ share_step: 让你的朋友知道如何在 Mastodon 找到你。
+ share_title: 分享你的 Mastodon 个人资料
sign_in_action: 登录
subject: 欢迎来到 Mastodon
title: "%{name},欢迎你的加入!"
diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake
index 79599bd91768f4..73de0c120faa09 100644
--- a/lib/tasks/db.rake
+++ b/lib/tasks/db.rake
@@ -7,6 +7,17 @@ namespace :db do
namespace :encryption do
desc 'Generate a set of keys for configuring Active Record encryption in a given environment'
task :init do # rubocop:disable Rails/RakeEnvironment
+ if %w(
+ ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
+ ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
+ ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
+ ).any? { |key| ENV.key?(key) }
+ pastel = Pastel.new
+ puts pastel.red(<<~MSG)
+ WARNING: It looks like encryption secrets have already been set. Please ensure you are not changing secrets for a Mastodon installation that already uses them, as this will cause data loss and other issues that are difficult to recover from.
+ MSG
+ end
+
puts <<~MSG
Add the following secret environment variables to your Mastodon environment (e.g. .env.production), ensure they are shared across all your nodes and do not change them after they are set:#{' '}
diff --git a/package.json b/package.json
index 4bfd031480b5a5..3414da9916db6e 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@rails/ujs": "7.1.400",
+ "@rails/ujs": "7.1.401",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb
deleted file mode 100644
index b6471e80b2766b..00000000000000
--- a/spec/controllers/admin/invites_controller_spec.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::InvitesController do
- render_views
-
- let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #index' do
- subject { get :index, params: { available: true } }
-
- let!(:invite) { Fabricate(:invite) }
-
- it 'renders index page' do
- expect(subject).to render_template :index
- expect(response.body)
- .to include(invite.code)
- end
- end
-
- describe 'POST #create' do
- subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } }
-
- it 'succeeds to create a invite' do
- expect { subject }.to change(Invite, :count).by(1)
- expect(subject).to redirect_to admin_invites_path
- expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10)
- end
- end
-
- describe 'DELETE #destroy' do
- subject { delete :destroy, params: { id: invite.id } }
-
- let!(:invite) { Fabricate(:invite, expires_at: nil) }
-
- it 'expires invite' do
- expect(subject).to redirect_to admin_invites_path
- expect(invite.reload).to be_expired
- end
- end
-
- describe 'POST #deactivate_all' do
- before { Fabricate(:invite, expires_at: nil) }
-
- it 'expires all invites, then redirects to admin_invites_path' do
- expect { post :deactivate_all }
- .to change { Invite.exists?(expires_at: nil) }
- .from(true)
- .to(false)
-
- expect(response).to redirect_to admin_invites_path
- end
- end
-end
diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb
deleted file mode 100644
index 1df2bc400309a0..00000000000000
--- a/spec/controllers/admin/tags_controller_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::TagsController do
- render_views
-
- before do
- sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin'))
- end
-
- describe 'GET #index' do
- before do
- Fabricate(:tag)
-
- tag_filter = instance_double(Admin::TagFilter, results: Tag.all)
- allow(Admin::TagFilter).to receive(:new).and_return(tag_filter)
- end
-
- let(:params) { { order: 'newest' } }
-
- it 'returns http success' do
- get :index
-
- expect(response).to have_http_status(200)
- expect(response).to render_template(:index)
-
- expect(Admin::TagFilter)
- .to have_received(:new)
- .with(hash_including(params))
- end
-
- describe 'with filters' do
- let(:params) { { order: 'newest', name: 'test' } }
-
- it 'returns http success' do
- get :index, params: { name: 'test' }
-
- expect(response).to have_http_status(200)
- expect(response).to render_template(:index)
-
- expect(Admin::TagFilter)
- .to have_received(:new)
- .with(hash_including(params))
- end
- end
- end
-
- describe 'GET #show' do
- let!(:tag) { Fabricate(:tag) }
-
- before do
- get :show, params: { id: tag.id }
- end
-
- it 'returns status 200' do
- expect(response).to have_http_status(200)
- end
- end
-
- describe 'PUT #update' do
- let!(:tag) { Fabricate(:tag, listable: false) }
-
- context 'with valid params' do
- it 'updates the tag' do
- put :update, params: { id: tag.id, tag: { listable: '1' } }
-
- expect(response).to redirect_to(admin_tag_path(tag.id))
- expect(tag.reload).to be_listable
- end
- end
-
- context 'with invalid params' do
- it 'does not update the tag' do
- put :update, params: { id: tag.id, tag: { name: 'cant-change-name' } }
-
- expect(response).to have_http_status(200)
- expect(response).to render_template(:show)
- end
- end
- end
-end
diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb
index d9702251f41d0a..121e4aa6c6f9e6 100644
--- a/spec/controllers/statuses_controller_spec.rb
+++ b/spec/controllers/statuses_controller_spec.rb
@@ -736,76 +736,4 @@
end
end
end
-
- describe 'GET #embed' do
- let(:account) { Fabricate(:account) }
- let(:status) { Fabricate(:status, account: account) }
-
- context 'when account is suspended' do
- let(:account) { Fabricate(:account, suspended: true) }
-
- before do
- get :embed, params: { account_username: account.username, id: status.id }
- end
-
- it 'returns http gone' do
- expect(response).to have_http_status(410)
- end
- end
-
- context 'when status is a reblog' do
- let(:original_account) { Fabricate(:account, domain: 'example.com') }
- let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') }
- let(:status) { Fabricate(:status, account: account, reblog: original_status) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when status is public' do
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'renders status successfully', :aggregate_failures do
- expect(response)
- .to have_http_status(200)
- .and render_template(:embed)
- expect(response.headers).to include(
- 'Vary' => 'Accept, Accept-Language, Cookie',
- 'Cache-Control' => include('public'),
- 'Link' => include('activity+json')
- )
- end
- end
-
- context 'when status is private' do
- let(:status) { Fabricate(:status, account: account, visibility: :private) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
-
- context 'when status is direct' do
- let(:status) { Fabricate(:status, account: account, visibility: :direct) }
-
- before do
- get :embed, params: { account_username: status.account.username, id: status.id }
- end
-
- it 'returns http not found' do
- expect(response).to have_http_status(404)
- end
- end
- end
end
diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb
new file mode 100644
index 00000000000000..30c48b90c6f4b4
--- /dev/null
+++ b/spec/fabricators/ip_block_fabricator.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+Fabricator(:ip_block) do
+ severity { :sign_up_requires_approval }
+ ip { sequence(:ip) { |n| "10.0.0.#{n}" } }
+end
diff --git a/spec/helpers/formatting_helper_spec.rb b/spec/helpers/formatting_helper_spec.rb
index 136a609b1c9cf4..5ff534e4eb3873 100644
--- a/spec/helpers/formatting_helper_spec.rb
+++ b/spec/helpers/formatting_helper_spec.rb
@@ -6,19 +6,57 @@
include Devise::Test::ControllerHelpers
describe '#rss_status_content_format' do
- let(:status) { Fabricate(:status, text: 'Hello world<>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) }
- let(:html) { helper.rss_status_content_format(status) }
+ subject { helper.rss_status_content_format(status) }
- it 'renders the spoiler text' do
- expect(html).to include('This is a spoiler<>
Hello world<>
') + context 'with a spoiler and an emoji and a poll' do + let(:status) { Fabricate(:status, text: 'Hello :world: <>', spoiler_text: 'This is a spoiler<>', poll: Fabricate(:poll, options: %w(Yes<> No))) } + + before { Fabricate :custom_emoji, shortcode: 'world' } + + it 'renders the formatted elements' do + expect(spoiler_node.css('strong').text) + .to eq('Content warning:') + expect(spoiler_node.text) + .to include('This is a spoiler<>') + expect(content_node.text) + .to eq('Hello <>') + expect(content_node.css('img').first.to_h.symbolize_keys) + .to include( + rel: 'emoji', + title: ':world:' + ) + expect(poll_node.css('radio').first.text) + .to eq('Yes<>') + expect(poll_node.css('radio').first.to_h.symbolize_keys) + .to include( + disabled: 'disabled' + ) + end + + def spoiler_node + parsed_result.css('p').first + end + + def content_node + parsed_result.css('p')[1] + end + + def poll_node + parsed_result.css('p').last + end end - it 'renders the poll' do - expect(html).to include('a text by a nerd who uses an HTML tag in text
', uri: nil) } + let(:status) { Fabricate.build(:status, text: 'a text by a nerd who uses an HTML tag in text
', uri: nil) } it 'returns the raw text' do expect(subject).to eq 'a text by a nerd who uses an HTML tag in text
' @@ -15,10 +15,10 @@ end context 'when status is remote' do - let(:remote_account) { Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } + let(:remote_account) { Fabricate.build(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') } context 'when text contains inline HTML tags' do - let(:status) { Fabricate(:status, account: remote_account, text: 'Lorem ipsum') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem ipsum') } it 'strips the tags' do expect(subject).to eq 'Lorem ipsum' @@ -26,7 +26,7 @@ end context 'when text containstags' do - let(:status) { Fabricate(:status, account: remote_account, text: '
Lorem
ipsum
') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem
ipsum
') } it 'inserts a newline' do expect(subject).to eq "Lorem\nipsum" @@ -34,7 +34,7 @@ end context 'when text contains a singleLorem 明日 ipsum
') } + let(:status) { Fabricate.build(:status, account: remote_account, text: 'Lorem 明日 ipsum
') } it 'strips the comment' do expect(subject).to eq 'Lorem 明日 (Ashita) ipsum' diff --git a/spec/lib/vacuum/access_tokens_vacuum_spec.rb b/spec/lib/vacuum/access_tokens_vacuum_spec.rb index 54760c41bd4531..8768f6b2dc170c 100644 --- a/spec/lib/vacuum/access_tokens_vacuum_spec.rb +++ b/spec/lib/vacuum/access_tokens_vacuum_spec.rb @@ -14,32 +14,24 @@ let!(:expired_access_grant) { Fabricate(:access_grant, expires_in: 59.minutes.to_i, created_at: 1.hour.ago) } let!(:active_access_grant) { Fabricate(:access_grant) } - before do + it 'deletes revoked/expired access tokens and revoked/expired grants, but preserves active tokens/grants' do subject.perform - end - - it 'deletes revoked access tokens' do - expect { revoked_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'deletes expired access tokens' do - expect { expired_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end - it 'deletes revoked access grants' do - expect { revoked_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes expired access grants' do - expect { expired_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete active access tokens' do - expect { active_access_token.reload }.to_not raise_error - end + expect { active_access_token.reload } + .to_not raise_error - it 'does not delete active access grants' do - expect { active_access_grant.reload }.to_not raise_error + expect { active_access_grant.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/backups_vacuum_spec.rb b/spec/lib/vacuum/backups_vacuum_spec.rb index 867dbe4020c1f0..4a025352cbf7b7 100644 --- a/spec/lib/vacuum/backups_vacuum_spec.rb +++ b/spec/lib/vacuum/backups_vacuum_spec.rb @@ -11,16 +11,13 @@ let!(:expired_backup) { Fabricate(:backup, created_at: (retention_period + 1.day).ago) } let!(:current_backup) { Fabricate(:backup) } - before do + it 'deletes backups past the retention period but preserves those within the period' do subject.perform - end - - it 'deletes backups past the retention period' do - expect { expired_backup.reload }.to raise_error ActiveRecord::RecordNotFound - end - it 'does not delete backups within the retention period' do - expect { current_backup.reload }.to_not raise_error + expect { expired_backup.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { current_backup.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/feeds_vacuum_spec.rb b/spec/lib/vacuum/feeds_vacuum_spec.rb index ede1e3c36097e6..38459a558fbab1 100644 --- a/spec/lib/vacuum/feeds_vacuum_spec.rb +++ b/spec/lib/vacuum/feeds_vacuum_spec.rb @@ -14,11 +14,11 @@ redis.zadd(feed_key_for(active_user), 1, 1) redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2) redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) - - subject.perform end it 'clears feeds of inactive users and lists' do + subject.perform + expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 expect(redis.zcard(feed_key_for(active_user))).to eq 1 expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false diff --git a/spec/lib/vacuum/media_attachments_vacuum_spec.rb b/spec/lib/vacuum/media_attachments_vacuum_spec.rb index 1039c36cea6ff2..f7749038cb432e 100644 --- a/spec/lib/vacuum/media_attachments_vacuum_spec.rb +++ b/spec/lib/vacuum/media_attachments_vacuum_spec.rb @@ -17,9 +17,9 @@ let!(:old_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } let!(:new_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } - before { subject.perform } - it 'handles attachments based on metadata details' do + subject.perform + expect(old_remote_media.reload.file) # Remote and past retention period .to be_blank expect(old_local_media.reload.file) # Local and past retention diff --git a/spec/lib/vacuum/preview_cards_vacuum_spec.rb b/spec/lib/vacuum/preview_cards_vacuum_spec.rb index 9dbdf0bc2fe70c..caeedd3269b5db 100644 --- a/spec/lib/vacuum/preview_cards_vacuum_spec.rb +++ b/spec/lib/vacuum/preview_cards_vacuum_spec.rb @@ -15,24 +15,22 @@ before do old_preview_card.statuses << Fabricate(:status) new_preview_card.statuses << Fabricate(:status) + end + it 'handles preview card cleanup' do subject.perform - end - it 'deletes cache of preview cards last updated before the retention period' do - expect(old_preview_card.reload.image).to be_blank - end + expect(old_preview_card.reload.image) # last updated before retention period + .to be_blank - it 'does not delete cache of preview cards last updated within the retention period' do - expect(new_preview_card.reload.image).to_not be_blank - end + expect(new_preview_card.reload.image) # last updated within the retention period + .to_not be_blank - it 'does not delete attached preview cards' do - expect(new_preview_card.reload).to be_persisted - end + expect(new_preview_card.reload) # Keep attached preview cards + .to be_persisted - it 'does not delete orphaned preview cards in the retention period' do - expect(orphaned_preview_card.reload).to be_persisted + expect(orphaned_preview_card.reload) # keep orphaned cards in the retention period + .to be_persisted end end end diff --git a/spec/lib/vacuum/statuses_vacuum_spec.rb b/spec/lib/vacuum/statuses_vacuum_spec.rb index d5c01395064e16..1fff8648797a8e 100644 --- a/spec/lib/vacuum/statuses_vacuum_spec.rb +++ b/spec/lib/vacuum/statuses_vacuum_spec.rb @@ -15,24 +15,20 @@ let!(:local_status_old) { Fabricate(:status, created_at: (retention_period + 2.days).ago) } let!(:local_status_recent) { Fabricate(:status, created_at: (retention_period - 2.days).ago) } - before do + it 'deletes remote statuses past the retention period and keeps others' do subject.perform - end - it 'deletes remote statuses past the retention period' do - expect { remote_status_old.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { remote_status_old.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete local statuses past the retention period' do - expect { local_status_old.reload }.to_not raise_error - end + expect { local_status_old.reload } + .to_not raise_error - it 'does not delete remote statuses within the retention period' do - expect { remote_status_recent.reload }.to_not raise_error - end + expect { remote_status_recent.reload } + .to_not raise_error - it 'does not delete local statuses within the retention period' do - expect { local_status_recent.reload }.to_not raise_error + expect { local_status_recent.reload } + .to_not raise_error end end end diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index a08fd723a4d8f4..c142a0359ac6fe 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -16,6 +16,8 @@ describe 'save hooks' do context 'when widening a policy' do + subject { account_statuses_cleanup_policy.last_inspected } + let!(:account_statuses_cleanup_policy) do Fabricate(:account_statuses_cleanup_policy, account: account, @@ -33,64 +35,64 @@ account_statuses_cleanup_policy.record_last_inspected(42) end - it 'invalidates last_inspected when widened because of keep_direct' do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_direct' do + before { account_statuses_cleanup_policy.update(keep_direct: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_pinned' do - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_pinned' do + before { account_statuses_cleanup_policy.update(keep_pinned: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_polls' do - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_polls' do + before { account_statuses_cleanup_policy.update(keep_polls: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_media' do - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_media' do + before { account_statuses_cleanup_policy.update(keep_media: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_fav' do - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_fav' do + before { account_statuses_cleanup_policy.update(keep_self_fav: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_bookmark' do - account_statuses_cleanup_policy.keep_self_bookmark = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_bookmark' do + before { account_statuses_cleanup_policy.update(keep_self_bookmark: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_favs' do - account_statuses_cleanup_policy.min_favs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disabled min_favs' do - account_statuses_cleanup_policy.min_favs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disabled min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: nil) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disable min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disable min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: nil) } + + it { is_expected.to be_nil } end end diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb index 84f0f318f42583..62d7e40e28cef7 100644 --- a/spec/models/block_spec.rb +++ b/spec/models/block_spec.rb @@ -3,11 +3,37 @@ require 'rails_helper' RSpec.describe Block do - describe 'validations' do + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } end + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :block, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + end + it 'removes blocking cache after creation' do account = Fabricate(:account) target_account = Fabricate(:account) diff --git a/spec/models/domain_block_spec.rb b/spec/models/domain_block_spec.rb index 8278454cd7811a..14f904ea7fa6a5 100644 --- a/spec/models/domain_block_spec.rb +++ b/spec/models/domain_block_spec.rb @@ -3,14 +3,13 @@ require 'rails_helper' RSpec.describe DomainBlock do - describe 'validations' do + describe 'Validations' do it { is_expected.to validate_presence_of(:domain) } - it 'is invalid if the same normalized domain already exists' do - _domain_block = Fabricate(:domain_block, domain: 'にゃん') - domain_block_with_normalized_value = Fabricate.build(:domain_block, domain: 'xn--r9j5b5b') - domain_block_with_normalized_value.valid? - expect(domain_block_with_normalized_value).to model_have_error_on_field(:domain) + context 'when a normalized domain exists' do + before { Fabricate(:domain_block, domain: 'にゃん') } + + it { is_expected.to_not allow_value('xn--r9j5b5b').for(:domain) } end end @@ -105,4 +104,26 @@ end end end + + describe '#policies' do + subject { domain_block.policies } + + context 'when severity is suspend' do + let(:domain_block) { Fabricate.build :domain_block, severity: :suspend } + + it { is_expected.to eq(%i(suspend)) } + end + + context 'when severity is noop' do + let(:domain_block) { Fabricate.build :domain_block, severity: :noop, reject_media: true } + + it { is_expected.to eq(%i(reject_media)) } + end + + context 'when severity is silence' do + let(:domain_block) { Fabricate.build :domain_block, severity: :silence, reject_reports: true } + + it { is_expected.to eq(%i(silence reject_reports)) } + end + end end diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 736f3615d0d3c8..66f521ab3f64f5 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Poll do - describe 'scopes' do + describe 'Scopes' do let(:status) { Fabricate(:status) } let(:attached_poll) { Fabricate(:poll, status: status) } let(:not_attached_poll) do @@ -13,7 +13,7 @@ end end - describe 'attached' do + describe '.attached' do it 'finds the correct records' do results = described_class.attached @@ -21,7 +21,7 @@ end end - describe 'unattached' do + describe '.unattached' do it 'finds the correct records' do results = described_class.unattached @@ -30,11 +30,23 @@ end end - describe 'validations' do - context 'when not valid' do - subject { Fabricate.build(:poll) } - - it { is_expected.to validate_presence_of(:expires_at) } + describe '#reset_votes!' do + let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 } + let!(:vote) { Fabricate :poll_vote, poll: } + + it 'resets vote data and deletes votes' do + expect { poll.reset_votes! } + .to change(poll, :cached_tallies).to([0, 0]) + .and change(poll, :votes_count).to(0) + .and(change(poll, :voters_count).to(0)) + expect { vote.reload } + .to raise_error(ActiveRecord::RecordNotFound) end end + + describe 'Validations' do + subject { Fabricate.build(:poll) } + + it { is_expected.to validate_presence_of(:expires_at) } + end end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 20fcdb0024f1c0..5ea58cd16f1f7f 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -54,24 +54,20 @@ context 'without a viewer' do let(:viewer) { nil } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end end context 'with a viewer' do let(:viewer) { Fabricate(:account, username: 'viewer') } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end end end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index df67c365eb34a0..90f5968438644f 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -472,11 +472,53 @@ end end - describe 'validation' do - it 'disallow empty uri for remote status' do - alice.update(domain: 'example.com') - status = Fabricate.build(:status, uri: '', account: alice) - expect(status).to model_have_error_on_field(:uri) + describe 'Validations' do + context 'with a remote account' do + subject { Fabricate.build :status, account: remote_account } + + let(:remote_account) { Fabricate :account, domain: 'example.com' } + + it { is_expected.to_not allow_value('').for(:uri) } + end + end + + describe 'Callbacks' do + describe 'Stripping content when required' do + context 'with a remote account' do + subject { Fabricate.build :status, local: false, account:, text: ' text ', spoiler_text: ' spoiler ' } + + let(:account) { Fabricate.build :account, domain: 'host.example' } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :text) + .and not_change(subject, :spoiler_text) + end + end + + context 'with a local account' do + let(:account) { Fabricate.build :account, domain: nil } + + context 'with populated fields' do + subject { Fabricate.build :status, local: true, account:, text: ' text ', spoiler_text: ' spoiler ' } + + it 'strips content' do + expect { subject.valid? } + .to change(subject, :text).to('text') + .and change(subject, :spoiler_text).to('spoiler') + end + end + + context 'with empty fields' do + subject { Fabricate.build :status, local: true, account:, text: nil, spoiler_text: nil } + + it 'preserves content' do + expect { subject.valid? } + .to not_change(subject, :text) + .and not_change(subject, :spoiler_text) + end + end + end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index d28e6658f1f6c2..4393be5a4efd54 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -387,23 +387,43 @@ def within_duration_window_days end end - describe 'token_for_app' do + describe '#token_for_app' do let(:user) { Fabricate(:user) } - let(:app) { Fabricate(:application, owner: user) } - it 'returns a token' do - expect(user.token_for_app(app)).to be_a(Doorkeeper::AccessToken) + context 'when user owns app but does not have tokens' do + let(:app) { Fabricate(:application, owner: user) } + + it 'creates and returns a persisted token' do + expect { user.token_for_app(app) } + .to change(Doorkeeper::AccessToken.where(resource_owner_id: user.id, application: app), :count).by(1) + end end - it 'persists a token' do - t = user.token_for_app(app) - expect(user.token_for_app(app)).to eql(t) + context 'when user owns app and already has tokens' do + let(:app) { Fabricate(:application, owner: user) } + let!(:token) { Fabricate :access_token, application: app, resource_owner_id: user.id } + + it 'returns a persisted token' do + expect(user.token_for_app(app)) + .to be_a(Doorkeeper::AccessToken) + .and eq(token) + end end - it 'is nil if user does not own app' do - app.update!(owner: nil) + context 'when user does not own app' do + let(:app) { Fabricate(:application) } - expect(user.token_for_app(app)).to be_nil + it 'returns nil' do + expect(user.token_for_app(app)) + .to be_nil + end + end + + context 'when app is nil' do + it 'returns nil' do + expect(user.token_for_app(nil)) + .to be_nil + end end end diff --git a/spec/policies/account_moderation_note_policy_spec.rb b/spec/policies/account_moderation_note_policy_spec.rb index 8c37acc39fee83..8b33a71012702a 100644 --- a/spec/policies/account_moderation_note_policy_spec.rb +++ b/spec/policies/account_moderation_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountModerationNotePolicy do subject { described_class } @@ -12,13 +11,13 @@ permissions :create? do context 'when staff' do it 'grants to create' do - expect(subject).to permit(admin, described_class) + expect(subject).to permit(admin, AccountModerationNote) end end context 'when not staff' do it 'denies to create' do - expect(subject).to_not permit(john, described_class) + expect(subject).to_not permit(john, AccountModerationNote) end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index d7a21d8e39a77e..75724e831bed58 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountPolicy do subject { described_class } @@ -24,7 +23,7 @@ end end - permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do + permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header?, :sensitive?, :warn? do context 'when staff' do it 'permits' do expect(subject).to permit(admin, alice) diff --git a/spec/policies/account_warning_policy_spec.rb b/spec/policies/account_warning_policy_spec.rb new file mode 100644 index 00000000000000..9abc9d35d638c7 --- /dev/null +++ b/spec/policies/account_warning_policy_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountWarningPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :show? do + context 'with an admin' do + it { is_expected.to permit(admin, AccountWarning.new) } + end + + context 'with a non-admin' do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id)) } + end + end + end + + permissions :appeal? do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + context 'when record is appealable' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago + 1.hour)) } + end + + context 'when record is not appealable' do + it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago - 1.hour)) } + end + end + end +end diff --git a/spec/policies/account_warning_preset_policy_spec.rb b/spec/policies/account_warning_preset_policy_spec.rb index 53e224f19f7f00..33f2fb11870b2c 100644 --- a/spec/policies/account_warning_preset_policy_spec.rb +++ b/spec/policies/account_warning_preset_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountWarningPresetPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, AccountWarningPreset) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, AccountWarningPreset) end end end diff --git a/spec/policies/admin/status_policy_spec.rb b/spec/policies/admin/status_policy_spec.rb index 07af425516d93b..4df29393e3ae2d 100644 --- a/spec/policies/admin/status_policy_spec.rb +++ b/spec/policies/admin/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe Admin::StatusPolicy do let(:policy) { described_class } @@ -13,13 +12,13 @@ permissions :index?, :update?, :review?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Status) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Status) end end end diff --git a/spec/policies/announcement_policy_spec.rb b/spec/policies/announcement_policy_spec.rb index 503ffca6dca518..ab0c1dbaf5a2bb 100644 --- a/spec/policies/announcement_policy_spec.rb +++ b/spec/policies/announcement_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AnnouncementPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Announcement) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Announcement) end end end diff --git a/spec/policies/appeal_policy_spec.rb b/spec/policies/appeal_policy_spec.rb index 1bf8ce0a0da0e6..cdb93bf56cdf46 100644 --- a/spec/policies/appeal_policy_spec.rb +++ b/spec/policies/appeal_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AppealPolicy do let(:policy) { described_class } @@ -12,18 +11,18 @@ permissions :index? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Appeal) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Appeal) end end end - permissions :reject? do + permissions :reject?, :approve? do context 'with an admin' do context 'with a pending appeal' do before { allow(appeal).to receive(:pending?).and_return(true) } diff --git a/spec/policies/audit_log_policy_spec.rb b/spec/policies/audit_log_policy_spec.rb new file mode 100644 index 00000000000000..d9d9359433356e --- /dev/null +++ b/spec/policies/audit_log_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AuditLogPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/backup_policy_spec.rb b/spec/policies/backup_policy_spec.rb index 28cb65d7890730..031021d91dfe2c 100644 --- a/spec/policies/backup_policy_spec.rb +++ b/spec/policies/backup_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe BackupPolicy do subject { described_class } diff --git a/spec/policies/canonical_email_block_policy_spec.rb b/spec/policies/canonical_email_block_policy_spec.rb index f5029d9e6b60e8..b253b439a67dd4 100644 --- a/spec/policies/canonical_email_block_policy_spec.rb +++ b/spec/policies/canonical_email_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CanonicalEmailBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :show?, :test?, :create?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, CanonicalEmailBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, CanonicalEmailBlock) end end end diff --git a/spec/policies/custom_emoji_policy_spec.rb b/spec/policies/custom_emoji_policy_spec.rb index cb869c7d9a7ed7..189885938cf469 100644 --- a/spec/policies/custom_emoji_policy_spec.rb +++ b/spec/policies/custom_emoji_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CustomEmojiPolicy do subject { described_class } diff --git a/spec/policies/dashboard_policy_spec.rb b/spec/policies/dashboard_policy_spec.rb new file mode 100644 index 00000000000000..90c71db381b5cf --- /dev/null +++ b/spec/policies/dashboard_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DashboardPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/delivery_policy_spec.rb b/spec/policies/delivery_policy_spec.rb index bb82389eec8a47..8bc200159ac6e1 100644 --- a/spec/policies/delivery_policy_spec.rb +++ b/spec/policies/delivery_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DeliveryPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :clear_delivery_errors?, :restart_delivery?, :stop_delivery? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, nil) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, nil) end end end diff --git a/spec/policies/domain_allow_policy_spec.rb b/spec/policies/domain_allow_policy_spec.rb new file mode 100644 index 00000000000000..1d285065b854f5 --- /dev/null +++ b/spec/policies/domain_allow_policy_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DomainAllowPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:john) { Fabricate(:account) } + + permissions :index?, :show?, :create?, :destroy? do + context 'when admin' do + it 'permits' do + expect(subject).to permit(admin, DomainAllow) + end + end + + context 'when not admin' do + it 'denies' do + expect(subject).to_not permit(john, DomainAllow) + end + end + end +end diff --git a/spec/policies/domain_block_policy_spec.rb b/spec/policies/domain_block_policy_spec.rb index 4c89f3f37429ab..7c77d1870d0a9b 100644 --- a/spec/policies/domain_block_policy_spec.rb +++ b/spec/policies/domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DomainBlockPolicy do subject { described_class } @@ -9,7 +8,7 @@ let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } let(:john) { Fabricate(:account) } - permissions :index?, :show?, :create?, :destroy? do + permissions :index?, :show?, :create?, :destroy?, :update? do context 'when admin' do it 'permits' do expect(subject).to permit(admin, DomainBlock) diff --git a/spec/policies/email_domain_block_policy_spec.rb b/spec/policies/email_domain_block_policy_spec.rb index 7ecff4be499a16..e98d65a3c73408 100644 --- a/spec/policies/email_domain_block_policy_spec.rb +++ b/spec/policies/email_domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe EmailDomainBlockPolicy do subject { described_class } diff --git a/spec/policies/follow_recommendation_policy_spec.rb b/spec/policies/follow_recommendation_policy_spec.rb index ae74d5c3a862ab..665ed9b0595085 100644 --- a/spec/policies/follow_recommendation_policy_spec.rb +++ b/spec/policies/follow_recommendation_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe FollowRecommendationPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :show?, :suppress?, :unsuppress? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, FollowRecommendation) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, FollowRecommendation) end end end diff --git a/spec/policies/instance_policy_spec.rb b/spec/policies/instance_policy_spec.rb index a0d9a008b7b4d6..6cdc7380228296 100644 --- a/spec/policies/instance_policy_spec.rb +++ b/spec/policies/instance_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InstancePolicy do subject { described_class } diff --git a/spec/policies/invite_policy_spec.rb b/spec/policies/invite_policy_spec.rb index cbe3735d806ba5..3717a449993b95 100644 --- a/spec/policies/invite_policy_spec.rb +++ b/spec/policies/invite_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InvitePolicy do subject { described_class } diff --git a/spec/policies/ip_block_policy_spec.rb b/spec/policies/ip_block_policy_spec.rb index 97bc239e9ac91e..33ea342c10bffc 100644 --- a/spec/policies/ip_block_policy_spec.rb +++ b/spec/policies/ip_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe IpBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :show?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, IpBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, IpBlock) end end end diff --git a/spec/policies/poll_policy_spec.rb b/spec/policies/poll_policy_spec.rb new file mode 100644 index 00000000000000..aa1701cb06b750 --- /dev/null +++ b/spec/policies/poll_policy_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollPolicy do + subject { described_class } + + let(:account) { Fabricate(:account) } + let(:poll) { Fabricate :poll } + + permissions :vote? do + context 'when account cannot view status' do + before { poll.status.update(visibility: :private) } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when account can view status' do + context 'when accounts do not block each other' do + it { is_expected.to permit(account, poll) } + end + + context 'when view blocks poll creator' do + before { Fabricate :block, account: account, target_account: poll.account } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when poll creator blocks viewer' do + before { Fabricate :block, account: poll.account, target_account: account } + + it { is_expected.to_not permit(account, poll) } + end + end + end +end diff --git a/spec/policies/preview_card_policy_spec.rb b/spec/policies/preview_card_policy_spec.rb index a1944303e17ffc..d02a6016cd6944 100644 --- a/spec/policies/preview_card_policy_spec.rb +++ b/spec/policies/preview_card_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCard) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCard) end end end diff --git a/spec/policies/preview_card_provider_policy_spec.rb b/spec/policies/preview_card_provider_policy_spec.rb index 676039a1b79a97..5e25b364a4afe0 100644 --- a/spec/policies/preview_card_provider_policy_spec.rb +++ b/spec/policies/preview_card_provider_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardProviderPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCardProvider) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCardProvider) end end end diff --git a/spec/policies/relay_policy_spec.rb b/spec/policies/relay_policy_spec.rb index 29ba02c26a8bae..5983b2d2ffb20a 100644 --- a/spec/policies/relay_policy_spec.rb +++ b/spec/policies/relay_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RelayPolicy do subject { described_class } diff --git a/spec/policies/report_note_policy_spec.rb b/spec/policies/report_note_policy_spec.rb index b40a8788875fe5..02317f763adad8 100644 --- a/spec/policies/report_note_policy_spec.rb +++ b/spec/policies/report_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportNotePolicy do subject { described_class } diff --git a/spec/policies/report_policy_spec.rb b/spec/policies/report_policy_spec.rb index 4fc41780758933..67f40b518841e5 100644 --- a/spec/policies/report_policy_spec.rb +++ b/spec/policies/report_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportPolicy do subject { described_class } diff --git a/spec/policies/rule_policy_spec.rb b/spec/policies/rule_policy_spec.rb index 5d435e38c1fe33..3086f304463ddf 100644 --- a/spec/policies/rule_policy_spec.rb +++ b/spec/policies/rule_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RulePolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Rule) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Rule) end end end diff --git a/spec/policies/settings_policy_spec.rb b/spec/policies/settings_policy_spec.rb index 4a993149052b15..48821c706a7fff 100644 --- a/spec/policies/settings_policy_spec.rb +++ b/spec/policies/settings_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SettingsPolicy do subject { described_class } diff --git a/spec/policies/software_update_policy_spec.rb b/spec/policies/software_update_policy_spec.rb index e19ba616128db2..2bda84cce9e574 100644 --- a/spec/policies/software_update_policy_spec.rb +++ b/spec/policies/software_update_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SoftwareUpdatePolicy do subject { described_class } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 36ac8d8027a146..538742610c7ea7 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe StatusPolicy, type: :model do subject { described_class } diff --git a/spec/policies/tag_policy_spec.rb b/spec/policies/tag_policy_spec.rb index 35da3cc62a03df..23166e466921b6 100644 --- a/spec/policies/tag_policy_spec.rb +++ b/spec/policies/tag_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe TagPolicy do subject { described_class } diff --git a/spec/policies/user_policy_spec.rb b/spec/policies/user_policy_spec.rb index 7854547d26db60..11a166a24e0ffc 100644 --- a/spec/policies/user_policy_spec.rb +++ b/spec/policies/user_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe UserPolicy do subject { described_class } @@ -112,4 +111,42 @@ end end end + + permissions :approve?, :reject? do + context 'when admin' do + context 'when user is approved' do + it { is_expected.to_not permit(admin, User.new(approved: true)) } + end + + context 'when user is not approved' do + it { is_expected.to permit(admin, User.new(approved: false)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + end + + permissions :change_role? do + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + + context 'when admin' do + let(:user) { User.new(role: role) } + + context 'when role of admin overrides user role' do + let(:role) { UserRole.new(position: admin.user.role.position - 10, id: 123) } + + it { is_expected.to permit(admin, user) } + end + + context 'when role of admin does not override user role' do + let(:role) { UserRole.new(position: admin.user.role.position + 10, id: 123) } + + it { is_expected.to_not permit(admin, user) } + end + end + end end diff --git a/spec/policies/user_role_policy_spec.rb b/spec/policies/user_role_policy_spec.rb new file mode 100644 index 00000000000000..c48b345d68f6de --- /dev/null +++ b/spec/policies/user_role_policy_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UserRolePolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index?, :create? do + context 'when admin' do + it { is_expected.to permit(admin, UserRole.new) } + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :update? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10, id: 123)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10, id: 123)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :destroy? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10)) } + end + + context 'when everyone role' do + it { is_expected.to_not permit(admin, UserRole.everyone) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end +end diff --git a/spec/policies/webhook_policy_spec.rb b/spec/policies/webhook_policy_spec.rb index 96aaae2c306726..9899235d833673 100644 --- a/spec/policies/webhook_policy_spec.rb +++ b/spec/policies/webhook_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe WebhookPolicy do let(:policy) { described_class } diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 84cee0974f1a42..91a2e21bbbc796 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -43,6 +43,7 @@ require 'capybara/rspec' require 'chewy/rspec' require 'email_spec/rspec' +require 'pundit/rspec' require 'test_prof/recipes/rspec/before_all' Rails.root.glob('spec/support/**/*.rb').each { |f| require f } diff --git a/spec/requests/statuses/embed_spec.rb b/spec/requests/statuses/embed_spec.rb new file mode 100644 index 00000000000000..33c7ea192c80a3 --- /dev/null +++ b/spec/requests/statuses/embed_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Status embed' do + describe 'GET /users/:account_username/statuses/:id/embed' do + subject { get "/users/#{account.username}/statuses/#{status.id}/embed" } + + let(:account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + + context 'when account is suspended' do + let(:account) { Fabricate(:account, suspended: true) } + + it 'returns http gone' do + subject + + expect(response) + .to have_http_status(410) + end + end + + context 'when status is a reblog' do + let(:original_account) { Fabricate(:account, domain: 'example.com') } + let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } + let(:status) { Fabricate(:status, account: account, reblog: original_status) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is public' do + it 'renders status successfully', :aggregate_failures do + subject + + expect(response) + .to have_http_status(200) + expect(response.parsed_body.at('body.embed')) + .to be_present + expect(response.headers).to include( + 'Vary' => 'Accept, Accept-Language, Cookie', + 'Cache-Control' => include('public'), + 'Link' => include('activity+json') + ) + end + end + + context 'when status is private' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is direct' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + end +end diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 285b241ee237e3..a6976193b20ec1 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -14,7 +14,7 @@ let!(:reply_by_account_third) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_visibility_direct) { Fabricate(:status, account: account, thread: parent, visibility: :direct) } - it 'has the expected shape' do + it 'has the expected shape and replies collection' do expect(subject).to include({ '@context' => include('https://www.w3.org/ns/activitystreams'), 'type' => 'Note', @@ -22,26 +22,23 @@ 'contentMap' => include({ 'zh-TW' => a_kind_of(String), }), + 'replies' => replies_collection_values, }) end - it 'has a replies collection' do - expect(subject['replies']['type']).to eql('Collection') + def replies_collection_values + include( + 'type' => eql('Collection'), + 'first' => include( + 'type' => eql('CollectionPage'), + 'items' => reply_items + ) + ) end - it 'has a replies collection with a first Page' do - expect(subject['replies']['first']['type']).to eql('CollectionPage') - end - - it 'includes public self-replies in its replies collection' do - expect(subject['replies']['first']['items']).to include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) - end - - it 'does not include replies from others in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_other_first.uri) - end - - it 'does not include replies with direct visibility in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) + def reply_items + include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) # Public self replies + .and(not_include(reply_by_other_first.uri)) # Replies from others + .and(not_include(reply_by_account_visibility_direct.uri)) # Replies with direct visibility end end diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index cd92fb8d1025ab..ac7a43ff2af4f4 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -18,7 +18,7 @@ describe '#call' do before do translation_service = TranslationService.new - allow(translation_service).to receive(:languages).and_return({ 'en' => ['es'] }) + allow(translation_service).to receive(:languages).and_return({ 'en' => ['es', 'es-MX'] }) allow(translation_service).to receive(:translate) do |texts| texts.map do |text| TranslationService::Translation.new( @@ -37,6 +37,7 @@ .to have_attributes( content: 'Hola
', detected_source_language: 'en', + language: 'es', provider: 'Dummy', status: status ) @@ -101,6 +102,16 @@ expect(media_attachment.description).to eq 'Hola & :highfive:' end end + + describe 'target language is regional' do + it 'uses regional variant' do + expect(service.call(status, 'es-MX').language).to eq 'es-MX' + end + + it 'uses parent locale for unsupported regional variant' do + expect(service.call(status, 'es-XX').language).to eq 'es' + end + end end describe '#source_texts' do diff --git a/spec/system/admin/invites_spec.rb b/spec/system/admin/invites_spec.rb new file mode 100644 index 00000000000000..f2cee626c68e27 --- /dev/null +++ b/spec/system/admin/invites_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Invites' do + describe 'Invite interaction' do + let!(:invite) { Fabricate(:invite, expires_at: nil) } + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before { sign_in user } + + it 'allows invite listing and creation' do + visit admin_invites_path + + expect(page) + .to have_title(I18n.t('admin.invites.title')) + for_invite(invite) do + expect(find('input').value) + .to include(invite.code) + end + + select I18n.t('invites.max_uses', count: 10), from: max_use_field + + expect { generate_invite } + .to change(Invite, :count).by(1) + expect(user.invites.last) + .to have_attributes(max_uses: 10) + end + + it 'allows invite expiration' do + visit admin_invites_path + + for_invite(invite) do + expect { expire_invite } + .to change { invite.reload.expired? }.from(false).to(true) + end + end + + it 'allows invite deactivation' do + visit admin_invites_path + + expect { click_on I18n.t('admin.invites.deactivate_all') } + .to change { Invite.exists?(expires_at: nil) }.from(true).to(false) + end + + def for_invite(invite, &block) + within("#invite_#{invite.id}", &block) + end + + def expire_invite + click_on I18n.t('invites.delete') + end + + def generate_invite + click_on I18n.t('invites.generate') + end + + def max_use_field + I18n.t('simple_form.labels.defaults.max_uses') + end + end +end diff --git a/spec/system/admin/reset_spec.rb b/spec/system/admin/reset_spec.rb index 1e787ea110f2d4..d0f70a93f029d8 100644 --- a/spec/system/admin/reset_spec.rb +++ b/spec/system/admin/reset_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe 'Admin::Reset' do - it 'Resets password for account user' do + it 'Resets password for account user', :inline_jobs do account = Fabricate :account sign_in admin_user visit admin_account_path(account.id) diff --git a/spec/system/admin/tags_spec.rb b/spec/system/admin/tags_spec.rb new file mode 100644 index 00000000000000..a3eca80d13614a --- /dev/null +++ b/spec/system/admin/tags_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Tags' do + describe 'Tag interaction' do + let!(:tag) { Fabricate(:tag, name: 'test') } + + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'allows tags listing and editing' do + visit admin_tags_path + + expect(page) + .to have_title(I18n.t('admin.tags.title')) + + click_on '#test' + + fill_in display_name_field, with: 'NewTagName' + expect { click_on submit_button } + .to_not(change { tag.reload.display_name }) + expect(page) + .to have_content(match_error_text) + + fill_in display_name_field, with: 'TEST' + expect { click_on submit_button } + .to(change { tag.reload.display_name }.to('TEST')) + end + + def display_name_field + I18n.t('simple_form.labels.defaults.display_name') + end + + def match_error_text + I18n.t('tags.does_not_match_previous_name') + end + end +end diff --git a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb index 7071fa6e984e2f..98150aa5efd3bf 100644 --- a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb +++ b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb @@ -5,9 +5,50 @@ RSpec.describe Scheduler::IpCleanupScheduler do let(:worker) { described_class.new } - describe 'perform' do - it 'runs without error' do - expect { worker.perform }.to_not raise_error + describe '#perform' do + context 'with IP-related data past retention times' do + let!(:future_ip_block) { Fabricate :ip_block, expires_at: 1.week.from_now } + let!(:old_ip_block) { Fabricate :ip_block, expires_at: 1.week.ago } + let!(:session_past_retention) { Fabricate :session_activation, ip: '10.0.0.0', updated_at: 18.months.ago } + let!(:inactive_user) { Fabricate :user, current_sign_in_at: 18.months.ago, sign_up_ip: '10.0.0.0' } + let!(:old_login_activity) { Fabricate :login_activity, created_at: 18.months.ago } + let!(:old_token) { Fabricate :access_token, last_used_at: 18.months.ago, last_used_ip: '10.0.0.0' } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.years.to_i.seconds } + + it 'deletes the expired block' do + expect { worker.perform } + .to_not raise_error + expect { old_ip_block.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { old_login_activity.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(session_past_retention.reload.ip) + .to be_nil + expect(inactive_user.reload.sign_up_ip) + .to be_nil + expect(old_token.reload.last_used_ip) + .to be_nil + expect(future_ip_block.reload) + .to be_present + end + end + + context 'with old session data' do + let!(:new_activation) { Fabricate :session_activation, updated_at: 1.week.ago } + let!(:old_activation) { Fabricate :session_activation, updated_at: 1.month.ago } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.days.to_i.seconds } + + it 'clears old sessions' do + expect { worker.perform } + .to_not raise_error + + expect { old_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(new_activation.reload) + .to be_present + end end end end diff --git a/streaming/index.js b/streaming/index.js index 48ed56b29b5d08..3e362f18604e68 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -235,7 +235,7 @@ const startServer = async () => { app.get('/favicon.ico', (_req, res) => res.status(404).end()); app.get('/api/v1/streaming/health', (_req, res) => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.writeHead(200, { 'Content-Type': 'text/plain', 'Cache-Control': 'private, no-store' }); res.end('OK'); }); @@ -858,7 +858,7 @@ const startServer = async () => { } res.setHeader('Content-Type', 'text/event-stream'); - res.setHeader('Cache-Control', 'no-store'); + res.setHeader('Cache-Control', 'private, no-store'); res.setHeader('Transfer-Encoding', 'chunked'); res.write(':)\n'); diff --git a/streaming/metrics.js b/streaming/metrics.js index bb6bce3f3c16a4..263339a1cafb6c 100644 --- a/streaming/metrics.js +++ b/streaming/metrics.js @@ -98,9 +98,11 @@ export function setupMetrics(channels, pgPool) { const requestHandler = (req, res) => { metrics.register.metrics().then((output) => { res.set('Content-Type', metrics.register.contentType); + res.set('Cache-Control', 'private, no-store'); res.end(output); }).catch((err) => { req.log.error(err, "Error collecting metrics"); + res.set('Cache-Control', 'private, no-store'); res.status(500).end(); }); }; diff --git a/streaming/redis.js b/streaming/redis.js index 2a36b89dc553a3..0b582ef2f5eb04 100644 --- a/streaming/redis.js +++ b/streaming/redis.js @@ -50,9 +50,9 @@ function getSentinelConfiguration(env, commonOptions) { return { db: redisDatabase, name: env.REDIS_SENTINEL_MASTER, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, - sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USERNAME, + sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USER, sentinelPassword: env.REDIS_SENTINEL_PASSWORD ?? env.REDIS_PASSWORD, sentinels, ...commonOptions, @@ -104,7 +104,7 @@ export function configFromEnv(env) { host: env.REDIS_HOST ?? '127.0.0.1', port: redisPort, db: redisDatabase, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, ...commonOptions, }; diff --git a/yarn.lock b/yarn.lock index 33af790c93a29c..05eddebf1029e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,16 +52,16 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/compat-data@npm:7.25.7" - checksum: 10c0/e5cc915abdd18d021236474a96606b2d4a915c4fb620c1ad776b8a08d91111e788cb3b7e9bad43593d4e0bfa4f06894357bcb0984102de1861b9e7322b6bc9f8 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7, @babel/compat-data@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/compat-data@npm:7.25.8" + checksum: 10c0/8b81c17580e5fb4cbb6a3c52079f8c283fc59c0c6bd2fe14cfcf9c44b32d2eaab71b02c5633e2c679f5896f73f8ac4036ba2e67a4c806e8f428e4b11f526d7f4 languageName: node linkType: hard -"@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4": - version: 7.25.7 - resolution: "@babel/core@npm:7.25.7" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": + version: 7.25.8 + resolution: "@babel/core@npm:7.25.8" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.25.7" @@ -69,16 +69,16 @@ __metadata: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-module-transforms": "npm:^7.25.7" "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.8" "@babel/template": "npm:^7.25.7" "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.8" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/dad20af39624086afc3a0910bd97ae712c9ad0e9dda09fc5da93876e8ea1802b63ddd81c44f4aa8a9834db46de801eaab1ce9b81ab54b4fe907ae052c24de136 + checksum: 10c0/8411ea506e6f7c8a39ab5c1524b00589fa3b087edb47389708f7fe07170929192171734666e3ea10b95a951643a531a6d09eedfe071572c9ea28516646265086 languageName: node linkType: hard @@ -224,7 +224,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.0, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.25.7 resolution: "@babel/helper-plugin-utils@npm:7.25.7" checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf @@ -331,14 +331,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/parser@npm:7.25.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/parser@npm:7.25.8" dependencies: - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.8" bin: parser: ./bin/babel-parser.js - checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf + checksum: 10c0/a1a13845b7e8dda4c970791814a4bbf60004969882f18f470e260ad822d2e1f8941948f851e9335895563610f240fa6c98481ce8019865e469502bbf21daafa4 languageName: node linkType: hard @@ -432,7 +432,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -443,39 +443,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 - languageName: node - linkType: hard - "@babel/plugin-syntax-import-assertions@npm:^7.25.7": version: 7.25.7 resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" @@ -498,7 +465,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -520,7 +487,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.25.0, @babel/plugin-syntax-jsx@npm:^7.25.7, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.25.7 resolution: "@babel/plugin-syntax-jsx@npm:7.25.7" dependencies: @@ -531,7 +498,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -553,7 +520,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -597,18 +564,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -653,17 +609,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dcdd17d8cafafe0eb2edd0a46a7abe86c72235c957c8eb1157ccadb2b199572d5d1aa36a2d3bce5cb99990f7d3c6290ecf09959c62f3081c4df9ff717a1c84a4 + checksum: 10c0/1698d0757d3dc895047120346cdbe6d539dae4a7bb930caf958c3623e89c850d378d1ebd971a1a8b4cba39c8f001cd9c25a1d6f430099022ab1e87aeddb5dd88 languageName: node linkType: hard @@ -714,16 +669,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" +"@babel/plugin-transform-class-static-block@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.8" dependencies: "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/cbb4b46cbd8ad10106eb2bedb5a0665661a1d1d5b6f3ab565ff454b802dab4718e02b25670fe0d40835494aedb3dc26757c06cc4da6ff3e80291c5f882269bd3 + checksum: 10c0/4f37853aef6920875022bbb2d7c6523218d9d718291464e2cacd9cc6f2c22d86a69948d8ea38f9248843bbfe9343f3fd18cf16b1615560124198bf999e3ba612 languageName: node linkType: hard @@ -801,15 +755,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c733252ff20a32d9747dd081916270f5a073856597e849a5f458b12f4354499b18714f5e7049e341432851d9975077cb37effcd276c7f816faa6f5ff708dc5e1 + checksum: 10c0/9726abc1b07771a9c1e3670908ac425d21e29f54c775d10ed7a4e2bc0a18e07600f70bbc531deba3fb3ff7f6763c189200593264c6f784dac583e653b66fe754 languageName: node linkType: hard @@ -825,15 +778,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ef61fc5d54c9c8b075cbd9db62beaf295e38e08a1edb1882995105d3e959763be1631f7d7f7cb7461b702ebd0b4a601f2eb2cd6521acaf061310a3a3305fa756 + checksum: 10c0/8a2e1205dd727a96a9adef0e981d68c61b1c286480b9136e2aa67ce3e2c742be4f87feb9fb4c5548a401aba0953d43d66e9ec36a54dea6a7c15f1ee9345baf57 languageName: node linkType: hard @@ -862,15 +814,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" +"@babel/plugin-transform-json-strings@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/aa6e5f65c8a5f2459d7daa9b5b4ff97ff43bab21f4a8513ed84d35300b0323ec542dc101c5f11622e442dfc93b3a229c7f41ebc7645370dfec6d066bda800a0b + checksum: 10c0/2a6cf69ebe8deebc39c56adae75d609e16786dc4cbd83577eefdc838bd89ca8974671d47e2669b8e65ef9b7ace427f7c2c5a9fc6aa09247b10e141d15fee81cf languageName: node linkType: hard @@ -885,15 +836,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d610a8a2c1be83e03cce2256f29519e705dc68289c09d67f1f362d1fd80f4b36eaf2affc05710abb53a272895041e24d9e95ec73a516a23a67cb907023fbe37b + checksum: 10c0/9adc2634c94b283b682fbf71bbec553bd8448196213491a0ef9ea167993c9c36dcb2fbefbd834e113cfed843a67290131bc99e463f8702043c3f4e3a99bb807e languageName: node linkType: hard @@ -982,41 +932,38 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b35a96a79ef4895b00e4f758d3185cb17e4fbfada311894ad5f0988a55fc2c21820dc789b26a3cb8fbd620434faa516e52acb6e2da105c2edbd29de8b6b0facf + checksum: 10c0/3cb7c44cffccae42e104755acb31b4f00bc27d8c88102ae6f30dca508832f98fa5b746bead0fc7c0c6ddcf83f336829be4b64245c6c7ce26b3ef591937ec54a4 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c028ae89e6b4e1d757f8f1ebcb3b420e6559bb35002728f6f5651d5f669fbf73764adf6e3597908fa12adf8dbae683e5f74b3a7f68e8774a9663c18c0f999539 + checksum: 10c0/d23b3ebc50513f24510791ac2cad43e3c6ea08579f54dccfd4ed5e5d5084f02da0576ea42ea999fb51e1f94f42857cac96a1a29ac6728fc262fbe87ec966dc18 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.8" dependencies: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e8b978d9d1020452da0d5d92f80fe57e302761dac20137bb8bf863478a4779fcd63d314db89e796125d9d76da2a38f64f012d6e0c4913815951b3eb3fba2feb6 + checksum: 10c0/058d5f5bb61068997fb78855011dd175d441da84717640852bbfd12a5919acf8d8c5a14c1debfe87d230f3f4c47c22fcad3d7fa1acd72e5e48b2fff93b6c1dd9 languageName: node linkType: hard @@ -1032,28 +979,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bb609e5103780be0825a255ffe1fefbb5335aead88a46eecc2257053279ea2c45ff66b0ef1fb54302c8c8c57146e88e52f3ecb62b4c6f619218d7b3843b352d9 + checksum: 10c0/f4360e62ca4aa998db31548d0ef06836d958bcb29dee58f5c62d0c29b6b2bff1b54871195bd032825fe3dd79a4fd8275e165148c8d4b57694bcf72135c8f7d24 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7" +"@babel/plugin-transform-optional-chaining@npm:^7.25.7, @babel/plugin-transform-optional-chaining@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/887441ada6c2bc1b789984b7531d9bc585f335ece99642886d3d9fd8aee7e6b8d4f7ca61d76b5f23477f3aa607284d5056eadaa1eb17e7b39af6b0e834cbe878 + checksum: 10c0/a1cdbfc249619fa6b37e57f81600701281629d86a57e616b0c2b29816d0c43114a2296ce089564afd3aa7870c8aad62e907658ffef2c110662af14ee23d5247f languageName: node linkType: hard @@ -1080,17 +1025,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.8" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.25.7" "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5ad8832ba54e2079c1f558b8680e170265e3f376424e5fbb75b17b7f08696fb0af6c96d23d92f7df3dcc559f5971a02587281fcec38a853174aa95478565f5fc + checksum: 10c0/61b5e3a4eb94caf38d6e9ff7bff1ac8927758141aaa4891036d3490866ecee53beaefd7893519fec42a4c55f33374a17fc0e49694cdaf95668082073f0fe4a79 languageName: node linkType: hard @@ -1335,10 +1279,10 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.25.7 - resolution: "@babel/preset-env@npm:7.25.7" + version: 7.25.8 + resolution: "@babel/preset-env@npm:7.25.8" dependencies: - "@babel/compat-data": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.8" "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-validator-option": "npm:^7.25.7" @@ -1348,45 +1292,30 @@ __metadata: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.8" "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" "@babel/plugin-transform-block-scoping": "npm:^7.25.7" "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.7" + "@babel/plugin-transform-class-static-block": "npm:^7.25.8" "@babel/plugin-transform-classes": "npm:^7.25.7" "@babel/plugin-transform-computed-properties": "npm:^7.25.7" "@babel/plugin-transform-destructuring": "npm:^7.25.7" "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.8" "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.8" "@babel/plugin-transform-for-of": "npm:^7.25.7" "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.7" + "@babel/plugin-transform-json-strings": "npm:^7.25.8" "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8" "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" "@babel/plugin-transform-modules-amd": "npm:^7.25.7" "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" @@ -1394,15 +1323,15 @@ __metadata: "@babel/plugin-transform-modules-umd": "npm:^7.25.7" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.8" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.8" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.8" "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.8" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.8" "@babel/plugin-transform-parameters": "npm:^7.25.7" "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.8" "@babel/plugin-transform-property-literals": "npm:^7.25.7" "@babel/plugin-transform-regenerator": "npm:^7.25.7" "@babel/plugin-transform-reserved-words": "npm:^7.25.7" @@ -1423,7 +1352,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bf704a06a69420250c1de2b126cd5c859a851002c2fb2cce0910cd85a8e6755b9b31577021e94feb7e1e53519923726349aaf07580923928791583db61438fb8 + checksum: 10c0/a45cd64ca082262998f6cf508b413ff8a9e967bf33e58337a1fe41c6c939a4c25cc73cd58387792c00d43905cf5fb0ea5ef88dfdc2addf2e8133743088c86c72 languageName: node linkType: hard @@ -1500,7 +1429,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.25.7": +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.7": version: 7.25.7 resolution: "@babel/traverse@npm:7.25.7" dependencies: @@ -1515,14 +1444,14 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.25.7 - resolution: "@babel/types@npm:7.25.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.25.8 + resolution: "@babel/types@npm:7.25.8" dependencies: "@babel/helper-string-parser": "npm:^7.25.7" "@babel/helper-validator-identifier": "npm:^7.25.7" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 + checksum: 10c0/55ca2d6df6426c98db2769ce884ce5e9de83a512ea2dd7bcf56c811984dc14351cacf42932a723630c5afcff2455809323decd645820762182f10b7b5252b59f languageName: node linkType: hard @@ -2267,8 +2196,8 @@ __metadata: linkType: hard "@formatjs/cli@npm:^6.1.1": - version: 6.2.12 - resolution: "@formatjs/cli@npm:6.2.12" + version: 6.2.15 + resolution: "@formatjs/cli@npm:6.2.15" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -2297,7 +2226,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10c0/3bd05a9fad6c837e22988e6638f426c128efa46ab80ff88cf2ad81fb3bc10cf4f228907577fc01e24c2d7d505cfabfaa69f0496d2ec8f0ab2d6b5eaccb5e475c + checksum: 10c0/e947aa7f3994251392fe15673752a8d8e3c8a30733bb49de5e617d45a327a3e1d16419e2d6b01f7ef2cbe86e2946024342d5b3301e6a8f17de3de9e2e7aedb29 languageName: node linkType: hard @@ -2311,12 +2240,34 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.0": +"@formatjs/ecma402-abstract@npm:2.2.0": version: 2.2.0 - resolution: "@formatjs/fast-memoize@npm:2.2.0" + resolution: "@formatjs/ecma402-abstract@npm:2.2.0" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/ae88c5a93b96235aba4bd9b947d0310d2ec013687a99133413361b24122b5cdea8c9bf2e04a4a2a8b61f1f4ee5419ef6416ca4796554226b5050e05a9ce6ef49 + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/3f8e5c1680ab3babf44a6324ae36d6355674562df61e0f0ce3bcec35c3b31d77f9c3b28596af79a9f52641aee834a11673dc4cf30093bbf27c4a96e18c8cc74b + languageName: node + linkType: hard + +"@formatjs/fast-memoize@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/fast-memoize@npm:2.2.1" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/cb8cbf1aba907d395d1fe405f67a8da26686b2fc26eefde7541d49d748d2d9b939f2bc428b7d40d2c31366a6ce42cf16724c966965701186986c5882fdba3c8b + languageName: node + linkType: hard + +"@formatjs/icu-messageformat-parser@npm:2.7.10": + version: 2.7.10 + resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-skeleton-parser": "npm:1.8.4" + tslib: "npm:^2.7.0" + checksum: 10c0/7f2b9bb31c64d2b45584a77e2e6a7c4185f247eea22c0d8e2257ac95feff36894a0936d31778d17874cd249c39058fcb894c27e13a6cadb056996e7232957655 languageName: node linkType: hard @@ -2341,25 +2292,35 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.8": - version: 6.6.8 - resolution: "@formatjs/intl-displaynames@npm:6.6.8" +"@formatjs/icu-skeleton-parser@npm:1.8.4": + version: 1.8.4 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/1a03e7644022741c1bcf10fcd07da88c434416a13603ace693a038114010463307b4130d3a3f53ad5665bd27fca9a6b19ac8e5bf58e17598b1ea84db173fdfbb + "@formatjs/ecma402-abstract": "npm:2.2.0" + tslib: "npm:^2.7.0" + checksum: 10c0/a6cd90e89b994e6fa2b66f83a80250d17fdddaeb755cd1f38be1d51a737a6f8a9b123912943d3dcad278833e3a04683a9081b187300f1a481791527954e63e82 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.7": - version: 7.5.7 - resolution: "@formatjs/intl-listformat@npm:7.5.7" +"@formatjs/intl-displaynames@npm:6.6.10": + version: 6.6.10 + resolution: "@formatjs/intl-displaynames@npm:6.6.10" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/5d0478752d669d87c82aa80880df464d64a1c8974fcb6136bc854567f570a1696e5468005ffa266cfcb623adb7c7299b839c06ea33897f55d35dab6a7575cc84 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/e4158f67fc0d6c2345d05b85183aef480fc86c68b60643abdd143ddc66a2203acfcf1b3dc4619658479e54c971c878a2548db34e08f3b035348686f088bf03c4 + languageName: node + linkType: hard + +"@formatjs/intl-listformat@npm:7.5.9": + version: 7.5.9 + resolution: "@formatjs/intl-listformat@npm:7.5.9" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/b5041de4d6e011f36ba4b54406aae9aef763f8bc8b22364bdc8447d0b8b3e553111d117b02f801c31f2ab2c0d3abc086bd90db1b83c000babb99316cd15be5e2 languageName: node linkType: hard @@ -2372,34 +2333,43 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.5.5": + version: 0.5.5 + resolution: "@formatjs/intl-localematcher@npm:0.5.5" + dependencies: + tslib: "npm:^2.7.0" + checksum: 10c0/a6bf466bae29ca838ab06ffa2ce2cc9d5dd98e096ec73986b45ca4354b6adc0ca9078d9fd3aa30dbf27677940cfb3fb050ca0bce3018cd6f3f4d7e4bdad91035 + languageName: node + linkType: hard + "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.2.14 - resolution: "@formatjs/intl-pluralrules@npm:5.2.14" + version: 5.2.16 + resolution: "@formatjs/intl-pluralrules@npm:5.2.16" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10c0/3c00109c8d4c8b221c2b9af38a38d31cd6293a0a412a1f2cdae2b8ef81bd71626c9ff4a647389682cb27ae5c223bd6f64ef54d03e3f6f19c372e0c6194b76b38 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10c0/2250a96a74a153a5f1e771233c366c42005efd71ac5ff665891a308ce78a68f85709f8c892d28a1e334f974252bfb3407f6a64da616c3adbeb158310ef73d71b languageName: node linkType: hard -"@formatjs/intl@npm:2.10.5": - version: 2.10.5 - resolution: "@formatjs/intl@npm:2.10.5" +"@formatjs/intl@npm:2.10.8": + version: 2.10.8 + resolution: "@formatjs/intl@npm:2.10.8" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/d00ef00e41200947ed22895b73a0863283de4762ec238b4a81e2252e642e30a309cd9c73174e4917b6c675ab6f148eda5a4e3345c3caeef64e090fc8374d27c4 + checksum: 10c0/e35a4421f445ef4f7ce362144dde143ad895391b03380fbf896fe261a445fa6b5d886989e07bf9b49e52e83f0a3f9b667cfecbc2684a9ea898c6d25daf07b392 languageName: node linkType: hard @@ -2423,6 +2393,26 @@ __metadata: languageName: node linkType: hard +"@formatjs/ts-transformer@npm:3.13.16": + version: 3.13.16 + resolution: "@formatjs/ts-transformer@npm:3.13.16" + dependencies: + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@types/json-stable-stringify": "npm:^1.0.32" + "@types/node": "npm:14 || 16 || 17 || 18" + chalk: "npm:^4.0.0" + json-stable-stringify: "npm:^1.0.1" + tslib: "npm:^2.7.0" + typescript: "npm:5" + peerDependencies: + ts-jest: ">=27" + peerDependenciesMeta: + ts-jest: + optional: true + checksum: 10c0/de03e8bc8c730f2e122970d5843762e0c5183181ba58c9759db2f1ed45fcbfbb8046dbb3318f906574f89026481b9205f5bd6fbf3f410a5e5e1754f575baa489 + languageName: node + linkType: hard + "@gamestdio/websocket@npm:^0.3.2": version: 0.3.2 resolution: "@gamestdio/websocket@npm:0.3.2" @@ -2822,7 +2812,7 @@ __metadata: "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" - "@rails/ujs": "npm:7.1.400" + "@rails/ujs": "npm:7.1.401" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -3125,10 +3115,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.400": - version: 7.1.400 - resolution: "@rails/ujs@npm:7.1.400" - checksum: 10c0/181329e731b925788a530dc5bc44eb4a07ae780e20b0309fd9140ebeeca30d9432ed50be0f25ae60f10beb3aa8883f6d662e4b9c6f6cd19a32c1f42ab2505c47 +"@rails/ujs@npm:7.1.401": + version: 7.1.401 + resolution: "@rails/ujs@npm:7.1.401" + checksum: 10c0/08eae084c80e837e47cc01d0be25a431495f7dea381dcaaa4ce39a3217fac46bf87d169b3dfcf304ae16e0714de7435c2b8c5eb8d5052e3ba70ef3050a72fa3c languageName: node linkType: hard @@ -3503,7 +3493,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.20.1": +"@types/babel__core@npm:*, @types/babel__core@npm:^7.1.12, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.1, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -3525,12 +3515,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__helper-plugin-utils@npm:^7.10.0": - version: 7.10.2 - resolution: "@types/babel__helper-plugin-utils@npm:7.10.2" +"@types/babel__helper-plugin-utils@npm:^7.10.3": + version: 7.10.3 + resolution: "@types/babel__helper-plugin-utils@npm:7.10.3" dependencies: "@types/babel__core": "npm:*" - checksum: 10c0/1c544e33b30ccfc02254b9fe090c52880c8bb05e5406f525bfdce71ce34e93677276f788b93e9fa5e1a16f6317b97e59a07d8a92bf4726d8f4639a0045ebb590 + checksum: 10c0/c22f68e8019c1e75e42fccc6eaca94a269fa177c4544599aa084b216b879b626f63f89755a4ac2dc9054b6e9ed4e0fab1e3460d36ce20767c99aef4a3c81fce3 languageName: node linkType: hard @@ -3544,12 +3534,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.1.7": - version: 7.20.3 - resolution: "@types/babel__traverse@npm:7.20.3" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.20.6": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" dependencies: "@babel/types": "npm:^7.20.7" - checksum: 10c0/295ed9b837e62e17ee43be0df45d90fff5208986bd43af593c9020d152d3b2c55328e038c2f8585926b63cc22f887f28bf3f4c805aa881e2dd0bdd5ead92ece0 + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 languageName: node linkType: hard @@ -3822,6 +3812,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:14 || 16 || 17 || 18": + version: 18.19.55 + resolution: "@types/node@npm:18.19.55" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/19ffeca0086b45cba08d4585623cd0d80fbacb659debde82a4baa008fc0c25ba6c21cd721f3a9f0be74f70940694b00458cac61c89f8b2a1e55ca4322a9aad2b + languageName: node + linkType: hard + "@types/object-assign@npm:^4.0.30": version: 4.0.33 resolution: "@types/object-assign@npm:4.0.33" @@ -3999,13 +3998,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.3.10 - resolution: "@types/react@npm:18.3.10" +"@types/react@npm:*, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7, @types/react@npm:^18.3.11": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/f5be1de1b0331c1fdb33d577f4cf7f1b949d4bded5347b2351a537f03c51dade5be115e21b161dcf1b37061954d320f6a0bdf8d7b70e24eda51071fdd614383d + checksum: 10c0/ce80512246ca5bda69db85b9f4f1835189334acfb6b2c4f3eda8cabff1ff1a3ea9ce4f3b895bdbc18c94140aa45592331aa3fdeb557f525c1b048de7ce84fc0e languageName: node linkType: hard @@ -5253,21 +5252,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.16 - resolution: "babel-plugin-formatjs@npm:10.5.16" + version: 10.5.18 + resolution: "babel-plugin-formatjs@npm:10.5.18" dependencies: - "@babel/core": "npm:^7.10.4" - "@babel/helper-plugin-utils": "npm:^7.10.4" - "@babel/plugin-syntax-jsx": "npm:7" - "@babel/traverse": "npm:7" - "@babel/types": "npm:^7.12.11" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/ts-transformer": "npm:3.13.14" - "@types/babel__core": "npm:^7.1.7" - "@types/babel__helper-plugin-utils": "npm:^7.10.0" - "@types/babel__traverse": "npm:^7.1.7" - tslib: "npm:^2.4.0" - checksum: 10c0/03d9d2b0b9cdc05c011bfb417a43e5c0f557868ed84d83acbc3cb9072b7fa98f5219473d0bd61f02741c151d6f2162da363bd337522c80af14721ae37f6da86b + "@babel/core": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.0" + "@babel/plugin-syntax-jsx": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/ts-transformer": "npm:3.13.16" + "@types/babel__core": "npm:^7.20.5" + "@types/babel__helper-plugin-utils": "npm:^7.10.3" + "@types/babel__traverse": "npm:^7.20.6" + tslib: "npm:^2.7.0" + checksum: 10c0/3e7753cb1837ea300f7b0d574751758330f4fe56e4f686a1ceb7acc612c0ac1353ed2a918b5af6e4dcaf579c623d56f714159a265d64b71897471a69f15910b8 languageName: node linkType: hard @@ -6673,10 +6672,10 @@ __metadata: languageName: node linkType: hard -"css-functions-list@npm:^3.2.2": - version: 3.2.2 - resolution: "css-functions-list@npm:3.2.2" - checksum: 10c0/8638a63d0cf1bdc50d4a752ec1c94a57e9953c3b03eace4f5526db20bec3c061e95089f905dbb4999c44b9780ce777ba856967560f6d15119a303f6030901c10 +"css-functions-list@npm:^3.2.3": + version: 3.2.3 + resolution: "css-functions-list@npm:3.2.3" + checksum: 10c0/03f9ed34eeed310d2b1cf0e524eea02bc5f87854a4de85f8957ea432ab1036841a3fb00879590519f7bb8fda40d992ce7a72fa9b61696ca1dc53b90064858f96 languageName: node linkType: hard @@ -6784,6 +6783,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^3.0.0": + version: 3.0.0 + resolution: "css-tree@npm:3.0.0" + dependencies: + mdn-data: "npm:2.10.0" + source-map-js: "npm:^1.0.1" + checksum: 10c0/43d44fdf7004ae91d73d486f17894fef77efa33747a6752b9241cf0f5fb47fabc16ec34a96a993651d9014dfdeee803d7c5fcd3548214252ee19f4e5c98999b2 + languageName: node + linkType: hard + "css-tree@npm:~2.2.0": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -7033,15 +7042,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6": - version: 4.3.6 - resolution: "debug@npm:4.3.6" +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.3.6": + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -8628,12 +8637,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^9.0.0": - version: 9.0.0 - resolution: "file-entry-cache@npm:9.0.0" +"file-entry-cache@npm:^9.1.0": + version: 9.1.0 + resolution: "file-entry-cache@npm:9.1.0" dependencies: flat-cache: "npm:^5.0.0" - checksum: 10c0/07b0a4f062dc0aa258f3e1b06ac083ea25313f5e289943e146fafdaf3315dcc031635545eea7fe98fe5598b91d6c7f48dba7a251dd7ac20108a6ebf7d00b0b1c + checksum: 10c0/4b4dbc1e972f50202b1a4430d30fd99378ef6e2a64857176abdc65c5e4730a948fb37e274478520a7bacbc70f3abba455a4b9d2c1915c53f30d11dc85d3fef5e languageName: node linkType: hard @@ -8985,9 +8994,9 @@ __metadata: linkType: hard "fuzzysort@npm:^3.0.0": - version: 3.0.2 - resolution: "fuzzysort@npm:3.0.2" - checksum: 10c0/c6cdbd092a8e91ed822aeac6d4fb95559759c10602cb29f27307c1cabd01fdd384fa399f7757722435b595244efb000cd63f144104c41b8551b2faff123279cb + version: 3.1.0 + resolution: "fuzzysort@npm:3.1.0" + checksum: 10c0/da9bb32de16f2a5c2c000b99031d9f4f8a01380c12d5d3b67296443a1152c55987ce3c4ddbfe97481b0e9b6f2fb77d61dceba29a93ad36ee23ef5bab6a31afb8 languageName: node linkType: hard @@ -9707,13 +9716,20 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.3.1, ignore@npm:^5.3.2": +"ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard +"ignore@npm:^6.0.2": + version: 6.0.2 + resolution: "ignore@npm:6.0.2" + checksum: 10c0/9a38feac1861906a78ba0f03e8ef3cd6b0526dce2a1a84e1009324b557763afeb9c3ebcc04666b21f7bbf71adda45e76781bb9e2eaa0903d45dcaded634454f5 + languageName: node + linkType: hard + "immer@npm:^10.0.3": version: 10.0.3 resolution: "immer@npm:10.0.3" @@ -9877,15 +9893,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.14, intl-messageformat@npm:^10.3.5": - version: 10.5.14 - resolution: "intl-messageformat@npm:10.5.14" +"intl-messageformat@npm:10.7.0, intl-messageformat@npm:^10.3.5": + version: 10.7.0 + resolution: "intl-messageformat@npm:10.7.0" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - tslib: "npm:^2.4.0" - checksum: 10c0/8ec0a60539f67039356e211bcc8d81cf1bd9d62190a72ab0e94504da92f0242fe2f94ffb512b97cc6f63782b7891874d4038536ce04631e59d762c3441c60b4b + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + tslib: "npm:^2.7.0" + checksum: 10c0/772469599fa8ab43dc933d03c75c6290220565c97afdc60cb67d036f2c51f1b3a825b2345933ee7616ecdf018b95ea7704f5ec80ded5a8efc2ce7f4b2962cae3 languageName: node linkType: hard @@ -11879,6 +11895,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.10.0": + version: 2.10.0 + resolution: "mdn-data@npm:2.10.0" + checksum: 10c0/f6f1a6a6eb092bab250d06f6f6c7cb1733a77a17e7119aac829ad67d4322bbf6a30df3c6d88686e71942e66bd49274b2ddfede22a1d3df0d6c49a56fbd09eb7c + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -12265,14 +12288,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -14094,12 +14110,12 @@ __metadata: languageName: node linkType: hard -"postcss-safe-parser@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-safe-parser@npm:7.0.0" +"postcss-safe-parser@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-safe-parser@npm:7.0.1" peerDependencies: postcss: ^8.4.31 - checksum: 10c0/4217afd8ce2809e959dc365e4675f499303cc6b91f94db06c8164422822db2d3b3124df701ee2234db4127ad05619b016bfb9c2bccae9bf9cf898a396f1632c9 + checksum: 10c0/6957b10b818bd8d4664ec0e548af967f7549abedfb37f844d389571d36af681340f41f9477b9ccf34bcc7599bdef222d1d72e79c64373001fae77089fba6d965 languageName: node linkType: hard @@ -14163,7 +14179,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.41": +"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.47": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -14624,26 +14640,26 @@ __metadata: linkType: hard "react-intl@npm:^6.4.2": - version: 6.7.0 - resolution: "react-intl@npm:6.7.0" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.5" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" + version: 6.8.0 + resolution: "react-intl@npm:6.8.0" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl": "npm:2.10.8" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" "@types/hoist-non-react-statics": "npm:^3.3.1" - "@types/react": "npm:16 || 17 || 18" + "@types/react": "npm:^18.3.11" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/210088bf0e934ad5f09d8e7c6d7d72682bb806583645fb333d4efd8ae55585b675ea8e47bb240140d5143ca15ecc0457c3ddc3e8ca45e9b576bce1fa2f9886b3 + checksum: 10c0/e110d8cbfc227cbed3b72b162fe8a75e824aef47eeb5a7879a5a2d9fa5dd35d2d25149ef57460fa06bca7ae106184c729e410c22bcdb349d29bb1ee35f3c5cf0 languageName: node linkType: hard @@ -14909,15 +14925,15 @@ __metadata: linkType: hard "react-textarea-autosize@npm:^8.4.1": - version: 8.5.3 - resolution: "react-textarea-autosize@npm:8.5.3" + version: 8.5.4 + resolution: "react-textarea-autosize@npm:8.5.4" dependencies: "@babel/runtime": "npm:^7.20.13" use-composed-ref: "npm:^1.3.0" use-latest: "npm:^1.2.1" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/33d38a6d96cf584842695b50c341980944ece23a42155bf0bd1958f02396adb185c7720b88678dc677817fe111783059c0ebcdf7761644006892583b10e258ee + checksum: 10c0/ea92fda2128983c1a8e84c74706ffb4b8bfa1a19c803d210868ec031c1ac3b8ceee8028766ef5d91017265da2bdccf6a85e5b6e5d553005e839f0c47e5758b43 languageName: node linkType: hard @@ -16771,8 +16787,8 @@ __metadata: linkType: hard "stylelint@npm:^16.0.2": - version: 16.9.0 - resolution: "stylelint@npm:16.9.0" + version: 16.10.0 + resolution: "stylelint@npm:16.10.0" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -16782,17 +16798,17 @@ __metadata: balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" cosmiconfig: "npm:^9.0.0" - css-functions-list: "npm:^3.2.2" - css-tree: "npm:^2.3.1" - debug: "npm:^4.3.6" + css-functions-list: "npm:^3.2.3" + css-tree: "npm:^3.0.0" + debug: "npm:^4.3.7" fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^9.0.0" + file-entry-cache: "npm:^9.1.0" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.3.2" + ignore: "npm:^6.0.2" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.34.0" @@ -16801,21 +16817,20 @@ __metadata: micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.1" - postcss: "npm:^8.4.41" + postcss: "npm:^8.4.47" postcss-resolve-nested-selector: "npm:^0.1.6" - postcss-safe-parser: "npm:^7.0.0" + postcss-safe-parser: "npm:^7.0.1" postcss-selector-parser: "npm:^6.1.2" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^7.1.0" supports-hyperlinks: "npm:^3.1.0" svg-tags: "npm:^1.0.0" table: "npm:^6.8.2" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10c0/d3ff9c8945c56b04a2fa16ec33d163325496d5db94b6fcb5adf74c76f7f794ac992888273f9a3317652ba8b6195168b2ffff382ca2a667a241e2ace8c9505ae2 + checksum: 10c0/d07dd156c225d16c740995daacd78090f7fc317602e87bda2fca323a4ae427a8526d724f3089df3b2185df4520f987547668ceea9b30985988ccbc514034aa21 languageName: node linkType: hard @@ -17327,7 +17342,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": version: 2.7.0 resolution: "tslib@npm:2.7.0" checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 @@ -17460,22 +17475,22 @@ __metadata: linkType: hard "typescript@npm:5, typescript@npm:^5.0.4": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" + version: 5.6.3 + resolution: "typescript@npm:5.6.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 languageName: node linkType: hard "typescript@patch:typescript@npm%3A5#optional!builtin