diff --git a/.rubocop.yml b/.rubocop.yml index ebeed6ea4900ca..bba4282855cbc6 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -26,9 +26,11 @@ inherit_mode: merge: - Exclude -require: +plugins: - rubocop-rails - rubocop-rspec - - rubocop-rspec_rails - rubocop-performance + +require: + - rubocop-rspec_rails - rubocop-capybara diff --git a/.rubocop/rails.yml b/.rubocop/rails.yml index ae31c1f266142e..bbd172e65606ca 100644 --- a/.rubocop/rails.yml +++ b/.rubocop/rails.yml @@ -2,6 +2,9 @@ Rails/BulkChangeTable: Enabled: false # Conflicts with strong_migrations features +Rails/Delegate: + Enabled: false + Rails/FilePath: EnforcedStyle: arguments diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index d6cb4792e1b4a0..9c9751775e7326 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp` -# using RuboCop version 1.70.0. +# using RuboCop version 1.72.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new diff --git a/.ruby-version b/.ruby-version index 47b322c971c3ce..4d9d11cf505d5d 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.4.1 +3.4.2 diff --git a/Dockerfile b/Dockerfile index 4e1bb24ff8f850..28a77e460b8358 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io" # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"] # renovate: datasource=docker depName=docker.io/ruby -ARG RUBY_VERSION="3.4.1" +ARG RUBY_VERSION="3.4.2" # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="22" diff --git a/Gemfile.lock b/Gemfile.lock index 520bfbc8cc4541..9f8257891f607d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,7 +90,7 @@ GEM public_suffix (>= 2.0.2, < 7.0) aes_key_wrap (1.1.0) android_key_attestation (0.3.0) - annotaterb (4.13.0) + annotaterb (4.14.0) ast (2.4.2) attr_required (1.0.2) aws-eventstream (1.3.0) @@ -383,10 +383,11 @@ GEM railties (>= 6.1) rexml link_header (0.0.8) + lint_roller (1.1.0) llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - logger (1.6.5) + logger (1.6.6) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -722,9 +723,10 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.13.2) - rubocop (1.71.2) + rubocop (1.72.2) json (~> 2.3) - language_server-protocol (>= 3.17.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) @@ -736,16 +738,19 @@ GEM parser (>= 3.3.1.0) rubocop-capybara (2.21.0) rubocop (~> 1.41) - rubocop-performance (1.23.1) - rubocop (>= 1.48.1, < 2.0) - rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.29.1) + rubocop-performance (1.24.0) + lint_roller (~> 1.1) + rubocop (>= 1.72.1, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) + rubocop-rails (2.30.1) activesupport (>= 4.2.0) + lint_roller (~> 1.1) rack (>= 1.1) - rubocop (>= 1.52.0, < 2.0) - rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.4.0) - rubocop (~> 1.61) + rubocop (>= 1.72.1, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) + rubocop-rspec (3.5.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) rubocop-rspec (~> 3, >= 3.0.1) @@ -863,7 +868,7 @@ GEM public_suffix warden (1.2.9) rack (>= 2.0.9) - webauthn (3.3.0) + webauthn (3.4.0) android_key_attestation (~> 0.3.0) bindata (~> 2.4) cbor (~> 0.5.9) diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index a71344ffe699ac..6a52c706b45d86 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -305,6 +305,9 @@ "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.", + "empty_column.follow_requests": "İzləmə sorğularınız yoxdur. Qəbul etdikdə burada görəcəksiniz.", + "empty_column.followed_tags": "Heç bir heşteq izləmirsiniz. İzlədikdə burada görünəcək.", + "empty_column.hashtag": "Bu heşteqdə hələ ki, heç nə yoxdur.", "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 f910db135c4a38..7bdf138d9237c4 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -212,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": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 57f58e93eebd34..f75a8c973b7739 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 alternativa 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", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index fab5775e907daf..e4b01c8a3b75dc 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -35,8 +35,8 @@ "account.followers": "Seuraajat", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}", - "account.following": "Seuratut", - "account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}", + "account.following": "Seurattavat", + "account.following_counter": "{count, plural, one {{counter} seurattava} other {{counter} seurattavaa}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.go_to_profile": "Siirry profiiliin", "account.hide_reblogs": "Piilota käyttäjän @{name} tehostukset", @@ -260,8 +260,8 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", - "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattusi} other {{followingCountDisplay} seurattuasi}}.", - "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattusi.", + "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattavasi} other {{followingCountDisplay} seurattavaasi}}.", + "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattavasi.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", @@ -365,7 +365,7 @@ "follow_suggestions.similar_to_recently_followed_longer": "Samankaltainen kuin äskettäin seuraamasi profiilit", "follow_suggestions.view_all": "Näytä kaikki", "follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi", - "followed_tags": "Seuratut aihetunnisteet", + "followed_tags": "Seurattavat aihetunnisteet", "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", "footer.get_app": "Hanki sovellus", @@ -393,10 +393,10 @@ "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", "hashtags.and_other": "…ja {count, plural, other {# lisää}}", "hints.profiles.followers_may_be_missing": "Tämän profiilin seuraajia saattaa puuttua.", - "hints.profiles.follows_may_be_missing": "Tämän profiilin seurattuja saattaa puuttua.", + "hints.profiles.follows_may_be_missing": "Tämän profiilin seurattavia saattaa puuttua.", "hints.profiles.posts_may_be_missing": "Tämän profiilin julkaisuja saattaa puuttua.", "hints.profiles.see_more_followers": "Näytä lisää seuraajia palvelimella {domain}", - "hints.profiles.see_more_follows": "Näytä lisää seurattuja palvelimella {domain}", + "hints.profiles.see_more_follows": "Näytä lisää seurattavia palvelimella {domain}", "hints.profiles.see_more_posts": "Näytä lisää julkaisuja palvelimella {domain}", "hints.threads.replies_may_be_missing": "Muiden palvelinten vastauksia saattaa puuttua.", "hints.threads.see_more": "Näytä lisää vastauksia palvelimella {domain}", @@ -503,7 +503,7 @@ "lists.no_members_yet": "Ei vielä jäseniä.", "lists.no_results_found": "Tuloksia ei löytynyt.", "lists.remove_member": "Poista", - "lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle", + "lists.replies_policy.followed": "Jokaiselle seurattavalle käyttäjälle", "lists.replies_policy.list": "Listan jäsenille", "lists.replies_policy.none": "Ei kellekään", "lists.save": "Tallenna", @@ -536,8 +536,8 @@ "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seurantapyynnöt", - "navigation_bar.followed_tags": "Seuratut aihetunnisteet", - "navigation_bar.follows_and_followers": "Seuratut ja seuraajat", + "navigation_bar.followed_tags": "Seurattavat aihetunnisteet", + "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.moderation": "Moderointi", @@ -588,9 +588,9 @@ "notification.reblog.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} tehostivat julkaisuasi", "notification.relationships_severance_event": "Menetettiin yhteydet palvelimeen {name}", "notification.relationships_severance_event.account_suspension": "Palvelimen {from} ylläpitäjä on jäädyttänyt palvelimen {target} vuorovaikutuksen. Enää et voi siis vastaanottaa päivityksiä heiltä tai olla yhteyksissä heidän kanssaan.", - "notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen – mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.", + "notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen – mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.", "notification.relationships_severance_event.learn_more": "Lue lisää", - "notification.relationships_severance_event.user_domain_block": "Olet estänyt verkkotunnuksen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.", + "notification.relationships_severance_event.user_domain_block": "Olet estänyt palvelimen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.", "notification.status": "{name} julkaisi juuri", "notification.update": "{name} muokkasi julkaisua", "notification_requests.accept": "Hyväksy", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 3e543e938aeb4e..2587a7f00915db 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -11,13 +11,16 @@ "about.not_available": "Ev zanyarî li ser vê rajekarê nehatine peydakirin.", "about.powered_by": "Medyaya civakî ya nenavendî bi hêzdariya {mastodon}", "about.rules": "Rêbazên rajekar", + "account.account_note_header": "Nîşeyên kesane", "account.add_or_remove_from_list": "Li lîsteyan zêde bike yan jî rake", "account.badges.bot": "Bot", "account.badges.group": "Kom", "account.block": "@{name} asteng bike", "account.block_domain": "Navpera {domain} asteng bike", + "account.block_short": "Asteng bike", "account.blocked": "Astengkirî", "account.cancel_follow_request": "Daxwaza şopandinê vekişîne", + "account.copy": "Girêdanê bo profîlê jê bigire", "account.direct": "Bi taybetî qale @{name} bike", "account.disable_notifications": "Êdî min agahdar neke gava @{name} diweşîne", "account.domain_blocked": "Navper hate astengkirin", @@ -28,9 +31,12 @@ "account.featured_tags.last_status_never": "Şandî tune ne", "account.featured_tags.title": "{name}'s hashtagên taybet", "account.follow": "Bişopîne", + "account.follow_back": "Bişopîne", "account.followers": "Şopîner", "account.followers.empty": "Kesekî hin ev bikarhêner neşopandiye.", + "account.followers_counter": "{count, plural, one {{counter} şopîner} other {{counter} şopîner}}", "account.following": "Dişopîne", + "account.following_counter": "{count, plural, one {{counter} dişopîne} other {{counter} dişopîne}}", "account.follows.empty": "Ev bikarhêner hin kesekî heya niha neşopandiye.", "account.go_to_profile": "Biçe bo profîlê", "account.hide_reblogs": "Bilindkirinên ji @{name} veşêre", @@ -43,7 +49,11 @@ "account.mention": "Qal @{name} bike", "account.moved_to": "{name} diyar kir ku ajimêra nû ya wan niha ev e:", "account.mute": "@{name} bêdeng bike", + "account.mute_notifications_short": "Agahdariyan bêdeng bike", + "account.mute_short": "Bêdeng bike", "account.muted": "Bêdengkirî", + "account.mutual": "Hevpar", + "account.no_bio": "Ti danasîn nehatiye tevlîkirin.", "account.open_original_page": "Rûpela resen veke", "account.posts": "Şandî", "account.posts_with_replies": "Şandî û bersiv", @@ -52,12 +62,14 @@ "account.requested_follow": "{name} dixwaze te bişopîne", "account.share": "Profîla @{name} parve bike", "account.show_reblogs": "Bilindkirinên ji @{name} nîşan bike", + "account.statuses_counter": "{count, plural,one {{counter} şandî}other {{counter} şandî}}", "account.unblock": "Astengê li ser @{name} rake", "account.unblock_domain": "Astengê li ser navperê {domain} rake", "account.unblock_short": "Astengiyê rake", "account.unendorse": "Li ser profîl nîşan neke", "account.unfollow": "Neşopîne", "account.unmute": "@{name} bêdeng neke", + "account.unmute_notifications_short": "Agahdariyan bêdeng bike", "account.unmute_short": "Bêdeng neke", "account_note.placeholder": "Bitikîne bo nîşeyekê tevlî bikî", "admin.dashboard.daily_retention": "Rêjeya ragirtina bikarhêner bi roj piştî tomarkirinê", @@ -69,9 +81,18 @@ "alert.rate_limited.title": "Rêje sînorkirî ye", "alert.unexpected.message": "Çewtiyeke bêhêvî çê bû.", "alert.unexpected.title": "Wey li min!", + "alt_text_modal.cancel": "Têk bibe", + "alt_text_modal.change_thumbnail": "Wêneyê biçûk biguherîne", + "alt_text_modal.done": "Qediya", "announcement.announcement": "Daxuyanî", + "annual_report.summary.followers.followers": "şopîner", + "annual_report.summary.followers.total": "{count} tevahî", + "annual_report.summary.new_posts.new_posts": "şandiyên nû", "attachments_list.unprocessed": "(bêpêvajo)", "audio.hide": "Dengê veşêre", + "block_modal.show_less": "Kêmtir nîşan bide", + "block_modal.show_more": "Bêtir nîşan bide", + "block_modal.title": "Bikarhêner asteng bike?", "boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike", "bundle_column_error.copy_stacktrace": "Rapora çewtiyê jê bigire", "bundle_column_error.error.body": "Rûpela xwestî nehate pêşkêşkirin. Dibe ku ew ji ber şaşetiyeke koda me, an jî pirsgirêkeke lihevhatina gerokê be.", @@ -141,10 +162,12 @@ "confirmations.logout.message": "Ma tu dixwazî ku derkevî?", "confirmations.mute.confirm": "Bêdeng bike", "confirmations.redraft.confirm": "Jê bibe & ji nû ve serrast bike", + "confirmations.redraft.message": "Bi rastî tu dixwazî şandî ye jê bibî û ji nû ve reşnivîsek çê bikî? Bijarte û şandî wê wenda bibin û bersivên ji bo şandiyê resen wê sêwî bimînin.", "confirmations.reply.confirm": "Bersivê bide", "confirmations.reply.message": "Bersiva niha li ser peyama ku tu niha berhev dikî dê binivsîne. Ma pê bawer î ku tu dixwazî bidomînî?", "confirmations.unfollow.confirm": "Neşopîne", "confirmations.unfollow.message": "Ma tu dixwazî ku dev ji şopa {name} berdî?", + "content_warning.show_more": "Bêtir nîşan bide", "conversation.delete": "Axaftinê jê bibe", "conversation.mark_as_read": "Wekî xwendî nîşan bide", "conversation.open": "Axaftinê nîşan bide", @@ -158,6 +181,9 @@ "disabled_account_banner.text": "Ajimêrê te {disabledAccount} niha neçalak e.", "dismissable_banner.community_timeline": "Ev şandiyên giştî yên herî dawî ji kesên ku ajimêrê wan ji aliyê {domain} ve têne pêşkêşkirin.", "dismissable_banner.dismiss": "Paşguh bike", + "domain_block_modal.block": "Rajekar asteng bike", + "domain_pill.server": "Rajekar", + "domain_pill.username": "Navê bikarhêner", "embed.instructions": "Bi jêgirtina koda jêrîn vê şandiyê li ser malpera xwe bi cih bike.", "embed.preview": "Ew ê çawa xuya bibe li vir tê nîşandan:", "emoji_button.activity": "Çalakî", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index f32399e832bd76..252d8200689f0c 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -250,9 +250,27 @@ "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", + "dismissable_banner.explore_links": "Tsiah ê新聞故事是kín-á日tī Fediverse hōo lâng分享上tsē pái ê。Hōo koh khah tsē lâng 分享ê khah新ê新聞故事,名次koh khah kuân。", + "dismissable_banner.explore_statuses": "Tsiah ê tuì Fediverse來ê PO文kín-á日有真tsē關注。Khah新ê,有khah tsē轉送kap收藏ê,名次koh khah kuân。", + "dismissable_banner.explore_tags": "Tsiah ê hashtag kín-á日tī Fediverse 有真tsē關注。Khah tsē無kâng ê lâng leh用ê hashtag,名次koh khah kuân。", + "dismissable_banner.public_timeline": "Tsiah ê是 {domain} 內底ê lâng 佇 Fediverse所跟tuè ê ê,上新ê公開PO文。.", "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交流。", + "domain_block_modal.they_cant_follow": "Tuì tsit ê服侍器來ê 通跟tuè lí。", + "domain_block_modal.they_wont_know": "In buē知影in受封鎖。", + "domain_block_modal.title": "Kám beh封鎖域名?", + "domain_block_modal.you_will_lose_num_followers": "Lí ē失去 {followersCount, plural, other {{followersCountDisplay} ê lâng跟tuè}} kap {followingCount, plural, other {{followingCountDisplay} ê lí所tuè ê 口座}}。", + "domain_block_modal.you_will_lose_relationships": "Lí ē失去逐ê佇tsit ê服侍器跟tuè lí ê,kap lí所跟tuè ê。", + "domain_block_modal.you_wont_see_posts": "Lí buē看見tsit ê服侍器ê用者所送ê PO文kap通知。", + "domain_pill.activitypub_lets_connect": "伊ē hōo lí kap Mastodon ê lâng連結kap互動,其他社交應用程式ê lâng mā ē使。", + "domain_pill.activitypub_like_language": "ActivityPub親像Mastodon kap其他社交應用程式所講ê語言。", + "domain_pill.server": "服侍器", + "domain_pill.their_handle": "In ê口座:", + "domain_pill.their_server": "In數位ê tau,in所有ê PO文lóng tī tsia。", + "domain_pill.their_username": "In佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。", + "domain_pill.username": "用者ê名", + "domain_pill.whats_in_a_handle": "口座是siánn-mih?", "embed.preview": "伊e án-ne顯示:\n", "emoji_button.activity": "活動", "emoji_button.clear": "清掉", @@ -273,6 +291,52 @@ "empty_column.account_suspended": "口座已經受停止", "empty_column.account_timeline": "Tsia無PO文!", "empty_column.account_unavailable": "個人資料bē當看", + "errors.unexpected_crash.copy_stacktrace": "Khóo-pih stacktrace kàu剪貼pang-á", + "errors.unexpected_crash.report_issue": "報告問題", + "explore.suggested_follows": "用者", + "explore.title": "探索", + "explore.trending_links": "新聞", + "firehose.remote": "別ê服侍器", + "follow_request.authorize": "授權", + "follow_request.reject": "拒絕", + "follow_requests.unlocked_explanation": "就算lí ê口座無hőng鎖,{domain} ê管理員leh想,lí可能beh手動審查tuì tsiah ê口座送ê跟tuè請求。", + "follow_suggestions.curated_suggestion": "精選ê內容", + "follow_suggestions.dismiss": "Mài koh顯示。", + "follow_suggestions.featured_longer": "{domain} 團隊所揀ê", + "follow_suggestions.friends_of_friends_longer": "時行佇lí所tuè ê lâng", + "follow_suggestions.personalized_suggestion": "個人化ê推薦", + "follow_suggestions.popular_suggestion": "流行ê推薦", + "follow_suggestions.popular_suggestion_longer": "佇{domain} 足有lâng緣", + "follow_suggestions.similar_to_recently_followed_longer": "Kap lí最近跟tuè ê相siâng", + "follow_suggestions.view_all": "看全部", + "follow_suggestions.who_to_follow": "Thang tuè ê", + "followed_tags": "跟tuè ê hashtag", + "footer.about": "概要", + "footer.directory": "個人資料ê目錄", + "footer.get_app": "The̍h著app", + "footer.keyboard_shortcuts": "鍵盤kiu-té khí (shortcut)", + "footer.privacy_policy": "隱私權政策", + "footer.source_code": "看原始碼", + "footer.status": "狀態", + "footer.terms_of_service": "服務規定", + "generic.saved": "儲存ah", + "getting_started.heading": "開始用", + "hashtag.admin_moderation": "Phah開 #{name} ê管理界面", + "hashtag.column_header.tag_mode.all": "kap {additional}", + "hashtag.column_header.tag_mode.any": "á是 {additional}", + "hashtag.column_header.tag_mode.none": "無需要 {additional}", + "hashtag.column_settings.select.no_options_message": "Tshuē無建議", + "hashtag.column_settings.select.placeholder": "請輸入hashtag……", + "hashtag.column_settings.tag_mode.all": "Kui ê", + "hashtag.column_settings.tag_mode.any": "任何tsi̍t ê", + "hashtag.column_settings.tag_mode.none": "Lóng mài", + "hashtag.column_settings.tag_toggle": "Kā追加ê標籤加添kàu tsit ê欄", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} ê} other {{counter} ê}}參與ê", + "hashtag.counter_by_uses": "{count, plural, one {{counter} ê} other {{counter} ê}} PO文", + "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} ê} other {{counter} ê}} PO文", + "hashtag.follow": "跟tuè hashtag", + "hashtag.unfollow": "取消跟tuè hashtag", + "hashtags.and_other": "……kap 其他 {count, plural, other {# ê}}", "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/pl.json b/app/javascript/mastodon/locales/pl.json index 788a08ec39caec..e48b02aaf3eee2 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,79 +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.confirm": "Dodaj tekst alternatywny", - "confirmations.missing_alt_text.message": "Twój wpis zawiera treści graficzne bez opisu pomocniczego. Dodając opis, sprawisz, że będzie on bardziej dostępny dla większej liczby osób.", - "confirmations.missing_alt_text.secondary": "Publikuj mimo to", - "confirmations.missing_alt_text.title": "Dodać tekst alternatywny?", + "confirmations.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", @@ -293,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}", @@ -487,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", @@ -722,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/sv.json b/app/javascript/mastodon/locales/sv.json index 21a620b3ec79cb..29df14cc137c03 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -219,6 +219,9 @@ "confirmations.logout.message": "Är du säker på att du vill logga ut?", "confirmations.logout.title": "Logga ut?", "confirmations.missing_alt_text.confirm": "Lägg till alt-text", + "confirmations.missing_alt_text.message": "Ditt inlägg innehåller media utan alt-text. Om du lägger till beskrivningar blir ditt innehåll tillgängligt för fler personer.", + "confirmations.missing_alt_text.secondary": "Posta ändå", + "confirmations.missing_alt_text.title": "Lägg till alt-text?", "confirmations.mute.confirm": "Tysta", "confirmations.redraft.confirm": "Radera & gör om", "confirmations.redraft.message": "Är du säker på att du vill radera detta inlägg och göra om det? Favoritmarkeringar, boostar och svar till det ursprungliga inlägget kommer förlora sitt sammanhang.", @@ -416,6 +419,7 @@ "ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?", "ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oombedda privata omnämnanden?", "info_button.label": "Hjälp", + "info_button.what_is_alt_text": "

Vad är alt-text?

alt-text ger bildbeskrivningar för personer med synnedsättning, anslutningar med låg bandbredd eller de som söker extra sammanhang.

Du kan förbättra tillgängligheten och förståelsen för alla genom att skriva en tydlig, koncis och objektiv alt-text.

", "interaction_modal.action.favourite": "För att fortsätta, måste du favoritmarkera från ditt konto.", "interaction_modal.action.follow": "För att fortsätta, måste du följa från ditt konto.", "interaction_modal.action.reblog": "För att fortsätta, måste du boosta från ditt konto.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 2959572ebcfa0d..7e63210adef640 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -86,6 +86,13 @@ "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", "alt_text_badge.title": "ข้อความแสดงแทน", + "alt_text_modal.add_alt_text": "เพิ่มข้อความแสดงแทน", + "alt_text_modal.add_text_from_image": "เพิ่มข้อความจากภาพ", + "alt_text_modal.cancel": "ยกเลิก", + "alt_text_modal.change_thumbnail": "เปลี่ยนภาพขนาดย่อ", + "alt_text_modal.describe_for_people_with_hearing_impairments": "อธิบายสิ่งนี้สำหรับผู้คนที่มีความบกพร่องทางการได้ยิน…", + "alt_text_modal.describe_for_people_with_visual_impairments": "อธิบายสิ่งนี้สำหรับผู้คนที่มีความบกพร่องทางการมองเห็น…", + "alt_text_modal.done": "เสร็จสิ้น", "announcement.announcement": "ประกาศ", "annual_report.summary.archetype.booster": "ผู้ล่าความเจ๋ง", "annual_report.summary.archetype.lurker": "ผู้ซุ่มอ่านข่าว", @@ -208,6 +215,10 @@ "confirmations.logout.confirm": "ออกจากระบบ", "confirmations.logout.message": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?", "confirmations.logout.title": "ออกจากระบบ?", + "confirmations.missing_alt_text.confirm": "เพิ่มข้อความแสดงแทน", + "confirmations.missing_alt_text.message": "โพสต์ของคุณมีสื่อที่ไม่มีข้อความแสดงแทน การเพิ่มคำอธิบายช่วยทำให้เนื้อหาของคุณเข้าถึงผู้คนได้มากขึ้น", + "confirmations.missing_alt_text.secondary": "โพสต์ต่อไป", + "confirmations.missing_alt_text.title": "เพิ่มข้อความแสดงแทน?", "confirmations.mute.confirm": "ซ่อน", "confirmations.redraft.confirm": "ลบแล้วร่างใหม่", "confirmations.redraft.message": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้แล้วร่างโพสต์ใหม่? รายการโปรดและการดันจะสูญหาย และการตอบกลับโพสต์ดั้งเดิมจะไม่มีความเกี่ยวพัน", @@ -400,6 +411,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.action.reblog": "เพื่อดำเนินการต่อ คุณจำเป็นต้องดันจากบัญชีของคุณ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 589037af4d9333..fe32b274f66320 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -148,7 +148,7 @@ "column.bookmarks": "Yer İşaretleri", "column.community": "Yerel ağ akışı", "column.create_list": "Liste oluştur", - "column.direct": "Özel değinmeler", + "column.direct": "Özel mesajlar", "column.directory": "Profillere göz at", "column.domain_blocks": "Engellenen alan adları", "column.edit_list": "Listeyi düzenle", @@ -444,7 +444,7 @@ "keyboard_shortcuts.column": "Sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "Yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", - "keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için", + "keyboard_shortcuts.direct": "özel mesajlar sütununu açmak için", "keyboard_shortcuts.down": "Listede aşağıya inmek için", "keyboard_shortcuts.enter": "Gönderiyi açınız", "keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle", @@ -529,7 +529,7 @@ "navigation_bar.bookmarks": "Yer İşaretleri", "navigation_bar.community_timeline": "Yerel ağ akışı", "navigation_bar.compose": "Yeni gönderi yaz", - "navigation_bar.direct": "Özel değinmeler", + "navigation_bar.direct": "Özel mesajlar", "navigation_bar.discover": "Keşfet", "navigation_bar.domain_blocks": "Engellenen alan adları", "navigation_bar.explore": "Keşfet", @@ -662,10 +662,10 @@ "notifications.policy.filter_not_following_hint": "Onları manuel olarak onaylayana kadar", "notifications.policy.filter_not_following_title": "Takip etmediğin kullanıcılar", "notifications.policy.filter_private_mentions_hint": "Kendi değinmenize yanıt veya takip ettiğiniz kullanıcıdan değilse filtrelenir", - "notifications.policy.filter_private_mentions_title": "İstenmeyen özel değinmeler", + "notifications.policy.filter_private_mentions_title": "İstenmeyen özel mesajlar", "notifications.policy.title": "Şundan bildirimleri yönet…", "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", - "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", + "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra, yukarıdaki{icon} düğmesi aracılığıyla hangi etkileşim türlerinin masaüstü bildirimi oluşturacağını tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", "onboarding.follows.back": "Geri", "onboarding.follows.done": "Tamamlandı", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index a096db73da38b9..c165161308408e 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -78,8 +78,8 @@ "admin.dashboard.retention.cohort": "注册月份", "admin.dashboard.retention.cohort_size": "新用户", "admin.impact_report.instance_accounts": "将被删除的账号", - "admin.impact_report.instance_followers": "本实例用户即将丢失的关注者", - "admin.impact_report.instance_follows": "对方实例用户将会丢失的关注者", + "admin.impact_report.instance_followers": "本站用户即将丢失的关注者", + "admin.impact_report.instance_follows": "对方站点用户即将丢失的关注者", "admin.impact_report.title": "影响摘要", "alert.rate_limited.message": "请在 {retry_time, time, medium} 后重试。", "alert.rate_limited.title": "频率受限", @@ -219,7 +219,7 @@ "confirmations.logout.message": "确定要退出登录吗?", "confirmations.logout.title": "确定要退出登录?", "confirmations.missing_alt_text.confirm": "添加替代文本", - "confirmations.missing_alt_text.message": "您的帖子包含没有添加替代文本的媒体。添加描述有助于使更多人访问您的内容。", + "confirmations.missing_alt_text.message": "你的帖子包含没有替代文本的媒体。添加描述有助于使更多用户理解你的内容。", "confirmations.missing_alt_text.secondary": "就这样发布", "confirmations.missing_alt_text.title": "添加替代文本?", "confirmations.mute.confirm": "隐藏", @@ -298,7 +298,7 @@ "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你还未屏蔽任何用户。", - "empty_column.bookmarked_statuses": "你还没有收藏任何嘟文。收藏后嘟文就会显示在这里。", + "empty_column.bookmarked_statuses": "你还没有给任何嘟文添加书签。添加书签后的嘟文会显示在这里。", "empty_column.community": "本站时间线还没有内容,写点什么并公开发布,让它活跃起来吧!", "empty_column.direct": "你还未使用过私下提及。当你发出或者收到私下提及时,它将显示在此。", "empty_column.domain_blocks": "暂且没有被屏蔽的站点。", @@ -813,7 +813,7 @@ "status.admin_domain": "打开 {domain} 的管理界面", "status.admin_status": "在管理界面查看此嘟文", "status.block": "屏蔽 @{name}", - "status.bookmark": "收藏", + "status.bookmark": "添加到书签", "status.cancel_reblog_private": "取消转嘟", "status.cannot_reblog": "不能转嘟这条嘟文", "status.continued_thread": "上接嘟文串", @@ -849,7 +849,7 @@ "status.reblogs": "{count, plural, other {次转嘟}}", "status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。", "status.redraft": "删除并重新编辑", - "status.remove_bookmark": "取消收藏", + "status.remove_bookmark": "移除书签", "status.remove_favourite": "从喜欢列表中移除", "status.replied_in_thread": "回复嘟文串", "status.replied_to": "回复 {name}", diff --git a/app/lib/request.rb b/app/lib/request.rb index 4e0ba7783365c8..8fda86f0e8d007 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -260,7 +260,7 @@ def open(host, *args) outer_e = nil port = args.first - addresses = [] # rubocop:disable Lint/UselessAssignment # TODO: https://github.com/rubocop/rubocop/issues/13395 + addresses = [] # rubocop:disable Lint/UselessAssignment -- TODO: https://github.com/rubocop/rubocop/issues/13395 begin addresses = [IPAddr.new(host)] rescue IPAddr::InvalidAddressError diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb index b5f49c46eb5c93..36baa6e5acf8d9 100644 --- a/app/services/backup_service.rb +++ b/app/services/backup_service.rb @@ -6,6 +6,8 @@ class BackupService < BaseService include Payloadable include ContextHelper + CHUNK_SIZE = 1.megabyte + attr_reader :account, :backup def call(backup) @@ -182,8 +184,6 @@ def serialize(object, serializer) ).as_json end - CHUNK_SIZE = 1.megabyte - def download_to_zip(zipfile, attachment, filename) adapter = Paperclip.io_adapters.for(attachment) diff --git a/config/initializers/webauthn.rb b/config/initializers/webauthn.rb index 40dfeb831752db..ad8af3876cdd1b 100644 --- a/config/initializers/webauthn.rb +++ b/config/initializers/webauthn.rb @@ -3,7 +3,7 @@ WebAuthn.configure do |config| # This value needs to match `window.location.origin` evaluated by # the User Agent during registration and authentication ceremonies. - config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}" + config.allowed_origins = ["#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"] # Relying Party name for display purposes config.rp_name = 'Mastodon' diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index 619f2cd584e461..8601a840269ea7 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -44,7 +44,7 @@ fi: attributes: account_id: taken: on jo listassa - must_be_following: on oltava seurattu tili + must_be_following: on oltava seurattava tili status: attributes: reblog: diff --git a/config/locales/devise.az.yml b/config/locales/devise.az.yml index e9ba86bc793aee..6a02cd7e497554 100644 --- a/config/locales/devise.az.yml +++ b/config/locales/devise.az.yml @@ -1 +1,46 @@ +--- az: + devise: + confirmations: + confirmed: E-poçt ünvanınız uğurla təsdiqləndi. + send_instructions: Bir neçə dəqiqə ərzində e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın. + send_paranoid_instructions: E-poçt ünvanınız verilənlər bazamızda varsa, bir neçə dəqiqədən sonra e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın. + failure: + already_authenticated: Siz artıq daxil olmusunuz. + inactive: Hesabınız hələ aktivləşdirilməyib. + invalid: Səhv %{authentication_keys} və ya parol. + last_attempt: Hesabınız blok olmamışdan əvvəl bir dəfə də cəhdiniz var. + locked: Hesabınız bloklandı. + not_found_in_database: Səhv %{authentication_keys} və ya parol. + omniauth_user_creation_failure: Bu kimlik üçün hesab yaradarkən xəta. + pending: Hesabınız hələ yoxlanışdadır. + timeout: Sessiyanın vaxtı bitdi. Xahiş edirik davam etmək üçün yenidən daxil olun. + unauthenticated: Davam etmək üçün daxil olmaq və ya qeydiyyatdan keçmək lazımdır. + unconfirmed: Davam etmək üçün e-poçt ünvanınızı təsdiqləməlisiniz. + mailer: + confirmation_instructions: + action: E-poçt ünvanını təsdiqlə + action_with_app: Təsdiqlə və %{app}-a geri qayıt + explanation: Siz %{host} saytında bu e-poçt ilə hesab yaratmısınız. Onu aktivləşdirməkdən bir klik uzaqlıqdasınız. Əgər bu siz olmamısınızsa, zəhmət olmasa, bu e-məktuba məhəl qoymayın. + explanation_when_pending: Bu e-poçt ünvanı ilə %{host} saytına dəvət üçün müraciət etmisiniz. Siz e-poçt ünvanınızı təsdiqlədikdən sonra müraciətinizi nəzərdən keçirəcəyik. Siz məlumatlarınızı dəyişdirmək və ya hesabınızı silmək üçün daxil ola bilərsiniz, lakin hesabınız təsdiqlənənə qədər əksər funksiyaları istifadə edə bilməzsiniz. Müraciətiniz rədd edilərsə, məlumatlarınız silinəcək, buna görə də sizdən heç bir tədbir tələb olunmayacaq. Əgər bu siz deyildinizsə, zəhmət, bu e-məktuba məhəl qoymayın. + extra_html: Həmçinin zəhmət olmasa, serverin qaydalarınıistifadə şərtlərini oxuyun. + subject: 'Mastodon: %{instance} üçün təsdiqlənmə təlimatları' + title: E-poçt ünvanını təsdiqlə + email_changed: + explanation: 'Hesabınız üçün e-poçt ünvanı buna dəyişdirilir:' + extra: E-poçtunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın. + subject: 'Mastodon: E-poçt dəyişdirildi' + title: Yeni e-poçt ünvanı + password_change: + explanation: Hesabınızın parolu dəyişdirilib. + extra: Parolunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın. + subject: 'Mastodon: Parol dəyişdirildi' + title: Parol dəyişdirildi + reconfirmation_instructions: + explanation: E-poçtunuzu dəyişdirmək üçün yeni ünvanı təsdiqləyin. + extra: Əgər bu dəyişiklik sizin tərəfinizdən deyilsə, zəhmət olmasa, bu e-məktuba məhəl qoymayın. Siz yuxarıdakı linkə daxil olana qədər Mastodon hesabının e-poçt ünvanı dəyişməyəcək. + subject: 'Mastodon: %{instance} üçün e-poçtu təsdiqlə' + title: E-poçt ünvanını təsdiqlə + reset_password_instructions: + action: Parolu dəyiş + explanation: Siz hesabınız üçün yeni parol tələb etmisiniz. diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 38f88943bf7da8..ddaff5b93ab06e 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -130,8 +130,8 @@ fi: crypto: Päästä päähän -salaus favourites: Suosikit filters: Suodattimet - follow: Seuratut, mykistykset ja estot - follows: Seuratut + follow: Seurattavat, mykistykset ja estot + follows: Seurattavat lists: Listat media: Medialiitteet mutes: Mykistykset @@ -175,7 +175,7 @@ fi: read:bookmarks: katso kirjanmerkkejäsi read:favourites: katso suosikkejasi read:filters: katso suodattimiasi - read:follows: katso seurattujasi + read:follows: katso seurattaviasi read:lists: katso listojasi read:mutes: katso mykistyksiäsi read:notifications: katso ilmoituksiasi diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 256ecbb776d78f..2c096720c2d165 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -185,7 +185,7 @@ zh-CN: write: 修改你的账号数据 write:accounts: 修改你的个人资料 write:blocks: 屏蔽账号与站点 - write:bookmarks: 收藏嘟文 + write:bookmarks: 将嘟文加入书签 write:conversations: 静音并删除会话 write:favourites: 喜欢嘟文 write:filters: 创建过滤规则 diff --git a/config/locales/fi.yml b/config/locales/fi.yml index c7148772b80994..772028f1fa6c31 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -10,7 +10,7 @@ fi: followers: one: seuraaja other: seuraajaa - following: seurattu(a) + following: Seurattavat instance_actor_flash: Tämä tili on virtuaalinen toimija, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään federointitarkoituksiin, eikä sitä tule jäädyttää. last_active: viimeksi aktiivinen link_verified_on: Tämän linkin omistus on tarkastettu %{date} @@ -74,7 +74,7 @@ fi: enabled: Käytössä enabled_msg: Käyttäjän %{username} tilin jäädytys kumottiin onnistuneesti followers: Seuraajat - follows: Seuratut + follows: Seurattavat header: Otsakekuva inbox_url: Postilaatikon osoite invite_request_text: Syitä liittymiseen @@ -1466,18 +1466,18 @@ fi: blocking: Tuodaan estettyjä tilejä bookmarks: Tuodaan kirjanmerkkejä domain_blocking: Tuodaan estettyjä verkkotunnuksia - following: Tuodaan seurattuja tilejä + following: Tuodaan seurattavia tilejä lists: Tuodaan listoja muting: Tuodaan mykistettyjä tilejä type: Tuontityyppi type_groups: - constructive: Seuratut ja kirjanmerkit + constructive: Seurattavat ja kirjanmerkit destructive: Estot ja mykistykset types: blocking: Estoluettelo bookmarks: Kirjanmerkit domain_blocking: Verkkotunnusten estoluettelo - following: Seurattujen luettelo + following: Seurattavien luettelo lists: Listat muting: Mykistysluettelo upload: Lähetä @@ -1683,7 +1683,7 @@ fi: follow_failure: Joitain valittuja tilejä ei voitu seurata. follow_selected_followers: Seuraa valittuja seuraajia followers: Seuraajat - following: Seuratut + following: Seurattavat invited: Kutsutut last_active: Viimeksi aktiivinen most_recent: Tuorein @@ -1776,7 +1776,7 @@ fi: notifications: Sähköposti-ilmoitukset preferences: Asetukset profile: Julkinen profiili - relationships: Seuratut ja seuraajat + relationships: Seurattavat ja seuraajat severed_relationships: Katkenneet suhteet statuses_cleanup: Julkaisujen automaattipoisto strikes: Moderointivaroitukset @@ -1789,8 +1789,8 @@ fi: domain_block: Palvelimen jäädytys (%{target_name}) user_domain_block: Estit käyttäjän %{target_name} lost_followers: Menetetyt seuraajat - lost_follows: Menetetyt seuratut - preamble: Voit menettää seurattusi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle. + lost_follows: Menetetyt seurattavat + preamble: Voit menettää seurattavasi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle. purged: Palvelimesi ylläpitäjät ovat tyhjentäneet tämän palvelimen tiedot. type: Tapahtuma statuses: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 99373756404972..a688a2a7d2d3f8 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/simple_form.eo.yml b/config/locales/simple_form.eo.yml index b6e50ac816485b..8103f739291643 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 implicite kaŝitaj, 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.fi.yml b/config/locales/simple_form.fi.yml index 83b32636dc552f..278b94e51435df 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -9,7 +9,7 @@ fi: fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa. indexable: Julkiset julkaisusi voivat näkyä Mastodonin hakutuloksissa. Käyttäjät, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta. note: 'Voit @mainita muita käyttäjiä tai #aihetunnisteita.' - show_collections: Käyttäjät voivat selata seurattujasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä. + show_collections: Käyttäjät voivat selata seurattaviasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä. unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntääsi. Poista valinta, jos haluat tarkistaa sekä hyväksyä tai hylätä vastaanottamasi seurantapyynnöt. account_alias: acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat muuttaa @@ -162,7 +162,7 @@ fi: name: Nimike value: Sisältö indexable: Sisällytä julkiset julkaisut hakutuloksiin - show_collections: Näytä seuratut ja seuraajat profiilissa + show_collections: Näytä seurattavat ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: acct: Vanhan tilin käyttäjätunnus diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 74dc8218a9a10d..a048fdb99e8da4 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.sv.yml b/config/locales/simple_form.sv.yml index e35eba36c94209..1c66030b4e3d1e 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -3,6 +3,7 @@ sv: simple_form: hints: account: + attribution_domains: En per rad. Skyddar mot falska attributioner. discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare. display_name: Ditt fullständiga namn eller ditt roliga namn. fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill. diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index db9518759a3c66..dfaa61e0ccb838 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -3,6 +3,7 @@ th: simple_form: hints: account: + attribution_domains: หนึ่งรายการต่อบรรทัด ปกป้องจากการระบุแหล่งที่มาที่ผิด discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ @@ -143,6 +144,7 @@ th: url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: + attribution_domains: เว็บไซต์ที่ได้รับอนุญาตให้ให้เครดิตคุณ discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ fields: name: ป้ายชื่อ @@ -219,6 +221,7 @@ th: setting_display_media_show_all: แสดงทั้งหมด setting_expand_spoilers: ขยายโพสต์ที่มีการทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ setting_hide_network: ซ่อนกราฟทางสังคมของคุณ + setting_missing_alt_text_modal: แสดงกล่องโต้ตอบการยืนยันก่อนที่จะโพสต์สื่อโดยไม่มีข้อความแสดงแทน setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ setting_system_scrollbars_ui: ใช้แถบเลื่อนเริ่มต้นของระบบ diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 7855c911d125eb..551c48f970ed3e 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1209,6 +1209,7 @@ sv: too_fast: Formuläret har skickats för snabbt, försök igen. use_security_key: Använd säkerhetsnyckel user_agreement_html: Jag har läst och godkänner användarvillkoren och integritetspolicy + user_privacy_agreement_html: Jag har läst och godkänner integritetspolicyn author_attribution: example_title: Exempeltext hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon. diff --git a/config/locales/th.yml b/config/locales/th.yml index b945ee8650482c..2f8d03eec49888 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1177,6 +1177,7 @@ th: view_strikes: ดูการดำเนินการที่ผ่านมาต่อบัญชีของคุณ too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง use_security_key: ใช้กุญแจความปลอดภัย + user_privacy_agreement_html: ฉันได้อ่านและเห็นด้วยกับ นโยบายความเป็นส่วนตัว author_attribution: example_title: ข้อความตัวอย่าง hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a7fbfa3de23138..1b4b39fb987131 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1303,7 +1303,7 @@ zh-CN: request: 请求你的存档 size: 大小 blocks: 屏蔽的用户 - bookmarks: 收藏 + bookmarks: 书签 csv: CSV domain_blocks: 站点屏蔽列表 lists: 列表 @@ -1426,18 +1426,18 @@ zh-CN: time_started: 开始于 titles: blocking: 正在导入被屏蔽的账号 - bookmarks: 正在导入收藏 + bookmarks: 正在导入书签 domain_blocking: 正在导入站点屏蔽列表 following: 正在导入关注的账号 lists: 导入列表 muting: 正在导入隐藏的账号 type: 导入类型 type_groups: - constructive: 关注与收藏 + constructive: 关注和书签 destructive: 屏蔽与隐藏 types: blocking: 屏蔽列表 - bookmarks: 收藏 + bookmarks: 书签 domain_blocking: 站点屏蔽列表 following: 关注列表 lists: 列表 @@ -1803,8 +1803,8 @@ zh-CN: keep_pinned_hint: 不会删除你的任何置顶嘟文 keep_polls: 保留投票 keep_polls_hint: 不删除你的任何投票 - keep_self_bookmark: 保存被你加入书签的嘟文 - keep_self_bookmark_hint: 如果你已将自己的嘟文添加书签,就不会删除这些嘟文 + keep_self_bookmark: 保留你加入书签的嘟文 + keep_self_bookmark_hint: 不删除书签中你自己的嘟文 keep_self_fav: 保留你喜欢的嘟文 keep_self_fav_hint: 如果你喜欢了自己的嘟文,则不会删除这些嘟文 min_age: diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 68420fb15d8839..84ec13eaab0ef5 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -289,6 +289,16 @@ def lookup(url) fail_with_message 'Invalid URL' end + PRELOADED_MODELS = %w( + Account + Backup + CustomEmoji + Import + MediaAttachment + PreviewCard + SiteUpload + ).freeze + private def object_storage_summary @@ -310,16 +320,6 @@ def combined_media_sum SQL end - PRELOADED_MODELS = %w( - Account - Backup - CustomEmoji - Import - MediaAttachment - PreviewCard - SiteUpload - ).freeze - def preload_records_from_mixed_objects(objects) preload_map = Hash.new { |hash, key| hash[key] = [] } diff --git a/spec/controllers/admin/users/roles_controller_spec.rb b/spec/controllers/admin/users/roles_controller_spec.rb deleted file mode 100644 index a7d59181d62dcf..00000000000000 --- a/spec/controllers/admin/users/roles_controller_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::Users::RolesController do - render_views - - let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) } - let(:current_user) { Fabricate(:user, role: current_role) } - - let(:previous_role) { nil } - let(:user) { Fabricate(:user, role: previous_role) } - - before do - sign_in current_user, scope: :user - end - - describe 'GET #show' do - before do - get :show, params: { user_id: user.id } - end - - it 'returns http success' do - expect(response).to have_http_status(:success) - end - - context 'when target user is higher ranked than current user' do - let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) } - - it 'returns http forbidden' do - expect(response).to have_http_status(403) - end - end - end - - describe 'PUT #update' do - let(:selected_role) { UserRole.create(name: 'Bar', permissions: permissions, position: position) } - - before do - put :update, params: { user_id: user.id, user: { role_id: selected_role.id } } - end - - context 'with manage roles permissions' do - let(:permissions) { UserRole::FLAGS[:manage_roles] } - let(:position) { 1 } - - it 'updates user role and redirects' do - expect(user.reload.role_id).to eq selected_role&.id - - expect(response).to redirect_to(admin_account_path(user.account_id)) - end - end - - context 'when selected role has higher position than current user\'s role' do - let(:permissions) { UserRole::FLAGS[:administrator] } - let(:position) { 100 } - - it 'does not update user role and renders edit' do - expect(user.reload.role_id).to eq previous_role&.id - - expect(response).to render_template(:show) - end - end - - context 'when target user is higher ranked than current user' do - let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) } - let(:permissions) { UserRole::FLAGS[:manage_roles] } - let(:position) { 1 } - - it 'does not update user role and returns http forbidden' do - expect(user.reload.role_id).to eq previous_role&.id - - expect(response).to have_http_status(403) - 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 0defc52cde92db..00000000000000 --- 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 c55f113d4d2d3e..00000000000000 --- 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 deleted file mode 100644 index 9f45afe693372f..00000000000000 --- a/spec/controllers/statuses_controller_spec.rb +++ /dev/null @@ -1,192 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe StatusesController do - render_views - - describe 'GET #show' do - let(:account) { Fabricate(:account) } - let(:status) { Fabricate(:status, account: account) } - - context 'when signed-in' do - let(:user) { Fabricate(:user) } - - before do - sign_in(user) - 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) - 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 status is private' do - let(:status) { Fabricate(:status, account: account, visibility: :private) } - - context 'when user is authorized to see it' do - before do - user.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', :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 - - 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: user.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 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 - end - end -end diff --git a/spec/requests/admin/users/roles_spec.rb b/spec/requests/admin/users/roles_spec.rb index b39e3f8bae1317..fb88e4c87a15ec 100644 --- a/spec/requests/admin/users/roles_spec.rb +++ b/spec/requests/admin/users/roles_spec.rb @@ -3,6 +3,34 @@ require 'rails_helper' RSpec.describe 'Admin Users Roles' do + context 'when target user is higher ranked than current user' do + let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) } + let(:current_user) { Fabricate(:user, role: current_role) } + + let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) } + let(:user) { Fabricate(:user, role: previous_role) } + + before { sign_in(current_user) } + + describe 'GET /admin/users/:user_id/role' do + it 'returns http forbidden' do + get admin_user_role_path(user.id) + + expect(response) + .to have_http_status(403) + end + end + + describe 'PUT /admin/users/:user_id/role' do + it 'returns http forbidden' do + put admin_user_role_path(user.id) + + expect(response) + .to have_http_status(403) + end + end + end + describe 'PUT /admin/users/:user_id/role' do before { sign_in Fabricate(:admin_user) } 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 00000000000000..30cbfc2a7bafd2 --- /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 00000000000000..2fda5ce919404f --- /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 e3bf15540a2a2e..a5e4482dfa6ae2 100644 --- a/spec/requests/statuses_spec.rb +++ b/spec/requests/statuses_spec.rb @@ -59,7 +59,6 @@ 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'), @@ -114,9 +113,11 @@ end context 'when signed in' do + subject { get short_account_status_path(account_username: account.username, id: status.id, format: format) } + let(:user) { Fabricate(:user) } - before { sign_in(user) } + before { sign_in_with_session(user) } context 'when account blocks user' do before { account.block!(user.account) } @@ -128,6 +129,167 @@ .to have_http_status(404) end end + + context 'when status is public' 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) + 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 status is private' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + context 'when user is authorized to see it' do + before { user.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', :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 + let(:format) { 'html' } + + 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: user.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 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 + let(:format) { 'html' } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + end + + private + + def sign_in_with_session(user) + # The regular `sign_in` helper does not actually set session cookies + # The endpoint responses here rely on cookie/session checks to set cache privacy headers + # To enable that, perform a full sign in which will establish those cookies for subsequent spec requests + post user_session_path, params: { user: { email: user.email, password: user.password } } + end end context 'with "HTTP Signature" access signed by a remote account' do diff --git a/spec/system/admin/users/roles_spec.rb b/spec/system/admin/users/roles_spec.rb new file mode 100644 index 00000000000000..8b163c4d79ac7b --- /dev/null +++ b/spec/system/admin/users/roles_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Users Roles' do + let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) } + let(:current_user) { Fabricate(:user, role: current_role) } + + let(:previous_role) { nil } + let(:user) { Fabricate(:user, role: previous_role) } + + before do + sign_in current_user, scope: :user + end + + describe 'Managing user roles' do + let!(:too_high_role) { UserRole.create(name: 'TooHigh', permissions: UserRole::FLAGS[:administrator], position: 100) } + let!(:usable_role) { UserRole.create(name: 'Usable', permissions: UserRole::FLAGS[:manage_roles], position: 1) } + + it 'selects and updates user roles' do + visit admin_user_role_path(user) + expect(page) + .to have_title I18n.t('admin.accounts.change_role.title', username: user.account.username) + + # Fails to assign not allowed role + select too_high_role.name, from: 'user_role_id' + expect { click_on submit_button } + .to_not(change { user.reload.role_id }) + expect(page) + .to have_title I18n.t('admin.accounts.change_role.title', username: user.account.username) + + # Assigns allowed role + select usable_role.name, from: 'user_role_id' + expect { click_on submit_button } + .to(change { user.reload.role_id }.to(usable_role.id)) + 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 00000000000000..ba8491429c6aef --- /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 00000000000000..bed226deb557ef --- /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/spec/system/statuses_spec.rb b/spec/system/statuses_spec.rb new file mode 100644 index 00000000000000..704cae03f2a80f --- /dev/null +++ b/spec/system/statuses_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Status page' do + let(:status) { Fabricate :status } + + it 'visits the status page and renders the web app' do + visit short_account_status_path(account_username: status.account.username, id: status.id) + + expect(page) + .to have_css('noscript', text: /Mastodon/) + .and have_css('body', class: 'app-body') + end +end diff --git a/yarn.lock b/yarn.lock index f9c76ae11280d3..ba4781e3ce6700 100644 --- a/yarn.lock +++ b/yarn.lock @@ -74,39 +74,38 @@ __metadata: 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.8 - resolution: "@babel/core@npm:7.26.8" + version: 7.26.9 + resolution: "@babel/core@npm:7.26.9" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.8" + "@babel/generator": "npm:^7.26.9" "@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.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" + "@babel/helpers": "npm:^7.26.9" + "@babel/parser": "npm:^7.26.9" + "@babel/template": "npm:^7.26.9" + "@babel/traverse": "npm:^7.26.9" + "@babel/types": "npm:^7.26.9" 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/fafbd083ed3f79973ae2a11a69eee3f13b3226a1d4907abc2c6f2fea21adf4a7c20e00fe0eaa33f44a3666eeaf414edb07460ec031d478ee5f6088eb38b2a011 + checksum: 10c0/ed7212ff42a9453765787019b7d191b167afcacd4bd8fec10b055344ef53fa0cc648c9a80159ae4ecf870016a6318731e087042dcb68d1a2a9d34eb290dc014b languageName: node linkType: hard -"@babel/generator@npm:^7.26.8, @babel/generator@npm:^7.7.2": - version: 7.26.8 - resolution: "@babel/generator@npm:7.26.8" +"@babel/generator@npm:^7.26.9, @babel/generator@npm:^7.7.2": + version: 7.26.9 + resolution: "@babel/generator@npm:7.26.9" dependencies: - "@babel/parser": "npm:^7.26.8" - "@babel/types": "npm:^7.26.8" + "@babel/parser": "npm:^7.26.9" + "@babel/types": "npm:^7.26.9" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/9467f197d285ac315d1fa419138d36a3bfd69ca4baf763e914acab12f5f38e5d231497f6528e80613b28e73bb28c66fcc50b250b1f277b1a4d38ac14b03e9674 + checksum: 10c0/6b78872128205224a9a9761b9ea7543a9a7902a04b82fc2f6801ead4de8f59056bab3fd17b1f834ca7b049555fc4c79234b9a6230dd9531a06525306050becad languageName: node linkType: hard @@ -304,24 +303,24 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.26.7": - version: 7.26.7 - resolution: "@babel/helpers@npm:7.26.7" +"@babel/helpers@npm:^7.26.9": + version: 7.26.9 + resolution: "@babel/helpers@npm:7.26.9" dependencies: - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.7" - checksum: 10c0/37fec398e53a2dbbf24bc2a025c4d571b2556cef18d8116d05d04b153f13ef659cdfbaab96c8eed875e629d39bdf9b3ea5d099ccf80544537de224e2d94f9b11 + "@babel/template": "npm:^7.26.9" + "@babel/types": "npm:^7.26.9" + checksum: 10c0/3d4dbc4a33fe4181ed810cac52318b578294745ceaec07e2f6ecccf6cda55d25e4bfcea8f085f333bf911c9e1fc13320248dd1d5315ab47ad82ce1077410df05 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.26.8": - version: 7.26.8 - resolution: "@babel/parser@npm:7.26.8" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.9": + version: 7.26.9 + resolution: "@babel/parser@npm:7.26.9" dependencies: - "@babel/types": "npm:^7.26.8" + "@babel/types": "npm:^7.26.9" bin: parser: ./bin/babel-parser.js - checksum: 10c0/da04f26bae732a5b6790775a736b58c7876c28e62203c5097f043fd7273ef6debe5bfd7a4e670a6819f4549b215c7b9762c6358e44797b3c4d733defc8290781 + checksum: 10c0/4b9ef3c9a0d4c328e5e5544f50fe8932c36f8a2c851e7f14a85401487cd3da75cad72c2e1bcec1eac55599a6bbb2fdc091f274c4fcafa6bdd112d4915ff087fc languageName: node linkType: hard @@ -771,15 +770,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-for-of@npm:7.25.9" +"@babel/plugin-transform-for-of@npm:^7.26.9": + version: 7.26.9 + resolution: "@babel/plugin-transform-for-of@npm:7.26.9" dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.26.5" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bf11abc71934a1f369f39cd7a33cf3d4dc5673026a53f70b7c1238c4fcc44e68b3ca1bdbe3db2076f60defb6ffe117cbe10b90f3e1a613b551d88f7c4e693bbe + checksum: 10c0/e28a521521cf9f84ddd69ca8da7c89fb9f7aa38e4dea35742fe973e4e1d7c23f9cee1a4861a2fdd9e9f18ff945886a44d7335cea1c603b96bfcb1c7c8791ef09 languageName: node linkType: hard @@ -1138,8 +1137,8 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.26.8 - resolution: "@babel/plugin-transform-runtime@npm:7.26.8" + version: 7.26.9 + resolution: "@babel/plugin-transform-runtime@npm:7.26.9" dependencies: "@babel/helper-module-imports": "npm:^7.25.9" "@babel/helper-plugin-utils": "npm:^7.26.5" @@ -1149,7 +1148,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e206206fee262d2200763e6c427b27ca8a7a40a967dfe52f984f07a225952be0990fcce0acae6cee63fe92f5cadc94bb336fae2f3d687f0f2fcd2dadaf33029a + checksum: 10c0/2c4d77d0671badc7fd53dcd7015df5db892712436c7e9740ffb2f5b85e8591e5bfe208f78dff402b4ee2d55d0f7a3c0a1102c683f333f4ee0cfa62f68ea68842 languageName: node linkType: hard @@ -1272,8 +1271,8 @@ __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.8 - resolution: "@babel/preset-env@npm:7.26.8" + version: 7.26.9 + resolution: "@babel/preset-env@npm:7.26.9" dependencies: "@babel/compat-data": "npm:^7.26.8" "@babel/helper-compilation-targets": "npm:^7.26.5" @@ -1304,7 +1303,7 @@ __metadata: "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" "@babel/plugin-transform-exponentiation-operator": "npm:^7.26.3" "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" - "@babel/plugin-transform-for-of": "npm:^7.25.9" + "@babel/plugin-transform-for-of": "npm:^7.26.9" "@babel/plugin-transform-function-name": "npm:^7.25.9" "@babel/plugin-transform-json-strings": "npm:^7.25.9" "@babel/plugin-transform-literals": "npm:^7.25.9" @@ -1346,7 +1345,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/314ab8c6173d1f14e40cf22e1e646c429acfd45195e2ddbadca81956aa2a670e37e4446658db65f1a669f82ef115a4a018f78448bc10789cacdaf4e995680db5 + checksum: 10c0/6812ca76bd38165a58fe8354bab5e7204e1aa17d8b9270bd8f8babb08cc7fa94cd29525fe41b553f2ba0e84033d566f10da26012b8ee0f81897005c5225d0051 languageName: node linkType: hard @@ -1404,47 +1403,47 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.26.7 - resolution: "@babel/runtime@npm:7.26.7" + version: 7.26.9 + resolution: "@babel/runtime@npm:7.26.9" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/60199c049f90e5e41c687687430052a370aca60bac7859ff4ee761c5c1739b8ba1604d391d01588c22dc0e93828cbadb8ada742578ad1b1df240746bce98729a + checksum: 10c0/e8517131110a6ec3a7360881438b85060e49824e007f4a64b5dfa9192cf2bb5c01e84bfc109f02d822c7edb0db926928dd6b991e3ee460b483fb0fac43152d9b languageName: node linkType: hard -"@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" +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.3.3": + version: 7.26.9 + resolution: "@babel/template@npm:7.26.9" dependencies: "@babel/code-frame": "npm:^7.26.2" - "@babel/parser": "npm:^7.26.8" - "@babel/types": "npm:^7.26.8" - checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213 + "@babel/parser": "npm:^7.26.9" + "@babel/types": "npm:^7.26.9" + checksum: 10c0/019b1c4129cc01ad63e17529089c2c559c74709d225f595eee017af227fee11ae8a97a6ab19ae6768b8aa22d8d75dcb60a00b28f52e9fa78140672d928bc1ae9 languageName: node linkType: hard -"@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" +"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.26.9": + version: 7.26.9 + resolution: "@babel/traverse@npm:7.26.9" 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" + "@babel/generator": "npm:^7.26.9" + "@babel/parser": "npm:^7.26.9" + "@babel/template": "npm:^7.26.9" + "@babel/types": "npm:^7.26.9" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/0771d1ce0351628ad2e8dac56f0d59f706eb125c83fbcc039bde83088ba0a1477244ad5fb060802f90366cc4d7fa871e5009a292aef6205bcf83f2e01d1a0a5d + checksum: 10c0/51dd57fa39ea34d04816806bfead04c74f37301269d24c192d1406dc6e244fea99713b3b9c5f3e926d9ef6aa9cd5c062ad4f2fc1caa9cf843d5e864484ac955e 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" +"@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.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.26.9 + resolution: "@babel/types@npm:7.26.9" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/cd41ea47bb3d7baf2b3bf5e70e9c3a16f2eab699fab8575b2b31a7b1cb64166eb52c97124313863dde0581747bfc7a1810c838ad60b5b7ad1897d8004c7b95a9 + checksum: 10c0/999c56269ba00e5c57aa711fbe7ff071cd6990bafd1b978341ea7572cc78919986e2aa6ee51dacf4b6a7a6fa63ba4eb3f1a03cf55eee31b896a56d068b895964 languageName: node linkType: hard @@ -1658,12 +1657,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 @@ -3777,13 +3776,6 @@ __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" @@ -5774,7 +5766,7 @@ __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, browserslist@npm:^4.24.3": +"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: @@ -9906,8 +9898,8 @@ __metadata: linkType: hard "ioredis@npm:^5.3.2": - version: 5.4.2 - resolution: "ioredis@npm:5.4.2" + version: 5.5.0 + resolution: "ioredis@npm:5.5.0" dependencies: "@ioredis/commands": "npm:^1.1.1" cluster-key-slot: "npm:^1.1.0" @@ -9918,7 +9910,7 @@ __metadata: redis-errors: "npm:^1.2.0" redis-parser: "npm:^3.0.0" standard-as-callback: "npm:^2.1.0" - checksum: 10c0/e59d2cceb43ed74b487d7b50fa91b93246e734e5d4835c7e62f64e44da072f12ab43b044248012e6f8b76c61a7c091a2388caad50e8ad69a8ce5515a730b23b8 + checksum: 10c0/ba64502fc92d9e05465793fafcd0568cb668af6e2350462b61daadfd499e3a48239d9a723d3ce08b08c93f3f745d05dda91136cdc597d4d485604e6730305305 languageName: node linkType: hard @@ -13162,8 +13154,8 @@ __metadata: linkType: hard "pg@npm:^8.5.0": - version: 8.13.2 - resolution: "pg@npm:8.13.2" + version: 8.13.3 + resolution: "pg@npm:8.13.3" dependencies: pg-cloudflare: "npm:^1.1.1" pg-connection-string: "npm:^2.7.0" @@ -13179,7 +13171,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10c0/955615fc6db2849e047472b3a314ce6b70ecdef2de1ecdbb663ac2cd39f6e9ae25da5de4727baceb0b6e439075e6ad0ac8548fd150e38d9cda6514c43c840a31 + checksum: 10c0/7296f0e5930b35faef471be2673210cda553b30f1b8e9d176fcc286aa43248e17e09336032bf5a6bba55d2cc2d03afb8a407b5a6e6bc56ebb331c02d1a7ccc05 languageName: node linkType: hard @@ -13955,8 +13947,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" @@ -13968,7 +13960,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" @@ -13991,7 +13983,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" @@ -14023,7 +14015,7 @@ __metadata: postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/0ae02015ad3ac69e8ef26afc1a06cb9fbb400104eca5c69a4baa20925e06364712f05b5d87ec9cf9445256e62344e6c2bad8d261a09b35a0e982e055564e3ba8 + checksum: 10c0/bd3ad0a32fa30e53f4fdfb980b77d4e86a53ad40681dd8f7d2d9fb00728730b426cd7d039b57f0849261014e4c9e5a55f72edfda1c70165c96a52f246d273ebb languageName: node linkType: hard @@ -15558,8 +15550,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.84.0 - resolution: "sass@npm:1.84.0" + version: 1.85.0 + resolution: "sass@npm:1.85.0" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15570,7 +15562,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/4af28c12416b6f1fec2423677cfa8c48af7fb7652a50bd076e0cdd1ea260f0330948ddd6075368a734b8d6cfa16c9af5518292181334f47a9471cb542599bc7b + checksum: 10c0/a1af0c0596ae1904f66337d0c70a684db6e12210f97be4326cc3dcf18b0f956d7bc45ab2bcc7a8422d433d3eb3c9cb2cc8e60b2dafbdd01fb1ae5a23f5424690 languageName: node linkType: hard