diff --git a/.nvmrc b/.nvmrc index fb0a13554186a4..744ca17ec07de0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.13 +22.14 diff --git a/Gemfile.lock b/Gemfile.lock index 9d0928354b356f..520bfbc8cc4541 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -328,7 +328,7 @@ GEM azure-blob (~> 0.5.2) hashie (~> 5.0) jmespath (1.6.2) - json (2.9.1) + json (2.10.1) json-canonicalization (1.0.0) json-jwt (1.15.3.1) activesupport (>= 4.2) @@ -371,9 +371,10 @@ GEM mime-types terrapin (>= 0.6.0, < 2.0) language_server-protocol (3.17.0.4) - launchy (3.0.1) + launchy (3.1.0) addressable (~> 2.8) childprocess (~> 5.0) + logger (~> 1.6) letter_opener (1.10.0) launchy (>= 2.2, < 4) letter_opener_web (3.0.0) @@ -416,7 +417,7 @@ GEM mutex_m (0.3.0) net-http (0.6.0) uri - net-imap (0.5.5) + net-imap (0.5.6) date net-protocol net-ldap (0.19.0) @@ -424,7 +425,7 @@ GEM net-protocol net-protocol (0.2.2) timeout - net-smtp (0.5.0) + net-smtp (0.5.1) net-protocol nio4r (2.7.4) nokogiri (1.18.2) @@ -562,10 +563,10 @@ GEM opentelemetry-api (~> 1.0) orm_adapter (0.5.0) ostruct (0.6.1) - ox (2.14.21) + ox (2.14.22) bigdecimal (>= 3.0) parallel (1.26.3) - parser (3.3.7.0) + parser (3.3.7.1) ast (~> 2.4.1) racc parslet (2.0.0) @@ -602,7 +603,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.10) + rack (2.2.11) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (2.0.2) @@ -669,7 +670,7 @@ GEM link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.7.0) rdf (~> 3.3) - rdoc (6.11.0) + rdoc (6.12.0) psych (>= 4.0.0) redcarpet (3.6.0) redis (4.8.1) @@ -768,7 +769,7 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) securerandom (0.4.1) - selenium-webdriver (4.27.0) + selenium-webdriver (4.28.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -806,7 +807,7 @@ GEM simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) stackprof (0.2.27) - stoplight (4.1.0) + stoplight (4.1.1) redlock (~> 1.0) stringio (3.1.2) strong_migrations (2.2.0) @@ -817,8 +818,8 @@ GEM httpclient (>= 2.4) sysexits (1.2.0) temple (0.10.3) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) + terminal-table (4.0.0) + unicode-display_width (>= 1.1.1, < 4) terrapin (1.0.1) climate_control test-prof (1.4.4) @@ -849,7 +850,9 @@ GEM unf (0.1.4) unf_ext 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) useragent (0.16.11) validate_email (0.1.6) diff --git a/app/controllers/admin/software_updates_controller.rb b/app/controllers/admin/software_updates_controller.rb index d7b114a1009303..c9be97eb719a69 100644 --- a/app/controllers/admin/software_updates_controller.rb +++ b/app/controllers/admin/software_updates_controller.rb @@ -6,7 +6,7 @@ class SoftwareUpdatesController < BaseController def index authorize :software_update, :index? - @software_updates = SoftwareUpdate.by_version + @software_updates = SoftwareUpdate.by_version.filter(&:pending?) end private diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 465896a17d8874..5e395786f05891 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -46,6 +46,6 @@ def redirect_unauthenticated_to_permalinks! protected 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 diff --git a/app/javascript/images/archetypes/booster.png b/app/javascript/images/archetypes/booster.png index 18c92dfb7d57cd..df2a0226f8e2dd 100755 Binary files a/app/javascript/images/archetypes/booster.png and b/app/javascript/images/archetypes/booster.png differ diff --git a/app/javascript/images/archetypes/lurker.png b/app/javascript/images/archetypes/lurker.png index 8e1d6451b0b405..e37f98aab2bc81 100755 Binary files a/app/javascript/images/archetypes/lurker.png and b/app/javascript/images/archetypes/lurker.png differ diff --git a/app/javascript/images/archetypes/oracle.png b/app/javascript/images/archetypes/oracle.png index 2afd3c72e1fb84..9d4e2177c5ef12 100755 Binary files a/app/javascript/images/archetypes/oracle.png and b/app/javascript/images/archetypes/oracle.png differ diff --git a/app/javascript/images/archetypes/pollster.png b/app/javascript/images/archetypes/pollster.png index b838fccdd65de7..9fe6281af0f3d7 100755 Binary files a/app/javascript/images/archetypes/pollster.png and b/app/javascript/images/archetypes/pollster.png differ diff --git a/app/javascript/images/archetypes/replier.png b/app/javascript/images/archetypes/replier.png index b298d4221cc412..6c6325b9f1cf54 100755 Binary files a/app/javascript/images/archetypes/replier.png and b/app/javascript/images/archetypes/replier.png differ diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 818670742a9420..85f053111df3b3 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -68,8 +68,13 @@ "alert.unexpected.message": "Prodúxose un error inesperáu.", "alert.unexpected.title": "¡Meca!", "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", "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.thanks": "Gracies por ser parte de Mastodon!", "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.title": "404", "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_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", @@ -114,6 +120,7 @@ "column_header.pin": "Fixar", "column_header.show_settings": "Amosar la configuración", "column_header.unpin": "Lliberar", + "column_search.cancel": "Encaboxar", "column_subheading.settings": "Configuración", "community.column_settings.media_only": "Namás el conteníu multimedia", "community.column_settings.remote_only": "Namás lo remoto", @@ -129,26 +136,42 @@ "compose_form.placeholder": "¿En qué pienses?", "compose_form.poll.option_placeholder": "Opción {number}", "compose_form.poll.type": "Tipu", + "compose_form.publish": "Espublizar", "compose_form.publish_form": "Artículu nuevu", + "compose_form.reply": "Responder", "confirmation_modal.cancel": "Encaboxar", "confirmations.block.confirm": "Bloquiar", "confirmations.delete.confirm": "Desaniciar", "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.message": "¿De xuru que quies desaniciar permanentemente esta llista?", + "confirmations.delete_list.title": "¿Desaniciar la llista?", "confirmations.discard_edit_media.confirm": "Escartar", "confirmations.edit.confirm": "Editar", "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.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.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.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.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", "conversation.delete": "Desaniciar la conversación", "conversation.mark_as_read": "Marcar como lleíu", "conversation.open": "Ver la conversación", "conversation.with": "Con {names}", + "copy_icon_button.copied": "Copiáu nel cartafueyu", "copypaste.copied": "Copióse", "copypaste.copy_to_clipboard": "Copiar nel cartafueyu", "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.dismiss": "Escartar", "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_pill.server": "Sirvidor", "domain_pill.username": "Nome d'usuariu", @@ -176,6 +200,7 @@ "emoji_button.search_results": "Resultaos de la busca", "emoji_button.symbols": "Símbolos", "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.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í.", @@ -207,6 +232,7 @@ "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.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.search": "Buscar o crear", "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.none": "ensin {additional}", "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.any": "Cualesquiera d'estes", "hashtag.column_settings.tag_mode.none": "Nenguna d'estes", @@ -252,9 +279,14 @@ "home.column_settings.show_replies": "Amosar les rempuestes", "home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!", "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_this_server": "Nesti sirvidor", + "interaction_modal.title.follow": "Siguir a {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.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", @@ -291,10 +323,15 @@ "lightbox.close": "Zarrar", "lightbox.next": "Siguiente", "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_lists": "Amestar {name} a la llista", + "lists.create": "Crear", "lists.create_list": "Crear llista", "lists.delete": "Desaniciar la llista", + "lists.done": "Fecho", "lists.edit": "Editar la llista", "lists.list_name": "Nome de la llista", "lists.no_lists_yet": "Ensin llistes tovía.", @@ -332,6 +369,11 @@ "notification.admin.sign_up": "{name} rexistróse", "notification.follow": "{name} siguióte", "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.moderation-warning.learn_more": "Deprender más", "notification.poll": "Finó una encuesta na que votesti", @@ -364,6 +406,9 @@ "notifications.group": "{count} avisos", "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.policy.accept": "Aceptar", + "notifications.policy.accept_hint": "Amosar n'avisos", + "onboarding.follows.done": "Fecho", "onboarding.profile.note": "Biografía", "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", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index a60087890bb308..a71344ffe699ac 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -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_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.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.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 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 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." } diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index c68ff38a7cf14c..f910db135c4a38 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -86,6 +86,7 @@ "alert.unexpected.message": "Узнікла нечаканая памылка.", "alert.unexpected.title": "Вой!", "alt_text_badge.title": "Альтэрнатыўны тэкст", + "alt_text_modal.done": "Гатова", "announcement.announcement": "Аб'ява", "annual_report.summary.archetype.booster": "Трэнда-сьледнік", "annual_report.summary.archetype.lurker": "Назіральнік", @@ -407,6 +408,7 @@ "ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?", "ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?", "ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?", + "info_button.label": "Даведка", "interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць з вашага ўліковага запісу.", "interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца з вашага ўліковага запісу.", "interaction_modal.on_another_server": "На іншым серверы", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index d90934b6c99aac..c942b67e25c84e 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -11,6 +11,7 @@ "about.not_available": "এই তথ্য এই সার্ভারে উন্মুক্ত করা হয়নি.", "about.powered_by": "{mastodon} দ্বারা তৈরি বিকেন্দ্রীভূত সামাজিক মিডিয়া।", "about.rules": "সার্ভারের নিয়মাবলী", + "account.account_note_header": "ব্যক্তিগত টীকা", "account.add_or_remove_from_list": "তালিকাতে যোগ বা অপসারণ করো", "account.badges.bot": "বট", "account.badges.group": "দল", @@ -19,6 +20,7 @@ "account.block_short": "ব্লক", "account.blocked": "অবরুদ্ধ", "account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন", + "account.copy": "অবতারের সংযোগ অনুলিপি করো", "account.direct": "গোপনে মেনশন করুন @{name}", "account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে", "account.domain_blocked": "ডোমেইন ব্লক করা", @@ -29,6 +31,7 @@ "account.featured_tags.last_status_never": "কোনো পোস্ট নেই", "account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ", "account.follow": "অনুসরণ", + "account.follow_back": "তাকে অনুসরণ করো", "account.followers": "অনুসরণকারী", "account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না.", "account.following": "অনুসরণ করা হচ্ছে", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index c9a22ff8f16cd7..1a7930bf8e649f 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -1,5 +1,5 @@ { - "about.blocks": "Gweinyddion gyda chymedrolwyr", + "about.blocks": "Gweinyddion wedi'u cymedroli", "about.contact": "Cysylltwch â:", "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", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 9ec4c4e8a616bb..57f58e93eebd34 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -540,7 +540,7 @@ "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.lists": "Listoj", "navigation_bar.logout": "Elsaluti", - "navigation_bar.moderation": "Reguligo", + "navigation_bar.moderation": "Modereco", "navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.personal": "Persone", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 1f4d4546e9192d..899a85e2ccff8d 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -13,13 +13,13 @@ "about.rules": "Reglas del servidor", "account.account_note_header": "Nota personal", "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.block": "Bloquear a @{name}", "account.block_domain": "Bloquear dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.cancel_follow_request": "Retirar solicitud de seguimiento", + "account.cancel_follow_request": "Cancelar seguimiento", "account.copy": "Copiar enlace al perfil", "account.direct": "Mención privada @{name}", "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.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", - "alert.unexpected.title": "¡Ups!", + "alert.unexpected.title": "¡Uy!", "alt_text_badge.title": "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", @@ -193,7 +193,7 @@ "compose_form.poll.switch_to_single": "Cambiar la encuesta para permitir una única opción", "compose_form.poll.type": "Estilo", "compose_form.publish": "Publicación", - "compose_form.publish_form": "Publicar", + "compose_form.publish_form": "Nueva publicación", "compose_form.reply": "Respuesta", "compose_form.save_changes": "Actualización", "compose_form.spoiler.marked": "Quitar advertencia de contenido", @@ -285,7 +285,7 @@ "emoji_button.food": "Comida y bebida", "emoji_button.label": "Insertar emoji", "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.people": "Gente", "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.followed_tags": "No estás siguiendo ninguna etiqueta todavía. Cuando lo hagas, aparecerá aquí.", "empty_column.hashtag": "No hay nada en esta etiqueta aún.", - "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", - "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", + "empty_column.home": "¡Tu cronología está vacía! Sigue a más gente para llenarla.", + "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.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.", @@ -438,41 +438,41 @@ "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.back": "Volver atrás", + "keyboard_shortcuts.blocked": "Abrir la lista de usuarios bloqueados", "keyboard_shortcuts.boost": "Impulsar publicación", - "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", - "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", + "keyboard_shortcuts.column": "Enfocar columna", + "keyboard_shortcuts.compose": "Enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", - "keyboard_shortcuts.down": "mover hacia abajo en la lista", + "keyboard_shortcuts.down": "Descender en la lista", "keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourites": "Abrir lista de favoritos", - "keyboard_shortcuts.federated": "abrir el timeline federado", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "abrir el timeline propio", - "keyboard_shortcuts.hotkey": "Tecla caliente", - "keyboard_shortcuts.legend": "para mostrar esta leyenda", - "keyboard_shortcuts.local": "abrir el timeline local", - "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", - "keyboard_shortcuts.my_profile": "abrir tu perfil", - "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos multimedia", + "keyboard_shortcuts.federated": "Abrir cronología federada", + "keyboard_shortcuts.heading": "Atajos de teclado", + "keyboard_shortcuts.home": "Abrir cronología principal", + "keyboard_shortcuts.hotkey": "Tecla de acceso rápido", + "keyboard_shortcuts.legend": "Mostrar esta leyenda", + "keyboard_shortcuts.local": "Abrir cronología local", + "keyboard_shortcuts.mention": "Mencionar al autor", + "keyboard_shortcuts.muted": "Abrir la lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "Abrir tu perfil", + "keyboard_shortcuts.notifications": "Abrir la columna de notificaciones", + "keyboard_shortcuts.open_media": "Abrir multimedia", "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.requests": "abrir la lista de peticiones de seguidores", - "keyboard_shortcuts.search": "para poner el foco en la búsqueda", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", - "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", - "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", - "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", + "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "Enfocar la barra de búsqueda", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo AC", + "keyboard_shortcuts.start": "Abrir la columna “empezar”", + "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de AC", + "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", "keyboard_shortcuts.toot": "Comenzar una nueva 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.up": "para ir hacia arriba en la lista", + "keyboard_shortcuts.unfocus": "Desenfocar área de redacción/búsqueda", + "keyboard_shortcuts.up": "Ascender en la lista", "lightbox.close": "Cerrar", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", @@ -644,7 +644,7 @@ "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "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_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.policy.accept": "Aceptar", @@ -835,7 +835,7 @@ "status.media.open": "Click para abrir", "status.media.show": "Click para mostrar", "status.media_hidden": "Contenido multimedia oculto", - "status.mention": "Mencionar", + "status.mention": "Mencionar @{name}", "status.more": "Más", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversación", @@ -855,7 +855,7 @@ "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", - "status.report": "Reportar", + "status.report": "Reportar @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", "status.show_less_all": "Mostrar menos para todo", @@ -880,21 +880,21 @@ "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.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.million": "{count} M", "units.short.thousand": "{count} K", "upload_area.title": "Arrastra y suelta para subir", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "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.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.", "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.", "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", "upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.", "upload_form.edit": "Editar", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "upload_progress.processing": "Procesando…", "username.taken": "Ese nombre de usuario está ocupado. Prueba con otro", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index ddd08c44b39e72..41edbf6800e2e9 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -56,9 +56,9 @@ "account.no_bio": "Sin biografía.", "account.open_original_page": "Abrir página original", "account.posts": "Publicaciones", - "account.posts_with_replies": "Pub. y respuestas", + "account.posts_with_replies": "Publicaciones y respuestas", "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.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", @@ -71,7 +71,7 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications_short": "Dejar de silenciar notificaciones", "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.monthly_retention": "Tasa de retención de usuarios por mes después del registro", "admin.dashboard.retention.average": "Media", @@ -81,7 +81,7 @@ "admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían", "admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios", "admin.impact_report.title": "Resumen de impacto", - "alert.rate_limited.message": "Por favor, 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.unexpected.message": "Hubo un error inesperado.", "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_visual_impairments": "Descríbelo para personas con discapacidad visual…", "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.lurker": "El acechador", "annual_report.summary.archetype.oracle": "El oráculo", @@ -243,7 +243,7 @@ "copypaste.copied": "Copiado", "copypaste.copy_to_clipboard": "Copiar al portapapeles", "directory.federated": "Desde el fediverso conocido", - "directory.local": "Solo de {domain}", + "directory.local": "Solo desde {domain}", "directory.new_arrivals": "Recién llegados", "directory.recently_active": "Recientemente activo", "disabled_account_banner.account_settings": "Ajustes de la cuenta", @@ -285,7 +285,7 @@ "emoji_button.food": "Comida y bebida", "emoji_button.label": "Insertar emoji", "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.people": "Personas", "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", "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.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.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "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_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_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.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.", "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_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.dismiss": "No mostrar de nuevo", - "follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}", + "follow_suggestions.featured_longer": "Sugerencias del equipo de {domain}", "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.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.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", - "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", + "hashtag.column_settings.select.no_options_message": "No se han encontrado sugerencias", "hashtag.column_settings.select.placeholder": "Introduce etiquetas…", - "hashtag.column_settings.tag_mode.all": "Todos estos", - "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", - "hashtag.column_settings.tag_mode.none": "Ninguno de estos", + "hashtag.column_settings.tag_mode.all": "Todas estas", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", + "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "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_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", @@ -402,12 +402,12 @@ "hints.threads.see_more": "Ver más respuestas en {domain}", "home.column_settings.show_reblogs": "Mostrar impulsos", "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.link": "Ver actualizaciones", "home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!", - "home.show_announcements": "Mostrar anuncios", - "ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.", + "home.show_announcements": "Mostrar comunicaciones", + "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_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", @@ -438,14 +438,14 @@ "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.back": "Navegar hacia atrás", + "keyboard_shortcuts.blocked": "Abrir lista de usuarios bloqueados", "keyboard_shortcuts.boost": "Impulsar", "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.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.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourites": "Abrir lista de favoritos", @@ -455,24 +455,24 @@ "keyboard_shortcuts.hotkey": "Tecla rápida", "keyboard_shortcuts.legend": "Mostrar esta leyenda", "keyboard_shortcuts.local": "Abrir cronología local", - "keyboard_shortcuts.mention": "mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", - "keyboard_shortcuts.my_profile": "abrir tu perfil", - "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos multimedia", + "keyboard_shortcuts.mention": "Mencionar autor", + "keyboard_shortcuts.muted": "Abrir lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "Abrir tu perfil", + "keyboard_shortcuts.notifications": "Abrir columna de notificaciones", + "keyboard_shortcuts.open_media": "Abrir multimedia", "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas", - "keyboard_shortcuts.profile": "abrir el perfil del autor", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", - "keyboard_shortcuts.search": "para poner el foco en la búsqueda", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", - "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", - "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", - "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", - "keyboard_shortcuts.toot": "Comienza una nueva publicación", + "keyboard_shortcuts.profile": "Abrir perfil del autor", + "keyboard_shortcuts.reply": "Responder a una publicación", + "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "Focalizar barra de búsqueda", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo de CW", + "keyboard_shortcuts.start": "Abrir la columna \"comenzar\"", + "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto tras aviso de contenido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", + "keyboard_shortcuts.toot": "Comenzar una nueva 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.up": "para ir hacia arriba en la lista", + "keyboard_shortcuts.unfocus": "Quitar el foco de la caja de redacción/búsqueda", + "keyboard_shortcuts.up": "Moverse hacia arriba en la lista", "lightbox.close": "Cerrar", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", @@ -644,7 +644,7 @@ "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "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_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.policy.accept": "Aceptar", @@ -835,7 +835,7 @@ "status.media.open": "Pulsa para abrir", "status.media.show": "Pulsa para mostrar", "status.media_hidden": "Contenido multimedia oculto", - "status.mention": "Mencionar", + "status.mention": "Mencionar a @{name}", "status.more": "Más", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversación", @@ -855,7 +855,7 @@ "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", - "status.report": "Reportar", + "status.report": "Reportar a @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", "status.show_less_all": "Mostrar menos para todo", @@ -885,7 +885,7 @@ "units.short.million": "{count} M", "units.short.thousand": "{count} K", "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.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.", @@ -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_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "upload_progress.processing": "Procesando…", "username.taken": "Ese nombre de usuario ya está en uso. Prueba con otro", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index bd86e984aad282..7f73874e63de0d 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -218,6 +218,10 @@ "confirmations.logout.confirm": "Välju", "confirmations.logout.message": "Kas oled kindel, et soovid välja logida?", "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.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.", @@ -553,8 +557,11 @@ "notification.admin.report_statuses_other": "{name} raporteeris kohast {target}", "notification.admin.sign_up": "{name} registreerus", "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_and_others_with_link": "{name} ja {count, plural, one {# veel} other {# teist}} 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_and_others": "{name} ja veel {count, plural, one {# kasutaja} other {# kasutajat}} hakkas sind jälgima", "notification.follow_request": "{name} soovib sind jälgida", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 8cdfe6df193456..53a714d7a5104e 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -78,6 +78,7 @@ "alt_text_modal.done": "Immed", "announcement.announcement": "Ulɣu", "annual_report.summary.most_used_hashtag.none": "Ula yiwen", + "annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin", "audio.hide": "Ffer amesli", "block_modal.show_less": "Ssken-d drus", "block_modal.show_more": "Ssken-d ugar", @@ -123,6 +124,7 @@ "column_header.pin": "Senteḍ", "column_header.show_settings": "Ssken iɣewwaṛen", "column_header.unpin": "Kkes asenteḍ", + "column_search.cancel": "Semmet", "column_subheading.settings": "Iɣewwaṛen", "community.column_settings.local_only": "Adigan kan", "community.column_settings.media_only": "Imidyaten kan", @@ -141,6 +143,7 @@ "compose_form.poll.duration": "Tanzagt n tefrant", "compose_form.poll.multiple": "Aṭas n ufran", "compose_form.poll.option_placeholder": "Taxtiṛt {number}", + "compose_form.poll.single": "Yiwen wefran", "compose_form.poll.type": "Aɣanib", "compose_form.publish": "Suffeɣ", "compose_form.publish_form": "Tasuffeɣt tamaynut", @@ -162,6 +165,7 @@ "confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", + "confirmations.missing_alt_text.secondary": "Suffeɣ akken yebɣu yili", "confirmations.mute.confirm": "Sgugem", "confirmations.redraft.confirm": "Kkes sakin ɛiwed tira", "confirmations.reply.confirm": "Err", @@ -273,7 +277,7 @@ "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_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", "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.", @@ -284,10 +288,19 @@ "home.pending_critical_update.body": "Ma ulac aɣilif, leqqem aqeddac-ik Mastodon akken kan tzemreḍ !", "home.pending_critical_update.link": "Wali ileqman", "home.show_announcements": "Ssken-d ulɣuyen", + "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_this_server": "Deg uqeddac-ayi", "interaction_modal.title.follow": "Ḍfer {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.hours": "{number, plural, one {# usarag} other {# yisragen}}", "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.permission_denied": "D awezɣi ad yili wermad n walɣuten n tnarit axateṛ turagt tettwagdel", "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_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}}", @@ -485,7 +499,7 @@ "relative_time.just_now": "tura", "relative_time.minutes": "{number}tis", "relative_time.seconds": "{number}tas", - "relative_time.today": "assa", + "relative_time.today": "ass-a", "reply_indicator.cancel": "Sefsex", "reply_indicator.poll": "Afmiḍi", "report.block": "Sewḥel", @@ -535,6 +549,7 @@ "search.quick_action.status_search": "Tisuffaɣ mṣadan d {x}", "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_logged_out_message": "Yella kan mi ara tiliḍ d uqqin.", "search_popout.language_code": "Tangalt ISO n tutlayt", "search_popout.options": "Iwellihen n unadi", "search_popout.quick_actions": "Tigawin tiruradin", @@ -546,6 +561,7 @@ "search_results.no_results": "Ulac igemmaḍ.", "search_results.see_all": "Wali-ten akk", "search_results.statuses": "Tisuffaɣ", + "search_results.title": "Igemmaḍ n unadi ɣef \"{q}\"", "server_banner.active_users": "iseqdacen urmiden", "server_banner.administered_by": "Yettwadbel sɣur :", "server_banner.server_stats": "Tidaddanin n uqeddac:", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index 13a11d299954ce..f32399e832bd76 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -233,8 +233,46 @@ "confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}?", "confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?", "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.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_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê私人提起", "search_popout.language_code": "ISO語言代碼", diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 6fe1330d6c68c1..696f9fbed82c8d 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -117,6 +117,8 @@ "compose_form.publish_form": "नयाँ पोस्ट", "compose_form.reply": "जवाफ दिनुहोस्", "compose_form.save_changes": "अपडेट गर्नुहोस्", + "confirmation_modal.cancel": "रद्द गर्नुहोस्", + "confirmations.block.confirm": "ब्लक गर्नुहोस्", "confirmations.delete.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो पोष्ट मेटाउन चाहनुहुन्छ?", "confirmations.delete.title": "पोस्ट मेटाउने?", "confirmations.delete_list.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो सूची स्थायी रूपमा मेटाउन चाहनुहुन्छ?", @@ -129,7 +131,10 @@ "confirmations.follow_to_list.title": "प्रयोगकर्तालाई फलो गर्ने?", "confirmations.logout.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाइँ लाई लग आउट गर्न चाहनुहुन्छ?", "confirmations.logout.title": "लग आउट गर्ने?", + "confirmations.mute.confirm": "म्यूट गर्नुहोस्", + "confirmations.redraft.confirm": "मेटाएर पुन: ड्राफ्ट गर्नुहोस्", "confirmations.redraft.title": "पोस्ट मेटाएर पुन: ड्राफ्ट गर्ने?", + "confirmations.reply.confirm": "जवाफ दिनुहोस्", "confirmations.reply.message": "अहिले जवाफ दिनाले तपाईंले हाल लेखिरहनुभएको सन्देश अधिलेखन हुनेछ। के तपाईं अगाडि बढ्न चाहनुहुन्छ?", "confirmations.reply.title": "पोस्ट अधिलेखन गर्ने?", "confirmations.unfollow.confirm": "अनफलो गर्नुहोस्", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 95d173dca50bae..b9ee243705b8fc 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -86,6 +86,13 @@ "alert.unexpected.message": "Det oppstod eit uventa problem.", "alert.unexpected.title": "Oi sann!", "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", "annual_report.summary.archetype.booster": "Den som jaktar på noko kult", "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_following_title": "Oversjå varsel frå folk du ikkje fylgjer?", "ignore_notifications_modal.private_mentions_title": "Oversjå varsel frå masseutsende private omtaler?", + "info_button.label": "Hjelp", + "info_button.what_is_alt_text": "

Kva er alternativ tekst?

Alternativ eller skildrande tekst gjev ei skildring av biletet for menneske som har synsvanskar, sein nettilkopling eller dei som ser etter ekstra innhald.

Du gjer innhaldet ditt meir tilgjengeleg og forståeleg for alle ved å skriva klåre, presise og nøytrale alt-tekstar.

", "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.reblog": "Du må framheva frå kontoen din for å halda fram.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index f31de0151d63bb..788a08ec39caec 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -218,7 +218,10 @@ "confirmations.logout.confirm": "Wyloguj", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.logout.title": "Wylogować?", + "confirmations.missing_alt_text.confirm": "Dodaj tekst alternatywny", "confirmations.missing_alt_text.message": "Twój wpis zawiera treści graficzne bez opisu pomocniczego. Dodając opis, sprawisz, że będzie on bardziej dostępny dla większej liczby osób.", + "confirmations.missing_alt_text.secondary": "Publikuj mimo to", + "confirmations.missing_alt_text.title": "Dodać tekst alternatywny?", "confirmations.mute.confirm": "Wycisz", "confirmations.redraft.confirm": "Usuń i przeredaguj", "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 021eeb349b2b3e..a3f138f1b70028 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -86,6 +86,13 @@ "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Eita!", "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", "annual_report.summary.archetype.booster": "Caçador legal", "annual_report.summary.archetype.lurker": "O espreitador", @@ -211,6 +218,10 @@ "confirmations.logout.confirm": "Sair", "confirmations.logout.message": "Você tem certeza de que deseja sair?", "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.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.", @@ -407,6 +418,8 @@ "ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não seguem você?", "ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que você não segue?", "ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?", + "info_button.label": "Ajuda", + "info_button.what_is_alt_text": "

O que é texto alternativo?

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.

Você pode melhorar a acessibilidade e a compreensão para todos escrevendo texto alternativo claro, conciso e objetivo.

", "interaction_modal.action.favourite": "Para continuar, você precisa favoritar na sua conta.", "interaction_modal.action.follow": "Para continuar, você precisa seguir da sua conta.", "interaction_modal.action.reblog": "Para continuar, você precisa impulsionar na sua conta.", @@ -457,6 +470,7 @@ "keyboard_shortcuts.toggle_hidden": "expandir/ocultar aviso de conteúdo", "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar mídia", "keyboard_shortcuts.toot": "compor novo toot", + "keyboard_shortcuts.translate": "Para traduzir um post", "keyboard_shortcuts.unfocus": "desfocar de tudo", "keyboard_shortcuts.up": "mover para cima", "lightbox.close": "Fechar", @@ -836,6 +850,7 @@ "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.", "status.redraft": "Excluir e rascunhar", "status.remove_bookmark": "Remover do Salvos", + "status.remove_favourite": "Remover dos favoritos", "status.replied_in_thread": "Respondido na conversa", "status.replied_to": "Em resposta a {name}", "status.reply": "Responder", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index b6f3a8a95de32f..ca3798c731c0f4 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -207,8 +207,8 @@ "confirmations.delete_list.confirm": "Удалить", "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", "confirmations.delete_list.title": "Удалить список?", - "confirmations.discard_edit_media.confirm": "Отменить", - "confirmations.discard_edit_media.message": "У вас имеются несохранённые изменения превью и описания медиафайла, отменить их?", + "confirmations.discard_edit_media.confirm": "Сбросить", + "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения в описании мультимедиа или предпросмотре, сбросить их?", "confirmations.edit.confirm": "Редактировать", "confirmations.edit.message": "При редактировании, текст набираемого поста будет очищен. Продолжить?", "confirmations.edit.title": "Переписать сообщение?", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index b9f0fd1b33bfce..6ca6b0e3291ab5 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -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.server_stats": "Štatistiky servera:", "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.sso_redirect": "Prihlásenie alebo registrácia", "status.admin_account": "Moderovať @{name}", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 7274f425ea14da..b56d959752fcd2 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -252,7 +252,7 @@ "dismissable_banner.dismiss": "Відхилити", "dismissable_banner.explore_links": "Ці новини сьогодні найбільше поширюють у fediverse. Свіжіші новини, опубліковані більшою кількістю різних людей, оцінюються вище.", "dismissable_banner.explore_statuses": "Ці дописи з усього fediverse сьогодні набирають популярності. Новіші дописи з більшою кількістю посилень і додавань у вибрані мають вищий рейтинг.", - "dismissable_banner.explore_tags": "Ці гештеґи сьогодні набувають популярності у fediverse. Гештеґи, якими користується більше людей, займають вищі позиції.", + "dismissable_banner.explore_tags": "Ці хештеги сьогодні набувають популярності у fediverse. Хештеги, якими користується більше людей, займають вищі позиції.", "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей у федіверсі, на яких підписані люди в {domain}.", "domain_block_modal.block": "Блокувати сервер", "domain_block_modal.block_account_instead": "Блокувати @{name} натомість", diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index b545b094ff0340..fd5a8c2d4641c6 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -227,7 +227,7 @@ def update_mentions! nil 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 # to silent mentions, since withdrawing access from someone who already diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 00d020d2b396fa..5f7230678a1402 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -47,10 +47,14 @@ def suspend_accounts! def notify_of_severed_relationships! return if @domain_block_event.nil? - # TODO: check how efficient that query is, also check `push_bulk`/`perform_bulk` - @domain_block_event.affected_local_accounts.reorder(nil).find_each do |account| - event = AccountRelationshipSeveranceEvent.create!(account: account, relationship_severance_event: @domain_block_event) - LocalNotificationWorker.perform_async(account.id, event.id, 'AccountRelationshipSeveranceEvent', 'severed_relationships') + # find_in_batches and perform_bulk both default to batches of 1000 + @domain_block_event.affected_local_accounts.reorder(nil).find_in_batches do |accounts| + notification_jobs_args = accounts.map do |account| + 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 diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 42a107a31c7aa7..b52e92a4ec901e 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -23,6 +23,8 @@ ja: models: account: attributes: + fields: + fields_with_values_missing_labels: プロフィール補足情報にラベルが入力されていないものがあります username: invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください reserved: は予約されています diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index fde744bed60a32..e9b4437035b366 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -23,6 +23,8 @@ pt-BR: models: account: attributes: + fields: + fields_with_values_missing_labels: contém valores sem rótulos username: invalid: apenas letras, números e underlines ( "_" ) reserved: já existe diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 4638afc8e06b30..1628643bd188eb 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -88,8 +88,8 @@ kab: success: Asesṭeb idda akken iwata seg umiḍan %{kind}. 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. - 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_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_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·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_not_active: Awal-ik uffir yettwabeddel mebla ugur. registrations: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 085081b15ae0f9..98930d11baecf5 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -5,7 +5,7 @@ eo: contact_missing: Ne elektita contact_unavailable: Ne disponebla hosted_on: "%{domain} estas nodo de Mastodon" - title: Pri + title: Prio accounts: followers: one: Sekvanto @@ -41,7 +41,7 @@ eo: by_domain: Domajno change_email: changed_msg: Retpoŝta adreso sukcese ŝanĝita! - current_email: Nuna retadreso + current_email: Aktuala retadreso label: Ŝanĝi retadreson new_email: Nova retadreso submit: Ŝanĝi retadreson @@ -102,7 +102,7 @@ eo: moderation_notes: Notoj de moderigado most_recent_activity: Lastaj afiŝoj 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_role_assigned: Sen rolo not_subscribed: Ne abonita @@ -142,7 +142,7 @@ eo: only_password: Nur pasvorto password_and_2fa: Pasvorto kaj 2FA sensitive: Tikla - sensitized: markita tikla + sensitized: Markita kiel tikla shared_inbox_url: URL de kunhavigita leterkesto show: created_reports: Faritaj raportoj @@ -204,7 +204,7 @@ eo: destroy_unavailable_domain: Forigi Nehaveblan Domajnon destroy_user_role: Detrui Rolon disable_2fa_user: Malebligi 2FA - disable_custom_emoji: Malebligi proprajn emoĝiojn + disable_custom_emoji: Malŝalti Proprajn Bildosignojn disable_relay: Malebligi Relajson disable_sign_in_token_auth_user: Malebligi aŭtentigon per retpoŝta ĵetono por la uzanto disable_user: Neebligi la uzanton @@ -220,14 +220,14 @@ eo: remove_avatar_user: Forigi la profilbildon reopen_report: Remalfermi signalon resend_user: Resendi konfirman retmesaĝon - reset_password_user: Restarigi pasvorton + reset_password_user: Restarigi Pasvorton resolve_report: Solvitaj reporto sensitive_account: Marki tikla la aŭdovidaĵojn de via konto - silence_account: Silentigi konton - suspend_account: Suspendi la konton + silence_account: Silentigi Konton + suspend_account: Suspendi Konton unassigned_report: Malatribui Raporton 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 unsuspend_account: Malsuspendi la konton update_announcement: Ĝisdatigi anoncon @@ -235,19 +235,19 @@ eo: update_domain_block: Ĝigdatigi domajnan blokadon update_ip_block: Krei IP-regulon update_report: Ĝisdatigo de Raporto - update_status: Ĝisdatigi afiŝon + update_status: Ĝisdatigi Afiŝon update_user_role: Ĝisdatigi rolon actions: - approve_appeal_html: "%{name} aprobis apelacion kontraŭ moderiga decido de %{target}" - approve_user_html: "%{name} aprobis registriĝon de %{target}" + approve_appeal_html: "%{name} aprobis apelacion kontraŭ reguliga decido de %{target}" + approve_user_html: "%{name} aprobis la registriĝon de %{target}" assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem" - change_email_user_html: "%{name} ŝanĝis retadreson de uzanto %{target}" + change_email_user_html: "%{name} ŝanĝis la retadreson de uzanto %{target}" change_role_user_html: "%{name} ŝanĝis rolon de %{target}" confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}" create_account_warning_html: "%{name} sendis averton al %{target}" create_announcement_html: "%{name} kreis novan anoncon %{target}" create_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_block_html: "%{name} blokis 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}" destroy_announcement_html: "%{name} forigis anoncon %{target}" destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}" - destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}" + destroy_custom_emoji_html: "%{name} forigis la bildosignon %{target}" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block_html: "%{name} malblokis domajnon %{target}" destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" @@ -269,11 +269,11 @@ eo: destroy_unavailable_domain_html: "%{name} restartigis sendon al domajno %{target}" destroy_user_role_html: "%{name} forigis rolon de %{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_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}" - 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_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}" @@ -296,7 +296,7 @@ eo: unsilence_account_html: "%{name} malfaris limon al konto de %{target}" unsuspend_account_html: "%{name} malsuspendis la konton de %{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_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}" update_report_html: "%{name} ĝisdatigis la raporton %{target}" @@ -309,17 +309,17 @@ eo: title: Ĵurnalo de revizo unavailable_instance: "(domajna nomo nedisponebla)" announcements: - destroyed_msg: Anonco sukcese forigita! + destroyed_msg: La anonco sukcese forigita! edit: title: Redakti anoncon - empty: Neniu anonco trovita. + empty: Neniu anonco troviĝas. live: Publikigita new: create: Krei anoncon title: Nova anonco publish: Publikigi published_msg: Anonco sukcese publikigita! - scheduled_for: Planigita je %{time} + scheduled_for: Planigota je %{time} scheduled_msg: Anonco planigita por publikigo! title: Anoncoj unpublish: Malpublikigi @@ -341,7 +341,7 @@ eo: disabled_msg: Emoĝio sukcese malebligita emoji: Emoĝio enable: Ebligi - enabled: Ebligita + enabled: Ŝaltita enabled_msg: Emoĝio sukcese ebligita image_hint: PNG aŭ GIF malpli granda ol %{size} list: Listo @@ -1313,8 +1313,8 @@ eo: Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la operaciumaj aplikaĵoj por Mastodon por via platformo. existing_username_validator: - not_found: Ne povas trovi lokaj uzanto kun tiu uzantnomo - not_found_multiple: Ne povas trovi %{usernames} + not_found: ne povas trovi lokaj uzanto kun tiu uzantnomo + not_found_multiple: ne povas trovi %{usernames} exports: archive_takeout: date: Dato @@ -1539,7 +1539,7 @@ eo: validations: 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_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 migrations: acct: Movigita al diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 11cc8b331835c9..6232a7eba4674e 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -436,6 +436,7 @@ kab: terms_of_service: draft: Arewway publish: Asuffeɣ + save_draft: Sekles arewway title: Tadbelt trends: allow: Sireg @@ -489,7 +490,7 @@ kab: delete_account: Kkes amiḍan description: 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! 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? @@ -746,6 +747,7 @@ kab: electron: Electron firefox: Firefox generic: Iminig arusin + huawei_browser: Iminig n Huawei ie: Internet Explorer micro_messenger: MicroMessenger nokia: Iminig Nokia S40 Ovi @@ -754,6 +756,7 @@ kab: phantom_js: PhantomJS qq: Iminig QQ safari: Safari + uc_browser: UC Browser unknown_browser: Iminig arussin weibo: Weibo current_session: Tiɣimit tamirant diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index fe10dd6462c765..a8bf2d73fbcabd 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -937,6 +937,25 @@ pt-BR: generates: action: Gerar chance_to_review_html: "Os termos de serviço gerado não será publicado automaticamente.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 %{display_count} usuários 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 trends: allow: Permitir @@ -1168,6 +1187,7 @@ pt-BR: set_new_password: Definir uma nova senha 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_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? 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 @@ -1176,6 +1196,7 @@ pt-BR: title: Entrar em %{domain} 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}. + 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}. status: account_status: Status da conta @@ -1187,6 +1208,8 @@ pt-BR: view_strikes: Veja os avisos anteriores em relação à sua conta too_fast: O formulário foi enviado muito rapidamente, tente novamente. use_security_key: Usar chave de segurança + user_agreement_html: Eu li e concordo com os termos de serviço e política de privacidade. + user_privacy_agreement_html: Eu li e concordo com a política de privacidade. author_attribution: 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. @@ -1401,7 +1424,31 @@ pt-BR: domain_blocking_html: one: Você está prestes a substituir seu bloco de lista do domínio com %{count} domínio de %{filename}. other: Você está prestes a substituir sua lista de bloqueio de domínio com domínios%{count} de %{filename}. + following_html: + one: Você está prestes a seguir %{count} contas de %{filename} e parar de seguir todos os outros. + other: Você está prestes a seguir até %{count} contas de %{filename} e deixar de seguir qualquer outra pessoa. + lists_html: + one: Você está prestes a substituir suas listas pelo conteúdo de %{filename}. Até %{count} conta será adicionada às novas listas. + other: Você está prestes a substituir suas listas pelo conteúdo de %{filename}. Até %{count} contas serão adicionadas às novas listas. + muting_html: + one: Você está prestes a substituir sua lista de contas silenciadas por até %{count} conta de %{filename}. + other: Você está prestes a substituir sua lista de contas silenciadas por até %{count} contas de %{filename}. preambles: + blocking_html: + one: Você está prestes a bloquear até %{count} conta de %{filename}. + other: Você está prestes a bloquear até %{count} contas de %{filename}. + bookmarks_html: + one: Você está prestes a adicionar até %{count} post de %{filename} aos seus favoritos. + other: Você está prestes a adicionar até %{count} posts de %{filename} aos seus favoritos. + domain_blocking_html: + one: Você está prestes a bloquear até %{count} domínio de %{filename}. + other: Você está prestes a bloquear até %{count} domínios de %{filename}. + following_html: + one: Você está prestes a seguir até %{count} conta de %{filename}. + other: Você está prestes a seguir até %{count} contas de %{filename}. + lists_html: + one: Você está prestes a adicionar até %{count} conta a partir de %{filename} para suas listas. Novas listas serão criadas se não houver uma para a qual adicionar. + other: Você está prestes a adicionar até %{count} contas a partir de %{filename} para suas listas. Novas listas serão criadas se não houver uma para a qual adicionar. muting_html: one: Você está prestes a silenciar %{count} conta de %{filename}. other: Você está prestes a silenciar mais de %{count} contas de %{filename}. @@ -1824,6 +1871,8 @@ pt-BR: too_late: É tarde demais para solicitar uma revisão desta punição tags: does_not_match_previous_name: não corresponde ao nome anterior + terms_of_service: + title: Termos de Serviço themes: contrast: Mastodon (Alto contraste) 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. subject: Sua conta foi acessada a partir de um novo endereço IP 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 termos atualizados na íntegra aqui. + 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: 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}. diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 499b692a28c46a..b6e50ac816485b 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -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. 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_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 klako 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_show_all: Ĉiam montri la vidaŭdaĵojn diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index d827d7b393b284..4a16186afdb4e1 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -3,6 +3,7 @@ ja: simple_form: hints: account: + attribution_domains: 1行につき1つずつ入力してください。この設定は関わりのないwebサイトに対して虚偽の帰属表示が行われることを防止する役割があります。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 display_name: フルネーム、ハンドルネームなど fields: ホームページ、代名詞、年齢など何でも構いません。 @@ -155,6 +156,7 @@ ja: url: イベントの送信先 labels: account: + attribution_domains: あなたの著者表示を許可するwebサイト discoverable: アカウントを見つけやすくする fields: name: ラベル @@ -231,6 +233,7 @@ ja: setting_display_media_show_all: 表示 setting_expand_spoilers: 閲覧注意としてマークされた投稿を常に展開する setting_hide_network: 繋がりを隠す + setting_missing_alt_text_modal: 代替テキストなしでメディアを投稿する前に確認ダイアログを表示する setting_reduce_motion: アニメーションの動きを減らす setting_system_font_ui: システムのデフォルトフォントを使う setting_system_scrollbars_ui: システムのデフォルトのスクロールバーを使う diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index f390d42132c615..ff041b257b43ad 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -104,6 +104,7 @@ kab: featured_tag: name: Ahacṭag form_admin_settings: + app_icon: Tignit n usnas custom_css: CSS udmawan profile_directory: Rmed akaram n imaγnuten site_contact_email: Imayl n unermas diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index b42fdc86f5f4fc..bbfda8c5fc94b1 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -3,6 +3,7 @@ nn: simple_form: hints: account: + attribution_domains: Ein per line. Vernar mot falske krediteringar. discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk. display_name: Ditt fulle namn eller ditt tøysenamn. fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. @@ -155,6 +156,7 @@ nn: url: Kvar hendingar skal sendast labels: account: + attribution_domains: Nettstader som har lov å kreditera deg discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar fields: name: Merkelapp diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 500fb4c30e0292..31bd7b2d6f0622 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -3,6 +3,7 @@ pt-BR: simple_form: hints: 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. display_name: Seu nome completo ou apelido. 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. tag: 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: + 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 + 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: 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. @@ -146,6 +156,7 @@ pt-BR: url: Aonde os eventos serão enviados labels: account: + attribution_domains: Sites autorizados a creditar você. discoverable: Destacar perfil e publicações nos algoritmos de descoberta fields: name: Rótulo @@ -222,6 +233,7 @@ pt-BR: setting_display_media_show_all: Mostrar tudo setting_expand_spoilers: Sempre expandir toots com Aviso de Conteúdo 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_system_font_ui: Usar fonte padrão do sistema setting_system_scrollbars_ui: Usar barra de rolagem padrão do sistema @@ -319,6 +331,17 @@ pt-BR: name: Hashtag trendable: Permitir que esta hashtag fique em alta 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: role: Cargo time_zone: Fuso horário diff --git a/config/locales/sk.yml b/config/locales/sk.yml index afc77db5637077..0ee3ccd9aa6dbc 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -246,6 +246,7 @@ sk: 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_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_status_html: "%{name} zmazal/a príspevok od %{target}" destroy_unavailable_domain_html: "%{name} znova spustil/a doručovanie pre doménu %{target}" diff --git a/spec/controllers/admin/accounts_controller_spec.rb b/spec/controllers/admin/accounts_controller_spec.rb index 72ca2275cf41a0..2ec3bca746c19c 100644 --- a/spec/controllers/admin/accounts_controller_spec.rb +++ b/spec/controllers/admin/accounts_controller_spec.rb @@ -59,16 +59,15 @@ def accounts_table_rows let(:account) { Fabricate(:account) } it 'includes moderation notes' do - note1 = Fabricate(:account_moderation_note, target_account: account) - note2 = 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, content: 'Note 2 remarks') get :show, params: { id: account.id } expect(response).to have_http_status(200) - moderation_notes = assigns(:moderation_notes).to_a - - expect(moderation_notes.size).to be 2 - expect(moderation_notes).to eq [note1, note2] + expect(response.body) + .to include(note1.content) + .and include(note2.content) end end diff --git a/spec/controllers/admin/base_controller_spec.rb b/spec/controllers/admin/base_controller_spec.rb index 6e78ccb3b156eb..d739b54644b40a 100644 --- a/spec/controllers/admin/base_controller_spec.rb +++ b/spec/controllers/admin/base_controller_spec.rb @@ -3,40 +3,54 @@ require 'rails_helper' RSpec.describe Admin::BaseController do + render_views + controller do def success authorize :dashboard, :index? - render 'admin/reports/show' + render html: '

success

', layout: true end end - it 'requires administrator or moderator' do - routes.draw { get 'success' => 'admin/base#success' } - sign_in(Fabricate(:user)) - get :success + before { routes.draw { get 'success' => 'admin/base#success' } } - expect(response).to have_http_status(403) - end + context 'when signed in as regular user' do + before { sign_in Fabricate(:user) } - it 'returns private cache control headers' do - routes.draw { get 'success' => 'admin/base#success' } - sign_in(Fabricate(:moderator_user)) - get :success + it 'responds with unauthorized' do + get :success - expect(response.headers['Cache-Control']).to include('private, no-store') + expect(response).to have_http_status(403) + end end - it 'renders admin layout as a moderator' do - routes.draw { get 'success' => 'admin/base#success' } - sign_in(Fabricate(:moderator_user)) - get :success - expect(response).to render_template layout: 'admin' + context 'when signed in as moderator' do + before { sign_in Fabricate(:moderator_user) } + + 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 - it 'renders admin layout as an admin' do - routes.draw { get 'success' => 'admin/base#success' } - sign_in(Fabricate(:admin_user)) - get :success - expect(response).to render_template layout: 'admin' + context 'when signed in as admin' do + before { sign_in Fabricate(:admin_user) } + + 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 diff --git a/spec/controllers/admin/instances_controller_spec.rb b/spec/controllers/admin/instances_controller_spec.rb index 83655bafa0a9c7..b6508eb38bf404 100644 --- a/spec/controllers/admin/instances_controller_spec.rb +++ b/spec/controllers/admin/instances_controller_spec.rb @@ -49,23 +49,11 @@ def instance_directory_links expect(response).to have_http_status(200) - instance = assigns(:instance) - expect(instance).to_not be_new_record + expect(response.body) + .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) - - 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 diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 4a6956cb095e1c..c852b16a69c9f9 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -223,8 +223,8 @@ end it 'renders two factor authentication page' do - expect(controller).to render_template('two_factor') - expect(controller).to render_template(partial: '_otp_authentication_form') + expect(response.body) + .to include(I18n.t('simple_form.hints.sessions.otp')) end end @@ -239,8 +239,8 @@ end it 'renders two factor authentication page' do - expect(controller).to render_template('two_factor') - expect(controller).to render_template(partial: '_otp_authentication_form') + expect(response.body) + .to include(I18n.t('simple_form.hints.sessions.otp')) end end @@ -250,8 +250,8 @@ end it 'renders two factor authentication page' do - expect(controller).to render_template('two_factor') - expect(controller).to render_template(partial: '_otp_authentication_form') + expect(response.body) + .to include(I18n.t('simple_form.hints.sessions.otp')) end end @@ -378,8 +378,8 @@ end it 'renders webauthn authentication page' do - expect(controller).to render_template('two_factor') - expect(controller).to render_template(partial: '_webauthn_form') + expect(response.body) + .to include(I18n.t('simple_form.title.sessions.webauthn')) end end @@ -389,8 +389,8 @@ end it 'renders webauthn authentication page' do - expect(controller).to render_template('two_factor') - expect(controller).to render_template(partial: '_webauthn_form') + expect(response.body) + .to include(I18n.t('simple_form.title.sessions.webauthn')) end end diff --git a/spec/controllers/concerns/challengable_concern_spec.rb b/spec/controllers/concerns/challengable_concern_spec.rb index 01f979ff4c9a10..823003c8ded89c 100644 --- a/spec/controllers/concerns/challengable_concern_spec.rb +++ b/spec/controllers/concerns/challengable_concern_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' RSpec.describe ChallengableConcern do + render_views + controller(ApplicationController) do include ChallengableConcern # rubocop:disable RSpec/DescribedClass @@ -85,29 +87,35 @@ def bar before { get :foo } 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 - - # See Auth::ChallengesControllerSpec end context 'with POST requests' do before { post :bar } 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 it 'accepts correct password' do 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 it 'rejects wrong password' do 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 diff --git a/spec/controllers/settings/featured_tags_controller_spec.rb b/spec/controllers/settings/featured_tags_controller_spec.rb deleted file mode 100644 index f414e818f5f8f7..00000000000000 --- a/spec/controllers/settings/featured_tags_controller_spec.rb +++ /dev/null @@ -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 diff --git a/spec/controllers/settings/migration/redirects_controller_spec.rb b/spec/controllers/settings/migration/redirects_controller_spec.rb deleted file mode 100644 index d853fe8ae64249..00000000000000 --- a/spec/controllers/settings/migration/redirects_controller_spec.rb +++ /dev/null @@ -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 diff --git a/spec/controllers/settings/privacy_controller_spec.rb b/spec/controllers/settings/privacy_controller_spec.rb deleted file mode 100644 index 59fd3421991b07..00000000000000 --- a/spec/controllers/settings/privacy_controller_spec.rb +++ /dev/null @@ -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 diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index e589693b17f179..9f45afe693372f 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -9,93 +9,6 @@ let(:account) { Fabricate(: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 let(:user) { Fabricate(:user) } @@ -275,206 +188,5 @@ 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 diff --git a/spec/fixtures/files/4096x4097.png b/spec/fixtures/files/4096x4097.png deleted file mode 100644 index d1110cc2df0a29..00000000000000 Binary files a/spec/fixtures/files/4096x4097.png and /dev/null differ diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index ad4cb9997d8aa1..477a58b5768381 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -37,10 +37,16 @@ content: '@bob lorem ipsum', published: 1.hour.ago.utc.iso8601, updated: 1.hour.ago.utc.iso8601, - tag: { - type: 'Mention', - href: ActivityPub::TagManager.instance.uri_for(follower), - }, + tag: [ + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(follower), + }, + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(follower), + }, + ], } end diff --git a/spec/requests/admin/instances_spec.rb b/spec/requests/admin/instances_spec.rb new file mode 100644 index 00000000000000..afb6602a22ba1a --- /dev/null +++ b/spec/requests/admin/instances_spec.rb @@ -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 diff --git a/spec/requests/settings/featured_tags_spec.rb b/spec/requests/settings/featured_tags_spec.rb index 2c7f907e80f1d9..26c4950accd33b 100644 --- a/spec/requests/settings/featured_tags_spec.rb +++ b/spec/requests/settings/featured_tags_spec.rb @@ -2,15 +2,23 @@ require 'rails_helper' -RSpec.describe 'Settings Aliases' do +RSpec.describe '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 - post settings_featured_tags_path(featured_tag: 'invalid') + it 'gracefully handles invalid nested params' do + post settings_featured_tags_path(featured_tag: 'invalid') - expect(response) - .to have_http_status(400) + expect(response) + .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 diff --git a/spec/requests/statuses_spec.rb b/spec/requests/statuses_spec.rb index f86d67d405a19f..e3bf15540a2a2e 100644 --- a/spec/requests/statuses_spec.rb +++ b/spec/requests/statuses_spec.rb @@ -45,6 +45,72 @@ .to redirect_to(original_status.url) 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 context 'when signed in' do @@ -63,5 +129,185 @@ 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 diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index caaca2fe7c6600..28b7653833d461 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -18,6 +18,7 @@ tag: [ { 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: bogus_mention }, ], } diff --git a/spec/system/admin/software_updates_spec.rb b/spec/system/admin/software_updates_spec.rb index f49c5a3c87c7c9..e62b6a8cfecc78 100644 --- a/spec/system/admin/software_updates_spec.rb +++ b/spec/system/admin/software_updates_spec.rb @@ -5,6 +5,7 @@ RSpec.describe 'finding software updates through the admin interface' 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: '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 end @@ -16,6 +17,7 @@ expect(page).to have_title(I18n.t('admin.software_updates.title')) expect(page).to have_content('99.99.99') + .and have_no_content('3.5.0') click_on I18n.t('admin.software_updates.release_notes') expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true) diff --git a/spec/system/settings/featured_tags_spec.rb b/spec/system/settings/featured_tags_spec.rb new file mode 100644 index 00000000000000..2460817f94e273 --- /dev/null +++ b/spec/system/settings/featured_tags_spec.rb @@ -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 diff --git a/spec/system/settings/migration/redirects_spec.rb b/spec/system/settings/migration/redirects_spec.rb new file mode 100644 index 00000000000000..b59be5ac1f910d --- /dev/null +++ b/spec/system/settings/migration/redirects_spec.rb @@ -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 diff --git a/spec/system/settings/privacy_spec.rb b/spec/system/settings/privacy_spec.rb new file mode 100644 index 00000000000000..9d9062ad2c9937 --- /dev/null +++ b/spec/system/settings/privacy_spec.rb @@ -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 diff --git a/yarn.lock b/yarn.lock index 5199443bf0edb1..f9c76ae11280d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -55,7 +55,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @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 resolution: "@babel/code-frame@npm:7.26.2" dependencies: @@ -66,46 +66,47 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/compat-data@npm:7.26.5" - checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.5, @babel/compat-data@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/compat-data@npm:7.26.8" + checksum: 10c0/66408a0388c3457fff1c2f6c3a061278dd7b3d2f0455ea29bb7b187fa52c60ae8b4054b3c0a184e21e45f0eaac63cf390737bc7504d1f4a088a6e7f652c068ca languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0": - version: 7.26.7 - resolution: "@babel/core@npm:7.26.7" + version: 7.26.8 + resolution: "@babel/core@npm:7.26.8" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@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-module-transforms": "npm:^7.26.0" "@babel/helpers": "npm:^7.26.7" - "@babel/parser": "npm:^7.26.7" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.26.7" - "@babel/types": "npm:^7.26.7" + "@babel/parser": "npm:^7.26.8" + "@babel/template": "npm:^7.26.8" + "@babel/traverse": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" + "@types/gensync": "npm:^1.0.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/fbd2cd9fc23280bdcaca556e558f715c0a42d940b9913c52582e8e3d24e391d269cb8a9cd6589172593983569021c379e28bba6b19ea2ee08674f6068c210a9d + checksum: 10c0/fafbd083ed3f79973ae2a11a69eee3f13b3226a1d4907abc2c6f2fea21adf4a7c20e00fe0eaa33f44a3666eeaf414edb07460ec031d478ee5f6088eb38b2a011 languageName: node linkType: hard -"@babel/generator@npm:^7.26.5, @babel/generator@npm:^7.7.2": - version: 7.26.5 - resolution: "@babel/generator@npm:7.26.5" +"@babel/generator@npm:^7.26.8, @babel/generator@npm:^7.7.2": + version: 7.26.8 + resolution: "@babel/generator@npm:7.26.8" dependencies: - "@babel/parser": "npm:^7.26.5" - "@babel/types": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 + checksum: 10c0/9467f197d285ac315d1fa419138d36a3bfd69ca4baf763e914acab12f5f38e5d231497f6528e80613b28e73bb28c66fcc50b250b1f277b1a4d38ac14b03e9674 languageName: node linkType: hard @@ -171,9 +172,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": - version: 0.6.2 - resolution: "@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.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3" dependencies: "@babel/helper-compilation-targets": "npm:^7.22.6" "@babel/helper-plugin-utils": "npm:^7.22.5" @@ -182,7 +183,7 @@ __metadata: resolve: "npm:^1.14.2" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/f777fe0ee1e467fdaaac059c39ed203bdc94ef2465fb873316e9e1acfc511a276263724b061e3b0af2f6d7ad3ff174f2bb368fde236a860e0f650fda43d7e022 + checksum: 10c0/4320e3527645e98b6a0d5626fef815680e3b2b03ec36045de5e909b0f01546ab3674e96f50bf3bc8413f8c9037e5ee1a5f560ebdf8210426dad1c2c03c96184a languageName: node linkType: hard @@ -313,14 +314,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.5, @babel/parser@npm:^7.26.7": - version: 7.26.7 - resolution: "@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.8 + resolution: "@babel/parser@npm:7.26.8" dependencies: - "@babel/types": "npm:^7.26.7" + "@babel/types": "npm:^7.26.8" bin: parser: ./bin/babel-parser.js - checksum: 10c0/dcb08a4f2878ece33caffefe43b71488d753324bae7ca58d64bca3bc4af34dcfa1b58abdf9972516d76af760fceb25bb9294ca33461d56b31c5059ccfe32001f + checksum: 10c0/da04f26bae732a5b6790775a736b58c7876c28e62203c5097f043fd7273ef6debe5bfd7a4e670a6819f4549b215c7b9762c6358e44797b3c4d733defc8290781 languageName: node linkType: hard @@ -591,16 +592,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" +"@babel/plugin-transform-async-generator-functions@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8" 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/traverse": "npm:^7.25.9" + "@babel/traverse": "npm:^7.26.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e3fcb9fc3d6ab6cbd4fcd956b48c17b5e92fe177553df266ffcd2b2c1f2f758b893e51b638e77ed867941e0436487d2b8b505908d615c41799241699b520dec6 + checksum: 10c0/f6fefce963fe2e6268dde1958975d7adbce65fba94ca6f4bc554c90da03104ad1dd2e66d03bc0462da46868498428646e30b03a218ef0e5a84bfc87a7e375cec languageName: node linkType: hard @@ -1137,18 +1138,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.25.9 - resolution: "@babel/plugin-transform-runtime@npm:7.25.9" + version: 7.26.8 + resolution: "@babel/plugin-transform-runtime@npm:7.26.8" dependencies: "@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-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/888a4998ba0a2313de347954c9a8dfeccbff0633c69d33aee385b8878eba2b429dbfb00c3cc04f6bca454b9be8afa01ebbd73defb7fbbb6e2d3086205c07758b + checksum: 10c0/e206206fee262d2200763e6c427b27ca8a7a40a967dfe52f984f07a225952be0990fcce0acae6cee63fe92f5cadc94bb336fae2f3d687f0f2fcd2dadaf33029a languageName: node linkType: hard @@ -1186,14 +1187,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" +"@babel/plugin-transform-template-literals@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/plugin-transform-template-literals@npm:7.26.8" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.26.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5144da6036807bbd4e9d2a8b92ae67a759543929f34f4db9b463448a77298f4a40bf1e92e582db208fe08ee116224806a3bd0bed75d9da404fc2c0af9e6da540 + checksum: 10c0/205a938ded9554857a604416d369023a961334b6c20943bd861b45f0e5dbbeca1cf6fda1c2049126e38a0d18865993433fdc78eae3028e94836b3b643c08ba0d languageName: node linkType: hard @@ -1271,10 +1272,10 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.26.7 - resolution: "@babel/preset-env@npm:7.26.7" + version: 7.26.8 + resolution: "@babel/preset-env@npm:7.26.8" 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-plugin-utils": "npm:^7.26.5" "@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-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-generator-functions": "npm:^7.26.8" "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" "@babel/plugin-transform-block-scoped-functions": "npm:^7.26.5" "@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-spread": "npm:^7.25.9" "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" - "@babel/plugin-transform-template-literals": "npm:^7.25.9" + "@babel/plugin-transform-template-literals": "npm:^7.26.8" "@babel/plugin-transform-typeof-symbol": "npm:^7.26.7" "@babel/plugin-transform-unicode-escapes": "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/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.6" + babel-plugin-polyfill-corejs3: "npm:^0.11.0" 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" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/77d2e46a4f133768c5c8a6b3fec49a7c85c6baec601991e63458921e889ff93911f447723c3a99a6a471ca654ea6dc2aaa7ed690f3e518ee80cea7820ab80ce3 + checksum: 10c0/314ab8c6173d1f14e40cf22e1e646c429acfd45195e2ddbadca81956aa2a670e37e4446658db65f1a669f82ef115a4a018f78448bc10789cacdaf4e995680db5 languageName: node linkType: hard @@ -1411,39 +1412,39 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.8, @babel/template@npm:^7.3.3": + version: 7.26.8 + 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 + "@babel/code-frame": "npm:^7.26.2" + "@babel/parser": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" + checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213 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" +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/traverse@npm:7.26.8" dependencies: "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.5" - "@babel/parser": "npm:^7.26.7" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.7" + "@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/b23a36ce40d2e4970741431c45d4f92e3f4c2895c0a421456516b2729bd9e17278846e01ee3d9039b0adf5fc5a071768061c17fcad040e74a5c3e39517449d5b + 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.5, @babel/types@npm:^7.26.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.26.7 - resolution: "@babel/types@npm:7.26.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.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: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/7810a2bca97b13c253f07a0863a628d33dbe76ee3c163367f24be93bfaf4c8c0a325f73208abaaa050a6b36059efc2950c2e4b71fb109c0f07fa62221d8473d4 + checksum: 10c0/cd41ea47bb3d7baf2b3bf5e70e9c3a16f2eab699fab8575b2b31a7b1cb64166eb52c97124313863dde0581747bfc7a1810c838ad60b5b7ad1897d8004c7b95a9 languageName: node linkType: hard @@ -2258,15 +2259,15 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.3.2": - version: 2.3.2 - resolution: "@formatjs/ecma402-abstract@npm:2.3.2" +"@formatjs/ecma402-abstract@npm:2.3.3": + version: 2.3.3 + resolution: "@formatjs/ecma402-abstract@npm:2.3.3" dependencies: "@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" tslib: "npm:2" - checksum: 10c0/364e9e7de974fed976e0e8142a0f888ee0af4a11a61899115e5761ed933e7c1f16379b7b54a01524fd3c5d58bf08b71308237ea969cd54889eaf7bb2d30ec776 + checksum: 10c0/63de990c380a1800bc54d97c4aa13a88a92e73b1680f0f561d03f9bf3e23289b7aafd1a92037527c285bd587a44e20504258ac2cbd4564a4138ce2b4612c1495 languageName: node linkType: hard @@ -2288,14 +2289,14 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.11.0": - version: 2.11.0 - resolution: "@formatjs/icu-messageformat-parser@npm:2.11.0" +"@formatjs/icu-messageformat-parser@npm:2.11.1": + version: 2.11.1 + resolution: "@formatjs/icu-messageformat-parser@npm:2.11.1" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" - "@formatjs/icu-skeleton-parser": "npm:1.8.12" + "@formatjs/ecma402-abstract": "npm:2.3.3" + "@formatjs/icu-skeleton-parser": "npm:1.8.13" tslib: "npm:2" - checksum: 10c0/9ad43847cb4a5c13895af606c634dcf2ec034d484cbbce6566746b60920643f33cbc5e2e3fd1efe21bcfdb555e1ee527e4518768001c3b36bf2e76c171e4049f + checksum: 10c0/2e4106d564ede73cc52c97fc4270002f2460c3ded10715a095ec6765c48f951b1e9744cc55679abe046e24e4e22c345e738f7477c43d440d1d10a0235b12df37 languageName: node linkType: hard @@ -2310,13 +2311,13 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.12": - version: 1.8.12 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.12" +"@formatjs/icu-skeleton-parser@npm:1.8.13": + version: 1.8.13 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.13" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" + "@formatjs/ecma402-abstract": "npm:2.3.3" tslib: "npm:2" - checksum: 10c0/03e743aa09acb2137e37d03b98578fcbbc949d056b8c151763778e885d04d621e69c82f7656547f0532351d2a987bffac0a8c4c3d81186f47a28047ba64385e2 + checksum: 10c0/eddea5b7c43745d05178211b25641319e054747e40b42ffaa93ae9940fd42e6f5654d12d42e6998b91b4de4b67a24e3ed779a37394262ec1dd46e693c166729a languageName: node linkType: hard @@ -2330,15 +2331,6 @@ __metadata: languageName: node 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": version: 0.5.5 resolution: "@formatjs/intl-localematcher@npm:0.5.5" @@ -2348,33 +2340,42 @@ __metadata: languageName: node linkType: hard +"@formatjs/intl-localematcher@npm:0.6.0": + version: 0.6.0 + resolution: "@formatjs/intl-localematcher@npm:0.6.0" + dependencies: + tslib: "npm:2" + checksum: 10c0/90238e633426ff7237ab2bbe017be044fb2fb185a8d59a0652096ddab9cb1ddf64106d58fafd711ea19c4d3455bd966516ab93574ac3b169d9af2325875fae59 + languageName: node + linkType: hard + "@formatjs/intl-pluralrules@npm:^5.2.2": - version: 5.4.2 - resolution: "@formatjs/intl-pluralrules@npm:5.4.2" + version: 5.4.3 + resolution: "@formatjs/intl-pluralrules@npm:5.4.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" - "@formatjs/intl-localematcher": "npm:0.5.10" + "@formatjs/ecma402-abstract": "npm:2.3.3" + "@formatjs/intl-localematcher": "npm:0.6.0" decimal.js: "npm:10" tslib: "npm:2" - checksum: 10c0/0ecb9da19084d7a15e636362c206c7ee14297ad365e3e63ea53c82c8442d02cd4dcf8a0da65af9b0f835b32f0e8c3d43407d6ee0a0d7974c3044c92574b49686 + checksum: 10c0/ffebb0fa56e0a8452a5e948a0ae38902daa138fc5c7638732697fb1648d8fb4d42883dbff7531e09468a498a85ef9cb4f443f916544a683f8d4c18d2fca8b69a languageName: node linkType: hard -"@formatjs/intl@npm:3.1.3": - version: 3.1.3 - resolution: "@formatjs/intl@npm:3.1.3" +"@formatjs/intl@npm:3.1.4": + version: 3.1.4 + resolution: "@formatjs/intl@npm:3.1.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" + "@formatjs/ecma402-abstract": "npm:2.3.3" "@formatjs/fast-memoize": "npm:2.2.6" - "@formatjs/icu-messageformat-parser": "npm:2.11.0" - intl-messageformat: "npm:10.7.14" + "@formatjs/icu-messageformat-parser": "npm:2.11.1" + intl-messageformat: "npm:10.7.15" tslib: "npm:2" peerDependencies: typescript: 5 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/1f9fce896b69dd3ff84221d2d18fbd57f8968c1d0691e44d33ac949d3d6f4e86f9c3075e4da870fb0b189d4952ec5e8bc7375558fa85c37bcb76a73aeb6f9f52 + checksum: 10c0/c05828cf510b3e7930e7d334662142d4bbe603eb8b1bcb2eb5bc81856501c8ae62c89d43f6c54c9605d2a538fc8b361822880e5d92cea621c95e8d1915f870c5 languageName: node linkType: hard @@ -2398,11 +2399,11 @@ __metadata: languageName: node linkType: hard -"@formatjs/ts-transformer@npm:3.13.31": - version: 3.13.31 - resolution: "@formatjs/ts-transformer@npm:3.13.31" +"@formatjs/ts-transformer@npm:3.13.32": + version: 3.13.32 + resolution: "@formatjs/ts-transformer@npm:3.13.32" dependencies: - "@formatjs/icu-messageformat-parser": "npm:2.11.0" + "@formatjs/icu-messageformat-parser": "npm:2.11.1" "@types/json-stable-stringify": "npm:1" "@types/node": "npm:14 || 16 || 17 || 18 || 20 || 22" chalk: "npm:4" @@ -2414,7 +2415,7 @@ __metadata: peerDependenciesMeta: ts-jest: optional: true - checksum: 10c0/bfd7a41203c2b1691d883b3c306f3ae413b94c4875dec75df2be0e62da22625f673e41ecdc3257be40fe4a5b22a311365c2462d00a98f9bac59f00488543add0 + checksum: 10c0/f51102e5427f9e22ed8dd4094e0347fa7bf96b99a97c5b48eb23bb11cd319f653c829073040884d0c6381136e227a1d0d2b7b2ac3ec0dba6ed9e26f454b61254 languageName: node linkType: hard @@ -3776,6 +3777,13 @@ __metadata: languageName: node 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": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -5310,21 +5318,21 @@ __metadata: linkType: hard "babel-plugin-formatjs@npm:^10.5.1": - version: 10.5.34 - resolution: "babel-plugin-formatjs@npm:10.5.34" + version: 10.5.35 + resolution: "babel-plugin-formatjs@npm:10.5.35" dependencies: "@babel/core": "npm:^7.25.0" "@babel/helper-plugin-utils": "npm:^7.25.0" "@babel/plugin-syntax-jsx": "npm:^7.25.0" "@babel/traverse": "npm:^7.25.0" "@babel/types": "npm:^7.25.0" - "@formatjs/icu-messageformat-parser": "npm:2.11.0" - "@formatjs/ts-transformer": "npm:3.13.31" + "@formatjs/icu-messageformat-parser": "npm:2.11.1" + "@formatjs/ts-transformer": "npm:3.13.32" "@types/babel__core": "npm:^7.20.5" "@types/babel__helper-plugin-utils": "npm:^7.10.3" "@types/babel__traverse": "npm:^7.20.6" tslib: "npm:2" - checksum: 10c0/6e6c67db41044427a7f182e7c18a8519e5aca96645de094244b332cb8c82ed498c56a4634e4e4ed1a4ef85c8e996669ef5bddd63ee9c45d6e512cbbf782af2a2 + checksum: 10c0/2b47105f5e5b894c921fd60bafbe78d1286eec7aae499892dbc95dbd043dd38c8fe49ba28f1529321c3fea263d1fcfe8b5803116288c5bbffb35c123fc3fc2e5 languageName: node linkType: hard @@ -5415,6 +5423,18 @@ __metadata: languageName: node 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": version: 0.6.1 resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1" @@ -5754,17 +5774,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": - version: 4.24.0 - resolution: "browserslist@npm:4.24.0" +"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.24.3": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" dependencies: - caniuse-lite: "npm:^1.0.30001663" - electron-to-chromium: "npm:^1.5.28" - node-releases: "npm:^2.0.18" - update-browserslist-db: "npm:^1.1.0" + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" bin: browserslist: cli.js - checksum: 10c0/95e76ad522753c4c470427f6e3c8a4bb5478ff448841e22b3d3e53f89ecaf17b6984666d6c7e715c370f1e7fa0cf684f42e34e554236a8b2fab38ea76b9e4c52 + checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 languageName: node linkType: hard @@ -5956,10 +5976,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001663": - version: 1.0.30001666 - resolution: "caniuse-lite@npm:1.0.30001666" - checksum: 10c0/2d49e9be676233c24717f12aad3d01b3e5f902b457fe1deefaa8d82e64786788a8f79381ae437c61b50e15c9aea8aeb59871b1d54cb4c28b9190d53d292e2339 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001699 + resolution: "caniuse-lite@npm:1.0.30001699" + checksum: 10c0/e87b3a0602c3124131f6a21f1eb262378e17a2ee3089e3c472ac8b9caa85cf7d6a219655379302c29c6f10a74051f2a712639d7f98ee0444c73fefcbaf25d519 languageName: node linkType: hard @@ -6462,12 +6482,12 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1": - version: 3.38.1 - resolution: "core-js-compat@npm:3.38.1" +"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.40.0": + version: 3.40.0 + resolution: "core-js-compat@npm:3.40.0" dependencies: - browserslist: "npm:^4.23.3" - checksum: 10c0/d8bc8a35591fc5fbf3e376d793f298ec41eb452619c7ef9de4ea59b74be06e9fda799e0dcbf9ba59880dae87e3b41fb191d744ffc988315642a1272bb9442b31 + browserslist: "npm:^4.24.3" + checksum: 10c0/44f6e88726fe266a5be9581a79766800478a8d5c492885f2d4c2a4e2babd9b06bc1689d5340d3a61ae7332f990aff2e83b6203ff8773137a627cfedfbeefabeb languageName: node linkType: hard @@ -7518,10 +7538,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.28": - version: 1.5.31 - resolution: "electron-to-chromium@npm:1.5.31" - checksum: 10c0/e8aecd88c4c6d50a9d459b4b222865b855bab8f1b52e82913804e18b7884f2887bd76c61b3aa08c2ccbdcda098dd8486443f75bf770f0138f21dd9e63548fca7 +"electron-to-chromium@npm:^1.5.73": + version: 1.5.96 + resolution: "electron-to-chromium@npm:1.5.96" + checksum: 10c0/827d480f35abe8b0d01a4311fc3180089a406edfcd016d8433712b03ec6e56618ad6f9757e35403092de5c2e163372f9ec90eb8e8334f6f26119a21b568d9bf9 languageName: node linkType: hard @@ -7858,10 +7878,10 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard @@ -9864,15 +9884,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.7.14, intl-messageformat@npm:^10.3.5": - version: 10.7.14 - resolution: "intl-messageformat@npm:10.7.14" +"intl-messageformat@npm:10.7.15, intl-messageformat@npm:^10.3.5": + version: 10.7.15 + resolution: "intl-messageformat@npm:10.7.15" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" + "@formatjs/ecma402-abstract": "npm:2.3.3" "@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" - checksum: 10c0/914c11118c47bb7d0163a7d54afebf52ae4fe9b250bba609b5db4c802a34f8bf758edbbc8c58094203205faf76948c7112399addb32e9b36e40483c4cf7c1cb7 + checksum: 10c0/5759cd38718b7e4874fd6eb5e759e920227f993bdf17d71cd7474919098aafc13c8bbc63f5ccb2bafe13093f3a519fd7a03a47efc84bb3e9fbf9f25f88a408c9 languageName: node linkType: hard @@ -12423,10 +12443,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa languageName: node linkType: hard @@ -13097,19 +13117,19 @@ __metadata: languageName: node linkType: hard -"pg-pool@npm:^3.7.0": - version: 3.7.0 - resolution: "pg-pool@npm:3.7.0" +"pg-pool@npm:^3.7.1": + version: 3.7.1 + resolution: "pg-pool@npm:3.7.1" peerDependencies: pg: ">=8.0" - checksum: 10c0/9128673cf941f288c0cb1a74ca959a9b4f6075ef73b2cc7dece5d4db3dd7043784869e7c12bce2e69ca0df22132a419cc45c2050b4373632856fe8bae9eb94b5 + checksum: 10c0/65bff013102684774f4cfdffbfe0a2b0614252234561d391608f7fd915477e44f5fd0e1968ecc2f42032dcf8bac241d2f724c4f3df90384567d22df37dd3b6ba languageName: node linkType: hard -"pg-protocol@npm:*, pg-protocol@npm:^1.7.0": - version: 1.7.0 - resolution: "pg-protocol@npm:1.7.0" - checksum: 10c0/c4af854d9b843c808231c0040fed89f2b9101006157df8da2bb2f62a7dde702de748d852228dc22df41cc7ffddfb526af3bcb34b278b581e9f76a060789186c1 +"pg-protocol@npm:*, pg-protocol@npm:^1.7.1": + version: 1.7.1 + resolution: "pg-protocol@npm:1.7.1" + checksum: 10c0/3168d407ddc4c0fa2403eb9b49205399d4bc53dadbafdfcc5d25fa61b860a31c25df25704cf14c8140c80f0a41061d586e5fd5ce9bf800dfb91e9ce810bc2c37 languageName: node linkType: hard @@ -13142,13 +13162,13 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.13.1 - resolution: "pg@npm:8.13.1" + version: 8.13.2 + resolution: "pg@npm:8.13.2" dependencies: pg-cloudflare: "npm:^1.1.1" pg-connection-string: "npm:^2.7.0" - pg-pool: "npm:^3.7.0" - pg-protocol: "npm:^1.7.0" + pg-pool: "npm:^3.7.1" + pg-protocol: "npm:^1.7.1" pg-types: "npm:^2.1.0" pgpass: "npm:1.x" peerDependencies: @@ -13159,7 +13179,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/c13bc661cbdb115337bc8519254836faf4bd79106dfd7ed588c8ece8c8b2dd3b7376bfec9a9a2f7646fa095b0b310cec77a83c3ba2ea4872331446eb93fd9055 + checksum: 10c0/955615fc6db2849e047472b3a314ce6b70ecdef2de1ecdbb663ac2cd39f6e9ae25da5de4727baceb0b6e439075e6ad0ac8548fd150e38d9cda6514c43c840a31 languageName: node linkType: hard @@ -13172,7 +13192,7 @@ __metadata: languageName: node 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 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 @@ -14137,13 +14157,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.49": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" + version: 8.5.2 + resolution: "postcss@npm:8.5.2" dependencies: nanoid: "npm:^3.3.8" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 + checksum: 10c0/3044d49bc725029ab62292e8bf9849741251b95f3b754e191bf8b4025414d40ec3b4ac05c5a563d4b50060b5c8e96683eb4d783d8d8fa3867eb7b763cbe66127 languageName: node linkType: hard @@ -14587,16 +14607,16 @@ __metadata: linkType: hard "react-intl@npm:^7.0.0": - version: 7.1.5 - resolution: "react-intl@npm:7.1.5" + version: 7.1.6 + resolution: "react-intl@npm:7.1.6" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" - "@formatjs/icu-messageformat-parser": "npm:2.11.0" - "@formatjs/intl": "npm:3.1.3" + "@formatjs/ecma402-abstract": "npm:2.3.3" + "@formatjs/icu-messageformat-parser": "npm:2.11.1" + "@formatjs/intl": "npm:3.1.4" "@types/hoist-non-react-statics": "npm:3" "@types/react": "npm:16 || 17 || 18 || 19" hoist-non-react-statics: "npm:3" - intl-messageformat: "npm:10.7.14" + intl-messageformat: "npm:10.7.15" tslib: "npm:2" peerDependencies: react: ^16.6.0 || 17 || 18 || 19 @@ -14604,7 +14624,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/9d8d5afae16d26466f82fc1c0b8c4afd7559a8faa5b3ef31983a0af540b1b225fa89208b48bf9ec83056c0a27f2972fb86f2717422f788efdc819fb0e0846134 + checksum: 10c0/6ccb6ba40e30079822994eb36f76c8631d5f31f5826f1fa62b00371be6efd1481b094285f7f1f672c01705dfe9b36b91ce89df35f61d7bb293e5709d7f07d1b7 languageName: node linkType: hard @@ -17596,17 +17616,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6 languageName: node linkType: hard