Merge remote-tracking branch 'parent/main' into upstream-20250210

This commit is contained in:
KMY 2025-02-17 08:57:56 +09:00
commit 935bea989d
69 changed files with 1646 additions and 1363 deletions

2
.nvmrc
View file

@ -1 +1 @@
22.13 22.14

View file

@ -328,7 +328,7 @@ GEM
azure-blob (~> 0.5.2) azure-blob (~> 0.5.2)
hashie (~> 5.0) hashie (~> 5.0)
jmespath (1.6.2) jmespath (1.6.2)
json (2.9.1) json (2.10.1)
json-canonicalization (1.0.0) json-canonicalization (1.0.0)
json-jwt (1.15.3.1) json-jwt (1.15.3.1)
activesupport (>= 4.2) activesupport (>= 4.2)
@ -371,9 +371,10 @@ GEM
mime-types mime-types
terrapin (>= 0.6.0, < 2.0) terrapin (>= 0.6.0, < 2.0)
language_server-protocol (3.17.0.4) language_server-protocol (3.17.0.4)
launchy (3.0.1) launchy (3.1.0)
addressable (~> 2.8) addressable (~> 2.8)
childprocess (~> 5.0) childprocess (~> 5.0)
logger (~> 1.6)
letter_opener (1.10.0) letter_opener (1.10.0)
launchy (>= 2.2, < 4) launchy (>= 2.2, < 4)
letter_opener_web (3.0.0) letter_opener_web (3.0.0)
@ -416,7 +417,7 @@ GEM
mutex_m (0.3.0) mutex_m (0.3.0)
net-http (0.6.0) net-http (0.6.0)
uri uri
net-imap (0.5.5) net-imap (0.5.6)
date date
net-protocol net-protocol
net-ldap (0.19.0) net-ldap (0.19.0)
@ -424,7 +425,7 @@ GEM
net-protocol net-protocol
net-protocol (0.2.2) net-protocol (0.2.2)
timeout timeout
net-smtp (0.5.0) net-smtp (0.5.1)
net-protocol net-protocol
nio4r (2.7.4) nio4r (2.7.4)
nokogiri (1.18.2) nokogiri (1.18.2)
@ -562,10 +563,10 @@ GEM
opentelemetry-api (~> 1.0) opentelemetry-api (~> 1.0)
orm_adapter (0.5.0) orm_adapter (0.5.0)
ostruct (0.6.1) ostruct (0.6.1)
ox (2.14.21) ox (2.14.22)
bigdecimal (>= 3.0) bigdecimal (>= 3.0)
parallel (1.26.3) parallel (1.26.3)
parser (3.3.7.0) parser (3.3.7.1)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
parslet (2.0.0) parslet (2.0.0)
@ -602,7 +603,7 @@ GEM
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.4.0) raabro (1.4.0)
racc (1.8.1) racc (1.8.1)
rack (2.2.10) rack (2.2.11)
rack-attack (6.7.0) rack-attack (6.7.0)
rack (>= 1.0, < 4) rack (>= 1.0, < 4)
rack-cors (2.0.2) rack-cors (2.0.2)
@ -669,7 +670,7 @@ GEM
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.7.0) rdf-normalize (0.7.0)
rdf (~> 3.3) rdf (~> 3.3)
rdoc (6.11.0) rdoc (6.12.0)
psych (>= 4.0.0) psych (>= 4.0.0)
redcarpet (3.6.0) redcarpet (3.6.0)
redis (4.8.1) redis (4.8.1)
@ -768,7 +769,7 @@ GEM
activerecord (>= 4.0.0) activerecord (>= 4.0.0)
railties (>= 4.0.0) railties (>= 4.0.0)
securerandom (0.4.1) securerandom (0.4.1)
selenium-webdriver (4.27.0) selenium-webdriver (4.28.0)
base64 (~> 0.2) base64 (~> 0.2)
logger (~> 1.4) logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5) rexml (~> 3.2, >= 3.2.5)
@ -806,7 +807,7 @@ GEM
simplecov-lcov (0.8.0) simplecov-lcov (0.8.0)
simplecov_json_formatter (0.1.4) simplecov_json_formatter (0.1.4)
stackprof (0.2.27) stackprof (0.2.27)
stoplight (4.1.0) stoplight (4.1.1)
redlock (~> 1.0) redlock (~> 1.0)
stringio (3.1.2) stringio (3.1.2)
strong_migrations (2.2.0) strong_migrations (2.2.0)
@ -817,8 +818,8 @@ GEM
httpclient (>= 2.4) httpclient (>= 2.4)
sysexits (1.2.0) sysexits (1.2.0)
temple (0.10.3) temple (0.10.3)
terminal-table (3.0.2) terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 4)
terrapin (1.0.1) terrapin (1.0.1)
climate_control climate_control
test-prof (1.4.4) test-prof (1.4.4)
@ -849,7 +850,9 @@ GEM
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.9.1) unf_ext (0.0.9.1)
unicode-display_width (2.6.0) unicode-display_width (3.1.4)
unicode-emoji (~> 4.0, >= 4.0.4)
unicode-emoji (4.0.4)
uri (1.0.2) uri (1.0.2)
useragent (0.16.11) useragent (0.16.11)
validate_email (0.1.6) validate_email (0.1.6)

View file

@ -6,7 +6,7 @@ module Admin
def index def index
authorize :software_update, :index? authorize :software_update, :index?
@software_updates = SoftwareUpdate.by_version @software_updates = SoftwareUpdate.by_version.filter(&:pending?)
end end
private private

View file

@ -46,6 +46,6 @@ module WebAppControllerConcern
protected protected
def set_referer_header def set_referer_header
response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'origin' : 'same-origin') response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'strict-origin-when-cross-origin' : 'same-origin')
end end
end end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 KiB

After

Width:  |  Height:  |  Size: 554 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 858 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 985 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 KiB

After

Width:  |  Height:  |  Size: 636 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 786 KiB

After

Width:  |  Height:  |  Size: 653 KiB

Before After
Before After

View file

@ -68,8 +68,13 @@
"alert.unexpected.message": "Prodúxose un error inesperáu.", "alert.unexpected.message": "Prodúxose un error inesperáu.",
"alert.unexpected.title": "¡Meca!", "alert.unexpected.title": "¡Meca!",
"alt_text_badge.title": "Testu alternativu", "alt_text_badge.title": "Testu alternativu",
"alt_text_modal.add_alt_text": "Amestar testu alternativu",
"alt_text_modal.cancel": "Encaboxar",
"alt_text_modal.done": "Fecho",
"announcement.announcement": "Anunciu", "announcement.announcement": "Anunciu",
"annual_report.summary.followers.followers": "siguidores", "annual_report.summary.followers.followers": "siguidores",
"annual_report.summary.here_it_is": "Equí ta'l to resume de {year}:",
"annual_report.summary.highlighted_post.possessive": "de {name}",
"annual_report.summary.new_posts.new_posts": "artículos nuevos", "annual_report.summary.new_posts.new_posts": "artículos nuevos",
"annual_report.summary.thanks": "Gracies por ser parte de Mastodon!", "annual_report.summary.thanks": "Gracies por ser parte de Mastodon!",
"attachments_list.unprocessed": "(ensin procesar)", "attachments_list.unprocessed": "(ensin procesar)",
@ -87,6 +92,7 @@
"bundle_column_error.routing.body": "Nun se pudo atopar la páxina solicitada. ¿De xuru que la URL de la barra de direiciones ta bien escrita?", "bundle_column_error.routing.body": "Nun se pudo atopar la páxina solicitada. ¿De xuru que la URL de la barra de direiciones ta bien escrita?",
"bundle_column_error.routing.title": "404", "bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Zarrar", "bundle_modal_error.close": "Zarrar",
"bundle_modal_error.retry": "Retentar",
"closed_registrations.other_server_instructions": "Darréu que Mastodon ye una rede social descentralizada, pues crear una cuenta n'otru sirvidor y siguir interactuando con esti.", "closed_registrations.other_server_instructions": "Darréu que Mastodon ye una rede social descentralizada, pues crear una cuenta n'otru sirvidor y siguir interactuando con esti.",
"closed_registrations_modal.description": "Anguaño nun ye posible crear cuentes en {domain}, mas ten en cuenta que nun precises una cuenta nesti sirvidor pa usar Mastodon.", "closed_registrations_modal.description": "Anguaño nun ye posible crear cuentes en {domain}, mas ten en cuenta que nun precises una cuenta nesti sirvidor pa usar Mastodon.",
"closed_registrations_modal.find_another_server": "Atopar otru sirvidor", "closed_registrations_modal.find_another_server": "Atopar otru sirvidor",
@ -114,6 +120,7 @@
"column_header.pin": "Fixar", "column_header.pin": "Fixar",
"column_header.show_settings": "Amosar la configuración", "column_header.show_settings": "Amosar la configuración",
"column_header.unpin": "Lliberar", "column_header.unpin": "Lliberar",
"column_search.cancel": "Encaboxar",
"column_subheading.settings": "Configuración", "column_subheading.settings": "Configuración",
"community.column_settings.media_only": "Namás el conteníu multimedia", "community.column_settings.media_only": "Namás el conteníu multimedia",
"community.column_settings.remote_only": "Namás lo remoto", "community.column_settings.remote_only": "Namás lo remoto",
@ -129,26 +136,42 @@
"compose_form.placeholder": "¿En qué pienses?", "compose_form.placeholder": "¿En qué pienses?",
"compose_form.poll.option_placeholder": "Opción {number}", "compose_form.poll.option_placeholder": "Opción {number}",
"compose_form.poll.type": "Tipu", "compose_form.poll.type": "Tipu",
"compose_form.publish": "Espublizar",
"compose_form.publish_form": "Artículu nuevu", "compose_form.publish_form": "Artículu nuevu",
"compose_form.reply": "Responder",
"confirmation_modal.cancel": "Encaboxar", "confirmation_modal.cancel": "Encaboxar",
"confirmations.block.confirm": "Bloquiar", "confirmations.block.confirm": "Bloquiar",
"confirmations.delete.confirm": "Desaniciar", "confirmations.delete.confirm": "Desaniciar",
"confirmations.delete.message": "¿De xuru que quies desaniciar esti artículu?", "confirmations.delete.message": "¿De xuru que quies desaniciar esti artículu?",
"confirmations.delete.title": "¿Desaniciar l'artículu?",
"confirmations.delete_list.confirm": "Desaniciar", "confirmations.delete_list.confirm": "Desaniciar",
"confirmations.delete_list.message": "¿De xuru que quies desaniciar permanentemente esta llista?",
"confirmations.delete_list.title": "¿Desaniciar la llista?",
"confirmations.discard_edit_media.confirm": "Escartar", "confirmations.discard_edit_media.confirm": "Escartar",
"confirmations.edit.confirm": "Editar", "confirmations.edit.confirm": "Editar",
"confirmations.edit.message": "La edición va sobrescribir el mensaxe que tas escribiendo. ¿De xuru que quies siguir?", "confirmations.edit.message": "La edición va sobrescribir el mensaxe que tas escribiendo. ¿De xuru que quies siguir?",
"confirmations.follow_to_list.title": "¿Siguir al usuariu?",
"confirmations.logout.confirm": "Zarrar la sesión", "confirmations.logout.confirm": "Zarrar la sesión",
"confirmations.logout.message": "¿De xuru que quies zarrar la sesión?", "confirmations.logout.message": "¿De xuru que quies zarrar la sesión?",
"confirmations.logout.title": "¿Zarrar la sesión?",
"confirmations.missing_alt_text.confirm": "Amestar testu alternativu",
"confirmations.missing_alt_text.title": "¿Quies amestar testu alternativu?",
"confirmations.redraft.confirm": "Desaniciar y reeditar", "confirmations.redraft.confirm": "Desaniciar y reeditar",
"confirmations.redraft.message": "¿De xuru que quies desaniciar esti artículu y reeditalu? Van perdese los favoritos y comparticiones, y les rempuestes al artículu orixinal van quedar güérfanes.",
"confirmations.redraft.title": "¿Desaniciar ya reeditar l'artículu?",
"confirmations.reply.confirm": "Responder", "confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Responder agora va sobrescribir el mensaxe que tas componiendo anguaño. ¿De xuru que quies siguir?",
"confirmations.unfollow.confirm": "Dexar de siguir", "confirmations.unfollow.confirm": "Dexar de siguir",
"confirmations.unfollow.message": "¿De xuru que quies dexar de siguir a {name}?", "confirmations.unfollow.message": "¿De xuru que quies dexar de siguir a {name}?",
"confirmations.unfollow.title": "¿Dexar de siguir al usuariu?",
"content_warning.hide": "Anubrir l'artículu",
"content_warning.show": "Amosar de toes toes",
"content_warning.show_more": "Amosar más", "content_warning.show_more": "Amosar más",
"conversation.delete": "Desaniciar la conversación", "conversation.delete": "Desaniciar la conversación",
"conversation.mark_as_read": "Marcar como lleíu", "conversation.mark_as_read": "Marcar como lleíu",
"conversation.open": "Ver la conversación", "conversation.open": "Ver la conversación",
"conversation.with": "Con {names}", "conversation.with": "Con {names}",
"copy_icon_button.copied": "Copiáu nel cartafueyu",
"copypaste.copied": "Copióse", "copypaste.copied": "Copióse",
"copypaste.copy_to_clipboard": "Copiar nel cartafueyu", "copypaste.copy_to_clipboard": "Copiar nel cartafueyu",
"directory.federated": "Del fediversu conocíu", "directory.federated": "Del fediversu conocíu",
@ -159,6 +182,7 @@
"dismissable_banner.community_timeline": "Esta seición contién los artículos públicos más actuales de los perfiles agospiaos nel dominiu {domain}.", "dismissable_banner.community_timeline": "Esta seición contién los artículos públicos más actuales de los perfiles agospiaos nel dominiu {domain}.",
"dismissable_banner.dismiss": "Escartar", "dismissable_banner.dismiss": "Escartar",
"domain_block_modal.block": "Bloquiar el sirvidor", "domain_block_modal.block": "Bloquiar el sirvidor",
"domain_block_modal.they_cant_follow": "Naide d'esti sirvidor pue siguite.",
"domain_block_modal.title": "Bloquiar el dominiu?", "domain_block_modal.title": "Bloquiar el dominiu?",
"domain_pill.server": "Sirvidor", "domain_pill.server": "Sirvidor",
"domain_pill.username": "Nome d'usuariu", "domain_pill.username": "Nome d'usuariu",
@ -176,6 +200,7 @@
"emoji_button.search_results": "Resultaos de la busca", "emoji_button.search_results": "Resultaos de la busca",
"emoji_button.symbols": "Símbolos", "emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viaxes y llugares", "emoji_button.travel": "Viaxes y llugares",
"empty_column.account_suspended": "Cuenta suspendida",
"empty_column.account_timeline": "¡Equí nun hai nengún artículu!", "empty_column.account_timeline": "¡Equí nun hai nengún artículu!",
"empty_column.blocks": "Nun bloquiesti a nengún perfil.", "empty_column.blocks": "Nun bloquiesti a nengún perfil.",
"empty_column.bookmarked_statuses": "Nun tienes nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.", "empty_column.bookmarked_statuses": "Nun tienes nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.",
@ -207,6 +232,7 @@
"filter_modal.added.settings_link": "páxina de configuración", "filter_modal.added.settings_link": "páxina de configuración",
"filter_modal.added.short_explanation": "Esti artículu amestóse a la categoría de peñera siguiente: {title}.", "filter_modal.added.short_explanation": "Esti artículu amestóse a la categoría de peñera siguiente: {title}.",
"filter_modal.added.title": "¡Amestóse la peñera!", "filter_modal.added.title": "¡Amestóse la peñera!",
"filter_modal.select_filter.expired": "caducó",
"filter_modal.select_filter.prompt_new": "Categoría nueva: {name}", "filter_modal.select_filter.prompt_new": "Categoría nueva: {name}",
"filter_modal.select_filter.search": "Buscar o crear", "filter_modal.select_filter.search": "Buscar o crear",
"filter_modal.select_filter.subtitle": "Usa una categoría esistente o créala", "filter_modal.select_filter.subtitle": "Usa una categoría esistente o créala",
@ -241,6 +267,7 @@
"hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "ensin {additional}", "hashtag.column_header.tag_mode.none": "ensin {additional}",
"hashtag.column_settings.select.no_options_message": "Nun s'atopó nenguna suxerencia", "hashtag.column_settings.select.no_options_message": "Nun s'atopó nenguna suxerencia",
"hashtag.column_settings.select.placeholder": "Introduz etiquetes…",
"hashtag.column_settings.tag_mode.all": "Toes estes", "hashtag.column_settings.tag_mode.all": "Toes estes",
"hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes", "hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes",
"hashtag.column_settings.tag_mode.none": "Nenguna d'estes", "hashtag.column_settings.tag_mode.none": "Nenguna d'estes",
@ -252,9 +279,14 @@
"home.column_settings.show_replies": "Amosar les rempuestes", "home.column_settings.show_replies": "Amosar les rempuestes",
"home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!", "home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!",
"home.show_announcements": "Amosar anuncios", "home.show_announcements": "Amosar anuncios",
"info_button.label": "Ayuda",
"interaction_modal.go": "Dir",
"interaction_modal.no_account_yet": "¿Tovía nun tienes una cuenta?",
"interaction_modal.on_another_server": "N'otru sirvidor", "interaction_modal.on_another_server": "N'otru sirvidor",
"interaction_modal.on_this_server": "Nesti sirvidor", "interaction_modal.on_this_server": "Nesti sirvidor",
"interaction_modal.title.follow": "Siguir a {name}",
"interaction_modal.title.reply": "Rempuesta al artículu de: {name}", "interaction_modal.title.reply": "Rempuesta al artículu de: {name}",
"interaction_modal.title.vote": "Vota na encuesta de {name}",
"intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.days": "{number, plural, one {# día} other {# díes}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
"intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}",
@ -291,10 +323,15 @@
"lightbox.close": "Zarrar", "lightbox.close": "Zarrar",
"lightbox.next": "Siguiente", "lightbox.next": "Siguiente",
"limited_account_hint.action": "Amosar el perfil de toes toes", "limited_account_hint.action": "Amosar el perfil de toes toes",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"lists.add_member": "Amestar",
"lists.add_to_list": "Amestar a la llista", "lists.add_to_list": "Amestar a la llista",
"lists.add_to_lists": "Amestar {name} a la llista", "lists.add_to_lists": "Amestar {name} a la llista",
"lists.create": "Crear",
"lists.create_list": "Crear llista", "lists.create_list": "Crear llista",
"lists.delete": "Desaniciar la llista", "lists.delete": "Desaniciar la llista",
"lists.done": "Fecho",
"lists.edit": "Editar la llista", "lists.edit": "Editar la llista",
"lists.list_name": "Nome de la llista", "lists.list_name": "Nome de la llista",
"lists.no_lists_yet": "Ensin llistes tovía.", "lists.no_lists_yet": "Ensin llistes tovía.",
@ -332,6 +369,11 @@
"notification.admin.sign_up": "{name} rexistróse", "notification.admin.sign_up": "{name} rexistróse",
"notification.follow": "{name} siguióte", "notification.follow": "{name} siguióte",
"notification.follow_request": "{name} solicitó siguite", "notification.follow_request": "{name} solicitó siguite",
"notification.label.mention": "Mención",
"notification.label.private_mention": "Mención privada",
"notification.label.private_reply": "Rempuesta privada",
"notification.label.reply": "Responder",
"notification.mention": "Mención",
"notification.mentioned_you": "{name} mentóte", "notification.mentioned_you": "{name} mentóte",
"notification.moderation-warning.learn_more": "Deprender más", "notification.moderation-warning.learn_more": "Deprender más",
"notification.poll": "Finó una encuesta na que votesti", "notification.poll": "Finó una encuesta na que votesti",
@ -364,6 +406,9 @@
"notifications.group": "{count} avisos", "notifications.group": "{count} avisos",
"notifications.mark_as_read": "Marcar tolos avisos como lleíos", "notifications.mark_as_read": "Marcar tolos avisos como lleíos",
"notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.", "notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.",
"notifications.policy.accept": "Aceptar",
"notifications.policy.accept_hint": "Amosar n'avisos",
"onboarding.follows.done": "Fecho",
"onboarding.profile.note": "Biografía", "onboarding.profile.note": "Biografía",
"onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…", "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…",
"password_confirmation.exceeds_maxlength": "La contraseña de confirmación supera la llongura de caráuteres máxima", "password_confirmation.exceeds_maxlength": "La contraseña de confirmación supera la llongura de caráuteres máxima",

View file

@ -253,6 +253,58 @@
"dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.", "dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.",
"dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.", "dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.",
"dismissable_banner.explore_tags": "Bu heşteqlər fediverse-də trend olublar. Daha çox fərqli insanlar tərəfindən istifadə olunan heşteqlər daha yuxarıda sıralanır.", "dismissable_banner.explore_tags": "Bu heşteqlər fediverse-də trend olublar. Daha çox fərqli insanlar tərəfindən istifadə olunan heşteqlər daha yuxarıda sıralanır.",
"dismissable_banner.public_timeline": "Bunlar, {domain} saytında insanların izlədiyi fediversedəki insanların ən son ictimai paylaşımlarıdır.",
"domain_block_modal.block": "Serveri blokla",
"domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla", "domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla",
"domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər." "domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər.",
"domain_block_modal.they_cant_follow": "Bu serverdən heç kim sizi izləyə bilməz.",
"domain_block_modal.they_wont_know": "Onlar bloklandıqlarını bilməyəcəklər.",
"domain_block_modal.title": "Domen bloklansın?",
"domain_block_modal.you_will_lose_num_followers": "Siz {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} izləyici}} və izlədiyiniz {followingCount, plural, one {{followingCountDisplay} istifadəçini} other {{followingCountDisplay} istifadəçini}} itirəcəksiniz.",
"domain_block_modal.you_will_lose_relationships": "Bu serverdən olan bütün izləyicilərinizi və izlədiklərinizi itirəcəksiniz.",
"domain_block_modal.you_wont_see_posts": "Bu serverdən olan paylaşımları və istifadəçilərdən olan bildirişləri görməyəcəksiniz.",
"domain_pill.activitypub_lets_connect": "Bu, təkcə Mastodonda deyil, həm də müxtəlif sosial tətbiqlərdə insanlarla əlaqə saxlamağa və onlarla ünsiyyət qurmağa imkan verir.",
"domain_pill.activitypub_like_language": "ActivityPub-ı Mastodonun digər sosial şəbəkələrlə danışdığı dil kimi düşünə bilərsiniz.",
"domain_pill.server": "Server",
"domain_pill.their_handle": "Tanıdıcısı:",
"domain_pill.their_server": "Onların bütün paylaşımlarının yaşadığı rəqəmsal ev.",
"domain_pill.their_username": "Serverdəki unikal identifikator. Fərqli serverlərdə eyni istifadəçi adı ilə istifadəçilər tapmaq mümkündür.",
"domain_pill.username": "İstifadəçi adı",
"domain_pill.whats_in_a_handle": "Tanıdıcı nədir?",
"domain_pill.who_they_are": "Tanıdıcılar kimin kim olduğunu və harada olduğunu bildirdiyi üçün siz <button>ActivityPub tərəfindən dəstəklənən platformaların</button> sosial şəbəkəsindəki bütün insanlarla əlaqə saxlaya bilərsiniz.",
"domain_pill.who_you_are": "Tanıdıcılar sizin kim olduğunuzu və harada olduğunuzu bildirdiyi üçün <button>ActivityPub tərəfindən dəstəklənən platformaların</button> sosial şəbəkəsindəki bütün insanlar sizlə əlaqə saxlaya bilər.",
"domain_pill.your_handle": "Tanıdıcınız:",
"domain_pill.your_server": "Bütün paylaşımlarınızın yaşadığı rəqəmsal ev. Buranı bəyənmirsiniz? İstədiyiniz vaxt serverdən köçün və izləyicilərinizi də aparın.",
"domain_pill.your_username": "Serverdəki unikal identifikatoruz. Fərqli serverlərdə eyni istifadəçi adı ilə istifadəçilər tapmaq mümkündür.",
"embed.instructions": "Aşağıdakı kodu kopyalayaraq bu postu veb-saytınıza yerləşdirin.",
"embed.preview": "Belə görünəcək:",
"emoji_button.activity": "Aktivlik",
"emoji_button.clear": "Təmizlə",
"emoji_button.custom": "Özəl",
"emoji_button.flags": "Bayraqlar",
"emoji_button.food": "Yemək və içki",
"emoji_button.label": "Emoji daxil et",
"emoji_button.nature": "Təbiət",
"emoji_button.not_found": "Uyğun emoji tapılmadı",
"emoji_button.objects": "Obyektlər",
"emoji_button.people": "İnsanlar",
"emoji_button.recent": "Tez-tez istifadə edilən",
"emoji_button.search": "Axtar...",
"emoji_button.search_results": "Axtarış nəticələri",
"emoji_button.symbols": "Simvollar",
"emoji_button.travel": "Səyahət və məkanlar",
"empty_column.account_hides_collections": "Bu istifadəçi bu məlumatı əlçatan etməməyi seçib",
"empty_column.account_suspended": "Hesab silinib",
"empty_column.account_timeline": "Heç bir paylaşım yoxdur!",
"empty_column.account_unavailable": "Profil əlçatan deyil",
"empty_column.blocks": "Hələ ki, heç bir istifadəçini bloklamamasınız.",
"empty_column.bookmarked_statuses": "Hələ ki, heç bir paylaşımı yadda saxlamamısınız. Yadda saxlayanda burada görünəcək.",
"empty_column.community": "Lokal zaman qrafiki boşdur. Topun yuvarlanmağa başlaması üçün ictimai bir şey paylaşın!",
"empty_column.direct": "Gizli etiketiniz yoxdur. Göndərdikdə və ya qəbul etdikdə burada görəcəksiniz.",
"empty_column.domain_blocks": "Hələ ki, bloklanmış domen yoxdur.",
"empty_column.explore_statuses": "Hal-hazırda trenddə heç yoxdur. Daha sonra yenidən yoxlayın!",
"empty_column.favourited_statuses": "Bəyəndiyiniz paylaşımlar yoxdur. Birini bəyəndikdə burada görünəcək.",
"empty_column.favourites": "Bu paylaşımı hələ ki, heç kim bəyənməyib. Bəyənildikdə burada görünəcək.",
"follow_suggestions.hints.friends_of_friends": "Bu profil izlədiyiniz insanlar arasında populyardır.",
"follow_suggestions.hints.most_followed": "Bu profil {domain} serverində ən çox izlənilənlərdən biridir."
} }

View file

@ -86,6 +86,7 @@
"alert.unexpected.message": "Узнікла нечаканая памылка.", "alert.unexpected.message": "Узнікла нечаканая памылка.",
"alert.unexpected.title": "Вой!", "alert.unexpected.title": "Вой!",
"alt_text_badge.title": "Альтэрнатыўны тэкст", "alt_text_badge.title": "Альтэрнатыўны тэкст",
"alt_text_modal.done": "Гатова",
"announcement.announcement": "Аб'ява", "announcement.announcement": "Аб'ява",
"annual_report.summary.archetype.booster": "Трэнда-сьледнік", "annual_report.summary.archetype.booster": "Трэнда-сьледнік",
"annual_report.summary.archetype.lurker": "Назіральнік", "annual_report.summary.archetype.lurker": "Назіральнік",
@ -211,6 +212,7 @@
"confirmations.logout.confirm": "Выйсці", "confirmations.logout.confirm": "Выйсці",
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?", "confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
"confirmations.logout.title": "Выйсці?", "confirmations.logout.title": "Выйсці?",
"confirmations.missing_alt_text.title": "Дадаць апісаньне?",
"confirmations.mute.confirm": "Ігнараваць", "confirmations.mute.confirm": "Ігнараваць",
"confirmations.redraft.confirm": "Выдаліць і перапісаць", "confirmations.redraft.confirm": "Выдаліць і перапісаць",
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.", "confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
@ -407,6 +409,7 @@
"ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?", "ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?", "ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
"ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?", "ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?",
"info_button.label": "Даведка",
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць з вашага ўліковага запісу.", "interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць з вашага ўліковага запісу.",
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца з вашага ўліковага запісу.", "interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца з вашага ўліковага запісу.",
"interaction_modal.on_another_server": "На іншым серверы", "interaction_modal.on_another_server": "На іншым серверы",

View file

@ -11,6 +11,7 @@
"about.not_available": "এই তথ্য এই সার্ভারে উন্মুক্ত করা হয়নি.", "about.not_available": "এই তথ্য এই সার্ভারে উন্মুক্ত করা হয়নি.",
"about.powered_by": "{mastodon} দ্বারা তৈরি বিকেন্দ্রীভূত সামাজিক মিডিয়া।", "about.powered_by": "{mastodon} দ্বারা তৈরি বিকেন্দ্রীভূত সামাজিক মিডিয়া।",
"about.rules": "সার্ভারের নিয়মাবলী", "about.rules": "সার্ভারের নিয়মাবলী",
"account.account_note_header": "ব্যক্তিগত টীকা",
"account.add_or_remove_from_list": "তালিকাতে যোগ বা অপসারণ করো", "account.add_or_remove_from_list": "তালিকাতে যোগ বা অপসারণ করো",
"account.badges.bot": "বট", "account.badges.bot": "বট",
"account.badges.group": "দল", "account.badges.group": "দল",
@ -19,6 +20,7 @@
"account.block_short": "ব্লক", "account.block_short": "ব্লক",
"account.blocked": "অবরুদ্ধ", "account.blocked": "অবরুদ্ধ",
"account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন", "account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন",
"account.copy": "অবতারের সংযোগ অনুলিপি করো",
"account.direct": "গোপনে মেনশন করুন @{name}", "account.direct": "গোপনে মেনশন করুন @{name}",
"account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে", "account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে",
"account.domain_blocked": "ডোমেইন ব্লক করা", "account.domain_blocked": "ডোমেইন ব্লক করা",
@ -29,6 +31,7 @@
"account.featured_tags.last_status_never": "কোনো পোস্ট নেই", "account.featured_tags.last_status_never": "কোনো পোস্ট নেই",
"account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ", "account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ",
"account.follow": "অনুসরণ", "account.follow": "অনুসরণ",
"account.follow_back": "তাকে অনুসরণ করো",
"account.followers": "অনুসরণকারী", "account.followers": "অনুসরণকারী",
"account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না.", "account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না.",
"account.following": "অনুসরণ করা হচ্ছে", "account.following": "অনুসরণ করা হচ্ছে",

View file

@ -1,5 +1,5 @@
{ {
"about.blocks": "Gweinyddion gyda chymedrolwyr", "about.blocks": "Gweinyddion wedi'u cymedroli",
"about.contact": "Cysylltwch â:", "about.contact": "Cysylltwch â:",
"about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.", "about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael", "about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael",

View file

@ -1,5 +1,5 @@
{ {
"about.blocks": "Administritaj serviloj", "about.blocks": "Reguligitaj serviloj",
"about.contact": "Kontakto:", "about.contact": "Kontakto:",
"about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.", "about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Kialo ne disponeblas", "about.domain_blocks.no_reason_available": "Kialo ne disponeblas",
@ -26,7 +26,7 @@
"account.domain_blocked": "Domajno blokita", "account.domain_blocked": "Domajno blokita",
"account.edit_profile": "Redakti la profilon", "account.edit_profile": "Redakti la profilon",
"account.enable_notifications": "Sciigu min kiam @{name} afiŝos", "account.enable_notifications": "Sciigu min kiam @{name} afiŝos",
"account.endorse": "Rekomendi ĉe via profilo", "account.endorse": "Prezenti ĉe via profilo",
"account.featured_tags.last_status_at": "Lasta afîŝo je {date}", "account.featured_tags.last_status_at": "Lasta afîŝo je {date}",
"account.featured_tags.last_status_never": "Neniu afiŝo", "account.featured_tags.last_status_never": "Neniu afiŝo",
"account.featured_tags.title": "Rekomendataj kradvortoj de {name}", "account.featured_tags.title": "Rekomendataj kradvortoj de {name}",
@ -219,8 +219,8 @@
"confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?", "confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?",
"confirmations.logout.title": "Ĉu elsaluti?", "confirmations.logout.title": "Ĉu elsaluti?",
"confirmations.missing_alt_text.confirm": "Aldoni alttekston", "confirmations.missing_alt_text.confirm": "Aldoni alttekston",
"confirmations.missing_alt_text.message": "Via afiŝo enhavas amaskomunikilaron sen altteksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.", "confirmations.missing_alt_text.message": "Via afiŝo enhavas aŭdvidaĵon sen anstataŭa teksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.",
"confirmations.missing_alt_text.secondary": "Afiŝu ĉiukaze", "confirmations.missing_alt_text.secondary": "Afiŝi ĉiuokaze",
"confirmations.missing_alt_text.title": "Ĉu aldoni alttekston?", "confirmations.missing_alt_text.title": "Ĉu aldoni alttekston?",
"confirmations.mute.confirm": "Silentigi", "confirmations.mute.confirm": "Silentigi",
"confirmations.redraft.confirm": "Forigi kaj reskribi", "confirmations.redraft.confirm": "Forigi kaj reskribi",
@ -540,7 +540,7 @@
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
"navigation_bar.lists": "Listoj", "navigation_bar.lists": "Listoj",
"navigation_bar.logout": "Elsaluti", "navigation_bar.logout": "Elsaluti",
"navigation_bar.moderation": "Reguligo", "navigation_bar.moderation": "Modereco",
"navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.mutes": "Silentigitaj uzantoj",
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
"navigation_bar.personal": "Persone", "navigation_bar.personal": "Persone",

View file

@ -13,13 +13,13 @@
"about.rules": "Reglas del servidor", "about.rules": "Reglas del servidor",
"account.account_note_header": "Nota personal", "account.account_note_header": "Nota personal",
"account.add_or_remove_from_list": "Agregar o eliminar de las listas", "account.add_or_remove_from_list": "Agregar o eliminar de las listas",
"account.badges.bot": "Bot", "account.badges.bot": "Automatizada",
"account.badges.group": "Grupo", "account.badges.group": "Grupo",
"account.block": "Bloquear a @{name}", "account.block": "Bloquear a @{name}",
"account.block_domain": "Bloquear dominio {domain}", "account.block_domain": "Bloquear dominio {domain}",
"account.block_short": "Bloquear", "account.block_short": "Bloquear",
"account.blocked": "Bloqueado", "account.blocked": "Bloqueado",
"account.cancel_follow_request": "Retirar solicitud de seguimiento", "account.cancel_follow_request": "Cancelar seguimiento",
"account.copy": "Copiar enlace al perfil", "account.copy": "Copiar enlace al perfil",
"account.direct": "Mención privada @{name}", "account.direct": "Mención privada @{name}",
"account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo",
@ -84,7 +84,7 @@
"alert.rate_limited.message": "Por favor, intenta después de las {retry_time, time, medium}.", "alert.rate_limited.message": "Por favor, intenta después de las {retry_time, time, medium}.",
"alert.rate_limited.title": "Tarifa limitada", "alert.rate_limited.title": "Tarifa limitada",
"alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Uy!",
"alt_text_badge.title": "Texto alternativo", "alt_text_badge.title": "Texto alternativo",
"alt_text_modal.add_alt_text": "Añadir texto alternativo", "alt_text_modal.add_alt_text": "Añadir texto alternativo",
"alt_text_modal.add_text_from_image": "Añadir texto de la imagen", "alt_text_modal.add_text_from_image": "Añadir texto de la imagen",
@ -193,7 +193,7 @@
"compose_form.poll.switch_to_single": "Cambiar la encuesta para permitir una única opción", "compose_form.poll.switch_to_single": "Cambiar la encuesta para permitir una única opción",
"compose_form.poll.type": "Estilo", "compose_form.poll.type": "Estilo",
"compose_form.publish": "Publicación", "compose_form.publish": "Publicación",
"compose_form.publish_form": "Publicar", "compose_form.publish_form": "Nueva publicación",
"compose_form.reply": "Respuesta", "compose_form.reply": "Respuesta",
"compose_form.save_changes": "Actualización", "compose_form.save_changes": "Actualización",
"compose_form.spoiler.marked": "Quitar advertencia de contenido", "compose_form.spoiler.marked": "Quitar advertencia de contenido",
@ -285,7 +285,7 @@
"emoji_button.food": "Comida y bebida", "emoji_button.food": "Comida y bebida",
"emoji_button.label": "Insertar emoji", "emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Naturaleza", "emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "Sin emojis coincidentes", "emoji_button.not_found": "No se han encontrado emojis que coincidan",
"emoji_button.objects": "Objetos", "emoji_button.objects": "Objetos",
"emoji_button.people": "Gente", "emoji_button.people": "Gente",
"emoji_button.recent": "Usados frecuentemente", "emoji_button.recent": "Usados frecuentemente",
@ -308,8 +308,8 @@
"empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
"empty_column.followed_tags": "No estás siguiendo ninguna etiqueta todavía. Cuando lo hagas, aparecerá aquí.", "empty_column.followed_tags": "No estás siguiendo ninguna etiqueta todavía. Cuando lo hagas, aparecerá aquí.",
"empty_column.hashtag": "No hay nada en esta etiqueta aún.", "empty_column.hashtag": "No hay nada en esta etiqueta aún.",
"empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", "empty_column.home": "¡Tu cronología está vacía! Sigue a más gente para llenarla.",
"empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos contenidos, aparecerán aquí.",
"empty_column.mutes": "Aún no has silenciado a ningún usuario.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.",
"empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.", "empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.",
"empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
@ -438,41 +438,41 @@
"intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.days": "{number, plural, one {# día} other {# días}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
"keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.back": "Volver atrás",
"keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", "keyboard_shortcuts.blocked": "Abrir la lista de usuarios bloqueados",
"keyboard_shortcuts.boost": "Impulsar publicación", "keyboard_shortcuts.boost": "Impulsar publicación",
"keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.column": "Enfocar columna",
"keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.compose": "Enfocar el área de texto de redacción",
"keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas",
"keyboard_shortcuts.down": "mover hacia abajo en la lista", "keyboard_shortcuts.down": "Descender en la lista",
"keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.enter": "Abrir publicación",
"keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación",
"keyboard_shortcuts.favourites": "Abrir lista de favoritos", "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
"keyboard_shortcuts.federated": "abrir el timeline federado", "keyboard_shortcuts.federated": "Abrir cronología federada",
"keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.heading": "Atajos de teclado",
"keyboard_shortcuts.home": "abrir el timeline propio", "keyboard_shortcuts.home": "Abrir cronología principal",
"keyboard_shortcuts.hotkey": "Tecla caliente", "keyboard_shortcuts.hotkey": "Tecla de acceso rápido",
"keyboard_shortcuts.legend": "para mostrar esta leyenda", "keyboard_shortcuts.legend": "Mostrar esta leyenda",
"keyboard_shortcuts.local": "abrir el timeline local", "keyboard_shortcuts.local": "Abrir cronología local",
"keyboard_shortcuts.mention": "para mencionar al autor", "keyboard_shortcuts.mention": "Mencionar al autor",
"keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", "keyboard_shortcuts.muted": "Abrir la lista de usuarios silenciados",
"keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.my_profile": "Abrir tu perfil",
"keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.notifications": "Abrir la columna de notificaciones",
"keyboard_shortcuts.open_media": "para abrir archivos multimedia", "keyboard_shortcuts.open_media": "Abrir multimedia",
"keyboard_shortcuts.pinned": "Abrir la lista de publicaciones fijadas", "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones fijadas",
"keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.profile": "Abrir perfil del autor",
"keyboard_shortcuts.reply": "Responder a la publicación", "keyboard_shortcuts.reply": "Responder a la publicación",
"keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
"keyboard_shortcuts.search": "para poner el foco en la búsqueda", "keyboard_shortcuts.search": "Enfocar la barra de búsqueda",
"keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo AC",
"keyboard_shortcuts.start": "abrir la columna \"comenzar\"", "keyboard_shortcuts.start": "Abrir la columna “empezar”",
"keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de AC",
"keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia",
"keyboard_shortcuts.toot": "Comenzar una nueva publicación", "keyboard_shortcuts.toot": "Comenzar una nueva publicación",
"keyboard_shortcuts.translate": "para traducir una publicación", "keyboard_shortcuts.translate": "para traducir una publicación",
"keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.unfocus": "Desenfocar área de redacción/búsqueda",
"keyboard_shortcuts.up": "para ir hacia arriba en la lista", "keyboard_shortcuts.up": "Ascender en la lista",
"lightbox.close": "Cerrar", "lightbox.close": "Cerrar",
"lightbox.next": "Siguiente", "lightbox.next": "Siguiente",
"lightbox.previous": "Anterior", "lightbox.previous": "Anterior",
@ -644,7 +644,7 @@
"notifications.grant_permission": "Conceder permiso.", "notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificaciones", "notifications.group": "{count} notificaciones",
"notifications.mark_as_read": "Marcar todas las notificaciones como leídas", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas",
"notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio, ya que se denegó el permiso",
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente",
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
"notifications.policy.accept": "Aceptar", "notifications.policy.accept": "Aceptar",
@ -835,7 +835,7 @@
"status.media.open": "Click para abrir", "status.media.open": "Click para abrir",
"status.media.show": "Click para mostrar", "status.media.show": "Click para mostrar",
"status.media_hidden": "Contenido multimedia oculto", "status.media_hidden": "Contenido multimedia oculto",
"status.mention": "Mencionar", "status.mention": "Mencionar @{name}",
"status.more": "Más", "status.more": "Más",
"status.mute": "Silenciar @{name}", "status.mute": "Silenciar @{name}",
"status.mute_conversation": "Silenciar conversación", "status.mute_conversation": "Silenciar conversación",
@ -855,7 +855,7 @@
"status.replied_to": "Respondió a {name}", "status.replied_to": "Respondió a {name}",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Responder al hilo", "status.replyAll": "Responder al hilo",
"status.report": "Reportar", "status.report": "Reportar @{name}",
"status.sensitive_warning": "Contenido sensible", "status.sensitive_warning": "Contenido sensible",
"status.share": "Compartir", "status.share": "Compartir",
"status.show_less_all": "Mostrar menos para todo", "status.show_less_all": "Mostrar menos para todo",
@ -880,21 +880,21 @@
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en los últimos {days, plural, one {días} other {{days} días}}", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en los últimos {days, plural, one {días} other {{days} días}}",
"trends.trending_now": "Tendencia ahora", "trends.trending_now": "Tendencia ahora",
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "ui.beforeunload": "Tu borrador se perderá si abandonas Mastodon.",
"units.short.billion": "{count} MM", "units.short.billion": "{count} MM",
"units.short.million": "{count} M", "units.short.million": "{count} M",
"units.short.thousand": "{count} K", "units.short.thousand": "{count} K",
"upload_area.title": "Arrastra y suelta para subir", "upload_area.title": "Arrastra y suelta para subir",
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Límite de subida de archivos excedido.", "upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_error.poll": "No se permite subir archivos con las encuestas.",
"upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.", "upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.",
"upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.", "upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.",
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.", "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.",
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.",
"upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.", "upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.",
"upload_form.edit": "Editar", "upload_form.edit": "Editar",
"upload_progress.label": "Subiendo", "upload_progress.label": "Subiendo...",
"upload_progress.processing": "Procesando…", "upload_progress.processing": "Procesando…",
"username.taken": "Ese nombre de usuario está ocupado. Prueba con otro", "username.taken": "Ese nombre de usuario está ocupado. Prueba con otro",
"video.close": "Cerrar video", "video.close": "Cerrar video",

View file

@ -56,9 +56,9 @@
"account.no_bio": "Sin biografía.", "account.no_bio": "Sin biografía.",
"account.open_original_page": "Abrir página original", "account.open_original_page": "Abrir página original",
"account.posts": "Publicaciones", "account.posts": "Publicaciones",
"account.posts_with_replies": "Pub. y respuestas", "account.posts_with_replies": "Publicaciones y respuestas",
"account.report": "Reportar a @{name}", "account.report": "Reportar a @{name}",
"account.requested": "Esperando aprobación. Clica para cancelar la solicitud de seguimiento", "account.requested": "Esperando aprobación. Haz clic para cancelar la solicitud de seguimiento",
"account.requested_follow": "{name} ha solicitado seguirte", "account.requested_follow": "{name} ha solicitado seguirte",
"account.share": "Compartir el perfil de @{name}", "account.share": "Compartir el perfil de @{name}",
"account.show_reblogs": "Mostrar impulsos de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}",
@ -71,7 +71,7 @@
"account.unmute": "Dejar de silenciar a @{name}", "account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications_short": "Dejar de silenciar notificaciones", "account.unmute_notifications_short": "Dejar de silenciar notificaciones",
"account.unmute_short": "Dejar de silenciar", "account.unmute_short": "Dejar de silenciar",
"account_note.placeholder": "Clic para añadir nota", "account_note.placeholder": "Haz clic para añadir nota",
"admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro",
"admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro",
"admin.dashboard.retention.average": "Media", "admin.dashboard.retention.average": "Media",
@ -81,7 +81,7 @@
"admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían", "admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían",
"admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios", "admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios",
"admin.impact_report.title": "Resumen de impacto", "admin.impact_report.title": "Resumen de impacto",
"alert.rate_limited.message": "Por favor, vuelve a intentarlo después de la(s) {retry_time, time, medium}.", "alert.rate_limited.message": "Por favor, vuelve a intentarlo después de {retry_time, time, medium}.",
"alert.rate_limited.title": "Tráfico limitado", "alert.rate_limited.title": "Tráfico limitado",
"alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!", "alert.unexpected.title": "¡Ups!",
@ -93,7 +93,7 @@
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descríbelo para personas con deficiencias auditivas…", "alt_text_modal.describe_for_people_with_hearing_impairments": "Descríbelo para personas con deficiencias auditivas…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descríbelo para personas con discapacidad visual…", "alt_text_modal.describe_for_people_with_visual_impairments": "Descríbelo para personas con discapacidad visual…",
"alt_text_modal.done": "Hecho", "alt_text_modal.done": "Hecho",
"announcement.announcement": "Anuncio", "announcement.announcement": "Comunicación",
"annual_report.summary.archetype.booster": "El cazador de tendencias", "annual_report.summary.archetype.booster": "El cazador de tendencias",
"annual_report.summary.archetype.lurker": "El acechador", "annual_report.summary.archetype.lurker": "El acechador",
"annual_report.summary.archetype.oracle": "El oráculo", "annual_report.summary.archetype.oracle": "El oráculo",
@ -243,7 +243,7 @@
"copypaste.copied": "Copiado", "copypaste.copied": "Copiado",
"copypaste.copy_to_clipboard": "Copiar al portapapeles", "copypaste.copy_to_clipboard": "Copiar al portapapeles",
"directory.federated": "Desde el fediverso conocido", "directory.federated": "Desde el fediverso conocido",
"directory.local": "Solo de {domain}", "directory.local": "Solo desde {domain}",
"directory.new_arrivals": "Recién llegados", "directory.new_arrivals": "Recién llegados",
"directory.recently_active": "Recientemente activo", "directory.recently_active": "Recientemente activo",
"disabled_account_banner.account_settings": "Ajustes de la cuenta", "disabled_account_banner.account_settings": "Ajustes de la cuenta",
@ -285,7 +285,7 @@
"emoji_button.food": "Comida y bebida", "emoji_button.food": "Comida y bebida",
"emoji_button.label": "Insertar emoji", "emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Naturaleza", "emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "No se encontró ningún emoji coincidente", "emoji_button.not_found": "No se encontró ningún emoji que coincida",
"emoji_button.objects": "Objetos", "emoji_button.objects": "Objetos",
"emoji_button.people": "Personas", "emoji_button.people": "Personas",
"emoji_button.recent": "Usados frecuentemente", "emoji_button.recent": "Usados frecuentemente",
@ -316,7 +316,7 @@
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
"error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.",
"error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.",
"error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, quizás puedas usar Mastodon desde otro navegador o aplicación nativa.",
"error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
"errors.unexpected_crash.report_issue": "Informar de un problema/error", "errors.unexpected_crash.report_issue": "Informar de un problema/error",
@ -330,7 +330,7 @@
"filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado, tendrás que cambiar la fecha de caducidad para que se aplique.", "filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado, tendrás que cambiar la fecha de caducidad para que se aplique.",
"filter_modal.added.expired_title": "¡Filtro caducado!", "filter_modal.added.expired_title": "¡Filtro caducado!",
"filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.", "filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.",
"filter_modal.added.review_and_configure_title": "Ajustes de filtro", "filter_modal.added.review_and_configure_title": "Ajustes de filtros",
"filter_modal.added.settings_link": "página de ajustes", "filter_modal.added.settings_link": "página de ajustes",
"filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.", "filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.",
"filter_modal.added.title": "¡Filtro añadido!", "filter_modal.added.title": "¡Filtro añadido!",
@ -352,7 +352,7 @@
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.curated_suggestion": "Recomendaciones del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo", "follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}", "follow_suggestions.featured_longer": "Sugerencias del equipo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues", "follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues",
"follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.", "follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.",
@ -380,11 +380,11 @@
"hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.all": "y {additional}",
"hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "sin {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}",
"hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", "hashtag.column_settings.select.no_options_message": "No se han encontrado sugerencias",
"hashtag.column_settings.select.placeholder": "Introduce etiquetas…", "hashtag.column_settings.select.placeholder": "Introduce etiquetas…",
"hashtag.column_settings.tag_mode.all": "Todos estos", "hashtag.column_settings.tag_mode.all": "Todas estas",
"hashtag.column_settings.tag_mode.any": "Cualquiera de estos", "hashtag.column_settings.tag_mode.any": "Cualquiera de estas",
"hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_mode.none": "Ninguna de estas",
"hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales en esta columna", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales en esta columna",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
@ -402,12 +402,12 @@
"hints.threads.see_more": "Ver más respuestas en {domain}", "hints.threads.see_more": "Ver más respuestas en {domain}",
"home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_reblogs": "Mostrar impulsos",
"home.column_settings.show_replies": "Mostrar respuestas", "home.column_settings.show_replies": "Mostrar respuestas",
"home.hide_announcements": "Ocultar anuncios", "home.hide_announcements": "Ocultar comunicaciones",
"home.pending_critical_update.body": "Por favor, ¡actualiza tu servidor Mastodon lo antes posible!", "home.pending_critical_update.body": "Por favor, ¡actualiza tu servidor Mastodon lo antes posible!",
"home.pending_critical_update.link": "Ver actualizaciones", "home.pending_critical_update.link": "Ver actualizaciones",
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!", "home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
"home.show_announcements": "Mostrar anuncios", "home.show_announcements": "Mostrar comunicaciones",
"ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.", "ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios de que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.",
"ignore_notifications_modal.filter_instead": "Filtrar en vez de ignorar", "ignore_notifications_modal.filter_instead": "Filtrar en vez de ignorar",
"ignore_notifications_modal.filter_to_act_users": "Aún podrás aceptar, rechazar o reportar usuarios", "ignore_notifications_modal.filter_to_act_users": "Aún podrás aceptar, rechazar o reportar usuarios",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ayuda a evitar confusiones potenciales", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ayuda a evitar confusiones potenciales",
@ -438,14 +438,14 @@
"intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.days": "{number, plural, one {# día} other {# días}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
"keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.back": "Navegar hacia atrás",
"keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", "keyboard_shortcuts.blocked": "Abrir lista de usuarios bloqueados",
"keyboard_shortcuts.boost": "Impulsar", "keyboard_shortcuts.boost": "Impulsar",
"keyboard_shortcuts.column": "Enfocar columna", "keyboard_shortcuts.column": "Enfocar columna",
"keyboard_shortcuts.compose": "enfocar el área de texto de redacción", "keyboard_shortcuts.compose": "Focalizar el área de texto de redacción",
"keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas",
"keyboard_shortcuts.down": "mover hacia abajo en la lista", "keyboard_shortcuts.down": "Moverse hacia abajo en la lista",
"keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.enter": "Abrir publicación",
"keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación",
"keyboard_shortcuts.favourites": "Abrir lista de favoritos", "keyboard_shortcuts.favourites": "Abrir lista de favoritos",
@ -455,24 +455,24 @@
"keyboard_shortcuts.hotkey": "Tecla rápida", "keyboard_shortcuts.hotkey": "Tecla rápida",
"keyboard_shortcuts.legend": "Mostrar esta leyenda", "keyboard_shortcuts.legend": "Mostrar esta leyenda",
"keyboard_shortcuts.local": "Abrir cronología local", "keyboard_shortcuts.local": "Abrir cronología local",
"keyboard_shortcuts.mention": "mencionar al autor", "keyboard_shortcuts.mention": "Mencionar autor",
"keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", "keyboard_shortcuts.muted": "Abrir lista de usuarios silenciados",
"keyboard_shortcuts.my_profile": "abrir tu perfil", "keyboard_shortcuts.my_profile": "Abrir tu perfil",
"keyboard_shortcuts.notifications": "abrir la columna de notificaciones", "keyboard_shortcuts.notifications": "Abrir columna de notificaciones",
"keyboard_shortcuts.open_media": "para abrir archivos multimedia", "keyboard_shortcuts.open_media": "Abrir multimedia",
"keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas", "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas",
"keyboard_shortcuts.profile": "abrir el perfil del autor", "keyboard_shortcuts.profile": "Abrir perfil del autor",
"keyboard_shortcuts.reply": "para responder", "keyboard_shortcuts.reply": "Responder a una publicación",
"keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
"keyboard_shortcuts.search": "para poner el foco en la búsqueda", "keyboard_shortcuts.search": "Focalizar barra de búsqueda",
"keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo de CW",
"keyboard_shortcuts.start": "abrir la columna \"comenzar\"", "keyboard_shortcuts.start": "Abrir la columna \"comenzar\"",
"keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto tras aviso de contenido (CW)",
"keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia",
"keyboard_shortcuts.toot": "Comienza una nueva publicación", "keyboard_shortcuts.toot": "Comenzar una nueva publicación",
"keyboard_shortcuts.translate": "para traducir una publicación", "keyboard_shortcuts.translate": "para traducir una publicación",
"keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.unfocus": "Quitar el foco de la caja de redacción/búsqueda",
"keyboard_shortcuts.up": "para ir hacia arriba en la lista", "keyboard_shortcuts.up": "Moverse hacia arriba en la lista",
"lightbox.close": "Cerrar", "lightbox.close": "Cerrar",
"lightbox.next": "Siguiente", "lightbox.next": "Siguiente",
"lightbox.previous": "Anterior", "lightbox.previous": "Anterior",
@ -644,7 +644,7 @@
"notifications.grant_permission": "Conceder permiso.", "notifications.grant_permission": "Conceder permiso.",
"notifications.group": "{count} notificaciones", "notifications.group": "{count} notificaciones",
"notifications.mark_as_read": "Marcar todas las notificaciones como leídas", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas",
"notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles porque se denegó el permiso del navegador previamente",
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente",
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
"notifications.policy.accept": "Aceptar", "notifications.policy.accept": "Aceptar",
@ -835,7 +835,7 @@
"status.media.open": "Pulsa para abrir", "status.media.open": "Pulsa para abrir",
"status.media.show": "Pulsa para mostrar", "status.media.show": "Pulsa para mostrar",
"status.media_hidden": "Contenido multimedia oculto", "status.media_hidden": "Contenido multimedia oculto",
"status.mention": "Mencionar", "status.mention": "Mencionar a @{name}",
"status.more": "Más", "status.more": "Más",
"status.mute": "Silenciar @{name}", "status.mute": "Silenciar @{name}",
"status.mute_conversation": "Silenciar conversación", "status.mute_conversation": "Silenciar conversación",
@ -855,7 +855,7 @@
"status.replied_to": "Respondió a {name}", "status.replied_to": "Respondió a {name}",
"status.reply": "Responder", "status.reply": "Responder",
"status.replyAll": "Responder al hilo", "status.replyAll": "Responder al hilo",
"status.report": "Reportar", "status.report": "Reportar a @{name}",
"status.sensitive_warning": "Contenido sensible", "status.sensitive_warning": "Contenido sensible",
"status.share": "Compartir", "status.share": "Compartir",
"status.show_less_all": "Mostrar menos para todo", "status.show_less_all": "Mostrar menos para todo",
@ -885,7 +885,7 @@
"units.short.million": "{count} M", "units.short.million": "{count} M",
"units.short.thousand": "{count} K", "units.short.thousand": "{count} K",
"upload_area.title": "Arrastra y suelta para subir", "upload_area.title": "Arrastra y suelta para subir",
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Añadir imágenes, un fichero de vídeo o de audio",
"upload_error.limit": "Límite de subida de archivos excedido.", "upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "No se permite la subida de archivos con encuestas.", "upload_error.poll": "No se permite la subida de archivos con encuestas.",
"upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.", "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.",
@ -894,7 +894,7 @@
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.", "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.",
"upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.",
"upload_form.edit": "Editar", "upload_form.edit": "Editar",
"upload_progress.label": "Subiendo", "upload_progress.label": "Subiendo...",
"upload_progress.processing": "Procesando…", "upload_progress.processing": "Procesando…",
"username.taken": "Ese nombre de usuario ya está en uso. Prueba con otro", "username.taken": "Ese nombre de usuario ya está en uso. Prueba con otro",
"video.close": "Cerrar video", "video.close": "Cerrar video",

View file

@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Välju", "confirmations.logout.confirm": "Välju",
"confirmations.logout.message": "Kas oled kindel, et soovid välja logida?", "confirmations.logout.message": "Kas oled kindel, et soovid välja logida?",
"confirmations.logout.title": "Logida välja?", "confirmations.logout.title": "Logida välja?",
"confirmations.missing_alt_text.confirm": "Lisa alt-tekst",
"confirmations.missing_alt_text.message": "Sinu postituses on ilma alt-tekstita meediat. Kirjelduse lisamine aitab su sisu muuta ligipääsetavaks rohkematele inimestele.",
"confirmations.missing_alt_text.secondary": "Postita siiski",
"confirmations.missing_alt_text.title": "Lisada alt-tekst?",
"confirmations.mute.confirm": "Vaigista", "confirmations.mute.confirm": "Vaigista",
"confirmations.redraft.confirm": "Kustuta & taasalusta", "confirmations.redraft.confirm": "Kustuta & taasalusta",
"confirmations.redraft.message": "Kindel, et soovid postituse kustutada ja võtta uue aluseks? Lemmikuks märkimised ja jagamised lähevad kaotsi ning vastused jäävad ilma algse postituseta.", "confirmations.redraft.message": "Kindel, et soovid postituse kustutada ja võtta uue aluseks? Lemmikuks märkimised ja jagamised lähevad kaotsi ning vastused jäävad ilma algse postituseta.",
@ -553,8 +557,11 @@
"notification.admin.report_statuses_other": "{name} raporteeris kohast {target}", "notification.admin.report_statuses_other": "{name} raporteeris kohast {target}",
"notification.admin.sign_up": "{name} registreerus", "notification.admin.sign_up": "{name} registreerus",
"notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} liitus", "notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} liitus",
"notification.annual_report.message": "Sinu {year} #Wrapstodon ootab! Avalda oma aasta tipphetked ja meeldejäävad hetked Mastodonis!",
"notification.annual_report.view": "Vaata #Wrapstodon",
"notification.favourite": "{name} märkis su postituse lemmikuks", "notification.favourite": "{name} märkis su postituse lemmikuks",
"notification.favourite.name_and_others_with_link": "{name} ja <a>{count, plural, one {# veel} other {# teist}}</a> märkis su postituse lemmikuks", "notification.favourite.name_and_others_with_link": "{name} ja <a>{count, plural, one {# veel} other {# teist}}</a> märkis su postituse lemmikuks",
"notification.favourite_pm": "{name} märkis sinu privaatse mainimise lemmikuks",
"notification.follow": "{name} alustas su jälgimist", "notification.follow": "{name} alustas su jälgimist",
"notification.follow.name_and_others": "{name} ja veel {count, plural, one {# kasutaja} other {# kasutajat}} hakkas sind jälgima", "notification.follow.name_and_others": "{name} ja veel {count, plural, one {# kasutaja} other {# kasutajat}} hakkas sind jälgima",
"notification.follow_request": "{name} soovib sind jälgida", "notification.follow_request": "{name} soovib sind jälgida",

View file

@ -78,6 +78,7 @@
"alt_text_modal.done": "Immed", "alt_text_modal.done": "Immed",
"announcement.announcement": "Ulɣu", "announcement.announcement": "Ulɣu",
"annual_report.summary.most_used_hashtag.none": "Ula yiwen", "annual_report.summary.most_used_hashtag.none": "Ula yiwen",
"annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin",
"audio.hide": "Ffer amesli", "audio.hide": "Ffer amesli",
"block_modal.show_less": "Ssken-d drus", "block_modal.show_less": "Ssken-d drus",
"block_modal.show_more": "Ssken-d ugar", "block_modal.show_more": "Ssken-d ugar",
@ -123,6 +124,7 @@
"column_header.pin": "Senteḍ", "column_header.pin": "Senteḍ",
"column_header.show_settings": "Ssken iɣewwaṛen", "column_header.show_settings": "Ssken iɣewwaṛen",
"column_header.unpin": "Kkes asenteḍ", "column_header.unpin": "Kkes asenteḍ",
"column_search.cancel": "Semmet",
"column_subheading.settings": "Iɣewwaṛen", "column_subheading.settings": "Iɣewwaṛen",
"community.column_settings.local_only": "Adigan kan", "community.column_settings.local_only": "Adigan kan",
"community.column_settings.media_only": "Imidyaten kan", "community.column_settings.media_only": "Imidyaten kan",
@ -141,6 +143,7 @@
"compose_form.poll.duration": "Tanzagt n tefrant", "compose_form.poll.duration": "Tanzagt n tefrant",
"compose_form.poll.multiple": "Aṭas n ufran", "compose_form.poll.multiple": "Aṭas n ufran",
"compose_form.poll.option_placeholder": "Taxtiṛt {number}", "compose_form.poll.option_placeholder": "Taxtiṛt {number}",
"compose_form.poll.single": "Yiwen wefran",
"compose_form.poll.type": "Aɣanib", "compose_form.poll.type": "Aɣanib",
"compose_form.publish": "Suffeɣ", "compose_form.publish": "Suffeɣ",
"compose_form.publish_form": "Tasuffeɣt tamaynut", "compose_form.publish_form": "Tasuffeɣt tamaynut",
@ -162,6 +165,7 @@
"confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.confirm": "Ffeɣ",
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
"confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?",
"confirmations.missing_alt_text.secondary": "Suffeɣ akken yebɣu yili",
"confirmations.mute.confirm": "Sgugem", "confirmations.mute.confirm": "Sgugem",
"confirmations.redraft.confirm": "Kkes sakin ɛiwed tira", "confirmations.redraft.confirm": "Kkes sakin ɛiwed tira",
"confirmations.reply.confirm": "Err", "confirmations.reply.confirm": "Err",
@ -273,7 +277,7 @@
"hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} imtekki} other {{counter} n imtekkiyen}}", "hashtag.counter_by_accounts": "{count, plural, one {{counter} imtekki} other {{counter} n imtekkiyen}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} ass-a",
"hashtag.follow": "Ḍfeṛ ahacṭag", "hashtag.follow": "Ḍfeṛ ahacṭag",
"hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}", "hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}",
"hints.threads.replies_may_be_missing": "Tiririyin d-yusan deg iqeddacen nniḍen, yezmer ur d-ddant ara.", "hints.threads.replies_may_be_missing": "Tiririyin d-yusan deg iqeddacen nniḍen, yezmer ur d-ddant ara.",
@ -284,10 +288,19 @@
"home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !", "home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !",
"home.pending_critical_update.link": "Wali ileqman", "home.pending_critical_update.link": "Wali ileqman",
"home.show_announcements": "Ssken-d ulɣuyen", "home.show_announcements": "Ssken-d ulɣuyen",
"info_button.label": "Tallelt",
"interaction_modal.action.favourite": "I wakken ad tkemmleḍ, yessefk ad d-tḥemmleḍ seg umiḍan-ik·im.",
"interaction_modal.action.follow": "I wakken ad tkemmleḍ, yessefk ad d-tḍefreḍ seg umiḍan-ik·im.",
"interaction_modal.action.reblog": "I wakken ad tkemmleḍ, yessefk ad d-snernuḍ seg umiḍan-ik·im.",
"interaction_modal.action.reply": "I wakken ad tkemmleḍ, yessefk ad d-terreḍ seg umiḍan-ik·im.",
"interaction_modal.action.vote": "I wakken ad tkemmleḍ, yessefk ad d-tferneḍ seg umiḍan-ik·im.",
"interaction_modal.go": "Ddu",
"interaction_modal.no_account_yet": "Werɛad ur tesɛid amiḍan?",
"interaction_modal.on_another_server": "Deg uqeddac nniḍen", "interaction_modal.on_another_server": "Deg uqeddac nniḍen",
"interaction_modal.on_this_server": "Deg uqeddac-ayi", "interaction_modal.on_this_server": "Deg uqeddac-ayi",
"interaction_modal.title.follow": "Ḍfer {name}", "interaction_modal.title.follow": "Ḍfer {name}",
"interaction_modal.title.reply": "Tiririt i tsuffeɣt n {name}", "interaction_modal.title.reply": "Tiririt i tsuffeɣt n {name}",
"interaction_modal.username_prompt": "Amedya: {example}",
"intervals.full.days": "{number, plural, one {# wass} other {# wussan}}", "intervals.full.days": "{number, plural, one {# wass} other {# wussan}}",
"intervals.full.hours": "{number, plural, one {# usarag} other {# yisragen}}", "intervals.full.hours": "{number, plural, one {# usarag} other {# yisragen}}",
"intervals.full.minutes": "{number, plural, one {# n tesdat} other {# n tesdatin}}", "intervals.full.minutes": "{number, plural, one {# n tesdat} other {# n tesdatin}}",
@ -436,6 +449,7 @@
"notifications.mark_as_read": "Creḍ meṛṛa alɣuten am wakken ttwaɣran", "notifications.mark_as_read": "Creḍ meṛṛa alɣuten am wakken ttwaɣran",
"notifications.permission_denied": "D awezɣi ad yili wermad n walɣuten n tnarit axateṛ turagt tettwagdel", "notifications.permission_denied": "D awezɣi ad yili wermad n walɣuten n tnarit axateṛ turagt tettwagdel",
"notifications.policy.drop": "Anef-as", "notifications.policy.drop": "Anef-as",
"notifications.policy.filter": "Sizdeg",
"notifications.policy.filter_new_accounts.hint": "Imiḍanen imaynuten i d-yennulfan deg {days, plural, one {yiwen n wass} other {# n wussan}} yezrin", "notifications.policy.filter_new_accounts.hint": "Imiḍanen imaynuten i d-yennulfan deg {days, plural, one {yiwen n wass} other {# n wussan}} yezrin",
"notifications.policy.filter_new_accounts_title": "Imiḍan imaynuten", "notifications.policy.filter_new_accounts_title": "Imiḍan imaynuten",
"notifications.policy.filter_not_followers_hint": "Ula d wid akked tid i k·m-id-iḍefren, ur wwiḍen ara {days, plural, one {yiwen wass} other {# wussan}}", "notifications.policy.filter_not_followers_hint": "Ula d wid akked tid i k·m-id-iḍefren, ur wwiḍen ara {days, plural, one {yiwen wass} other {# wussan}}",
@ -485,7 +499,7 @@
"relative_time.just_now": "tura", "relative_time.just_now": "tura",
"relative_time.minutes": "{number}tis", "relative_time.minutes": "{number}tis",
"relative_time.seconds": "{number}tas", "relative_time.seconds": "{number}tas",
"relative_time.today": "assa", "relative_time.today": "ass-a",
"reply_indicator.cancel": "Sefsex", "reply_indicator.cancel": "Sefsex",
"reply_indicator.poll": "Afmiḍi", "reply_indicator.poll": "Afmiḍi",
"report.block": "Sewḥel", "report.block": "Sewḥel",
@ -535,6 +549,7 @@
"search.quick_action.status_search": "Tisuffaɣ mṣadan d {x}", "search.quick_action.status_search": "Tisuffaɣ mṣadan d {x}",
"search.search_or_paste": "Nadi neɣ senṭeḍ URL", "search.search_or_paste": "Nadi neɣ senṭeḍ URL",
"search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.", "search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.",
"search_popout.full_text_search_logged_out_message": "Yella kan mi ara tiliḍ d uqqin.",
"search_popout.language_code": "Tangalt ISO n tutlayt", "search_popout.language_code": "Tangalt ISO n tutlayt",
"search_popout.options": "Iwellihen n unadi", "search_popout.options": "Iwellihen n unadi",
"search_popout.quick_actions": "Tigawin tiruradin", "search_popout.quick_actions": "Tigawin tiruradin",
@ -546,6 +561,7 @@
"search_results.no_results": "Ulac igemmaḍ.", "search_results.no_results": "Ulac igemmaḍ.",
"search_results.see_all": "Wali-ten akk", "search_results.see_all": "Wali-ten akk",
"search_results.statuses": "Tisuffaɣ", "search_results.statuses": "Tisuffaɣ",
"search_results.title": "Igemmaḍ n unadi ɣef \"{q}\"",
"server_banner.active_users": "iseqdacen urmiden", "server_banner.active_users": "iseqdacen urmiden",
"server_banner.administered_by": "Yettwadbel sɣur :", "server_banner.administered_by": "Yettwadbel sɣur :",
"server_banner.server_stats": "Tidaddanin n uqeddac:", "server_banner.server_stats": "Tidaddanin n uqeddac:",

View file

@ -233,8 +233,46 @@
"confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}", "confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}",
"confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?", "confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?",
"content_warning.hide": "Am-khàm PO文", "content_warning.hide": "Am-khàm PO文",
"content_warning.show": "Mā tio̍h顯示",
"content_warning.show_more": "其他內容",
"conversation.delete": "Thâi掉會話",
"conversation.mark_as_read": "標做有讀",
"conversation.open": "顯示會話",
"conversation.with": "Kap {names}",
"copy_icon_button.copied": "有khóo-pih kàu tsián貼pang",
"copypaste.copied": "有khóo-pih",
"copypaste.copy_to_clipboard": "Khóo-pih kàu tsián貼pang",
"directory.federated": "Uì知影ê Fediverse",
"directory.local": "Kan-ta uì {domain}",
"directory.new_arrivals": "新來ê",
"directory.recently_active": "最近活動ê",
"disabled_account_banner.account_settings": "口座ê設定",
"disabled_account_banner.text": "Lí ê口座 {disabledAccount} tsit-má hōo lâng停止使用。",
"dismissable_banner.community_timeline": "Tsia sī uì 口座hē tī {domain} ê lâng最近所公開PO ê。",
"dismissable_banner.dismiss": "Mài kā tshah",
"domain_block_modal.block": "封鎖服侍器",
"domain_block_modal.block_account_instead": "改做封鎖 @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Uì tsit ê服侍器來ê通kap lí khah早ê PO交流。",
"embed.preview": "伊e án-ne顯示\n",
"emoji_button.activity": "活動",
"emoji_button.clear": "清掉",
"emoji_button.custom": "自訂ê",
"emoji_button.flags": "旗á",
"emoji_button.food": "Tsia̍h-mi̍h kap 飲料",
"emoji_button.label": "加入繪文字(emoji)", "emoji_button.label": "加入繪文字(emoji)",
"emoji_button.nature": "自然", "emoji_button.nature": "自然",
"emoji_button.not_found": "Tshuē無對應ê emoji",
"emoji_button.objects": "物件",
"emoji_button.people": "Lâng",
"emoji_button.recent": "Tsia̍p用ê",
"emoji_button.search": "Tshiau-tshuē……",
"emoji_button.search_results": "Tshiau-tshuē ê結果",
"emoji_button.symbols": "符號",
"emoji_button.travel": "旅行kap地點",
"empty_column.account_hides_collections": "Tsit位用者選擇無愛公開tsit ê資訊",
"empty_column.account_suspended": "口座已經受停止",
"empty_column.account_timeline": "Tsia無PO文",
"empty_column.account_unavailable": "個人資料bē當看",
"notification.favourite_pm": "{name} kah意lí ê私人提起", "notification.favourite_pm": "{name} kah意lí ê私人提起",
"notification.favourite_pm.name_and_others_with_link": "{name} kap<a>{count, plural, other {另外 # ê lâng}}</a>kah意lí ê私人提起", "notification.favourite_pm.name_and_others_with_link": "{name} kap<a>{count, plural, other {另外 # ê lâng}}</a>kah意lí ê私人提起",
"search_popout.language_code": "ISO語言代碼", "search_popout.language_code": "ISO語言代碼",

View file

@ -117,6 +117,8 @@
"compose_form.publish_form": "नयाँ पोस्ट", "compose_form.publish_form": "नयाँ पोस्ट",
"compose_form.reply": "जवाफ दिनुहोस्", "compose_form.reply": "जवाफ दिनुहोस्",
"compose_form.save_changes": "अपडेट गर्नुहोस्", "compose_form.save_changes": "अपडेट गर्नुहोस्",
"confirmation_modal.cancel": "रद्द गर्नुहोस्",
"confirmations.block.confirm": "ब्लक गर्नुहोस्",
"confirmations.delete.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो पोष्ट मेटाउन चाहनुहुन्छ?", "confirmations.delete.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो पोष्ट मेटाउन चाहनुहुन्छ?",
"confirmations.delete.title": "पोस्ट मेटाउने?", "confirmations.delete.title": "पोस्ट मेटाउने?",
"confirmations.delete_list.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो सूची स्थायी रूपमा मेटाउन चाहनुहुन्छ?", "confirmations.delete_list.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो सूची स्थायी रूपमा मेटाउन चाहनुहुन्छ?",
@ -129,7 +131,10 @@
"confirmations.follow_to_list.title": "प्रयोगकर्तालाई फलो गर्ने?", "confirmations.follow_to_list.title": "प्रयोगकर्तालाई फलो गर्ने?",
"confirmations.logout.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाइँ लाई लग आउट गर्न चाहनुहुन्छ?", "confirmations.logout.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाइँ लाई लग आउट गर्न चाहनुहुन्छ?",
"confirmations.logout.title": "लग आउट गर्ने?", "confirmations.logout.title": "लग आउट गर्ने?",
"confirmations.mute.confirm": "म्यूट गर्नुहोस्",
"confirmations.redraft.confirm": "मेटाएर पुन: ड्राफ्ट गर्नुहोस्",
"confirmations.redraft.title": "पोस्ट मेटाएर पुन: ड्राफ्ट गर्ने?", "confirmations.redraft.title": "पोस्ट मेटाएर पुन: ड्राफ्ट गर्ने?",
"confirmations.reply.confirm": "जवाफ दिनुहोस्",
"confirmations.reply.message": "अहिले जवाफ दिनाले तपाईंले हाल लेखिरहनुभएको सन्देश अधिलेखन हुनेछ। के तपाईं अगाडि बढ्न चाहनुहुन्छ?", "confirmations.reply.message": "अहिले जवाफ दिनाले तपाईंले हाल लेखिरहनुभएको सन्देश अधिलेखन हुनेछ। के तपाईं अगाडि बढ्न चाहनुहुन्छ?",
"confirmations.reply.title": "पोस्ट अधिलेखन गर्ने?", "confirmations.reply.title": "पोस्ट अधिलेखन गर्ने?",
"confirmations.unfollow.confirm": "अनफलो गर्नुहोस्", "confirmations.unfollow.confirm": "अनफलो गर्नुहोस्",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Det oppstod eit uventa problem.", "alert.unexpected.message": "Det oppstod eit uventa problem.",
"alert.unexpected.title": "Oi sann!", "alert.unexpected.title": "Oi sann!",
"alt_text_badge.title": "Alternativ tekst", "alt_text_badge.title": "Alternativ tekst",
"alt_text_modal.add_alt_text": "Legg til alternativ tekst",
"alt_text_modal.add_text_from_image": "Legg til tekst frå biletet",
"alt_text_modal.cancel": "Avbryt",
"alt_text_modal.change_thumbnail": "Endre miniatyrbilete",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Skriv ei skildring for menneske med høyrselsnedsetjingar…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Skriv ei skildring for menneske med synsnedsetjingar…",
"alt_text_modal.done": "Ferdig",
"announcement.announcement": "Kunngjering", "announcement.announcement": "Kunngjering",
"annual_report.summary.archetype.booster": "Den som jaktar på noko kult", "annual_report.summary.archetype.booster": "Den som jaktar på noko kult",
"annual_report.summary.archetype.lurker": "Den som heng på hjørnet", "annual_report.summary.archetype.lurker": "Den som heng på hjørnet",
@ -411,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Oversjå varsel frå folk som ikkje fylgjer deg?", "ignore_notifications_modal.not_followers_title": "Oversjå varsel frå folk som ikkje fylgjer deg?",
"ignore_notifications_modal.not_following_title": "Oversjå varsel frå folk du ikkje fylgjer?", "ignore_notifications_modal.not_following_title": "Oversjå varsel frå folk du ikkje fylgjer?",
"ignore_notifications_modal.private_mentions_title": "Oversjå varsel frå masseutsende private omtaler?", "ignore_notifications_modal.private_mentions_title": "Oversjå varsel frå masseutsende private omtaler?",
"info_button.label": "Hjelp",
"info_button.what_is_alt_text": "<h1>Kva er alternativ tekst?</h1> <p>Alternativ eller skildrande tekst gjev ei skildring av biletet for menneske som har synsvanskar, sein nettilkopling eller dei som ser etter ekstra innhald.</p> <p>Du gjer innhaldet ditt meir tilgjengeleg og forståeleg for alle ved å skriva klåre, presise og nøytrale alt-tekstar.</p> <ul> <li>Skriv om viktige element</li> <li>Oppsummer tekst i bilete</li> <li>Skriv vanlege setningar</li> <li>Unngå unyttige opplysingar</li> <li>Legg vekt på hovudpunkta i innhaldsrike visuelle element, som grafar eller kart</li> </ul>",
"interaction_modal.action.favourite": "Du må favorittmerka frå kontoen din for å halda fram.", "interaction_modal.action.favourite": "Du må favorittmerka frå kontoen din for å halda fram.",
"interaction_modal.action.follow": "Du må fylgja frå kontoen din for å halda fram.", "interaction_modal.action.follow": "Du må fylgja frå kontoen din for å halda fram.",
"interaction_modal.action.reblog": "Du må framheva frå kontoen din for å halda fram.", "interaction_modal.action.reblog": "Du må framheva frå kontoen din for å halda fram.",

File diff suppressed because it is too large Load diff

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.message": "Ocorreu um erro inesperado.",
"alert.unexpected.title": "Eita!", "alert.unexpected.title": "Eita!",
"alt_text_badge.title": "Texto alternativo", "alt_text_badge.title": "Texto alternativo",
"alt_text_modal.add_alt_text": "Adicione texto alternativo",
"alt_text_modal.add_text_from_image": "Adicione texto da imagem",
"alt_text_modal.cancel": "Cancelar",
"alt_text_modal.change_thumbnail": "Alterar miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "…Descreva isso para pessoas com deficiências auditivas.…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descreva isso para pessoas com deficiências visuais…",
"alt_text_modal.done": "Feito",
"announcement.announcement": "Comunicados", "announcement.announcement": "Comunicados",
"annual_report.summary.archetype.booster": "Caçador legal", "annual_report.summary.archetype.booster": "Caçador legal",
"annual_report.summary.archetype.lurker": "O espreitador", "annual_report.summary.archetype.lurker": "O espreitador",
@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Sair", "confirmations.logout.confirm": "Sair",
"confirmations.logout.message": "Você tem certeza de que deseja sair?", "confirmations.logout.message": "Você tem certeza de que deseja sair?",
"confirmations.logout.title": "Sair da sessão?", "confirmations.logout.title": "Sair da sessão?",
"confirmations.missing_alt_text.confirm": "Adicione texto alternativo",
"confirmations.missing_alt_text.message": "Seu post contém mídia sem texto alternativo. Adicionar descrições ajuda a tornar seu conteúdo acessível para mais pessoas.",
"confirmations.missing_alt_text.secondary": "Postar mesmo assim",
"confirmations.missing_alt_text.title": "Adicionar texto alternativo?",
"confirmations.mute.confirm": "Silenciar", "confirmations.mute.confirm": "Silenciar",
"confirmations.redraft.confirm": "Excluir e rascunhar", "confirmations.redraft.confirm": "Excluir e rascunhar",
"confirmations.redraft.message": "Você tem certeza de que quer apagar essa postagem e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à postagem original ficarão órfãs.", "confirmations.redraft.message": "Você tem certeza de que quer apagar essa postagem e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à postagem original ficarão órfãs.",
@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não seguem você?", "ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não seguem você?",
"ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que você não segue?", "ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que você não segue?",
"ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?", "ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?",
"info_button.label": "Ajuda",
"info_button.what_is_alt_text": "<h1>O que é texto alternativo?</h1><p>O texto alternativo fornece descrições de imagens para pessoas com deficiências visuais, conexões de internet de baixa largura de banda ou aquelas que buscam mais contexto.</p><p>Você pode melhorar a acessibilidade e a compreensão para todos escrevendo texto alternativo claro, conciso e objetivo.</p> <ul> <li>Capture elementos importantes</li> <li>Resuma textos em imagens</li> <li>Use estrutura de frases regular</li> <li>Evite informações redundantes</li> <li>Foque em tendências e descobertas principais em visuais complexos (como diagramas ou mapas)</li> </ul>",
"interaction_modal.action.favourite": "Para continuar, você precisa favoritar na sua conta.", "interaction_modal.action.favourite": "Para continuar, você precisa favoritar na sua conta.",
"interaction_modal.action.follow": "Para continuar, você precisa seguir da sua conta.", "interaction_modal.action.follow": "Para continuar, você precisa seguir da sua conta.",
"interaction_modal.action.reblog": "Para continuar, você precisa impulsionar na sua conta.", "interaction_modal.action.reblog": "Para continuar, você precisa impulsionar na sua conta.",
@ -457,6 +470,7 @@
"keyboard_shortcuts.toggle_hidden": "expandir/ocultar aviso de conteúdo", "keyboard_shortcuts.toggle_hidden": "expandir/ocultar aviso de conteúdo",
"keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar mídia", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar mídia",
"keyboard_shortcuts.toot": "compor novo toot", "keyboard_shortcuts.toot": "compor novo toot",
"keyboard_shortcuts.translate": "Para traduzir um post",
"keyboard_shortcuts.unfocus": "desfocar de tudo", "keyboard_shortcuts.unfocus": "desfocar de tudo",
"keyboard_shortcuts.up": "mover para cima", "keyboard_shortcuts.up": "mover para cima",
"lightbox.close": "Fechar", "lightbox.close": "Fechar",
@ -836,6 +850,7 @@
"status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.", "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.",
"status.redraft": "Excluir e rascunhar", "status.redraft": "Excluir e rascunhar",
"status.remove_bookmark": "Remover do Salvos", "status.remove_bookmark": "Remover do Salvos",
"status.remove_favourite": "Remover dos favoritos",
"status.replied_in_thread": "Respondido na conversa", "status.replied_in_thread": "Respondido na conversa",
"status.replied_to": "Em resposta a {name}", "status.replied_to": "Em resposta a {name}",
"status.reply": "Responder", "status.reply": "Responder",

View file

@ -207,8 +207,8 @@
"confirmations.delete_list.confirm": "Удалить", "confirmations.delete_list.confirm": "Удалить",
"confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?",
"confirmations.delete_list.title": "Удалить список?", "confirmations.delete_list.title": "Удалить список?",
"confirmations.discard_edit_media.confirm": "Отменить", "confirmations.discard_edit_media.confirm": "Сбросить",
"confirmations.discard_edit_media.message": "У вас имеются несохранённые изменения превью и описания медиафайла, отменить их?", "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения в описании мультимедиа или предпросмотре, сбросить их?",
"confirmations.edit.confirm": "Редактировать", "confirmations.edit.confirm": "Редактировать",
"confirmations.edit.message": "При редактировании, текст набираемого поста будет очищен. Продолжить?", "confirmations.edit.message": "При редактировании, текст набираемого поста будет очищен. Продолжить?",
"confirmations.edit.title": "Переписать сообщение?", "confirmations.edit.title": "Переписать сообщение?",

View file

@ -736,6 +736,7 @@
"server_banner.is_one_of_many": "{domain} je jeden z mnohých nezávislých Mastodon serverov, ktoré môžeš použiť na zúčastňovanie sa v rámci fediversa.", "server_banner.is_one_of_many": "{domain} je jeden z mnohých nezávislých Mastodon serverov, ktoré môžeš použiť na zúčastňovanie sa v rámci fediversa.",
"server_banner.server_stats": "Štatistiky servera:", "server_banner.server_stats": "Štatistiky servera:",
"sign_in_banner.create_account": "Vytvoriť účet", "sign_in_banner.create_account": "Vytvoriť účet",
"sign_in_banner.mastodon_is": "Mastodon je najlepšia cesta ako udržať krok s tým, čo sa deje.",
"sign_in_banner.sign_in": "Prihlásiť sa", "sign_in_banner.sign_in": "Prihlásiť sa",
"sign_in_banner.sso_redirect": "Prihlásenie alebo registrácia", "sign_in_banner.sso_redirect": "Prihlásenie alebo registrácia",
"status.admin_account": "Moderovať @{name}", "status.admin_account": "Moderovať @{name}",

View file

@ -252,7 +252,7 @@
"dismissable_banner.dismiss": "Відхилити", "dismissable_banner.dismiss": "Відхилити",
"dismissable_banner.explore_links": "Ці новини сьогодні найбільше поширюють у fediverse. Свіжіші новини, опубліковані більшою кількістю різних людей, оцінюються вище.", "dismissable_banner.explore_links": "Ці новини сьогодні найбільше поширюють у fediverse. Свіжіші новини, опубліковані більшою кількістю різних людей, оцінюються вище.",
"dismissable_banner.explore_statuses": "Ці дописи з усього fediverse сьогодні набирають популярності. Новіші дописи з більшою кількістю посилень і додавань у вибрані мають вищий рейтинг.", "dismissable_banner.explore_statuses": "Ці дописи з усього fediverse сьогодні набирають популярності. Новіші дописи з більшою кількістю посилень і додавань у вибрані мають вищий рейтинг.",
"dismissable_banner.explore_tags": "Ці гештеґи сьогодні набувають популярності у fediverse. Гештеґи, якими користується більше людей, займають вищі позиції.", "dismissable_banner.explore_tags": "Ці хештеги сьогодні набувають популярності у fediverse. Хештеги, якими користується більше людей, займають вищі позиції.",
"dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей у федіверсі, на яких підписані люди в {domain}.", "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей у федіверсі, на яких підписані люди в {domain}.",
"domain_block_modal.block": "Блокувати сервер", "domain_block_modal.block": "Блокувати сервер",
"domain_block_modal.block_account_instead": "Блокувати @{name} натомість", "domain_block_modal.block_account_instead": "Блокувати @{name} натомість",

View file

@ -296,7 +296,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
nil nil
end end
@status.mentions.upsert_all(currently_mentioned_account_ids.map { |id| { account_id: id, silent: false } }, unique_by: %w(status_id account_id)) @status.mentions.upsert_all(currently_mentioned_account_ids.uniq.map { |id| { account_id: id, silent: false } }, unique_by: %w(status_id account_id))
# If previous mentions are no longer contained in the text, convert them # If previous mentions are no longer contained in the text, convert them
# to silent mentions, since withdrawing access from someone who already # to silent mentions, since withdrawing access from someone who already

View file

@ -50,10 +50,14 @@ class BlockDomainService < BaseService
def notify_of_severed_relationships! def notify_of_severed_relationships!
return if @domain_block_event.nil? return if @domain_block_event.nil?
# TODO: check how efficient that query is, also check `push_bulk`/`perform_bulk` # find_in_batches and perform_bulk both default to batches of 1000
@domain_block_event.affected_local_accounts.reorder(nil).find_each do |account| @domain_block_event.affected_local_accounts.reorder(nil).find_in_batches do |accounts|
event = AccountRelationshipSeveranceEvent.create!(account: account, relationship_severance_event: @domain_block_event) notification_jobs_args = accounts.map do |account|
LocalNotificationWorker.perform_async(account.id, event.id, 'AccountRelationshipSeveranceEvent', 'severed_relationships') event = AccountRelationshipSeveranceEvent.create!(account:, relationship_severance_event: @domain_block_event)
[account.id, event.id, 'AccountRelationshipSeveranceEvent', 'severed_relationships']
end
LocalNotificationWorker.perform_bulk(notification_jobs_args)
end end
end end

View file

@ -23,6 +23,8 @@ ja:
models: models:
account: account:
attributes: attributes:
fields:
fields_with_values_missing_labels: プロフィール補足情報にラベルが入力されていないものがあります
username: username:
invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください
reserved: は予約されています reserved: は予約されています

View file

@ -23,6 +23,8 @@ pt-BR:
models: models:
account: account:
attributes: attributes:
fields:
fields_with_values_missing_labels: contém valores sem rótulos
username: username:
invalid: apenas letras, números e underlines ( "_" ) invalid: apenas letras, números e underlines ( "_" )
reserved: já existe reserved: já existe

View file

@ -88,8 +88,8 @@ kab:
success: Asesṭeb idda akken iwata seg umiḍan %{kind}. success: Asesṭeb idda akken iwata seg umiḍan %{kind}.
passwords: passwords:
no_token: Ur tezmireḍ ara ad tkecmeḍ ɣer usebter-a war ma tusiḍ-d seg imayl n uwennez n wawal uffir. ma syin i d-tusiḍ, wali ma tesqedceḍ tansa URL i d ak·am-d-nuzen. no_token: Ur tezmireḍ ara ad tkecmeḍ ɣer usebter-a war ma tusiḍ-d seg imayl n uwennez n wawal uffir. ma syin i d-tusiḍ, wali ma tesqedceḍ tansa URL i d ak·am-d-nuzen.
send_instructions: Ma nufa tansa-inek imayl tella deg uzadur-nneγ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaγ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k ẓer deg ukaram spam. send_instructions: Ma nufa tansa-inek·inem imayl tella deg uzadur-nneɣ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaɣ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k·m ẓer deg ukaram yespamen.
send_paranoid_instructions: Ma nufa tansa-inek imayl tella deg uzadur-nneγ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaγ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k ẓer deg ukaram spam. send_paranoid_instructions: Ma nufa tansa-inek·inem imayl tella deg uzadur-nneɣ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaɣ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k·m ẓer deg ukaram yespamen.
updated: Awal-ik uffir yettwabeddel mebla ugur. Aqla-k tura tjerrḍeḍ. updated: Awal-ik uffir yettwabeddel mebla ugur. Aqla-k tura tjerrḍeḍ.
updated_not_active: Awal-ik uffir yettwabeddel mebla ugur. updated_not_active: Awal-ik uffir yettwabeddel mebla ugur.
registrations: registrations:

View file

@ -5,7 +5,7 @@ eo:
contact_missing: Ne elektita contact_missing: Ne elektita
contact_unavailable: Ne disponebla contact_unavailable: Ne disponebla
hosted_on: "%{domain} estas nodo de Mastodon" hosted_on: "%{domain} estas nodo de Mastodon"
title: Pri title: Prio
accounts: accounts:
followers: followers:
one: Sekvanto one: Sekvanto
@ -41,7 +41,7 @@ eo:
by_domain: Domajno by_domain: Domajno
change_email: change_email:
changed_msg: Retpoŝta adreso sukcese ŝanĝita! changed_msg: Retpoŝta adreso sukcese ŝanĝita!
current_email: Nuna retadreso current_email: Aktuala retadreso
label: Ŝanĝi retadreson label: Ŝanĝi retadreson
new_email: Nova retadreso new_email: Nova retadreso
submit: Ŝanĝi retadreson submit: Ŝanĝi retadreson
@ -102,7 +102,7 @@ eo:
moderation_notes: Notoj de moderigado moderation_notes: Notoj de moderigado
most_recent_activity: Lastaj afiŝoj most_recent_activity: Lastaj afiŝoj
most_recent_ip: Lasta IP most_recent_ip: Lasta IP
no_account_selected: Neniu konto estis ŝanĝita ĉar neniu estis selektita no_account_selected: Neniu konto estis ŝanĝita kial neniu estis selektita
no_limits_imposed: Neniu limito trudita no_limits_imposed: Neniu limito trudita
no_role_assigned: Sen rolo no_role_assigned: Sen rolo
not_subscribed: Ne abonita not_subscribed: Ne abonita
@ -142,7 +142,7 @@ eo:
only_password: Nur pasvorto only_password: Nur pasvorto
password_and_2fa: Pasvorto kaj 2FA password_and_2fa: Pasvorto kaj 2FA
sensitive: Tikla sensitive: Tikla
sensitized: markita tikla sensitized: Markita kiel tikla
shared_inbox_url: URL de kunhavigita leterkesto shared_inbox_url: URL de kunhavigita leterkesto
show: show:
created_reports: Faritaj raportoj created_reports: Faritaj raportoj
@ -204,7 +204,7 @@ eo:
destroy_unavailable_domain: Forigi Nehaveblan Domajnon destroy_unavailable_domain: Forigi Nehaveblan Domajnon
destroy_user_role: Detrui Rolon destroy_user_role: Detrui Rolon
disable_2fa_user: Malebligi 2FA disable_2fa_user: Malebligi 2FA
disable_custom_emoji: Malebligi proprajn emoĝiojn disable_custom_emoji: Malŝalti Proprajn Bildosignojn
disable_relay: Malebligi Relajson disable_relay: Malebligi Relajson
disable_sign_in_token_auth_user: Malebligi aŭtentigon per retpoŝta ĵetono por la uzanto disable_sign_in_token_auth_user: Malebligi aŭtentigon per retpoŝta ĵetono por la uzanto
disable_user: Neebligi la uzanton disable_user: Neebligi la uzanton
@ -220,14 +220,14 @@ eo:
remove_avatar_user: Forigi la profilbildon remove_avatar_user: Forigi la profilbildon
reopen_report: Remalfermi signalon reopen_report: Remalfermi signalon
resend_user: Resendi konfirman retmesaĝon resend_user: Resendi konfirman retmesaĝon
reset_password_user: Restarigi pasvorton reset_password_user: Restarigi Pasvorton
resolve_report: Solvitaj reporto resolve_report: Solvitaj reporto
sensitive_account: Marki tikla la aŭdovidaĵojn de via konto sensitive_account: Marki tikla la aŭdovidaĵojn de via konto
silence_account: Silentigi konton silence_account: Silentigi Konton
suspend_account: Suspendi la konton suspend_account: Suspendi Konton
unassigned_report: Malatribui Raporton unassigned_report: Malatribui Raporton
unblock_email_account: Malbloki retpoŝtadreson unblock_email_account: Malbloki retpoŝtadreson
unsensitive_account: Malmarku la amaskomunikilojn en via konto kiel sentemaj unsensitive_account: Malmarki Konton kiel Sentime Tikla
unsilence_account: Malsilentigi konton unsilence_account: Malsilentigi konton
unsuspend_account: Malsuspendi la konton unsuspend_account: Malsuspendi la konton
update_announcement: Ĝisdatigi anoncon update_announcement: Ĝisdatigi anoncon
@ -235,19 +235,19 @@ eo:
update_domain_block: Ĝigdatigi domajnan blokadon update_domain_block: Ĝigdatigi domajnan blokadon
update_ip_block: Krei IP-regulon update_ip_block: Krei IP-regulon
update_report: Ĝisdatigo de Raporto update_report: Ĝisdatigo de Raporto
update_status: Ĝisdatigi afiŝon update_status: Ĝisdatigi Afiŝon
update_user_role: Ĝisdatigi rolon update_user_role: Ĝisdatigi rolon
actions: actions:
approve_appeal_html: "%{name} aprobis apelacion kontraŭ moderiga decido de %{target}" approve_appeal_html: "%{name} aprobis apelacion kontraŭ reguliga decido de %{target}"
approve_user_html: "%{name} aprobis registriĝon de %{target}" approve_user_html: "%{name} aprobis la registriĝon de %{target}"
assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem" assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem"
change_email_user_html: "%{name} ŝanĝis retadreson de uzanto %{target}" change_email_user_html: "%{name} ŝanĝis la retadreson de uzanto %{target}"
change_role_user_html: "%{name} ŝanĝis rolon de %{target}" change_role_user_html: "%{name} ŝanĝis rolon de %{target}"
confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}" confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}"
create_account_warning_html: "%{name} sendis averton al %{target}" create_account_warning_html: "%{name} sendis averton al %{target}"
create_announcement_html: "%{name} kreis novan anoncon %{target}" create_announcement_html: "%{name} kreis novan anoncon %{target}"
create_canonical_email_block_html: "%{name} blokis retpoŝtadreson per krado %{target}" create_canonical_email_block_html: "%{name} blokis retpoŝtadreson per krado %{target}"
create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}" create_custom_emoji_html: "%{name} alŝutis novan bildosignon %{target}"
create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo"
create_domain_block_html: "%{name} blokis domajnon %{target}" create_domain_block_html: "%{name} blokis domajnon %{target}"
create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}" create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}"
@ -258,7 +258,7 @@ eo:
demote_user_html: "%{name} degradis uzanton %{target}" demote_user_html: "%{name} degradis uzanton %{target}"
destroy_announcement_html: "%{name} forigis anoncon %{target}" destroy_announcement_html: "%{name} forigis anoncon %{target}"
destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}" destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}"
destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}" destroy_custom_emoji_html: "%{name} forigis la bildosignon %{target}"
destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo"
destroy_domain_block_html: "%{name} malblokis domajnon %{target}" destroy_domain_block_html: "%{name} malblokis domajnon %{target}"
destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}"
@ -269,11 +269,11 @@ eo:
destroy_unavailable_domain_html: "%{name} restartigis sendon al domajno %{target}" destroy_unavailable_domain_html: "%{name} restartigis sendon al domajno %{target}"
destroy_user_role_html: "%{name} forigis rolon de %{target}" destroy_user_role_html: "%{name} forigis rolon de %{target}"
disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}" disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}"
disable_custom_emoji_html: "%{name} malebligis la emoĝion %{target}" disable_custom_emoji_html: "%{name} malebligis la bildosignon %{target}"
disable_relay_html: "%{name} malebligis la relajson %{target}" disable_relay_html: "%{name} malebligis la relajson %{target}"
disable_sign_in_token_auth_user_html: "%{name} malebligis la aŭtentigon de retpoŝta ĵetono por %{target}" disable_sign_in_token_auth_user_html: "%{name} malebligis la aŭtentigon de retpoŝta ĵetono por %{target}"
disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}" disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}"
enable_custom_emoji_html: "%{name} ebligis la emoĝion %{target}" enable_custom_emoji_html: "%{name} ebligis la bildosignon %{target}"
enable_relay_html: "%{name} ebligis la relajson %{target}" enable_relay_html: "%{name} ebligis la relajson %{target}"
enable_sign_in_token_auth_user_html: "%{name} ebligis la aŭtentigon de retpoŝta ĵetono por %{target}" enable_sign_in_token_auth_user_html: "%{name} ebligis la aŭtentigon de retpoŝta ĵetono por %{target}"
enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}" enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}"
@ -296,7 +296,7 @@ eo:
unsilence_account_html: "%{name} malfaris limon al konto de %{target}" unsilence_account_html: "%{name} malfaris limon al konto de %{target}"
unsuspend_account_html: "%{name} malsuspendis la konton de %{target}" unsuspend_account_html: "%{name} malsuspendis la konton de %{target}"
update_announcement_html: "%{name} ĝisdatigis la anoncon %{target}" update_announcement_html: "%{name} ĝisdatigis la anoncon %{target}"
update_custom_emoji_html: "%{name} ĝisdatigis la emoĝion %{target}" update_custom_emoji_html: "%{name} ĝisdatigis la bildosignon %{target}"
update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}" update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}"
update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}" update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}"
update_report_html: "%{name} ĝisdatigis la raporton %{target}" update_report_html: "%{name} ĝisdatigis la raporton %{target}"
@ -309,17 +309,17 @@ eo:
title: Ĵurnalo de revizo title: Ĵurnalo de revizo
unavailable_instance: "(domajna nomo nedisponebla)" unavailable_instance: "(domajna nomo nedisponebla)"
announcements: announcements:
destroyed_msg: Anonco sukcese forigita! destroyed_msg: La anonco sukcese forigita!
edit: edit:
title: Redakti anoncon title: Redakti anoncon
empty: Neniu anonco trovita. empty: Neniu anonco troviĝas.
live: Publikigita live: Publikigita
new: new:
create: Krei anoncon create: Krei anoncon
title: Nova anonco title: Nova anonco
publish: Publikigi publish: Publikigi
published_msg: Anonco sukcese publikigita! published_msg: Anonco sukcese publikigita!
scheduled_for: Planigita je %{time} scheduled_for: Planigota je %{time}
scheduled_msg: Anonco planigita por publikigo! scheduled_msg: Anonco planigita por publikigo!
title: Anoncoj title: Anoncoj
unpublish: Malpublikigi unpublish: Malpublikigi
@ -341,7 +341,7 @@ eo:
disabled_msg: Emoĝio sukcese malebligita disabled_msg: Emoĝio sukcese malebligita
emoji: Emoĝio emoji: Emoĝio
enable: Ebligi enable: Ebligi
enabled: Ebligita enabled: Ŝaltita
enabled_msg: Emoĝio sukcese ebligita enabled_msg: Emoĝio sukcese ebligita
image_hint: PNG aŭ GIF malpli granda ol %{size} image_hint: PNG aŭ GIF malpli granda ol %{size}
list: Listo list: Listo
@ -1313,8 +1313,8 @@ eo:
Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la
<a href="%{apps_path}">operaciumaj aplikaĵoj</a> por Mastodon por via platformo. <a href="%{apps_path}">operaciumaj aplikaĵoj</a> por Mastodon por via platformo.
existing_username_validator: existing_username_validator:
not_found: Ne povas trovi lokaj uzanto kun tiu uzantnomo not_found: ne povas trovi lokaj uzanto kun tiu uzantnomo
not_found_multiple: Ne povas trovi %{usernames} not_found_multiple: ne povas trovi %{usernames}
exports: exports:
archive_takeout: archive_takeout:
date: Dato date: Dato
@ -1539,7 +1539,7 @@ eo:
validations: validations:
images_and_video: Aldoni videon al mesaĝo, kiu jam havas bildojn ne eblas images_and_video: Aldoni videon al mesaĝo, kiu jam havas bildojn ne eblas
not_found: Dosiero %{ids} ne trovis aŭ jam alteniĝis al alia afiŝo not_found: Dosiero %{ids} ne trovis aŭ jam alteniĝis al alia afiŝo
not_ready: Ne povas aldoni dosieron kiu ne finas procezitis. not_ready: Ne povas aldoni dosieron kiu ne finis procezitis.
too_many: Aldoni pli ol 4 dosierojn ne eblas too_many: Aldoni pli ol 4 dosierojn ne eblas
migrations: migrations:
acct: Movigita al acct: Movigita al

View file

@ -436,6 +436,7 @@ kab:
terms_of_service: terms_of_service:
draft: Arewway draft: Arewway
publish: Asuffeɣ publish: Asuffeɣ
save_draft: Sekles arewway
title: Tadbelt title: Tadbelt
trends: trends:
allow: Sireg allow: Sireg
@ -489,7 +490,7 @@ kab:
delete_account: Kkes amiḍan delete_account: Kkes amiḍan
description: description:
prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!" prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!"
prefix_sign_up: Zeddi di Maṣṭudun assa! prefix_sign_up: Zeddi di Maṣṭudun ass-a!
suffix: S umiḍan, tzemreḍ ad tḍefreḍ imdanen, ad d-tessufɣeḍ tisuffaɣ d wembadal n yiznan akked yiseqdacen n yal aqeddac Mastodon d wayen-nniḍen! suffix: S umiḍan, tzemreḍ ad tḍefreḍ imdanen, ad d-tessufɣeḍ tisuffaɣ d wembadal n yiznan akked yiseqdacen n yal aqeddac Mastodon d wayen-nniḍen!
didnt_get_confirmation: Ur d-teṭṭifeḍ ara aseɣwen n usentem ? didnt_get_confirmation: Ur d-teṭṭifeḍ ara aseɣwen n usentem ?
dont_have_your_security_key: Ulac ɣur-k·m tasarut-ik·im n tɣellist? dont_have_your_security_key: Ulac ɣur-k·m tasarut-ik·im n tɣellist?
@ -746,6 +747,7 @@ kab:
electron: Electron electron: Electron
firefox: Firefox firefox: Firefox
generic: Iminig arusin generic: Iminig arusin
huawei_browser: Iminig n Huawei
ie: Internet Explorer ie: Internet Explorer
micro_messenger: MicroMessenger micro_messenger: MicroMessenger
nokia: Iminig Nokia S40 Ovi nokia: Iminig Nokia S40 Ovi
@ -754,6 +756,7 @@ kab:
phantom_js: PhantomJS phantom_js: PhantomJS
qq: Iminig QQ qq: Iminig QQ
safari: Safari safari: Safari
uc_browser: UC Browser
unknown_browser: Iminig arussin unknown_browser: Iminig arussin
weibo: Weibo weibo: Weibo
current_session: Tiɣimit tamirant current_session: Tiɣimit tamirant

View file

@ -194,7 +194,7 @@ ko:
destroy_domain_allow: 도메인 허용 삭제 destroy_domain_allow: 도메인 허용 삭제
destroy_domain_block: 도메인 차단 삭제 destroy_domain_block: 도메인 차단 삭제
destroy_email_domain_block: 이메일 도메인 차단 삭제 destroy_email_domain_block: 이메일 도메인 차단 삭제
destroy_instance: 도메인 퍼지하기 destroy_instance: 도메인 제거
destroy_ip_block: IP 규칙 삭제 destroy_ip_block: IP 규칙 삭제
destroy_relay: 릴레이 삭제 destroy_relay: 릴레이 삭제
destroy_status: 게시물 삭제 destroy_status: 게시물 삭제
@ -536,7 +536,7 @@ ko:
title: 중재 title: 중재
private_comment: 비공개 주석 private_comment: 비공개 주석
public_comment: 공개 주석 public_comment: 공개 주석
purge: 퍼지 purge: 제거
purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다.
title: 연합 title: 연합
total_blocked_by_us: 우리에게 차단 됨 total_blocked_by_us: 우리에게 차단 됨
@ -1754,7 +1754,7 @@ ko:
lost_followers: 잃은 팔로워 lost_followers: 잃은 팔로워
lost_follows: 잃은 팔로우 lost_follows: 잃은 팔로우
preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다. preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다.
purged: 이 서버의 정보는 관리자가 퍼지하였습니다. purged: 이 서버에 대한 정보는 관리자에 의해 제거되었습니다.
type: 이벤트 type: 이벤트
statuses: statuses:
attached: attached:

View file

@ -937,6 +937,25 @@ pt-BR:
generates: generates:
action: Gerar action: Gerar
chance_to_review_html: "<strong>Os termos de serviço gerado não será publicado automaticamente.</strong>Você terá uma chance de revisar os resultados. Preencha os detalhes necessários para continuar" chance_to_review_html: "<strong>Os termos de serviço gerado não será publicado automaticamente.</strong>Você terá uma chance de revisar os resultados. Preencha os detalhes necessários para continuar"
explanation_html: O modelo de termos de serviço fornecido é apenas para fins informativos e não deve ser interpretado como aconselhamento jurídico sobre qualquer assunto. Consulte seu próprio advogado para esclarecer sua situação e dúvidas jurídicas específicas.
title: Configuração dos Termos de Serviço
history: Histórico
live: Em vigor
no_history: Ainda não há alterações registradas nos termos de serviço.
no_terms_of_service_html: Atualmente, você não tem nenhum termo de serviço configurado. Os termos de serviço servem para fornecer clareza e protegê-lo de possíveis responsabilidades em disputas com seus usuários.
notified_on_html: Usuários notificados em %{date}
notify_users: Notificar usuários
preview:
explanation_html: 'O e-mail será enviado para <strong>%{display_count} usuários</strong> que se inscreveram antes de %{date}. O seguinte texto será incluído no e-mail:'
send_preview: Enviar pŕevia para %{email}
send_to_all:
one: Enviar %{display_count} email
other: Enviar %{display_count} emails
title: Prévia da notificação dos termos de serviço
publish: Publicar
published_on_html: Publicado em %{date}
save_draft: Salvar rascunho
title: Termos de Serviço
title: Administração title: Administração
trends: trends:
allow: Permitir allow: Permitir
@ -1168,6 +1187,7 @@ pt-BR:
set_new_password: Definir uma nova senha set_new_password: Definir uma nova senha
setup: setup:
email_below_hint_html: Verifique a sua pasta de spam, ou solicite outra. Você pode corrigir o seu endereço de e-mail se estiver errado. email_below_hint_html: Verifique a sua pasta de spam, ou solicite outra. Você pode corrigir o seu endereço de e-mail se estiver errado.
email_settings_hint_html: Clique no link que enviamos para %{email} para começar a usar o Mastodon. Estaremos esperando aqui.
link_not_received: Não recebeu um link? link_not_received: Não recebeu um link?
new_confirmation_instructions_sent: Você receberá um novo e-mail com o link de confirmação em alguns minutos! new_confirmation_instructions_sent: Você receberá um novo e-mail com o link de confirmação em alguns minutos!
title: Verifique sua caixa de entrada title: Verifique sua caixa de entrada
@ -1176,6 +1196,7 @@ pt-BR:
title: Entrar em %{domain} title: Entrar em %{domain}
sign_up: sign_up:
manual_review: Inscrições no %{domain} passam pela revisão manual dos nossos moderadores. Para nos ajudar a processar o seu cadastro, escreva um pouco sobre você e por que você quer uma conta no %{domain}. manual_review: Inscrições no %{domain} passam pela revisão manual dos nossos moderadores. Para nos ajudar a processar o seu cadastro, escreva um pouco sobre você e por que você quer uma conta no %{domain}.
preamble: Com uma conta neste servidor do Mastodon, você poderá seguir qualquer outra pessoa no fediverso, independentemente de onde a conta dela esteja hospedada.
title: Então vamos lá criar uma conta em %{domain}. title: Então vamos lá criar uma conta em %{domain}.
status: status:
account_status: Status da conta account_status: Status da conta
@ -1187,6 +1208,8 @@ pt-BR:
view_strikes: Veja os avisos anteriores em relação à sua conta view_strikes: Veja os avisos anteriores em relação à sua conta
too_fast: O formulário foi enviado muito rapidamente, tente novamente. too_fast: O formulário foi enviado muito rapidamente, tente novamente.
use_security_key: Usar chave de segurança use_security_key: Usar chave de segurança
user_agreement_html: Eu li e concordo com os <a href="%{terms_of_service_path}" target="_blank">termos de serviço</a> e <a href="%{privacy_policy_path}" target="_blank">política de privacidade</a>.
user_privacy_agreement_html: Eu li e concordo com a <a href="%{privacy_policy_path}" target="_blank">política de privacidade</a>.
author_attribution: author_attribution:
example_title: Texto de amostra example_title: Texto de amostra
hint_html: Você está escrevendo notícias ou artigos de blogs fora do Mastodon? Controle como você é credenciado quando eles forem compartilhados no Mastodon. hint_html: Você está escrevendo notícias ou artigos de blogs fora do Mastodon? Controle como você é credenciado quando eles forem compartilhados no Mastodon.
@ -1401,7 +1424,31 @@ pt-BR:
domain_blocking_html: domain_blocking_html:
one: Você está prestes a <strong>substituir seu bloco de lista do domínio</strong> com <strong>%{count} domínio</strong> de <strong>%{filename}</strong>. one: Você está prestes a <strong>substituir seu bloco de lista do domínio</strong> com <strong>%{count} domínio</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>substituir sua lista de bloqueio de domínio</strong> com <strong>domínios%{count}</strong> de <strong>%{filename}</strong>. other: Você está prestes a <strong>substituir sua lista de bloqueio de domínio</strong> com <strong>domínios%{count}</strong> de <strong>%{filename}</strong>.
following_html:
one: Você está prestes a <strong>seguir</strong> <strong>%{count} contas</strong> de <strong>%{filename}</strong> e <strong>parar de seguir todos os outros</strong>.
other: Você está prestes a <strong>seguir</strong> até <strong>%{count} contas</strong> de <strong>%{filename}</strong> e <strong>deixar de seguir qualquer outra pessoa</strong>.
lists_html:
one: Você está prestes a <strong>substituir suas listas</strong> pelo conteúdo de <strong>%{filename}</strong>. Até <strong>%{count} conta</strong> será adicionada às novas listas.
other: Você está prestes a <strong>substituir suas listas</strong> pelo conteúdo de <strong>%{filename}</strong>. Até <strong>%{count} contas</strong> serão adicionadas às novas listas.
muting_html:
one: Você está prestes a <strong>substituir sua lista de contas silenciadas</strong> por até <strong>%{count} conta</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>substituir sua lista de contas silenciadas</strong> por até <strong>%{count} contas</strong> de <strong>%{filename}</strong>.
preambles: preambles:
blocking_html:
one: Você está prestes a <strong>bloquear</strong> até <strong>%{count} conta</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>bloquear</strong> até <strong>%{count} contas</strong> de <strong>%{filename}</strong>.
bookmarks_html:
one: Você está prestes a adicionar até <strong>%{count} post</strong> de <strong>%{filename}</strong> aos seus <strong>favoritos</strong>.
other: Você está prestes a adicionar até <strong>%{count} posts</strong> de <strong>%{filename}</strong> aos seus <strong>favoritos</strong>.
domain_blocking_html:
one: Você está prestes a <strong>bloquear</strong> até <strong>%{count} domínio</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>bloquear</strong> até <strong>%{count} domínios</strong> de <strong>%{filename}</strong>.
following_html:
one: Você está prestes a <strong>seguir</strong> até <strong>%{count} conta</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>seguir</strong> até <strong>%{count} contas</strong> de <strong>%{filename}</strong>.
lists_html:
one: Você está prestes a adicionar até <strong>%{count} conta</strong> a partir de <strong>%{filename}</strong> para suas <strong>listas</strong>. Novas listas serão criadas se não houver uma para a qual adicionar.
other: Você está prestes a adicionar até <strong>%{count} contas</strong> a partir de <strong>%{filename}</strong> para suas <strong>listas</strong>. Novas listas serão criadas se não houver uma para a qual adicionar.
muting_html: muting_html:
one: Você está prestes a <strong>silenciar</strong> <strong>%{count} conta</strong> de <strong>%{filename}</strong>. one: Você está prestes a <strong>silenciar</strong> <strong>%{count} conta</strong> de <strong>%{filename}</strong>.
other: Você está prestes a <strong>silenciar</strong> mais de <strong>%{count} contas</strong> de <strong>%{filename}</strong>. other: Você está prestes a <strong>silenciar</strong> mais de <strong>%{count} contas</strong> de <strong>%{filename}</strong>.
@ -1824,6 +1871,8 @@ pt-BR:
too_late: É tarde demais para solicitar uma revisão desta punição too_late: É tarde demais para solicitar uma revisão desta punição
tags: tags:
does_not_match_previous_name: não corresponde ao nome anterior does_not_match_previous_name: não corresponde ao nome anterior
terms_of_service:
title: Termos de Serviço
themes: themes:
contrast: Mastodon (Alto contraste) contrast: Mastodon (Alto contraste)
default: Mastodon (Noturno) default: Mastodon (Noturno)
@ -1884,6 +1933,15 @@ pt-BR:
further_actions_html: Se não foi você, recomendamos que você %{action} imediatamente e ative a autenticação de dois fatores para manter sua conta segura. further_actions_html: Se não foi você, recomendamos que você %{action} imediatamente e ative a autenticação de dois fatores para manter sua conta segura.
subject: Sua conta foi acessada a partir de um novo endereço IP subject: Sua conta foi acessada a partir de um novo endereço IP
title: Um novo login title: Um novo login
terms_of_service_changed:
agreement: Ao continuar a usar %{domain}, você concorda com estes termos. Se discordar dos termos atualizados, poderá encerrar seu acordo com %{domain} a qualquer momento excluindo sua conta.
changelog: 'Em resumo, veja o que essa atualização significa para você:'
description: 'Você está recebendo este e-mail porque estamos fazendo algumas alterações em nossos termos de serviço em %{domain}. Incentivamos você a revisar os termos atualizados na íntegra aqui:'
description_html: Você está recebendo este e-mail porque estamos fazendo algumas alterações em nossos termos de serviço em %{domain}. Incentivamos você a revisar os <a href="%{path}" target="_blank">termos atualizados na íntegra aqui</a>.
sign_off: A equipe do %{domain}
subject: Atualizações dos nossos termos de serviço
subtitle: Os termos de serviço do %{domain} estão mudando.
title: atualização importante
warning: warning:
appeal: Enviar uma revisão appeal: Enviar uma revisão
appeal_description: Se você acredita que isso é um erro, você pode enviar uma revisão para a equipe de %{instance}. appeal_description: Se você acredita que isso é um erro, você pode enviar uma revisão para a equipe de %{instance}.

View file

@ -56,7 +56,7 @@ eo:
scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn. scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn.
setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj) setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj)
setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive
setting_default_sensitive: Tiklaj vidaŭdaĵoj estas kaŝitaj implicite, kaj povas esti montritaj per klako setting_default_sensitive: Tiklaj vidaŭdaĵoj estas implicite kaŝitaj kaj povas esti montritaj per alklako
setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj
setting_display_media_hide_all: Ĉiam kaŝi la vidaŭdaĵojn setting_display_media_hide_all: Ĉiam kaŝi la vidaŭdaĵojn
setting_display_media_show_all: Ĉiam montri la vidaŭdaĵojn setting_display_media_show_all: Ĉiam montri la vidaŭdaĵojn

View file

@ -3,6 +3,7 @@ ja:
simple_form: simple_form:
hints: hints:
account: account:
attribution_domains: 1行につき1つずつ入力してください。この設定は関わりのないwebサイトに対して虚偽の帰属表示が行われることを防止する役割があります。
discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。
display_name: フルネーム、ハンドルネームなど display_name: フルネーム、ハンドルネームなど
fields: ホームページ、代名詞、年齢など何でも構いません。 fields: ホームページ、代名詞、年齢など何でも構いません。
@ -190,6 +191,7 @@ ja:
kmyblue: kmyblue kmyblue: kmyblue
labels: labels:
account: account:
attribution_domains: あなたの著者表示を許可するwebサイト
discoverable: アカウントを見つけやすくする discoverable: アカウントを見つけやすくする
fields: fields:
examples: examples:
@ -310,6 +312,7 @@ ja:
setting_hide_quote_unavailable_server: 引用に対応していないと思われるサーバーの投稿からメニューを隠す setting_hide_quote_unavailable_server: 引用に対応していないと思われるサーバーの投稿からメニューを隠す
setting_hide_status_reference_unavailable_server: ひかえめな引用Fedibirdの参照に対応していないと思われるサーバーの投稿からメニューを隠す setting_hide_status_reference_unavailable_server: ひかえめな引用Fedibirdの参照に対応していないと思われるサーバーの投稿からメニューを隠す
setting_lock_follow_from_bot: botからのフォローを承認制にする setting_lock_follow_from_bot: botからのフォローを承認制にする
setting_missing_alt_text_modal: 代替テキストなしでメディアを投稿する前に確認ダイアログを表示する
setting_public_post_to_unlisted: サードパーティから公開範囲「公開」で投稿した場合、「ローカル公開」に変更する setting_public_post_to_unlisted: サードパーティから公開範囲「公開」で投稿した場合、「ローカル公開」に変更する
setting_reduce_motion: アニメーションの動きを減らす setting_reduce_motion: アニメーションの動きを減らす
setting_reject_public_unlisted_subscription: Misskey系サーバーに「ローカル公開」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する setting_reject_public_unlisted_subscription: Misskey系サーバーに「ローカル公開」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する

View file

@ -104,6 +104,7 @@ kab:
featured_tag: featured_tag:
name: Ahacṭag name: Ahacṭag
form_admin_settings: form_admin_settings:
app_icon: Tignit n usnas
custom_css: CSS udmawan custom_css: CSS udmawan
profile_directory: Rmed akaram n imaγnuten profile_directory: Rmed akaram n imaγnuten
site_contact_email: Imayl n unermas site_contact_email: Imayl n unermas

View file

@ -3,6 +3,7 @@ nn:
simple_form: simple_form:
hints: hints:
account: account:
attribution_domains: Ein per line. Vernar mot falske krediteringar.
discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk. discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk.
display_name: Ditt fulle namn eller ditt tøysenamn. display_name: Ditt fulle namn eller ditt tøysenamn.
fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje.
@ -155,6 +156,7 @@ nn:
url: Kvar hendingar skal sendast url: Kvar hendingar skal sendast
labels: labels:
account: account:
attribution_domains: Nettstader som har lov å kreditera deg
discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar
fields: fields:
name: Merkelapp name: Merkelapp

View file

@ -7,7 +7,7 @@ pl:
discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom. discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom.
display_name: Twoje imię lub pseudonim. display_name: Twoje imię lub pseudonim.
fields: Co ci się tylko podoba twoja strona domowa, zaimki, wiek… fields: Co ci się tylko podoba twoja strona domowa, zaimki, wiek…
indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy wchodzili w interakcje z twoimi wpisami będą mogli je znaleźć niezależnie od tego ustawienia. indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy reagowali na Twoje wpisy, będą mogli je znaleźć niezależnie od tego ustawienia.
note: 'Możesz @wspomnieć użytkowników albo #hasztagi.' note: 'Możesz @wspomnieć użytkowników albo #hasztagi.'
show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli. show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli.
unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie. unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie.

View file

@ -3,6 +3,7 @@ pt-BR:
simple_form: simple_form:
hints: hints:
account: account:
attribution_domains: Um por linha. Protege contra atribuições falsas.
discoverable: Suas publicações e perfil públicos podem ser destaques ou recomendados em várias áreas de Mastodon, e seu perfil pode ser sugerido a outros usuários. discoverable: Suas publicações e perfil públicos podem ser destaques ou recomendados em várias áreas de Mastodon, e seu perfil pode ser sugerido a outros usuários.
display_name: Seu nome completo ou apelido. display_name: Seu nome completo ou apelido.
fields: Sua página inicial, pronomes, idade ou qualquer coisa que quiser. fields: Sua página inicial, pronomes, idade ou qualquer coisa que quiser.
@ -129,8 +130,17 @@ pt-BR:
show_application: Você sempre conseguirá ver qual aplicativo realizou sua publicação independentemente disso. show_application: Você sempre conseguirá ver qual aplicativo realizou sua publicação independentemente disso.
tag: tag:
name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível
terms_of_service:
changelog: Pode ser estruturado com a sintaxe Markdown.
text: Pode ser estruturado com a sintaxe Markdown.
terms_of_service_generator: terms_of_service_generator:
admin_email: Avisos legais incluem contra-notificações, ordens judiciais, solicitações de remoção e solicitações de órgãos de fiscalização.
arbitration_address: Pode ser o mesmo que o endereço físico acima, ou "N/A" se estiver usando e-mail.
arbitration_website: Pode ser um formulário na web, ou "N/A" se estiver usando e-mail.
dmca_address: Para operadores dos EUA, utilize o endereço registrado no Diretório de Agentes Designados pela DMCA. Um endereço de Caixa Postal está disponível mediante solicitação direta; use a Solicitação de Isenção de Caixa Postal de Agente Designado pela DMCA para enviar um e-mail ao Escritório de Direitos Autorais, explicando que você é um moderador de conteúdo que trabalha em casa e teme vingança ou retaliação por suas ações, precisando usar uma Caixa Postal para remover seu endereço residencial da visualização pública.
dmca_email: Pode ser o mesmo e-mail utilizado para "Endereço de e-mail para avisos legais" acima dmca_email: Pode ser o mesmo e-mail utilizado para "Endereço de e-mail para avisos legais" acima
domain: Identificação única do serviço online que você está fornecendo.
jurisdiction: Liste o país onde quem paga as contas reside. Se for uma empresa ou outra entidade, liste o país onde ela está incorporada, e a cidade, região, território ou estado, conforme apropriado.
user: user:
chosen_languages: Apenas as publicações dos idiomas selecionados serão exibidas nas linhas públicas chosen_languages: Apenas as publicações dos idiomas selecionados serão exibidas nas linhas públicas
role: A função controla quais permissões o usuário tem. role: A função controla quais permissões o usuário tem.
@ -146,6 +156,7 @@ pt-BR:
url: Aonde os eventos serão enviados url: Aonde os eventos serão enviados
labels: labels:
account: account:
attribution_domains: Sites autorizados a creditar você.
discoverable: Destacar perfil e publicações nos algoritmos de descoberta discoverable: Destacar perfil e publicações nos algoritmos de descoberta
fields: fields:
name: Rótulo name: Rótulo
@ -222,6 +233,7 @@ pt-BR:
setting_display_media_show_all: Mostrar tudo setting_display_media_show_all: Mostrar tudo
setting_expand_spoilers: Sempre expandir toots com Aviso de Conteúdo setting_expand_spoilers: Sempre expandir toots com Aviso de Conteúdo
setting_hide_network: Ocultar suas relações setting_hide_network: Ocultar suas relações
setting_missing_alt_text_modal: Mostrar caixa de diálogo de confirmação antes de postar mídia sem texto alternativo.
setting_reduce_motion: Reduzir animações setting_reduce_motion: Reduzir animações
setting_system_font_ui: Usar fonte padrão do sistema setting_system_font_ui: Usar fonte padrão do sistema
setting_system_scrollbars_ui: Usar barra de rolagem padrão do sistema setting_system_scrollbars_ui: Usar barra de rolagem padrão do sistema
@ -319,6 +331,17 @@ pt-BR:
name: Hashtag name: Hashtag
trendable: Permitir que esta hashtag fique em alta trendable: Permitir que esta hashtag fique em alta
usable: Permitir que as publicações usem esta hashtag localmente usable: Permitir que as publicações usem esta hashtag localmente
terms_of_service:
changelog: O que mudou?
text: Termos de Serviço
terms_of_service_generator:
admin_email: Endereço de e-mail para avisos legais.
arbitration_address: Endereço físico para avisos de arbitragem.
arbitration_website: Site para submissão de notificações de arbitragem
dmca_address: Endereço físico para notificações de DMCA/direitos autorais
dmca_email: Endereço de e-mail para notificações de DMCA/direitos autorais
domain: Domínio
jurisdiction: Jurisdicação legal
user: user:
role: Cargo role: Cargo
time_zone: Fuso horário time_zone: Fuso horário

View file

@ -246,6 +246,7 @@ sk:
destroy_custom_emoji_html: "%{name} vymazal/a emotikonu %{target}" destroy_custom_emoji_html: "%{name} vymazal/a emotikonu %{target}"
destroy_domain_allow_html: "%{name} zakázal/a federáciu s doménou %{target}" destroy_domain_allow_html: "%{name} zakázal/a federáciu s doménou %{target}"
destroy_domain_block_html: "%{name} odblokoval/i doménu %{target}" destroy_domain_block_html: "%{name} odblokoval/i doménu %{target}"
destroy_email_domain_block_html: "%{name} odblokoval/a emailovú doménu %{target}"
destroy_ip_block_html: "%{name} vymazal/a pravidlo pre IP %{target}" destroy_ip_block_html: "%{name} vymazal/a pravidlo pre IP %{target}"
destroy_status_html: "%{name} zmazal/a príspevok od %{target}" destroy_status_html: "%{name} zmazal/a príspevok od %{target}"
destroy_unavailable_domain_html: "%{name} znova spustil/a doručovanie pre doménu %{target}" destroy_unavailable_domain_html: "%{name} znova spustil/a doručovanie pre doménu %{target}"

View file

@ -59,16 +59,15 @@ RSpec.describe Admin::AccountsController do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
it 'includes moderation notes' do it 'includes moderation notes' do
note1 = Fabricate(:account_moderation_note, target_account: account) note1 = Fabricate(:account_moderation_note, target_account: account, content: 'Note 1 remarks')
note2 = Fabricate(:account_moderation_note, target_account: account) note2 = Fabricate(:account_moderation_note, target_account: account, content: 'Note 2 remarks')
get :show, params: { id: account.id } get :show, params: { id: account.id }
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
moderation_notes = assigns(:moderation_notes).to_a expect(response.body)
.to include(note1.content)
expect(moderation_notes.size).to be 2 .and include(note2.content)
expect(moderation_notes).to eq [note1, note2]
end end
end end

View file

@ -3,40 +3,54 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Admin::BaseController do RSpec.describe Admin::BaseController do
render_views
controller do controller do
def success def success
authorize :dashboard, :index? authorize :dashboard, :index?
render 'admin/reports/show' render html: '<p>success</p>', layout: true
end end
end end
it 'requires administrator or moderator' do before { routes.draw { get 'success' => 'admin/base#success' } }
routes.draw { get 'success' => 'admin/base#success' }
sign_in(Fabricate(:user))
get :success
expect(response).to have_http_status(403) context 'when signed in as regular user' do
before { sign_in Fabricate(:user) }
it 'responds with unauthorized' do
get :success
expect(response).to have_http_status(403)
end
end end
it 'returns private cache control headers' do context 'when signed in as moderator' do
routes.draw { get 'success' => 'admin/base#success' } before { sign_in Fabricate(:moderator_user) }
sign_in(Fabricate(:moderator_user))
get :success
expect(response.headers['Cache-Control']).to include('private, no-store') it 'returns success with private headers and admin layout' do
get :success
expect(response)
.to have_http_status(200)
expect(response.headers['Cache-Control'])
.to include('private, no-store')
expect(response.parsed_body)
.to have_css('body.admin')
end
end end
it 'renders admin layout as a moderator' do context 'when signed in as admin' do
routes.draw { get 'success' => 'admin/base#success' } before { sign_in Fabricate(:admin_user) }
sign_in(Fabricate(:moderator_user))
get :success
expect(response).to render_template layout: 'admin'
end
it 'renders admin layout as an admin' do it 'returns success with private headers and admin layout' do
routes.draw { get 'success' => 'admin/base#success' } get :success
sign_in(Fabricate(:admin_user))
get :success expect(response)
expect(response).to render_template layout: 'admin' .to have_http_status(200)
expect(response.headers['Cache-Control'])
.to include('private, no-store')
expect(response.parsed_body)
.to have_css('body.admin')
end
end end
end end

View file

@ -49,23 +49,11 @@ RSpec.describe Admin::InstancesController do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
instance = assigns(:instance) expect(response.body)
expect(instance).to_not be_new_record .to include(I18n.t('admin.instances.totals_time_period_hint_html'))
.and include(I18n.t('accounts.nothing_here'))
expect(Admin::ActionLogFilter).to have_received(:new).with(target_domain: account_popular_main.domain) expect(Admin::ActionLogFilter).to have_received(:new).with(target_domain: account_popular_main.domain)
action_logs = assigns(:action_logs).to_a
expect(action_logs.size).to eq 0
end
context 'with an unknown domain' do
it 'returns http success' do
get :show, params: { id: 'unknown.example' }
expect(response).to have_http_status(200)
instance = assigns(:instance)
expect(instance).to be_new_record
end
end end
end end

View file

@ -262,8 +262,8 @@ RSpec.describe Auth::SessionsController do
end end
it 'renders two factor authentication page' do it 'renders two factor authentication page' do
expect(controller).to render_template('two_factor') expect(response.body)
expect(controller).to render_template(partial: '_otp_authentication_form') .to include(I18n.t('simple_form.hints.sessions.otp'))
end end
end end
@ -278,8 +278,8 @@ RSpec.describe Auth::SessionsController do
end end
it 'renders two factor authentication page' do it 'renders two factor authentication page' do
expect(controller).to render_template('two_factor') expect(response.body)
expect(controller).to render_template(partial: '_otp_authentication_form') .to include(I18n.t('simple_form.hints.sessions.otp'))
end end
end end
@ -289,8 +289,8 @@ RSpec.describe Auth::SessionsController do
end end
it 'renders two factor authentication page' do it 'renders two factor authentication page' do
expect(controller).to render_template('two_factor') expect(response.body)
expect(controller).to render_template(partial: '_otp_authentication_form') .to include(I18n.t('simple_form.hints.sessions.otp'))
end end
end end
@ -417,8 +417,8 @@ RSpec.describe Auth::SessionsController do
end end
it 'renders webauthn authentication page' do it 'renders webauthn authentication page' do
expect(controller).to render_template('two_factor') expect(response.body)
expect(controller).to render_template(partial: '_webauthn_form') .to include(I18n.t('simple_form.title.sessions.webauthn'))
end end
end end
@ -428,8 +428,8 @@ RSpec.describe Auth::SessionsController do
end end
it 'renders webauthn authentication page' do it 'renders webauthn authentication page' do
expect(controller).to render_template('two_factor') expect(response.body)
expect(controller).to render_template(partial: '_webauthn_form') .to include(I18n.t('simple_form.title.sessions.webauthn'))
end end
end end

View file

@ -3,6 +3,8 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe ChallengableConcern do RSpec.describe ChallengableConcern do
render_views
controller(ApplicationController) do controller(ApplicationController) do
include ChallengableConcern # rubocop:disable RSpec/DescribedClass include ChallengableConcern # rubocop:disable RSpec/DescribedClass
@ -85,29 +87,35 @@ RSpec.describe ChallengableConcern do
before { get :foo } before { get :foo }
it 'renders challenge' do it 'renders challenge' do
expect(response).to render_template('auth/challenges/new', layout: :auth) expect(response.parsed_body)
.to have_title(I18n.t('challenge.prompt'))
end end
# See Auth::ChallengesControllerSpec
end end
context 'with POST requests' do context 'with POST requests' do
before { post :bar } before { post :bar }
it 'renders challenge' do it 'renders challenge' do
expect(response).to render_template('auth/challenges/new', layout: :auth) expect(response.parsed_body)
.to have_title(I18n.t('challenge.prompt'))
end end
it 'accepts correct password' do it 'accepts correct password' do
post :bar, params: { form_challenge: { current_password: password } } post :bar, params: { form_challenge: { current_password: password } }
expect(response.body).to eq 'bar'
expect(session[:challenge_passed_at]).to_not be_nil expect(response.body)
.to eq 'bar'
expect(session[:challenge_passed_at])
.to_not be_nil
end end
it 'rejects wrong password' do it 'rejects wrong password' do
post :bar, params: { form_challenge: { current_password: 'dddfff888123' } } post :bar, params: { form_challenge: { current_password: 'dddfff888123' } }
expect(response.body).to render_template('auth/challenges/new', layout: :auth)
expect(session[:challenge_passed_at]).to be_nil expect(response.parsed_body)
.to have_title(I18n.t('challenge.prompt'))
expect(session[:challenge_passed_at])
.to be_nil
end end
end end
end end

View file

@ -1,68 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::FeaturedTagsController do
render_views
context 'when user is not signed in' do
subject { post :create }
it { is_expected.to redirect_to new_user_session_path }
end
context 'when user is signed in' do
let(:user) { Fabricate(:user, password: '12345678') }
before { sign_in user, scope: :user }
describe 'POST #create' do
subject { post :create, params: { featured_tag: params } }
context 'when parameter is valid' do
let(:params) { { name: 'test' } }
it 'creates featured tag' do
expect { subject }.to change { user.account.featured_tags.count }.by(1)
end
end
context 'when parameter is invalid' do
let(:params) { { name: 'test, #foo !bleh' } }
it 'renders new' do
expect(subject).to render_template :index
end
end
end
describe 'GET to #index' do
let(:tag) { Fabricate(:tag) }
before do
status = Fabricate :status, account: user.account
status.tags << tag
end
it 'responds with success' do
get :index
expect(response).to have_http_status(200)
expect(response.body).to include(
settings_featured_tags_path(featured_tag: { name: tag.name })
)
end
end
describe 'DELETE to #destroy' do
let(:featured_tag) { Fabricate(:featured_tag, account: user.account) }
it 'removes the featured tag' do
delete :destroy, params: { id: featured_tag.id }
expect(response).to redirect_to(settings_featured_tags_path)
expect { featured_tag.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
end

View file

@ -1,67 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::Migration::RedirectsController do
render_views
let!(:user) { Fabricate(:user, password: 'testtest') }
before do
sign_in user, scope: :user
end
describe 'GET #new' do
before do
get :new
end
it 'returns http success with private cache control headers', :aggregate_failures do
expect(response).to have_http_status(200)
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
describe 'POST #create' do
context 'with valid params' do
before { stub_resolver }
it 'redirects to the settings migration path' do
post :create, params: { form_redirect: { acct: 'new@host.com', current_password: 'testtest' } }
expect(response).to redirect_to(settings_migration_path)
end
end
context 'with non valid params' do
it 'returns success and renders the new page' do
post :create, params: { form_redirect: { acct: '' } }
expect(response).to have_http_status(200)
expect(response).to render_template(:new)
end
end
end
describe 'DELETE #destroy' do
let(:account) { Fabricate(:account) }
before do
user.account.update(moved_to_account_id: account.id)
end
it 'resets the account and sends an update' do
delete :destroy
expect(response).to redirect_to(settings_migration_path)
expect(user.account.reload.moved_to_account).to be_nil
end
end
private
def stub_resolver
resolver = instance_double(ResolveAccountService, call: Fabricate(:account))
allow(ResolveAccountService).to receive(:new).and_return(resolver)
end
end

View file

@ -1,74 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::PrivacyController do
render_views
let!(:user) { Fabricate(:user) }
let(:account) { user.account }
before do
sign_in user, scope: :user
end
describe 'GET #show' do
before do
get :show
end
it 'returns http success with private cache control headers', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and have_attributes(
headers: include(
'Cache-Control' => 'private, no-store'
)
)
end
end
describe 'PUT #update' do
context 'when update succeeds' do
before do
allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
end
it 'updates the user profile' do
put :update, params: { account: { discoverable: '1', settings: { indexable: '1' } } }
expect(account.reload.discoverable)
.to be(true)
expect(response)
.to redirect_to(settings_privacy_path)
expect(ActivityPub::UpdateDistributionWorker)
.to have_received(:perform_async).with(account.id)
end
end
context 'when update fails' do
before do
allow(UpdateAccountService).to receive(:new).and_return(failing_update_service)
allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
end
it 'updates the user profile' do
put :update, params: { account: { discoverable: '1', settings: { indexable: '1' } } }
expect(response)
.to render_template(:show)
expect(ActivityPub::UpdateDistributionWorker)
.to_not have_received(:perform_async)
end
private
def failing_update_service
instance_double(UpdateAccountService, call: false)
end
end
end
end

View file

@ -1,30 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::TwoFactorAuthentication::RecoveryCodesController do
render_views
describe 'POST #create' do
it 'updates the codes and shows them on a view when signed in' do
user = Fabricate(:user)
otp_backup_codes = user.generate_otp_backup_codes!
allow(user).to receive(:generate_otp_backup_codes!).and_return(otp_backup_codes)
allow(controller).to receive(:current_user).and_return(user)
sign_in user, scope: :user
post :create, session: { challenge_passed_at: Time.now.utc }
expect(flash[:notice]).to eq 'Recovery codes successfully regenerated'
expect(response).to have_http_status(200)
expect(response).to render_template(:index)
expect(response.body)
.to include(*otp_backup_codes)
end
it 'redirects when not signed in' do
post :create
expect(response).to redirect_to '/auth/sign_in'
end
end
end

View file

@ -1,79 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::TwoFactorAuthenticationMethodsController do
render_views
context 'when not signed in' do
describe 'GET to #index' do
it 'redirects' do
get :index
expect(response).to redirect_to '/auth/sign_in'
end
end
end
context 'when signed in' do
let(:user) { Fabricate(:user) }
before do
sign_in user, scope: :user
end
describe 'GET #index' do
describe 'when user has enabled otp' do
before do
user.update(otp_required_for_login: true)
get :index
end
it 'returns http success with private cache control headers', :aggregate_failures do
expect(response).to have_http_status(200)
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
describe 'when user has not enabled otp' do
before do
user.update(otp_required_for_login: false)
get :index
end
it 'redirects to enable otp' do
expect(response).to redirect_to(settings_otp_authentication_path)
end
end
end
describe 'POST to #disable' do
before do
user.update(otp_required_for_login: true)
end
context 'when user has not passed challenge' do
it 'renders challenge page' do
post :disable
expect(response).to have_http_status(200)
expect(response).to render_template('auth/challenges/new')
end
end
context 'when user has passed challenge' do
before do
mailer = instance_double(ApplicationMailer::MessageDelivery, deliver_later!: true)
allow(UserMailer).to receive(:two_factor_disabled).with(user).and_return(mailer)
end
it 'redirects to settings page' do
post :disable, session: { challenge_passed_at: 10.minutes.ago }
expect(UserMailer).to have_received(:two_factor_disabled).with(user)
expect(response).to redirect_to(settings_otp_authentication_path)
end
end
end
end
end

View file

@ -9,93 +9,6 @@ RSpec.describe StatusesController do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: account) } let(:status) { Fabricate(:status, account: account) }
context 'when status is public' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('public'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie')
expect(response.headers).to include(
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status is private' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
context 'when status is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
context 'when signed-in' do context 'when signed-in' do
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
@ -275,206 +188,5 @@ RSpec.describe StatusesController do
end end
end end
end end
context 'with signature' do
let(:remote_account) { Fabricate(:account, domain: 'example.com') }
before do
allow(controller).to receive(:signed_request_actor).and_return(remote_account)
end
context 'when account blocks account' do
before do
account.block!(remote_account)
get :show, 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 account domain blocks account' do
before do
account.block_domain!(remote_account.domain)
get :show, 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 :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie')
expect(response.headers).to include(
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status is private' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
context 'when user is authorized to see it' do
before do
remote_account.follow!(account)
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully' do
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
end
context 'when status is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
context 'when user is authorized to see it' do
before do
Fabricate(:mention, account: remote_account, status: status)
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object', :aggregate_failures do
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
end
end
end end
end end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View file

@ -48,10 +48,16 @@ RSpec.describe ActivityPub::Activity::Create do
content: '@bob lorem ipsum', content: '@bob lorem ipsum',
published: 1.hour.ago.utc.iso8601, published: 1.hour.ago.utc.iso8601,
updated: 1.hour.ago.utc.iso8601, updated: 1.hour.ago.utc.iso8601,
tag: { tag: [
type: 'Mention', {
href: ActivityPub::TagManager.instance.uri_for(follower), type: 'Mention',
}, href: ActivityPub::TagManager.instance.uri_for(follower),
},
{
type: 'Mention',
href: ActivityPub::TagManager.instance.uri_for(follower),
},
],
} }
end end

View file

@ -0,0 +1,18 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Instances' do
describe 'GET /admin/instances/:id' do
context 'with an unknown domain' do
before { sign_in Fabricate(:admin_user) }
it 'returns http success' do
get admin_instance_path(id: 'unknown.example')
expect(response)
.to have_http_status(200)
end
end
end
end

View file

@ -2,15 +2,23 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'Settings Aliases' do RSpec.describe 'Settings Featured Tags' do
describe 'POST /settings/featured_tags' do describe 'POST /settings/featured_tags' do
before { sign_in Fabricate(:user) } context 'when signed in' do
before { sign_in Fabricate(:user) }
it 'gracefully handles invalid nested params' do it 'gracefully handles invalid nested params' do
post settings_featured_tags_path(featured_tag: 'invalid') post settings_featured_tags_path(featured_tag: 'invalid')
expect(response) expect(response)
.to have_http_status(400) .to have_http_status(400)
end
end
context 'when not signed in' do
subject { post settings_featured_tags_path }
it { is_expected.to redirect_to new_user_session_path }
end end
end end
end end

View file

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do
describe 'POST /settings/two_factor_authentication/recovery_codes' do
context 'when signed out' do
it 'redirects to sign in page' do
post settings_two_factor_authentication_recovery_codes_path
expect(response)
.to redirect_to(new_user_session_path)
end
end
end
end

View file

@ -0,0 +1,35 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthenticationMethods' do
context 'when not signed in' do
describe 'GET to /settings/two_factor_authentication_methods' do
it 'redirects to sign in page' do
get settings_two_factor_authentication_methods_path
expect(response)
.to redirect_to(new_user_session_path)
end
end
end
context 'when signed in' do
let(:user) { Fabricate(:user) }
before { sign_in user }
describe 'GET to /settings/two_factor_authentication_methods' do
describe 'when user has not enabled otp' do
before { user.update(otp_required_for_login: false) }
it 'redirects to enable otp' do
get settings_two_factor_authentication_methods_path
expect(response)
.to redirect_to(settings_otp_authentication_path)
end
end
end
end
end

View file

@ -45,6 +45,72 @@ RSpec.describe 'Statuses' do
.to redirect_to(original_status.url) .to redirect_to(original_status.url)
end end
end end
context 'when status visibility is public' do
subject { get short_account_status_path(account_username: account.username, id: status.id, format: format) }
let(:status) { Fabricate(:status, account: account, visibility: :public) }
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('public'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
.and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie')
expect(response.headers).to include(
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status visibility is private' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
it 'returns http not found' do
get short_account_status_path(account_username: account.username, id: status.id)
expect(response)
.to have_http_status(404)
end
end
context 'when status visibility is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
it 'returns http not found' do
get short_account_status_path(account_username: account.username, id: status.id)
expect(response)
.to have_http_status(404)
end
end
end end
context 'when signed in' do context 'when signed in' do
@ -63,5 +129,185 @@ RSpec.describe 'Statuses' do
end end
end end
end end
context 'with "HTTP Signature" access signed by a remote account' do
subject do
get short_account_status_path(account_username: status.account.username, id: status.id, format: format),
headers: nil,
sign_with: remote_account
end
let(:format) { 'html' }
let(:remote_account) { Fabricate(:account, domain: 'host.example') }
context 'when account blocks the remote account' do
before { account.block!(remote_account) }
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
context 'when account domain blocks the domain of the remote account' do
before { account.block_domain!(remote_account.domain) }
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
context 'when status has public visibility' do
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
.and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie')
expect(response.headers).to include(
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status has private visibility' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
context 'when user is authorized to see it' do
before { remote_account.follow!(account) }
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully' do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
end
context 'when status is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
context 'when user is authorized to see it' do
before { Fabricate(:mention, account: remote_account, status: status) }
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
end
end
end end
end end

View file

@ -12,6 +12,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
[ [
{ type: 'Hashtag', name: 'hoge' }, { type: 'Hashtag', name: 'hoge' },
{ type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) },
{ type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) },
{ type: 'Mention', href: bogus_mention }, { type: 'Mention', href: bogus_mention },
] ]
end end

View file

@ -5,6 +5,7 @@ require 'rails_helper'
RSpec.describe 'finding software updates through the admin interface' do RSpec.describe 'finding software updates through the admin interface' do
before do before do
Fabricate(:software_update, version: '99.99.99', type: 'major', urgent: true, release_notes: 'https://github.com/mastodon/mastodon/releases/v99') Fabricate(:software_update, version: '99.99.99', type: 'major', urgent: true, release_notes: 'https://github.com/mastodon/mastodon/releases/v99')
Fabricate(:software_update, version: '3.5.0', type: 'major', urgent: true, release_notes: 'https://github.com/mastodon/mastodon/releases/v3.5.0')
sign_in Fabricate(:owner_user), scope: :user sign_in Fabricate(:owner_user), scope: :user
end end
@ -16,6 +17,7 @@ RSpec.describe 'finding software updates through the admin interface' do
expect(page).to have_title(I18n.t('admin.software_updates.title')) expect(page).to have_title(I18n.t('admin.software_updates.title'))
expect(page).to have_content('99.99.99') expect(page).to have_content('99.99.99')
.and have_no_content('3.5.0')
click_on I18n.t('admin.software_updates.release_notes') click_on I18n.t('admin.software_updates.release_notes')
expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true) expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true)

View file

@ -0,0 +1,42 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings Featured Tags' do
let(:user) { Fabricate(:user) }
before { sign_in(user) }
describe 'Managing tags' do
let(:tag) { Fabricate(:tag) }
let(:status) { Fabricate :status, account: user.account }
before { status.tags << tag }
it 'Views, adds, and removes featured tags' do
visit settings_featured_tags_path
# Link to existing tag used on a status
expect(page.body)
.to include(
settings_featured_tags_path(featured_tag: { name: tag.name })
)
# Invalid entry
fill_in 'featured_tag_name', with: 'test, #foo !bleh'
expect { click_on I18n.t('featured_tags.add_new') }
.to_not change(user.account.featured_tags, :count)
# Valid entry
fill_in 'featured_tag_name', with: '#friends'
expect { click_on I18n.t('featured_tags.add_new') }
.to change(user.account.featured_tags, :count).by(1)
# Delete the created entry
expect { click_on I18n.t('filters.index.delete') }
.to change(user.account.featured_tags, :count).by(-1)
expect(page)
.to have_title(I18n.t('settings.featured_tags'))
end
end
end

View file

@ -0,0 +1,42 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings Migration Redirects' do
let!(:user) { Fabricate(:user, password: 'testtest') }
before { sign_in(user) }
describe 'Managing redirects' do
before { stub_resolver }
it 'creates and destroys redirects' do
visit new_settings_migration_redirect_path
expect(page)
.to have_title(I18n.t('settings.migrate'))
# Empty form invalid submission
expect { click_on I18n.t('migrations.set_redirect') }
.to_not(change { user.account.moved_to_account_id }.from(nil))
# Valid form submission
fill_in 'form_redirect_acct', with: 'new@example.host'
fill_in 'form_redirect_current_password', with: 'testtest'
expect { click_on I18n.t('migrations.set_redirect') }
.to(change { user.reload.account.moved_to_account_id }.from(nil))
# Delete the account move
expect { click_on I18n.t('migrations.cancel') }
.to(change { user.reload.account.moved_to_account_id }.to(nil))
expect(page)
.to have_content(I18n.t('migrations.cancelled_msg'))
end
private
def stub_resolver
resolver = instance_double(ResolveAccountService, call: Fabricate(:account))
allow(ResolveAccountService).to receive(:new).and_return(resolver)
end
end
end

View file

@ -0,0 +1,67 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings Privacy' do
let!(:user) { Fabricate(:user) }
before { sign_in(user) }
describe 'Managing privacy settings' do
before { user.account.update(discoverable: false) }
context 'with a successful update' do
before { allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) }
it 'updates user profile information' do
# View settings page
visit settings_privacy_path
expect(page)
.to have_content(I18n.t('privacy.title'))
.and have_private_cache_control
# Fill out form and submit
check 'account_discoverable'
check 'account_indexable'
expect { click_on submit_button }
.to change { user.account.reload.discoverable }.to(true)
expect(page)
.to have_content(I18n.t('privacy.title'))
.and have_content(I18n.t('generic.changes_saved_msg'))
expect(ActivityPub::UpdateDistributionWorker)
.to have_received(:perform_async).with(user.account.id)
end
end
context 'with a failed update' do
before do
allow(UpdateAccountService).to receive(:new).and_return(failing_update_service)
allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async)
end
it 'updates user profile information' do
# View settings page
visit settings_privacy_path
expect(page)
.to have_content(I18n.t('privacy.title'))
.and have_private_cache_control
# Fill out form and submit
check 'account_discoverable'
check 'account_indexable'
expect { click_on submit_button }
.to_not(change { user.account.reload.discoverable })
expect(page)
.to have_content(I18n.t('privacy.title'))
expect(ActivityPub::UpdateDistributionWorker)
.to_not have_received(:perform_async)
end
private
def failing_update_service
instance_double(UpdateAccountService, call: false)
end
end
end
end

View file

@ -0,0 +1,37 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do
describe 'Generating recovery codes' do
let(:user) { Fabricate :user, otp_required_for_login: true }
let(:backup_code) { +'147e7284c95bd260b91ed17820860019' }
before do
stub_code_generator
sign_in(user)
end
it 'updates the codes and includes them in the view' do
# Attempt to generate codes
visit settings_two_factor_authentication_methods_path
click_on I18n.t('two_factor_authentication.generate_recovery_codes')
# Fill in challenge password
fill_in 'form_challenge_current_password', with: user.password
expect { click_on I18n.t('challenge.confirm') }
.to(change { user.reload.otp_backup_codes })
expect(page)
.to have_content(I18n.t('two_factor_authentication.recovery_codes_regenerated'))
.and have_title(I18n.t('settings.two_factor_authentication'))
.and have_css('ol.recovery-codes')
.and have_content(backup_code)
end
def stub_code_generator
allow(SecureRandom).to receive(:hex).and_return(backup_code)
end
end
end

View file

@ -0,0 +1,41 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthenticationMethods' do
context 'when signed in' do
let(:user) { Fabricate(:user) }
before { sign_in user }
describe 'Managing 2FA methods' do
before { user.update(otp_required_for_login: true) }
it 'disables 2FA with challenge confirmation', :inline_jobs do
visit settings_two_factor_authentication_methods_path
expect(page)
.to have_content(I18n.t('settings.two_factor_authentication'))
.and have_private_cache_control
# Attempt to disable
click_on I18n.t('two_factor_authentication.disable')
expect(page)
.to have_title(I18n.t('challenge.prompt'))
# Fill in challenge form
fill_in 'form_challenge_current_password', with: user.password
emails = capture_emails do
expect { click_on I18n.t('challenge.confirm') }
.to change { user.reload.otp_required_for_login }.to(false)
end
expect(page)
.to have_content(I18n.t('two_factor_authentication.disabled_success'))
expect(emails.first)
.to be_present
.and(deliver_to(user.email))
.and(have_subject(I18n.t('devise.mailer.two_factor_disabled.subject')))
end
end
end
end

418
yarn.lock
View file

@ -55,7 +55,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.26.2":
version: 7.26.2 version: 7.26.2
resolution: "@babel/code-frame@npm:7.26.2" resolution: "@babel/code-frame@npm:7.26.2"
dependencies: dependencies:
@ -66,46 +66,47 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.5": "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.5, @babel/compat-data@npm:^7.26.8":
version: 7.26.5 version: 7.26.8
resolution: "@babel/compat-data@npm:7.26.5" resolution: "@babel/compat-data@npm:7.26.8"
checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 checksum: 10c0/66408a0388c3457fff1c2f6c3a061278dd7b3d2f0455ea29bb7b187fa52c60ae8b4054b3c0a184e21e45f0eaac63cf390737bc7504d1f4a088a6e7f652c068ca
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": "@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.26.7 version: 7.26.8
resolution: "@babel/core@npm:7.26.7" resolution: "@babel/core@npm:7.26.8"
dependencies: dependencies:
"@ampproject/remapping": "npm:^2.2.0" "@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.26.2" "@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.5" "@babel/generator": "npm:^7.26.8"
"@babel/helper-compilation-targets": "npm:^7.26.5" "@babel/helper-compilation-targets": "npm:^7.26.5"
"@babel/helper-module-transforms": "npm:^7.26.0" "@babel/helper-module-transforms": "npm:^7.26.0"
"@babel/helpers": "npm:^7.26.7" "@babel/helpers": "npm:^7.26.7"
"@babel/parser": "npm:^7.26.7" "@babel/parser": "npm:^7.26.8"
"@babel/template": "npm:^7.25.9" "@babel/template": "npm:^7.26.8"
"@babel/traverse": "npm:^7.26.7" "@babel/traverse": "npm:^7.26.8"
"@babel/types": "npm:^7.26.7" "@babel/types": "npm:^7.26.8"
"@types/gensync": "npm:^1.0.0"
convert-source-map: "npm:^2.0.0" convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0" debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2" gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3" json5: "npm:^2.2.3"
semver: "npm:^6.3.1" semver: "npm:^6.3.1"
checksum: 10c0/fbd2cd9fc23280bdcaca556e558f715c0a42d940b9913c52582e8e3d24e391d269cb8a9cd6589172593983569021c379e28bba6b19ea2ee08674f6068c210a9d checksum: 10c0/fafbd083ed3f79973ae2a11a69eee3f13b3226a1d4907abc2c6f2fea21adf4a7c20e00fe0eaa33f44a3666eeaf414edb07460ec031d478ee5f6088eb38b2a011
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/generator@npm:^7.26.5, @babel/generator@npm:^7.7.2": "@babel/generator@npm:^7.26.8, @babel/generator@npm:^7.7.2":
version: 7.26.5 version: 7.26.8
resolution: "@babel/generator@npm:7.26.5" resolution: "@babel/generator@npm:7.26.8"
dependencies: dependencies:
"@babel/parser": "npm:^7.26.5" "@babel/parser": "npm:^7.26.8"
"@babel/types": "npm:^7.26.5" "@babel/types": "npm:^7.26.8"
"@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/gen-mapping": "npm:^0.3.5"
"@jridgewell/trace-mapping": "npm:^0.3.25" "@jridgewell/trace-mapping": "npm:^0.3.25"
jsesc: "npm:^3.0.2" jsesc: "npm:^3.0.2"
checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 checksum: 10c0/9467f197d285ac315d1fa419138d36a3bfd69ca4baf763e914acab12f5f38e5d231497f6528e80613b28e73bb28c66fcc50b250b1f277b1a4d38ac14b03e9674
languageName: node languageName: node
linkType: hard linkType: hard
@ -171,9 +172,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": "@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.3":
version: 0.6.2 version: 0.6.3
resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3"
dependencies: dependencies:
"@babel/helper-compilation-targets": "npm:^7.22.6" "@babel/helper-compilation-targets": "npm:^7.22.6"
"@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-plugin-utils": "npm:^7.22.5"
@ -182,7 +183,7 @@ __metadata:
resolve: "npm:^1.14.2" resolve: "npm:^1.14.2"
peerDependencies: peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/f777fe0ee1e467fdaaac059c39ed203bdc94ef2465fb873316e9e1acfc511a276263724b061e3b0af2f6d7ad3ff174f2bb368fde236a860e0f650fda43d7e022 checksum: 10c0/4320e3527645e98b6a0d5626fef815680e3b2b03ec36045de5e909b0f01546ab3674e96f50bf3bc8413f8c9037e5ee1a5f560ebdf8210426dad1c2c03c96184a
languageName: node languageName: node
linkType: hard linkType: hard
@ -313,14 +314,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.26.7": "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.8":
version: 7.26.7 version: 7.26.8
resolution: "@babel/parser@npm:7.26.7" resolution: "@babel/parser@npm:7.26.8"
dependencies: dependencies:
"@babel/types": "npm:^7.26.7" "@babel/types": "npm:^7.26.8"
bin: bin:
parser: ./bin/babel-parser.js parser: ./bin/babel-parser.js
checksum: 10c0/dcb08a4f2878ece33caffefe43b71488d753324bae7ca58d64bca3bc4af34dcfa1b58abdf9972516d76af760fceb25bb9294ca33461d56b31c5059ccfe32001f checksum: 10c0/da04f26bae732a5b6790775a736b58c7876c28e62203c5097f043fd7273ef6debe5bfd7a4e670a6819f4549b215c7b9762c6358e44797b3c4d733defc8290781
languageName: node languageName: node
linkType: hard linkType: hard
@ -591,16 +592,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": "@babel/plugin-transform-async-generator-functions@npm:^7.26.8":
version: 7.25.9 version: 7.26.8
resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8"
dependencies: dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.26.5"
"@babel/helper-remap-async-to-generator": "npm:^7.25.9" "@babel/helper-remap-async-to-generator": "npm:^7.25.9"
"@babel/traverse": "npm:^7.25.9" "@babel/traverse": "npm:^7.26.8"
peerDependencies: peerDependencies:
"@babel/core": ^7.0.0-0 "@babel/core": ^7.0.0-0
checksum: 10c0/e3fcb9fc3d6ab6cbd4fcd956b48c17b5e92fe177553df266ffcd2b2c1f2f758b893e51b638e77ed867941e0436487d2b8b505908d615c41799241699b520dec6 checksum: 10c0/f6fefce963fe2e6268dde1958975d7adbce65fba94ca6f4bc554c90da03104ad1dd2e66d03bc0462da46868498428646e30b03a218ef0e5a84bfc87a7e375cec
languageName: node languageName: node
linkType: hard linkType: hard
@ -1137,18 +1138,18 @@ __metadata:
linkType: hard linkType: hard
"@babel/plugin-transform-runtime@npm:^7.22.4": "@babel/plugin-transform-runtime@npm:^7.22.4":
version: 7.25.9 version: 7.26.8
resolution: "@babel/plugin-transform-runtime@npm:7.25.9" resolution: "@babel/plugin-transform-runtime@npm:7.26.8"
dependencies: dependencies:
"@babel/helper-module-imports": "npm:^7.25.9" "@babel/helper-module-imports": "npm:^7.25.9"
"@babel/helper-plugin-utils": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.26.5"
babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs2: "npm:^0.4.10"
babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-corejs3: "npm:^0.10.6"
babel-plugin-polyfill-regenerator: "npm:^0.6.1" babel-plugin-polyfill-regenerator: "npm:^0.6.1"
semver: "npm:^6.3.1" semver: "npm:^6.3.1"
peerDependencies: peerDependencies:
"@babel/core": ^7.0.0-0 "@babel/core": ^7.0.0-0
checksum: 10c0/888a4998ba0a2313de347954c9a8dfeccbff0633c69d33aee385b8878eba2b429dbfb00c3cc04f6bca454b9be8afa01ebbd73defb7fbbb6e2d3086205c07758b checksum: 10c0/e206206fee262d2200763e6c427b27ca8a7a40a967dfe52f984f07a225952be0990fcce0acae6cee63fe92f5cadc94bb336fae2f3d687f0f2fcd2dadaf33029a
languageName: node languageName: node
linkType: hard linkType: hard
@ -1186,14 +1187,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/plugin-transform-template-literals@npm:^7.25.9": "@babel/plugin-transform-template-literals@npm:^7.26.8":
version: 7.25.9 version: 7.26.8
resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" resolution: "@babel/plugin-transform-template-literals@npm:7.26.8"
dependencies: dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.26.5"
peerDependencies: peerDependencies:
"@babel/core": ^7.0.0-0 "@babel/core": ^7.0.0-0
checksum: 10c0/5144da6036807bbd4e9d2a8b92ae67a759543929f34f4db9b463448a77298f4a40bf1e92e582db208fe08ee116224806a3bd0bed75d9da404fc2c0af9e6da540 checksum: 10c0/205a938ded9554857a604416d369023a961334b6c20943bd861b45f0e5dbbeca1cf6fda1c2049126e38a0d18865993433fdc78eae3028e94836b3b643c08ba0d
languageName: node languageName: node
linkType: hard linkType: hard
@ -1271,10 +1272,10 @@ __metadata:
linkType: hard linkType: hard
"@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4":
version: 7.26.7 version: 7.26.8
resolution: "@babel/preset-env@npm:7.26.7" resolution: "@babel/preset-env@npm:7.26.8"
dependencies: dependencies:
"@babel/compat-data": "npm:^7.26.5" "@babel/compat-data": "npm:^7.26.8"
"@babel/helper-compilation-targets": "npm:^7.26.5" "@babel/helper-compilation-targets": "npm:^7.26.5"
"@babel/helper-plugin-utils": "npm:^7.26.5" "@babel/helper-plugin-utils": "npm:^7.26.5"
"@babel/helper-validator-option": "npm:^7.25.9" "@babel/helper-validator-option": "npm:^7.25.9"
@ -1288,7 +1289,7 @@ __metadata:
"@babel/plugin-syntax-import-attributes": "npm:^7.26.0" "@babel/plugin-syntax-import-attributes": "npm:^7.26.0"
"@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6"
"@babel/plugin-transform-arrow-functions": "npm:^7.25.9" "@babel/plugin-transform-arrow-functions": "npm:^7.25.9"
"@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" "@babel/plugin-transform-async-generator-functions": "npm:^7.26.8"
"@babel/plugin-transform-async-to-generator": "npm:^7.25.9" "@babel/plugin-transform-async-to-generator": "npm:^7.25.9"
"@babel/plugin-transform-block-scoped-functions": "npm:^7.26.5" "@babel/plugin-transform-block-scoped-functions": "npm:^7.26.5"
"@babel/plugin-transform-block-scoping": "npm:^7.25.9" "@babel/plugin-transform-block-scoping": "npm:^7.25.9"
@ -1331,7 +1332,7 @@ __metadata:
"@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9"
"@babel/plugin-transform-spread": "npm:^7.25.9" "@babel/plugin-transform-spread": "npm:^7.25.9"
"@babel/plugin-transform-sticky-regex": "npm:^7.25.9" "@babel/plugin-transform-sticky-regex": "npm:^7.25.9"
"@babel/plugin-transform-template-literals": "npm:^7.25.9" "@babel/plugin-transform-template-literals": "npm:^7.26.8"
"@babel/plugin-transform-typeof-symbol": "npm:^7.26.7" "@babel/plugin-transform-typeof-symbol": "npm:^7.26.7"
"@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9"
"@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9"
@ -1339,13 +1340,13 @@ __metadata:
"@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9"
"@babel/preset-modules": "npm:0.1.6-no-external-plugins" "@babel/preset-modules": "npm:0.1.6-no-external-plugins"
babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs2: "npm:^0.4.10"
babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-corejs3: "npm:^0.11.0"
babel-plugin-polyfill-regenerator: "npm:^0.6.1" babel-plugin-polyfill-regenerator: "npm:^0.6.1"
core-js-compat: "npm:^3.38.1" core-js-compat: "npm:^3.40.0"
semver: "npm:^6.3.1" semver: "npm:^6.3.1"
peerDependencies: peerDependencies:
"@babel/core": ^7.0.0-0 "@babel/core": ^7.0.0-0
checksum: 10c0/77d2e46a4f133768c5c8a6b3fec49a7c85c6baec601991e63458921e889ff93911f447723c3a99a6a471ca654ea6dc2aaa7ed690f3e518ee80cea7820ab80ce3 checksum: 10c0/314ab8c6173d1f14e40cf22e1e646c429acfd45195e2ddbadca81956aa2a670e37e4446658db65f1a669f82ef115a4a018f78448bc10789cacdaf4e995680db5
languageName: node languageName: node
linkType: hard linkType: hard
@ -1411,39 +1412,39 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": "@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.8, @babel/template@npm:^7.3.3":
version: 7.25.9 version: 7.26.8
resolution: "@babel/template@npm:7.25.9" resolution: "@babel/template@npm:7.26.8"
dependencies:
"@babel/code-frame": "npm:^7.25.9"
"@babel/parser": "npm:^7.25.9"
"@babel/types": "npm:^7.25.9"
checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab
languageName: node
linkType: hard
"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.7":
version: 7.26.7
resolution: "@babel/traverse@npm:7.26.7"
dependencies: dependencies:
"@babel/code-frame": "npm:^7.26.2" "@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.5" "@babel/parser": "npm:^7.26.8"
"@babel/parser": "npm:^7.26.7" "@babel/types": "npm:^7.26.8"
"@babel/template": "npm:^7.25.9" checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213
"@babel/types": "npm:^7.26.7"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
checksum: 10c0/b23a36ce40d2e4970741431c45d4f92e3f4c2895c0a421456516b2729bd9e17278846e01ee3d9039b0adf5fc5a071768061c17fcad040e74a5c3e39517449d5b
languageName: node languageName: node
linkType: hard linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.5, @babel/types@npm:^7.26.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": "@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.8":
version: 7.26.7 version: 7.26.8
resolution: "@babel/types@npm:7.26.7" resolution: "@babel/traverse@npm:7.26.8"
dependencies:
"@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.8"
"@babel/parser": "npm:^7.26.8"
"@babel/template": "npm:^7.26.8"
"@babel/types": "npm:^7.26.8"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
checksum: 10c0/0771d1ce0351628ad2e8dac56f0d59f706eb125c83fbcc039bde83088ba0a1477244ad5fb060802f90366cc4d7fa871e5009a292aef6205bcf83f2e01d1a0a5d
languageName: node
linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.7, @babel/types@npm:^7.26.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.26.8
resolution: "@babel/types@npm:7.26.8"
dependencies: dependencies:
"@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-string-parser": "npm:^7.25.9"
"@babel/helper-validator-identifier": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9"
checksum: 10c0/7810a2bca97b13c253f07a0863a628d33dbe76ee3c163367f24be93bfaf4c8c0a325f73208abaaa050a6b36059efc2950c2e4b71fb109c0f07fa62221d8473d4 checksum: 10c0/cd41ea47bb3d7baf2b3bf5e70e9c3a16f2eab699fab8575b2b31a7b1cb64166eb52c97124313863dde0581747bfc7a1810c838ad60b5b7ad1897d8004c7b95a9
languageName: node languageName: node
linkType: hard linkType: hard
@ -1657,12 +1658,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@csstools/postcss-initial@npm:^2.0.0": "@csstools/postcss-initial@npm:^2.0.1":
version: 2.0.0 version: 2.0.1
resolution: "@csstools/postcss-initial@npm:2.0.0" resolution: "@csstools/postcss-initial@npm:2.0.1"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/44c443cba84cc66367f2082bf20db06c8437338c02c244c38798c5bf5342932d89fed0dd13e4409f084ecf7fce47ae6394e9a7a006fd98a973decfa24ab1eb04 checksum: 10c0/dbff7084ef4f1c4647efe2b147001daf172003c15b5e22689f0540d03c8d362f2a332cd9cf136e6c8dcda7564ee30492a4267ea188f72cb9c1000fb9bcfbfef8
languageName: node languageName: node
linkType: hard linkType: hard
@ -2258,15 +2259,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/ecma402-abstract@npm:2.3.2": "@formatjs/ecma402-abstract@npm:2.3.3":
version: 2.3.2 version: 2.3.3
resolution: "@formatjs/ecma402-abstract@npm:2.3.2" resolution: "@formatjs/ecma402-abstract@npm:2.3.3"
dependencies: dependencies:
"@formatjs/fast-memoize": "npm:2.2.6" "@formatjs/fast-memoize": "npm:2.2.6"
"@formatjs/intl-localematcher": "npm:0.5.10" "@formatjs/intl-localematcher": "npm:0.6.0"
decimal.js: "npm:10" decimal.js: "npm:10"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/364e9e7de974fed976e0e8142a0f888ee0af4a11a61899115e5761ed933e7c1f16379b7b54a01524fd3c5d58bf08b71308237ea969cd54889eaf7bb2d30ec776 checksum: 10c0/63de990c380a1800bc54d97c4aa13a88a92e73b1680f0f561d03f9bf3e23289b7aafd1a92037527c285bd587a44e20504258ac2cbd4564a4138ce2b4612c1495
languageName: node languageName: node
linkType: hard linkType: hard
@ -2288,14 +2289,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.11.0": "@formatjs/icu-messageformat-parser@npm:2.11.1":
version: 2.11.0 version: 2.11.1
resolution: "@formatjs/icu-messageformat-parser@npm:2.11.0" resolution: "@formatjs/icu-messageformat-parser@npm:2.11.1"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2" "@formatjs/ecma402-abstract": "npm:2.3.3"
"@formatjs/icu-skeleton-parser": "npm:1.8.12" "@formatjs/icu-skeleton-parser": "npm:1.8.13"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/9ad43847cb4a5c13895af606c634dcf2ec034d484cbbce6566746b60920643f33cbc5e2e3fd1efe21bcfdb555e1ee527e4518768001c3b36bf2e76c171e4049f checksum: 10c0/2e4106d564ede73cc52c97fc4270002f2460c3ded10715a095ec6765c48f951b1e9744cc55679abe046e24e4e22c345e738f7477c43d440d1d10a0235b12df37
languageName: node languageName: node
linkType: hard linkType: hard
@ -2310,13 +2311,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/icu-skeleton-parser@npm:1.8.12": "@formatjs/icu-skeleton-parser@npm:1.8.13":
version: 1.8.12 version: 1.8.13
resolution: "@formatjs/icu-skeleton-parser@npm:1.8.12" resolution: "@formatjs/icu-skeleton-parser@npm:1.8.13"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2" "@formatjs/ecma402-abstract": "npm:2.3.3"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/03e743aa09acb2137e37d03b98578fcbbc949d056b8c151763778e885d04d621e69c82f7656547f0532351d2a987bffac0a8c4c3d81186f47a28047ba64385e2 checksum: 10c0/eddea5b7c43745d05178211b25641319e054747e40b42ffaa93ae9940fd42e6f5654d12d42e6998b91b4de4b67a24e3ed779a37394262ec1dd46e693c166729a
languageName: node languageName: node
linkType: hard linkType: hard
@ -2330,15 +2331,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/intl-localematcher@npm:0.5.10":
version: 0.5.10
resolution: "@formatjs/intl-localematcher@npm:0.5.10"
dependencies:
tslib: "npm:2"
checksum: 10c0/362ec83aca9382165be575f1cefa477478339e6fead8ca8866185ce6e58427ea1487a811b12c73d1bcfa99fd4db0c24543b35c823451839f585576bfccb8c9cc
languageName: node
linkType: hard
"@formatjs/intl-localematcher@npm:0.5.5": "@formatjs/intl-localematcher@npm:0.5.5":
version: 0.5.5 version: 0.5.5
resolution: "@formatjs/intl-localematcher@npm:0.5.5" resolution: "@formatjs/intl-localematcher@npm:0.5.5"
@ -2348,33 +2340,42 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/intl-pluralrules@npm:^5.2.2": "@formatjs/intl-localematcher@npm:0.6.0":
version: 5.4.2 version: 0.6.0
resolution: "@formatjs/intl-pluralrules@npm:5.4.2" resolution: "@formatjs/intl-localematcher@npm:0.6.0"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2"
"@formatjs/intl-localematcher": "npm:0.5.10"
decimal.js: "npm:10"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/0ecb9da19084d7a15e636362c206c7ee14297ad365e3e63ea53c82c8442d02cd4dcf8a0da65af9b0f835b32f0e8c3d43407d6ee0a0d7974c3044c92574b49686 checksum: 10c0/90238e633426ff7237ab2bbe017be044fb2fb185a8d59a0652096ddab9cb1ddf64106d58fafd711ea19c4d3455bd966516ab93574ac3b169d9af2325875fae59
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/intl@npm:3.1.3": "@formatjs/intl-pluralrules@npm:^5.2.2":
version: 3.1.3 version: 5.4.3
resolution: "@formatjs/intl@npm:3.1.3" resolution: "@formatjs/intl-pluralrules@npm:5.4.3"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2" "@formatjs/ecma402-abstract": "npm:2.3.3"
"@formatjs/intl-localematcher": "npm:0.6.0"
decimal.js: "npm:10"
tslib: "npm:2"
checksum: 10c0/ffebb0fa56e0a8452a5e948a0ae38902daa138fc5c7638732697fb1648d8fb4d42883dbff7531e09468a498a85ef9cb4f443f916544a683f8d4c18d2fca8b69a
languageName: node
linkType: hard
"@formatjs/intl@npm:3.1.4":
version: 3.1.4
resolution: "@formatjs/intl@npm:3.1.4"
dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.3"
"@formatjs/fast-memoize": "npm:2.2.6" "@formatjs/fast-memoize": "npm:2.2.6"
"@formatjs/icu-messageformat-parser": "npm:2.11.0" "@formatjs/icu-messageformat-parser": "npm:2.11.1"
intl-messageformat: "npm:10.7.14" intl-messageformat: "npm:10.7.15"
tslib: "npm:2" tslib: "npm:2"
peerDependencies: peerDependencies:
typescript: 5 typescript: 5
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/1f9fce896b69dd3ff84221d2d18fbd57f8968c1d0691e44d33ac949d3d6f4e86f9c3075e4da870fb0b189d4952ec5e8bc7375558fa85c37bcb76a73aeb6f9f52 checksum: 10c0/c05828cf510b3e7930e7d334662142d4bbe603eb8b1bcb2eb5bc81856501c8ae62c89d43f6c54c9605d2a538fc8b361822880e5d92cea621c95e8d1915f870c5
languageName: node languageName: node
linkType: hard linkType: hard
@ -2398,11 +2399,11 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@formatjs/ts-transformer@npm:3.13.31": "@formatjs/ts-transformer@npm:3.13.32":
version: 3.13.31 version: 3.13.32
resolution: "@formatjs/ts-transformer@npm:3.13.31" resolution: "@formatjs/ts-transformer@npm:3.13.32"
dependencies: dependencies:
"@formatjs/icu-messageformat-parser": "npm:2.11.0" "@formatjs/icu-messageformat-parser": "npm:2.11.1"
"@types/json-stable-stringify": "npm:1" "@types/json-stable-stringify": "npm:1"
"@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22"
chalk: "npm:4" chalk: "npm:4"
@ -2414,7 +2415,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
ts-jest: ts-jest:
optional: true optional: true
checksum: 10c0/bfd7a41203c2b1691d883b3c306f3ae413b94c4875dec75df2be0e62da22625f673e41ecdc3257be40fe4a5b22a311365c2462d00a98f9bac59f00488543add0 checksum: 10c0/f51102e5427f9e22ed8dd4094e0347fa7bf96b99a97c5b48eb23bb11cd319f653c829073040884d0c6381136e227a1d0d2b7b2ac3ec0dba6ed9e26f454b61254
languageName: node languageName: node
linkType: hard linkType: hard
@ -3792,6 +3793,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/gensync@npm:^1.0.0":
version: 1.0.4
resolution: "@types/gensync@npm:1.0.4"
checksum: 10c0/1daeb1693196a85ee68b82f3fb30906a1cccede69d492b190de80ff20cec2d528d98cad866d733fd83cb171096dfe8c26c9c02c50ffb93e1113d48bd79daa556
languageName: node
linkType: hard
"@types/glob@npm:^7.1.1": "@types/glob@npm:^7.1.1":
version: 7.2.0 version: 7.2.0
resolution: "@types/glob@npm:7.2.0" resolution: "@types/glob@npm:7.2.0"
@ -5319,21 +5327,21 @@ __metadata:
linkType: hard linkType: hard
"babel-plugin-formatjs@npm:^10.5.1": "babel-plugin-formatjs@npm:^10.5.1":
version: 10.5.34 version: 10.5.35
resolution: "babel-plugin-formatjs@npm:10.5.34" resolution: "babel-plugin-formatjs@npm:10.5.35"
dependencies: dependencies:
"@babel/core": "npm:^7.25.0" "@babel/core": "npm:^7.25.0"
"@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0"
"@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0"
"@babel/traverse": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0"
"@babel/types": "npm:^7.25.0" "@babel/types": "npm:^7.25.0"
"@formatjs/icu-messageformat-parser": "npm:2.11.0" "@formatjs/icu-messageformat-parser": "npm:2.11.1"
"@formatjs/ts-transformer": "npm:3.13.31" "@formatjs/ts-transformer": "npm:3.13.32"
"@types/babel__core": "npm:^7.20.5" "@types/babel__core": "npm:^7.20.5"
"@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__helper-plugin-utils": "npm:^7.10.3"
"@types/babel__traverse": "npm:^7.20.6" "@types/babel__traverse": "npm:^7.20.6"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/6e6c67db41044427a7f182e7c18a8519e5aca96645de094244b332cb8c82ed498c56a4634e4e4ed1a4ef85c8e996669ef5bddd63ee9c45d6e512cbbf782af2a2 checksum: 10c0/2b47105f5e5b894c921fd60bafbe78d1286eec7aae499892dbc95dbd043dd38c8fe49ba28f1529321c3fea263d1fcfe8b5803116288c5bbffb35c123fc3fc2e5
languageName: node languageName: node
linkType: hard linkType: hard
@ -5424,6 +5432,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"babel-plugin-polyfill-corejs3@npm:^0.11.0":
version: 0.11.1
resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1"
dependencies:
"@babel/helper-define-polyfill-provider": "npm:^0.6.3"
core-js-compat: "npm:^3.40.0"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/025f754b6296d84b20200aff63a3c1acdd85e8c621781f2bd27fe2512d0060526192d02329326947c6b29c27cf475fbcfaaff8c51eab1d2bfc7b79086bb64229
languageName: node
linkType: hard
"babel-plugin-polyfill-regenerator@npm:^0.6.1": "babel-plugin-polyfill-regenerator@npm:^0.6.1":
version: 0.6.1 version: 0.6.1
resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1" resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1"
@ -5763,17 +5783,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": "browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0, browserslist@npm:^4.24.3, browserslist@npm:^4.24.4":
version: 4.24.0 version: 4.24.4
resolution: "browserslist@npm:4.24.0" resolution: "browserslist@npm:4.24.4"
dependencies: dependencies:
caniuse-lite: "npm:^1.0.30001663" caniuse-lite: "npm:^1.0.30001688"
electron-to-chromium: "npm:^1.5.28" electron-to-chromium: "npm:^1.5.73"
node-releases: "npm:^2.0.18" node-releases: "npm:^2.0.19"
update-browserslist-db: "npm:^1.1.0" update-browserslist-db: "npm:^1.1.1"
bin: bin:
browserslist: cli.js browserslist: cli.js
checksum: 10c0/95e76ad522753c4c470427f6e3c8a4bb5478ff448841e22b3d3e53f89ecaf17b6984666d6c7e715c370f1e7fa0cf684f42e34e554236a8b2fab38ea76b9e4c52 checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9
languageName: node languageName: node
linkType: hard linkType: hard
@ -5965,10 +5985,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001663": "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001688":
version: 1.0.30001666 version: 1.0.30001699
resolution: "caniuse-lite@npm:1.0.30001666" resolution: "caniuse-lite@npm:1.0.30001699"
checksum: 10c0/2d49e9be676233c24717f12aad3d01b3e5f902b457fe1deefaa8d82e64786788a8f79381ae437c61b50e15c9aea8aeb59871b1d54cb4c28b9190d53d292e2339 checksum: 10c0/e87b3a0602c3124131f6a21f1eb262378e17a2ee3089e3c472ac8b9caa85cf7d6a219655379302c29c6f10a74051f2a712639d7f98ee0444c73fefcbaf25d519
languageName: node languageName: node
linkType: hard linkType: hard
@ -6471,12 +6491,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1": "core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.40.0":
version: 3.38.1 version: 3.40.0
resolution: "core-js-compat@npm:3.38.1" resolution: "core-js-compat@npm:3.40.0"
dependencies: dependencies:
browserslist: "npm:^4.23.3" browserslist: "npm:^4.24.3"
checksum: 10c0/d8bc8a35591fc5fbf3e376d793f298ec41eb452619c7ef9de4ea59b74be06e9fda799e0dcbf9ba59880dae87e3b41fb191d744ffc988315642a1272bb9442b31 checksum: 10c0/44f6e88726fe266a5be9581a79766800478a8d5c492885f2d4c2a4e2babd9b06bc1689d5340d3a61ae7332f990aff2e83b6203ff8773137a627cfedfbeefabeb
languageName: node languageName: node
linkType: hard linkType: hard
@ -7536,10 +7556,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"electron-to-chromium@npm:^1.5.28": "electron-to-chromium@npm:^1.5.73":
version: 1.5.31 version: 1.5.96
resolution: "electron-to-chromium@npm:1.5.31" resolution: "electron-to-chromium@npm:1.5.96"
checksum: 10c0/e8aecd88c4c6d50a9d459b4b222865b855bab8f1b52e82913804e18b7884f2887bd76c61b3aa08c2ccbdcda098dd8486443f75bf770f0138f21dd9e63548fca7 checksum: 10c0/827d480f35abe8b0d01a4311fc3180089a406edfcd016d8433712b03ec6e56618ad6f9757e35403092de5c2e163372f9ec90eb8e8334f6f26119a21b568d9bf9
languageName: node languageName: node
linkType: hard linkType: hard
@ -7876,10 +7896,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"escalade@npm:^3.1.1, escalade@npm:^3.1.2": "escalade@npm:^3.1.1, escalade@npm:^3.2.0":
version: 3.1.2 version: 3.2.0
resolution: "escalade@npm:3.1.2" resolution: "escalade@npm:3.2.0"
checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
languageName: node languageName: node
linkType: hard linkType: hard
@ -9868,15 +9888,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"intl-messageformat@npm:10.7.14, intl-messageformat@npm:^10.3.5": "intl-messageformat@npm:10.7.15, intl-messageformat@npm:^10.3.5":
version: 10.7.14 version: 10.7.15
resolution: "intl-messageformat@npm:10.7.14" resolution: "intl-messageformat@npm:10.7.15"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2" "@formatjs/ecma402-abstract": "npm:2.3.3"
"@formatjs/fast-memoize": "npm:2.2.6" "@formatjs/fast-memoize": "npm:2.2.6"
"@formatjs/icu-messageformat-parser": "npm:2.11.0" "@formatjs/icu-messageformat-parser": "npm:2.11.1"
tslib: "npm:2" tslib: "npm:2"
checksum: 10c0/914c11118c47bb7d0163a7d54afebf52ae4fe9b250bba609b5db4c802a34f8bf758edbbc8c58094203205faf76948c7112399addb32e9b36e40483c4cf7c1cb7 checksum: 10c0/5759cd38718b7e4874fd6eb5e759e920227f993bdf17d71cd7474919098aafc13c8bbc63f5ccb2bafe13093f3a519fd7a03a47efc84bb3e9fbf9f25f88a408c9
languageName: node languageName: node
linkType: hard linkType: hard
@ -12427,10 +12447,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"node-releases@npm:^2.0.18": "node-releases@npm:^2.0.19":
version: 2.0.18 version: 2.0.19
resolution: "node-releases@npm:2.0.18" resolution: "node-releases@npm:2.0.19"
checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa
languageName: node languageName: node
linkType: hard linkType: hard
@ -13101,19 +13121,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"pg-pool@npm:^3.7.0": "pg-pool@npm:^3.7.1":
version: 3.7.0 version: 3.7.1
resolution: "pg-pool@npm:3.7.0" resolution: "pg-pool@npm:3.7.1"
peerDependencies: peerDependencies:
pg: ">=8.0" pg: ">=8.0"
checksum: 10c0/9128673cf941f288c0cb1a74ca959a9b4f6075ef73b2cc7dece5d4db3dd7043784869e7c12bce2e69ca0df22132a419cc45c2050b4373632856fe8bae9eb94b5 checksum: 10c0/65bff013102684774f4cfdffbfe0a2b0614252234561d391608f7fd915477e44f5fd0e1968ecc2f42032dcf8bac241d2f724c4f3df90384567d22df37dd3b6ba
languageName: node languageName: node
linkType: hard linkType: hard
"pg-protocol@npm:*, pg-protocol@npm:^1.7.0": "pg-protocol@npm:*, pg-protocol@npm:^1.7.1":
version: 1.7.0 version: 1.7.1
resolution: "pg-protocol@npm:1.7.0" resolution: "pg-protocol@npm:1.7.1"
checksum: 10c0/c4af854d9b843c808231c0040fed89f2b9101006157df8da2bb2f62a7dde702de748d852228dc22df41cc7ffddfb526af3bcb34b278b581e9f76a060789186c1 checksum: 10c0/3168d407ddc4c0fa2403eb9b49205399d4bc53dadbafdfcc5d25fa61b860a31c25df25704cf14c8140c80f0a41061d586e5fd5ce9bf800dfb91e9ce810bc2c37
languageName: node languageName: node
linkType: hard linkType: hard
@ -13146,13 +13166,13 @@ __metadata:
linkType: hard linkType: hard
"pg@npm:^8.5.0": "pg@npm:^8.5.0":
version: 8.13.1 version: 8.13.3
resolution: "pg@npm:8.13.1" resolution: "pg@npm:8.13.3"
dependencies: dependencies:
pg-cloudflare: "npm:^1.1.1" pg-cloudflare: "npm:^1.1.1"
pg-connection-string: "npm:^2.7.0" pg-connection-string: "npm:^2.7.0"
pg-pool: "npm:^3.7.0" pg-pool: "npm:^3.7.1"
pg-protocol: "npm:^1.7.0" pg-protocol: "npm:^1.7.1"
pg-types: "npm:^2.1.0" pg-types: "npm:^2.1.0"
pgpass: "npm:1.x" pgpass: "npm:1.x"
peerDependencies: peerDependencies:
@ -13163,7 +13183,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
pg-native: pg-native:
optional: true optional: true
checksum: 10c0/c13bc661cbdb115337bc8519254836faf4bd79106dfd7ed588c8ece8c8b2dd3b7376bfec9a9a2f7646fa095b0b310cec77a83c3ba2ea4872331446eb93fd9055 checksum: 10c0/7296f0e5930b35faef471be2673210cda553b30f1b8e9d176fcc286aa43248e17e09336032bf5a6bba55d2cc2d03afb8a407b5a6e6bc56ebb331c02d1a7ccc05
languageName: node languageName: node
linkType: hard linkType: hard
@ -13176,7 +13196,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.1": "picocolors@npm:^1.0.0, picocolors@npm:^1.1.1":
version: 1.1.1 version: 1.1.1
resolution: "picocolors@npm:1.1.1" resolution: "picocolors@npm:1.1.1"
checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
@ -13939,8 +13959,8 @@ __metadata:
linkType: hard linkType: hard
"postcss-preset-env@npm:^10.0.0": "postcss-preset-env@npm:^10.0.0":
version: 10.1.3 version: 10.1.4
resolution: "postcss-preset-env@npm:10.1.3" resolution: "postcss-preset-env@npm:10.1.4"
dependencies: dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.1" "@csstools/postcss-cascade-layers": "npm:^5.0.1"
"@csstools/postcss-color-function": "npm:^4.0.7" "@csstools/postcss-color-function": "npm:^4.0.7"
@ -13952,7 +13972,7 @@ __metadata:
"@csstools/postcss-gradients-interpolation-method": "npm:^5.0.7" "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.7"
"@csstools/postcss-hwb-function": "npm:^4.0.7" "@csstools/postcss-hwb-function": "npm:^4.0.7"
"@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-ic-unit": "npm:^4.0.0"
"@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-initial": "npm:^2.0.1"
"@csstools/postcss-is-pseudo-class": "npm:^5.0.1" "@csstools/postcss-is-pseudo-class": "npm:^5.0.1"
"@csstools/postcss-light-dark-function": "npm:^2.0.7" "@csstools/postcss-light-dark-function": "npm:^2.0.7"
"@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0"
@ -13975,7 +13995,7 @@ __metadata:
"@csstools/postcss-trigonometric-functions": "npm:^4.0.6" "@csstools/postcss-trigonometric-functions": "npm:^4.0.6"
"@csstools/postcss-unset-value": "npm:^4.0.0" "@csstools/postcss-unset-value": "npm:^4.0.0"
autoprefixer: "npm:^10.4.19" autoprefixer: "npm:^10.4.19"
browserslist: "npm:^4.23.1" browserslist: "npm:^4.24.4"
css-blank-pseudo: "npm:^7.0.1" css-blank-pseudo: "npm:^7.0.1"
css-has-pseudo: "npm:^7.0.2" css-has-pseudo: "npm:^7.0.2"
css-prefers-color-scheme: "npm:^10.0.0" css-prefers-color-scheme: "npm:^10.0.0"
@ -14007,7 +14027,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1" postcss-selector-not: "npm:^8.0.1"
peerDependencies: peerDependencies:
postcss: ^8.4 postcss: ^8.4
checksum: 10c0/0ae02015ad3ac69e8ef26afc1a06cb9fbb400104eca5c69a4baa20925e06364712f05b5d87ec9cf9445256e62344e6c2bad8d261a09b35a0e982e055564e3ba8 checksum: 10c0/bd3ad0a32fa30e53f4fdfb980b77d4e86a53ad40681dd8f7d2d9fb00728730b426cd7d039b57f0849261014e4c9e5a55f72edfda1c70165c96a52f246d273ebb
languageName: node languageName: node
linkType: hard linkType: hard
@ -14141,13 +14161,13 @@ __metadata:
linkType: hard linkType: hard
"postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.49": "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.49":
version: 8.5.1 version: 8.5.2
resolution: "postcss@npm:8.5.1" resolution: "postcss@npm:8.5.2"
dependencies: dependencies:
nanoid: "npm:^3.3.8" nanoid: "npm:^3.3.8"
picocolors: "npm:^1.1.1" picocolors: "npm:^1.1.1"
source-map-js: "npm:^1.2.1" source-map-js: "npm:^1.2.1"
checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 checksum: 10c0/3044d49bc725029ab62292e8bf9849741251b95f3b754e191bf8b4025414d40ec3b4ac05c5a563d4b50060b5c8e96683eb4d783d8d8fa3867eb7b763cbe66127
languageName: node languageName: node
linkType: hard linkType: hard
@ -14598,16 +14618,16 @@ __metadata:
linkType: hard linkType: hard
"react-intl@npm:^7.0.0": "react-intl@npm:^7.0.0":
version: 7.1.5 version: 7.1.6
resolution: "react-intl@npm:7.1.5" resolution: "react-intl@npm:7.1.6"
dependencies: dependencies:
"@formatjs/ecma402-abstract": "npm:2.3.2" "@formatjs/ecma402-abstract": "npm:2.3.3"
"@formatjs/icu-messageformat-parser": "npm:2.11.0" "@formatjs/icu-messageformat-parser": "npm:2.11.1"
"@formatjs/intl": "npm:3.1.3" "@formatjs/intl": "npm:3.1.4"
"@types/hoist-non-react-statics": "npm:3" "@types/hoist-non-react-statics": "npm:3"
"@types/react": "npm:16 || 17 || 18 || 19" "@types/react": "npm:16 || 17 || 18 || 19"
hoist-non-react-statics: "npm:3" hoist-non-react-statics: "npm:3"
intl-messageformat: "npm:10.7.14" intl-messageformat: "npm:10.7.15"
tslib: "npm:2" tslib: "npm:2"
peerDependencies: peerDependencies:
react: ^16.6.0 || 17 || 18 || 19 react: ^16.6.0 || 17 || 18 || 19
@ -14615,7 +14635,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/9d8d5afae16d26466f82fc1c0b8c4afd7559a8faa5b3ef31983a0af540b1b225fa89208b48bf9ec83056c0a27f2972fb86f2717422f788efdc819fb0e0846134 checksum: 10c0/6ccb6ba40e30079822994eb36f76c8631d5f31f5826f1fa62b00371be6efd1481b094285f7f1f672c01705dfe9b36b91ce89df35f61d7bb293e5709d7f07d1b7
languageName: node languageName: node
linkType: hard linkType: hard
@ -17621,17 +17641,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"update-browserslist-db@npm:^1.1.0": "update-browserslist-db@npm:^1.1.1":
version: 1.1.0 version: 1.1.2
resolution: "update-browserslist-db@npm:1.1.0" resolution: "update-browserslist-db@npm:1.1.2"
dependencies: dependencies:
escalade: "npm:^3.1.2" escalade: "npm:^3.2.0"
picocolors: "npm:^1.0.1" picocolors: "npm:^1.1.1"
peerDependencies: peerDependencies:
browserslist: ">= 4.21.0" browserslist: ">= 4.21.0"
bin: bin:
update-browserslist-db: cli.js update-browserslist-db: cli.js
checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6
languageName: node languageName: node
linkType: hard linkType: hard