diff --git a/.nvmrc b/.nvmrc index fb0a135541..744ca17ec0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.13 +22.14 diff --git a/Gemfile.lock b/Gemfile.lock index 9d0928354b..520bfbc8cc 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 d7b114a100..c9be97eb71 100644 --- a/app/controllers/admin/software_updates_controller.rb +++ b/app/controllers/admin/software_updates_controller.rb @@ -6,7 +6,7 @@ module Admin 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 1d8ee43507..ec2256aa9c 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -46,6 +46,6 @@ module WebAppControllerConcern 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 18c92dfb7d..df2a0226f8 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 8e1d6451b0..e37f98aab2 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 2afd3c72e1..9d4e2177c5 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 b838fccdd6..9fe6281af0 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 b298d4221c..6c6325b9f1 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 818670742a..85f053111d 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 a60087890b..a71344ffe6 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 c68ff38a7c..7bdf138d92 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": "Назіральнік", @@ -211,6 +212,7 @@ "confirmations.logout.confirm": "Выйсці", "confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?", "confirmations.logout.title": "Выйсці?", + "confirmations.missing_alt_text.title": "Дадаць апісаньне?", "confirmations.mute.confirm": "Ігнараваць", "confirmations.redraft.confirm": "Выдаліць і перапісаць", "confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.", @@ -407,6 +409,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 d90934b6c9..c942b67e25 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 c9a22ff8f1..1a7930bf8e 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 9ec4c4e8a6..ac0ca0d6a0 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -1,5 +1,5 @@ { - "about.blocks": "Administritaj serviloj", + "about.blocks": "Reguligitaj serviloj", "about.contact": "Kontakto:", "about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Kialo ne disponeblas", @@ -26,7 +26,7 @@ "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti la profilon", "account.enable_notifications": "Sciigu min kiam @{name} afiŝos", - "account.endorse": "Rekomendi ĉe via profilo", + "account.endorse": "Prezenti ĉe via profilo", "account.featured_tags.last_status_at": "Lasta afîŝo je {date}", "account.featured_tags.last_status_never": "Neniu afiŝo", "account.featured_tags.title": "Rekomendataj kradvortoj de {name}", @@ -219,8 +219,8 @@ "confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?", "confirmations.logout.title": "Ĉu elsaluti?", "confirmations.missing_alt_text.confirm": "Aldoni alttekston", - "confirmations.missing_alt_text.message": "Via afiŝo enhavas amaskomunikilaron sen altteksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.", - "confirmations.missing_alt_text.secondary": "Afiŝu ĉiukaze", + "confirmations.missing_alt_text.message": "Via afiŝo enhavas aŭdvidaĵon sen anstataŭa teksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.", + "confirmations.missing_alt_text.secondary": "Afiŝi ĉiuokaze", "confirmations.missing_alt_text.title": "Ĉu aldoni alttekston?", "confirmations.mute.confirm": "Silentigi", "confirmations.redraft.confirm": "Forigi kaj reskribi", @@ -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 1f4d4546e9..899a85e2cc 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 ddd08c44b3..41edbf6800 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 bd86e984aa..7f73874e63 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 8cdfe6df19..53a714d7a5 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 13a11d2999..f32399e832 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 6fe1330d6c..696f9fbed8 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 95d173dca5..b9ee243705 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 f31de0151d..e48b02aaf3 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -11,7 +11,7 @@ "about.not_available": "Ta informacja nie została udostępniona na tym serwerze.", "about.powered_by": "Zdecentralizowane media społecznościowe napędzane przez {mastodon}", "about.rules": "Regulamin serwera", - "account.account_note_header": "Twoja notatka", + "account.account_note_header": "Notatka", "account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.badges.bot": "Bot", "account.badges.group": "Grupa", @@ -19,9 +19,9 @@ "account.block_domain": "Blokuj wszystko z {domain}", "account.block_short": "Zablokuj", "account.blocked": "Zablokowany(-a)", - "account.cancel_follow_request": "Wycofaj żądanie obserwowania", - "account.copy": "Skopiuj odnośnik do profilu", - "account.direct": "Prywatna wzmianka @{name}", + "account.cancel_follow_request": "Nie obserwuj", + "account.copy": "Skopiuj link do profilu", + "account.direct": "Napisz bezpośrednio do @{name}", "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", @@ -59,39 +59,39 @@ "account.posts_with_replies": "Wpisy i odpowiedzi", "account.report": "Zgłoś @{name}", "account.requested": "Oczekująca prośba, kliknij aby anulować", - "account.requested_follow": "{name} chce zaobserwować twój profil", + "account.requested_follow": "{name} chce cię zaobserwować", "account.share": "Udostępnij profil @{name}", "account.show_reblogs": "Pokazuj podbicia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Odblokuj domenę {domain}", "account.unblock_short": "Odblokuj", - "account.unendorse": "Przestań polecać", - "account.unfollow": "Przestań obserwować", - "account.unmute": "Cofnij wyciszenie @{name}", - "account.unmute_notifications_short": "Wyłącz wyciszenie powiadomień", - "account.unmute_short": "Włącz dźwięki", - "account_note.placeholder": "Naciśnij aby dodać notatkę", + "account.unendorse": "Nie wyświetlaj w profilu", + "account.unfollow": "Nie obserwuj", + "account.unmute": "Nie wyciszaj @{name}", + "account.unmute_notifications_short": "Nie wyciszaj powiadomień", + "account.unmute_short": "Nie wyciszaj", + "account_note.placeholder": "Kliknij, aby dodać notatkę", "admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników po dniach od rejestracji", "admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników po miesiącach od rejestracji", "admin.dashboard.retention.average": "Średnia", "admin.dashboard.retention.cohort": "Miesiąc rejestracji", "admin.dashboard.retention.cohort_size": "Nowi użytkownicy", - "admin.impact_report.instance_accounts": "Usuniętych profili kont", + "admin.impact_report.instance_accounts": "Profile kont, które zostaną usunięte", "admin.impact_report.instance_followers": "Obserwujący, których straciliby nasi użytkownicy", "admin.impact_report.instance_follows": "Obserwujący, których straciliby ich użytkownicy", - "admin.impact_report.title": "Podsumowanie wpływu", + "admin.impact_report.title": "Podsumowanie zmian", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczenie liczby zapytań", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.title": "Ups!", "alt_text_badge.title": "Tekst alternatywny", "alt_text_modal.add_alt_text": "Dodaj tekst alternatywny", - "alt_text_modal.add_text_from_image": "Dodaj tekst z obrazu", + "alt_text_modal.add_text_from_image": "Dodaj tekst ze zdjęcia", "alt_text_modal.cancel": "Anuluj", "alt_text_modal.change_thumbnail": "Zmień miniaturę", - "alt_text_modal.describe_for_people_with_hearing_impairments": "Opisz to dla osób z wadą słuchu…", - "alt_text_modal.describe_for_people_with_visual_impairments": "Opisz to dla osób z wadą wzroku…", + "alt_text_modal.describe_for_people_with_hearing_impairments": "Opisz to dla osób niedosłyszących…", + "alt_text_modal.describe_for_people_with_visual_impairments": "Opisz to dla osób niedowidzących…", "alt_text_modal.done": "Gotowe", "announcement.announcement": "Ogłoszenie", "annual_report.summary.archetype.booster": "Łowca treści", @@ -102,41 +102,41 @@ "annual_report.summary.followers.followers": "obserwujących", "annual_report.summary.followers.total": "łącznie {count}", "annual_report.summary.here_it_is": "Oto przegląd Twojego {year} roku:", - "annual_report.summary.highlighted_post.by_favourites": "najbardziej ulubiony wpis", - "annual_report.summary.highlighted_post.by_reblogs": "najbardziej promowany wpis", - "annual_report.summary.highlighted_post.by_replies": "wpis z największą liczbą odpowiedzi", + "annual_report.summary.highlighted_post.by_favourites": "najbardziej lubiany wpis", + "annual_report.summary.highlighted_post.by_reblogs": "najczęściej podbijany wpis", + "annual_report.summary.highlighted_post.by_replies": "wpis z największą liczbą komentarzy", "annual_report.summary.highlighted_post.possessive": "{name}", "annual_report.summary.most_used_app.most_used_app": "najczęściej używana aplikacja", "annual_report.summary.most_used_hashtag.most_used_hashtag": "najczęściej używany hashtag", "annual_report.summary.most_used_hashtag.none": "Brak", "annual_report.summary.new_posts.new_posts": "nowe wpisy", - "annual_report.summary.percentile.text": "Plasuje Cię w czołówce użytkowników {domain}.", + "annual_report.summary.percentile.text": "To plasuje cię w czołówce użytkowników {domain}.", "annual_report.summary.percentile.we_wont_tell_bernie": "Nie powiemy Berniemu.", "annual_report.summary.thanks": "Dziękujemy, że jesteś częścią Mastodona!", "attachments_list.unprocessed": "(nieprzetworzone)", "audio.hide": "Ukryj dźwięk", - "block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Zgodność nie jest jednak gwarantowana, bo niektóre serwery mogą inaczej obsługiwać blokowanie. Wpisy publiczne mogą być widoczne dla niezalogowanych użytkowników.", + "block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Nie jest to jednak gwarantowane, bo niektóre serwery mogą obsługiwać blokady w inny sposób. Publiczne wpisy mogą być nadal widoczne dla niezalogowanych użytkowników.", "block_modal.show_less": "Pokaż mniej", "block_modal.show_more": "Pokaż więcej", - "block_modal.they_cant_mention": "Użytkownik nie może Cię obserwować ani dodawać wzmianek o Tobie.", - "block_modal.they_cant_see_posts": "Użytkownik nie będzie widzieć Twoich wpisów, a Ty jego.", - "block_modal.they_will_know": "Użytkownik będzie wiedział, że jest zablokowany.", - "block_modal.title": "Zablokować użytkownika?", - "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", - "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", + "block_modal.they_cant_mention": "Nie może cię wzmiankować ani obserwować.", + "block_modal.they_cant_see_posts": "Nie zobaczycie wzajemnie swoich wpisów.", + "block_modal.they_will_know": "Zobaczy informację o blokadzie.", + "block_modal.title": "Zablokować?", + "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które zawierają wzmianki o tej osobie.", + "boost_modal.combo": "Możesz kliknąć {combo}, aby pominąć tę czynność następnym razem", "boost_modal.reblog": "Podbić wpis?", "boost_modal.undo_reblog": "Cofnąć podbicie?", "bundle_column_error.copy_stacktrace": "Skopiuj raport o błędzie", - "bundle_column_error.error.body": "Nie można zrenderować żądanej strony. Może to być spowodowane błędem w naszym kodzie lub problemami z kompatybilnością przeglądarki.", + "bundle_column_error.error.body": "Nie udało się wyświetlić tej strony. Może to być spowodowane błędem w naszym kodzie lub niezgodnością przeglądarki.", "bundle_column_error.error.title": "O nie!", - "bundle_column_error.network.body": "Wystąpił błąd podczas próby załadowania tej strony. Może to być spowodowane tymczasowym problemem z połączeniem z internetem lub serwerem.", + "bundle_column_error.network.body": "Wystąpił błąd podczas próby wczytania tej strony. Może to być spowodowane tymczasowym problemem z połączeniem internetowym lub serwerem.", "bundle_column_error.network.title": "Błąd sieci", "bundle_column_error.retry": "Spróbuj ponownie", "bundle_column_error.return": "Wróć do strony głównej", - "bundle_column_error.routing.body": "Żądana strona nie została znaleziona. Czy na pewno adres URL w pasku adresu jest poprawny?", + "bundle_column_error.routing.body": "Nie można odnaleźć tej strony. Czy URL w pasku adresu na pewno jest prawidłowy?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zamknij", - "bundle_modal_error.message": "Coś poszło nie tak podczas ładowania tego ekranu.", + "bundle_modal_error.message": "Coś poszło nie tak podczas wczytywania tego ekranu.", "bundle_modal_error.retry": "Spróbuj ponownie", "closed_registrations.other_server_instructions": "Ponieważ Mastodon jest zdecentralizowany, możesz założyć konto na innym serwerze i wciąż mieć możliwość wchodzenia w interakcję z tym serwerem.", "closed_registrations_modal.description": "Opcja tworzenia kont na {domain} jest aktualnie niedostępna, ale miej na uwadze to, że nie musisz mieć konta konkretnie na {domain} by używać Mastodona.", @@ -144,21 +144,21 @@ "closed_registrations_modal.preamble": "Mastodon jest zdecentralizowany, więc bez względu na to, gdzie się zarejestrujesz, będziesz w stanie obserwować i wchodzić w interakcje z innymi osobami na tym serwerze. Możesz nawet uruchomić własny serwer!", "closed_registrations_modal.title": "Rejestracja na Mastodonie", "column.about": "O serwerze", - "column.blocks": "Zablokowani użytkownicy", + "column.blocks": "Zablokowani", "column.bookmarks": "Zakładki", "column.community": "Lokalna oś czasu", "column.create_list": "Utwórz listę", - "column.direct": "Prywatne wzmianki", + "column.direct": "Wzmianki bezpośrednie", "column.directory": "Przeglądaj profile", - "column.domain_blocks": "Ukryte domeny", + "column.domain_blocks": "Zablokowane domeny", "column.edit_list": "Edytuj listę", "column.favourites": "Ulubione", - "column.firehose": "Kanały na żywo", + "column.firehose": "Aktualności", "column.follow_requests": "Prośby o obserwację", "column.home": "Strona główna", - "column.list_members": "Zarządzaj członkami listy", + "column.list_members": "Zarządzaj osobami na liście", "column.lists": "Listy", - "column.mutes": "Wyciszeni użytkownicy", + "column.mutes": "Wyciszeni", "column.notifications": "Powiadomienia", "column.pins": "Przypięte wpisy", "column.public": "Globalna oś czasu", @@ -168,33 +168,33 @@ "column_header.moveRight_settings": "Przesuń kolumnę w prawo", "column_header.pin": "Przypnij", "column_header.show_settings": "Pokaż ustawienia", - "column_header.unpin": "Cofnij przypięcie", + "column_header.unpin": "Odepnij", "column_search.cancel": "Anuluj", "column_subheading.settings": "Ustawienia", - "community.column_settings.local_only": "Tylko Lokalne", + "community.column_settings.local_only": "Tylko lokalne", "community.column_settings.media_only": "Tylko multimedia", - "community.column_settings.remote_only": "Tylko Zdalne", + "community.column_settings.remote_only": "Tylko zdalne", "compose.language.change": "Zmień język", "compose.language.search": "Szukaj języków...", - "compose.published.body": "Opublikowano post.", + "compose.published.body": "Wpis został opublikowany.", "compose.published.open": "Otwórz", - "compose.saved.body": "Post zapisany.", + "compose.saved.body": "Wpis został zapisany.", "compose_form.direct_message_warning_learn_more": "Dowiedz się więcej", - "compose_form.encryption_warning": "Posty na Mastodon nie są szyfrowane end-to-end. Nie udostępniaj żadnych wrażliwych informacji przez Mastodon.", - "compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hasztagami, ponieważ jest oznaczony jako niepubliczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hasztagów.", - "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię obserwuje, może wyświetlać Twoje wpisy przeznaczone tylko dla obserwujących.", + "compose_form.encryption_warning": "Wpisy na Mastodon nie są szyfrowane end-to-end. Nie udostępniaj żadnych poufnych informacji za pośrednictwem Mastodon.", + "compose_form.hashtag_warning": "Ten wpis nie będzie wyświetlany pod żadnym hashtagiem, bo nie jest publiczny. Tylko publiczne wpisy mogą być wyszukiwane po hashtagach.", + "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy może cię obserwować, aby zobaczyć twoje wpisy tylko dla obserwujących.", "compose_form.lock_disclaimer.lock": "zablokowane", - "compose_form.placeholder": "Co chodzi ci po głowie?", - "compose_form.poll.duration": "Czas trwania głosowania", - "compose_form.poll.multiple": "Wielokrotny wybór", + "compose_form.placeholder": "Co ci chodzi po głowie?", + "compose_form.poll.duration": "Czas trwania ankiety", + "compose_form.poll.multiple": "Możliwość wielokrotnego wyboru", "compose_form.poll.option_placeholder": "Opcja {number}", - "compose_form.poll.single": "Jednokrotny wybór", - "compose_form.poll.switch_to_multiple": "Pozwól na wybranie wielu opcji", - "compose_form.poll.switch_to_single": "Pozwól na wybranie tylko jednej opcji", + "compose_form.poll.single": "Maksymalnie jedna odpowiedź", + "compose_form.poll.switch_to_multiple": "Pozwól na zaznaczenie kilku odpowiedzi", + "compose_form.poll.switch_to_single": "Pozwól na zaznaczenie tylko jednej odpowiedzi", "compose_form.poll.type": "Styl", "compose_form.publish": "Opublikuj", - "compose_form.publish_form": "Opublikuj", - "compose_form.reply": "Odpowiedz", + "compose_form.publish_form": "Nowy wpis", + "compose_form.reply": "Skomentuj", "compose_form.save_changes": "Aktualizuj", "compose_form.spoiler.marked": "Usuń ostrzeżenie o treści", "compose_form.spoiler.unmarked": "Dodaj ostrzeżenie o treści", @@ -205,76 +205,79 @@ "confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?", "confirmations.delete.title": "Usunąć wpis?", "confirmations.delete_list.confirm": "Usuń", - "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?", + "confirmations.delete_list.message": "Czy na pewno chcesz trwale usunąć tę listę?", "confirmations.delete_list.title": "Usunąć listę?", "confirmations.discard_edit_media.confirm": "Odrzuć", "confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?", "confirmations.edit.confirm": "Edytuj", "confirmations.edit.message": "Edytowanie wpisu nadpisze wiadomość, którą obecnie piszesz. Czy na pewno chcesz to zrobić?", - "confirmations.edit.title": "Nadpisać wpis?", + "confirmations.edit.title": "Zastąpić wpis?", "confirmations.follow_to_list.confirm": "Zaobserwuj i dodaj do listy", - "confirmations.follow_to_list.message": "Musisz obserwować {name} by dodać to konto do listy.", - "confirmations.follow_to_list.title": "Zaobserwować użytkownika?", + "confirmations.follow_to_list.message": "Musisz obserwować {name}, aby dodać do listy.", + "confirmations.follow_to_list.title": "Zaobserwować?", "confirmations.logout.confirm": "Wyloguj", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.logout.title": "Wylogować?", - "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.confirm": "Dodaj opis pomocniczy", + "confirmations.missing_alt_text.message": "Twój wpis zawiera multimedia bez tekstu alternatywnego. Dodanie opisów pomaga zwiększyć dostępność tych treści dla większej liczby osób.", + "confirmations.missing_alt_text.secondary": "Opublikuj mimo to ", + "confirmations.missing_alt_text.title": "Dodać tekst pomocniczy?", "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.", - "confirmations.redraft.title": "Usunąć i przeredagować wpis?", - "confirmations.reply.confirm": "Odpowiedz", - "confirmations.reply.message": "W ten sposób utracisz wpis który obecnie tworzysz. Czy na pewno chcesz to zrobić?", - "confirmations.reply.title": "Nadpisać wpis?", - "confirmations.unfollow.confirm": "Przestań obserwować", - "confirmations.unfollow.message": "Czy na pewno zamierzasz przestać obserwować {name}?", - "confirmations.unfollow.title": "Przestać obserwować?", + "confirmations.redraft.confirm": "Usuń i popraw", + "confirmations.redraft.message": "Czy na pewno chcesz usunąć i poprawić ten wpis? Polubienia, podbicia i komentarze pierwotnego wpisu zostaną utracone.", + "confirmations.redraft.title": "Usunąć i poprawić wpis?", + "confirmations.reply.confirm": "Skomentuj", + "confirmations.reply.message": "W ten sposób utracisz wpis, który teraz tworzysz. Czy na pewno chcesz to zrobić?", + "confirmations.reply.title": "Zastąpić wpis?", + "confirmations.unfollow.confirm": "Nie obserwuj", + "confirmations.unfollow.message": "Czy na pewno nie chcesz obserwować {name}?", + "confirmations.unfollow.title": "Cofnąć obserwację?", "content_warning.hide": "Ukryj wpis", "content_warning.show": "Pokaż mimo to", - "content_warning.show_more": "Rozwiń", - "conversation.delete": "Usuń konwersację", + "content_warning.show_more": "Pokaż więcej", + "conversation.delete": "Usuń rozmowę", "conversation.mark_as_read": "Oznacz jako przeczytane", - "conversation.open": "Zobacz konwersację", + "conversation.open": "Zobacz rozmowę", "conversation.with": "Z {names}", "copy_icon_button.copied": "Skopiowano do schowka", "copypaste.copied": "Skopiowano", "copypaste.copy_to_clipboard": "Skopiuj do schowka", "directory.federated": "Ze znanego fediwersum", "directory.local": "Tylko z {domain}", - "directory.new_arrivals": "Nowości", - "directory.recently_active": "Ostatnio aktywne", + "directory.new_arrivals": "Nowo przybyli", + "directory.recently_active": "Ostatnio aktywni", "disabled_account_banner.account_settings": "Ustawienia konta", "disabled_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone.", - "dismissable_banner.community_timeline": "To są najnowsze wpisy publiczne od osób, które mają założone konta na {domain}.", - "dismissable_banner.dismiss": "Schowaj", - "dismissable_banner.explore_links": "Te wiadomości obecnie są komentowane przez osoby z tego serwera i pozostałych w fediwersum.", - "dismissable_banner.explore_statuses": "Obecnie te wpisy z tego serwera i pozostałych serwerów w fediwersum zyskują popularność na tym serwerze.", - "dismissable_banner.explore_tags": "Te hasztagi obecnie zyskują popularność wśród osób z tego serwera i pozostałych w fediwersum.", - "dismissable_banner.public_timeline": "Są to najnowsze publiczne wpisy osób w fediwersum, które obserwują ludzie w serwisie {domain}.", + "dismissable_banner.community_timeline": "To są najnowsze publiczne wpisy osób, które są na {domain}.", + "dismissable_banner.dismiss": "Odrzuć", + "dismissable_banner.explore_links": "To są dzisiejsze najpopularniejsze wiadomości w fediwerum. Aktualności publikowane przez więcej różnych osób znajdują się wyżej w rankingu.", + "dismissable_banner.explore_statuses": "Te wpisy z całego fediwersum zyskują dziś na popularności. Nowsze wpisy z większą liczbą podbić i polubień są wyżej w rankingu.", + "dismissable_banner.explore_tags": "Te hashtagi zyskują dziś na popularności w fediwersum. Hashtagi, które są używane przez więcej różnych osób, są wyżej w rankingu.", + "dismissable_banner.public_timeline": "To są najnowsze publiczne wpisy w fediwersum od osób obserwowanych przez użytkowników {domain}.", "domain_block_modal.block": "Blokuj serwer", "domain_block_modal.block_account_instead": "Zamiast tego zablokuj @{name}", - "domain_block_modal.they_can_interact_with_old_posts": "Ludzie z tego serwera mogą wchodzić w interakcje z Twoimi starymi wpisami.", - "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może Cię obserwować.", - "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", + "domain_block_modal.they_can_interact_with_old_posts": "Osoby z tego serwera mogą wchodzić w interakcje z twoimi starymi wpisami.", + "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może cię obserwować.", + "domain_block_modal.they_wont_know": "Nie będą wiedzieć, że zostali zablokowani.", "domain_block_modal.title": "Zablokować domenę?", "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", - "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących z tego serwera i wszystkie osoby które obserwujesz na tym serwerze.", - "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", - "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", - "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", + "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących i obserwowanych z tego serwera.", + "domain_block_modal.you_wont_see_posts": "Nie zobaczysz wpisów ani powiadomień od osób z tego serwera.", + "domain_pill.activitypub_lets_connect": "Umożliwia komunikację i interakcję z innymi nie tylko na Mastodon, ale także w innych aplikacjach.", + "domain_pill.activitypub_like_language": "ActivityPub jest jak język, którym Mastodon komunikuje się z innymi sieciami społecznościowymi.", "domain_pill.server": "Serwer", - "domain_pill.their_handle": "Uchwyt:", - "domain_pill.their_server": "Cyfrowy dom, w którym znajdują się wszystkie wpisy.", + "domain_pill.their_handle": "Nazwa:", + "domain_pill.their_server": "Cyfrowy dom wszystkich wpisów tej osoby.", "domain_pill.their_username": "Unikalny identyfikator na serwerze. Możliwe jest znalezienie użytkowników o tej samej nazwie użytkownika na różnych serwerach.", "domain_pill.username": "Nazwa użytkownika", - "domain_pill.whats_in_a_handle": "Co zawiera uchwyt użytkownika?", - "domain_pill.who_they_are": "Ponieważ uchwyty mówią kto jest kim i gdzie się znajduje, możesz wchodzić w interakcje z ludźmi korzystającymi z .", - "domain_pill.who_you_are": "Ponieważ Twój uchwyt mówi kim jesteś i gdzie się znajdujesz, inni mogą wchodzić z Tobą w interakcje korzystając z .", - "domain_pill.your_handle": "Twój uchwyt:", - "domain_pill.your_server": "Twój cyfrowy dom, w którym żyją wszystkie Twoje wpisy. Nie lubisz tego? Zmień serwer w dowolnym momencie i przenieś swoich obserwujących.", - "domain_pill.your_username": "Twój unikalny identyfikator na tym serwerze. Użytkownicy o tej samej nazwie mogą współistnieć na różnych serwerach.", - "embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.", - "embed.preview": "Będzie to wyglądać tak:", + "domain_pill.whats_in_a_handle": "Z czego składa się nazwa?", + "domain_pill.who_they_are": "Dzięki temu, że nazwy wskazują, kim ktoś jest i gdzie się znajduje, możesz wchodzić w interakcje z innymi z różnych .", + "domain_pill.who_you_are": "Dzięki temu, że twoja nazwa wskazuje, kim jesteś i gdzie się znajdujesz, inni mogą wchodzić z tobą w interakcje w różnych .", + "domain_pill.your_handle": "Twoja nazwa:", + "domain_pill.your_server": "Twój cyfrowy dom wszystkich twoich wpisów. Nie podoba ci się ten serwer? Przenieś się na inny w dowolnym momencie i zabierz ze sobą swoich obserwujących.", + "domain_pill.your_username": "Twój unikalny identyfikator na tym serwerze. Możliwe jest znalezienie osób z tą samą nazwą na innych serwerach.", + "embed.instructions": "Umieść ten wpis na swojej stronie, kopiując poniższy kod.", + "embed.preview": "Tak to będzie wyglądać:", "emoji_button.activity": "Aktywność", "emoji_button.clear": "Wyczyść", "emoji_button.custom": "Niestandardowe", @@ -290,191 +293,191 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", - "empty_column.account_hides_collections": "Użytkownik postanowił nie udostępniać tych informacji", + "empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji", "empty_column.account_suspended": "Konto zawieszone", - "empty_column.account_timeline": "Brak wpisów tutaj!", + "empty_column.account_timeline": "Brak wpisów!", "empty_column.account_unavailable": "Profil niedostępny", - "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", - "empty_column.bookmarked_statuses": "Nie dodałeś(-aś) żadnego wpisu do zakładek. Kiedy to zrobisz, pojawi się on tutaj.", - "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", - "empty_column.direct": "Nie masz jeszcze żadnych prywatnych wzmianek. Kiedy je wyślesz lub otrzymasz, pojawią się tutaj.", + "empty_column.blocks": "Nie zablokowano jeszcze żadnych użytkowników.", + "empty_column.bookmarked_statuses": "Nie dodano jeszcze żadnego wpisu do zakładek. Gdy to zrobisz, pojawi się tutaj.", + "empty_column.community": "Lokalna oś czasu jest pusta. Opublikuj coś, by ruszyć z kopyta!", + "empty_column.direct": "Nie ma tu jeszcze żadnych wzmianek bezpośrednich. Gdy je wyślesz lub otrzymasz, pojawią się tutaj.", "empty_column.domain_blocks": "Brak zablokowanych domen.", - "empty_column.explore_statuses": "Nic nie jest w tej chwili popularne. Sprawdź później!", - "empty_column.favourited_statuses": "Nie dodałeś(-aś) żadnego wpisu do ulubionych. Kiedy to zrobisz, pojawi się on tutaj.", - "empty_column.favourites": "Nikt nie dodał tego wpisu do ulubionych. Gdy ktoś to zrobi, pojawi się tutaj.", - "empty_column.follow_requests": "Nie masz żadnych próśb o możliwość obserwacji. Kiedy ktoś utworzy ją, pojawi się tutaj.", - "empty_column.followed_tags": "Nie obserwujesz jeszcze żadnych hashtagów. Kiedy to zrobisz, pojawią się one tutaj.", - "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hasztagiem. Możesz napisać pierwszy(-a).", - "empty_column.home": "Nie obserwujesz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.", - "empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.", - "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.", - "empty_column.notification_requests": "To wszystko – kiedy otrzymasz nowe powiadomienia, pokażą się tutaj zgodnie z twoimi ustawieniami.", - "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", - "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", - "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", - "error.unexpected_crash.explanation_addons": "Ta strona nie mogła zostać poprawnie wyświetlona. Może to być spowodowane dodatkiem do przeglądarki lub narzędziem do automatycznego tłumaczenia.", - "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", - "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", + "empty_column.explore_statuses": "Nic nie cieszy się teraz popularnością. Sprawdź później!", + "empty_column.favourited_statuses": "Nie polubiono jeszcze żadnego wpisu. Gdy to zrobisz, pojawi się tutaj.", + "empty_column.favourites": "Nikt jeszcze nie polubił tego wpisu. Kiedy ktoś to zrobi, pojawi się tutaj.", + "empty_column.follow_requests": "Nie masz jeszcze żadnych próśb o obserwowanie. Gdy je otrzymasz, pojawią się tutaj.", + "empty_column.followed_tags": "Nie obserwujesz jeszcze żadnych hashtagów. Gdy to zrobisz, pojawią się tutaj.", + "empty_column.hashtag": "Nie ma jeszcze wpisów oznaczonych tym hasztagiem.", + "empty_column.home": "Twoja główna oś czasu jest pusta! Zaobserwuj więcej osób, aby coś zobaczyć.", + "empty_column.list": "Nie ma jeszcze nic na tej liście. Kiedy osoby z tej listy opublikują nowe wpisy, pojawią się tutaj.", + "empty_column.mutes": "Nie wyciszono jeszcze żadnego użytkownika.", + "empty_column.notification_requests": "Wszystko przeczytane! Gdy otrzymasz nowe powiadomienia, pojawią się tutaj zgodnie z twoimi ustawieniami.", + "empty_column.notifications": "Nie masz jeszcze żadnych powiadomień. Gdy inne osoby wejdą z tobą w interakcję, zobaczysz to tutaj.", + "empty_column.public": "Nic tu nie ma! Opublikuj coś lub obserwuj osoby z innych serwerów, aby coś zobaczyć", + "error.unexpected_crash.explanation": "Z powodu błędu w naszym kodzie lub niezgodności przeglądarki nie udało się poprawnie wyświetlić tej strony.", + "error.unexpected_crash.explanation_addons": "Nie udało się poprawnie wyświetlić tej strony. Ten błąd jest spowodowany zapewne przez wtyczkę do przeglądarki lub narzędzia do automatycznego tłumaczenia.", + "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, nadal możesz korzystać z Mastodon za pośrednictwem innej przeglądarki lub aplikacji.", + "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć i odświeżyć stronę. Jeśli to nie pomoże, nadal możesz korzystać z Mastodon za pośrednictwem innej przeglądarki lub aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "explore.suggested_follows": "Ludzie", "explore.title": "Odkrywaj", "explore.trending_links": "Aktualności", - "explore.trending_statuses": "Posty", + "explore.trending_statuses": "Wpisy", "explore.trending_tags": "Hasztagi", - "filter_modal.added.context_mismatch_explanation": "Ta kategoria filtrów nie ma zastosowania do kontekstu, w którym uzyskałeś dostęp do tego wpisu. Jeśli chcesz, aby wpis został przefiltrowany również w tym kontekście, będziesz musiał edytować filtr.", - "filter_modal.added.context_mismatch_title": "Niezgodność kontekstów!", - "filter_modal.added.expired_explanation": "Ta kategoria filtra wygasła, będziesz musiał zmienić datę wygaśnięcia, aby ją zastosować.", - "filter_modal.added.expired_title": "Wygasły filtr!", - "filter_modal.added.review_and_configure": "Aby przejrzeć i skonfigurować tę kategorię filtrów, przejdź do {settings_link}.", - "filter_modal.added.review_and_configure_title": "Ustawienia filtra", + "filter_modal.added.context_mismatch_explanation": "To filtrowanie nie dotyczy kategorii, w której pojawił się ten wpis. Jeśli chcesz, aby wpis był filtrowany również w tym kontekście, musisz edytować ustawienia filtrowania.", + "filter_modal.added.context_mismatch_title": "Niewłaściwy kontekst!", + "filter_modal.added.expired_explanation": "Ta kategoria filtrowania wygasła, aby ją zastosować, należy zmienić datę wygaśnięcia.", + "filter_modal.added.expired_title": "Filtr wygasł!", + "filter_modal.added.review_and_configure": "Aby przejrzeć i skonfigurować tę kategorię filtrowania, przejdź do {settings_link}.", + "filter_modal.added.review_and_configure_title": "Ustawienia filtrowania", "filter_modal.added.settings_link": "strona ustawień", - "filter_modal.added.short_explanation": "Ten wpis został dodany do następującej kategorii filtrów: {title}.", - "filter_modal.added.title": "Filtr dodany!", - "filter_modal.select_filter.context_mismatch": "nie dotyczy tego kontekstu", + "filter_modal.added.short_explanation": "Ten wpis został dodany do następującej kategorii filtrowania: {title}.", + "filter_modal.added.title": "Filtrowanie zostało dodane!", + "filter_modal.select_filter.context_mismatch": "nie ma zastosowania w tym kontekście", "filter_modal.select_filter.expired": "wygasły", "filter_modal.select_filter.prompt_new": "Nowa kategoria: {name}", "filter_modal.select_filter.search": "Szukaj lub utwórz", "filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową", - "filter_modal.select_filter.title": "Filtruj ten wpis", - "filter_modal.title.status": "Filtruj wpis", - "filter_warning.matches_filter": "Pasuje do filtra \"{title}\"", + "filter_modal.select_filter.title": "Odfiltruj ten wpis", + "filter_modal.title.status": "Odfiltruj wpis", + "filter_warning.matches_filter": "Odfiltrowane przez \"{title}\"", "filtered_notifications_banner.pending_requests": "Od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}", - "filtered_notifications_banner.title": "Powiadomienia filtrowane", + "filtered_notifications_banner.title": "Odfiltrowane powiadomienia", "firehose.all": "Wszystko", "firehose.local": "Ten serwer", "firehose.remote": "Inne serwery", - "follow_request.authorize": "Autoryzuj", + "follow_request.authorize": "Przyjmij", "follow_request.reject": "Odrzuć", - "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość obserwacji.", - "follow_suggestions.curated_suggestion": "Wybrane przez personel", + "follow_requests.unlocked_explanation": "Mimo że twoje konto nie jest zablokowane, administratorzy {domain} uznali, że możesz chcieć samodzielnie sprawdzić prośby o obserwowanie od tych osób.", + "follow_suggestions.curated_suggestion": "Wybrane przez redakcję", "follow_suggestions.dismiss": "Nie pokazuj ponownie", - "follow_suggestions.featured_longer": "Wybrane przez zespół {domain}", - "follow_suggestions.friends_of_friends_longer": "Popularni wśród ludzi których obserwujesz", - "follow_suggestions.hints.featured": "Ten profil został wybrany przez zespół {domain}.", - "follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny w gronie użytkowników, których obserwujesz.", + "follow_suggestions.featured_longer": "Wybrane przez redakcję {domain}", + "follow_suggestions.friends_of_friends_longer": "Popularne wśród obserwowanych", + "follow_suggestions.hints.featured": "Ten profil został wybrany przez redakcję {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny wśród obserwowanych.", "follow_suggestions.hints.most_followed": "Ten profil jest jednym z najczęściej obserwowanych na {domain}.", - "follow_suggestions.hints.most_interactions": "Ten profil otrzymuje dużo interakcji na {domain}.", - "follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do profili ostatnio przez ciebie zaobserwowanych.", - "follow_suggestions.personalized_suggestion": "Sugestia spersonalizowana", - "follow_suggestions.popular_suggestion": "Sugestia popularna", - "follow_suggestions.popular_suggestion_longer": "Popularni na {domain}", - "follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych przez ciebie profilów", + "follow_suggestions.hints.most_interactions": "Ten profil cieszy się ostatnio dużym zainteresowaniem na {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do ostatnio przez ciebie zaobserwowanych.", + "follow_suggestions.personalized_suggestion": "Spersonalizowana rekomendacja", + "follow_suggestions.popular_suggestion": "Popularna rekomendacja", + "follow_suggestions.popular_suggestion_longer": "Popularne na {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych", "follow_suggestions.view_all": "Pokaż wszystkie", - "follow_suggestions.who_to_follow": "Kogo obserwować", + "follow_suggestions.who_to_follow": "Kogo warto obserwować", "followed_tags": "Obserwowane hasztagi", "footer.about": "O serwerze", - "footer.directory": "Katalog profilów", + "footer.directory": "Katalog profili", "footer.get_app": "Pobierz aplikację", "footer.keyboard_shortcuts": "Skróty klawiszowe", "footer.privacy_policy": "Polityka prywatności", "footer.source_code": "Zobacz kod źródłowy", "footer.status": "Status", - "footer.terms_of_service": "Warunki korzystania z usługi", + "footer.terms_of_service": "Regulamin", "generic.saved": "Zapisano", - "getting_started.heading": "Rozpocznij", - "hashtag.admin_moderation": "Otwórz interfejs moderacyjny dla #{name}", + "getting_started.heading": "Pierwsze kroki", + "hashtag.admin_moderation": "Otwórz interfejs moderacji #{name}", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "lub {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", - "hashtag.column_settings.select.no_options_message": "Nie odnaleziono sugestii", + "hashtag.column_settings.select.no_options_message": "Nie znaleziono żadnych rekomendacji", "hashtag.column_settings.select.placeholder": "Wprowadź hasztagi…", "hashtag.column_settings.tag_mode.all": "Wszystkie", "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} uczestnik} few {{counter} uczestnicy} many {{counter} uczestników} other {{counter} uczestników}}", + "hashtag.column_settings.tag_toggle": "Uwzględnij dodatkowe tagi w tej kolumnie", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} osoba} few {{counter} osoby} many {{counter} osób} other {{counter} osób}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} z dzisiaj", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} dzisiaj", "hashtag.follow": "Obserwuj hasztag", "hashtag.unfollow": "Przestań obserwować hashtag", "hashtags.and_other": "…i {count, plural, other {jeszcze #}}", - "hints.profiles.followers_may_be_missing": "Może brakować niektórych obserwujących tego profilu.", - "hints.profiles.follows_may_be_missing": "Może brakować niektórych obserwowanych przez tego użytkownika.", - "hints.profiles.posts_may_be_missing": "Może brakować niektórych wpisów tego profilu.", - "hints.profiles.see_more_followers": "Zobacz wszystkich obserwujących na {domain}", - "hints.profiles.see_more_follows": "Zobacz wszystkich obserwowanych na {domain}", - "hints.profiles.see_more_posts": "Zobacz wszystkie wpisy na {domain}", - "hints.threads.replies_may_be_missing": "Może brakować odpowiedzi z innych serwerów.", - "hints.threads.see_more": "Zobacz wszystkie odpowiedzi na {domain}", + "hints.profiles.followers_may_be_missing": "Niektórzy obserwujący ten profil mogą być niewidoczni.", + "hints.profiles.follows_may_be_missing": "Niektórzy obserwowani mogą być niewidoczni.", + "hints.profiles.posts_may_be_missing": "Niektóre wpisy mogą być niewidoczne.", + "hints.profiles.see_more_followers": "Zobacz więcej obserwujących na {domain}", + "hints.profiles.see_more_follows": "Zobacz więcej obserwowanych na {domain}", + "hints.profiles.see_more_posts": "Zobacz więcej wpisów na {domain}", + "hints.threads.replies_may_be_missing": "Komentarze z innych serwerów mogą być niewidoczne.", + "hints.threads.see_more": "Zobacz więcej komentarzy na {domain}", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", "home.hide_announcements": "Ukryj ogłoszenia", - "home.pending_critical_update.body": "Zaktualizuj serwer jak tylko będzie to możliwe!", - "home.pending_critical_update.link": "Pokaż aktualizacje", + "home.pending_critical_update.body": "Prosimy o jak najszybszą aktualizację serwera Mastodon!", + "home.pending_critical_update.link": "Zobacz aktualizacje", "home.pending_critical_update.title": "Dostępna krytyczna aktualizacja bezpieczeństwa!", "home.show_announcements": "Pokaż ogłoszenia", - "ignore_notifications_modal.disclaimer": "Mastodon nie może poinformować innych użytkowników że ignorujesz ich powiadomienia. Ignorowanie powiadomień nie zapobieże wysyłaniu wpisów per se. ", - "ignore_notifications_modal.filter_instead": "Filtruj zamiast tego", - "ignore_notifications_modal.filter_to_act_users": "Dalej będziesz mieć możliwość przyjmować, odrzucać, i raportować użytkowników", - "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrowanie może ograniczyć pomyłki", - "ignore_notifications_modal.filter_to_review_separately": "Możesz osobno przejrzeć powiadomienia odfiltrowane", + "ignore_notifications_modal.disclaimer": "Mastodon nie informuje nikogo o zignorowaniu powiadomienia. Ignorowanie powiadomień nie zapobiegnie wysyłaniu samych wiadomości.", + "ignore_notifications_modal.filter_instead": "Zamiast tego odfiltruj", + "ignore_notifications_modal.filter_to_act_users": "Przyjmowanie, odrzucanie i zgłaszanie innych będzie nadal możliwe", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrowanie pomaga uniknąć ewentualnych pomyłek", + "ignore_notifications_modal.filter_to_review_separately": "Możesz sprawdzić każde odfiltrowane powiadomienie", "ignore_notifications_modal.ignore": "Ignoruj powiadomienia", - "ignore_notifications_modal.limited_accounts_title": "Ignoruj powiadomienia od kont moderowanych?", - "ignore_notifications_modal.new_accounts_title": "Ignoruj powiadomienia od nowych kont?", - "ignore_notifications_modal.not_followers_title": "Ignoruj powiadomienia od użytkowników którzy cię nie obserwują?", - "ignore_notifications_modal.not_following_title": "Ignoruj powiadomienia od użytkowników których nie obserwujesz?", - "ignore_notifications_modal.private_mentions_title": "Ignoruj powiadomienia o nieproszonych wzmiankach prywatnych?", + "ignore_notifications_modal.limited_accounts_title": "Ignorować powiadomienia z moderowanych kont?", + "ignore_notifications_modal.new_accounts_title": "Ignorować powiadomienia z nowych kont?", + "ignore_notifications_modal.not_followers_title": "Ignorować powiadomienia od osób, które cię nie obserwują?", + "ignore_notifications_modal.not_following_title": "Ignorować powiadomienia od osób, których nie obserwujesz?", + "ignore_notifications_modal.private_mentions_title": "Ignorować powiadomienia od niechcianych wzmianek bezpośrednich?", "info_button.label": "Pomoc", - "info_button.what_is_alt_text": "

Czym jest tekst pomocniczy obrazków?

Tekst pomocniczy zapewnia osobom z zaburzeniem widzenia, słabym łączem internetowym oraz tym, którzy szukają dodatkowego kontekstu opis grafik i zdjęć.

\n

Możesz zwiększyć jego dostępność i zrozumienie poprzez jasne, zwięzłe i obiektywne sformułowanie tekstu pomocniczego.

\n", - "interaction_modal.action.favourite": "Aby kontynuować, musisz dodać do ulubionych na swoim koncie.", + "info_button.what_is_alt_text": "

Czym jest tekst alternatywny?

Tekst alternatywny zawiera opisy zdjęć dla osób niedowidzących, korzystających z połączeń o niskiej przepustowości lub szukających dodatkowego kontekstu.

\n

Możesz poprawić dostępność i czytelność dla wszystkich, pisząc jasny, zwięzły i precyzyjny tekst alternatywny.

\n", + "interaction_modal.action.favourite": "Aby kontynuować, musisz polubić ze swojego konta.", "interaction_modal.action.follow": "Aby kontynuować, musisz obserwować ze swojego konta.", - "interaction_modal.action.reblog": "Aby kontynuować, musisz podać dalej ze swojego konta.", - "interaction_modal.action.reply": "Aby kontynuować, musisz odpowiedzieć ze swojego konta.", + "interaction_modal.action.reblog": "Aby kontynuować, musisz podbić ze swojego konta.", + "interaction_modal.action.reply": "Aby kontynuować, musisz komentować ze swojego konta.", "interaction_modal.action.vote": "Aby kontynuować, musisz zagłosować ze swojego konta.", "interaction_modal.go": "Dalej", "interaction_modal.no_account_yet": "Nie masz jeszcze konta?", "interaction_modal.on_another_server": "Na innym serwerze", "interaction_modal.on_this_server": "Na tym serwerze", - "interaction_modal.title.favourite": "Polub wpis użytkownika {name}", - "interaction_modal.title.follow": "Śledź {name}", + "interaction_modal.title.favourite": "Polub wpis {name}", + "interaction_modal.title.follow": "Obserwuj {name}", "interaction_modal.title.reblog": "Podbij wpis {name}", "interaction_modal.title.reply": "Odpowiedz na post {name}", - "interaction_modal.title.vote": "Weź udział w głosowaniu {name}", + "interaction_modal.title.vote": "Głosuj w ankiecie {name}", "interaction_modal.username_prompt": "Np. {example}", "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", - "keyboard_shortcuts.back": "aby cofnąć się", - "keyboard_shortcuts.blocked": "aby przejść do listy zablokowanych użytkowników", - "keyboard_shortcuts.boost": "aby podbić wpis", - "keyboard_shortcuts.column": "aby przejść do wpisu z jednej z kolumn", - "keyboard_shortcuts.compose": "aby przejść do pola tworzenia wpisu", + "keyboard_shortcuts.back": "Wstecz", + "keyboard_shortcuts.blocked": "Otwórz listę zablokowanych", + "keyboard_shortcuts.boost": "Podbij wpis", + "keyboard_shortcuts.column": "Aktywuj kolumnę", + "keyboard_shortcuts.compose": "Aktywuj pole tekstowe", "keyboard_shortcuts.description": "Opis", - "keyboard_shortcuts.direct": "aby otworzyć kolumnę z wzmiankami prywatnymi", - "keyboard_shortcuts.down": "aby przejść na dół listy", - "keyboard_shortcuts.enter": "aby otworzyć wpis", + "keyboard_shortcuts.direct": "aby otworzyć kolumnę wzmianek bezpośrednich", + "keyboard_shortcuts.down": "Przesuń w dół na liście", + "keyboard_shortcuts.enter": "Otwórz wpis", "keyboard_shortcuts.favourite": "Polub wpis", - "keyboard_shortcuts.favourites": "Otwórz listę ulubionych wpisów", - "keyboard_shortcuts.federated": "aby otworzyć oś czasu federacji", + "keyboard_shortcuts.favourites": "Otwórz listę polubionych wpisów", + "keyboard_shortcuts.federated": "Otwórz globalną oś czasu", "keyboard_shortcuts.heading": "Skróty klawiszowe", - "keyboard_shortcuts.home": "aby otworzyć stronę główną", + "keyboard_shortcuts.home": "Otwórz stronę główną", "keyboard_shortcuts.hotkey": "Skrót klawiszowy", - "keyboard_shortcuts.legend": "aby wyświetlić tę legendę", - "keyboard_shortcuts.local": "aby otworzyć lokalną oś czasu", - "keyboard_shortcuts.mention": "aby wspomnieć o autorze", - "keyboard_shortcuts.muted": "aby przejść do listy wyciszonych użytkowników", - "keyboard_shortcuts.my_profile": "aby otworzyć własny profil", - "keyboard_shortcuts.notifications": "aby otworzyć kolumnę powiadomień", + "keyboard_shortcuts.legend": "Wyświetl skróty klawiszowe", + "keyboard_shortcuts.local": "Otwórz lokalną oś czasu", + "keyboard_shortcuts.mention": "Dodaj wzmiankę", + "keyboard_shortcuts.muted": "Otwórz listę wyciszonych", + "keyboard_shortcuts.my_profile": "Otwórz swój profil", + "keyboard_shortcuts.notifications": "Otwórz kolumnę powiadomień", "keyboard_shortcuts.open_media": "Otwórz multimedia", - "keyboard_shortcuts.pinned": "aby przejść do listy przypiętych wpisów", - "keyboard_shortcuts.profile": "aby przejść do profilu autora wpisu", - "keyboard_shortcuts.reply": "aby odpowiedzieć", - "keyboard_shortcuts.requests": "aby przejść do listy próśb o możliwość obserwacji", - "keyboard_shortcuts.search": "aby przejść do pola wyszukiwania", - "keyboard_shortcuts.spoilers": "aby pokazać/ukryć pole CW", - "keyboard_shortcuts.start": "aby otworzyć kolumnę „Rozpocznij”", - "keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW", - "keyboard_shortcuts.toggle_sensitivity": "Pokaż/ukryj multimedia", - "keyboard_shortcuts.toot": "Stwórz nowy post", - "keyboard_shortcuts.translate": "Aby przetłumaczyć post", - "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", - "keyboard_shortcuts.up": "aby przejść na górę listy", + "keyboard_shortcuts.pinned": "Otwórz listę przypiętych wpisów", + "keyboard_shortcuts.profile": "Otwórz profil", + "keyboard_shortcuts.reply": "Skomentuj", + "keyboard_shortcuts.requests": "Otwórz listę próśb o obserwowanie", + "keyboard_shortcuts.search": "Aktywuj pole wyszukiwania", + "keyboard_shortcuts.spoilers": "Pokaż lub ukryj ostrzeżenia", + "keyboard_shortcuts.start": "Otwórz kolumnę \"Pierwsze kroki\"", + "keyboard_shortcuts.toggle_hidden": "Pokaż lub ukryj tekst z ostrzeżeniem", + "keyboard_shortcuts.toggle_sensitivity": "Pokaż lub ukryj multimedia", + "keyboard_shortcuts.toot": "Stwórz nowy wpis", + "keyboard_shortcuts.translate": "aby przetłumaczyć wpis", + "keyboard_shortcuts.unfocus": "Opuść pole tekstowe", + "keyboard_shortcuts.up": "Przesuń w górę na liście", "lightbox.close": "Zamknij", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", - "lightbox.zoom_in": "Rozmiar rzeczywisty", - "lightbox.zoom_out": "Dopasuj", + "lightbox.zoom_in": "Powiększ do rzeczywistego rozmiaru", + "lightbox.zoom_out": "Powiększ, aby dopasować", "limited_account_hint.action": "Pokaż profil mimo to", "limited_account_hint.title": "Ten profil został ukryty przez moderatorów {domain}.", "link_preview.author": "{name}", @@ -484,230 +487,230 @@ "lists.add_to_list": "Dodaj do listy", "lists.add_to_lists": "Dodaj {name} do list", "lists.create": "Utwórz", - "lists.create_a_list_to_organize": "Stwórz nową listę żeby zorganizować swoją oś czasu", + "lists.create_a_list_to_organize": "Utwórz nową listę, aby uporządkować swoją oś czasu", "lists.create_list": "Utwórz listę", "lists.delete": "Usuń listę", "lists.done": "Gotowe", "lists.edit": "Edytuj listę", - "lists.exclusive": "Schowaj członków z osi czasu", - "lists.exclusive_hint": "Jeśli ktoś jest na tej liście, ukrywa go z Twojej osi czasu, aby uniknąć pokazywania jego wpisów dwukrotnie.", - "lists.find_users_to_add": "Znajdź użytkowników do dodania", - "lists.list_members": "Członkowie listy", - "lists.list_members_count": "{count, plural, one {# użytkownik} other {# użytkowników}}", + "lists.exclusive": "Nie pokazuj w mojej osi czasu", + "lists.exclusive_hint": "Wpisy osób znajdujących się na tej liście nie będą wyświetlane w twojej osi czasu, aby uniknąć duplikowania tych samych wpisów.", + "lists.find_users_to_add": "Znajdź kogoś, aby dodać", + "lists.list_members": "Lista osób", + "lists.list_members_count": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", "lists.list_name": "Nazwa listy", "lists.new_list_name": "Nazwa nowej listy", - "lists.no_lists_yet": "Nie masz jeszcze list.", - "lists.no_members_yet": "Brak członków.", - "lists.no_results_found": "Brak wyników.", + "lists.no_lists_yet": "Brak list.", + "lists.no_members_yet": "Pusto.", + "lists.no_results_found": "Nic nie znaleziono.", "lists.remove_member": "Usuń", - "lists.replies_policy.followed": "Dowolny obserwowany użytkownik", - "lists.replies_policy.list": "Członkowie listy", + "lists.replies_policy.followed": "Każdy obserwowany", + "lists.replies_policy.list": "Osoby na liście", "lists.replies_policy.none": "Nikt", "lists.save": "Zapisz", "lists.search": "Szukaj", - "lists.show_replies_to": "Pokaż odpowiedzi od członków listy do", - "load_pending": "{count, plural, one {# nowa pozycja} other {nowe pozycje}}", - "loading_indicator.label": "Ładowanie…", + "lists.show_replies_to": "Uwzględnij komentarze osób z listy do", + "load_pending": "{count, plural, one {# nowa} few {# nowe} many {# nowych} other {# nowych}}", + "loading_indicator.label": "Wczytywanie…", "media_gallery.hide": "Ukryj", "moved_to_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone, ponieważ zostało przeniesione na {movedToAccount}.", - "mute_modal.hide_from_notifications": "Ukryj z powiadomień", + "mute_modal.hide_from_notifications": "Nie pokazuj w powiadomieniach", "mute_modal.hide_options": "Ukryj opcje", - "mute_modal.indefinite": "Do ręcznego usunięcia wyciszenia", + "mute_modal.indefinite": "Dopóki nie zmienię zdania", "mute_modal.show_options": "Pokaż opcje", - "mute_modal.they_can_mention_and_follow": "Użytkownik może Cię obserwować oraz dodawać wzmianki, ale Ty ich nie zobaczysz.", - "mute_modal.they_wont_know": "Użytkownik nie dowie się, że został wyciszony.", - "mute_modal.title": "Wyciszyć użytkownika?", - "mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", - "mute_modal.you_wont_see_posts": "Użytkownik dalej będzie widzieć Twoje posty, ale Ty nie będziesz widzieć jego.", + "mute_modal.they_can_mention_and_follow": "Może cię wzmiankować i obserwować, ale ty tego nie zobaczysz.", + "mute_modal.they_wont_know": "Informacja o wyciszeniu nie będzie widoczna dla tej osoby.", + "mute_modal.title": "Wyciszyć?", + "mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów wzmiankujących tę osobę.", + "mute_modal.you_wont_see_posts": "Nie zobaczysz wpisów tej osoby, ale ona może widzieć twoje.", "navigation_bar.about": "O serwerze", "navigation_bar.administration": "Administracja", - "navigation_bar.advanced_interface": "Otwórz w zaawansowanym interfejsie użytkownika", - "navigation_bar.blocks": "Zablokowani użytkownicy", + "navigation_bar.advanced_interface": "Otwórz w widoku zaawansowanym", + "navigation_bar.blocks": "Zablokowani", "navigation_bar.bookmarks": "Zakładki", "navigation_bar.community_timeline": "Lokalna oś czasu", "navigation_bar.compose": "Utwórz nowy wpis", - "navigation_bar.direct": "Prywatne wzmianki", + "navigation_bar.direct": "Wzmianki bezpośrednie", "navigation_bar.discover": "Odkrywaj", - "navigation_bar.domain_blocks": "Ukryte domeny", + "navigation_bar.domain_blocks": "Zablokowane domeny", "navigation_bar.explore": "Odkrywaj", - "navigation_bar.favourites": "Ulubione", + "navigation_bar.favourites": "Polubione", "navigation_bar.filters": "Wyciszone słowa", - "navigation_bar.follow_requests": "Prośby o obserwację", + "navigation_bar.follow_requests": "Prośby o obserwowanie", "navigation_bar.followed_tags": "Obserwowane hasztagi", "navigation_bar.follows_and_followers": "Obserwowani i obserwujący", "navigation_bar.lists": "Listy", "navigation_bar.logout": "Wyloguj", "navigation_bar.moderation": "Moderacja", - "navigation_bar.mutes": "Wyciszeni użytkownicy", - "navigation_bar.opened_in_classic_interface": "Posty, konta i inne konkretne strony są otwierane domyślnie w klasycznym interfejsie sieciowym.", + "navigation_bar.mutes": "Wyciszeni", + "navigation_bar.opened_in_classic_interface": "Wpisy, konta i inne określone strony są domyślnie otwierane w widoku klasycznym.", "navigation_bar.personal": "Osobiste", "navigation_bar.pins": "Przypięte wpisy", - "navigation_bar.preferences": "Preferencje", + "navigation_bar.preferences": "Ustawienia", "navigation_bar.public_timeline": "Globalna oś czasu", "navigation_bar.search": "Szukaj", "navigation_bar.security": "Bezpieczeństwo", - "not_signed_in_indicator.not_signed_in": "Musisz się zalogować, aby uzyskać dostęp do tego zasobu.", + "not_signed_in_indicator.not_signed_in": "Zaloguj się, aby uzyskać dostęp.", "notification.admin.report": "{name} zgłosił {target}", "notification.admin.report_account": "{name} zgłosił(a) {count, plural, one {1 wpis} few {# wpisy} other {# wpisów}} z {target} w kategorii {category}", "notification.admin.report_account_other": "{name} zgłosił(a) {count, plural, one {1 wpis} few {# wpisy} other {# wpisów}} z {target}", "notification.admin.report_statuses": "{name} zgłosił(a) {target} w kategorii {category}", "notification.admin.report_statuses_other": "{name} zgłosił(a) {target}", - "notification.admin.sign_up": "Użytkownik {name} zarejestrował się", - "notification.admin.sign_up.name_and_others": "zarejestrował(-a) się {name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}}", + "notification.admin.sign_up": "{name} rejestruje się", + "notification.admin.sign_up.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} zarejestrowali się", "notification.annual_report.message": "Twój {year} #Wrapstodon jest już dostępny! Zobacz swoje podsumowanie roku i niezapomniane chwile na Mastodon!", "notification.annual_report.view": "Zobacz #Wrapstodon", - "notification.favourite": "{name} dodaje Twój wpis do ulubionych", - "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba polubiła twój wpis} few {# inne osoby polubiły twój wpis} other {# innych osób polubiło twój wpis}}", - "notification.favourite_pm": "{name} polubił(-a) twoją prywatną wzmiankę", - "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} polubiło twoją prywatną wzmiankę", - "notification.follow": "{name} obserwuje Cię", - "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}", + "notification.favourite": "{name} lubi twój wpis", + "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} lubią twój wpis", + "notification.favourite_pm": "{name} lubi wzmiankę bezpośrednią od ciebie", + "notification.favourite_pm.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} lubią wzmiankę bezpośrednią od ciebie", + "notification.follow": "{name} obserwuje cię", + "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} zaobserwowali cię", "notification.follow_request": "{name} chce cię zaobserwować", - "notification.follow_request.name_and_others": "{name} i {count, plural, one {# inna osoba chce} few {# inne osoby chcą} other {# innych osób chce}} zaobserwować twój profil", + "notification.follow_request.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} chcą cię zaobserwować", "notification.label.mention": "Wzmianka", - "notification.label.private_mention": "Prywatna wzmianka", - "notification.label.private_reply": "Odpowiedź prywatna", - "notification.label.reply": "Odpowiedź", + "notification.label.private_mention": "Wzmianka bezpośrednia", + "notification.label.private_reply": "Komentarz bezpośredni", + "notification.label.reply": "Komentarz", "notification.mention": "Wzmianka", - "notification.mentioned_you": "{name} wspomniał(a) o Tobie", + "notification.mentioned_you": "{name} wzmiankuje cię", "notification.moderation-warning.learn_more": "Dowiedz się więcej", - "notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne", - "notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.", + "notification.moderation_warning": "Otrzymano ostrzeżenie", + "notification.moderation_warning.action_delete_statuses": "Usunięto niektóre z twoich wpisów.", "notification.moderation_warning.action_disable": "Twoje konto zostało wyłączone.", - "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre twoje wpisy zostały oznaczone jako wrażliwe.", - "notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie moderacyjne.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre z twoich wpisów zostały oznaczone jako wrażliwe.", + "notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie.", "notification.moderation_warning.action_sensitive": "Twoje wpisy będą od teraz oznaczane jako wrażliwe.", "notification.moderation_warning.action_silence": "Twoje konto zostało ograniczone.", "notification.moderation_warning.action_suspend": "Twoje konto zostało zawieszone.", - "notification.own_poll": "Twoje głosowanie zakończyło się", - "notification.poll": "Głosowanie, w którym brałeś(-aś) udział, zostało zakończone", + "notification.own_poll": "Twoja ankieta została zakończona", + "notification.poll": "Zakończyła się ankieta, w której głosowano", "notification.reblog": "Twój post został podbity przez {name}", - "notification.reblog.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba podbiła twój wpis} few {# inne osoby podbiły twój wpis} other {# innych osób podbiło twój wpis}}", - "notification.relationships_severance_event": "Utracone związki z {name}", - "notification.relationships_severance_event.account_suspension": "Administrator z {from} zawiesił {target}, więc nie dostaniesz wieści ani nie wejdziesz w interakcje z użytkownikami z tego serwera.", - "notification.relationships_severance_event.domain_block": "Administrator z {from} zablokował {target}, w tym {followersCount} z Twoich obserwujących i {followingCount, plural, one {# konto} other {# konta}} które obserwujesz.", + "notification.reblog.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} podbili twój wpis", + "notification.relationships_severance_event": "Utracono połączenie z {name}", + "notification.relationships_severance_event.account_suspension": "Administrator {from} zawiesił {target}, co oznacza, że nie możesz już otrzymywać aktualności ani wchodzić w interakcje z tą osobą.", + "notification.relationships_severance_event.domain_block": "Administrator {from} zablokował {target}, w tym {followersCount} twoich obserwujących i {followingCount, plural, one {# konto} few {# konta} other {# kont}}, które obserwujesz.", "notification.relationships_severance_event.learn_more": "Dowiedz się więcej", - "notification.relationships_severance_event.user_domain_block": "Zablokowałeś {target}, w tym {followersCount} z Twoich obserwujących i {followingCount, plural, one {# konto} other {# konta}} które obserwujesz.", + "notification.relationships_severance_event.user_domain_block": "Zablokowałeś {target}, w tym {followersCount} twoich obserwujących i {followingCount, plural, one {# konto} few {# konta} other {# kont}}, które obserwujesz.", "notification.status": "{name} opublikował(a) nowy wpis", "notification.update": "{name} edytował(a) post", "notification_requests.accept": "Akceptuj", - "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", - "notification_requests.confirm_accept_multiple.button": "Przyjmij {count, plural, one {wniosek} other {wnioski}} o powiadomienia", - "notification_requests.confirm_accept_multiple.message": "Na pewno przyjąć {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}?", - "notification_requests.confirm_accept_multiple.title": "Przyjąć wnioski o powiadomienia?", - "notification_requests.confirm_dismiss_multiple.button": "Odrzuć {count, plural, one {wniosek} other {wnioski}} o powiadomienia", - "notification_requests.confirm_dismiss_multiple.message": "Na pewno odrzucić {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}? Stracisz do {count, plural, one {niego} other {nich}} łatwy dostęp.", - "notification_requests.confirm_dismiss_multiple.title": "Odrzuć żądania powiadomień?", + "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# prośbę} few {# prośby} other {# próśb}}...", + "notification_requests.confirm_accept_multiple.button": "Przyjmij {count, plural, one {# prośbę} few {# prośby} other {# próśb}}", + "notification_requests.confirm_accept_multiple.message": "Zamierzasz przyjąć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}. Czy na pewno chcesz kontynuować?", + "notification_requests.confirm_accept_multiple.title": "Przyjąć prośby?", + "notification_requests.confirm_dismiss_multiple.button": "Odrzuć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}", + "notification_requests.confirm_dismiss_multiple.message": "Zamierzasz odrzucić {count, plural, one {# prośbę} few {# prośby} other {# próśb}}. Stracisz do {count, plural, one {tego} other {tego}} łatwy dostęp. Czy na pewno chcesz kontynuować?", + "notification_requests.confirm_dismiss_multiple.title": "Odrzucić prośbę?", "notification_requests.dismiss": "Odrzuć", - "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", + "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}...", "notification_requests.edit_selection": "Edytuj", "notification_requests.exit_selection": "Gotowe", - "notification_requests.explainer_for_limited_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto zostało ograniczone przez moderatora.", - "notification_requests.explainer_for_limited_remote_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto, albo serwer na którym się znajduje, zostało ograniczone przez moderatora.", - "notification_requests.maximize": "Zmaksymalizuj", - "notification_requests.minimize_banner": "Zminimalizuj baner powiadomień filtrowanych", + "notification_requests.explainer_for_limited_account": "Powiadomienia z tego konta zostały odfiltrowane, ponieważ konto zostało ograniczone przez moderatora.", + "notification_requests.explainer_for_limited_remote_account": "Powiadomienia z tego konta zostały odfiltrowane, ponieważ konto lub serwer zostały ograniczone przez moderatora.", + "notification_requests.maximize": "Maksymalizuj", + "notification_requests.minimize_banner": "Minimalizuj odfiltrowane powiadomienia", "notification_requests.notifications_from": "Powiadomienia od {name}", - "notification_requests.title": "Powiadomienia filtrowane", + "notification_requests.title": "Odfiltrowane powiadomienia", "notification_requests.view": "Wyświetl powiadomienia", "notifications.clear": "Wyczyść powiadomienia", - "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", + "notifications.clear_confirmation": "Czy na pewno chcesz trwale wyczyścić wszystkie powiadomienia?", "notifications.clear_title": "Wyczyścić powiadomienia?", "notifications.column_settings.admin.report": "Nowe zgłoszenia:", - "notifications.column_settings.admin.sign_up": "Nowe rejestracje:", + "notifications.column_settings.admin.sign_up": "Nowo zarejestrowani:", "notifications.column_settings.alert": "Powiadomienia na pulpicie", - "notifications.column_settings.favourite": "Ulubione:", + "notifications.column_settings.favourite": "Polubione:", "notifications.column_settings.filter_bar.advanced": "Wyświetl wszystkie kategorie", "notifications.column_settings.filter_bar.category": "Szybkie filtrowanie", "notifications.column_settings.follow": "Nowi obserwujący:", - "notifications.column_settings.follow_request": "Nowe prośby o możliwość obserwacji:", + "notifications.column_settings.follow_request": "Nowe prośby o obserwowanie:", "notifications.column_settings.group": "Grupuj", - "notifications.column_settings.mention": "Wspomnienia:", - "notifications.column_settings.poll": "Wyniki głosowania:", + "notifications.column_settings.mention": "Wzmianki:", + "notifications.column_settings.poll": "Wyniki ankiety:", "notifications.column_settings.push": "Powiadomienia push", "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", "notifications.column_settings.status": "Nowe wpisy:", "notifications.column_settings.unread_notifications.category": "Nieprzeczytane powiadomienia", - "notifications.column_settings.unread_notifications.highlight": "Podświetl nieprzeczytane powiadomienia", + "notifications.column_settings.unread_notifications.highlight": "Wyróżnij nieprzeczytane powiadomienia", "notifications.column_settings.update": "Edycje:", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", - "notifications.filter.favourites": "Ulubione", + "notifications.filter.favourites": "Polubione", "notifications.filter.follows": "Obserwacje", - "notifications.filter.mentions": "Wspomnienia", - "notifications.filter.polls": "Wyniki głosowania", - "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", + "notifications.filter.mentions": "Wzmianki", + "notifications.filter.polls": "Wyniki ankiety", + "notifications.filter.statuses": "Aktualności od obserwowanych", "notifications.grant_permission": "Przyznaj uprawnienia.", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", - "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", - "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", - "notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.", - "notifications.policy.accept": "Zaakceptuj", - "notifications.policy.accept_hint": "Wyświetlaj w powiadomieniach", - "notifications.policy.drop": "Zignoruj", - "notifications.policy.drop_hint": "Usuń nieodzyskiwalnie.", + "notifications.permission_denied": "Powiadomienia na pulpicie są niedostępne z powodu wcześniejszego braku zgody", + "notifications.permission_denied_alert": "Nie można włączyć powiadomień na pulpicie, ponieważ wcześniej nie udzielono zgody", + "notifications.permission_required": "Powiadomienia na pulpicie są niedostępne, ponieważ nie przyznano wymaganych uprawnień.", + "notifications.policy.accept": "Akceptuj", + "notifications.policy.accept_hint": "Pokazuj w powiadomieniach", + "notifications.policy.drop": "Ignoruj", + "notifications.policy.drop_hint": "Usuń trwale", "notifications.policy.filter": "Odfiltruj", - "notifications.policy.filter_hint": "Wyślij do skrzynki powiadomień odfiltrowanych", + "notifications.policy.filter_hint": "Przenieś do odfiltrowanych powiadomień", "notifications.policy.filter_limited_accounts_hint": "Ograniczonych przez moderatorów serwera", "notifications.policy.filter_limited_accounts_title": "Kont zmoderowanych", - "notifications.policy.filter_new_accounts.hint": "Utworzone w ciągu {days, plural, one {ostatniego dnia} other {ostatnich # dni}}", - "notifications.policy.filter_new_accounts_title": "Nowe konta", - "notifications.policy.filter_not_followers_hint": "Zawierające osoby które obserwują cię krócej niż {days, plural, one {dzień} other {# dni}}", - "notifications.policy.filter_not_followers_title": "Ludzie, którzy cię nie obserwują", - "notifications.policy.filter_not_following_hint": "Aż ich ręcznie nie zatwierdzisz", - "notifications.policy.filter_not_following_title": "Ludzie, których nie obserwujesz", - "notifications.policy.filter_private_mentions_hint": "Odfiltrowane, chyba że są odpowiedzią na twoją własną wzmiankę, lub obserwujesz wysyłającego", - "notifications.policy.filter_private_mentions_title": "Nieproszone prywatne wzmianki", + "notifications.policy.filter_new_accounts.hint": "Utworzonych w ciągu {days, plural, one {ostatniego dnia} other {ostatnich # dni}}", + "notifications.policy.filter_new_accounts_title": "Nowych kont", + "notifications.policy.filter_not_followers_hint": "Uwzględniając osoby, które obserwują cię krócej niż {days, plural, one {# dzień} other {# dni}}", + "notifications.policy.filter_not_followers_title": "Osób, które cię nie obserwują", + "notifications.policy.filter_not_following_hint": "Do momentu zatwierdzenia", + "notifications.policy.filter_not_following_title": "Osób, których nie obserwujesz", + "notifications.policy.filter_private_mentions_hint": "Odfiltrowane, chyba że są odpowiedzią na wzmiankę od ciebie lub obserwujesz nadawcę", + "notifications.policy.filter_private_mentions_title": "Niechcianych wzmianek bezpośrednich", "notifications.policy.title": "Zarządzaj powiadomieniami od…", "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", - "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", - "notifications_permission_banner.title": "Nie przegap niczego", + "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia na pulpicie. Możesz wybrać, które dokładnie typy interakcji generują powiadomienia na pulpicie za pomocą przycisku {icon} powyżej po ich włączeniu.", + "notifications_permission_banner.title": "Nigdy niczego nie przegapisz", "onboarding.follows.back": "Wróć", "onboarding.follows.done": "Gotowe", - "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.", + "onboarding.follows.empty": "Niestety, w tej chwili nie można nic wyświetlić. Możesz użyć wyszukiwania lub przeglądać stronę główną, aby znaleźć osoby, które chcesz obserwować, albo spróbuj ponownie później.", "onboarding.follows.search": "Szukaj", - "onboarding.follows.title": "Zaobserwuj konta by zacząć", - "onboarding.profile.discoverable": "Spraw mój profil odkrywalnym", - "onboarding.profile.discoverable_hint": "Kiedy zapisujesz się do odkrywalności w Mastodonie, twoje wpisy mogą pokazywać się w wynikach wyszukiwania i trendach, a twój profil może być sugerowany użytkownikom o podobnych zainteresowaniach.", - "onboarding.profile.display_name": "Nazwa wyświetlana", + "onboarding.follows.title": "Zaobserwuj kogoś, aby zacząć", + "onboarding.profile.discoverable": "Spraw, by mój profil był widoczny", + "onboarding.profile.discoverable_hint": "Gdy zdecydujesz się na włączenie widoczności na Mastodon, twoje wpisy mogą pojawiać się w wynikach wyszukiwania i aktualnościach, a twój profil może być polecany osobom o podobnych zainteresowaniach.", + "onboarding.profile.display_name": "Wyświetlana nazwa", "onboarding.profile.display_name_hint": "Twoje imię lub pseudonim…", - "onboarding.profile.note": "O mnie", - "onboarding.profile.note_hint": "Możesz @wspomnieć użytkowników albo #hasztagi…", + "onboarding.profile.note": "Opis", + "onboarding.profile.note_hint": "Możesz @wzmiankować innych lub dodawać #hashtagi…", "onboarding.profile.save_and_continue": "Zapisz i kontynuuj", "onboarding.profile.title": "Ustawienia profilu", "onboarding.profile.upload_avatar": "Dodaj zdjęcie profilowe", - "onboarding.profile.upload_header": "Dodaj banner profilu", - "password_confirmation.exceeds_maxlength": "Potwierdzenie hasła przekracza maksymalną długość hasła", - "password_confirmation.mismatching": "Wprowadzone hasła różnią się od siebie", - "picture_in_picture.restore": "Odłóż", + "onboarding.profile.upload_header": "Dodaj baner", + "password_confirmation.exceeds_maxlength": "Długość potwierdzonego hasła przekracza maksymalną długość hasła", + "password_confirmation.mismatching": "Hasła nie są takie same", + "picture_in_picture.restore": "Powrót", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", - "poll.reveal": "Wyświetl wyniki", + "poll.reveal": "Zobacz wyniki", "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", - "poll.vote": "Zagłosuj", - "poll.voted": "Zagłosowałeś_aś na tą odpowiedź", + "poll.vote": "Głosuj", + "poll.voted": "Wybrano tę odpowiedź", "poll.votes": "{votes, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", - "poll_button.add_poll": "Dodaj głosowanie", - "poll_button.remove_poll": "Usuń głosowanie", + "poll_button.add_poll": "Dodaj ankietę", + "poll_button.remove_poll": "Usuń ankietę", "privacy.change": "Dostosuj widoczność wpisów", - "privacy.direct.long": "Wszyscy wspomnieni w tym wpisie", - "privacy.direct.short": "Konkretni ludzie", - "privacy.private.long": "Tylko ci, którzy cię obserwują", + "privacy.direct.long": "Wszyscy wzmiankowani w tym wpisie", + "privacy.direct.short": "Wzmianki bezpośrednie", + "privacy.private.long": "Tylko obserwujący", "privacy.private.short": "Obserwujący", - "privacy.public.long": "Ktokolwiek na i poza Mastodonem", + "privacy.public.long": "Każdy na i poza Mastodon", "privacy.public.short": "Publiczny", - "privacy.unlisted.additional": "Taki sam jak \"Publiczny\", ale wpis nie pojawi się w kanałach na żywo, hasztagach, odkrywaniu, ani w wyszukiwaniu w Mastodonie, nawet jeżeli jest to włączone w ustawieniach konta.", - "privacy.unlisted.long": "Widoczne dla każdego, z wyłączeniem funkcji odkrywania", + "privacy.unlisted.additional": "Dostępny podobnie jak wpis publiczny, ale nie będzie widoczny w aktualnościach, hashtagach ani wyszukiwarce Mastodon, nawet jeśli twoje konto jest widoczne.", + "privacy.unlisted.long": "Niewidoczny w aktualnościach", "privacy.unlisted.short": "Niewidoczny", "privacy_policy.last_updated": "Data ostatniej aktualizacji: {date}", "privacy_policy.title": "Polityka prywatności", "recommended": "Zalecane", "refresh": "Odśwież", "regeneration_indicator.please_stand_by": "Proszę czekać.", - "regeneration_indicator.preparing_your_home_feed": "Przygotowywanie Twojego kanału wiadomości...", + "regeneration_indicator.preparing_your_home_feed": "Wczytywanie twojej osi czasu…", "relative_time.days": "{number} dni", "relative_time.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}} temu", "relative_time.full.hours": "{number, plural, one {# godzinę} few {# godziny} many {# godzin} other {# godzin}} temu", @@ -719,27 +722,27 @@ "relative_time.minutes": "{number} min.", "relative_time.seconds": "{number} s.", "relative_time.today": "dzisiaj", - "reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączniku}}", + "reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączników}}", "reply_indicator.cancel": "Anuluj", "reply_indicator.poll": "Ankieta", "report.block": "Zablokuj", - "report.block_explanation": "Nie zobaczysz ich wpisów. Nie będą mogli zobaczyć Twoich postów ani cię obserwować. Będą mogli domyślić się, że są zablokowani.", + "report.block_explanation": "Nie zobaczysz wpisów tej osoby, a ona twoich, ani nie będzie mogła cię zaobserwować. Informacja o zablokowaniu będzie widoczna.", "report.categories.legal": "Prawne", "report.categories.other": "Inne", "report.categories.spam": "Spam", "report.categories.violation": "Zawartość narusza co najmniej jedną zasadę serwera", "report.category.subtitle": "Wybierz najbardziej pasującą opcję", "report.category.title": "Powiedz, co się dzieje z tym {type}", - "report.category.title_account": "profil", - "report.category.title_status": "post", + "report.category.title_account": "profilem", + "report.category.title_status": "wpisem", "report.close": "Gotowe", - "report.comment.title": "Czy jest jeszcze coś, co uważasz, że powinniśmy wiedzieć?", - "report.forward": "Przekaż na {target}", - "report.forward_hint": "To konto znajduje się na innej instancji. Czy chcesz wysłać anonimową kopię zgłoszenia rnież na nią?", + "report.comment.title": "Czy jest coś jeszcze, co powinniśmy wiedzieć?", + "report.forward": "Prześlij do {target}", + "report.forward_hint": "Konto pochodzi z innego serwera. Czy chcesz również tam wysłać kopię zgłoszenia anonimowo?", "report.mute": "Wycisz", - "report.mute_explanation": "Nie zobaczysz ich wpisów. Mimo to będą mogli wciąż obserwować cię i widzieć twoje wpisy, ale nie będą widzieli, że są wyciszeni.", + "report.mute_explanation": "Nie zobaczysz wpisów tej osoby, ale ona nadal będzie mogła cię obserwować i zobaczyć twoje wpisy. Informacja o wyciszeniu nie będzie widoczna.", "report.next": "Dalej", - "report.placeholder": "Dodatkowe komentarze", + "report.placeholder": "Dodatkowe informacje", "report.reasons.dislike": "Nie podoba mi się to", "report.reasons.dislike_description": "Nie jest to coś, co chciałoby się zobaczyć", "report.reasons.legal": "To jest nielegalne", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 021eeb349b..a3f138f1b7 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 b6f3a8a95d..ca3798c731 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 b9f0fd1b33..6ca6b0e329 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 7274f425ea..b56d959752 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 1be39aaedf..10224f4d7e 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -296,7 +296,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService 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 0c5bfaefeb..1db15d9ccb 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -50,10 +50,14 @@ class BlockDomainService < BaseService 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 42a107a31c..b52e92a4ec 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 fde744bed6..e9b4437035 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 4638afc8e0..1628643bd1 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 085081b15a..98930d11ba 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 11cc8b3318..6232a7eba4 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/ko.yml b/config/locales/ko.yml index 9937375640..a688a2a7d2 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -194,7 +194,7 @@ ko: destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 destroy_email_domain_block: 이메일 도메인 차단 삭제 - destroy_instance: 도메인 퍼지하기 + destroy_instance: 도메인 제거 destroy_ip_block: IP 규칙 삭제 destroy_relay: 릴레이 삭제 destroy_status: 게시물 삭제 @@ -536,7 +536,7 @@ ko: title: 중재 private_comment: 비공개 주석 public_comment: 공개 주석 - purge: 퍼지 + purge: 제거 purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. title: 연합 total_blocked_by_us: 우리에게 차단 됨 @@ -1754,7 +1754,7 @@ ko: lost_followers: 잃은 팔로워 lost_follows: 잃은 팔로우 preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다. - purged: 이 서버의 정보는 관리자가 퍼지하였습니다. + purged: 이 서버에 대한 정보는 관리자에 의해 제거되었습니다. type: 이벤트 statuses: attached: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index fe10dd6462..a8bf2d73fb 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 499b692a28..8103f73929 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 alklako 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 18daa21214..339c034b2a 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: ホームページ、代名詞、年齢など何でも構いません。 @@ -190,6 +191,7 @@ ja: kmyblue: kmyblue labels: account: + attribution_domains: あなたの著者表示を許可するwebサイト discoverable: アカウントを見つけやすくする fields: examples: @@ -310,6 +312,7 @@ ja: setting_hide_quote_unavailable_server: 引用に対応していないと思われるサーバーの投稿からメニューを隠す setting_hide_status_reference_unavailable_server: ひかえめな引用(Fedibirdの参照)に対応していないと思われるサーバーの投稿からメニューを隠す setting_lock_follow_from_bot: botからのフォローを承認制にする + setting_missing_alt_text_modal: 代替テキストなしでメディアを投稿する前に確認ダイアログを表示する setting_public_post_to_unlisted: サードパーティから公開範囲「公開」で投稿した場合、「ローカル公開」に変更する setting_reduce_motion: アニメーションの動きを減らす setting_reject_public_unlisted_subscription: Misskey系サーバーに「ローカル公開」かつ検索許可「誰でも以外」の投稿を「フォロワーのみ」に変換して配送する diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index f390d42132..ff041b257b 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 b42fdc86f5..bbfda8c5fc 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.pl.yml b/config/locales/simple_form.pl.yml index 74dc8218a9..a048fdb99e 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -7,7 +7,7 @@ pl: discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom. display_name: Twoje imię lub pseudonim. fields: Co ci się tylko podoba – twoja strona domowa, zaimki, wiek… - indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy wchodzili w interakcje z twoimi wpisami będą mogli je znaleźć niezależnie od tego ustawienia. + indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy reagowali na Twoje wpisy, będą mogli je znaleźć niezależnie od tego ustawienia. note: 'Możesz @wspomnieć użytkowników albo #hasztagi.' show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli. unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie. diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 500fb4c30e..31bd7b2d6f 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 afc77db563..0ee3ccd9aa 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 72ca2275cf..2ec3bca746 100644 --- a/spec/controllers/admin/accounts_controller_spec.rb +++ b/spec/controllers/admin/accounts_controller_spec.rb @@ -59,16 +59,15 @@ RSpec.describe Admin::AccountsController do 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 6e78ccb3b1..d739b54644 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) + context 'when signed in as regular user' do + before { sign_in Fabricate(:user) } + + it 'responds with unauthorized' do + get :success + + expect(response).to have_http_status(403) + end end - it 'returns private cache control headers' do - routes.draw { get 'success' => 'admin/base#success' } - sign_in(Fabricate(:moderator_user)) - get :success + context 'when signed in as moderator' do + before { sign_in Fabricate(:moderator_user) } - expect(response.headers['Cache-Control']).to include('private, no-store') + it 'returns success with private headers and admin layout' do + get :success + + expect(response) + .to have_http_status(200) + expect(response.headers['Cache-Control']) + .to include('private, no-store') + expect(response.parsed_body) + .to have_css('body.admin') + end end - 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' - end + context 'when signed in as admin' do + before { sign_in Fabricate(:admin_user) } - 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' + 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 83655bafa0..b6508eb38b 100644 --- a/spec/controllers/admin/instances_controller_spec.rb +++ b/spec/controllers/admin/instances_controller_spec.rb @@ -49,23 +49,11 @@ RSpec.describe Admin::InstancesController do 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 d4769a4722..9ecae92801 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -262,8 +262,8 @@ RSpec.describe Auth::SessionsController do 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 @@ -278,8 +278,8 @@ RSpec.describe Auth::SessionsController do 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 @@ -289,8 +289,8 @@ RSpec.describe Auth::SessionsController do 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 @@ -417,8 +417,8 @@ RSpec.describe Auth::SessionsController do 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 @@ -428,8 +428,8 @@ RSpec.describe Auth::SessionsController do 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 01f979ff4c..823003c8de 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 @@ RSpec.describe ChallengableConcern do 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 f414e818f5..0000000000 --- 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 d853fe8ae6..0000000000 --- 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 59fd342199..0000000000 --- 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/settings/two_factor_authentication/recovery_codes_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb deleted file mode 100644 index 0defc52cde..0000000000 --- a/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::TwoFactorAuthentication::RecoveryCodesController do - render_views - - describe 'POST #create' do - it 'updates the codes and shows them on a view when signed in' do - user = Fabricate(:user) - otp_backup_codes = user.generate_otp_backup_codes! - allow(user).to receive(:generate_otp_backup_codes!).and_return(otp_backup_codes) - allow(controller).to receive(:current_user).and_return(user) - - sign_in user, scope: :user - post :create, session: { challenge_passed_at: Time.now.utc } - - expect(flash[:notice]).to eq 'Recovery codes successfully regenerated' - expect(response).to have_http_status(200) - expect(response).to render_template(:index) - expect(response.body) - .to include(*otp_backup_codes) - end - - it 'redirects when not signed in' do - post :create - expect(response).to redirect_to '/auth/sign_in' - end - end -end diff --git a/spec/controllers/settings/two_factor_authentication_methods_controller_spec.rb b/spec/controllers/settings/two_factor_authentication_methods_controller_spec.rb deleted file mode 100644 index c55f113d4d..0000000000 --- a/spec/controllers/settings/two_factor_authentication_methods_controller_spec.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::TwoFactorAuthenticationMethodsController do - render_views - - context 'when not signed in' do - describe 'GET to #index' do - it 'redirects' do - get :index - - expect(response).to redirect_to '/auth/sign_in' - end - end - end - - context 'when signed in' do - let(:user) { Fabricate(:user) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - describe 'when user has enabled otp' do - before do - user.update(otp_required_for_login: true) - get :index - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response.headers['Cache-Control']).to include('private, no-store') - end - end - - describe 'when user has not enabled otp' do - before do - user.update(otp_required_for_login: false) - get :index - end - - it 'redirects to enable otp' do - expect(response).to redirect_to(settings_otp_authentication_path) - end - end - end - - describe 'POST to #disable' do - before do - user.update(otp_required_for_login: true) - end - - context 'when user has not passed challenge' do - it 'renders challenge page' do - post :disable - - expect(response).to have_http_status(200) - expect(response).to render_template('auth/challenges/new') - end - end - - context 'when user has passed challenge' do - before do - mailer = instance_double(ApplicationMailer::MessageDelivery, deliver_later!: true) - allow(UserMailer).to receive(:two_factor_disabled).with(user).and_return(mailer) - end - - it 'redirects to settings page' do - post :disable, session: { challenge_passed_at: 10.minutes.ago } - - expect(UserMailer).to have_received(:two_factor_disabled).with(user) - expect(response).to redirect_to(settings_otp_authentication_path) - end - end - end - end -end diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index e589693b17..9f45afe693 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -9,93 +9,6 @@ RSpec.describe StatusesController do 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 @@ RSpec.describe StatusesController do 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 d1110cc2df..0000000000 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 f5528f13a7..108111c06b 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -48,10 +48,16 @@ RSpec.describe ActivityPub::Activity::Create do 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 0000000000..afb6602a22 --- /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 2c7f907e80..26c4950acc 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/settings/two_factor_authentication/recovery_codes_spec.rb b/spec/requests/settings/two_factor_authentication/recovery_codes_spec.rb new file mode 100644 index 0000000000..30cbfc2a7b --- /dev/null +++ b/spec/requests/settings/two_factor_authentication/recovery_codes_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do + describe 'POST /settings/two_factor_authentication/recovery_codes' do + context 'when signed out' do + it 'redirects to sign in page' do + post settings_two_factor_authentication_recovery_codes_path + + expect(response) + .to redirect_to(new_user_session_path) + end + end + end +end diff --git a/spec/requests/settings/two_factor_authentication_methods_spec.rb b/spec/requests/settings/two_factor_authentication_methods_spec.rb new file mode 100644 index 0000000000..2fda5ce919 --- /dev/null +++ b/spec/requests/settings/two_factor_authentication_methods_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings TwoFactorAuthenticationMethods' do + context 'when not signed in' do + describe 'GET to /settings/two_factor_authentication_methods' do + it 'redirects to sign in page' do + get settings_two_factor_authentication_methods_path + + expect(response) + .to redirect_to(new_user_session_path) + end + end + end + + context 'when signed in' do + let(:user) { Fabricate(:user) } + + before { sign_in user } + + describe 'GET to /settings/two_factor_authentication_methods' do + describe 'when user has not enabled otp' do + before { user.update(otp_required_for_login: false) } + + it 'redirects to enable otp' do + get settings_two_factor_authentication_methods_path + + expect(response) + .to redirect_to(settings_otp_authentication_path) + end + end + end + end +end diff --git a/spec/requests/statuses_spec.rb b/spec/requests/statuses_spec.rb index f86d67d405..e3bf15540a 100644 --- a/spec/requests/statuses_spec.rb +++ b/spec/requests/statuses_spec.rb @@ -45,6 +45,72 @@ RSpec.describe 'Statuses' do .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 @@ RSpec.describe 'Statuses' do 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 49d496e295..6d008840be 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -12,6 +12,7 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do [ { 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 }, ] end diff --git a/spec/system/admin/software_updates_spec.rb b/spec/system/admin/software_updates_spec.rb index f49c5a3c87..e62b6a8cfe 100644 --- a/spec/system/admin/software_updates_spec.rb +++ b/spec/system/admin/software_updates_spec.rb @@ -5,6 +5,7 @@ require 'rails_helper' 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 @@ RSpec.describe 'finding software updates through the admin interface' do expect(page).to have_title(I18n.t('admin.software_updates.title')) expect(page).to have_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 0000000000..2460817f94 --- /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 0000000000..b59be5ac1f --- /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 0000000000..9d9062ad2c --- /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/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb b/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb new file mode 100644 index 0000000000..ba8491429c --- /dev/null +++ b/spec/system/settings/two_factor_authentication/recovery_codes_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do + describe 'Generating recovery codes' do + let(:user) { Fabricate :user, otp_required_for_login: true } + let(:backup_code) { +'147e7284c95bd260b91ed17820860019' } + + before do + stub_code_generator + sign_in(user) + end + + it 'updates the codes and includes them in the view' do + # Attempt to generate codes + visit settings_two_factor_authentication_methods_path + click_on I18n.t('two_factor_authentication.generate_recovery_codes') + + # Fill in challenge password + fill_in 'form_challenge_current_password', with: user.password + + expect { click_on I18n.t('challenge.confirm') } + .to(change { user.reload.otp_backup_codes }) + + expect(page) + .to have_content(I18n.t('two_factor_authentication.recovery_codes_regenerated')) + .and have_title(I18n.t('settings.two_factor_authentication')) + .and have_css('ol.recovery-codes') + .and have_content(backup_code) + end + + def stub_code_generator + allow(SecureRandom).to receive(:hex).and_return(backup_code) + end + end +end diff --git a/spec/system/settings/two_factor_authentication_methods_spec.rb b/spec/system/settings/two_factor_authentication_methods_spec.rb new file mode 100644 index 0000000000..bed226deb5 --- /dev/null +++ b/spec/system/settings/two_factor_authentication_methods_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings TwoFactorAuthenticationMethods' do + context 'when signed in' do + let(:user) { Fabricate(:user) } + + before { sign_in user } + + describe 'Managing 2FA methods' do + before { user.update(otp_required_for_login: true) } + + it 'disables 2FA with challenge confirmation', :inline_jobs do + visit settings_two_factor_authentication_methods_path + expect(page) + .to have_content(I18n.t('settings.two_factor_authentication')) + .and have_private_cache_control + + # Attempt to disable + click_on I18n.t('two_factor_authentication.disable') + expect(page) + .to have_title(I18n.t('challenge.prompt')) + + # Fill in challenge form + fill_in 'form_challenge_current_password', with: user.password + emails = capture_emails do + expect { click_on I18n.t('challenge.confirm') } + .to change { user.reload.otp_required_for_login }.to(false) + end + + expect(page) + .to have_content(I18n.t('two_factor_authentication.disabled_success')) + expect(emails.first) + .to be_present + .and(deliver_to(user.email)) + .and(have_subject(I18n.t('devise.mailer.two_factor_disabled.subject'))) + end + end + end +end diff --git a/yarn.lock b/yarn.lock index de67e53a46..62df8db858 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" - dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.7": - version: 7.26.7 - resolution: "@babel/traverse@npm:7.26.7" +"@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.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" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 10c0/b23a36ce40d2e4970741431c45d4f92e3f4c2895c0a421456516b2729bd9e17278846e01ee3d9039b0adf5fc5a071768061c17fcad040e74a5c3e39517449d5b + "@babel/parser": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" + checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213 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/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.8" + "@babel/parser": "npm:^7.26.8" + "@babel/template": "npm:^7.26.8" + "@babel/types": "npm:^7.26.8" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/0771d1ce0351628ad2e8dac56f0d59f706eb125c83fbcc039bde83088ba0a1477244ad5fb060802f90366cc4d7fa871e5009a292aef6205bcf83f2e01d1a0a5d + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.7, @babel/types@npm:^7.26.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.26.8 + resolution: "@babel/types@npm:7.26.8" dependencies: "@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 @@ -1657,12 +1658,12 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-initial@npm:^2.0.0": - version: 2.0.0 - resolution: "@csstools/postcss-initial@npm:2.0.0" +"@csstools/postcss-initial@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-initial@npm:2.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/44c443cba84cc66367f2082bf20db06c8437338c02c244c38798c5bf5342932d89fed0dd13e4409f084ecf7fce47ae6394e9a7a006fd98a973decfa24ab1eb04 + checksum: 10c0/dbff7084ef4f1c4647efe2b147001daf172003c15b5e22689f0540d03c8d362f2a332cd9cf136e6c8dcda7564ee30492a4267ea188f72cb9c1000fb9bcfbfef8 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-pluralrules@npm:^5.2.2": - version: 5.4.2 - resolution: "@formatjs/intl-pluralrules@npm:5.4.2" +"@formatjs/intl-localematcher@npm:0.6.0": + version: 0.6.0 + resolution: "@formatjs/intl-localematcher@npm:0.6.0" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" - "@formatjs/intl-localematcher": "npm:0.5.10" - decimal.js: "npm:10" tslib: "npm:2" - checksum: 10c0/0ecb9da19084d7a15e636362c206c7ee14297ad365e3e63ea53c82c8442d02cd4dcf8a0da65af9b0f835b32f0e8c3d43407d6ee0a0d7974c3044c92574b49686 + checksum: 10c0/90238e633426ff7237ab2bbe017be044fb2fb185a8d59a0652096ddab9cb1ddf64106d58fafd711ea19c4d3455bd966516ab93574ac3b169d9af2325875fae59 languageName: node linkType: hard -"@formatjs/intl@npm:3.1.3": - version: 3.1.3 - resolution: "@formatjs/intl@npm:3.1.3" +"@formatjs/intl-pluralrules@npm:^5.2.2": + version: 5.4.3 + resolution: "@formatjs/intl-pluralrules@npm:5.4.3" dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.2" + "@formatjs/ecma402-abstract": "npm:2.3.3" + "@formatjs/intl-localematcher": "npm:0.6.0" + decimal.js: "npm:10" + tslib: "npm:2" + checksum: 10c0/ffebb0fa56e0a8452a5e948a0ae38902daa138fc5c7638732697fb1648d8fb4d42883dbff7531e09468a498a85ef9cb4f443f916544a683f8d4c18d2fca8b69a + languageName: node + linkType: hard + +"@formatjs/intl@npm:3.1.4": + version: 3.1.4 + resolution: "@formatjs/intl@npm:3.1.4" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.3.3" "@formatjs/fast-memoize": "npm:2.2.6" - "@formatjs/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 @@ -3792,6 +3793,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" @@ -5319,21 +5327,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 @@ -5424,6 +5432,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" @@ -5763,17 +5783,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.3, browserslist@npm:^4.24.0, browserslist@npm:^4.24.3, browserslist@npm:^4.24.4": + 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 @@ -5965,10 +5985,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 @@ -6471,12 +6491,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 @@ -7536,10 +7556,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 @@ -7876,10 +7896,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 @@ -9868,15 +9888,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 @@ -12427,10 +12447,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 @@ -13101,19 +13121,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 @@ -13146,13 +13166,13 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.13.1 - resolution: "pg@npm:8.13.1" + version: 8.13.3 + resolution: "pg@npm:8.13.3" 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: @@ -13163,7 +13183,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/c13bc661cbdb115337bc8519254836faf4bd79106dfd7ed588c8ece8c8b2dd3b7376bfec9a9a2f7646fa095b0b310cec77a83c3ba2ea4872331446eb93fd9055 + checksum: 10c0/7296f0e5930b35faef471be2673210cda553b30f1b8e9d176fcc286aa43248e17e09336032bf5a6bba55d2cc2d03afb8a407b5a6e6bc56ebb331c02d1a7ccc05 languageName: node linkType: hard @@ -13176,7 +13196,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 @@ -13939,8 +13959,8 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.1.3 - resolution: "postcss-preset-env@npm:10.1.3" + version: 10.1.4 + resolution: "postcss-preset-env@npm:10.1.4" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.1" "@csstools/postcss-color-function": "npm:^4.0.7" @@ -13952,7 +13972,7 @@ __metadata: "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.7" "@csstools/postcss-hwb-function": "npm:^4.0.7" "@csstools/postcss-ic-unit": "npm:^4.0.0" - "@csstools/postcss-initial": "npm:^2.0.0" + "@csstools/postcss-initial": "npm:^2.0.1" "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" "@csstools/postcss-light-dark-function": "npm:^2.0.7" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" @@ -13975,7 +13995,7 @@ __metadata: "@csstools/postcss-trigonometric-functions": "npm:^4.0.6" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" - browserslist: "npm:^4.23.1" + browserslist: "npm:^4.24.4" css-blank-pseudo: "npm:^7.0.1" css-has-pseudo: "npm:^7.0.2" css-prefers-color-scheme: "npm:^10.0.0" @@ -14007,7 +14027,7 @@ __metadata: postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/0ae02015ad3ac69e8ef26afc1a06cb9fbb400104eca5c69a4baa20925e06364712f05b5d87ec9cf9445256e62344e6c2bad8d261a09b35a0e982e055564e3ba8 + checksum: 10c0/bd3ad0a32fa30e53f4fdfb980b77d4e86a53ad40681dd8f7d2d9fb00728730b426cd7d039b57f0849261014e4c9e5a55f72edfda1c70165c96a52f246d273ebb languageName: node linkType: hard @@ -14141,13 +14161,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 @@ -14598,16 +14618,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 @@ -14615,7 +14635,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/9d8d5afae16d26466f82fc1c0b8c4afd7559a8faa5b3ef31983a0af540b1b225fa89208b48bf9ec83056c0a27f2972fb86f2717422f788efdc819fb0e0846134 + checksum: 10c0/6ccb6ba40e30079822994eb36f76c8631d5f31f5826f1fa62b00371be6efd1481b094285f7f1f672c01705dfe9b36b91ce89df35f61d7bb293e5709d7f07d1b7 languageName: node linkType: hard @@ -17621,17 +17641,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