From ce79caca4e440e600c9624851a5567819472478f Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Thu, 28 Sep 2023 09:13:44 +0100 Subject: [PATCH 001/237] Only strip country code when language not listed in SUPPORTED_LOCALES (#27099) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index a8c66552cf..c42c4c23ef 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -254,6 +254,7 @@ module LanguagesHelper def valid_locale_or_nil(str) return if str.blank? + return str if valid_locale?(str) code, = str.to_s.split(/[_-]/) # Strip out the region from e.g. en_US or ja-JP From 2979a5924b93dc2f810e3c0f5554c6eeb61d6140 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:14:43 +0200 Subject: [PATCH 002/237] Update dependency @material-design-icons/svg to v0.14.13 (#27181) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ca1ac07d63..537a952165 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1739,9 +1739,9 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@material-design-icons/svg@^0.14.10": - version "0.14.12" - resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.12.tgz#b3dd27b4c2a93e0310f51acfb311846b0212f987" - integrity sha512-hVEMICFvG26SKDXatPmz+vY5BAqLPCDiyXnw+KN46FXOtY4PcpeAfzFZvwt6D9ywNnVJd4EvmLdlWgLmtOWxbA== + version "0.14.13" + resolved "https://registry.yarnpkg.com/@material-design-icons/svg/-/svg-0.14.13.tgz#de5a79038cf8b281f4b47d79c07399b2b92fcfb7" + integrity sha512-nCExGZOtoLoFeeqShEOM4XA9DkkLzLlQdk/ZxHxps0//dz6e1Lw3fvQbZ2X/+0Dz2O+udiEukfZ4Nd4KpHg8aA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -11461,6 +11461,7 @@ stringz@^2.1.0: char-regex "^1.0.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== From 7fddeca1907493fb327316c5447740922acb934f Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Thu, 28 Sep 2023 03:16:15 -0500 Subject: [PATCH 003/237] Fix retention dashboard not displaying correct month (#27180) --- app/javascript/mastodon/components/admin/Retention.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/admin/Retention.jsx b/app/javascript/mastodon/components/admin/Retention.jsx index 7bef96d8c4..2f56710682 100644 --- a/app/javascript/mastodon/components/admin/Retention.jsx +++ b/app/javascript/mastodon/components/admin/Retention.jsx @@ -9,11 +9,12 @@ import api from 'mastodon/api'; import { roundTo10 } from 'mastodon/utils/numbers'; const dateForCohort = cohort => { + const timeZone = 'UTC'; switch(cohort.frequency) { case 'day': - return ; + return ; default: - return ; + return ; } }; From 0f588a4a867f1432d02c9c4f717fff78fc941186 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:17:08 +0200 Subject: [PATCH 004/237] Update dependency axios to v1.5.1 (#27159) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 537a952165..b7430d65b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3351,9 +3351,9 @@ axe-core@^4.6.2: integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + version "1.5.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.1.tgz#11fbaa11fc35f431193a9564109c88c1f27b585f" + integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -6002,11 +6002,16 @@ flatted@^3.2.7: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.0.0, follow-redirects@^1.15.0: +follow-redirects@^1.0.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + font-awesome@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" From 66a7bc215c4202407ec56dd3304f3eab79cf3e4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:30:19 +0200 Subject: [PATCH 005/237] Update dependency glob to v10.3.10 (#27169) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b7430d65b5..e419454661 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6232,9 +6232,9 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^10.2.5, glob@^10.2.6: - version "10.3.9" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.9.tgz#181ae87640ecce9b2fc5b96e4e2d70b7c3629ab8" - integrity sha512-2tU/LKevAQvDVuVJ9pg9Yv9xcbSh+TqHuTaXTNbQwf+0kDl9Fm6bMovi4Nm5c8TVvfxo2LLcqCGtmO9KoJaGWg== + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: foreground-child "^3.1.0" jackspeak "^2.3.5" From 6d0767558a86c1ae3c42cb5ab0f6f78a2e93c1eb Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 28 Sep 2023 10:39:38 +0200 Subject: [PATCH 006/237] Make notification respect reduce-motion (#27178) --- app/javascript/styles/mastodon/components.scss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2f09f356dd..aac49a389b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9284,14 +9284,17 @@ noscript { 0 10px 15px -3px rgba($base-shadow-color, 0.25), 0 4px 6px -4px rgba($base-shadow-color, 0.25); cursor: default; - transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); - transform: translateZ(0); font-size: 15px; line-height: 21px; &.notification-bar-active { inset-inline-start: 1rem; } + + .no-reduce-motion & { + transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); + transform: translateZ(0); + } } .notification-bar-title { From b93ce7d8b31e1302d823f9a267591f4e00e5e91c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:44:16 +0200 Subject: [PATCH 007/237] New Crowdin Translations (automated) (#27168) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/fi.json | 230 +++++----- app/javascript/mastodon/locales/hy.json | 15 + app/javascript/mastodon/locales/lv.json | 2 +- config/locales/de.yml | 2 +- config/locales/devise.en-GB.yml | 24 +- config/locales/doorkeeper.fi.yml | 86 ++-- config/locales/en-GB.yml | 22 +- config/locales/fi.yml | 572 ++++++++++++------------ config/locales/hy.yml | 22 + config/locales/ko.yml | 2 +- config/locales/simple_form.en-GB.yml | 2 +- config/locales/simple_form.fi.yml | 68 +-- config/locales/simple_form.hy.yml | 1 + 14 files changed, 544 insertions(+), 506 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index acd53c28a7..76b37ef44b 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -383,7 +383,7 @@ "lists.new.create": "Neue Liste erstellen", "lists.new.title_placeholder": "Titel der neuen Liste", "lists.replies_policy.followed": "Alle folgenden Profile", - "lists.replies_policy.list": "Mitglieder*innen der Liste", + "lists.replies_policy.list": "Mitglieder der Liste", "lists.replies_policy.none": "Niemanden", "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten, denen du folgst", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2454bdf980..4aa46ec0fc 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -1,9 +1,9 @@ { - "about.blocks": "Moderoidut palvelimet", - "about.contact": "Yhteystiedot:", + "about.blocks": "Valvotut palvelimet", + "about.contact": "Yhteydenotto:", "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.", "about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu", - "about.domain_blocks.preamble": "Yleisesti Mastodonin avulla voidaan tarkastella minkä tahansa muun fediverse-palvelinten sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", + "about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", "about.domain_blocks.silenced.explanation": "Et yleensä näe tämän palvelimen profiileja ja sisältöä, jollet erityisesti etsi juuri sitä tai liity siihen seuraamalla.", "about.domain_blocks.silenced.title": "Rajoitettu", "about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta tai vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.", @@ -16,7 +16,7 @@ "account.badges.bot": "Botti", "account.badges.group": "Ryhmä", "account.block": "Estä @{name}", - "account.block_domain": "Estä palvelu {domain}", + "account.block_domain": "Estä verkkotunnus {domain}", "account.block_short": "Estä", "account.blocked": "Estetty", "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", @@ -25,11 +25,11 @@ "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee", "account.domain_blocked": "Verkkotunnus estetty", "account.edit_profile": "Muokkaa profiilia", - "account.enable_notifications": "Ilmoita kun käyttäjä @{name} julkaisee viestin", + "account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee", "account.endorse": "Suosittele profiilissasi", - "account.featured_tags.last_status_at": "Viimeisin viesti {date}", - "account.featured_tags.last_status_never": "Ei viestejä", - "account.featured_tags.title": "Käyttäjän {name} esillä olevat aihetunnisteet", + "account.featured_tags.last_status_at": "Viimeisin julkaisu {date}", + "account.featured_tags.last_status_never": "Ei julkaisuja", + "account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet", "account.follow": "Seuraa", "account.followers": "seuraaja(t)", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", @@ -54,21 +54,21 @@ "account.muted": "Mykistetty", "account.no_bio": "Kuvausta ei ole annettu.", "account.open_original_page": "Avaa alkuperäinen sivu", - "account.posts": "viesti(t)", - "account.posts_with_replies": "Viestit ja vastaukset", + "account.posts": "Julkaisut", + "account.posts_with_replies": "Julkaisut ja vastaukset", "account.report": "Raportoi @{name}", - "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla", + "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö napsauttamalla", "account.requested_follow": "{name} on pyytänyt lupaa seurata sinua", "account.share": "Jaa käyttäjän @{name} profiili", - "account.show_reblogs": "Näytä tehostukset käyttäjältä @{name}", - "account.statuses_counter": "{count, plural, one {{counter} viesti} other {{counter} viestiä}}", + "account.show_reblogs": "Näytä käyttäjän @{name} tehostukset", + "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", "account.unblock": "Poista esto: @{name}", "account.unblock_domain": "Salli palvelu {domain}", "account.unblock_short": "Poista esto", "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", - "account.unmute_notifications_short": "Kumoa ilmoitusten mykistys", + "account.unmute_notifications_short": "Poista ilmoitusten mykistys", "account.unmute_short": "Poista mykistys", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä", @@ -112,7 +112,7 @@ "column.community": "Paikallinen aikajana", "column.direct": "Yksityiset maininnat", "column.directory": "Selaa profiileja", - "column.domain_blocks": "Estetyt palvelut", + "column.domain_blocks": "Estetyt verkkotunnukset", "column.favourites": "Suosikit", "column.firehose": "Live-syötteet", "column.follow_requests": "Seuraamispyynnöt", @@ -120,7 +120,7 @@ "column.lists": "Listat", "column.mutes": "Mykistetyt käyttäjät", "column.notifications": "Ilmoitukset", - "column.pins": "Kiinnitetyt viestit", + "column.pins": "Kiinnitetyt julkaisut", "column.public": "Yleinen aikajana", "column_back_button.label": "Takaisin", "column_header.hide_settings": "Piilota asetukset", @@ -128,7 +128,7 @@ "column_header.moveRight_settings": "Siirrä saraketta oikealle", "column_header.pin": "Kiinnitä", "column_header.show_settings": "Näytä asetukset", - "column_header.unpin": "Poista kiinnitys", + "column_header.unpin": "Irrota", "column_subheading.settings": "Asetukset", "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", @@ -137,13 +137,13 @@ "compose.language.search": "Hae kieliä...", "compose.published.body": "Julkaisusi julkaistiin.", "compose.published.open": "Avaa", - "compose.saved.body": "Viesti tallennettu.", + "compose.saved.body": "Julkaisu tallennettu.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", - "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", + "compose_form.encryption_warning": "Mastodonin julkaisut eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", "compose_form.hashtag_warning": "Tätä julkaisua ei voi liittää aihetunnisteisiin, koska se ei ole julkinen. Vain näkyvyydeltään julkisiksi määritettyjä julkaisuja voidaan hakea aihetunnisteiden avulla.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", - "compose_form.placeholder": "Mitä sinulla on mielessäsi?", + "compose_form.placeholder": "Mitä mietit?", "compose_form.poll.add_option": "Lisää valinta", "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.option_placeholder": "Valinta {number}", @@ -167,24 +167,24 @@ "confirmations.cancel_follow_request.confirm": "Peruuta pyyntö", "confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata profiilia {name}?", "confirmations.delete.confirm": "Poista", - "confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?", + "confirmations.delete.message": "Haluatko varmasti poistaa tämän julkaisun?", "confirmations.delete_list.confirm": "Poista", - "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?", + "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan pysyvästi?", "confirmations.discard_edit_media.confirm": "Hylkää", "confirmations.discard_edit_media.message": "Sinulla on tallentamattomia muutoksia median kuvaukseen tai esikatseluun, hylätäänkö ne silti?", "confirmations.domain_block.confirm": "Estä koko verkkotunnus", - "confirmations.domain_block.message": "Haluatko aivan varmasti estää palvelun {domain} täysin? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimenpide. Et näe kyseisen sisältöä kyseiseltä verkkoalueelta missään julkisissa aikajanoissa tai ilmoituksissa. Tälle verkkoalueelle kuuluvat seuraajasi poistetaan.", + "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkkotunnuksen {domain}? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimi. Et näe sisältöä tästä verkkotunnuksesta millään julkisilla aikajanoilla tai ilmoituksissa. Tähän verkkotunnukseen kuuluvat seuraajasi poistetaan.", "confirmations.edit.confirm": "Muokkaa", - "confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?", + "confirmations.edit.message": "Jos muokkaat viestiä nyt, se korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.logout.confirm": "Kirjaudu ulos", "confirmations.logout.message": "Haluatko varmasti kirjautua ulos?", "confirmations.mute.confirm": "Mykistä", "confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta – mukaan lukien ne, joissa heidät mainitaan – sallien heidän yhä nähdä julkaisusi ja seurata sinua.", - "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?", + "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", - "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.", + "confirmations.redraft.message": "Haluatko varmasti poistaa julkaisun ja tehdä siitä luonnoksen? Suosikit ja tehostukset menetetään, ja alkuperäisen julkaisun vastaukset jäävät orvoiksi.", "confirmations.reply.confirm": "Vastaa", - "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", + "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.unfollow.confirm": "Lopeta seuraaminen", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta profiilia {name}?", "conversation.delete": "Poista keskustelu", @@ -193,18 +193,18 @@ "conversation.with": "{names} kanssa", "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", - "directory.federated": "Koko tunnettu fediverse", + "directory.federated": "Koko tunnettu fediversumi", "directory.local": "Vain palvelusta {domain}", "directory.new_arrivals": "Äskettäin saapuneet", "directory.recently_active": "Hiljattain aktiiviset", "disabled_account_banner.account_settings": "Tilin asetukset", "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", - "dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.", + "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.", + "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", - "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.", + "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", @@ -218,7 +218,7 @@ "emoji_button.objects": "Esineet", "emoji_button.people": "Ihmiset", "emoji_button.recent": "Usein käytetyt", - "emoji_button.search": "Etsi...", + "emoji_button.search": "Hae...", "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu ja paikat", @@ -231,20 +231,20 @@ "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!", - "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.", - "empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.", - "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.", - "empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.", + "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkijulkaisua. Kun lisäät sellaisen, näkyy se tässä.", + "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä julkaisua suosikkeihinsa. Kun joku tekee niin, tulee hän tähän näkyviin.", + "empty_column.follow_requests": "Et ole vielä vastaanottanut seuraamispyyntöjä. Saamasi pyynnöt näkyvät täällä.", + "empty_column.followed_tags": "Et seuraa vielä yhtäkään aihetunnistetta. Kun alat seurata, ne tulevat tähän näkyviin.", "empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.", "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.", - "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.", + "empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.", "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.", - "error.unexpected_crash.next_steps": "Kokeile sivun päivitystä. Jos se ei auta, voi Mastodonin käyttö silti olla mahdollista eri selaimella tai natiivilla sovelluksella.", + "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos se ei auta, voi Mastodonin käyttö ehkä onnistua eri selaimella tai natiivisovelluksella.", "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.", "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", @@ -254,28 +254,28 @@ "explore.trending_links": "Uutiset", "explore.trending_statuses": "Julkaisut", "explore.trending_tags": "Aihetunnisteet", - "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.", - "filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!", - "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut ja sinun on muutettava viimeistä voimassaolon päivää, jotta sitä voidaan käyttää.", + "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske kontekstia, jossa olet tarkastellut tätä julkaisua. Jos haluat, että julkaisu suodatetaan myös tässä kontekstissa, sinun pitää muokata suodatinta.", + "filter_modal.added.context_mismatch_title": "Konteksti ei täsmää!", + "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut, joten sinun on muutettava viimeistä voimassaolopäivää, jotta suodatin on voimassa.", "filter_modal.added.expired_title": "Vanhentunut suodatin!", - "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin siirtymällä {settings_link}.", + "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin kohdassa {settings_link}.", "filter_modal.added.review_and_configure_title": "Suodattimen asetukset", "filter_modal.added.settings_link": "asetukset-sivulle", - "filter_modal.added.short_explanation": "Tämä viesti on lisätty seuraavaan suodatinluokkaan: {title}.", + "filter_modal.added.short_explanation": "Tämä julkaisu on lisätty seuraavaan suodatinluokkaan: {title}.", "filter_modal.added.title": "Suodatin lisätty!", - "filter_modal.select_filter.context_mismatch": "ei sovellu tähän asiayhteyteen", + "filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin", "filter_modal.select_filter.expired": "vanhentunut", "filter_modal.select_filter.prompt_new": "Uusi luokka: {name}", "filter_modal.select_filter.search": "Etsi tai luo", - "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi luokka", - "filter_modal.select_filter.title": "Suodata tämä viesti", - "filter_modal.title.status": "Suodata viesti", + "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", + "filter_modal.select_filter.title": "Suodata tämä julkaisu", + "filter_modal.title.status": "Suodata julkaisu", "firehose.all": "Kaikki", "firehose.local": "Tämä palvelin", "firehose.remote": "Muut palvelimet", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", - "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, on palvelun {domain} ylläpito arvioinut, että saatat olla halukas tarkistamaan nämä seurauspyynnöt erikseen.", + "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.", "followed_tags": "Seuratut aihetunnisteet", "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", @@ -307,17 +307,17 @@ "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä tehostukset", "home.column_settings.show_replies": "Näytä vastaukset", - "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:", + "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamiasi aihetunnisteita ja käyttäjiä sekä heidän tehostamiaan julkaisuja. Jos se tuntuu liian hiljaiselta, saatat haluta:", "home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.", - "home.hide_announcements": "Piilota ilmoitukset", + "home.hide_announcements": "Piilota tiedotteet", "home.pending_critical_update.body": "Päivitäthän Mastodon-palvelimen mahdollisimman pian!", "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", - "home.show_announcements": "Näytä ilmoitukset", - "interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.", - "interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.", - "interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.", - "interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.", + "home.show_announcements": "Näytä tiedotteet", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", + "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", + "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", "interaction_modal.login.action": "Palaa aloitussivulle", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", @@ -326,15 +326,15 @@ "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", - "interaction_modal.title.follow": "Seuraa {name}", - "interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä", - "interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin", + "interaction_modal.title.follow": "Seuraa käyttäjää {name}", + "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", + "interaction_modal.title.reply": "Vastaa käyttäjän {name} julkaisuun", "intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}", "intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}", "intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}", "keyboard_shortcuts.back": "Siirry takaisin", "keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo", - "keyboard_shortcuts.boost": "Tehosta viestiä", + "keyboard_shortcuts.boost": "Tehosta julkaisua", "keyboard_shortcuts.column": "Kohdista sarakkeeseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", @@ -342,7 +342,7 @@ "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin", - "keyboard_shortcuts.favourites": "Avaa suosikkilista", + "keyboard_shortcuts.favourites": "Avaa suosikkiluettelo", "keyboard_shortcuts.federated": "Avaa yleinen aikajana", "keyboard_shortcuts.heading": "Pikanäppäimet", "keyboard_shortcuts.home": "Avaa kotiaikajana", @@ -354,16 +354,16 @@ "keyboard_shortcuts.my_profile": "Avaa profiilisi", "keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko", "keyboard_shortcuts.open_media": "Avaa media", - "keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä", + "keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo", "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili", - "keyboard_shortcuts.reply": "Vastaa viestiin", - "keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä", + "keyboard_shortcuts.reply": "Vastaa julkaisuun", + "keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo", "keyboard_shortcuts.search": "siirry hakukenttään", "keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä", "keyboard_shortcuts.start": "avaa \"Aloitus\"", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", - "keyboard_shortcuts.toot": "Luo uusi viesti", + "keyboard_shortcuts.toot": "Luo uusi julkaisu", "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä", "keyboard_shortcuts.up": "Siirry listassa ylöspäin", "lightbox.close": "Sulje", @@ -372,19 +372,19 @@ "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", "limited_account_hint.action": "Näytä profiili joka tapauksessa", - "limited_account_hint.title": "Palvelun {domain} ylläpito on piilottanut tämän profiilin.", + "limited_account_hint.title": "Palvelun {domain} valvojat ovat piilottaneet tämän profiilin.", "link_preview.author": "Julkaissut {name}", - "lists.account.add": "Lisää listaan", - "lists.account.remove": "Poista listasta", + "lists.account.add": "Lisää listalle", + "lists.account.remove": "Poista listalta", "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", - "lists.edit.submit": "Vaihda otsikko", - "lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi", + "lists.edit.submit": "Vaihda nimi", + "lists.exclusive": "Piilota nämä julkaisut kotisyötteestä", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", - "lists.replies_policy.followed": "Jokainen seurattu käyttäjä", - "lists.replies_policy.list": "Listan jäsenet", - "lists.replies_policy.none": "Ei kukaan", + "lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle", + "lists.replies_policy.list": "Listan jäsenille", + "lists.replies_policy.none": "Ei kellekään", "lists.replies_policy.title": "Näytä vastaukset:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listasi", @@ -400,23 +400,23 @@ "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", - "navigation_bar.compose": "Julkaise", + "navigation_bar.compose": "Kirjoita uusi julkaisu", "navigation_bar.direct": "Yksityiset maininnat", "navigation_bar.discover": "Löydä uutta", - "navigation_bar.domain_blocks": "Estetyt palvelut", + "navigation_bar.domain_blocks": "Estetyt verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.explore": "Selaa", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", "navigation_bar.followed_tags": "Seuratut aihetunnisteet", - "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", + "navigation_bar.follows_and_followers": "Seuratut ja seuraajat", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit sekä tietyt muut sivut avataan oletuksena perinteisessä käyttöliittymässä.", + "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen web-käyttöliittymään.", "navigation_bar.personal": "Henkilökohtainen", - "navigation_bar.pins": "Kiinnitetyt viestit", + "navigation_bar.pins": "Kiinnitetyt julkaisut", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.search": "Haku", @@ -430,9 +430,9 @@ "notification.mention": "{name} mainitsi sinut", "notification.own_poll": "Äänestyksesi on päättynyt", "notification.poll": "Äänestys, johon osallistuit, on päättynyt", - "notification.reblog": "{name} tehosti viestiäsi", - "notification.status": "{name} julkaisi juuri viestin", - "notification.update": "{name} muokkasi viestiä", + "notification.reblog": "{name} tehosti julkaisuasi", + "notification.status": "{name} julkaisi juuri", + "notification.update": "{name} muokkasi julkaisua", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.admin.report": "Uudet ilmoitukset:", @@ -446,7 +446,7 @@ "notifications.column_settings.follow_request": "Uudet seuraamispyynnöt:", "notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.poll": "Äänestyksen tulokset:", - "notifications.column_settings.push": "Push-ilmoitukset", + "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", @@ -477,7 +477,7 @@ "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", - "onboarding.follows.title": "Suosittua Mastodonissa", + "onboarding.follows.title": "Mukauta kotisyötettäsi", "onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!", "onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}", "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:", @@ -494,7 +494,7 @@ "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", - "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!", + "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", @@ -510,15 +510,15 @@ "poll.votes": "{votes, plural, one {# ääni} other {# ääntä}}", "poll_button.add_poll": "Lisää äänestys", "poll_button.remove_poll": "Poista äänestys", - "privacy.change": "Muuta viestin näkyvyyttä", - "privacy.direct.long": "Näkyvissä vain mainituille käyttäjille", - "privacy.direct.short": "Vain mainitut henkilöt", - "privacy.private.long": "Näkyvissä vain seuraajille", + "privacy.change": "Muuta julkaisun näkyvyyttä", + "privacy.direct.long": "Näkyy vain mainituille käyttäjille", + "privacy.direct.short": "Vain mainitut käyttäjät", + "privacy.private.long": "Näkyy vain seuraajille", "privacy.private.short": "Vain seuraajat", - "privacy.public.long": "Näkyvissä kaikille", + "privacy.public.long": "Näkyy kaikille", "privacy.public.short": "Julkinen", - "privacy.unlisted.long": "Näkyvissä kaikille, mutta jättäen pois hakemisen mahdollisuus", - "privacy.unlisted.short": "Listaamaton julkinen", + "privacy.unlisted.long": "Näkyy kaikille, mutta jää pois löytämisominaisuuksista", + "privacy.unlisted.short": "Listaamaton", "privacy_policy.last_updated": "Viimeksi päivitetty {date}", "privacy_policy.title": "Tietosuojakäytäntö", "refresh": "Päivitä", @@ -539,11 +539,11 @@ "report.block": "Estä", "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.", "report.categories.legal": "Lakiasiat", - "report.categories.other": "muu", + "report.categories.other": "Muu", "report.categories.spam": "Roskaposti", "report.categories.violation": "Sisältö rikkoo yhtä tai useampaa palvelimen sääntöä", - "report.category.subtitle": "Valitse se, mikä sopii parhaiten", - "report.category.title": "Kerro meille miksi tämä {type} pitää raportoida", + "report.category.subtitle": "Valitse sopivin", + "report.category.title": "Kerro meille, miksi tämä {type} pitää raportoida", "report.category.title_account": "profiili", "report.category.title_status": "julkaisu", "report.close": "Valmis", @@ -551,7 +551,7 @@ "report.forward": "Välitä kohteeseen {target}", "report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?", "report.mute": "Mykistä", - "report.mute_explanation": "Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.", + "report.mute_explanation": "Et näe hänen julkaisujaan. Hän voi silti seurata sinua ja nähdä julkaisusi. Hän ei tiedä, että hänet on mykistetty.", "report.next": "Seuraava", "report.placeholder": "Lisäkommentit", "report.reasons.dislike": "En pidä siitä", @@ -564,10 +564,10 @@ "report.reasons.spam_description": "Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset", "report.reasons.violation": "Se rikkoo palvelimen sääntöjä", "report.reasons.violation_description": "Tiedät, että se rikkoo tiettyjä sääntöjä", - "report.rules.subtitle": "Valitse kaikki jotka sopivat", + "report.rules.subtitle": "Valitse kaikki sopivat", "report.rules.title": "Mitä sääntöjä rikotaan?", "report.statuses.subtitle": "Valitse kaikki sopivat", - "report.statuses.title": "Onko olemassa yhtään viestiä, jotka tukevat tätä raporttia?", + "report.statuses.title": "Onko julkaisuja, jotka tukevat tätä raporttia?", "report.submit": "Lähetä", "report.target": "Raportoidaan {target}", "report.thanks.take_action": "Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:", @@ -576,7 +576,7 @@ "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.", "report.unfollow": "Lopeta käyttäjän @{name} seuraaminen", "report.unfollow_explanation": "Seuraat tätä tiliä. Estääksesi tilin viestejä näykymästä kotisyötteessäsi, lopeta sen seuraaminen.", - "report_notification.attached_statuses": "{count, plural, one {{count} viesti} other {{count} viestiä}} liitteenä", + "report_notification.attached_statuses": "{count, plural, one {{count} julkaisu} other {{count} julkaisua}} liitteenä", "report_notification.categories.legal": "Laillinen", "report_notification.categories.other": "Muu", "report_notification.categories.spam": "Roskaposti", @@ -588,7 +588,7 @@ "search.quick_action.go_to_account": "Avaa profiili {x}", "search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}", "search.quick_action.open_url": "Avaa URL-osoite Mastodonissa", - "search.quick_action.status_search": "Julkaisut, jotka vastaavat hakua {x}", + "search.quick_action.status_search": "Julkaisut haulla {x}", "search.search_or_paste": "Etsi tai kirjoita URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", "search_popout.language_code": "ISO-kielikoodi", @@ -602,8 +602,8 @@ "search_results.hashtags": "Aihetunnisteet", "search_results.nothing_found": "Näille hakusanoille ei löytynyt mitään", "search_results.see_all": "Näytä kaikki", - "search_results.statuses": "Viestit", - "search_results.title": "Etsi {q}", + "search_results.statuses": "Julkaisut", + "search_results.title": "Hae {q}", "server_banner.about_active_users": "Palvelinta käyttäneet ihmiset viimeisen 30 päivän aikana (kuukauden aktiiviset käyttäjät)", "server_banner.active_users": "aktiivista käyttäjää", "server_banner.administered_by": "Ylläpitäjä:", @@ -613,15 +613,15 @@ "sign_in_banner.create_account": "Luo tili", "sign_in_banner.sign_in": "Kirjaudu", "sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy", - "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.", - "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", - "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot", - "status.admin_status": "Avaa viesti moderointinäkymässä", + "sign_in_banner.text": "Kirjaudu sisään, niin voit seurata profiileja tai aihetunnisteita, lisätä julkaisuja suosikkeihin, jakaa julkaisuja ja vastata niihin. Voit olla vuorovaikutuksessa myös eri palvelimella olevalta tililtäsi.", + "status.admin_account": "Avaa tilin @{name} valvontanäkymä", + "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", + "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", "status.bookmark": "Tallenna kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", - "status.cannot_reblog": "Tätä viestiä ei voi tehostaa", - "status.copy": "Kopioi linkki viestiin", + "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", + "status.copy": "Kopioi linkki julkaisuun", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -630,8 +630,8 @@ "status.edited": "Muokattu {date}", "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}", "status.embed": "Upota", - "status.favourite": "Merkitse suosikiksi", - "status.filter": "Suodata tämä viesti", + "status.favourite": "Suosikki", + "status.filter": "Suodata tämä julkaisu", "status.filtered": "Suodatettu", "status.hide": "Piilota julkaisu", "status.history.created": "{name} luotu {date}", @@ -644,21 +644,21 @@ "status.more": "Lisää", "status.mute": "Mykistä @{name}", "status.mute_conversation": "Mykistä keskustelu", - "status.open": "Laajenna viesti", + "status.open": "Laajenna julkaisu", "status.pin": "Kiinnitä profiiliin", "status.pinned": "Kiinnitetty julkaisu", "status.read_more": "Näytä enemmän", "status.reblog": "Tehosta", "status.reblog_private": "Tehosta alkuperäiselle yleisölle", "status.reblogged_by": "{name} tehosti", - "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä viestiä. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.", "status.redraft": "Poista ja palauta muokattavaksi", "status.remove_bookmark": "Poista kirjanmerkki", "status.replied_to": "Vastattu {name}", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", "status.report": "Raportoi @{name}", - "status.sensitive_warning": "Arkaluontoista sisältöä", + "status.sensitive_warning": "Arkaluonteista sisältöä", "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", @@ -672,7 +672,7 @@ "status.uncached_media_warning": "Esikatselu ei ole käytettävissä", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", - "subscribed_languages.lead": "Vain valituilla kielillä julkaistut viestit näkyvät etusivullasi ja aikajanalla muutoksen jälkeen. Valitse ei mitään, jos haluat vastaanottaa viestejä kaikilla kielillä.", + "subscribed_languages.lead": "Vain valituilla kielillä kirjoitetut julkaisut näkyvät koti- ja lista-aikajanoillasi muutoksen jälkeen. Älä valitse mitään, jos haluat nähdä julkaisuja kaikilla kielillä.", "subscribed_languages.save": "Tallenna muutokset", "subscribed_languages.target": "Vaihda tilatut kielet {target}", "tabs_bar.home": "Koti", @@ -685,7 +685,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.", "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", - "timeline_hint.resources.statuses": "Vanhemmat viestit", + "timeline_hint.resources.statuses": "Vanhemmat julkaisut", "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", @@ -711,7 +711,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", - "upload_modal.preparing_ocr": "Valmistellaan OCR…", + "upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", @@ -725,5 +725,5 @@ "video.mute": "Mykistä ääni", "video.pause": "Keskeytä", "video.play": "Toista", - "video.unmute": "Poista äänen mykistys" + "video.unmute": "Palauta ääni" } diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index e61aa773dc..776991b014 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -17,6 +17,7 @@ "account.blocked": "Արգելափակուած է", "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.cancel_follow_request": "Withdraw follow request", + "account.direct": "Մասնաւոր յիշատակում @{name}", "account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել հաշիւը", @@ -85,9 +86,11 @@ "column.blocks": "Արգելափակուած օգտատէրեր", "column.bookmarks": "Էջանիշեր", "column.community": "Տեղական հոսք", + "column.direct": "Մասնաւոր յիշատակումներ", "column.directory": "Զննել անձնական էջերը", "column.domain_blocks": "Թաքցուած տիրոյթները", "column.favourites": "Հաւանածներ", + "column.firehose": "Հոսքեր", "column.follow_requests": "Հետեւելու հայցեր", "column.home": "Հիմնական", "column.lists": "Ցանկեր", @@ -135,6 +138,7 @@ "confirmations.block.block_and_report": "Արգելափակել եւ բողոքել", "confirmations.block.confirm": "Արգելափակել", "confirmations.block.message": "Վստա՞հ ես, որ ուզում ես արգելափակել {name}֊ին։", + "confirmations.cancel_follow_request.confirm": "Կասեցնել հայցը", "confirmations.delete.confirm": "Ջնջել", "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս գրառումը։", "confirmations.delete_list.confirm": "Ջնջել", @@ -216,6 +220,8 @@ "filter_modal.select_filter.search": "Որոնել կամ ստեղծել", "filter_modal.select_filter.title": "Զտել այս գրառումը", "firehose.all": "Բոլորը", + "firehose.local": "Այս հանգոյցը", + "firehose.remote": "Այլ հանգոյցներ", "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", @@ -246,6 +252,8 @@ "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", "home.show_announcements": "Ցուցադրել յայտարարութիւնները", + "interaction_modal.on_another_server": "Այլ հանգոյցում", + "interaction_modal.on_this_server": "Այս հանգոյցում", "interaction_modal.title.favourite": "Հաւանել {name}-ի գրառումը", "interaction_modal.title.follow": "Հետեւել {name}-ին", "interaction_modal.title.reblog": "Տարածել {name}-ի գրառումը", @@ -316,6 +324,7 @@ "navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.community_timeline": "Տեղական հոսք", "navigation_bar.compose": "Ստեղծել նոր գրառում", + "navigation_bar.direct": "Մասնաւոր յիշատակումներ", "navigation_bar.discover": "Բացայայտել", "navigation_bar.domain_blocks": "Թաքցուած տիրոյթներ", "navigation_bar.edit_profile": "Խմբագրել հաշիւը", @@ -451,11 +460,15 @@ "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "Այլ", "report_notification.categories.spam": "Սպամ", + "search.no_recent_searches": "Որոնման պատմութիւն չկայ", "search.placeholder": "Փնտրել", "search.search_or_paste": "Որոնել կամ դնել URL", + "search_popout.options": "Որոնման տեսակները", + "search_popout.recent": "Վերջին որոնումները", "search_results.accounts": "Հաշիւներ", "search_results.all": "Բոլորը", "search_results.hashtags": "Պիտակներ", + "search_results.see_all": "Տեսնել բոլորը", "search_results.statuses": "Գրառումներ", "search_results.title": "Որոնել {q}-ն", "server_banner.active_users": "ակտիւ մարդիկ", @@ -475,6 +488,8 @@ "status.copy": "Պատճէնել գրառման յղումը", "status.delete": "Ջնջել", "status.detailed_status": "Շղթայի ընդլայնուած դիտում", + "status.direct": "Մասնաւոր յիշատակում @{name}", + "status.direct_indicator": "Մասնաւոր յիշատակում", "status.edit": "Խմբագրել", "status.edited": "Խմբագրուել է՝ {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 2480f879ca..d35418e185 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -202,7 +202,7 @@ "dismissable_banner.community_timeline": "Šīs ir jaunākās publiskās ziņas no personām, kuru kontus mitina {domain}.", "dismissable_banner.dismiss": "Atcelt", "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.", - "dismissable_banner.explore_statuses": "Šīs ir ziņas no visa sociālā tīkla, kas šodien kļūst arvien populārākas. Jaunākas ziņas ar vairāk uzlabojumiem un iecienītākajām ziņām tiek novērtētas augstāk.", + "dismissable_banner.explore_statuses": "Ieraksti, kas šobrīd gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti neseni ieraksti, kas pastiprināti un pievienoti izlasēm.", "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", "dismissable_banner.public_timeline": "Šīs ir jaunākās publiskās ziņas no lietotājiem sociālajā tīmeklī, kurām seko lietotāji domēnā {domain}.", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", diff --git a/config/locales/de.yml b/config/locales/de.yml index 69151b2e70..d72b0a608f 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1069,7 +1069,7 @@ de: cas: CAS saml: SAML register: Registrieren - registration_closed: "%{instance} akzeptiert keine neuen Mitglieder*innen" + registration_closed: "%{instance} akzeptiert keine neuen Mitglieder" resend_confirmation: Bestätigungslink erneut zusenden reset_password: Passwort zurücksetzen rules: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index 9a51d07576..e7ab9462dc 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -6,22 +6,22 @@ en-GB: send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. failure: - already_authenticated: You are already signed in. + already_authenticated: You are already logged in. inactive: Your account is not activated yet. invalid: Invalid %{authentication_keys} or password. last_attempt: You have one more attempt before your account is locked. locked: Your account is locked. not_found_in_database: Invalid %{authentication_keys} or password. pending: Your account is still under review. - timeout: Your session expired. Please sign in again to continue. - unauthenticated: You need to sign in or sign up before continuing. + timeout: Your session expired. Please log in again to continue. + unauthenticated: You need to log in or sign up before continuing. unconfirmed: You have to confirm your email address before continuing. mailer: confirmation_instructions: action: Verify email address action_with_app: Confirm and return to %{app} explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. - explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can login to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can log in to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. extra_html: Please also check out the rules of the server and our terms of service. subject: 'Mastodon: Confirmation instructions for %{instance}' title: Verify email address @@ -84,28 +84,28 @@ en-GB: no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. - updated: Your password has been changed successfully. You are now signed in. + updated: Your password has been changed successfully. You are now logged in. updated_not_active: Your password has been changed successfully. registrations: destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. signed_up: Welcome! You have signed up successfully. - signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. - signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_inactive: You have signed up successfully. However, we could not log you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not log you in because your account is locked. signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. updated: Your account has been updated successfully. sessions: - already_signed_out: Signed out successfully. - signed_in: Signed in successfully. - signed_out: Signed out successfully. + already_signed_out: Logged out successfully. + signed_in: Logged in successfully. + signed_out: Logged out successfully. unlocks: send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. - unlocked: Your account has been unlocked successfully. Please sign in to continue. + unlocked: Your account has been unlocked successfully. Please log in to continue. errors: messages: - already_confirmed: was already confirmed, please try signing in + already_confirmed: was already confirmed, please try logging in confirmation_period_expired: needs to be confirmed within %{period}, please request a new one expired: has expired, please request a new one not_found: not found diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 71958c5b3d..81b248ef2e 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -6,7 +6,7 @@ fi: name: Sovelluksen nimi redirect_uri: Uudelleenohjauksen URI scopes: Oikeudet - website: Sovelluksen verkkosivu + website: Sovelluksen verkkosivusto errors: models: doorkeeper/application: @@ -135,7 +135,7 @@ fi: media: Medialiitteet mutes: Mykistykset notifications: Ilmoitukset - push: Push-ilmoitukset + push: Puskuilmoitukset reports: Raportit search: Hae statuses: Viestit @@ -147,49 +147,49 @@ fi: application: title: OAuth-valtuutus tarvitaan scopes: - admin:read: lukea kaikkia tietoja palvelimelta - admin:read:accounts: lue arkaluontoinen sisältö kaikilta tileiltä - admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista kanonisesti sallituista sähköpostiosoitteista + admin:read: lue kaikkia palvelimen tietoja + admin:read:accounts: lue arkaluonteisia tietoja kaikista tileistä + admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista estetyistä kanonisista sähköpostiosoitteista admin:read:domain_allows: lue arkaluonteisia tietoja kaikista sallituista verkkotunnuksista admin:read:domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä verkkotunnuksista admin:read:email_domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä sähköpostiverkkotunnuksista admin:read:ip_blocks: lue arkaluonteisia tietoja kaikista estetyistä IP-osoitteista - admin:read:reports: lue arkaluonteiset tiedot kaikista raporteista ja raportoiduista tileistä - admin:write: muokata kaikkia tietoja palvelimella - admin:write:accounts: suorita moderointitoiminnot tileillä - admin:write:canonical_email_blocks: toteuta moderointitoimenpiteitä kanonisille sähköpostiosoite-estoille - admin:write:domain_allows: toteuta moderointitoimenpiteitä sallituille verkkotunnuksille - admin:write:domain_blocks: toteuta moderointitoimenpiteitä estetyille verkkotunnuksille - admin:write:email_domain_blocks: toteuta moderointitoimenpiteitä estetyille sähköpostiverkkotunnuksille - admin:write:ip_blocks: toteuta moderointitoimenpiteitä estetyille IP-osoitteille - admin:write:reports: suorita moderointitoiminnot raporteissa - crypto: käytä päästä päähän salausta - follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen - push: vastaanottaa push-ilmoituksesi - read: lukea tilin tietoja - read:accounts: nähdä tilin tiedot - read:blocks: katso lohkosi - read:bookmarks: katso kirjanmerkkisi - read:favourites: näytä suosikkisi - read:filters: katso suodattimesi - read:follows: katso ketä seuraat - read:lists: katso listasi - read:mutes: katso mykistyksesi - read:notifications: katso ilmoitukset - read:reports: katso raporttisi - read:search: haku sinun puolesta - read:statuses: katso kaikki viestit - write: julkaista puolestasi - write:accounts: muokata profiiliasi - write:blocks: estää tilit ja palvelimet - write:bookmarks: kirjanmerkki viestit - write:conversations: mykistä ja poistaa keskustelut + admin:read:reports: lue arkaluonteisia tietoja kaikista raporteista ja raportoiduista tileistä + admin:write: muokkaa kaikkia palvelimen tietoja + admin:write:accounts: suorita valvontatoimia tileille + admin:write:canonical_email_blocks: suorita valvontatoimia estetyille kanonisille sähköpostiosoitteille + admin:write:domain_allows: suorita valvontatoimia sallituille verkkotunnuksille + admin:write:domain_blocks: suorita valvontatoimia estetyille verkkotunnuksille + admin:write:email_domain_blocks: suorita valvontatoimia estetyille sähköpostiverkkotunnuksille + admin:write:ip_blocks: suorita valvontatoimia estetyille IP-osoitteille + admin:write:reports: suorita valvontatoimia raporteille + crypto: käytä päästä päähän -salausta + follow: muokkaa tilin suhteita + push: vastaanota puskuilmoituksiasi + read: lue kaikkia tilin tietoja + read:accounts: katso tilien tietoja + read:blocks: katso estojasi + read:bookmarks: katso kirjanmerkkejäsi + read:favourites: katso suosikkejasi + read:filters: katso suodattimiasi + read:follows: katso seurattujasi + read:lists: katso listojasi + read:mutes: katso mykistyksiäsi + read:notifications: katso ilmoituksiasi + read:reports: katso raporttejasi + read:search: hae puolestasi + read:statuses: katso kaikkia julkaisujasi + write: muokkaa kaikkia tilisi tietoja + write:accounts: muokkaa profiiliasi + write:blocks: estä tilejä ja verkkotunnuksia + write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut - write:filters: luoda suodattimia - write:follows: seurata ihmisiä - write:lists: luoda listoja - write:media: lähettää mediatiedostoja - write:mutes: mykistää ihmisiä ja keskusteluja - write:notifications: tyhjentää ilmoituksesi - write:reports: raportoi muille ihmisille - write:statuses: julkaise viestejä + write:filters: luo suodattimia + write:follows: seuraa käyttäjiä + write:lists: luo listoja + write:media: lähetä mediatiedostoja + write:mutes: mykistä käyttäjiä ja keskusteluja + write:notifications: tyhjennä ilmoituksesi + write:reports: raportoi muita käyttäjiä + write:statuses: julkaise julkaisuja diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index ca61644632..98a40c45cf 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1028,7 +1028,7 @@ en-GB: applications: created: Application successfully created destroyed: Application successfully deleted - logout: Logout + logout: Log out regenerate_token: Regenerate access token token_regenerated: Access token successfully regenerated warning: Be very careful with this data. Never share it with anyone! @@ -1055,7 +1055,7 @@ en-GB: link_to_webauth: Use your security key device log_in_with: Log in with login: Log in - logout: Logout + logout: Log out migrate_account: Move to a different account migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. or_log_in_with: Or log in with @@ -1089,8 +1089,8 @@ en-GB: new_confirmation_instructions_sent: You will receive a new e-mail with the confirmation link in a few minutes! title: Check your inbox sign_in: - preamble_html: Sign in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. - title: Sign in to %{domain} + preamble_html: Log in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. + title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted. @@ -1379,8 +1379,8 @@ en-GB: webauthn: security keys description_html: If you see activity that you don't recognise, consider changing your password and enabling two-factor authentication. empty: No authentication history available - failed_sign_in_html: Failed sign-in attempt with %{method} from %{ip} (%{browser}) - successful_sign_in_html: Successful sign-in with %{method} from %{ip} (%{browser}) + failed_sign_in_html: Failed login attempt with %{method} from %{ip} (%{browser}) + successful_sign_in_html: Successful login with %{method} from %{ip} (%{browser}) title: Authentication history mail_subscriptions: unsubscribe: @@ -1773,11 +1773,11 @@ en-GB: title: Archive takeout suspicious_sign_in: change_password: change your password - details: 'Here are details of the sign-in:' - explanation: We've detected a sign-in to your account from a new IP address. + details: 'Here are details of the login:' + explanation: We've detected a login to your account from a new IP address. further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure. subject: Your account has been accessed from a new IP address - title: A new sign-in + title: A new login warning: appeal: Submit an appeal appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}. @@ -1790,7 +1790,7 @@ en-GB: mark_statuses_as_sensitive: Some of your posts have been marked as sensitive by the moderators of %{instance}. This means that people will need to tap the media in the posts before a preview is displayed. You can mark media as sensitive yourself when posting in the future. sensitive: From now on, all your uploaded media files will be marked as sensitive and hidden behind a click-through warning. silence: You can still use your account but only people who are already following you will see your posts on this server, and you may be excluded from various discovery features. However, others may still manually follow you. - suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. + suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still log in to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. reason: 'Reason:' statuses: 'Posts cited:' subject: @@ -1825,7 +1825,7 @@ en-GB: invalid_otp_token: Invalid two-factor code otp_lost_help_html: If you lost access to both, you may get in touch with %{email} seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. - signed_in_as: 'Signed in as:' + signed_in_as: 'Logged in as:' verification: extra_instructions_html: Tip: The link on your website can be invisible. The important part is rel="me" which prevents impersonation on websites with user-generated content. You can even use a link tag in the header of the page instead of a, but the HTML must be accessible without executing JavaScript. here_is_how: Here's how diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5403f22473..8a5d72a661 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -12,24 +12,24 @@ fi: one: seuraaja other: seuraajaa following: seurattu(a) - instance_actor_flash: Tämä on virtuaalitili, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään yhdistämistarkoituksiin, eikä sitä tule jäädyttää. + 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} nothing_here: Täällä ei ole mitään! pin_errors: following: Sinun täytyy seurata henkilöä jota haluat tukea posts: - one: viesti + one: Julkaisu other: viestiä - posts_tab_heading: Viestit + posts_tab_heading: Julkaisut admin: account_actions: action: Suorita toimenpide - title: Suorita moderointitoiminto %{acct} + title: Suorita valvontatoimi käyttäjälle %{acct} account_moderation_notes: create: Jätä muistiinpano - created_msg: Moderointimerkinnän luonti onnistui! - destroyed_msg: Moderointimerkinnän poisto onnistui! + created_msg: Valvontamerkinnän luonti onnistui! + destroyed_msg: Valvontamerkinnän poisto onnistui! accounts: add_email_domain_block: Estä sähköpostidomain approve: Hyväksy @@ -48,7 +48,7 @@ fi: changed_msg: Rooli vaihdettu onnistuneesti! label: Vaihda roolia no_role: Ei roolia - title: Vaihda roolia käyttäjälle %{username} + title: Vaihda käyttäjän %{username} roolia confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan @@ -61,7 +61,7 @@ fi: disable_sign_in_token_auth: Poista sähköpostitunnuksen todennus käytöstä disable_two_factor_authentication: Poista 2FA käytöstä disabled: Poistettu käytöstä - display_name: Nimimerkki + display_name: Näyttönimi domain: Verkkotunnus edit: Muokkaa email: Sähköposti @@ -71,7 +71,7 @@ fi: enabled: Käytössä enabled_msg: Käyttäjän %{username} tili palautettu onnistuneesti käyttöön followers: Seuraajat - follows: Seuraa + follows: Seuratut header: Otsakekuva inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen @@ -94,9 +94,9 @@ fi: disabled: Ei käytössä pending: Odottavat silenced: Rajoitettu - suspended: Jäähyllä - title: Moderointi - moderation_notes: Moderointimerkinnät + suspended: Jäädytetty + title: Valvonta + moderation_notes: Valvontamerkinnät most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu @@ -104,7 +104,7 @@ fi: no_role_assigned: Roolia ei ole määritetty not_subscribed: Ei tilaaja pending: Odottaa tarkistusta - perform_full_suspension: Siirrä kokonaan jäähylle + perform_full_suspension: Jäädytä previous_strikes: Aiemmat varoitukset previous_strikes_description_html: one: Tällä tilillä on yksi varoitus. @@ -118,7 +118,7 @@ fi: reject: Hylkää rejected_msg: Käyttäjän %{username} rekisteröitymishakemus hylättiin remote_suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. - remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja tilin kaikki tiedot poistetaan %{date}. Ennen tätä ajankohtaa on kyseessä olevan palvelimen ylläpidolla mahdollisuus palauttaa tili ongelmitta. Jos puolestaan haluat poistaa tilin tietoineen heti, onnistuu se alta. + remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja kaikki tiedot poistetaan %{date}. Sitä ennen etäpalvelin voi palauttaa tilin ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. remove_avatar: Poista profiilikuva remove_header: Poista otsakekuva removed_avatar_msg: Käyttäjän %{username} avatar-kuva poistettu onnistuneesti @@ -144,21 +144,21 @@ fi: show: created_reports: Tämän tilin luomat raportit targeted_reports: Tästä tilistä tehdyt raportit - silence: Hiljennä - silenced: Mykistetty - statuses: Viestit + silence: Rajoita + silenced: Rajoitettu + statuses: Julkaisut strikes: Aiemmat varoitukset subscribe: Tilaa suspend: Jäädytä - suspended: Jäähyllä - suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit peruuttaa tilin jäädyttämisen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. - suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ilman haitallisia vaikutuksia. Jos haluat poistaa kaikki tilin tiedot välittömästi, voit tehdä sen alla. + suspended: Jäädytetty + suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit kumota tilin jäädytyksen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. + suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. title: Tilit unblock_email: Poista sähköpostiosoitteen esto unblocked_email_msg: Käyttäjän %{username} sähköpostiosoitteen esto kumottiin unconfirmed_email: Sähköpostia ei vahvistettu undo_sensitized: Kumoa pakotus arkaluonteiseksi tiliksi - undo_silenced: Peru hiljennys + undo_silenced: Kumoa rajoitus undo_suspension: Peru jäähy unsilenced_msg: Tilin %{username} rajoituksen kumoaminen onnistui unsubscribe: Lopeta tilaus @@ -167,7 +167,7 @@ fi: view_domain: Näytä verkkotunnuksen yhteenveto warn: Varoita web: Verkko - whitelisted: Sallittu federaatioon + whitelisted: Sallittu federoimaan action_logs: action_types: approve_appeal: Hyväksy valitus @@ -177,7 +177,7 @@ fi: change_role_user: Muuta käyttäjän roolia confirm_user: Vahvista käyttäjä create_account_warning: Luo varoitus - create_announcement: Luo ilmoitus + create_announcement: Luo tiedote create_canonical_email_block: Luo sähköpostin esto create_custom_emoji: Luo mukautettu emoji create_domain_allow: Luo verkkotunnuksen salliminen @@ -187,7 +187,7 @@ fi: create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus create_user_role: Luo rooli demote_user: Alenna käyttäjä - destroy_announcement: Poista ilmoitus + destroy_announcement: Poista tiedote destroy_canonical_email_block: Poista sähköpostin esto destroy_custom_emoji: Poista mukautettu emoji destroy_domain_allow: Poista verkkotunnuksen salliminen @@ -195,7 +195,7 @@ fi: destroy_email_domain_block: Poista sähköpostin verkkotunnuksen esto destroy_instance: Tyhjennä verkkotunnus destroy_ip_block: Poista IP-sääntö - destroy_status: Poista viesti + destroy_status: Poista julkaisu destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus destroy_user_role: Hävitä rooli disable_2fa_user: Poista kaksivaiheinen tunnistautuminen käytöstä @@ -215,77 +215,77 @@ fi: reset_password_user: Nollaa salasana resolve_report: Selvitä raportti sensitive_account: Pakotus arkaluontoiseksi tiliksi - silence_account: Hiljennä tili + silence_account: Rajoita tiliä suspend_account: Jäädytä tili unassigned_report: Peruuta raportin määritys unblock_email_account: Poista sähköpostiosoitteen esto unsensitive_account: Kumoa pakotus arkaluontoiseksi tiliksi - unsilence_account: Peruuta tilin rajoitus - unsuspend_account: Peruuta tilin jäädytys - update_announcement: Päivitä ilmoitus - update_custom_emoji: Päivitä muokattu emoji + unsilence_account: Kumoa tilin rajoitus + unsuspend_account: Kumoa tilin jäädytys + update_announcement: Päivitä tiedote + update_custom_emoji: Päivitä mukautettu emoji update_domain_block: Päivitä verkkotunnuksen esto update_ip_block: Päivitä IP-sääntö - update_status: Päivitä viesti + update_status: Päivitä julkaisu update_user_role: Päivitä rooli actions: - approve_appeal_html: "%{name} hyväksyi moderointipäätöksen muutoksenhaun lähettäjältä %{target}" + approve_appeal_html: "%{name} hyväksyi valvontapäätöksen valituksen käyttäjältä %{target}" approve_user_html: "%{name} hyväksyi käyttäjän rekisteröitymisen kohteesta %{target}" assigned_to_self_report_html: "%{name} otti raportin %{target} tehtäväkseen" change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen" change_role_user_html: "%{name} muutti käyttäjän %{target} roolia" confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" create_account_warning_html: "%{name} lähetti varoituksen käyttäjälle %{target}" - create_announcement_html: "%{name} loi uuden ilmoituksen %{target}" + create_announcement_html: "%{name} loi uuden tiedotteen %{target}" create_canonical_email_block_html: "%{name} esti sähköpostin hashilla %{target}" create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}" - create_domain_allow_html: "%{name} salli federaation verkkotunnuksella %{target}" + create_domain_allow_html: "%{name} salli federoinnin verkkotunnuksen %{target} kanssa" create_domain_block_html: "%{name} esti verkkotunnuksen %{target}" create_email_domain_block_html: "%{name} esti sähköpostin %{target}" create_ip_block_html: "%{name} loi IP-säännön %{target}" create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" create_user_role_html: "%{name} loi roolin %{target}" demote_user_html: "%{name} alensi käyttäjän %{target}" - destroy_announcement_html: "%{name} poisti ilmoituksen %{target}" + destroy_announcement_html: "%{name} poisti tiedotteen %{target}" destroy_canonical_email_block_html: "%{name} poisti sähköpostieston hashilla %{target}" destroy_custom_emoji_html: "%{name} poisti emojin %{target}" - destroy_domain_allow_html: "%{name} esti federaation verkkotunnuksella %{target}" + destroy_domain_allow_html: "%{name} kielsi federoinnin verkkotunnuksen %{target} kanssa" destroy_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" destroy_email_domain_block_html: "%{name} poisti sähköpostin verkkotunnuksen %{target} eston" destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}" destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" - destroy_status_html: "%{name} poisti käyttäjän %{target} viestin" + destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun" destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}" destroy_user_role_html: "%{name} poisti roolin %{target}" disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen" disable_custom_emoji_html: "%{name} poisti käytöstä emojin %{target}" disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" - enable_custom_emoji_html: "%{name} salli emojin %{target}" + enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" - reject_appeal_html: "%{name} hylkäsi moderointipäätöksen muutoksenhaun %{target}" + reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" reject_user_html: "%{name} hylkäsi käyttäjän rekisteröitymisen kohteesta %{target}" remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" reopen_report_html: "%{name} avasi uudelleen raportin %{target}" - resend_user_html: "%{name} lähetti vahvistusviestin sähköpostitse käyttäjälle %{target}" + resend_user_html: "%{name} lähetti vahvistussähköpostiviestin uudelleen käyttäjälle %{target}" reset_password_user_html: "%{name} palautti käyttäjän %{target} salasanan" resolve_report_html: "%{name} ratkaisi raportin %{target}" sensitive_account_html: "%{name} merkitsi käyttäjän %{target} median arkaluonteiseksi" - silence_account_html: "%{name} rajoitti käyttäjän %{target} tilin" - suspend_account_html: "%{name} siirsi käyttäjän %{target} jäähylle" + silence_account_html: "%{name} rajoitti käyttäjän %{target} tiliä" + suspend_account_html: "%{name} jäädytti käyttäjän %{target} tilin" unassigned_report_html: "%{name} peruutti raportin määrityksen %{target}" unblock_email_account_html: "%{name} poisti käyttäjän %{target} sähköpostiosoitteen eston" unsensitive_account_html: "%{name} poisti käyttäjän %{target} median arkaluonteisen merkinnän" - unsilence_account_html: "%{name} ei tehnyt rajoitusta %{target} tilille" - unsuspend_account_html: "%{name} perui käyttäjän %{target} jäähyn" - update_announcement_html: "%{name} päivitti ilmoituksen %{target}" + unsilence_account_html: "%{name} kumosi käyttäjän %{target} rajoituksen" + unsuspend_account_html: "%{name} kumosi käyttäjän %{target} tilin jäädytyksen" + update_announcement_html: "%{name} päivitti tiedotteen %{target}" update_custom_emoji_html: "%{name} päivitti emojin %{target}" update_domain_block_html: "%{name} päivitti verkkotunnuksen %{target} eston" update_ip_block_html: "%{name} muutti sääntöä IP-osoitteelle %{target}" - update_status_html: "%{name} päivitti viestin %{target}" + update_status_html: "%{name} päivitti käyttäjän %{target} julkaisun" update_user_role_html: "%{name} muutti roolia %{target}" deleted_account: poisti tilin empty: Lokeja ei löytynyt. @@ -293,43 +293,43 @@ fi: filter_by_user: Suodata käyttäjän mukaan title: Auditointiloki announcements: - destroyed_msg: Ilmoitus poistettu onnistuneesti! + destroyed_msg: Tiedote poistettu onnistuneesti! edit: - title: Muokkaa ilmoitusta - empty: Yhtään ilmoitusta ei löytynyt. - live: Suora + title: Muokkaa tiedotetta + empty: Tiedotteita ei löytynyt. + live: Julki new: - create: Luo ilmoitus - title: Uusi ilmoitus + create: Luo tiedote + title: Uusi tiedote publish: Julkaise - published_msg: Ilmoitus julkaistu onnistuneesti! - scheduled_for: Ajastettu %{time} - scheduled_msg: Ilmoitus on ajastettu julkaisua varten! - title: Ilmoitukset + published_msg: Tiedote julkaistu onnistuneesti! + scheduled_for: Ajoitettu %{time} + scheduled_msg: Tiedotteen julkaisu ajoitettu! + title: Tiedotteet unpublish: Lopeta julkaisu - unpublished_msg: Ilmoituksen julkaisu lopetettu! - updated_msg: Ilmoitus päivitetty onnistuneesti! + unpublished_msg: Tiedotteen julkaisu lopetettu onnistuneesti! + updated_msg: Tiedote päivitetty onnistuneesti! critical_update_pending: Kriittinen päivitys odottaa custom_emojis: - assign_category: Aseta kategoria + assign_category: Aseta luokka by_domain: Verkkotunnus copied_msg: Emojin paikallisen kopion luonti onnistui copy: Kopioi copy_failed_msg: Emojista ei voitu tehdä paikallista kopiota - create_new_category: Luo uusi kategoria - created_msg: Emojin luotu! + create_new_category: Luo uusi luokka + created_msg: Emojin luonti onnistui! delete: Poista - destroyed_msg: Emojo poistettu! + destroyed_msg: Emojon poisto onnistui! disable: Poista käytöstä disabled: Ei käytössä - disabled_msg: Emojin poisto käytöstä onnistui + disabled_msg: Emojin käytöstäpoisto onnistui emoji: Emoji enable: Ota käyttöön enabled: Käytössä enabled_msg: Emojin käyttöönotto onnistui image_hint: PNG tai GIF, enintään %{size} - list: Listaa - listed: Listassa + list: Lisää listalle + listed: Listalla new: title: Lisää uusi mukautettu emoji no_emoji_selected: Emojeita ei muutettu, koska yhtään ei valittu @@ -340,7 +340,7 @@ fi: title: Mukautetut emojit uncategorized: Luokittelemattomat unlist: Poista listalta - unlisted: Ei listassa + unlisted: Ei listalla update_failed_msg: Emojin päivitys epäonnistui updated_msg: Emojin päivitys onnistui! upload: Lähetä @@ -349,26 +349,26 @@ fi: interactions: vuorovaikutukset media_storage: Median tallennustila new_users: uudet käyttäjät - opened_reports: raportit avattu + opened_reports: avatut raportit pending_appeals_html: one: "%{count} vireillä oleva valitus" - other: "%{count} vireillä olevat valitukset" + other: "%{count} vireillä olevaa valitusta" pending_reports_html: one: "%{count} odottava raportti" - other: "%{count} odottavat raportit" + other: "%{count} odottavaa raporttia" pending_tags_html: - one: "%{count} odottava hashtagi" + one: "%{count} odottava aihetunniste" other: "%{count} odottavaa aihetunnistetta" pending_users_html: one: "%{count} odottava käyttäjä" - other: "%{count} odottavat käyttäjät" - resolved_reports: raportit ratkaistu + other: "%{count} odottavaa käyttäjää" + resolved_reports: ratkaistut raportit software: Ohjelmisto sources: Rekisteröitymisen lähteet space: Tilankäyttö title: Hallintapaneeli - top_languages: Aktiiviset kielet - top_servers: Aktiiviset palvelimet + top_languages: Aktiivisimmat kielet + top_servers: Aktiivisimmat palvelimet website: Sivusto disputes: appeals: @@ -376,8 +376,8 @@ fi: title: Valitukset domain_allows: add_new: Salli liitto verkkotunnuksella - created_msg: Verkkotunnus on onnistuneesti sallittu federaatiolle - destroyed_msg: Verkkotunnus on estetty federaatiossa + created_msg: Verkkotunnus on onnistuneesti sallittu federoinnille + destroyed_msg: Verkkotunnusta on kielletty federoimasta export: Vie import: Tuo undo: Estä liitto verkkotunnukselle @@ -389,34 +389,34 @@ fi: permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita. preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} ja sen aliverkkotunnukset. remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä. - stop_communication: Palvelimesi lopettaa näiden palvelinten viestinnän. + stop_communication: Palvelimesi lopettaa viestinnän näiden palvelinten kanssa. title: Vahvista verkkotunnuksen %{domain} esto undo_relationships: Tämä kumoaa näiden palvelimien ja sinun tilien välisen seurannan. created_msg: Verkkotunnuksen estoa käsitellään destroyed_msg: Verkkotunnuksen esto on peruttu domain: Verkkotunnus edit: Muokkaa verkkotunnuksen estoa - existing_domain_block: Olet jo asettanut tiukemmat rajoitukset %{name}. - existing_domain_block_html: Olet jo asettanut %{name} tiukemmat rajat ja sinun täytyy poistaa se ensin. + existing_domain_block: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}. + existing_domain_block_html: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}, joten sinun täytyy poistaa sen esto ensin. export: Vie import: Tuo new: create: Luo esto - hint: Verkkotunnuksen esto ei estä tilien luomista ja lisäämistä tietokantaan, mutta se soveltaa näihin tileihin automaattisesti määrättyjä moderointitoimia tilin luomisen jälkeen. + hint: Verkkotunnuksen esto ei estä tilien lisäämistä tietokantaan, mutta se soveltaa näihin tileihin takautuvasti ja automaattisesti tiettyjä valvontatoimia. severity: - desc_html: "Rajoita -valinta piilottaa tämän verkkoalueen tilien julkaisut heiltä, jotka eivät seuraa kyseisiä tilejä. Lopeta poistaa kaiken sisällön, median ja profiilien tiedot tämän verkkotunnuksen tileiltä palvelimellasi. Käytä valintaa Ei mitään, jos haluat vain estää mediatiedostojen julkaisemisen." + desc_html: Valinta Rajoita piilottaa tässä verkkotunnuksessa sijaitsevien tilien julkaisut kaikilta, jotka eivät seuraa näitä tilejä. Valinta Jäädytä poistaa palvelimeltasi kaikkien tässä verkkotunnuksessa sijaitsevien tilien sisällön, median ja profiilitiedot. Käytä valintaa Ei mitään, jos haluat vain hylätä mediatiedostot. noop: Ei mitään silence: Rajoita - suspend: Jäähy + suspend: Jäädytä title: Uusi verkkotunnuksen esto no_domain_block_selected: Verkkoalue-estoihin ei tehty muutoksia, koska valintoja ei tehty not_permitted: Nykyiset käyttöoikeutesi eivät kata tätä toimintoa obfuscate: Peitä verkkotunnuksen nimi - obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos verkkotunnuksen rajoitusten luettelo on käytössä + obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos julkinen verkkotunnusten rajoitusluettelo on käytössä private_comment: Yksityinen kommentti private_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta, valvojien sisäiseen käyttöön. public_comment: Julkinen kommentti - public_comment_hint: Kommentoi tätä verkkotunnukselle koskevaa rajoitusta suurelle yleisölle, jos verkkotunnusten luettelon mainonta on käytössä. + public_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta suurelle yleisölle, jos julkinen verkkotunnusten rajoitusluettelo on käytössä. reject_media: Hylkää mediatiedostot reject_media_hint: Poistaa paikallisesti tallennetut mediatiedostot eikä lataa niitä enää jatkossa. Ei merkitystä jäähyn kohdalla reject_reports: Hylkää raportit @@ -449,7 +449,7 @@ fi: no_file: Yhtäkään tiedostoa ei ole valittu export_domain_blocks: import: - description_html: Olet tuomassa järjestelmään luetteloa verkkoalue-estoista. Tarkista luettelo huolella – etenkin, ellet ole itse tehnyt listausta. + description_html: Olet tuomassa verkkotunnusten estoluetteloa. Tarkista luettelo huolella – etenkin, jos et ole laatinut sitä itse. existing_relationships_warning: Olemassa olevat seuraussuhteet private_comment_description_html: 'Tuodun estolistan alkuperän selvillä pitämiseksi, lisätään tietojen yhteyteen seuraava yksityinen kommentti: %{comment}' private_comment_template: Tuotu lähteestä %{source}, pvm %{date} @@ -459,13 +459,13 @@ fi: title: Tuo luettelo verkkoalue-estoista no_file: Yhtäkään tiedostoa ei ole valittu follow_recommendations: - description_html: "Suositusten noudattaminen auttaa uusia käyttäjiä löytämään nopeasti mielenkiintoista sisältöä.. Jos käyttäjä ei ole ollut vuorovaikutuksessa tarpeeksi muiden kanssa luodakseen henkilökohtaisia seuraajia, näitä muita tilejä suositellaan sen sijaan. Ne lasketaan uudelleen päivittäin yhdistelmästä tilejä, joilla on korkein viimeaikainen käyttö ja korkein paikallinen seuraajien määrä tietyllä kielellä." + description_html: "Seuraamissuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä." language: Kielelle status: Tila - suppress: Peitä noudata suosituksia - suppressed: Rajoitettu - title: Noudata suosituksia - unsuppress: Palauta seuraa suositus + suppress: Hylkää seuraamissuositus + suppressed: Hylätty + title: Seuraamissuositukset + unsuppress: Palauta seuraamissuositus instances: availability: description_html: @@ -490,7 +490,7 @@ fi: policies: reject_media: Hylkää media reject_reports: Hylkää raportit - silence: Rajoitus + silence: Rajoita suspend: Jäädytä policy: Käytännöt reason: Julkinen syy @@ -503,7 +503,7 @@ fi: instance_languages_dimension: Suosituimmat kielet instance_media_attachments_measure: tallennetut median liitteet instance_reports_measure: niitä koskevat raportit - instance_statuses_measure: tallennetut viestit + instance_statuses_measure: tallennetut julkaisut delivery: all: Kaikki clear: Tyhjennä toimitusvirheet @@ -522,12 +522,12 @@ fi: moderation: all: Kaikki limited: Rajoitettu - title: Moderointi + title: Valvonta private_comment: Yksityinen kommentti public_comment: Julkinen kommentti purge: Tyhjennä - purge_description_html: Jos uskot tämän verkkotunnuksen olevan offline-tilassa, voit poistaa kaikki tilitietueet ja niihin liittyvät tiedot sinun tallennustilasta. Tämä voi kestää jonkin aikaa. - title: Tiedossa olevat instanssit + purge_description_html: Jos uskot, että tämä verkkotunnus on offline-tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa. + title: Federointi total_blocked_by_us: Estetty meidän toimesta total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama @@ -562,11 +562,11 @@ fi: relays: add_new: Lisää uusi välittäjä delete: Poista - description_html: "federaatiovälittäjä on välityspalvelin, joka siirtää siihen liittyneiden palvelimien välillä suuria julksia viestimääriä. Tämä voi auttaa pieniä ja keskikokoisia palvelimia löytämään fediversen sisältöä, joka muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvelimien käyttäjiä manuaalisesti." + description_html: "Federointivälittäjä on välityspalvelin, joka siirtää suuria määriä julkisia julkaisuja siihen liittyneiden palvelinten välillä. Se voi auttaa pieniä ja keskisuuria palvelimia löytämään fediversumin sisältöä, mikä muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvalinten käyttäjiä manuaalisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Poissa käytöstä enable: Ota käyttöön - enable_hint: Kun tämä on otettu käyttöön, palvelimesi liittyy välittäjään ja vastaanottaa jatkossa kaikki sen jakelemat julkiset julkaisut sekä välittää omat julkiset julkaisunsa sille. + enable_hint: Kun tämä on otettu käyttöön, palvelimesi tilaa välittäjältä kaikki sen välittämät julkiset julkaisut ja alkaa lähettää omansa sille. enabled: Käytössä inbox_url: Välittäjän URL pending: Odotetaan välittäjän hyväksyntää @@ -586,13 +586,13 @@ fi: action_log: Tarkastusloki action_taken_by: Toimenpiteen tekijä actions: - delete_description_html: Ilmoitetut viestit poistetaan ja kirjataan varoitus, joka auttaa sinua saman tilin tulevista rikkomuksista. - mark_as_sensitive_description_html: Ilmoitettujen viestien media merkitään arkaluonteisiksi ja varoitus tallennetaan, jotta voit kärjistää saman tilin tulevia rikkomuksia. - other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja ilmoitetun tilin viestinnän mukauttamiseksi. - resolve_description_html: Ilmoitettua tiliä vastaan ei ryhdytä toimenpiteisiin, varoitusta ei kirjata ja raportti suljetaan. - silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai estävät sen manuaalisesti, mikä rajoittaa merkittävästi sen kattavuutta. Se voidaan aina palauttaa. Sulkee kaikki raportit tätä tiliä vastaan. - suspend_description_html: Tili ja kaikki sen sisältö eivät ole käytettävissä ja vuorovaikutus sen kanssa on mahdotonta, sekä lopulta poistetaan. Palautettava 30 päivän kuluessa. Sulkee kaikki raportit tätä tiliä vastaan. - actions_description_html: Päätä, mihin toimiin ryhdyt tämän ilmoituksen ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä vastaan, heille lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti luokka on valittuna. + delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja raportoidulle tilille kohdistuvan viestinnän mukauttamiseksi. + resolve_description_html: Ilmoitettua tiliä kohtaan ei ryhdytä toimiin, varoitusta ei kirjata ja raportti suljetaan. + silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai etsivät sen manuaalisesti, mikä rajoittaa merkittävästi sen tavoitettavuutta. Voidaan perua milloin vain. Sulkee kaikki tilin vastaiset raportit. + suspend_description_html: Tili ja mikään sen sisältö eivät ole käytettävissä, ja lopulta ne poistetaan, ja vuorovaikutus tilin kanssa on mahdotonta. Peruttavissa 30 päivän ajan. Sulkee kaikki tämän tilin vastaiset raportit. + actions_description_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä kohtaan, hänelle lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti-luokka on valittuna. actions_description_remote_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Tämä vaikuttaa vain siihen, miten palvelimesi kommunikoi tämän etätilin kanssa ja käsittelee sen sisältöä. add_to_report: Lisää raporttiin are_you_sure: Oletko varma? @@ -600,15 +600,15 @@ fi: assigned: Määritetty valvoja by_target_domain: Ilmoitetun tilin verkkotunnus cancel: Peruuta - category: Kategoria - category_description_html: Syy, miksi tämä tili ja/tai sisältö ilmoitettiin, mainitaan yhteydenotossa ilmoitettuun tiliin + category: Luokka + category_description_html: Syy siihen, miksi tämä tili ja/tai sisältö raportoitiin, mainitaan ilmoitetun tilin kanssa viestiessä comment: none: Ei mitään comment_description_html: 'Antaakseen lisätietoja %{name} kirjoitti:' confirm: Vahvista - confirm_action: Vahvista moderointitoiminto käyttäjää @%{acct} kohtaan + confirm_action: Vahvista valvontatoimi käyttäjää @%{acct} kohtaan created_at: Raportoitu - delete_and_resolve: Poista viestejä + delete_and_resolve: Poista julkaisut forwarded: Välitetty forwarded_to: Välitetty %{domain} mark_as_resolved: Merkitse ratkaistuksi @@ -638,22 +638,22 @@ fi: statuses_description_html: Loukkaava sisältö mainitaan ilmoitetun tilin yhteydessä summary: action_preambles: - delete_html: 'Olet aikeissa poistaa joitain käyttäjän @%{acct} viestejä. Tästä seuraa:' - mark_as_sensitive_html: 'Olet aikeissa merkitä joitain käyttäjän @%{acct} viestejä arkaluonteisiksi. Tästä seuraa:' + delete_html: 'Olet aikeissa poistaa käyttäjän @%{acct} julkaisuja. Tästä seuraa:' + mark_as_sensitive_html: 'Olet aikeissa merkitä käyttäjän @%{acct} julkaisuja arkaluonteisiksi. Tästä seuraa:' silence_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' - suspend_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' + suspend_html: 'Olet aikeissa jäädyttää käyttäjän @%{acct} tilin. Tästä seuraa:' actions: - delete_html: Loukkaavat viestit poistetaan - mark_as_sensitive_html: Loukkaavien viestien media merkitään arkaluonteiseksi - silence_html: Vakavasti rajoittaa käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain jo häntä seuraaville tai niille, jotka etsivät profiilia manuaalisesti - suspend_html: Rajoita @%{acct}, jolloin heidän profiilinsa ja sisällönsä ei ole käytettävissä ja on mahdotonta olla vuorovaikutuksessa + delete_html: Poista loukkaavat julkaisut + mark_as_sensitive_html: Merkitse loukkaavien julkaisujen media arkaluonteiseksi + silence_html: Rajoita merkittävästi käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain niille, jotka jo seuraavat tiliä tai etsivät sen manuaalisesti + suspend_html: Jäädytä @%{acct}, jolloin hänen profiilinsa ja sisältönsä ei ole käytettävissä ja hänen kanssaan on mahdotonta olla vuorovaikutuksessa close_report: 'Merkitse raportti #%{id} selvitetyksi' close_reports_html: Merkitse kaikki käyttäjään @%{acct} kohdistuvat raportit ratkaistuiksi - delete_data_html: Poista @%{acct}profiili ja sisältö 30 päivän kuluttua, ellei jäädytystä tällä välin peruuteta + delete_data_html: Poista käyttäjän @%{acct} profiili ja sen sisältö 30 päivän kuluttua, ellei jäädytystä sillä välin kumota preview_preamble_html: "@%{acct} saa varoituksen, jonka sisältö on seuraava:" record_strike_html: Tallenna varoitus @%{acct} vastaan, joka auttaa sinua selvittämään tulevia rikkomuksia tältä tililtä send_email_html: Lähetä käyttäjälle @%{acct} varoitus sähköpostitse - warning_placeholder: Valinnaiset lisäperustelut moderointitoimenpiteelle. + warning_placeholder: Valinnaiset lisäperustelut valvontatoimelle. target_origin: Raportoidun tilin alkuperä title: Raportit unassign: Määrittämätön @@ -670,7 +670,7 @@ fi: administration: Ylläpito devops: DevOps invites: Kutsut - moderation: Moderointi + moderation: Valvonta special: Erikois delete: Poista description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. @@ -687,34 +687,34 @@ fi: delete_user_data_description: Salli käyttäjien poistaa muiden käyttäjien tiedot viipymättä invite_users: Kutsu käyttäjiä invite_users_description: Sallii käyttäjien kutsua uusia ihmisiä palvelimelle - manage_announcements: Hallitse Ilmoituksia - manage_announcements_description: Salli käyttäjien hallita ilmoituksia palvelimella + manage_announcements: Hallitse tiedotteita + manage_announcements_description: Sallii käyttäjien hallita tiedotteita palvelimella manage_appeals: Hallitse valituksia - manage_appeals_description: Antaa käyttäjien tarkastella valvontatoimia koskevia valituksia - manage_blocks: Hallitse lohkoja - manage_blocks_description: Sallii käyttäjien estää sähköpostipalvelujen ja IP-osoitteiden käytön - manage_custom_emojis: Hallita mukautettuja hymiöitä - manage_custom_emojis_description: Salli käyttäjien hallita mukautettuja hymiöitä palvelimella - manage_federation: Hallita liitoksia - manage_federation_description: Sallii käyttäjien estää tai sallia liitoksen muiden verkkotunnusten kanssa ja hallita toimitusta - manage_invites: Hallita kutsuja + manage_appeals_description: Sallii käyttäjien tarkistaa valvontatoimia koskevia valituksia + manage_blocks: Hallitse estoja + manage_blocks_description: Sallii käyttäjien estää sähköpostipalveluntarjoajia ja IP-osoitteita + manage_custom_emojis: Hallitse mukautettuja emojeita + manage_custom_emojis_description: Sallii käyttäjien hallita mukautettuja emojeita palvelimella + manage_federation: Hallitse federointia + manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta + manage_invites: Hallitse kutsuja manage_invites_description: Sallii käyttäjien selata ja poistaa kutsulinkkejä käytöstä - manage_reports: Hallita raportteja - manage_reports_description: Sallii käyttäjien tarkastella raportteja ja suorittaa valvontatoimia niitä vastaan - manage_roles: Hallita rooleja + manage_reports: Hallitse raportteja + manage_reports_description: Sallii käyttäjien tarkistaa raportteja ja suorittaa valvontatoimia niitä vastaan + manage_roles: Hallitse rooleja manage_roles_description: Sallii käyttäjien hallita ja määrittää rooleja heidän alapuolellaan - manage_rules: Hallita sääntöjä - manage_rules_description: Sallii käyttäjien vaihtaa palvelinsääntöjä - manage_settings: Hallita asetuksia - manage_settings_description: Salli käyttäjien muuttaa sivuston asetuksia - manage_taxonomies: Hallita luokittelua + manage_rules: Hallitse sääntöjä + manage_rules_description: Sallii käyttäjien muuttaa palvelimen sääntöjä + manage_settings: Hallitse asetuksia + manage_settings_description: Sallii käyttäjien muuttaa sivuston asetuksia + manage_taxonomies: Hallitse luokittelua manage_taxonomies_description: Sallii käyttäjien tarkistaa nousussa olevan sisällön ja päivittää aihetunnisteiden asetuksia - manage_user_access: Hallita käyttäjän oikeuksia - manage_user_access_description: Sallii käyttäjien poistaa käytöstä muiden käyttäjien kaksivaiheisen todennuksen, muuttaa heidän sähköpostiosoitettaan ja nollata heidän salasanansa - manage_users: Hallita käyttäjiä - manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä vastaan - manage_webhooks: Hallita Webhookit - manage_webhooks_description: Sallii käyttäjien luoda webhookit hallinnollisiin tapahtumiin + manage_user_access: Hallitse käyttäjäoikeuksia + manage_user_access_description: Sallii käyttäjien poistaa muiden käyttäjien kaksivaiheinen todennus käytöstä, vaihtaa heidän sähköpostiosoitteensa ja nollata heidän salasanansa + manage_users: Hallitse käyttäjiä + manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä kohtaan + manage_webhooks: Hallitse webhookeja + manage_webhooks_description: Sallii käyttäjien luoda webhookeja hallinnollisiin tapahtumiin view_audit_log: Katsoa valvontalokia view_audit_log_description: Sallii käyttäjien nähdä palvelimen hallinnollisten toimien historian view_dashboard: Näytä koontinäyttö @@ -725,13 +725,13 @@ fi: rules: add_new: Lisää sääntö delete: Poista - description_html: Vaikka useimmat väittävät, että ovat lukenut ja hyväksyneet käyttöehdot niin yleensä ihmiset eivät lue niitä läpi ennen kuin ongelma syntyy. Tee helpoksi nähdä palvelimen säännöt yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä moniin erillisiin kohteisiin. + description_html: Vaikka useimmat väittävät, että ovat lukeneet ja hyväksyneet käyttöehdot, niin yleensä ihmiset eivät lue niitä läpi ennen kuin ilmenee ongelma. Helpota palvelimen sääntöjen näkemistä yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä useisiin erillisiin kohtiin. edit: Muokkaa sääntöä empty: Palvelimen sääntöjä ei ole vielä määritelty. title: Palvelimen säännöt settings: about: - manage_rules: Hallinnoi palvelimen sääntöjä + manage_rules: Hallitse palvelimen sääntöjä preamble: Anna perusteellista tietoa siitä, miten palvelinta käytetään, valvotaan, rahoitetaan. rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja @@ -739,7 +739,7 @@ fi: preamble: Muokkaa Mastodonin web-käyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voidaan näyttää useissa eri ympäristöissä, kuten Mastodonin käyttöliittymässä, sovelluksissa, linkkien esikatselu muilla sivustoilla ja viestisovelluksien sisällä ja niin edelleen. Tästä syystä on parasta pitää nämä tiedot selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -751,7 +751,7 @@ fi: desc_html: Vaikuttaa kaikkiin käyttäjiin, jotka eivät ole muuttaneet tätä asetusta itse title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle discovery: - follow_recommendations: Noudata suosituksia + follow_recommendations: Seuraamissuositukset preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset etsintäominaisuudet toimivat palvelimellasi. profile_directory: Profiilihakemisto public_timelines: Julkiset aikajanat @@ -773,7 +773,7 @@ fi: open: Kaikki voivat rekisteröityä security: authorized_fetch: Vaadi todennus yhdistetyiltä palvelimilta - authorized_fetch_hint: Todennuksen vaatiminen yhdistetyiltä palvelimilta mahdollistaa sekä käyttäjätason että palvelintason alueiden tiukemmat estot. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksien ulottuvuutta ja voi luoda yhteensopivuusongelmia joidenkin yhdistettyjen palveluiden kanssa. Lisäksi, tämä ei myöskään estä muita toimijoita hakemasta julkisia viestejäsi ja tilejäsi. + authorized_fetch_hint: Todennuksen vaatiminen federoiduilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin federoitujen palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. authorized_fetch_overridden_hint: Et voi tällä hetkellä muuttaa tätä asetusta, koska se on ohitettu ympäristömuuttujalla. federation_authentication: Yhdistettyjen palvelinten todentamisen täytäntöönpano title: Palvelimen asetukset @@ -808,23 +808,23 @@ fi: media: title: Media metadata: Metadata - no_status_selected: Viestejä ei muutettu, koska yhtään ei ole valittuna - open: Avaa viesti - original_status: Alkuperäinen viesti + no_status_selected: Julkaisuja ei muutettu, koska yhtään ei ole valittuna + open: Avaa julkaisu + original_status: Alkuperäinen julkaisu reblogs: Edelleen jako - status_changed: Viesti muutettu + status_changed: Julkaisua muutettu title: Tilin tilat trending: Nousussa visibility: Näkyvyys with_media: Sisältää mediaa strikes: actions: - delete_statuses: "%{name} poisti käyttäjän %{target} viestit" + delete_statuses: "%{name} poisti käyttäjän %{target} julkaisut" disable: "%{name} jäädytti %{target} tilin" - mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} viestit arkaluonteisiksi" + mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} julkaisut arkaluonteisiksi" none: "%{name} lähetti varoituksen henkilölle %{target}" sensitive: "%{name} merkitsi käyttäjän %{target} tilin arkaluonteiseksi" - silence: "%{name} rajoitti käyttäjän %{target} tilin" + silence: "%{name} rajoitti käyttäjän %{target} tiliä" suspend: "%{name} jäädytti käyttäjän %{target} tilin" appeal_approved: Valitti appeal_pending: Valitus vireillä @@ -852,7 +852,7 @@ fi: message_html: 'Yhteensopimaton Elasticsearch versio: %{value}' version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: - action: Hallinnoi palvelimen sääntöjä + action: Hallitse palvelimen sääntöjä message_html: Et ole määrittänyt mitään palvelimen sääntöä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset @@ -900,17 +900,17 @@ fi: title: Julkaisijat rejected: Hylätty statuses: - allow: Salli viesti + allow: Salli julkaisu allow_account: Salli tekijä - description_html: Nämä ovat viestejä, jotka palvelimesi tietää tällä hetkellä jaetuksi ja suosituksi. Tämä voi auttaa uusia ja palaavia ihmisiä löytämään lisää ihmisiä, joita seurata seurata. Julkaisuja ei näytetä julkisesti ennen kuin hyväksyt tekijän ja kirjoittaja sallii tilinsä ehdottamisen muille. Voit myös sallia tai hylätä yksittäiset viestit. - disallow: Estä viesti + description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden julkaisijan ja julkaisija sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja. + disallow: Kiellä julkaisu disallow_account: Estä tekijä - no_status_selected: Suosittuja viestejä ei muutettu, koska yhtään ei valittu + no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ole valittuna not_discoverable: Tekijä ei ole ilmoittanut olevansa löydettävissä shared_by: - one: Jaettu tai merkitty suosikiksi kerran + one: Jaettu tai lisätty suosikkeihin kerran other: Jaettu tai merkitty suosikiksi %{friendly_count} kertaa - title: Suositut viestit + title: Suositut julkaisut tags: current_score: Nykyinen tulos %{score} dashboard: @@ -941,7 +941,7 @@ fi: delete: Poista edit_preset: Muokkaa varoituksen esiasetusta empty: Et ole vielä määrittänyt yhtäkään varoitusten esiasetusta. - title: Hallinnoi varoitusten esiasetuksia + title: Hallitse varoitusten esiasetuksia webhooks: add_new: Lisää päätepiste delete: Poista @@ -965,16 +965,16 @@ fi: admin_mailer: new_appeal: actions: - delete_statuses: poistaa heidän viestit + delete_statuses: poistaa hänen julkaisunsa disable: jäädyttää heidän tilinsä - mark_statuses_as_sensitive: merkitä heidän viestinsä arkaluonteisiksi + mark_statuses_as_sensitive: merkitä hänen julkaisunsa arkaluonteisiksi none: varoitus sensitive: merkitä heidän tilinsä arkaluonteiseksi - silence: rajoittaa heidän tilinsä - suspend: jäädyttää heidän tilinsä - body: "%{target} on valittanut valvojan päätöksestä %{action_taken_by} aika %{date}, joka oli %{type}. He kirjoittivat:" - next_steps: Voit hyväksyä vetoomuksen ja kumota päätöksen tai jättää sen huomiotta. - subject: "%{username} valittaa valvojan päätöksestä, joka koskee instanssia %{instance}" + silence: rajoittaa hänen tiliään + suspend: jäädyttää hänen tilinsä + body: "%{target} valittaa valvojan %{action_taken_by} päätöksestä %{date}, joka oli %{type}. Hän kirjoitti:" + next_steps: Voit hyväksyä valituksen, jolloin valvontapäätös kumoutuu, tai sivuuttaa sen. + subject: "%{username} valittaa valvontapäätöksestä, joka koskee instanssia %{instance}" new_critical_software_updates: body: Mastodonin uusia kriittisen tärkeitä versioita on julkaistu, joten saatat haluta päivittää niin pian kuin mahdollista! subject: Kriittisiä Mastodon-päivityksiä on saatavilla instanssille %{instance}! @@ -983,7 +983,7 @@ fi: subject: Uusi tili tarkastettavana instanssissa %{instance} (%{username}) new_report: body: "%{reporter} on raportoinut kohteen %{target}" - body_remote: Joku osoitteesta %{domain} on raportoinut kohteen %{target} + body_remote: Joku palvelimelta %{domain} raportoi käyttäjän %{target} subject: Uusi raportti instanssista %{instance} (nro %{id}) new_software_updates: body: Uusia Mastodon-versioita on julkaistu, joten saatat haluta päivittää! @@ -993,7 +993,7 @@ fi: new_trending_links: title: Suositut linkit new_trending_statuses: - title: Suositut viestit + title: Suositut julkaisut new_trending_tags: no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä aihetunnisteita. requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.' @@ -1008,10 +1008,10 @@ fi: remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä - advanced_web_interface_hint: 'Jos haluat käyttää koko näytön leveyttä, edistyneen web-käyttöliittymän avulla voit määrittää useita eri sarakkeita näyttämään niin paljon tietoa samanaikaisesti kuin haluat: Koti, ilmoitukset, yhdistetty aikajana, mikä tahansa määrä luetteloita ja aihetunnisteita.' + advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen webkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.' animations_and_accessibility: Animaatiot ja saavutettavuus confirmation_dialogs: Vahvistusvalinnat - discovery: Löydöt + discovery: Löytäminen localization: body: Mastodonin ovat kääntäneet vapaaehtoiset. guide_link: https://crowdin.com/project/mastodon @@ -1076,8 +1076,8 @@ fi: accept: Hyväksy back: Takaisin invited_by: 'Seuraavalta käyttäjältä vastaanottamasi kutsun ansiosta voit liittyä palvelimelle %{domain}:' - preamble: "%{domain} valvojat määrittävät ja valvovat sääntöjä." - preamble_invited: Ennen kuin jatkat, huomioi palvelimen %{domain} valvojien asettamat perussäännöt. + preamble: Palvelimen %{domain} valvojat määrittävät ja valvovat sääntöjä. + preamble_invited: Ennen kuin jatkat, ota huomioon palvelimen %{domain} valvojien asettamat perussäännöt. title: Joitakin perussääntöjä. title_invited: Sinut on kutsuttu. security: Tunnukset @@ -1086,21 +1086,21 @@ fi: email_below_hint_html: Tarkista roskapostikansiosi tai pyydä uusi viesti. Voit korjata sähköpostiosoitteesi, jos se oli väärin. email_settings_hint_html: Napsauta lähettämäämme linkkiä vahvistaaksesi osoitteen %{email}. Odotamme täällä. link_not_received: Etkö saanut linkkiä? - new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutaman minuutin sisällä! - title: Tarkista saamasi viestit + new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutamassa minuutissa! + title: Tarkista sähköpostilaatikkosi sign_in: preamble_html: Kirjaudu %{domain}-tunnuksellasi. Jos tilisi sijaitsee eri palvelimella, et voi kirjautua täällä. title: Kirjaudu palvelimelle %{domain} sign_up: - manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä, kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. + manual_review: Palvelimen %{domain} valvojat tarkistavat rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia henkilöitä riippumatta siitä, missä heidän tilinsä on. title: Otetaan sinulle käyttöön %{domain}. status: account_status: Tilin tila confirming: Odotetaan sähköpostivahvistuksen valmistumista. functional: Tilisi on täysin toiminnassa. - pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi on hyväksytty. - redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä kohteeseen %{acct}. + pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi hyväksytään. + redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä tilille %{acct}. view_strikes: Näytä tiliäsi koskevia aiempia varoituksia too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen. use_security_key: Käytä suojausavainta @@ -1140,7 +1140,7 @@ fi: warning: before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä - data_removal: Viestit ja muut tiedot poistetaan pysyvästi + data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi email_contact_html: Jos ei saavu perille, voit pyytää apua sähköpostilla %{email} email_reconfirmation_html: Jos et saa vahvistuksen sähköpostia, niin voit pyytää sitä uudelleen @@ -1164,17 +1164,17 @@ fi: description_html: Nämä ovat tiliäsi koskevia toimia ja varoituksia, jotka instanssin %{instance} henkilökunta on lähettänyt sinulle. recipient: Osoitettu reject_appeal: Hylkää valitus - status: 'Viesti #%{id}' - status_removed: Viesti on jo poistettu järjestelmästä + status: 'Julkaisu #%{id}' + status_removed: Julkaisu on jo poistettu järjestelmästä title: "%{action} alkaen %{date}" title_actions: - delete_statuses: Viestin poisto + delete_statuses: Julkaisun poisto disable: Tilin jäädyttäminen - mark_statuses_as_sensitive: Viestien merkitseminen arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisujen merkitseminen arkaluonteisiksi none: Varoitus sensitive: Tilin merkitseminen arkaluonteiseksi silence: Tilin rajoittaminen - suspend: Tilin jäädyttäminen + suspend: Tilin jäädytys your_appeal_approved: Valituksesi on hyväksytty your_appeal_pending: Olet lähettänyt valituksen your_appeal_rejected: Valituksesi on hylätty @@ -1182,8 +1182,8 @@ fi: invalid_domain: ei ole kelvollinen toimialueen nimi edit_profile: basic_information: Perustiedot - hint_html: "Mukauta mitä ihmiset näkevät julkisessa profiilissasi ja sinun julkaisujen vieressä. Ihmiset todennäköisesti seuraavat ja kirjoittavat sinulle, kun sinulla on täytetty profiili ja profiilikuva." - other: Muu + hint_html: "Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä. Ihmiset seuraavat sinua takaisin ja ovat kanssasi vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva." + other: Muut errors: '400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti. '403': Sinulla ei ole lupaa nähdä tätä sivua. @@ -1206,7 +1206,7 @@ fi: archive_takeout: date: Päiväys download: Lataa arkisto - hint_html: Voit pyytää arkistoa omista viesteistä ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa viikon välein. + hint_html: Voit pyytää arkistoa omista julkaisuista ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa 7 päivän välein. in_progress: Arkistoa kootaan... request: Pyydä arkisto size: Koko @@ -1225,15 +1225,15 @@ fi: filters: contexts: account: Profiilit - home: Kotiaikajana + home: Kotisyöte ja listat notifications: Ilmoitukset public: Julkiset aikajanat thread: Keskustelut edit: add_keyword: Lisää avainsana keywords: Avainsanat - statuses: Yksittäiset viestit - statuses_hint_html: Tämä suodatin koskee yksittäisten viestien valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista viestit suodattimesta. + statuses: Yksittäiset julkaisut + statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. @@ -1248,11 +1248,11 @@ fi: one: "%{count} avainsana" other: "%{count} avainsanaa" statuses: - one: "%{count} viesti" - other: "%{count} viestiä" + one: "%{count} julkaisu" + other: "%{count} julkaisua" statuses_long: - one: "%{count} yksittäinen viesti piilotettu" - other: "%{count} yksittäistä viestiä piilotettu" + one: "%{count} yksittäinen julkaisu piilotettu" + other: "%{count} yksittäistä julkaisua piilotettu" title: Suodattimet new: save: Tallenna uusi suodatin @@ -1262,8 +1262,8 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten viestien valintaa muista kriteereistä riippumatta. Voit lisätä lisää viestejä tähän suodattimeen web-käyttöliittymästä. - title: Suodatetut viestit + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + title: Suodatetut julkaisut generic: all: Kaikki all_items_on_page_selected_html: @@ -1291,7 +1291,7 @@ fi: imports: errors: empty: Tyhjä CSV-tiedosto - incompatible_type: Yhteensopimaton valitun tuontityypin kanssa + incompatible_type: Yhteensopimaton valitun tuontilajin kanssa invalid_csv_file: 'Epäkelpo CSV-tiedosto. Virhe: %{error}' over_rows_processing_limit: sisältää yli %{count} riviä too_large: Tiedosto on liian suuri @@ -1304,20 +1304,20 @@ fi: overwrite: Korvaa overwrite_long: Korvaa nykyiset tietueet uusilla overwrite_preambles: - blocking_html: Olet aikeissa korvata estoluettelon kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. - bookmarks_html: Olet aikeissa korvata kirjanmerkit kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. - domain_blocking_html: Olet aikeissa korvata verkkotunnusestot kaikkiaan %{total_items} verkkotunnuksella tiedostoon %{filename} perustuen. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. Aiot lisäksi lopettaa kaikkien muiden seuraamisen. - lists_html: Olet korvaamassa listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. - muting_html: Olet korvaamassa mykistettyjä tilejäsi kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. + blocking_html: Olet aikeissa korvata estoluettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. + bookmarks_html: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. + domain_blocking_html: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{total_items} verkkotunnuksella tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. + lists_html: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. + muting_html: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. preambles: - blocking_html: Olet estämässä yhteensä %{total_items} tiliä tiedostoon %{filename} perustuen. - bookmarks_html: Olet lisäämässä %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. - domain_blocking_html: Olet estämässä yhteensä %{total_items} verkkotunnusta tiedoston %{filename} nojalla. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. - lists_html: Olet lisäämässä listoihisi %{total_items} tiliä tiedostosta %{filename}. Uudet listat luodaan, jos sopivaa kohdelistaa ei ole olemassa. - muting_html: Olet hiljentämässä yhteensä %{total_items} tiliä tiedostosta %{filename}. - preface: Voit tuoda toisesta instanssista viemiäsi tietoja, kuten esimerkiksi seuraamiesi tai estämiesi henkilöiden listan. + blocking_html: Olet aikeissa estää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + bookmarks_html: Olet lisäämässä kaikkiaan %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. + domain_blocking_html: Olet aikeissa estää kaikkiaan %{total_items} verkkotunnusta tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + lists_html: Olet lisäämässä listoihisi kaikkiaan %{total_items} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. + muting_html: Olet aikeissa mykistää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi henkilöiden luettelon. recent_imports: Viimeksi tuotu states: finished: Valmis @@ -1337,14 +1337,14 @@ fi: type: Tuonnin tyyppi type_groups: constructive: Seuratut ja kirjanmerkit - destructive: Estot ja hiljennykset + destructive: Estot ja mykistykset types: - blocking: Estettyjen lista + blocking: Estoluettelo bookmarks: Kirjanmerkit - domain_blocking: Verkkoalueen estolista - following: Seurattujen lista + domain_blocking: Verkkotunnuksen estoluettelo + following: Seurattujen luettelo lists: Listat - muting: Mykistettyjen lista + muting: Mykistettyjen luettelo upload: Lähetä invites: delete: Poista käytöstä @@ -1386,7 +1386,7 @@ fi: unsubscribe: action: Kyllä, peru tilaus complete: Tilaus lopetettiin - confirmation_html: Olethan varma, että haluat lopettaa %{type} -aiheisten Mastodonin sähköposti-ilmoitusten vastaanoton palvelimelta %{domain} osoitteeseesi %{email}? Voit toki milloin tahansa ottaa jälleen käyttöön muun muassa nämä viestit sähköposti-ilmoitusasetusten kautta. + confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: favourite: sähköpostit ilmoituksille @@ -1394,7 +1394,7 @@ fi: follow_request: seuraa pyyntöjä sähköpostiin mention: mainitse sähköpostin ilmoitukset reblog: tehosta sähköpostien ilmoituksia - resubscribe_html: Jos olet perunut ilmoitusviestien vastaanottamisen suotta, pääset jälleentilaamaan ilmoitusviestejä sähköposti-ilmoitusasetusten kautta. + resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: @@ -1434,7 +1434,7 @@ fi: other_data: Muita tietoja ei siirretä automaattisesti redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta moderation: - title: Moderointi + title: Valvonta move_handler: carry_blocks_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka olit estänyt. carry_mutes_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka mykistit. @@ -1448,15 +1448,15 @@ fi: sign_up: subject: "%{name} rekisteröityi" favourite: - body: "%{name} tykkäsi tilastasi:" - subject: "%{name} tykkäsi tilastasi" - title: Uusi tykkäys + body: "%{name} lisäsi julkaisusi suosikkeihinsa:" + subject: "%{name} lisäsi julkaisusi suosikkeihinsa" + title: Uusi suosikkeihin lisäys follow: body: "%{name} seuraa nyt sinua!" subject: "%{name} seuraa nyt sinua" title: Uusi seuraaja follow_request: - action: Hallinnoi seuraamispyyntöjä + action: Hallitse seuraamispyyntöjä body: "%{name} haluaa seurata sinua" subject: 'Odottava seuraamispyyntö: %{name}' title: Uusi seuraamispyyntö @@ -1468,13 +1468,13 @@ fi: poll: subject: Äänestys käyttäjältä %{name} on päättynyt reblog: - body: "%{name} tehosti viestiäsi:" - subject: "%{name} tehosti viestiäsi" + body: "%{name} tehosti julkaisuasi:" + subject: "%{name} tehosti julkaisuasi" title: Uusi tehostus status: subject: "%{name} julkaisi juuri" update: - subject: "%{name} muokkasi viestiä" + subject: "%{name} muokkasi julkaisua" notifications: administration_emails: Ylläpitäjän sähköposti-ilmoitukset email_events: Sähköposti-ilmoitusten tapahtumat @@ -1518,16 +1518,16 @@ fi: too_many_options: ei voi sisältää enempää kuin %{max} kohdetta preferences: other: Muut - posting_defaults: Viestien oletusasetukset + posting_defaults: Julkaisun oletusasetukset public_timelines: Julkiset aikajanat privacy: - hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua saavuttamaan laajemman yleisön. Käytä hetki aikaa tarkistaaksesi, soveltuvatko nämä vaihtoehdot tarpeisiisi." + hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua tavoittamaan laajemman yleisön. Käytä hetki tarkistaaksesi, sopivatko nämä asetukset käyttöösi." privacy: Yksityisyys - privacy_hint_html: Määritä miten paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja sekä hienoja sovelluksia selaillen toisten seuraamia käyttäjiä, ja näkemällä, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. + privacy_hint_html: Määritä, kuinka paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja ja hienoja sovelluksia, kun he selaavat toisten seuraamia käyttäjiä ja kun he näkevät, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. reach: Tavoittavuus - reach_hint_html: Päätä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko viestiesi näkyvän Selaa-sivulla? Haluatko käyttäjien näkevän sinut heidän seuraussuosituksissaan? Haluatko hyväksyä uudet seuraajat automaattisesti vai haluatko hyväksyä jokaisen erikseen? + reach_hint_html: Määritä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko julkaisujesi näkyvän Selaa-sivulla? Haluatko muiden käyttäjien näkevän sinut seuraamissuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen? search: Haku - search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Huomioithan, ettei täyttä poisjättäytymistä kaikista hakukoneista voida taata julkisille tiedoille. + search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata. title: Yksityisyys ja tavoittavuus privacy_policy: title: Tietosuojakäytäntö @@ -1564,12 +1564,12 @@ fi: rss: content_warning: 'Sisältövaroitus:' descriptions: - account: Julkiset viestit lähettäjältä @%{acct} - tag: 'Julkiset viestit merkitty #%{hashtag}' + account: Julkiset julkaisut tililtä @%{acct} + tag: 'Julkiset julkaisut aihetunnisteella #%{hashtag}' scheduled_statuses: - over_daily_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan tälle päivälle - over_total_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan - too_soon: Ajoitetun päivämäärän on oltava tulevaisuudessa + over_daily_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan tälle päivälle + over_total_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan + too_soon: Ajoitetun päiväyksen pitää olla tulevaisuudessa sessions: activity: Viimeisin toiminta browser: Selain @@ -1623,19 +1623,19 @@ fi: authorized_apps: Valtuutetut sovellukset back: Takaisin Mastodoniin delete: Tilin poisto - development: Kehittäminen + development: Kehitys edit_profile: Muokkaa profiilia export: Vie tietoja - featured_tags: Esitellyt aihetunnisteet + featured_tags: Esiteltävät aihetunnisteet import: Tuo - import_and_export: Tuo ja vie + import_and_export: Tuonti ja vienti migrate: Tilin muutto muualle notifications: Ilmoitukset preferences: Ominaisuudet - profile: Profiili - relationships: Seurattavat ja seuraajat - statuses_cleanup: Automaattinen viestin poisto - strikes: Valvojan varoitukset + profile: Julkinen profiili + relationships: Seuratut ja seuraajat + statuses_cleanup: Autom. julkaisujen poisto + strikes: Valvontavaroitukset two_factor_authentication: Kaksivaiheinen todentaminen webauthn_authentication: Suojausavaimet statuses: @@ -1650,21 +1650,21 @@ fi: video: one: "%{count} video" other: "%{count} videota" - boosted_from_html: Tehostus lähteestä %{acct_link} + boosted_from_html: Tehosti lähteestä %{acct_link} content_warning: 'Sisältövaroitus: %{warning}' default_language: Sama kuin käyttöliittymän kieli disallowed_hashtags: - one: 'sisälsi aihetunnisteen jota ei sallita: %{tags}' - other: 'sisälsi aihetunnisteet joita ei sallita: %{tags}' + one: 'sisälsi kielletyn aihetunnisteen: %{tags}' + other: 'sisälsi kiellettyjä aihetunnisteita: %{tags}' edited_at_html: Muokattu %{date} errors: - in_reply_not_found: Viesti, johon yrität vastata, ei näytä olevan olemassa. + in_reply_not_found: Julkaisua, johon yrität vastata, ei näytä olevan olemassa. open_in_web: Avaa selaimessa over_character_limit: merkkimäärän rajoitus %{max} ylitetty pin_errors: - direct: Viestejä, jotka ovat näkyvissä vain mainituille käyttäjille, ei voi kiinnittää - limit: Olet jo kiinnittänyt suurimman mahdollisen määrän viestejä - ownership: Muiden viestejä ei voi kiinnittää + direct: Vain mainituille käyttäjille näkyviä julkaisuja ei voi kiinnittää + limit: Olet jo kiinnittänyt enimmäismäärän julkaisuja + ownership: Muiden julkaisuja ei voi kiinnittää reblog: Tehostusta ei voi kiinnittää poll: total_people: @@ -1685,29 +1685,29 @@ fi: private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä - unlisted: Listaamaton julkinen + unlisted: Listaamaton unlisted_long: Kaikki voivat nähdä, mutta ei näytetä julkisilla aikajanoilla statuses_cleanup: - enabled: Poista vanhat viestit automaattisesti - enabled_hint: Poistaa viestit automaattisesti, kun ne saavuttavat tietyn ikärajan, elleivät ne täsmää yhtä alla olevista poikkeuksista + enabled: Poista vanhat julkaisut automaattisesti + enabled_hint: Poistaa julkaisusi automaattisesti, kun ne saavuttavat valitun ikärajan, ellei jokin alla olevista poikkeuksista tule kyseeseen exceptions: Poikkeukset - explanation: Koska viestien poistaminen on kallista toimintaa, sitä tehdään hitaasti ajan mittaan, kun palvelin ei ole muutoin kiireinen. Viestejäsi voidaankin siis poistaa myös viiveellä verrattuna niille määrittämääsi aikarajaan. + explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen - interaction_exceptions_explanation: Huomaa, että ei ole takeita viestien poistamiselle, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen, kun ne on kerran ylitetty. + interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit - keep_direct_hint: Ei poista mitään sinun suoria viestejä - keep_media: Säilytä viestit, joissa on liitetiedostoja - keep_media_hint: Ei poista viestejä, joissa on liitteitä - keep_pinned: Pidä kiinnitettyt viestit - keep_pinned_hint: Ei poista mitään kiinnitettyä viestiä + keep_direct_hint: Ei poista yksityisviestejäsi + keep_media: Säilytä julkaisut, joissa on medialiitteitä + keep_media_hint: Ei poista julkaisujasi, joissa on medialiitteitä + keep_pinned: Säilytä kiinnitetyt julkaisut + keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset keep_polls_hint: Ei poista yhtäkään äänestystä - keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi viestit - keep_self_bookmark_hint: Ei poista viestejäsi, jos olet lisännyt ne kirjanmerkkeihin - keep_self_fav: Säilyttää viestit suosikeissa - keep_self_fav_hint: Ei poista omia viestejäsi, jos olet lisännyt ne suosikkeihin + keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut + keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin + keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut + keep_self_fav_hint: Ei poista julkaisujasi, jos olet lisännyt ne suosikkeihin min_age: '1209600': 2 viikkoa '15778476': 6 kuukautta @@ -1718,12 +1718,12 @@ fi: '63113904': 2 vuotta '7889238': 3 kuukautta min_age_label: Ikäraja - min_favs: Pidä viestit suosikeissa vähintään - min_favs_hint: Toiminto ei poista julkaisujasi, joista on tykätty vähintään tässä kohtaa määritellyn monesti. Jätä kenttä tyhjäksi, jos haluat poistaa julkaisut tykkäyksistä huolimatta - min_reblogs: Pidä viestit tehostettuna vähintään - min_reblogs_hint: Ei poista yhtään viestiäsi, jota on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi poistaaksesi viestejä riippumatta niiden tehosteiden määrästä + min_favs: Säilytä julkaisut, joilla on suosikiksi lisäyksiä vähintään + min_favs_hint: Ei poista julkaisujasi, joita on lisätty suosikeihin vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta suosikkeihin lisäysmääristä + min_reblogs: Säilytä julkaisut, joilla on tehostuksia vähintään + min_reblogs_hint: Ei poista julkaisujasi, joita on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta niiden tehostusten määrästä stream_entries: - sensitive_content: Arkaluontoista sisältöä + sensitive_content: Arkaluonteista sisältöä strikes: errors: too_late: On liian myöhäistä vedota tähän varoitukseen @@ -1786,38 +1786,38 @@ fi: spam: Roskaposti violation: Sisältö rikkoo seuraavia yhteisön sääntöjä explanation: - delete_statuses: Joitakin viesteistäsi on havaittu rikkovan yhtä tai useampaa yhteisön sääntöä ja instanssin %{instance} valvojat ovat poistaneet ne. + delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, ja instanssin %{instance} valvojat ovat poistaneet ne. disable: Et voi enää käyttää tiliäsi, mutta profiilisi ja muut tiedot pysyvät muuttumattomina. Voit pyytää varmuuskopiota tiedoistasi, vaihtaa tilin asetuksia tai poistaa tilisi. - mark_statuses_as_sensitive: Instanssin %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa viestiä ennen kuin esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi kun julkaiset tulevaisuudessa. + mark_statuses_as_sensitive: Palvelimen %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa mediaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa. sensitive: Tästä lähtien kaikki ladatut mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse. - silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat ihmiset näkevät viestisi tällä palvelimella ja sinut voidaan sulkea pois erilaisista hakuominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. - suspend: Et voi enää käyttää tiliäsi ja profiilisi ja muut tiedot eivät ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi varmuuskopiota tiedoistasi, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme joitakin perustietoja, jotka estävät sinua kiertämästä keskeyttämistä. + silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat käyttäjät näkevät julkaisusi tällä palvelimella ja sinut voidaan sulkea pois eri löytämisominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. + suspend: Et voi enää käyttää tiliäsi, eivätkä profiilisi ja muut tiedot ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi tietojesi varmuuskopiota, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme kuitenkin joitain perustietoja, jotka estävät sinua kiertämästä jäädytystä. reason: 'Syy:' - statuses: 'Viestejä lainattu:' + statuses: 'Julkaisuja lainattu:' subject: - delete_statuses: Viestisi %{acct} on poistettu + delete_statuses: Julkaisusi tilillä %{acct} on poistettu disable: Tilisi %{acct} on jäädytetty - mark_statuses_as_sensitive: Viestisi %{acct} on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisusi tilillä %{acct} on merkitty arkaluonteisiksi none: Varoitus %{acct} - sensitive: Sinun viestisi %{acct} merkitään arkaluonteisiksi tästä lähtien - silence: Tilisi %{acct} on rajoitettu + sensitive: Julkaisusi tilillä %{acct} merkitään arkaluonteisiksi tästä lähtien + silence: Tiliäsi %{acct} on rajoitettu suspend: Tilisi %{acct} on jäädytetty title: - delete_statuses: Viestit poistettu + delete_statuses: Julkaisut poistettu disable: Tili jäädytetty - mark_statuses_as_sensitive: Viestit on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisut merkitty arkaluonteisiksi none: Varoitus sensitive: Tili on merkitty arkaluonteiseksi - silence: Rajoitettu tili - suspend: Tilin käyttäminen jäädytetty + silence: Tiliä rajoitettu + suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista - final_step: 'Aloita julkaiseminen! Vaikkei sinulla ole seuraajia, voivat muut nähdä julkiset julkaisusi esimerkiksi paikallisella aikajanalla ja aihetunnisteilla. Kannattaa myös esittäytyä käyttämällä aihetunnistetta #introductions.' + final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' full_handle: Koko käyttäjätunnuksesi - full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai löytää sinut muiden palvelimien kautta. + full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta. subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f32fe33ab7..f3a6392ff0 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -463,20 +463,40 @@ hy: regenerate_token: Ստեղծել նոր հասանելիութեան կտրոն your_token: Քո մուտքի բանալին auth: + apply_for_account: Ուղարկել delete_account: Ջնջել հաշիվը description: prefix_sign_up: Գրանցուի՛ր Մաստոդոնում հենց այսօր + didnt_get_confirmation: Չե՞ս ստացել հաստատման յղում dont_have_your_security_key: Չունե՞ս անվտանգութեան բանալի։ forgot_password: Մոռացե՞լ ես գաղտնաբառդ login: Մտնել logout: Դուրս գալ migrate_account: Տեղափոխուել այլ հաշիւ or_log_in_with: Կամ մուտք գործել օգտագործելով՝ + privacy_policy_agreement_html: Ես կարդացել եւ ընդունել եմ գաղնիութեան քաղաքականութիւնը + progress: + confirm: Փոստի հաստատում + details: Ձեր տուեալները + review: Վաւերացում + rules: Ընդունել կանոները register: Գրանցվել registration_closed: "%{instance}ը չի ընդունում նոր անդամներ" reset_password: Վերականգնել գաղտանաբառը + rules: + accept: Հաստատել + back: Վերադառնալ + preamble: Կանոնները սահմանում եւ կիրառում են %{domain}-ի մոդերատորները։ + title: Մի քանի հիմանական կանոններ։ security: Անվտանգություն set_new_password: Սահմանել նոր գաղտնաբառ + sign_in: + preamble_html: Մուտքագրէք %{domain}-ի ձեր տուեալները։ Եթե ձեր հաշիւը ուրիշ սպասարկիչի վրայ է, այտեղ մտնել չի ստացուի։ + title: Մտնել %{domain} + sign_up: + manual_review: Գրանցումները %{domain}-ում վաւերացնում են մոդերատորնրը։ Մեզ օգնելու համար մի փոքր պատմէք ձեր մասին եւ թե ինչու էք ուզում գրանցուել։ + preamble: Այս հանգոյցում հաշիւ ունենալով դուք կարող էք հերտեւել դաշնեզերքի ցանկացած օգտատիրոջ, անկախ նրանից թե որտեղ է նրա հաշիւը տեղակայուած։ + title: Ստեղծի՜ր հաշիւ %{domain}-ում status: account_status: Հաշուի կարգավիճակ pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։ @@ -685,6 +705,8 @@ hy: other: Այլ posting_defaults: Կանխադիր կարգաւորումներ public_timelines: Հանրային հոսք + privacy: + search: Որոնել privacy_policy: title: Գաղտնիութեան քաղաքականութիւն reactions: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index da6d8596e0..cc3fd07c49 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -269,7 +269,7 @@ ko: reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다" resend_user_html: "%{name} 님이 %{target} 님에 대한 확인 메일을 다시 보냈습니다" reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다" - resolve_report_html: "%{name} 중재자가 %{target}번 신고를 해결로 변경하였습니다" + resolve_report_html: "%{name} 님이 %{target}번 신고를 해결로 변경하였습니다" sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다" silence_account_html: "%{name} 님이 %{target}의 계정을 제한시켰습니다" suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다" diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 12af55af62..f0c18d1128 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -330,5 +330,5 @@ en-GB: text: required title: sessions: - webauthn: Use one of your security keys to sign in + webauthn: Use one of your security keys to log in 'yes': 'Yes' diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index cc2f1141d9..db82edba24 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,13 +3,13 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla, ja profiiliasi voidaan myös ehdottaa suoraan toisille käyttäjille. + discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. - fields: Kotisivusi, pronominit, ikä, mitä ikinä haluatkin. - indexable: Julkiset viestit voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa viestiesi kanssa, voivat etsiä niitä siitä riippumatta. + fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. + indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, 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 eivät näe ketä seuraat ja ketkä seuraavat sinua. Käyttäjät, joita sinä seuraat, näkevät kuitenkin sinun seuraavan heitä. - unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seurantapyynnöt. + 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ä. + unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: @@ -18,7 +18,7 @@ fi: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle admin_account_action: - include_statuses: Käyttäjä näkee mitkä viestit johtivat toimenpiteeseen tai varoitukseen + include_statuses: Käyttäjä näkee, mitkä julkaisut johtivat valvontatoimeen tai varoitukseen send_email_notification: Käyttäjä saa selvityksen siitä, mitä hänen tililleen tapahtui text_html: Valinnainen. Voit käyttää julkaisun syntaksia. Voit lisätä varoitusasetuksia säästääksesi aikaa type_html: Valitse mitä teet käyttäjälle %{acct} @@ -31,10 +31,10 @@ fi: warning_preset_id: Valinnainen. Voit silti lisätä mukautetun tekstin esiasetuksen loppuun announcement: all_day: Kun valittu, vain valittu aikaväli näytetään - ends_at: Valinnainen. Ilmoitus tullaan poistamaan automaattisesti tällä hetkellä - scheduled_at: Jätä tyhjäksi julkaistaksesi ilmoituksen välittömästi - starts_at: Valinnainen. Jos ilmoituksesi on sidottu tiettyyn aikaväliin - text: Voit käyttää julkaisun syntaksia. Muista, kuinka paljon tilaa ilmoitus vie käyttäjän näytöltä + ends_at: Valinnainen. Tiedote poistetaan automaattisesti tällä hetkellä + scheduled_at: Jätä tyhjäksi julkaistaksesi tiedotteen heti + starts_at: Valinnainen. Jos tiedotteesi on sidottu tiettyyn aikaväliin + text: Voit käyttää julkaisun syntaksia. Ota huomioon, kuinka paljon tilaa tiedote vie käyttäjän näytöltä appeal: text: Voit valittaa varoituksesta vain kerran defaults: @@ -51,14 +51,14 @@ fi: irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli password: Käytä vähintään 8 merkkiä - phrase: Täytetään riippumatta julkaisun kirjainkoon tai sisällön varoituksesta + phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. - setting_aggregate_reblogs: Älä näytä uusia tehosteita viesteille, joita on äskettäin tehostettu (koskee vain äskettäin saatuja tehosteita) + setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media - setting_display_media_hide_all: Piilota aina kaikki media - setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media + setting_display_media_hide_all: Piilota media aina + setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja @@ -74,7 +74,7 @@ fi: action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa - warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen otsikko + warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi form_admin_settings: activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä backups_retention_period: Säilytä luodut arkistot määritetyn määrän päiviä. @@ -84,7 +84,7 @@ fi: custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa. mascot: Ohittaa kuvituksen edistyneessä käyttöliittymässä. media_cache_retention_period: Ladatut mediatiedostot poistetaan määritetyn määrän päiviä jälkeen, kun arvo on positiivinen ja ladataan uudelleen pyynnöstä. - peers_api_enabled: Lista verkkotunnuksista, joita tämä palvelin on kohdannut fediversessä. Täällä ei ole tietoja siitä, oletko liitossa tiettyjen palvelinten kanssa, vaan ainoastaan luettelo niistä verkkotunnuksista, joista palvelimesi on ylipäätään tietoinen. Tätä tietoa käytetään palveluissa, jotka keräävät liittotilastoja laajassa merkityksessä. + peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja liittoutumisesta yleisellä tasolla. profile_directory: Profiilihakemisto lueteloi kaikki käyttäjät, jotka ovat ilmoittaneet olevansa löydettävissä. require_invite_text: Kun kirjautuminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” teksti syötetään pakolliseksi eikä vapaaehtoiseksi site_contact_email: Kuinka ihmiset voivat tavoittaa sinut oikeudellisissa tai tukikysymyksissä. @@ -103,7 +103,7 @@ fi: form_challenge: current_password: Olet menossa suojatulle alueelle imports: - data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto + data: Toiselta Mastodon-palvelimelta tuotu CSV-tiedosto invite_request: text: Tämä auttaa meitä arvioimaan hakemustasi ip_block: @@ -122,7 +122,7 @@ fi: webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä. settings: indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa. - show_application: Voit siitä huolimatta aina nähdä, millä sovelluksella julkaisusi laadittiin. + show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin. tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: @@ -140,11 +140,11 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - discoverable: Sisällytä profiili ja julkaisut etsintäalgoritmeihin + discoverable: Nosta profiili ja julkaisut esille löytämisalgoritmeissa fields: name: Nimike value: Sisältö - indexable: Sisällytä julkiset viestit hakutuloksiin + indexable: Sisällytä julkiset julkaisut hakutuloksiin show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: @@ -169,9 +169,9 @@ fi: announcement: all_day: Koko päivän kestävä tapahtuma ends_at: Tapahtuman loppu - scheduled_at: Ajasta julkaisu + scheduled_at: Ajoita julkaisu starts_at: Tapahtuman alku - text: Ilmoitus + text: Tiedote appeal: text: Perustele, miksi tämä päätös olisi kumottava defaults: @@ -184,18 +184,18 @@ fi: context: Suodata konteksteista current_password: Nykyinen salasana data: Tiedot - display_name: Nimimerkki + display_name: Näyttönimi email: Sähköpostiosoite expires_in: Vanhenee - fields: Profiilin metadata - header: Otsakekuva + fields: Lisäkentät + header: Otsikkokuva honeypot: "%{label} (älä täytä)" inbox_url: Välittäjän postilaatikon URL-osoite irreversible: Pudota piilottamisen sijaan locale: Kieli max_uses: Käyttökertoja enintään new_password: Uusi salasana - note: Kuvaus + note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana phrase: Avainsana tai lause @@ -203,29 +203,29 @@ fi: setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia setting_auto_play_gif: Toista GIF-animaatiot automaattisesti - setting_boost_modal: Kysy vahvistus ennen tehostusta + setting_boost_modal: Kysy vahvistusta ennen tehostusta setting_default_language: Viestien kieli setting_default_privacy: Viestin näkyvyys setting_default_sensitive: Merkitse media aina arkaluontoiseksi - setting_delete_modal: Kysy vahvistusta ennen viestin poistamista + setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen setting_display_media_default: Oletus setting_display_media_hide_all: Piilota kaikki setting_display_media_show_all: Näytä kaikki - setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt viestit + setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt julkaisut setting_hide_network: Piilota verkkosi setting_reduce_motion: Vähennä animaatioiden liikettä setting_system_font_ui: Käytä järjestelmän oletusfonttia setting_theme: Sivuston teema setting_trends: Näytä päivän trendit - setting_unfollow_modal: Kysy vahvistusta, ennen kuin lopetat seuraamisen + setting_unfollow_modal: Kysy vahvistusta ennen seuraamisen lopettamista setting_use_blurhash: Näytä värikkäät liukuvärit piilotetulle medialle - setting_use_pending_items: Hidastila + setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi title: Otsikko - type: Tietojen laji + type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti whole_word: Koko sana @@ -289,7 +289,7 @@ fi: follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua mention: Lähetä sähköposti, kun sinut mainitaan pending_account: Uusi tili tarvitsee tarkastusta - reblog: Lähetä sähköposti, kun joku tehosti viestiäsi + reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: all: Ilmoita kaikista päivityksistä @@ -302,7 +302,7 @@ fi: text: Sääntö settings: indexable: Sisällytä profiilisivu hakukoneisiin - show_application: Näytä, mistä sovelluksesta lähetit viestin + show_application: Näytä, mistä sovelluksesta lähetit julkaisun tag: listable: Salli tämän aihetunnisteen näkyä hauissa ja ehdotuksissa name: Aihetunniste diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index d2fab9e048..56aa1d66b1 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -44,6 +44,7 @@ hy: setting_display_media_show_all: Մեդիա միշտ ցոյց տալ setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն + username: Միայն լատինատառեր, թուեր եւ տակի գծիկ whole_word: Եթէ բանալի բառը կամ արտայայտութիւնը պարունակում է միայն այբբենական նիշեր եւ թուեր, ապա այն կիրառուելու է ամբողջ բառի հետ համընկնելու դէպքում միայն domain_allow: domain: Այս տիրոյթը կարող է ստանալ տուեալներ այս սպասարկչից եւ ստացուող տուեալները կարող են օգտագործուել եւ պահուել From f0c720cfc9622ebb331f5d923cee8f1c71654698 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 13:40:43 +0200 Subject: [PATCH 008/237] Bump version to v4.3.0-alpha.0 (#27022) --- lib/mastodon/version.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 46c07596d1..587e89303b 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def minor - 2 + 3 end def patch @@ -17,7 +17,7 @@ module Mastodon end def default_prerelease - '' + 'alpha.0' end def prerelease From 686406cc2deeb6a1fa61dadc45b02349ce1853e4 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 13:41:24 +0200 Subject: [PATCH 009/237] Fix filtering audit log for entries about disabling 2FA (#27186) --- app/models/admin/action_log_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index f89d452ef4..0117974628 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -38,7 +38,7 @@ class Admin::ActionLogFilter destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze, destroy_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'destroy' }.freeze, - disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, + disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze, enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze, From 1da3c588ca19d66df1871d6616bde32192eed4b5 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 15:29:07 +0200 Subject: [PATCH 010/237] Fix link handling of mentions in user profiles when logged out (#27185) --- app/javascript/mastodon/actions/search.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index 7aea346e6d..38a089b486 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -147,6 +147,10 @@ export const openURL = (value, history, onFailure) => (dispatch, getState) => { const signedIn = !!getState().getIn(['meta', 'me']); if (!signedIn) { + if (onFailure) { + onFailure(); + } + return; } From e6b903b21e0682c1156ffec583ac2836fda7d657 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 09:40:28 -0400 Subject: [PATCH 011/237] Fix haml-lint `InstanceVariables` rule for invites/_form (#26064) --- .haml-lint_todo.yml | 11 ++++------- app/helpers/invites_helper.rb | 11 +++++++++++ app/views/admin/invites/index.html.haml | 3 ++- app/views/invites/_form.html.haml | 21 ++++++++++----------- app/views/invites/index.html.haml | 3 ++- 5 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 app/helpers/invites_helper.rb diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 6d2aa0641f..e8791e05ca 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-07-20 09:47:50 -0400 using Haml-Lint version 0.48.0. +# on 2023-08-28 13:08:37 -0400 using Haml-Lint version 0.50.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 951 + # Offense count: 945 LineLength: enabled: false @@ -26,7 +26,7 @@ linters: - 'app/views/admin/reports/show.html.haml' - 'app/views/disputes/strikes/show.html.haml' - # Offense count: 32 + # Offense count: 28 InstanceVariables: exclude: - 'app/views/admin/reports/_actions.html.haml' @@ -34,14 +34,11 @@ linters: - 'app/views/admin/webhooks/_form.html.haml' - 'app/views/auth/registrations/_status.html.haml' - 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml' - - 'app/views/authorize_interactions/_post_follow_actions.html.haml' - - 'app/views/invites/_form.html.haml' - 'app/views/relationships/_account.html.haml' - 'app/views/shared/_og.html.haml' - # Offense count: 3 + # Offense count: 2 IdNames: exclude: - - 'app/views/authorize_interactions/error.html.haml' - 'app/views/oauth/authorizations/error.html.haml' - 'app/views/shared/_error_messages.html.haml' diff --git a/app/helpers/invites_helper.rb b/app/helpers/invites_helper.rb new file mode 100644 index 0000000000..c189061db0 --- /dev/null +++ b/app/helpers/invites_helper.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module InvitesHelper + def invites_max_uses_options + [1, 5, 10, 25, 50, 100] + end + + def invites_expires_options + [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week] + end +end diff --git a/app/views/admin/invites/index.html.haml b/app/views/admin/invites/index.html.haml index ee6ba0f574..964deaba8f 100644 --- a/app/views/admin/invites/index.html.haml +++ b/app/views/admin/invites/index.html.haml @@ -14,7 +14,8 @@ - if policy(:invite).create? %p= t('invites.prompt') - = render 'invites/form' + = simple_form_for(@invite, url: admin_invites_path) do |form| + = render partial: 'invites/form', object: form %hr.spacer/ diff --git a/app/views/invites/_form.html.haml b/app/views/invites/_form.html.haml index 7ea521ebc7..dbbb785e83 100644 --- a/app/views/invites/_form.html.haml +++ b/app/views/invites/_form.html.haml @@ -1,14 +1,13 @@ -= simple_form_for(@invite, url: controller.is_a?(Admin::InvitesController) ? admin_invites_path : invites_path) do |f| - = render 'shared/error_messages', object: @invite += render 'shared/error_messages', object: form.object - .fields-row - .fields-row__column.fields-row__column-6.fields-group - = f.input :max_uses, wrapper: :with_label, collection: [1, 5, 10, 25, 50, 100], label_method: ->(num) { I18n.t('invites.max_uses', count: num) }, prompt: I18n.t('invites.max_uses_prompt') - .fields-row__column.fields-row__column-6.fields-group - = f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt') +.fields-row + .fields-row__column.fields-row__column-6.fields-group + = form.input :max_uses, wrapper: :with_label, collection: invites_max_uses_options, label_method: ->(num) { I18n.t('invites.max_uses', count: num) }, prompt: I18n.t('invites.max_uses_prompt') + .fields-row__column.fields-row__column-6.fields-group + = form.input :expires_in, wrapper: :with_label, collection: invites_expires_options.map(&:to_i), label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt') - .fields-group - = f.input :autofollow, wrapper: :with_label +.fields-group + = form.input :autofollow, wrapper: :with_label - .actions - = f.button :button, t('invites.generate'), type: :submit +.actions + = form.button :button, t('invites.generate'), type: :submit diff --git a/app/views/invites/index.html.haml b/app/views/invites/index.html.haml index 61420ab1e4..88ed662af8 100644 --- a/app/views/invites/index.html.haml +++ b/app/views/invites/index.html.haml @@ -4,7 +4,8 @@ - if policy(:invite).create? %p= t('invites.prompt') - = render 'form' + = simple_form_for(@invite, url: invites_path) do |form| + = render partial: 'form', object: form %hr.spacer/ From 56c0babc0bacf6f8e87c126e98966f0afa6ab467 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 09:48:47 -0400 Subject: [PATCH 012/237] Fix rubocop `Layout/ArgumentAlignment` cop (#26060) --- .rubocop_todo.yml | 9 -------- config/initializers/cors.rb | 32 ++++++++++------------------ config/initializers/session_store.rb | 11 ++++++---- 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index adfd476892..efe369d776 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -13,14 +13,6 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle, IndentationWidth. -# SupportedStyles: with_first_argument, with_fixed_indentation -Layout/ArgumentAlignment: - Exclude: - - 'config/initializers/cors.rb' - - 'config/initializers/session_store.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. # SupportedHashRocketStyles: key, separator, table @@ -841,6 +833,5 @@ Style/TrailingCommaInHashLiteral: Style/WordArray: Exclude: - 'app/helpers/languages_helper.rb' - - 'config/initializers/cors.rb' - 'spec/controllers/settings/imports_controller_spec.rb' - 'spec/models/form/import_spec.rb' diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index 1fde35f9d0..3d94e38e8e 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -11,26 +11,16 @@ Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins '*' - resource '/.well-known/*', - headers: :any, - methods: [:get], - credentials: false - resource '/@:username', - headers: :any, - methods: [:get], - credentials: false - resource '/users/:username', - headers: :any, - methods: [:get], - credentials: false - resource '/api/*', - headers: :any, - methods: [:post, :put, :delete, :get, :patch, :options], - credentials: false, - expose: ['Link', 'X-RateLimit-Reset', 'X-RateLimit-Limit', 'X-RateLimit-Remaining', 'X-Request-Id'] - resource '/oauth/token', - headers: :any, - methods: [:post], - credentials: false + with_options headers: :any, credentials: false do + with_options methods: [:get] do + resource '/.well-known/*' + resource '/@:username' + resource '/users/:username' + end + resource '/api/*', + expose: %w(Link X-RateLimit-Reset X-RateLimit-Limit X-RateLimit-Remaining X-Request-Id), + methods: %i(post put delete get patch options) + resource '/oauth/token', methods: [:post] + end end end diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index b29e0a8159..eac23a79b9 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -2,7 +2,10 @@ # Be sure to restart your server when you modify this file. -Rails.application.config.session_store :cookie_store, - key: '_mastodon_session', - secure: false, # All cookies have their secure flag set by the force_ssl option in production - same_site: :lax +Rails + .application + .config + .session_store :cookie_store, + key: '_mastodon_session', + secure: false, # All cookies have their secure flag set by the force_ssl option in production + same_site: :lax From 937dc42f101be905e3af41b879901a4445b0223a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:04:05 -0400 Subject: [PATCH 013/237] Extract methods for file movement in `CLI::Upgrade` (#25120) --- .rubocop.yml | 6 ------ lib/mastodon/cli/upgrade.rb | 42 ++++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index c8a433c729..4684ef06db 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -75,12 +75,6 @@ Metrics/AbcSize: - 'lib/mastodon/cli/*.rb' - db/*migrate/**/* -# Reason: -# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting -Metrics/BlockNesting: - Exclude: - - 'lib/mastodon/cli/*.rb' - # Reason: Currently disabled in .rubocop_todo.yml # https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity Metrics/CyclomaticComplexity: diff --git a/lib/mastodon/cli/upgrade.rb b/lib/mastodon/cli/upgrade.rb index 52b5540c40..cf83986844 100644 --- a/lib/mastodon/cli/upgrade.rb +++ b/lib/mastodon/cli/upgrade.rb @@ -125,27 +125,12 @@ module Mastodon::CLI progress.log("Moving #{previous_path} to #{upgraded_path}") if options[:verbose] begin - unless dry_run? - FileUtils.mkdir_p(File.dirname(upgraded_path)) - FileUtils.mv(previous_path, upgraded_path) - - begin - FileUtils.rmdir(File.dirname(previous_path), parents: true) - rescue Errno::ENOTEMPTY - # OK - end - end + move_previous_to_upgraded rescue => e progress.log(pastel.red("Error processing #{previous_path}: #{e}")) success = false - unless dry_run? - begin - FileUtils.rmdir(File.dirname(upgraded_path), parents: true) - rescue Errno::ENOTEMPTY - # OK - end - end + remove_directory end end @@ -155,5 +140,28 @@ module Mastodon::CLI attachment.instance_write(:storage_schema_version, previous_storage_schema_version) success end + + def move_previous_to_upgraded(previous_path, upgraded_path) + return if dry_run? + + FileUtils.mkdir_p(File.dirname(upgraded_path)) + FileUtils.mv(previous_path, upgraded_path) + + begin + FileUtils.rmdir(File.dirname(previous_path), parents: true) + rescue Errno::ENOTEMPTY + # OK + end + end + + def remove_directory(path) + return if dry_run? + + begin + FileUtils.rmdir(File.dirname(path), parents: true) + rescue Errno::ENOTEMPTY + # OK + end + end end end From 3060bfa4bd62c46c04e1ed0071ec3d6506111f89 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:22:05 -0400 Subject: [PATCH 014/237] Extract filename and csv helper methods from `Form::Import` (#26129) --- app/models/form/import.rb | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/models/form/import.rb b/app/models/form/import.rb index 2fc74715b5..29a2975c7b 100644 --- a/app/models/form/import.rb +++ b/app/models/form/import.rb @@ -43,14 +43,14 @@ class Form::Import validate :validate_data def guessed_type - return :muting if csv_data.headers.include?('Hide notifications') - return :following if csv_data.headers.include?('Show boosts') || csv_data.headers.include?('Notify on new posts') || csv_data.headers.include?('Languages') - return :following if data.original_filename&.start_with?('follows') || data.original_filename&.start_with?('following_accounts') - return :blocking if data.original_filename&.start_with?('blocks') || data.original_filename&.start_with?('blocked_accounts') - return :muting if data.original_filename&.start_with?('mutes') || data.original_filename&.start_with?('muted_accounts') - return :domain_blocking if data.original_filename&.start_with?('domain_blocks') || data.original_filename&.start_with?('blocked_domains') - return :bookmarks if data.original_filename&.start_with?('bookmarks') - return :lists if data.original_filename&.start_with?('lists') + return :muting if csv_headers_match?('Hide notifications') + return :following if csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') + return :following if file_name_matches?('follows') || file_name_matches?('following_accounts') + return :blocking if file_name_matches?('blocks') || file_name_matches?('blocked_accounts') + return :muting if file_name_matches?('mutes') || file_name_matches?('muted_accounts') + return :domain_blocking if file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains') + return :bookmarks if file_name_matches?('bookmarks') + return :lists if file_name_matches?('lists') end # Whether the uploaded CSV file seems to correspond to a different import type than the one selected @@ -79,6 +79,14 @@ class Form::Import private + def file_name_matches?(string) + data.original_filename&.start_with?(string) + end + + def csv_headers_match?(string) + csv_data.headers.include?(string) + end + def default_csv_headers case type.to_sym when :following, :blocking, :muting From 9d56c1949b1c2f9fefde88021ec82745b9aae495 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:23:35 -0400 Subject: [PATCH 015/237] Fix haml-lint `InstanceVariables` rule for admin/webhooks/_form (#26062) --- .haml-lint_todo.yml | 9 ++++----- app/views/admin/webhooks/_form.html.haml | 18 +++++++----------- app/views/admin/webhooks/edit.html.haml | 5 ++++- app/views/admin/webhooks/new.html.haml | 5 ++++- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index e8791e05ca..39e7b29903 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-08-28 13:08:37 -0400 using Haml-Lint version 0.50.0. +# on 2023-09-28 10:03:39 -0400 using Haml-Lint version 0.50.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 945 + # Offense count: 946 LineLength: enabled: false @@ -15,7 +15,7 @@ linters: UnnecessaryStringOutput: enabled: false - # Offense count: 57 + # Offense count: 59 RuboCop: enabled: false @@ -26,12 +26,11 @@ linters: - 'app/views/admin/reports/show.html.haml' - 'app/views/disputes/strikes/show.html.haml' - # Offense count: 28 + # Offense count: 25 InstanceVariables: exclude: - 'app/views/admin/reports/_actions.html.haml' - 'app/views/admin/roles/_form.html.haml' - - 'app/views/admin/webhooks/_form.html.haml' - 'app/views/auth/registrations/_status.html.haml' - 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml' - 'app/views/relationships/_account.html.haml' diff --git a/app/views/admin/webhooks/_form.html.haml b/app/views/admin/webhooks/_form.html.haml index c870e943f4..6c4574fd3b 100644 --- a/app/views/admin/webhooks/_form.html.haml +++ b/app/views/admin/webhooks/_form.html.haml @@ -1,14 +1,10 @@ -= simple_form_for @webhook, url: @webhook.new_record? ? admin_webhooks_path : admin_webhook_path(@webhook) do |f| - = render 'shared/error_messages', object: @webhook += render 'shared/error_messages', object: form.object - .fields-group - = f.input :url, wrapper: :with_block_label, input_html: { placeholder: 'https://' } +.fields-group + = form.input :url, wrapper: :with_block_label, input_html: { placeholder: 'https://' } - .fields-group - = f.input :events, collection: Webhook::EVENTS, wrapper: :with_block_label, include_blank: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) } +.fields-group + = form.input :events, collection: Webhook::EVENTS, wrapper: :with_block_label, include_blank: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) } - .fields-group - = f.input :template, wrapper: :with_block_label, input_html: { placeholder: '{ "content": "Hello {{object.username}}" }' } - - .actions - = f.button :button, @webhook.new_record? ? t('admin.webhooks.add_new') : t('generic.save_changes'), type: :submit +.fields-group + = form.input :template, wrapper: :with_block_label, input_html: { placeholder: '{ "content": "Hello {{object.username}}" }' } diff --git a/app/views/admin/webhooks/edit.html.haml b/app/views/admin/webhooks/edit.html.haml index 3dc0ace9bf..2c2a7aa034 100644 --- a/app/views/admin/webhooks/edit.html.haml +++ b/app/views/admin/webhooks/edit.html.haml @@ -1,4 +1,7 @@ - content_for :page_title do = t('admin.webhooks.edit') -= render partial: 'form' += simple_form_for @webhook, url: admin_webhook_path(@webhook) do |form| + = render partial: 'form', object: form + .actions + = form.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/webhooks/new.html.haml b/app/views/admin/webhooks/new.html.haml index 1258df74ab..f51b039ce8 100644 --- a/app/views/admin/webhooks/new.html.haml +++ b/app/views/admin/webhooks/new.html.haml @@ -1,4 +1,7 @@ - content_for :page_title do = t('admin.webhooks.new') -= render partial: 'form' += simple_form_for @webhook, url: admin_webhooks_path do |form| + = render partial: 'form', object: form + .actions + = form.button :button, t('admin.webhooks.add_new'), type: :submit From f9eefb27855d0b6d73aec430f8cf6ece7f99bf88 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 16:25:14 +0200 Subject: [PATCH 016/237] Update dependency rubocop to v1.56.4 (#27188) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7842fb69d2..0535d4ee45 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -640,7 +640,7 @@ GEM sidekiq (>= 5, < 8) rspec-support (3.12.1) rspec_chunked (0.6) - rubocop (1.56.3) + rubocop (1.56.4) base64 (~> 0.1.1) json (~> 2.3) language_server-protocol (>= 3.17.0) From 89a17878ef7c6e1b5fae847ee293a7dcfc43c305 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:36:24 -0400 Subject: [PATCH 017/237] Fix haml-lint `InstanceVariables` rule for admin/roles/_form (#26063) --- .haml-lint_todo.yml | 7 ++-- app/views/admin/roles/_form.html.haml | 54 +++++++++++++-------------- app/views/admin/roles/edit.html.haml | 5 ++- app/views/admin/roles/new.html.haml | 5 ++- 4 files changed, 36 insertions(+), 35 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 39e7b29903..886855ce0f 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-09-28 10:03:39 -0400 using Haml-Lint version 0.50.0. +# on 2023-09-28 10:26:23 -0400 using Haml-Lint version 0.50.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 946 + # Offense count: 944 LineLength: enabled: false @@ -26,11 +26,10 @@ linters: - 'app/views/admin/reports/show.html.haml' - 'app/views/disputes/strikes/show.html.haml' - # Offense count: 25 + # Offense count: 18 InstanceVariables: exclude: - 'app/views/admin/reports/_actions.html.haml' - - 'app/views/admin/roles/_form.html.haml' - 'app/views/auth/registrations/_status.html.haml' - 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml' - 'app/views/relationships/_account.html.haml' diff --git a/app/views/admin/roles/_form.html.haml b/app/views/admin/roles/_form.html.haml index 3cbec0d0b5..2400332145 100644 --- a/app/views/admin/roles/_form.html.haml +++ b/app/views/admin/roles/_form.html.haml @@ -1,40 +1,36 @@ -= simple_form_for @role, url: @role.new_record? ? admin_roles_path : admin_role_path(@role) do |f| - = render 'shared/error_messages', object: @role += render 'shared/error_messages', object: form.object - - if @role.everyone? - .flash-message.info - = t('admin.roles.everyone_full_description_html') - - else +- if form.object.everyone? + .flash-message.info + = t('admin.roles.everyone_full_description_html') +- else + .fields-group + = form.input :name, wrapper: :with_label + + - unless current_user.role == form.object .fields-group - = f.input :name, wrapper: :with_label + = form.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } - - unless current_user.role.id == @role.id - .fields-group - = f.input :position, wrapper: :with_label, input_html: { max: current_user.role.position - 1 } + .fields-group + = form.input :color, wrapper: :with_label, input_html: { placeholder: '#000000', type: 'color' } - .fields-group - = f.input :color, wrapper: :with_label, input_html: { placeholder: '#000000', type: 'color' } + %hr.spacer/ - %hr.spacer/ + .fields-group + = form.input :highlighted, wrapper: :with_label - .fields-group - = f.input :highlighted, wrapper: :with_label + %hr.spacer/ - %hr.spacer/ +- unless current_user.role == form.object - - unless current_user.role.id == @role.id + .field-group + .input.with_block_label + %label= t('simple_form.labels.user_role.permissions_as_keys') + %span.hint= t('simple_form.hints.user_role.permissions_as_keys') - .field-group - .input.with_block_label - %label= t('simple_form.labels.user_role.permissions_as_keys') - %span.hint= t('simple_form.hints.user_role.permissions_as_keys') + - (form.object.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions| + %h4= t(category, scope: 'admin.roles.categories') - - (@role.everyone? ? UserRole::Flags::CATEGORIES.slice(:invites) : UserRole::Flags::CATEGORIES).each do |category, permissions| - %h4= t(category, scope: 'admin.roles.categories') + = form.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: ->(privilege) { safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 } - = f.input :permissions_as_keys, collection: permissions, wrapper: :with_block_label, include_blank: false, label_method: ->(privilege) { safe_join([t("admin.roles.privileges.#{privilege}"), content_tag(:span, t("admin.roles.privileges.#{privilege}_description"), class: 'hint')]) }, required: false, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label: false, hint: false, disabled: permissions.filter { |privilege| UserRole::FLAGS[privilege] & current_user.role.computed_permissions == 0 } - - %hr.spacer/ - - .actions - = f.button :button, @role.new_record? ? t('admin.roles.add_new') : t('generic.save_changes'), type: :submit + %hr.spacer/ diff --git a/app/views/admin/roles/edit.html.haml b/app/views/admin/roles/edit.html.haml index 5688b69b1f..ec3f5b6fbe 100644 --- a/app/views/admin/roles/edit.html.haml +++ b/app/views/admin/roles/edit.html.haml @@ -4,4 +4,7 @@ - content_for :heading_actions do = link_to t('admin.roles.delete'), admin_role_path(@role), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:destroy, @role) -= render partial: 'form' += simple_form_for @role, url: admin_role_path(@role) do |form| + = render partial: 'form', object: form + .actions + = form.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/roles/new.html.haml b/app/views/admin/roles/new.html.haml index 8210792718..6ca0c2137b 100644 --- a/app/views/admin/roles/new.html.haml +++ b/app/views/admin/roles/new.html.haml @@ -1,4 +1,7 @@ - content_for :page_title do = t('admin.roles.add_new') -= render partial: 'form' += simple_form_for @role, url: admin_roles_path do |form| + = render partial: 'form', object: form + .actions + = form.button :button, t('admin.roles.add_new'), type: :submit From 99e289f03f6a8e2f1ba82ecadaac2d0a6e9fe876 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:52:11 -0400 Subject: [PATCH 018/237] Fix include `Rails.application.routes.url_helpers` (Rails 7.1 prep) (#27189) --- app/helpers/routing_helper.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 0d5a8505a2..2fb9ce72cb 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -3,11 +3,12 @@ module RoutingHelper extend ActiveSupport::Concern - include Rails.application.routes.url_helpers include ActionView::Helpers::AssetTagHelper include Webpacker::Helper included do + include Rails.application.routes.url_helpers + def default_url_options ActionMailer::Base.default_url_options end From 2016c5d912f400ae98ee03ce269112de2f9ec62d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:52:23 -0400 Subject: [PATCH 019/237] Fix deprecation warning about `rewhere: true` being default behavior (Rails 7.1 prep) (#27190) --- app/models/report_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index c9b3bce2d1..fd0e23cb81 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -19,7 +19,7 @@ class ReportFilter scope = Report.unresolved params.each do |key, value| - scope = scope.merge scope_for(key, value), rewhere: true + scope = scope.merge scope_for(key, value) end scope From 340f1a68becaf7c0f67b0f3a6d101213c8ceff90 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 28 Sep 2023 10:52:37 -0400 Subject: [PATCH 020/237] Simplify instance presenter view access (#26046) --- .haml-lint_todo.yml | 5 ++--- app/controllers/about_controller.rb | 8 -------- app/controllers/auth/registrations_controller.rb | 5 ----- app/controllers/auth/sessions_controller.rb | 5 ----- app/controllers/concerns/account_controller_concern.rb | 6 ------ app/controllers/home_controller.rb | 8 -------- app/controllers/privacy_controller.rb | 8 -------- app/controllers/statuses_controller.rb | 5 ----- app/controllers/tags_controller.rb | 5 ----- app/helpers/mascot_helper.rb | 2 -- app/views/shared/_og.html.haml | 6 +++--- 11 files changed, 5 insertions(+), 58 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 886855ce0f..64f5c0cc75 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-09-28 10:26:23 -0400 using Haml-Lint version 0.50.0. +# on 2023-09-28 10:42:25 -0400 using Haml-Lint version 0.50.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -26,14 +26,13 @@ linters: - 'app/views/admin/reports/show.html.haml' - 'app/views/disputes/strikes/show.html.haml' - # Offense count: 18 + # Offense count: 15 InstanceVariables: exclude: - 'app/views/admin/reports/_actions.html.haml' - 'app/views/auth/registrations/_status.html.haml' - 'app/views/auth/sessions/two_factor/_otp_authentication_form.html.haml' - 'app/views/relationships/_account.html.haml' - - 'app/views/shared/_og.html.haml' # Offense count: 2 IdNames: diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index c4b7e9c9d2..ffccf7a28e 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -5,15 +5,7 @@ class AboutController < ApplicationController skip_before_action :require_functional! - before_action :set_instance_presenter - def show expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? end - - private - - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index e70ae5b1b8..b0f2a02aa3 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -10,7 +10,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] before_action :set_sessions, only: [:edit, :update] before_action :set_strikes, only: [:edit, :update] - before_action :set_instance_presenter, only: [:new, :create, :update] before_action :set_body_classes, only: [:new, :create, :edit, :update] before_action :require_not_suspended!, only: [:update] before_action :set_cache_headers, only: [:edit, :update] @@ -107,10 +106,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController private - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end - def set_body_classes @body_classes = %w(edit update).include?(action_name) ? 'admin' : 'lighter' end diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 06a3deee2b..5327192b81 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -11,7 +11,6 @@ class Auth::SessionsController < Devise::SessionsController include TwoFactorAuthenticationConcern - before_action :set_instance_presenter, only: [:new] before_action :set_body_classes content_security_policy only: :new do |p| @@ -99,10 +98,6 @@ class Auth::SessionsController < Devise::SessionsController private - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end - def set_body_classes @body_classes = 'lighter' end diff --git a/app/controllers/concerns/account_controller_concern.rb b/app/controllers/concerns/account_controller_concern.rb index e9cff22ca8..d63bcc85c9 100644 --- a/app/controllers/concerns/account_controller_concern.rb +++ b/app/controllers/concerns/account_controller_concern.rb @@ -9,17 +9,11 @@ module AccountControllerConcern FOLLOW_PER_PAGE = 12 included do - before_action :set_instance_presenter - after_action :set_link_headers, if: -> { request.format.nil? || request.format == :html } end private - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end - def set_link_headers response.headers['Link'] = LinkHeader.new( [ diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index ee940e6707..03aa3eb52a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -3,15 +3,7 @@ class HomeController < ApplicationController include WebAppControllerConcern - before_action :set_instance_presenter - def index expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? end - - private - - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end end diff --git a/app/controllers/privacy_controller.rb b/app/controllers/privacy_controller.rb index 070ee8a06a..860e7c77a0 100644 --- a/app/controllers/privacy_controller.rb +++ b/app/controllers/privacy_controller.rb @@ -5,15 +5,7 @@ class PrivacyController < ApplicationController skip_before_action :require_functional! - before_action :set_instance_presenter - def show expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? end - - private - - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end end diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index effaba3630..db7eddd78b 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -10,7 +10,6 @@ class StatusesController < ApplicationController before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_status - before_action :set_instance_presenter before_action :redirect_to_original, only: :show before_action :set_body_classes, only: :embed @@ -67,10 +66,6 @@ class StatusesController < ApplicationController not_found end - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end - def redirect_to_original redirect_to(ActivityPub::TagManager.instance.url_for(@status.reblog), allow_other_host: true) if @status.reblog? end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 2007fe8462..b0bdbde956 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -14,7 +14,6 @@ class TagsController < ApplicationController before_action :set_local before_action :set_tag before_action :set_statuses, if: -> { request.format == :rss } - before_action :set_instance_presenter skip_before_action :require_functional!, unless: :limited_federation_mode? @@ -49,10 +48,6 @@ class TagsController < ApplicationController @statuses = cache_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status) end - def set_instance_presenter - @instance_presenter = InstancePresenter.new - end - def limit_param params[:limit].present? ? [params[:limit].to_i, PAGE_SIZE_MAX].min : PAGE_SIZE end diff --git a/app/helpers/mascot_helper.rb b/app/helpers/mascot_helper.rb index 0124c74f19..8ee04383ec 100644 --- a/app/helpers/mascot_helper.rb +++ b/app/helpers/mascot_helper.rb @@ -5,8 +5,6 @@ module MascotHelper full_asset_url(instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg')) end - private - def instance_presenter @instance_presenter ||= InstancePresenter.new end diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml index a5d99ae33a..385351ee14 100644 --- a/app/views/shared/_og.html.haml +++ b/app/views/shared/_og.html.haml @@ -1,12 +1,12 @@ -- thumbnail = @instance_presenter.thumbnail -- description ||= @instance_presenter.description.presence || strip_tags(t('about.about_mastodon_html')) +- thumbnail = instance_presenter.thumbnail +- description ||= instance_presenter.description.presence || strip_tags(t('about.about_mastodon_html')) %meta{ name: 'description', content: description }/ = opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname) = opengraph 'og:url', url_for(only_path: false) = opengraph 'og:type', 'website' -= opengraph 'og:title', @instance_presenter.title += opengraph 'og:title', instance_presenter.title = opengraph 'og:description', description = opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || asset_pack_path('media/images/preview.png', protocol: :request)) = opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200' From a1becc91899a53c8702a3350a2a63a417b12fae6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 09:50:15 +0200 Subject: [PATCH 021/237] Update dependency node to 20.8 (#27201) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index b1b396bcfa..fa69d015bd 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.7 +20.8 From 665093a7b67c83cea15486b862394910705af9cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 09:50:33 +0200 Subject: [PATCH 022/237] Update dependency postcss to v8.4.31 (#27199) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e419454661..015c5544a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9723,9 +9723,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.15, postcss@^8.4.24, postcss@^8.4.25: - version "8.4.30" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" - integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" From 695e42de0d0db75f15647c1aa6350ab2517701e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 10:04:18 +0200 Subject: [PATCH 023/237] New Crowdin Translations (automated) (#27202) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 12 ++-- config/locales/devise.fi.yml | 14 ++-- config/locales/doorkeeper.fi.yml | 8 +-- config/locales/fi.yml | 92 ++++++++++++------------- config/locales/simple_form.fi.yml | 62 ++++++++--------- 5 files changed, 94 insertions(+), 94 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4aa46ec0fc..094b7d3b36 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -201,9 +201,9 @@ "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", - "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", - "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", + "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", @@ -324,7 +324,7 @@ "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -493,10 +493,10 @@ "onboarding.steps.setup_profile.title": "Mukauta profiiliasi", "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", - "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", + "onboarding.tips.2fa": "Tiesitkö? Voit suojata tilisi ottamalla kaksivaiheisen todennuksen käyttöön tilisi asetuksista. Se toimii millä tahansa TOTP-sovelluksella, eikä sen käyttö edellytä puhelinnumeroa!", "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", - "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", + "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi lisäkenttään. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", "password_confirmation.mismatching": "Salasanan vahvistus ei täsmää", "picture_in_picture.restore": "Laita se takaisin", diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index eecbb3897a..8bbcb071e3 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -27,12 +27,12 @@ fi: title: Vahvista sähköpostiosoite email_changed: explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:' - extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: Sähköpostiosoite vaihdettu' title: Uusi sähköpostiosoite password_change: explanation: Tilisi salasana on vaihdettu. - extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: salasana vaihdettu' title: Salasana vaihdettu reconfirmation_instructions: @@ -47,11 +47,11 @@ fi: subject: 'Mastodon: ohjeet salasanan vaihtoon' title: Salasanan vaihto two_factor_disabled: - explanation: Kaksivaiheinen todennus tilillesi poistettiin käytöstä. Kirjautuminen onnistuu nyt käyttäen pelkkää sähköpostiosoitetta ja salasanaa. + explanation: Tilisi kaksivaiheinen todennus poistettiin käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitella ja salasanalla. subject: 'Mastodon: kaksivaiheinen todennus poistettu käytöstä' title: 2-vaiheinen todennus pois käytöstä two_factor_enabled: - explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Kaksivaiheisen tunnistuksen sovelluksesta saatu koodi tarvitaan kirjautumiseen. + explanation: Kaksivaiheinen todennus on otettu käyttöön tilillesi. Kirjautumiseen tarvitaan kaksivaiheisen todennuksen sovelluksesta saatu koodi. subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön' title: 2-vaiheinen todennus käytössä two_factor_recovery_codes_changed: @@ -70,11 +70,11 @@ fi: subject: 'Mastodon: suojausavain poistettu' title: Yksi suojausavaimistasi on poistettu webauthn_disabled: - explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista käyttämällä vain paritetun TOTP-sovelluksen luomaa tokenia. - subject: 'Mastodon: Todennus suoja-avaimilla poistettu käytöstä' + explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista vain paritetun TOTP-sovelluksen luomaa koodia käyttämällä. + subject: 'Mastodon: Todennus suojausavaimilla poistettu käytöstä' title: Suojausavaimet poistettu käytöstä webauthn_enabled: - explanation: Todennus suojausavaimella on otettu käyttöön tililläsi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. + explanation: Todennus suojausavaimella on otettu käyttöön tilillesi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. subject: 'Mastodon: Todennus suojausavaimella on otettu käyttöön' title: Suojausavaimet käytössä omniauth_callbacks: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 81b248ef2e..8d030274e7 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -67,13 +67,13 @@ fi: title: Kopioi tämä valtuutuskoodi ja liitä se sovellukseen. authorized_applications: buttons: - revoke: Peru + revoke: Hylkää confirmations: revoke: Oletko varma? index: authorized_at: Valtuutettu %{date} - description_html: Nämä ovat sovelluksia, jotka voivat käyttää tiliäsi käyttäen API. Jos et tunnista sitä tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. - last_used_at: Viimeksi käytetty %{date} + description_html: Nämä sovellukset voivat käyttää tiliäsi ohjelmointirajapinnan kautta. Jos tässä on sovelluksia, joita et tunnista, tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. + last_used_at: Käytetty viimeksi %{date} never_used: Ei käytetty scopes: Oikeudet superapp: Sisäinen @@ -114,7 +114,7 @@ fi: notice: Sovellus poistettu. grouped_scopes: access: - read: Vain luku + read: Vain lukuoikeus read/write: Luku- ja kirjoitusoikeudet write: Vain kirjoitusoikeus title: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 8a5d72a661..466cb95a24 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -76,7 +76,7 @@ fi: inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen invited_by: Kutsuja - ip: IP + ip: IP-osoite joined: Liittynyt location: all: Kaikki @@ -736,10 +736,10 @@ fi: rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja appearance: - preamble: Muokkaa Mastodonin web-käyttöliittymää. + preamble: Mukauta Mastodonin verkkokäyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin verkkokäyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -853,7 +853,7 @@ fi: version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: action: Hallitse palvelimen sääntöjä - message_html: Et ole määrittänyt mitään palvelimen sääntöä. + message_html: Et ole määrittänyt lainkaan palvelimen sääntöjä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset software_version_critical_check: @@ -864,7 +864,7 @@ fi: message_html: Mastodonin virhekorjauspäivitys on saatavilla. upload_check_privacy_error: action: Katso täältä lisätietoja - message_html: "Verkkopalvelimesi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." + message_html: "Verkkopalvelimesi on määritetty väärin. Käyttäjiesi yksityisyys on vaarassa." upload_check_privacy_error_object_storage: action: Katso täältä lisätietoja message_html: "Objektivarastosi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." @@ -1004,7 +1004,7 @@ fi: created_msg: Uusi alias luotiin onnistuneesti. Voit nyt aloittaa siirron vanhasta tilistä. deleted_msg: Alias poistettiin onnistuneesti. Siirtyminen tuolta tililtä tähän ei ole enää mahdollista. empty: Sinulla ei ole aliaksia. - hint_html: Jos haluat siirtyä toisesta tilistä tähän tiliin, voit luoda aliasin, joka on pakollinen, ennen kuin voit siirtää seuraajia vanhasta tilistä tähän tiliin. Tämä toiminto on itsessään vaaraton ja palautuva. Tilin siirtyminen aloitetaan vanhalta tililtä. + hint_html: Jos haluat muuttaa toiselta tililtä tälle tilille, voit luoda tässä aliaksen, mitä vaaditaan ennen kuin voit edetä siirtämään seuraajat vanhalta tililtä tälle tilille. Tänä toiminto on itsessään vaaraton ja kumottavissa. Tilin muuttaminen aloitetaan vanhalta tililtä. remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä @@ -1042,7 +1042,7 @@ fi: confirmations: wrong_email_hint: Jos sähköpostiosoite ei ole oikein, voit muuttaa sen tilin asetuksista. delete_account: Poista tili - delete_account_html: Jos haluat poistaa tilisi, paina tästä. Poisto on vahvistettava. + delete_account_html: Jos haluat poistaa tilisi, voit edetä tästä. Sinua pyydetään vahvistamaan poisto. description: prefix_invited_by_user: "@%{name} kutsuu sinut liittymään tälle Mastodonin palvelimelle!" prefix_sign_up: Liity Mastodoniin tänään! @@ -1051,13 +1051,13 @@ fi: dont_have_your_security_key: Eikö sinulla ole suojausavainta? forgot_password: Unohditko salasanasi? invalid_reset_password_token: Salasanan palautustunnus on virheellinen tai vanhentunut. Pyydä uusi. - link_to_otp: Syötä puhelimesi kaksivaiheinen koodi tai palautuskoodi + link_to_otp: Syötä puhelimesi kaksivaiheisen todennuksen koodi tai palautuskoodi link_to_webauth: Käytä suojausavaintasi log_in_with: Kirjaudu käyttäen login: Kirjaudu sisään logout: Kirjaudu ulos migrate_account: Muuta toiseen tiliin - migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit asettaa toisen tilin tästä. + migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit asettaa toisen tilin tästä. or_log_in_with: Tai käytä kirjautumiseen privacy_policy_agreement_html: Olen lukenut ja hyväksynyt tietosuojakäytännön progress: @@ -1138,7 +1138,7 @@ fi: proceed: Poista tili success_msg: Tilin poisto onnistui warning: - before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi @@ -1198,7 +1198,7 @@ fi: content: Valitettavasti jokin meni pieleen meidän päässämme. title: Sivu ei ole oikein '503': Sivua ei voitu näyttää palvelimen väliaikaisen vian vuoksi. - noscript_html: Käyttääksesi Mastodon-verkkopalvelua, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla myös jotakin juuri käyttämällesi alustalle kehitettyä Mastodon-sovellusta. + noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin natiivisovelluksia. existing_username_validator: not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä not_found_multiple: "%{usernames} ei löytynyt" @@ -1236,7 +1236,7 @@ fi: statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: - deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. + deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai verkkokäyttöliittymää. invalid_context: Ei sisältöä tai se on virheellinen index: contexts: Suodattimet %{contexts} @@ -1262,7 +1262,7 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen verkkokäyttöliittymästä. title: Suodatetut julkaisut generic: all: Kaikki @@ -1279,7 +1279,7 @@ fi: delete: Poista deselect: Poista kaikki valinnat none: Ei mitään - order_by: Järjestä + order_by: Järjestys save_changes: Tallenna muutokset select_all_matching_items: one: Valitse %{count} kohde, joka vastaa hakuasi. @@ -1373,7 +1373,7 @@ fi: limit: Sinulla on enimmäismäärä listoja login_activities: authentication_methods: - otp: kaksivaiheinen todennussovellus + otp: kaksivaiheisen todennuksen sovellus password: salasana sign_in_token: sähköpostin turvakoodi webauthn: suojausavaimet @@ -1415,7 +1415,7 @@ fi: on_cooldown: Sinä olet jäähyllä followers_count: Seuraajat muuton aikana incoming_migrations: Siirtyminen toiselta tililtä - incoming_migrations_html: Siirtääksesi toisesta tilistä tähän tiliin, sinun täytyy ensin luoda tilin alias. + incoming_migrations_html: Siirtyäksesi toisesta tilistä tähän, sinun täytyy ensin luoda tilin alias. moved_msg: Tilisi ohjaa nyt kohteeseen %{acct} ja seuraajiasi siirretään. not_redirecting: Tilisi ei ohjaa tällä hetkellä mihinkään muuhun tiliin. on_cooldown: Olet siirtänyt tilisi äskettäin. Tämä toiminto tulee saataville uudelleen %{count} päivän kuluttua. @@ -1426,13 +1426,13 @@ fi: set_redirect: Aseta uudelleenohjaus warning: backreference_required: Uusi tili on ensin määritettävä viittaamaan tähän tiliin - before: 'Ennen jatkamista, lue nämä huomautukset huolellisesti:' - cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää liikkumaan - disabled_account: Nykyinen tilisi ei ole täysin käytettävissä jälkikäteen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' + cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää muuttamaan + disabled_account: Nykyinen tilisi ei ole täysin käytettävissä tämän jälkeen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. followers: Tämä toiminto siirtää kaikki seuraajat nykyisestä tilistä uudelle tilille - only_redirect_html: Vaihtoehtoisesti voit asettaa vain uudelleenohjauksen profiiliisi. + only_redirect_html: Vaihtoehtoisesti voit asettaa vain ohjauksen profiiliisi. other_data: Muita tietoja ei siirretä automaattisesti - redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta + redirect: Nykyisen tilisi profiili päivitetään ohjaushuomautuksella ja suljetaan pois hauista moderation: title: Valvonta move_handler: @@ -1492,7 +1492,7 @@ fi: trillion: B otp_authentication: code_hint: Anna todennussovelluksen luoma koodi vahvistaaksesi - description_html: Jos otat käyttöön kaksivaiheisen todentamisen, käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. + description_html: Jos otat kaksivaiheisen todennuksen käyttöön käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. enable: Ota käyttöön instructions_html: "Lue tämä QR-koodi puhelimen Google Authenticator- tai vastaavalla TOTP-sovelluksella. Sen jälkeen sovellus luo tunnuksia, joita tarvitset kun kirjaudut sisään." manual_instructions: 'Jos et voi lukea QR-koodia ja haluat syöttää sen käsin, tässä on salainen koodi tekstinä:' @@ -1547,10 +1547,10 @@ fi: following: Seuratut invited: Kutsutut last_active: Viimeksi aktiivinen - most_recent: Viimeisin - moved: Muuttanut + most_recent: Viimeisimmät + moved: Muuttaneet mutual: Molemmat - primary: Ensisijainen + primary: Ensisijaiset relationship: Suhde remove_selected_domains: Poista kaikki seuraajat valituista verkkotunnuksista remove_selected_followers: Poista valitut seuraajat @@ -1595,7 +1595,7 @@ fi: weibo: Weibo current_session: Nykyinen istunto description: "%{browser} alustalla %{platform}" - explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi. + explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneena Mastodon-tilillesi. ip: IP-osoite platforms: adobe_air: Adobe AIR @@ -1636,7 +1636,7 @@ fi: relationships: Seuratut ja seuraajat statuses_cleanup: Autom. julkaisujen poisto strikes: Valvontavaroitukset - two_factor_authentication: Kaksivaiheinen todentaminen + two_factor_authentication: Kaksivaiheinen todennus webauthn_authentication: Suojausavaimet statuses: attached: @@ -1681,7 +1681,7 @@ fi: title: "%{name}: ”%{quote}”" visibilities: direct: Suoraan - private: Vain seuraajille + private: Vain seuraajat private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä @@ -1694,7 +1694,7 @@ fi: explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset - interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen + interaction_exceptions: Vuorovaikutuksiin perustuvat poikkeukset interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit keep_direct_hint: Ei poista yksityisviestejäsi @@ -1703,7 +1703,7 @@ fi: keep_pinned: Säilytä kiinnitetyt julkaisut keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset - keep_polls_hint: Ei poista yhtäkään äänestystä + keep_polls_hint: Ei poista äänestyksiäsi keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut @@ -1745,16 +1745,16 @@ fi: too_many_requests: Käännöspalvelulle on hiljattain esitetty liian monta pyyntöä. two_factor_authentication: add: Lisää - disable: Poista käytöstä + disable: Poista 2FA käytöstä disabled_success: Kaksivaiheinen todennus on poistettu käytöstä edit: Muokkaa - enabled: Kaksivaiheinen todentaminen käytössä - enabled_success: Kaksivaiheisen todentamisen käyttöönotto onnistui + enabled: Kaksivaiheinen todennus käytössä + enabled_success: Kaksivaiheisen todennuksen käyttöönotto onnistui generate_recovery_codes: Luo palautuskoodit - lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodit, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. - methods: Kaksivaiheisen tunnistautumisen menetelmät + lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodisi, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. + methods: Kaksivaiheisen todennuksen menetelmät otp: Todennussovellus - recovery_codes: Varapalautuskoodit + recovery_codes: Ota palautuskoodit talteen recovery_codes_regenerated: Uusien palautuskoodien luonti onnistui recovery_instructions_html: Jos menetät puhelimesi, voit kirjautua tilillesi jollakin alla olevista palautuskoodeista. Pidä palautuskoodit hyvässä tallessa. Voit esimerkiksi tulostaa ne ja säilyttää muiden tärkeiden papereiden joukossa. webauthn: Suojausavaimet @@ -1776,7 +1776,7 @@ fi: change_password: vaihda salasanasi details: 'Tässä on tiedot kirjautumisesta:' explanation: Olemme havainneet kirjautumisen tilillesi uudesta IP-osoitteesta. - further_actions_html: Jos tämä et ollut sinä, suosittelemme että %{action} välittömästi ja ota kaksivaiheinen todennus käyttöön säilyttääksesi tilisi turvallisena. + further_actions_html: Jos tämä et ollut sinä, suosittelemme, että %{action} heti ja otat käyttöön kaksivaiheisen todennuksen pitääksesi tilisi turvassa. subject: Tiliäsi on käytetty uudesta IP-osoitteesta title: Uusi kirjautuminen warning: @@ -1828,26 +1828,26 @@ fi: seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä. signed_in_as: 'Kirjautunut tilillä:' verification: - extra_instructions_html: Vinkki: Tämä linkitys verkkosivustollasi voidaan toteuttaa myös näkymättömänä. Tärkeä osuus on rel="me" -määre, jolla ehkäistään valeprofiilikäyttötarkoituksia sivustoilla, joiden sisältö perustuu käyttäjiensä julkaisuihin. Voit siis käyttää linkkiviittauselementtiä link HTML-lähdekoodin otsakeosassa (head) sen sijaan, että käyttäisit näkyvää hyperlinkkielementtiä a. HTML-lähdekoodin tulee tuolta osin kuitenkin olla JavaScriptistä riippumatonta. + extra_instructions_html: Vinkki: Verkkosivustollasi oleva linkki voi olla myös näkymätön. Olennainen osuus on rel="me", joka estää toiseksi henkilöksi tekeytymisen verkkosivustoilla, joilla on käyttäjien luomaa sisältöä. Voit käyttää jopa link-elementtiä sivun head-osassa elementin a sijaan, mutta HTML:n pitää olla käytettävissä ilman JavaScript-koodin suorittamista. here_is_how: Näin voit tehdä sen - hint_html: "Mastodonissa henkilöllisyyden vahventaminen on jokaisen käyttäjän ulottuvilla. Tämä perustuu avoimiin standardeihin, maksuttomasti nyt ja aina. Kaikki mitä tarvitset on henkilökohtainen verkkosivusto, jonka avulla sinut voidaan tunnistaa. Kun Mastodon-profiilistasi on linkki kyseiselle verkkosivustollesi, ja sieltä löytyy vastaviittaus tai -linkitys profiiliisi, näkyy profiilissasi vahvistustunniste." - instructions_html: Kopioi ja liitä alla oleva koodi verkkosivusi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin ylimääräisistä kentistä profiiliasetuksissa, "Muokkaa profiilia" -välilehdestä, ja tallenna muutokset. + hint_html: "Henkilöllisyyden vahvistaminen on Mastodonissa jokaisen käyttäjän ulottuvilla. Se perustuu avoimiin standardeihin ja on maksutonta nyt ja aina. Tarvitset vain henkilökohtaisen verkkosivuston, jonka perusteella sinut voidaan tunnistaa. Kun teet linkin tuolle verkkosivulle profiilistasi, tarkistamme, että verkkosivustolla on linkki takaisin profiiliisi, ja näytämme profiilissasi visuaalisen ilmaisimen." + instructions_html: Kopioi ja liitä alla oleva koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset. verification: Vahvistus verified_links: Vahvistetut linkkisi webauthn_credentials: add: Lisää uusi suojausavain create: - error: Suojausavaimen lisäämisessä tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen lisääminen onnistui. + error: Suojausavaimen lisäämisessä oli ongelma. Yritä uudelleen. + success: Suojausavaimesi lisääminen onnistui. delete: Poista delete_confirmation: Haluatko varmasti poistaa tämän suojausavaimen? description_html: Jos otat suojausavaimen todennuksen käyttöön, kirjautuminen edellyttää jonkin suojausavaimen käyttämistä. destroy: - error: Suojausavaimen poistamisessa tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen poistaminen onnistui. + error: Suojausavaimen poistamisessa oli ongelma. Yritä uudelleen. + success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain - nickname_hint: Anna nimimerkki uudelle suojausavaimelle + nickname_hint: Anna uuden suojausaivaimesi lempinimi not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa not_supported: Tämä selain ei tue suojausavaimia - otp_required: Jos haluat käyttää suojausavaimia, ota ensin käyttöön kaksivaiheinen todennus. + otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index db82edba24..1eec9a9317 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -11,9 +11,9 @@ fi: 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ä. unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, johon haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, johon haluat siirtyä account_warning_preset: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle @@ -41,7 +41,7 @@ fi: autofollow: Henkilöt, jotka rekisteröityvät kutsun kautta, seuraavat sinua automaattisesti avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja eikä sitä ehkä valvota - context: Yksi tai useampi asiayhteys, jossa suodattimen pitäisi olla käytössä + context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana @@ -54,15 +54,15 @@ fi: phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) - setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia - setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella + setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät Mastodonia aktiivisesti + setting_default_sensitive: Arkaluonteinen media on oletuksena piilotettu, ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media setting_display_media_hide_all: Piilota media aina setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja - whole_word: Kun avainsana tai lause on vain aakkosnumeerinen, se otetaan käyttöön, jos se vastaa koko sanaa + whole_word: Kun avainsana tai -fraasi on kokonaan aakkosnumeerinen, se on voimassa vain, jos se vastaa koko sanaa domain_allow: domain: Tämä verkkotunnus voi noutaa tietoja tältä palvelimelta ja sieltä saapuvat tiedot käsitellään ja tallennetaan email_domain_block: @@ -71,7 +71,7 @@ fi: featured_tag: name: 'Tässä muutamia hiljattain käyttämiäsi aihetunnisteita:' filters: - action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta + action: Valitse, mikä toiminto suoritetaan, kun julkaisu vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi @@ -126,7 +126,7 @@ fi: tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: - chosen_languages: Kun valittu, vain valituilla kielillä julkaistut viestit näkyvät julkisilla aikajanoilla + chosen_languages: Kun valittu, vain valituilla kielillä kirjoitetut julkaisut näkyvät julkisilla aikajanoilla role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on user_role: color: Väri, jota käytetään roolin koko käyttöliittymässä, RGB heksamuodossa @@ -148,21 +148,21 @@ fi: show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: - acct: Vanhan tilin käsittely + acct: Vanhan tilin käyttäjätunnus account_migration: - acct: Uuden tilin käsittely + acct: Uuden tilin käyttäjätunnus account_warning_preset: text: Esiasetettu teksti - title: Otsikko + title: Nimi admin_account_action: include_statuses: Sisällytä raportoidut viestit sähköpostiin send_email_notification: Ilmoita käyttäjälle sähköpostitse text: Mukautettu varoitus - type: Toimenpide + type: Toimi types: disable: Poista kirjautuminen käytöstä none: Älä tee mitään - sensitive: Arkaluontoinen + sensitive: Arkaluonteinen silence: Hiljennä suspend: Poista käytöstä ja tuhoa käyttäjätunnuksen tiedot peruuttamattomasti warning_preset_id: Käytä varoitusmallia @@ -181,7 +181,7 @@ fi: chosen_languages: Suodata kieliä confirm_new_password: Vahvista uusi salasana confirm_password: Vahvista salasana - context: Suodata konteksteista + context: Suodattimen kontekstit current_password: Nykyinen salasana data: Tiedot display_name: Näyttönimi @@ -198,15 +198,15 @@ fi: note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana - phrase: Avainsana tai lause - setting_advanced_layout: Ota käyttöön edistynyt selainkäyttöliittymä - setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla - setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia + phrase: Avainsana tai -fraasi + setting_advanced_layout: Ota edistynyt selainkäyttöliittymä käyttöön + setting_aggregate_reblogs: Ryhmitä tehostukset aikajanoilla + setting_always_send_emails: Lähetä sähköposti-ilmoitukset aina setting_auto_play_gif: Toista GIF-animaatiot automaattisesti setting_boost_modal: Kysy vahvistusta ennen tehostusta - setting_default_language: Viestien kieli - setting_default_privacy: Viestin näkyvyys - setting_default_sensitive: Merkitse media aina arkaluontoiseksi + setting_default_language: Julkaisun kieli + setting_default_privacy: Julkaisun näkyvyys + setting_default_sensitive: Merkitse media aina arkaluonteiseksi setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen @@ -224,7 +224,7 @@ fi: setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi - title: Otsikko + title: Nimi type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti @@ -236,7 +236,7 @@ fi: filters: actions: hide: Piilota kokonaan - warn: Piilota varoituksella + warn: Piilota ja näytä varoitus form_admin_settings: activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta rajapinnassa backups_retention_period: Käyttäjän arkiston säilytysaika @@ -268,14 +268,14 @@ fi: interactions: must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa - must_be_following_dm: Estä suorat viestit käyttäjiltä, joita et seuraa + must_be_following_dm: Estä yksityisviestit käyttäjiltä, joita et seuraa invite: comment: Kommentoi invite_request: text: Miksi haluat liittyä? ip_block: comment: Kommentti - ip: IP + ip: IP-osoite severities: no_access: Estä pääsy sign_up_block: Estä kirjautumiset @@ -284,11 +284,11 @@ fi: notification_emails: appeal: Joku valittaa valvojan päätöksestä digest: Lähetä koosteviestejä sähköpostitse - favourite: Lähetä sähköposti, kun joku tykkää tilastasi - follow: Lähetä sähköposti, kun joku seuraa sinua - follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua - mention: Lähetä sähköposti, kun sinut mainitaan - pending_account: Uusi tili tarvitsee tarkastusta + favourite: Joku lisäsi julkaisusi suosikkeihinsa + follow: Joku seurasi sinua + follow_request: Joku pyysi saada seurata sinua + mention: Joku mainitsi sinut + pending_account: Uusi tili tarvitsee tarkistusta reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: @@ -297,7 +297,7 @@ fi: label: Uusi Mastodon-versio on saatavilla none: Älä koskaan ilmoita päivityksistä (ei suositeltu) patch: Ilmoita virhekorjauspäivityksistä - trending_tag: Uusi trendi vaatii tarkastelua + trending_tag: Uusi trendi vaatii tarkistusta rule: text: Sääntö settings: From 9b785877d2ae752359acf3ed636cc5f2da53510e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:34:32 +0200 Subject: [PATCH 024/237] Update DefinitelyTyped types (non-major) (#27212) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 113 +++++++++++++++++++++++++++------------------------ 2 files changed, 61 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 227399e804..bedfe076ff 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ "@types/react-dom": "^18.2.4", "@types/react-helmet": "^6.1.6", "@types/react-immutable-proptypes": "^2.1.0", - "@types/react-motion": "^0.0.34", + "@types/react-motion": "^0.0.35", "@types/react-overlays": "^3.1.0", "@types/react-router-dom": "^5.3.3", "@types/react-select": "^5.0.1", diff --git a/yarn.lock b/yarn.lock index 015c5544a7..e150c6faee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1096,13 +1096,20 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.9.2": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -2305,9 +2312,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "20.6.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.5.tgz#4c6a79adf59a8e8193ac87a0e522605b16587258" - integrity sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w== + version "20.7.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.1.tgz#06d732ead0bd5ad978ef0ea9cbdeb24dc8717514" + integrity sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg== "@types/node@14 || 16 || 17": version "17.0.45" @@ -2374,31 +2381,31 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4": - version "18.2.7" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" - integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== + version "18.2.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.8.tgz#338f1b0a646c9f10e0a97208c1d26b9f473dffd6" + integrity sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw== dependencies: "@types/react" "*" "@types/react-helmet@^6.1.6": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.6.tgz#7d1afd8cbf099616894e8240e9ef70e3c6d7506d" - integrity sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A== + version "6.1.7" + resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.7.tgz#4cecc03165084727408d29d92d8fdd4a7e267403" + integrity sha512-mUFOrdR3AIvHE8BEaqzfPEnR62xq5PHQJehhgNtj78x0d5NOxUCQ0j+r9OZ4RvB+prNZx9wvQnVW8ApFBX+fig== dependencies: "@types/react" "*" "@types/react-immutable-proptypes@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#c045fb48ba28c34c9d759abc3a51a04b5321b77a" - integrity sha512-NRH4W4mgymzyM2gnAG+i2VoOdWIBOQlJlSyAgnFiBTdJ0l8IVeyCtdWP8g6Lra59sUBj2XUO/+DkfmrRAxj6UA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/react-immutable-proptypes/-/react-immutable-proptypes-2.1.1.tgz#9327e09b07ea61c95a8c99869a5e9f0fc1690cc4" + integrity sha512-PiVos0qCotGqI+J0kOeFhbeg7zK8StPMTSDGaTtgYkX6UPjuVVS7lJMedyt4kAMFbM/2QE0bbP5jh22WqtspQg== dependencies: "@types/prop-types" "*" immutable "^3.8.2" -"@types/react-motion@^0.0.34": - version "0.0.34" - resolved "https://registry.yarnpkg.com/@types/react-motion/-/react-motion-0.0.34.tgz#789ff2063e2f7fbb6085d291135c442e8b35291a" - integrity sha512-/rFI22Vg4Xzb47hXtS06WkzUGRu+Vb3yDleuxiqzGj0JbXYXQUCgwSa2ZU12K7ubKi4C8xsdIN3xt4Z4fjSdPw== +"@types/react-motion@^0.0.35": + version "0.0.35" + resolved "https://registry.yarnpkg.com/@types/react-motion/-/react-motion-0.0.35.tgz#63002d85791dc9c7c212044c7b89dfff99cd0b51" + integrity sha512-7e0rlyG4wgvL1F5G8FMpgEYgPF54i7tmOy3b9KSp6kPjU2hEAV6BiRrl3qMPGrJXZ9soH/OlUYx1Ae5C9AJLGA== dependencies: "@types/react" "*" @@ -2434,23 +2441,23 @@ react-select "*" "@types/react-sparklines@^1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@types/react-sparklines/-/react-sparklines-1.7.2.tgz#c14e80623abd3669a10f18d13f6fb9fbdc322f70" - integrity sha512-N1GwO7Ri5C5fE8+CxhiDntuSw1qYdGytBuedKrCxWpaojXm4WnfygbdBdc5sXGX7feMxDXBy9MNhxoUTwrMl4A== + version "1.7.3" + resolved "https://registry.yarnpkg.com/@types/react-sparklines/-/react-sparklines-1.7.3.tgz#cdcbeea734bae191011d8f42ef20d794e55b9064" + integrity sha512-fU88CytKUp/aT8CsaWCNOgcvto5OoINj717z9l0a6OiLiz4EhojRW3c6dSwawM9VjKOIJZMXobSRbbJt7MCtsw== dependencies: "@types/react" "*" "@types/react-swipeable-views@^0.13.1": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@types/react-swipeable-views/-/react-swipeable-views-0.13.2.tgz#c37cc8978ae60ab0dff209ef3eb1f77185aef330" - integrity sha512-FiszBm9M0JicAgzO/IwDqpfHQRUEjPZA88UexYsVD6qHJBf5LrbGjR5Mw4+yZbf8ZxJneNqOsZbe4WGjOYG7iQ== + version "0.13.3" + resolved "https://registry.yarnpkg.com/@types/react-swipeable-views/-/react-swipeable-views-0.13.3.tgz#a4c545b7b722c2622806e5853a96ec5826b0bafb" + integrity sha512-gVAQb5AxZTSLVTrJ/Fxwsk0axdBqGzXC8NxAD8MNwEf+qZynsb+15KL9TpNCaGGk4SCE2iyU/JNi6nGNB61AyA== dependencies: "@types/react" "*" "@types/react-test-renderer@^18.0.0": - version "18.0.2" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.2.tgz#44243977eec18ab8cda88d8977437f47a0d3fdbe" - integrity sha512-tJzMn+9GHDrdrLe0O4rwJELDfTrmdJbCn/UdYyzjlnPiXYXDl5FBNzdw4PVk2R3hJvSHKFjZcRgvZc12lV0p5Q== + version "18.0.3" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.3.tgz#67922bf5e5f0096581b1efd67dcdeabdd400cfea" + integrity sha512-4wcNLnY6nIT+L6g94CpzL4CXX2P18JvKPU9CDlaHr3DnbP3GiaQLhDotJqjWlVqOcE4UhLRjp0MtxqwuNKONnA== dependencies: "@types/react" "*" @@ -2476,18 +2483,18 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7": - version "18.2.22" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.22.tgz#abe778a1c95a07fa70df40a52d7300a40b949ccb" - integrity sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA== + version "18.2.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.23.tgz#60ad6cf4895e93bed858db0e03bcc4ff97d0410e" + integrity sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/redux-immutable@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/redux-immutable/-/redux-immutable-4.0.3.tgz#db92a281aa9a55a7b63bc1f20a233790305a1f06" - integrity sha512-wXUApt9ib9MGUqoHUMbQmQhqCkvykMHBW3z/P7DISMigFGpGRQ0kkbv7we0XNiv5sYEtEiZzNCEDm+W6ei04DA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/redux-immutable/-/redux-immutable-4.0.4.tgz#091641dea366ceed4f8b228a08a0de5f380b9bfd" + integrity sha512-qPFra/qd6HX7+bxayxwM9bsGdMoF7QhTGW/ZJFiaoBZVDZEnQEQCrDhsbSW8Xpuihe6xJ0TRHG3/WTvQpHLGaQ== dependencies: immutable "^4.0.0-rc.1" redux "^4.0.0" @@ -2505,9 +2512,9 @@ "@types/node" "*" "@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + version "0.16.4" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.4.tgz#fedc3e5b15c26dc18faae96bf1317487cb3658cf" + integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ== "@types/semver@^7.5.0": version "7.5.2" @@ -2532,9 +2539,9 @@ "@types/node" "*" "@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.3.tgz#077e15c87fe06520e30396a533bd9848e735ce9b" + integrity sha512-I9R/7fUjzUOyDy6AFkehCK711wWoAXEaBi80AfjZt1lIkbe6AcXKd3ckQc3liMvQExWvfOeh/8CtKzrfUFN5gA== "@types/stack-utils@^2.0.0": version "2.0.1" @@ -2542,9 +2549,9 @@ integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/tapable@^1": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.9.tgz#1481a4236267dd2d0ca2a637adb90f0ccb3d69c4" + integrity sha512-fOHIwZua0sRltqWzODGUM6b4ffZrf/vzGUmNXdR+4DzuJP42PMbM5dLKcdzlYvv8bMJ3GALOzkk1q7cDm2zPyA== "@types/tough-cookie@*": version "4.0.2" @@ -2557,9 +2564,9 @@ integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== "@types/uglify-js@*": - version "3.17.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" - integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== + version "3.17.2" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.2.tgz#a2ba86fd524f6281a7655463338c546f845b29c3" + integrity sha512-9SjrHO54LINgC/6Ehr81NjAxAYvwEZqjUHLjJYvC4Nmr9jbLQCIZbWSvl4vXQkkmR1UAuaKDycau3O1kWGFyXQ== dependencies: source-map "^0.6.1" @@ -2579,18 +2586,18 @@ integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== "@types/webpack-sources@*": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" - integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.1.tgz#98670b35fa799c44ac235910f3fda9bfdcdbc2c6" + integrity sha512-iLC3Fsx62ejm3ST3PQ8vBMC54Rb3EoCprZjeJGI5q+9QjfDLGt9jeg/k245qz1G9AQnORGk0vqPicJFPT1QODQ== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.7.3" "@types/webpack@^4.41.33": - version "4.41.33" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" - integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== + version "4.41.34" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.34.tgz#8cf616be84b39c8fb26f9459d4470a5514df2477" + integrity sha512-CN2aOGrR3zbMc2v+cKqzaClYP1ldkpPOgtdNvgX+RmlWCSWxHxpzz6WSCVQZRkF8D60ROlkRzAoEpgjWQ+bd2g== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -2605,9 +2612,9 @@ integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== "@types/yargs@^17.0.24", "@types/yargs@^17.0.8": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.25.tgz#3edd102803c97356fb4c805b2bbaf7dfc9ab6abc" - integrity sha512-gy7iPgwnzNvxgAEi2bXOHWCVOG6f7xsprVJH4MjlAWeBmJ7vh/Y1kwMtUrs64ztf24zVIRCpr3n/z6gm9QIkgg== + version "17.0.26" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.26.tgz#388e5002a8b284ad7b4599ba89920a6d74d8d79a" + integrity sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw== dependencies: "@types/yargs-parser" "*" From 48ef7d0f067943b5e608eaee7bba4e277bea83db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:34:55 +0200 Subject: [PATCH 025/237] Update libretranslate/libretranslate Docker tag to v1.3.12 (#27214) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 20aecd71d6..0369521963 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -70,7 +70,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.3.11 + image: libretranslate/libretranslate:v1.3.12 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local From 5393be7a21331c8615ffb79c2271db92f6959458 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:51:27 +0200 Subject: [PATCH 026/237] Update eslint (non-major) to v6.7.3 (#27213) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 109 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index e150c6faee..19436669f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1305,7 +1305,12 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.5.1": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" + integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== + +"@eslint-community/regexpp@^4.6.1": version "4.8.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== @@ -2517,9 +2522,9 @@ integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ== "@types/semver@^7.5.0": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" - integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== + version "7.5.3" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== "@types/send@*": version "0.17.1" @@ -2619,15 +2624,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.0.0": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz#f18cc75c9cceac8080a9dc2e7d166008c5207b9f" - integrity sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q== + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz#d98046e9f7102d49a93d944d413c6055c47fafd7" + integrity sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.2" - "@typescript-eslint/type-utils" "6.7.2" - "@typescript-eslint/utils" "6.7.2" - "@typescript-eslint/visitor-keys" "6.7.2" + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/type-utils" "6.7.3" + "@typescript-eslint/utils" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2636,31 +2641,31 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.2.tgz#e0ae93771441b9518e67d0660c79e3a105497af4" - integrity sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw== + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.3.tgz#aaf40092a32877439e5957e18f2d6a91c82cc2fd" + integrity sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ== dependencies: - "@typescript-eslint/scope-manager" "6.7.2" - "@typescript-eslint/types" "6.7.2" - "@typescript-eslint/typescript-estree" "6.7.2" - "@typescript-eslint/visitor-keys" "6.7.2" + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz#cf59a2095d2f894770c94be489648ad1c78dc689" - integrity sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw== +"@typescript-eslint/scope-manager@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz#07e5709c9bdae3eaf216947433ef97b3b8b7d755" + integrity sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ== dependencies: - "@typescript-eslint/types" "6.7.2" - "@typescript-eslint/visitor-keys" "6.7.2" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" -"@typescript-eslint/type-utils@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz#ed921c9db87d72fa2939fee242d700561454f367" - integrity sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ== +"@typescript-eslint/type-utils@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz#c2c165c135dda68a5e70074ade183f5ad68f3400" + integrity sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw== dependencies: - "@typescript-eslint/typescript-estree" "6.7.2" - "@typescript-eslint/utils" "6.7.2" + "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/utils" "6.7.3" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2669,10 +2674,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.2.tgz#75a615a6dbeca09cafd102fe7f465da1d8a3c066" - integrity sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg== +"@typescript-eslint/types@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.3.tgz#0402b5628a63f24f2dc9d4a678e9a92cc50ea3e9" + integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2687,30 +2692,30 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz#ce5883c23b581a5caf878af641e49dd0349238c7" - integrity sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ== +"@typescript-eslint/typescript-estree@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz#ec5bb7ab4d3566818abaf0e4a8fa1958561b7279" + integrity sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g== dependencies: - "@typescript-eslint/types" "6.7.2" - "@typescript-eslint/visitor-keys" "6.7.2" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.2.tgz#b9ef0da6f04932167a9222cb4ac59cb187165ebf" - integrity sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ== +"@typescript-eslint/utils@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.3.tgz#96c655816c373135b07282d67407cb577f62e143" + integrity sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.2" - "@typescript-eslint/types" "6.7.2" - "@typescript-eslint/typescript-estree" "6.7.2" + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/typescript-estree" "6.7.3" semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": @@ -2721,12 +2726,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.7.2": - version "6.7.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz#4cb2bd786f1f459731b0ad1584c9f73e1c7a4d5c" - integrity sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ== +"@typescript-eslint/visitor-keys@6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz#83809631ca12909bd2083558d2f93f5747deebb2" + integrity sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg== dependencies: - "@typescript-eslint/types" "6.7.2" + "@typescript-eslint/types" "6.7.3" eslint-visitor-keys "^3.4.1" "@webassemblyjs/ast@1.9.0": From d80a819fc60b530042784cc3f20cd3041ee0a996 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 29 Sep 2023 15:51:36 +0200 Subject: [PATCH 027/237] Fix explore prompt appearing because of posts being received out of order (#27211) --- .../mastodon/features/home_timeline/index.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 63d373b9a9..93f9376285 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -39,8 +39,17 @@ const getHomeFeedSpeed = createSelector([ ], (statusIds, pendingStatusIds, statusMap) => { const recentStatusIds = pendingStatusIds.size > 0 ? pendingStatusIds : statusIds; const statuses = recentStatusIds.filter(id => id !== null).map(id => statusMap.get(id)).filter(status => status?.get('account') !== me).take(20); - const oldest = new Date(statuses.getIn([statuses.size - 1, 'created_at'], 0)); - const newest = new Date(statuses.getIn([0, 'created_at'], 0)); + + if (statuses.isEmpty()) { + return { + gap: 0, + newest: new Date(0), + }; + } + + const datetimes = statuses.map(status => status.get('created_at', 0)); + const oldest = new Date(datetimes.min()); + const newest = new Date(datetimes.max()); const averageGap = (newest - oldest) / (1000 * (statuses.size + 1)); // Average gap between posts on first page in seconds return { From 44b739a39a96ab799b78d096db6cf296aca5cef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Mon, 2 Oct 2023 11:12:51 +0900 Subject: [PATCH 028/237] =?UTF-8?q?Add:=20Web=E3=81=A7=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=A1=A8=E7=A4=BA=20(#50)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add compacted component * 引用表示の間にコンテナをはさみ、不要なコードを削除 * 引用APIを作成、ついでにブロック状況を引用APIに反映 * テスト修正など * 引用をキャッシュに登録 * `quote_id`が`quote_of_id`になったのをSerializerに反映 * Fix test * 引用をフィルターの対象に含める設定+エラー修正 * ストリーミングの存在しないプロパティ削除によるエラーを修正 * Fix lint * 他のサーバーから来た引用付き投稿を処理 * Fix test * フィルター設定時エラーの調整 * 画像つき投稿のスタイルを調整 * 画像つき投稿の最大高さを調整 * 引用禁止・非表示の設定を追加 * ブロック対応 * マイグレーションコード調整 * 引用設定の翻訳を作成 * Lint修正 * 参照1つの場合は引用に変換する設定を削除 * 不要になったテストを削除 * ブロック設定追加、バグ修正 * 他サーバーへ引用送信・受け入れ --- app/controllers/api/v1/filters_controller.rb | 4 +- .../v1/statuses/emoji_reactions_controller.rb | 2 +- app/controllers/api/v2/filters_controller.rb | 2 +- app/controllers/filters_controller.rb | 2 +- .../mastodon/actions/importer/index.js | 4 + .../mastodon/actions/importer/normalizer.js | 5 + .../mastodon/components/compacted_status.jsx | 503 ++++++++++++++++++ .../mastodon/components/media_gallery.jsx | 6 +- app/javascript/mastodon/components/status.jsx | 77 ++- .../mastodon/components/status_action_bar.jsx | 6 +- .../containers/compacted_status_container.jsx | 78 +++ .../mastodon/containers/status_container.jsx | 2 + .../features/status/components/action_bar.jsx | 6 +- app/javascript/mastodon/initial_state.js | 6 + app/javascript/mastodon/locales/en.json | 2 +- app/javascript/mastodon/locales/ja.json | 2 +- app/javascript/mastodon/selectors/index.js | 9 +- .../styles/mastodon/components.scss | 18 +- app/lib/activitypub/activity/create.rb | 20 +- app/lib/status_reach_finder.rb | 5 + app/models/account.rb | 8 + app/models/concerns/has_user_settings.rb | 20 +- app/models/custom_filter.rb | 11 +- app/models/status.rb | 32 +- app/models/status_reference.rb | 17 + app/models/user_settings.rb | 5 +- app/policies/status_policy.rb | 4 + .../status_relationships_presenter.rb | 27 +- .../activitypub/note_serializer.rb | 6 +- app/serializers/initial_state_serializer.rb | 5 + app/serializers/rest/status_serializer.rb | 24 + .../process_status_update_service.rb | 3 +- app/services/process_references_service.rb | 50 +- app/services/resolve_url_service.rb | 6 +- app/views/filters/_filter_fields.html.haml | 5 +- .../preferences/appearance/show.html.haml | 5 + .../settings/preferences/other/show.html.haml | 3 - .../settings/privacy_extra/show.html.haml | 3 + app/workers/process_references_worker.rb | 4 +- config/locales/simple_form.en.yml | 7 + config/locales/simple_form.ja.yml | 7 + ...30233930_add_quote_to_status_references.rb | 24 + .../20231001031337_add_quote_to_statuses.rb | 32 ++ ...050733_add_with_quote_to_custom_filters.rb | 15 + db/schema.rb | 5 +- .../status_reference_fabricator.rb | 8 + spec/lib/activitypub/activity/create_spec.rb | 138 +++++ spec/lib/status_reach_finder_spec.rb | 12 +- spec/models/status_spec.rb | 65 +++ spec/policies/status_policy_spec.rb | 42 ++ .../activitypub/note_serializer_spec.rb | 26 - .../process_references_service_spec.rb | 98 +++- streaming/index.js | 6 +- 53 files changed, 1362 insertions(+), 120 deletions(-) create mode 100644 app/javascript/mastodon/components/compacted_status.jsx create mode 100644 app/javascript/mastodon/containers/compacted_status_container.jsx create mode 100644 db/migrate/20230930233930_add_quote_to_status_references.rb create mode 100644 db/migrate/20231001031337_add_quote_to_statuses.rb create mode 100644 db/migrate/20231001050733_add_with_quote_to_custom_filters.rb create mode 100644 spec/fabricators/status_reference_fabricator.rb diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb index 3b097a3478..4345b61ac7 100644 --- a/app/controllers/api/v1/filters_controller.rb +++ b/app/controllers/api/v1/filters_controller.rb @@ -52,11 +52,11 @@ class Api::V1::FiltersController < Api::BaseController end def resource_params - params.permit(:phrase, :expires_in, :irreversible, :exclude_follows, :exclude_localusers, :whole_word, context: []) + params.permit(:phrase, :expires_in, :irreversible, :exclude_follows, :exclude_localusers, :with_quote, :whole_word, context: []) end def filter_params - resource_params.slice(:phrase, :expires_in, :irreversible, :exclude_follows, :exclude_localusers, :context) + resource_params.slice(:phrase, :expires_in, :irreversible, :exclude_follows, :exclude_localusers, :with_quote, :context) end def keyword_params diff --git a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb index 4dc4bd92c8..f437576d1b 100644 --- a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb +++ b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb @@ -31,7 +31,7 @@ class Api::V1::Statuses::EmojiReactionsController < Api::BaseController end render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new( - [@status], current_account.id, emoji_reactions_map: { @status.id => false } + [@status], current_account.id ) rescue Mastodon::NotPermittedError not_found diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb index f3e9938d8c..5e39d77416 100644 --- a/app/controllers/api/v2/filters_controller.rb +++ b/app/controllers/api/v2/filters_controller.rb @@ -43,6 +43,6 @@ class Api::V2::FiltersController < Api::BaseController end def resource_params - params.permit(:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) + params.permit(:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, :with_quote, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) end end diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index b0b2168884..9549ae3500 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -49,7 +49,7 @@ class FiltersController < ApplicationController end def resource_params - params.require(:custom_filter).permit(:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) + params.require(:custom_filter).permit(:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, :with_quote, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]) end def set_body_classes diff --git a/app/javascript/mastodon/actions/importer/index.js b/app/javascript/mastodon/actions/importer/index.js index 369be6b8fb..50b90ef655 100644 --- a/app/javascript/mastodon/actions/importer/index.js +++ b/app/javascript/mastodon/actions/importer/index.js @@ -80,6 +80,10 @@ export function importFetchedStatuses(statuses) { processStatus(status.reblog); } + if (status.quote && status.quote.id) { + processStatus(status.quote); + } + if (status.poll && status.poll.id) { pushUnique(polls, normalizePoll(status.poll, getState().getIn(['polls', status.poll.id]))); } diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 3220118f3d..a376992b7e 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -85,6 +85,11 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.spoiler_text = normalOldStatus.get('spoiler_text'); normalStatus.hidden = normalOldStatus.get('hidden'); + // for quoted post + if (!normalStatus.filtered && normalOldStatus.get('filtered')) { + normalStatus.filtered = normalOldStatus.get('filtered'); + } + if (normalOldStatus.get('translation')) { normalStatus.translation = normalOldStatus.get('translation'); } diff --git a/app/javascript/mastodon/components/compacted_status.jsx b/app/javascript/mastodon/components/compacted_status.jsx new file mode 100644 index 0000000000..7ab5ee2025 --- /dev/null +++ b/app/javascript/mastodon/components/compacted_status.jsx @@ -0,0 +1,503 @@ +import PropTypes from 'prop-types'; + +import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; + +import classNames from 'classnames'; + +import ImmutablePropTypes from 'react-immutable-proptypes'; +import ImmutablePureComponent from 'react-immutable-pure-component'; + +import { HotKeys } from 'react-hotkeys'; + +import AttachmentList from 'mastodon/components/attachment_list'; +import { Icon } from 'mastodon/components/icon'; + +import Card from '../features/status/components/card'; +// We use the component (and not the container) since we do not want +// to use the progress bar to show download progress +import Bundle from '../features/ui/components/bundle'; +import { MediaGallery, Video, Audio } from '../features/ui/util/async-components'; +import { displayMedia } from '../initial_state'; + +import { Avatar } from './avatar'; +import { DisplayName } from './display_name'; +import { getHashtagBarForStatus } from './hashtag_bar'; +import { RelativeTimestamp } from './relative_timestamp'; +import StatusContent from './status_content'; + +const domParser = new DOMParser(); + +export const textForScreenReader = (intl, status, rebloggedByText = false) => { + const displayName = status.getIn(['account', 'display_name']); + + const spoilerText = status.getIn(['translation', 'spoiler_text']) || status.get('spoiler_text'); + const contentHtml = status.getIn(['translation', 'contentHtml']) || status.get('contentHtml'); + const contentText = domParser.parseFromString(contentHtml, 'text/html').documentElement.textContent; + + const values = [ + displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName, + spoilerText && status.get('hidden') ? spoilerText : contentText, + intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }), + status.getIn(['account', 'acct']), + ]; + + if (rebloggedByText) { + values.push(rebloggedByText); + } + + return values.join(', '); +}; + +export const defaultMediaVisibility = (status) => { + if (!status) { + return undefined; + } + + if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') { + status = status.get('reblog'); + } + + return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all'); +}; + +const messages = defineMessages({ + public_short: { id: 'privacy.public.short', defaultMessage: 'Public' }, + unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' }, + public_unlisted_short: { id: 'privacy.public_unlisted.short', defaultMessage: 'Public unlisted' }, + login_short: { id: 'privacy.login.short', defaultMessage: 'Login only' }, + private_short: { id: 'privacy.private.short', defaultMessage: 'Followers only' }, + limited_short: { id: 'privacy.limited.short', defaultMessage: 'Limited menbers only' }, + mutual_short: { id: 'privacy.mutual.short', defaultMessage: 'Mutual followers only' }, + circle_short: { id: 'privacy.circle.short', defaultMessage: 'Circle members only' }, + personal_short: { id: 'privacy.personal.short', defaultMessage: 'Yourself only' }, + direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' }, + edited: { id: 'status.edited', defaultMessage: 'Edited {date}' }, +}); + +class CompactedStatus extends ImmutablePureComponent { + + static contextTypes = { + router: PropTypes.object, + }; + + static propTypes = { + status: ImmutablePropTypes.map, + previousId: PropTypes.string, + nextInReplyToId: PropTypes.string, + rootId: PropTypes.string, + onClick: PropTypes.func, + onOpenMedia: PropTypes.func, + onOpenVideo: PropTypes.func, + onHeightChange: PropTypes.func, + onToggleHidden: PropTypes.func, + onToggleCollapsed: PropTypes.func, + onTranslate: PropTypes.func, + onInteractionModal: PropTypes.func, + muted: PropTypes.bool, + hidden: PropTypes.bool, + unread: PropTypes.bool, + onMoveUp: PropTypes.func, + onMoveDown: PropTypes.func, + showThread: PropTypes.bool, + getScrollPosition: PropTypes.func, + updateScrollBottom: PropTypes.func, + cacheMediaWidth: PropTypes.func, + cachedMediaWidth: PropTypes.number, + }; + + // Avoid checking props that are functions (and whose equality will always + // evaluate to false. See react-immutable-pure-component for usage. + updateOnProps = [ + 'status', + 'muted', + 'hidden', + 'unread', + ]; + + state = { + showMedia: defaultMediaVisibility(this.props.status), + statusId: undefined, + forceFilter: undefined, + }; + + static getDerivedStateFromProps(nextProps, prevState) { + if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) { + return { + showMedia: defaultMediaVisibility(nextProps.status), + statusId: nextProps.status.get('id'), + }; + } else { + return null; + } + } + + handleToggleMediaVisibility = () => { + this.setState({ showMedia: !this.state.showMedia }); + }; + + handleClick = e => { + if (e && (e.button !== 0 || e.ctrlKey || e.metaKey)) { + return; + } + + if (e) { + e.preventDefault(); + } + + this.handleHotkeyOpen(); + }; + + handlePrependAccountClick = e => { + this.handleAccountClick(e, false); + }; + + handleAccountClick = (e, proper = true) => { + if (e && (e.button !== 0 || e.ctrlKey || e.metaKey)) { + return; + } + + if (e) { + e.preventDefault(); + e.stopPropagation(); + } + + this._openProfile(proper); + }; + + handleExpandedToggle = () => { + this.props.onToggleHidden(this._properStatus()); + }; + + handleCollapsedToggle = isCollapsed => { + this.props.onToggleCollapsed(this._properStatus(), isCollapsed); + }; + + handleTranslate = () => { + this.props.onTranslate(this._properStatus()); + }; + + getAttachmentAspectRatio () { + const attachments = this._properStatus().get('media_attachments'); + + if (attachments.getIn([0, 'type']) === 'video') { + return `${attachments.getIn([0, 'meta', 'original', 'width'])} / ${attachments.getIn([0, 'meta', 'original', 'height'])}`; + } else if (attachments.getIn([0, 'type']) === 'audio') { + return '16 / 9'; + } else { + return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2' + } + } + + renderLoadingMediaGallery = () => { + return ( +
+ ); + }; + + renderLoadingVideoPlayer = () => { + return ( +
+ ); + }; + + renderLoadingAudioPlayer = () => { + return ( +
+ ); + }; + + handleOpenVideo = (options) => { + const status = this._properStatus(); + const lang = status.getIn(['translation', 'language']) || status.get('language'); + this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), lang, options); + }; + + handleOpenMedia = (media, index) => { + const status = this._properStatus(); + const lang = status.getIn(['translation', 'language']) || status.get('language'); + this.props.onOpenMedia(status.get('id'), media, index, lang); + }; + + handleHotkeyOpenMedia = e => { + const { onOpenMedia, onOpenVideo } = this.props; + const status = this._properStatus(); + + e.preventDefault(); + + if (status.get('media_attachments').size > 0) { + const lang = status.getIn(['translation', 'language']) || status.get('language'); + if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), lang, { startTime: 0 }); + } else { + onOpenMedia(status.get('id'), status.get('media_attachments'), 0, lang); + } + } + }; + + handleHotkeyOpen = () => { + if (this.props.onClick) { + this.props.onClick(); + return; + } + + const { router } = this.context; + const status = this._properStatus(); + + if (!router) { + return; + } + + router.history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`); + }; + + handleHotkeyOpenProfile = () => { + this._openProfile(); + }; + + _openProfile = (proper = true) => { + const { router } = this.context; + const status = proper ? this._properStatus() : this.props.status; + + if (!router) { + return; + } + + router.history.push(`/@${status.getIn(['account', 'acct'])}`); + }; + + handleHotkeyMoveUp = e => { + this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured')); + }; + + handleHotkeyMoveDown = e => { + this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured')); + }; + + handleHotkeyToggleHidden = () => { + this.props.onToggleHidden(this._properStatus()); + }; + + handleHotkeyToggleSensitive = () => { + this.handleToggleMediaVisibility(); + }; + + _properStatus () { + const { status } = this.props; + + if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') { + return status.get('reblog'); + } else { + return status; + } + } + + handleRef = c => { + this.node = c; + }; + + render () { + const { intl, hidden, featured, unread, showThread, previousId, nextInReplyToId, rootId } = this.props; + + let { status } = this.props; + + if (status === null) { + return null; + } + + const handlers = this.props.muted ? {} : { + open: this.handleHotkeyOpen, + openProfile: this.handleHotkeyOpenProfile, + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + toggleHidden: this.handleHotkeyToggleHidden, + toggleSensitive: this.handleHotkeyToggleSensitive, + openMedia: this.handleHotkeyOpenMedia, + }; + + let media, isCardMediaWithSensitive, prepend, rebloggedByText; + + if (hidden) { + return ( + +
+ {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} + {status.get('content')} +
+
+ ); + } + + const connectUp = previousId && previousId === status.get('in_reply_to_id'); + const connectToRoot = rootId && rootId === status.get('in_reply_to_id'); + const connectReply = nextInReplyToId && nextInReplyToId === status.get('id'); + + if (showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) { + const display_name_html = { __html: status.getIn(['account', 'display_name_html']) }; + + prepend = ( +
+
+ }} /> +
+ ); + } + + if (status.get('quote_muted')) { + const minHandlers = { + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + }; + + return ( + + {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */} +
+ +
+
+ ); + } + + isCardMediaWithSensitive = false; + + if (status.get('media_attachments').size > 0) { + const language = status.getIn(['translation', 'language']) || status.get('language'); + + if (this.props.muted) { + media = ( + + ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + const attachment = status.getIn(['media_attachments', 0]); + const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); + + media = ( + + {Component => ( + + )} + + ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + const attachment = status.getIn(['media_attachments', 0]); + const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); + + media = ( + + {Component => ( + + )} + + ); + } else { + media = ( + + {Component => ( + + )} + + ); + } + } else if (status.get('card') && !this.props.muted) { + media = ( + + ); + isCardMediaWithSensitive = status.get('spoiler_text').length > 0; + } + + const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status); + const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0; + + return ( + +
+ {prepend} + +
+ {(connectReply || connectUp || connectToRoot) &&
} + + {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */} + + + + + {(!isCardMediaWithSensitive || !status.get('hidden')) && media} + + {(!status.get('spoiler_text') || expanded) && hashtagBar} +
+
+ + ); + } + +} + +export default injectIntl(CompactedStatus); diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index be2f457c76..536842481f 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -236,6 +236,7 @@ class MediaGallery extends PureComponent { visible: PropTypes.bool, autoplay: PropTypes.bool, onToggleVisibility: PropTypes.func, + compact: PropTypes.bool, }; state = { @@ -306,7 +307,7 @@ class MediaGallery extends PureComponent { } render () { - const { media, lang, intl, sensitive, defaultWidth, autoplay } = this.props; + const { media, lang, intl, sensitive, defaultWidth, autoplay, compact } = this.props; const { visible } = this.state; const width = this.state.width || defaultWidth; @@ -359,9 +360,10 @@ class MediaGallery extends PureComponent { const columnClass = (size === 9) ? 'media-gallery--column3' : (size === 10 || size === 11 || size === 12 || size === 13 || size === 14 || size === 15 || size === 16) ? 'media-gallery--column4' : 'media-gallery--column2'; + const compactClass = compact ? 'media-gallery__compact' : null; return ( -
+
{spoilerButton}
diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 1a65aee51f..88a921c780 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -13,12 +13,13 @@ import AttachmentList from 'mastodon/components/attachment_list'; import { Icon } from 'mastodon/components/icon'; import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder'; +import CompactedStatusContainer from '../containers/compacted_status_container' import Card from '../features/status/components/card'; // We use the component (and not the container) since we do not want // to use the progress bar to show download progress import Bundle from '../features/ui/components/bundle'; import { MediaGallery, Video, Audio } from '../features/ui/util/async-components'; -import { displayMedia, enableEmojiReaction, showEmojiReactionOnTimeline } from '../initial_state'; +import { displayMedia, enableEmojiReaction, showEmojiReactionOnTimeline, showQuoteInHome, showQuoteInPublic } from '../initial_state'; import { Avatar } from './avatar'; import { AvatarOverlay } from './avatar_overlay'; @@ -87,6 +88,7 @@ class Status extends ImmutablePureComponent { static propTypes = { status: ImmutablePropTypes.map, account: ImmutablePropTypes.map, + contextType: PropTypes.string, previousId: PropTypes.string, nextInReplyToId: PropTypes.string, rootId: PropTypes.string, @@ -357,15 +359,17 @@ class Status extends ImmutablePureComponent { }; render () { - const { intl, hidden, featured, unread, showThread, scrollKey, pictureInPicture, previousId, nextInReplyToId, rootId } = this.props; + const { intl, hidden, featured, unread, muted, showThread, scrollKey, pictureInPicture, previousId, nextInReplyToId, rootId } = this.props; let { status, account, ...other } = this.props; + + const contextType = (this.props.contextType || '').split(':')[0]; if (status === null) { return null; } - const handlers = this.props.muted ? {} : { + const handlers = muted ? {} : { reply: this.handleHotkeyReply, favourite: this.handleHotkeyFavourite, boost: this.handleHotkeyBoost, @@ -384,7 +388,7 @@ class Status extends ImmutablePureComponent { if (hidden) { return ( -
+
{status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} {status.get('content')}
@@ -412,12 +416,53 @@ class Status extends ImmutablePureComponent { let visibilityIcon = visibilityIconInfo[status.get('limited_scope') || status.get('visibility_ex')] || visibilityIconInfo[status.get('visibility')]; + if (account === undefined || account === null) { + statusAvatar = ; + } else { + statusAvatar = ; + } + if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { - const minHandlers = this.props.muted ? {} : { + const minHandlers = muted ? {} : { moveUp: this.handleHotkeyMoveUp, moveDown: this.handleHotkeyMoveDown, }; + if (status.get('filter_action') === 'half_warn') { + return ( + +
+ {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */} + + +
+ : {matchedFilters.join(', ')}. + {' '} + +
+
+
+ ); + } + return (
@@ -478,7 +523,7 @@ class Status extends ImmutablePureComponent { } else if (status.get('media_attachments').size > 0) { const language = status.getIn(['translation', 'language']) || status.get('language'); - if (this.props.muted) { + if (muted) { media = ( ); } - } else if (status.get('card') && !this.props.muted) { + } else if (status.get('card') && !muted) { media = ( 0; } - if (account === undefined || account === null) { - statusAvatar = ; - } else { - statusAvatar = ; - } - visibilityIcon = visibilityIconInfo[status.get('limited_scope') || status.get('visibility_ex')] || visibilityIconInfo[status.get('visibility')]; let emojiReactionsBar = null; @@ -588,20 +627,24 @@ class Status extends ImmutablePureComponent { const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0; const withLimited = status.get('visibility_ex') === 'limited' && status.get('limited_scope') ? : null; - const withReference = status.get('status_references_count') > 0 ? : null; + const withQuote = status.get('quote_id') ? : null; + const withReference = (!withQuote && status.get('status_references_count') > 0) ? : null; const withExpiration = status.get('expires_at') ? : null; + const quote = !muted && status.get('quote_id') && (['public', 'community'].includes(contextType) ? showQuoteInPublic : showQuoteInHome) && + return ( -
+
{prepend} -
+
{(connectReply || connectUp || connectToRoot) &&
} {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}
+ {withQuote} {withReference} {withExpiration} {withLimited} @@ -629,6 +672,8 @@ class Status extends ImmutablePureComponent { {...statusContentProps} /> + {(!status.get('spoiler_text') || expanded) && quote} + {(!isCardMediaWithSensitive || !status.get('hidden')) && media} {(!status.get('spoiler_text') || expanded) && hashtagBar} diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index a6f5e87037..8fef327039 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -298,6 +298,7 @@ class StatusActionBar extends ImmutablePureComponent { const account = status.get('account'); const writtenByMe = status.getIn(['account', 'id']) === me; const isRemote = status.getIn(['account', 'username']) !== status.getIn(['account', 'acct']); + const allowQuote = status.getIn(['account', 'other_settings', 'allow_quote']); let menu = []; @@ -332,7 +333,10 @@ class StatusActionBar extends ImmutablePureComponent { if (publicStatus) { menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference }); - menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote }); + + if (allowQuote) { + menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote }); + } } menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClickOriginal }); diff --git a/app/javascript/mastodon/containers/compacted_status_container.jsx b/app/javascript/mastodon/containers/compacted_status_container.jsx new file mode 100644 index 0000000000..8d483ed36f --- /dev/null +++ b/app/javascript/mastodon/containers/compacted_status_container.jsx @@ -0,0 +1,78 @@ +import { injectIntl } from 'react-intl'; + +import { connect } from 'react-redux'; + +import { openModal } from '../actions/modal'; +import { + hideStatus, + revealStatus, + toggleStatusCollapse, + translateStatus, + undoStatusTranslation, +} from '../actions/statuses'; +import CompactedStatus from '../components/compacted_status'; +import { makeGetStatus, makeGetPictureInPicture } from '../selectors'; + +const makeMapStateToProps = () => { + const getStatus = makeGetStatus(); + const getPictureInPicture = makeGetPictureInPicture(); + + const mapStateToProps = (state, props) => ({ + status: getStatus(state, props), + nextInReplyToId: props.nextId ? state.getIn(['statuses', props.nextId, 'in_reply_to_id']) : null, + pictureInPicture: getPictureInPicture(state, props), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = (dispatch) => ({ + + onTranslate (status) { + if (status.get('translation')) { + dispatch(undoStatusTranslation(status.get('id'), status.get('poll'))); + } else { + dispatch(translateStatus(status.get('id'))); + } + }, + + onOpenMedia (statusId, media, index, lang) { + dispatch(openModal({ + modalType: 'MEDIA', + modalProps: { statusId, media, index, lang }, + })); + }, + + onOpenVideo (statusId, media, lang, options) { + dispatch(openModal({ + modalType: 'VIDEO', + modalProps: { statusId, media, lang, options }, + })); + }, + + onToggleHidden (status) { + if (status.get('hidden')) { + dispatch(revealStatus(status.get('id'))); + } else { + dispatch(hideStatus(status.get('id'))); + } + }, + + onToggleCollapsed (status, isCollapsed) { + dispatch(toggleStatusCollapse(status.get('id'), isCollapsed)); + }, + + onInteractionModal (type, status) { + dispatch(openModal({ + modalType: 'INTERACTION', + modalProps: { + type, + accountId: status.getIn(['account', 'id']), + url: status.get('uri'), + }, + })); + }, + +}); + +export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(CompactedStatus)); diff --git a/app/javascript/mastodon/containers/status_container.jsx b/app/javascript/mastodon/containers/status_container.jsx index da3058334b..4b79fc271c 100644 --- a/app/javascript/mastodon/containers/status_container.jsx +++ b/app/javascript/mastodon/containers/status_container.jsx @@ -80,6 +80,8 @@ const makeMapStateToProps = () => { const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ + contextType, + onReply (status, router) { dispatch((_, getState) => { let state = getState(); diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index 2e5df723de..3b258b60bb 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -236,6 +236,7 @@ class ActionBar extends PureComponent { const account = status.get('account'); const writtenByMe = status.getIn(['account', 'id']) === me; const isRemote = status.getIn(['account', 'username']) !== status.getIn(['account', 'acct']); + const allowQuote = status.getIn(['account', 'other_settings', 'allow_quote']); let menu = []; @@ -259,7 +260,10 @@ class ActionBar extends PureComponent { if (publicStatus) { menu.push({ text: intl.formatMessage(messages.reference), action: this.handleReference }); - menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote }); + + if (allowQuote) { + menu.push({ text: intl.formatMessage(messages.quote), action: this.handleQuote }); + } } menu.push({ text: intl.formatMessage(messages.bookmark_category), action: this.handleBookmarkCategoryAdderClick }); diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 9158271429..0948e5d255 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -64,6 +64,7 @@ * @property {boolean} enable_local_privacy * @property {boolean} enable_dtl_menu * @property {boolean=} expand_spoilers + * @property {boolean} hide_blocking_quote * @property {boolean} hide_recent_emojis * @property {boolean} limited_federation_mode * @property {string} locale @@ -78,6 +79,8 @@ * @property {boolean} search_enabled * @property {boolean} trends_enabled * @property {boolean} show_emoji_reaction_on_timeline + * @property {boolean} show_quote_in_home + * @property {boolean} show_quote_in_public * @property {string} simple_timeline_menu * @property {boolean} single_user_mode * @property {string} source_url @@ -136,6 +139,7 @@ export const enableLoginPrivacy = getMeta('enable_login_privacy'); export const enableDtlMenu = getMeta('enable_dtl_menu'); export const expandSpoilers = getMeta('expand_spoilers'); export const forceSingleColumn = !getMeta('advanced_layout'); +export const hideBlockingQuote = getMeta('hide_blocking_quote'); export const hideRecentEmojis = getMeta('hide_recent_emojis'); export const limitedFederationMode = getMeta('limited_federation_mode'); export const mascot = getMeta('mascot'); @@ -149,6 +153,8 @@ export const repository = getMeta('repository'); export const searchEnabled = getMeta('search_enabled'); export const trendsEnabled = getMeta('trends_enabled'); export const showEmojiReactionOnTimeline = getMeta('show_emoji_reaction_on_timeline'); +export const showQuoteInHome = getMeta('show_quote_in_home'); +export const showQuoteInPublic = getMeta('show_quote_in_public'); export const showTrends = getMeta('show_trends'); export const simpleTimelineMenu = getMeta('simple_timeline_menu'); export const singleUserMode = getMeta('single_user_mode'); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index e553549508..780a5df5c8 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -692,7 +692,7 @@ "status.open": "Expand this post", "status.pin": "Pin on profile", "status.pinned": "Pinned post", - "status.quote": "Ref (quote in other servers)", + "status.quote": "Quote", "status.read_more": "Read more", "status.reblog": "Boost", "status.reblog_private": "Boost with original visibility", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index efe5842199..65fad31e21 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -778,7 +778,7 @@ "status.open": "詳細を表示", "status.pin": "プロフィールに固定表示", "status.pinned": "固定された投稿", - "status.quote": "参照 (他サーバーで引用扱い)", + "status.quote": "引用", "status.read_more": "もっと見る", "status.reblog": "ブースト", "status.reblog_private": "ブースト", diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index f6398e9324..9446b77c7f 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -3,7 +3,7 @@ import { createSelector } from 'reselect'; import { toServerSideType } from 'mastodon/utils/filters'; -import { me } from '../initial_state'; +import { me, hideBlockingQuote } from '../initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null); @@ -53,7 +53,12 @@ export const makeGetStatus = () => { statusReblog = null; } + if (hideBlockingQuote && statusBase.getIn(['quote', 'quote_muted'])) { + return null; + } + let filtered = false; + let filterAction = 'warn'; if ((accountReblog || accountBase).get('id') !== me && filters) { let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList(); if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { @@ -62,6 +67,7 @@ export const makeGetStatus = () => { filterResults = filterResults.filter(result => filters.has(result.get('filter'))); if (!filterResults.isEmpty()) { filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); + filterAction = filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'warn') ? 'warn' : 'half_warn'; } } @@ -69,6 +75,7 @@ export const makeGetStatus = () => { map.set('reblog', statusReblog); map.set('account', accountBase); map.set('matched_filters', filtered); + map.set('filter_action', filterAction); }); }, ); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 237387c50a..95def26299 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1733,6 +1733,11 @@ a.account__display-name { .status__avatar { width: 46px; height: 46px; + + &.status__avatar__compact { + width: 24px; + height: 24px; + } } .muted { @@ -6519,7 +6524,7 @@ a.status-card { position: relative; width: 100%; min-height: 64px; - max-height: 70vh; + max-height: 60vh; display: grid; grid-template-columns: 50% 50%; grid-template-rows: 50% 50%; @@ -6540,6 +6545,10 @@ a.status-card { &--column4 { grid-template-columns: 25% 25% 25% 25%; } + + &__compact { + max-height: 24vh; + } } .media-gallery__item { @@ -8479,6 +8488,13 @@ noscript { .status__wrapper { position: relative; + &.status__wrapper__compact { + border-radius: 4px; + border: 1px solid $ui-primary-color; + margin-block-start: 16px; + cursor: pointer; + } + &.unread { &::before { content: ''; diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 1f81fcda6c..6208130dad 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -444,7 +444,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def related_to_local_activity? fetch? || followed_by_local_accounts? || requested_through_relay? || - responds_to_followed_account? || addresses_local_accounts? + responds_to_followed_account? || addresses_local_accounts? || quote_local? end def responds_to_followed_account? @@ -485,10 +485,22 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def process_references! references = @object['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @object['references']) - quote = @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote'] - references << quote if quote - ProcessReferencesService.perform_worker_async(@status, [], references) + ProcessReferencesService.perform_worker_async(@status, [], references, [quote].compact) + end + + def quote_local? + url = quote + + if url.present? + ResolveURLService.new.call(url, on_behalf_of: @account, local_only: true).present? + else + false + end + end + + def quote + @quote ||= @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote'] end def join_group! diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 93f52bc7ec..6ce0143953 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -54,6 +54,7 @@ class StatusReachFinder reblogs_account_ids, favourites_account_ids, replies_account_ids, + quoted_account_id, ].tap do |arr| arr.flatten! arr.compact! @@ -88,6 +89,10 @@ class StatusReachFinder @status.replies.pluck(:account_id) if distributable? || unsafe? end + def quoted_account_id + @status.quote.account_id if @status.quote? + end + def followers_inboxes if @status.in_reply_to_local_account? && distributable? @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where.not(domain: banned_domains).inboxes diff --git a/app/models/account.rb b/app/models/account.rb index 82532521a8..7cf33926e7 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -330,6 +330,13 @@ class Account < ApplicationRecord true end + def allow_quote? + return user.setting_allow_quote if local? && user.present? + return settings['allow_quote'] if settings.present? && settings.key?('allow_quote') + + true + end + def public_statuses_count hide_statuses_count? ? 0 : statuses_count end @@ -407,6 +414,7 @@ class Account < ApplicationRecord 'hide_followers_count' => hide_followers_count?, 'translatable_private' => translatable_private?, 'link_preview' => link_preview?, + 'allow_quote' => allow_quote?, } if Setting.enable_emoji_reaction config = config.merge({ diff --git a/app/models/concerns/has_user_settings.rb b/app/models/concerns/has_user_settings.rb index 780c6345bb..ed5a5f429f 100644 --- a/app/models/concerns/has_user_settings.rb +++ b/app/models/concerns/has_user_settings.rb @@ -111,6 +111,22 @@ module HasUserSettings settings['web.use_system_font'] end + def setting_show_quote_in_home + settings['web.show_quote_in_home'] + end + + def setting_show_quote_in_public + settings['web.show_quote_in_public'] + end + + def setting_hide_blocking_quote + settings['web.hide_blocking_quote'] + end + + def setting_allow_quote + settings['allow_quote'] + end + def setting_noindex settings['noindex'] end @@ -127,10 +143,6 @@ module HasUserSettings settings['link_preview'] end - def setting_single_ref_to_quote - settings['single_ref_to_quote'] - end - def setting_dtl_force_with_tag settings['dtl_force_with_tag']&.to_sym || :none end diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index f443d08ca6..d63a7e6f9f 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -14,6 +14,7 @@ # action :integer default("warn"), not null # exclude_follows :boolean default(FALSE), not null # exclude_localusers :boolean default(FALSE), not null +# with_quote :boolean default(TRUE), not null # class CustomFilter < ApplicationRecord @@ -33,7 +34,7 @@ class CustomFilter < ApplicationRecord include Expireable include Redisable - enum action: { warn: 0, hide: 1 }, _suffix: :action + enum action: { warn: 0, hide: 1, half_warn: 2 }, _suffix: :action belongs_to :account has_many :keywords, class_name: 'CustomFilterKeyword', inverse_of: :custom_filter, dependent: :destroy @@ -103,11 +104,15 @@ class CustomFilter < ApplicationRecord if rules[:keywords].present? match = rules[:keywords].match(status.proper.searchable_text) - match = rules[:keywords].match(status.proper.references.pluck(:text).join("\n\n")) if match.nil? && status.proper.references.exists? + if match.nil? && filter.with_quote && status.proper.references.exists? + match = rules[:keywords].match(status.proper.references.pluck(:text).join("\n\n")) + match = rules[:keywords].match(status.proper.references.pluck(:spoiler_text).join("\n\n")) if match.nil? + end end keyword_matches = [match.to_s] unless match.nil? - status_matches = [status.id, status.reblog_of_id].compact & rules[:status_ids] if rules[:status_ids].present? + reference_ids = filter.with_quote ? status.proper.references.pluck(:id) : [] + status_matches = ([status.id, status.reblog_of_id] + reference_ids).compact & rules[:status_ids] if rules[:status_ids].present? next if keyword_matches.blank? && status_matches.blank? diff --git a/app/models/status.rb b/app/models/status.rb index c16c1a7c4f..4c076ca5d7 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -30,6 +30,7 @@ # searchability :integer # markdown :boolean default(FALSE) # limited_scope :integer +# quote_of_id :bigint(8) # require 'ostruct' @@ -69,12 +70,14 @@ class Status < ApplicationRecord belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true + belongs_to :quote, foreign_key: 'quote_of_id', class_name: 'Status', inverse_of: :quotes, optional: true has_many :favourites, inverse_of: :status, dependent: :destroy has_many :emoji_reactions, inverse_of: :status, dependent: :destroy has_many :bookmarks, inverse_of: :status, dependent: :destroy has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy has_many :reblogged_by_accounts, through: :reblogs, class_name: 'Account', source: :account + has_many :quotes, foreign_key: 'quote_of_id', class_name: 'Status', inverse_of: :quote has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread has_many :mentions, dependent: :destroy, inverse_of: :status has_many :mentioned_accounts, through: :mentions, source: :account, class_name: 'Account' @@ -193,6 +196,19 @@ class Status < ApplicationRecord account: [:account_stat, user: :role], active_mentions: { account: :account_stat }, ], + quote: [ + :application, + :tags, + :preview_cards, + :media_attachments, + :conversation, + :status_stat, + :preloadable_poll, + :reference_objects, + :scheduled_expiration_status, + account: [:account_stat, user: :role], + active_mentions: { account: :account_stat }, + ], thread: { account: :account_stat } delegate :domain, to: :account, prefix: true @@ -227,8 +243,8 @@ class Status < ApplicationRecord !reblog_of_id.nil? end - def quote - reference_objects.where(attribute_type: 'QT').first&.target_status + def quote? + !quote_of_id.nil? end def within_realtime_window? @@ -480,12 +496,16 @@ class Status < ApplicationRecord ConversationMute.select('conversation_id').where(conversation_id: conversation_ids).where(account_id: account_id).each_with_object({}) { |m, h| h[m.conversation_id] = true } end - def pins_map(status_ids, account_id) - StatusPin.select('status_id').where(status_id: status_ids).where(account_id: account_id).each_with_object({}) { |p, h| h[p.status_id] = true } + def blocks_map(account_ids, account_id) + Block.where(account_id: account_id, target_account_id: account_ids).each_with_object({}) { |b, h| h[b.target_account_id] = true } end - def emoji_reactions_map(status_ids, account_id) - EmojiReaction.select('status_id').where(status_id: status_ids).where(account_id: account_id).each_with_object({}) { |e, h| h[e.status_id] = true } + def domain_blocks_map(domains, account_id) + AccountDomainBlock.where(account_id: account_id, domain: domains).each_with_object({}) { |d, h| h[d.domain] = true } + end + + def pins_map(status_ids, account_id) + StatusPin.select('status_id').where(status_id: status_ids).where(account_id: account_id).each_with_object({}) { |p, h| h[p.status_id] = true } end def emoji_reaction_allows_map(status_ids, account_id) diff --git a/app/models/status_reference.rb b/app/models/status_reference.rb index 8d5d6eba8b..7bbd7b3232 100644 --- a/app/models/status_reference.rb +++ b/app/models/status_reference.rb @@ -10,6 +10,7 @@ # created_at :datetime not null # updated_at :datetime not null # attribute_type :string +# quote :boolean default(FALSE), not null # class StatusReference < ApplicationRecord @@ -19,6 +20,8 @@ class StatusReference < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy after_commit :reset_parent_cache + after_create_commit :set_quote + after_destroy_commit :remove_quote private @@ -26,4 +29,18 @@ class StatusReference < ApplicationRecord Rails.cache.delete("statuses/#{status_id}") Rails.cache.delete("statuses/#{target_status_id}") end + + def set_quote + return unless quote + return if status.quote_of_id.present? + + status.quote_of_id = target_status_id + end + + def remove_quote + return unless quote + return unless status.quote_of_id == target_status_id + + status.quote_of_id = nil + end end diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 93f7f4a64f..8518e2abf2 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -41,7 +41,7 @@ class UserSettings setting :dtl_force_with_tag, default: :none, in: %w(full searchability none) setting :dtl_force_subscribable, default: false setting :lock_follow_from_bot, default: false - setting :single_ref_to_quote, default: false + setting :allow_quote, default: true setting_inverse_alias :indexable, :noindex @@ -67,6 +67,9 @@ class UserSettings setting :display_media_expand, default: true setting :auto_play, default: true setting :simple_timeline_menu, default: false + setting :show_quote_in_home, default: true + setting :show_quote_in_public, default: false + setting :hide_blocking_quote, default: true end namespace :notification_emails do diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index 301ec4fdc4..b30d48e374 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -40,6 +40,10 @@ class StatusPolicy < ApplicationPolicy show? && !blocking_author? end + def quote? + %i(public public_unlisted unlisted).include?(record.visibility.to_sym) && show? && !blocking_author? + end + def destroy? owned? end diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb index 9e55742403..35c9e3e3f3 100644 --- a/app/presenters/status_relationships_presenter.rb +++ b/app/presenters/status_relationships_presenter.rb @@ -3,8 +3,8 @@ class StatusRelationshipsPresenter PINNABLE_VISIBILITIES = %w(public public_unlisted unlisted login private).freeze - attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, - :bookmarks_map, :filters_map, :emoji_reactions_map, :attributes_map, :emoji_reaction_allows_map + attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, :blocks_map, :domain_blocks_map, + :bookmarks_map, :filters_map, :attributes_map, :emoji_reaction_allows_map def initialize(statuses, current_account_id = nil, **options) @current_account_id = current_account_id @@ -14,25 +14,28 @@ class StatusRelationshipsPresenter @favourites_map = {} @bookmarks_map = {} @mutes_map = {} + @blocks_map = {} + @domain_blocks_map = {} @pins_map = {} @filters_map = {} - @emoji_reactions_map = {} @emoji_reaction_allows_map = nil else - statuses = statuses.compact + statuses = statuses.compact + statuses += statuses.filter_map(&:quote) status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id] }.uniq.compact conversation_ids = statuses.filter_map(&:conversation_id).uniq pinnable_status_ids = statuses.map(&:proper).filter_map { |s| s.id if s.account_id == current_account_id && PINNABLE_VISIBILITIES.include?(s.visibility) } - @filters_map = build_filters_map(statuses, current_account_id).merge(options[:filters_map] || {}) - @reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {}) - @favourites_map = Status.favourites_map(status_ids, current_account_id).merge(options[:favourites_map] || {}) - @bookmarks_map = Status.bookmarks_map(status_ids, current_account_id).merge(options[:bookmarks_map] || {}) - @mutes_map = Status.mutes_map(conversation_ids, current_account_id).merge(options[:mutes_map] || {}) - @pins_map = Status.pins_map(pinnable_status_ids, current_account_id).merge(options[:pins_map] || {}) - @emoji_reactions_map = Status.emoji_reactions_map(status_ids, current_account_id).merge(options[:emoji_reactions_map] || {}) + @filters_map = build_filters_map(statuses, current_account_id).merge(options[:filters_map] || {}) + @reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {}) + @favourites_map = Status.favourites_map(status_ids, current_account_id).merge(options[:favourites_map] || {}) + @bookmarks_map = Status.bookmarks_map(status_ids, current_account_id).merge(options[:bookmarks_map] || {}) + @mutes_map = Status.mutes_map(conversation_ids, current_account_id).merge(options[:mutes_map] || {}) + @blocks_map = Status.blocks_map(statuses.map(&:account_id), current_account_id).merge(options[:blocks_map] || {}) + @domain_blocks_map = Status.domain_blocks_map(statuses.filter_map { |status| status.account.domain }.uniq, current_account_id).merge(options[:domain_blocks_map] || {}) + @pins_map = Status.pins_map(pinnable_status_ids, current_account_id).merge(options[:pins_map] || {}) @emoji_reaction_allows_map = Status.emoji_reaction_allows_map(status_ids, current_account_id).merge(options[:emoji_reaction_allows_map] || {}) - @attributes_map = options[:attributes_map] || {} + @attributes_map = options[:attributes_map] || {} end end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index d8f7a328ed..3c89c7b632 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -170,12 +170,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer object.account.local? end - def quote? - @quote ||= (object.reference_objects.count == 1 && object.account.user&.settings&.[]('single_ref_to_quote')) || object.reference_objects.where(attribute_type: 'QT').count == 1 - end + delegate :quote?, to: :object def quote_post - @quote_post ||= object.quote || object.references.first + @quote_post ||= object.quote end def quote_uri diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index c4e9927c74..eb2990703a 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -62,6 +62,9 @@ class InitialStateSerializer < ActiveModel::Serializer store[:show_trends] = Setting.trends && object.current_account.user.setting_trends store[:bookmark_category_needed] = object.current_account.user.setting_bookmark_category_needed store[:simple_timeline_menu] = object.current_account.user.setting_simple_timeline_menu + store[:show_quote_in_home] = object.current_account.user.setting_show_quote_in_home + store[:show_quote_in_public] = object.current_account.user.setting_show_quote_in_public + store[:hide_blocking_quote] = object.current_account.user.setting_hide_blocking_quote else store[:auto_play_gif] = Setting.auto_play_gif store[:display_media] = Setting.display_media @@ -69,6 +72,8 @@ class InitialStateSerializer < ActiveModel::Serializer store[:use_blurhash] = Setting.use_blurhash store[:enable_emoji_reaction] = Setting.enable_emoji_reaction store[:show_emoji_reaction_on_timeline] = Setting.enable_emoji_reaction + store[:show_quote_in_home] = true + store[:show_quote_in_public] = true end store[:disabled_account_id] = object.disabled_account.id.to_s if object.disabled_account diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index 3603026f39..e9ac924f7e 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -16,6 +16,7 @@ class REST::StatusSerializer < ActiveModel::Serializer attribute :pinned, if: :pinnable? attribute :reactions, if: :reactions? attribute :expires_at, if: :will_expire? + attribute :quote_id, if: :quote? has_many :filtered, serializer: REST::FilterResultSerializer, if: :current_user? attribute :content, unless: :source_requested? @@ -33,6 +34,23 @@ class REST::StatusSerializer < ActiveModel::Serializer has_one :preview_card, key: :card, serializer: REST::PreviewCardSerializer has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer + class QuotedStatusSerializer < REST::StatusSerializer + attribute :quote_muted, if: :current_user? + + def quote + nil + end + + def quote_muted + if relationships + muted || relationships.blocks_map[object.account_id] || relationships.domain_blocks_map[object.account.domain] || false + else + muted || current_user.account.blocking?(object.account_id) || current_user.account.domain_blocking?(object.account.domain) + end + end + end + belongs_to :quote, if: :quote?, serializer: QuotedStatusSerializer, relationships: -> { relationships } + def id object.id.to_s end @@ -159,6 +177,12 @@ class REST::StatusSerializer < ActiveModel::Serializer end end + def quote_id + object.quote_of_id.to_s + end + + delegate :quote?, to: :object + def reblogged if relationships relationships.reblogs_map[object.id] || false diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index da82af8dff..2ae2824a1e 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -254,9 +254,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService def update_references! references = @json['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @json['references']) quote = @json['quote'] || @json['quoteUrl'] || @json['quoteURL'] || @json['_misskey_quote'] - references << quote if quote - ProcessReferencesService.perform_worker_async(@status, [], references) + ProcessReferencesService.perform_worker_async(@status, [], references, [quote].compact) end def expected_type? diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index faf5965a7a..6d61c7decd 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -10,14 +10,17 @@ class ProcessReferencesService < BaseService REFURL_EXP = /(RT|QT|BT|RN|RE)((:|;)?\s+|:|;)(#{URI::DEFAULT_PARSER.make_regexp(%w(http https))})/ MAX_REFERENCES = 5 - def call(status, reference_parameters, urls: nil, fetch_remote: true, no_fetch_urls: nil) + def call(status, reference_parameters, urls: nil, fetch_remote: true, no_fetch_urls: nil, quote_urls: nil) @status = status @reference_parameters = reference_parameters || [] - @urls = urls || [] + @quote_urls = quote_urls || [] + @urls = (urls - @quote_urls) || [] @no_fetch_urls = no_fetch_urls || [] @fetch_remote = fetch_remote @again = false + @attributes = {} + with_redis_lock("process_status_refs:#{@status.id}") do @references_count = old_references.size @@ -38,27 +41,27 @@ class ProcessReferencesService < BaseService launch_worker if @again end - def self.need_process?(status, reference_parameters, urls) - reference_parameters.any? || (urls || []).any? || FormattingHelper.extract_status_plain_text(status).scan(REFURL_EXP).pluck(3).uniq.any? + def self.need_process?(status, reference_parameters, urls, quote_urls) + reference_parameters.any? || (urls || []).any? || (quote_urls || []).any? || FormattingHelper.extract_status_plain_text(status).scan(REFURL_EXP).pluck(3).uniq.any? end - def self.perform_worker_async(status, reference_parameters, urls) - return unless need_process?(status, reference_parameters, urls) + def self.perform_worker_async(status, reference_parameters, urls, quote_urls) + return unless need_process?(status, reference_parameters, urls, quote_urls) Rails.cache.write("status_reference:#{status.id}", true, expires_in: 10.minutes) - ProcessReferencesWorker.perform_async(status.id, reference_parameters, urls, []) + ProcessReferencesWorker.perform_async(status.id, reference_parameters, urls, [], quote_urls || []) end - def self.call_service(status, reference_parameters, urls) - return unless need_process?(status, reference_parameters, urls) + def self.call_service(status, reference_parameters, urls, quote_urls = []) + return unless need_process?(status, reference_parameters, urls, quote_urls) - ProcessReferencesService.new.call(status, reference_parameters || [], urls: urls || [], fetch_remote: false) + ProcessReferencesService.new.call(status, reference_parameters || [], urls: urls || [], fetch_remote: false, quote_urls: quote_urls) end private def references - @references ||= @reference_parameters + scan_text! + @references ||= @reference_parameters + scan_text! + quote_status_ids end def old_references @@ -88,12 +91,24 @@ class ProcessReferencesService < BaseService target_urls = urls + @urls target_urls.map do |url| - status = ResolveURLService.new.call(url, on_behalf_of: @status.account, fetch_remote: @fetch_remote && @no_fetch_urls.exclude?(url)) - @no_fetch_urls << url if !@fetch_remote && status.present? && status.local? + status = url_to_status(url) + @no_fetch_urls << url if !@fetch_remote && status.present? status end end + def url_to_status(url) + ResolveURLService.new.call(url, on_behalf_of: @status.account, fetch_remote: @fetch_remote && @no_fetch_urls.exclude?(url)) + end + + def quote_status_ids + @quote_status_ids ||= @quote_urls.filter_map { |url| url_to_status(url) }.map(&:id) + end + + def quotable?(target_status) + @status.account.allow_quote? && StatusPolicy.new(@status.account, target_status).quote? + end + def add_references return if added_references.empty? @@ -101,7 +116,12 @@ class ProcessReferencesService < BaseService statuses = Status.where(id: added_references) statuses.each do |status| - @added_objects << @status.reference_objects.new(target_status: status, attribute_type: @attributes[status.id]) + attribute_type = quote_status_ids.include?(status.id) ? 'QT' : @attributes[status.id] + attribute_type = 'BT' unless quotable?(status) + quote_type = attribute_type.present? ? attribute_type.casecmp('QT').zero? : false + @status.quote_of_id = status.id if quote_type && (@status.quote_of_id.nil? || references.exclude?(@status.quote_of_id)) + @added_objects << @status.reference_objects.new(target_status: status, attribute_type: attribute_type, quote: quote_type) + status.increment_count!(:status_referred_by_count) @references_count += 1 @@ -133,6 +153,6 @@ class ProcessReferencesService < BaseService end def launch_worker - ProcessReferencesWorker.perform_async(@status.id, @reference_parameters, @urls, @no_fetch_urls) + ProcessReferencesWorker.perform_async(@status.id, @reference_parameters, @urls, @no_fetch_urls, @quote_urls) end end diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb index 2f28907cb6..1194afc368 100644 --- a/app/services/resolve_url_service.rb +++ b/app/services/resolve_url_service.rb @@ -6,16 +6,16 @@ class ResolveURLService < BaseService USERNAME_STATUS_RE = %r{/@(?#{Account::USERNAME_RE})/(?[0-9]+)\Z} - def call(url, on_behalf_of: nil, fetch_remote: true) + def call(url, on_behalf_of: nil, fetch_remote: true, local_only: false) @url = url @on_behalf_of = on_behalf_of @fetch_remote = fetch_remote if local_url? process_local_url - elsif fetch_remote && !fetched_resource.nil? + elsif !local_only && fetch_remote && !fetched_resource.nil? process_url - else + elsif !local_only process_url_from_db end end diff --git a/app/views/filters/_filter_fields.html.haml b/app/views/filters/_filter_fields.html.haml index ac97ccb87c..74f969cf34 100644 --- a/app/views/filters/_filter_fields.html.haml +++ b/app/views/filters/_filter_fields.html.haml @@ -10,12 +10,15 @@ %hr.spacer/ .fields-group - = f.input :filter_action, as: :radio_buttons, collection: %i(warn hide), include_blank: false, wrapper: :with_block_label, label_method: ->(action) { safe_join([t("simple_form.labels.filters.actions.#{action}"), content_tag(:span, t("simple_form.hints.filters.actions.#{action}"), class: 'hint')]) }, hint: t('simple_form.hints.filters.action'), required: true + = f.input :filter_action, as: :radio_buttons, collection: %i(half_warn warn hide), include_blank: false, wrapper: :with_block_label, label_method: ->(action) { safe_join([t("simple_form.labels.filters.actions.#{action}"), content_tag(:span, t("simple_form.hints.filters.actions.#{action}"), class: 'hint')]) }, hint: t('simple_form.hints.filters.action'), required: true .fields-group = f.input :exclude_follows, wrapper: :with_label, kmyblue: true, label: t('simple_form.labels.filters.options.exclude_follows') = f.input :exclude_localusers, wrapper: :with_label, kmyblue: true, label: t('simple_form.labels.filters.options.exclude_localusers') +.fields-group + = f.input :with_quote, wrapper: :with_label, kmyblue: true, label: t('simple_form.labels.filters.options.with_quote') + %hr.spacer/ - unless f.object.statuses.empty? diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index fd41160c13..c8d82433f4 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -46,6 +46,11 @@ .fields-group = ff.input :'web.bookmark_category_needed', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_bookmark_category_needed'), hint: I18n.t('simple_form.hints.defaults.setting_bookmark_category_needed') + .fields-group + = ff.input :'web.show_quote_in_home', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_show_quote_in_home'), hint: false + = ff.input :'web.show_quote_in_public', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_show_quote_in_public'), hint: false + = ff.input :'web.hide_blocking_quote', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_hide_blocking_quote'), hint: false + .fields-group = ff.input :'web.simple_timeline_menu', wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_simple_timeline_menu') diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index c596013ef6..353715df01 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -14,9 +14,6 @@ .fields-group = ff.input :lock_follow_from_bot, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_lock_follow_from_bot') - .fields-group - = ff.input :single_ref_to_quote, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_single_ref_to_quote'), hint: I18n.t('simple_form.hints.defaults.setting_single_ref_to_quote') - %h4= t 'preferences.posting_defaults' .fields-row diff --git a/app/views/settings/privacy_extra/show.html.haml b/app/views/settings/privacy_extra/show.html.haml index 350841b7d5..c688ad6373 100644 --- a/app/views/settings/privacy_extra/show.html.haml +++ b/app/views/settings/privacy_extra/show.html.haml @@ -21,6 +21,9 @@ .fields-group = ff.input :link_preview, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_link_preview'), hint: I18n.t('simple_form.hints.defaults.setting_link_preview') + .fields-group + = ff.input :allow_quote, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_allow_quote'), hint: false + %h4= t 'privacy_extra.stop_deliver' %p.lead= t('privacy_extra.stop_deliver_hint_html') diff --git a/app/workers/process_references_worker.rb b/app/workers/process_references_worker.rb index f082744857..26dfbae465 100644 --- a/app/workers/process_references_worker.rb +++ b/app/workers/process_references_worker.rb @@ -5,8 +5,8 @@ class ProcessReferencesWorker sidekiq_options queue: 'pull', retry: 3 - def perform(status_id, ids, urls, no_fetch_urls = nil) - ProcessReferencesService.new.call(Status.find(status_id), ids || [], urls: urls || [], no_fetch_urls: no_fetch_urls) + def perform(status_id, ids, urls, no_fetch_urls = nil, quote_urls = nil) + ProcessReferencesService.new.call(Status.find(status_id), ids || [], urls: urls || [], no_fetch_urls: no_fetch_urls, quote_urls: quote_urls || []) rescue ActiveRecord::RecordNotFound true end diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 2012e1a7f7..c37a6de56a 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -87,6 +87,7 @@ en: filters: action: Chose which action to perform when a post matches the filter actions: + half_warn: Hide the filtered content (exclude account info) behind a warning mentioning the filter's title hide: Completely hide the filtered content, behaving as if it did not exist warn: Hide the filtered content behind a warning mentioning the filter's title form_admin_settings: @@ -226,6 +227,7 @@ en: phrase: Keyword or phrase setting_advanced_layout: Enable advanced web interface setting_aggregate_reblogs: Group boosts in timelines + setting_allow_quote: Allow quote your posts setting_always_send_emails: Always send e-mail notifications setting_auto_play_gif: Auto-play animated GIFs setting_bio_markdown: Enable profile markdown @@ -259,6 +261,7 @@ en: mutuals_only: Mutuals only outside_only: Followings or followers only setting_expand_spoilers: Always expand posts marked with content warnings + setting_hide_blocking_quote: Hide posts which have a quote written by the user you are blocking setting_hide_followers_count: Hide followers count setting_hide_following_count: Hide following count setting_hide_network: Hide your social graph @@ -274,6 +277,8 @@ en: setting_send_without_domain_blocks: Send your post to all server with administrator set as rejecting-post-server for protect you [DEPRECATED] setting_show_application: Disclose application used to send posts setting_show_emoji_reaction_on_timeline: Show all stamps on timeline + setting_show_quote_in_home: Show quotes in home, list or antenna timelines + setting_show_quote_in_public: Show quotes in public timelines setting_simple_timeline_menu: Reduce post menu on timeline setting_single_ref_to_quote: Deliver single reference to other server as quote setting_stay_privacy: Not change privacy after post @@ -308,11 +313,13 @@ en: name: Hashtag filters: actions: + half_warn: Half hide with a warning hide: Hide completely warn: Hide with a warning options: exclude_follows: Exclude following users exclude_localusers: Exclude local users + with_quote: Also check quote or references form_admin_settings: activity_api_enabled: Publish aggregate statistics about user activity in the API backups_retention_period: User archive retention period diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 2a03f00fdb..3904f75751 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -100,6 +100,7 @@ ja: filters: action: 投稿がフィルタに一致したときに実行するアクションを選択 actions: + half_warn: フィルターに一致した投稿の本文のみを非表示にし、フィルターのタイトルを含む警告を表示します hide: フィルタに一致した投稿を完全に非表示にします warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します form_admin_settings: @@ -239,6 +240,7 @@ ja: phrase: キーワードまたはフレーズ setting_advanced_layout: 上級者向けUIを有効にする setting_aggregate_reblogs: ブーストをまとめる + setting_allow_quote: 引用を許可する setting_always_send_emails: 常にメール通知を送信する setting_auto_play_gif: アニメーションGIFを自動再生する setting_bio_markdown: プロフィールのMarkdownを有効にする @@ -273,6 +275,7 @@ ja: setting_emoji_reaction_streaming_notify_impl2: Nyastodon, Catstodon, glitch-soc互換のスタンプ機能を有効にする setting_enable_emoji_reaction: スタンプ機能を使用する setting_expand_spoilers: 閲覧注意としてマークされた投稿を常に展開する + setting_hide_blocking_quote: ブロックしたユーザーの投稿を引用した投稿を隠す setting_hide_followers_count: フォロワー数を隠す setting_hide_following_count: フォロー数を隠す setting_hide_network: 繋がりを隠す @@ -280,6 +283,8 @@ ja: setting_hide_statuses_count: 投稿数を隠す setting_link_preview: リンクのプレビューを生成する setting_lock_follow_from_bot: botからのフォローを承認制にする + setting_show_quote_in_home: ホーム・リスト・アンテナなどで引用を表示する + setting_show_quote_in_public: 公開タイムライン(ローカル・連合)で引用を表示する setting_stay_privacy: 投稿時に公開範囲を保存する setting_noai: 自分のコンテンツのAI学習利用に対して不快感を表明する setting_public_post_to_unlisted: サードパーティから公開範囲「公開」で投稿した場合、「ローカル公開」に変更する @@ -323,11 +328,13 @@ ja: name: ハッシュタグ filters: actions: + half_warn: アカウント名だけを出し、本文は警告で隠す hide: 完全に隠す warn: 警告付きで隠す options: exclude_follows: フォロー中のユーザーをフィルターの対象にしない exclude_localusers: ローカルユーザーをフィルターの対象にしない + with_quote: 引用・参照の内容をフィルターの対象に含める form_admin_settings: activity_api_enabled: APIでユーザーアクティビティに関する集計統計を公開する backups_retention_period: ユーザーアーカイブの保持期間 diff --git a/db/migrate/20230930233930_add_quote_to_status_references.rb b/db/migrate/20230930233930_add_quote_to_status_references.rb new file mode 100644 index 0000000000..f2bd6cd48d --- /dev/null +++ b/db/migrate/20230930233930_add_quote_to_status_references.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddQuoteToStatusReferences < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + class StatusReference < ApplicationRecord; end + + def up + safety_assured do + add_column_with_default :status_references, :quote, :boolean, default: false, allow_null: false + StatusReference.where(attribute_type: 'QT').update_all(quote: true) # rubocop:disable Rails/SkipsModelValidations + end + end + + def down + safety_assured do + remove_column :status_references, :quote + end + end +end diff --git a/db/migrate/20231001031337_add_quote_to_statuses.rb b/db/migrate/20231001031337_add_quote_to_statuses.rb new file mode 100644 index 0000000000..c60ec58ecf --- /dev/null +++ b/db/migrate/20231001031337_add_quote_to_statuses.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddQuoteToStatuses < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + class StatusReference < ApplicationRecord + belongs_to :status + belongs_to :target_status, class_name: 'Status' + end + + def up + safety_assured do + add_column_with_default :statuses, :quote_of_id, :bigint, default: nil, allow_null: true + + StatusReference.transaction do + StatusReference.where(quote: true).includes(:status).each do |ref| + ref.status.update(quote_of_id: ref.target_status_id) + end + end + end + end + + def down + safety_assured do + remove_column :statuses, :quote_of_id + end + end +end diff --git a/db/migrate/20231001050733_add_with_quote_to_custom_filters.rb b/db/migrate/20231001050733_add_with_quote_to_custom_filters.rb new file mode 100644 index 0000000000..074f552482 --- /dev/null +++ b/db/migrate/20231001050733_add_with_quote_to_custom_filters.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddWithQuoteToCustomFilters < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + add_column_with_default :custom_filters, :with_quote, :boolean, default: true, allow_null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e17320cdaa..8ee0450744 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_09_23_103430) do +ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -536,6 +536,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_23_103430) do t.integer "action", default: 0, null: false t.boolean "exclude_follows", default: false, null: false t.boolean "exclude_localusers", default: false, null: false + t.boolean "with_quote", default: true, null: false t.index ["account_id"], name: "index_custom_filters_on_account_id" end @@ -1143,6 +1144,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_23_103430) do t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.string "attribute_type" + t.boolean "quote", default: false, null: false t.index ["status_id"], name: "index_status_references_on_status_id" t.index ["target_status_id"], name: "index_status_references_on_target_status_id" end @@ -1199,6 +1201,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_23_103430) do t.integer "searchability" t.boolean "markdown", default: false t.integer "limited_scope" + t.bigint "quote_of_id" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)" diff --git a/spec/fabricators/status_reference_fabricator.rb b/spec/fabricators/status_reference_fabricator.rb new file mode 100644 index 0000000000..0eff89c14b --- /dev/null +++ b/spec/fabricators/status_reference_fabricator.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +Fabricator(:status_reference) do + status { Fabricate.build(:status) } + target_status { Fabricate.build(:status) } + attribute_type 'BT' + quote false +end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index c199fcd038..24a404d726 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -1089,6 +1089,97 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'with references' do + let(:recipient) { Fabricate(:account) } + let!(:target_status) { Fabricate(:status, account: Fabricate(:account, domain: nil)) } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + references: { + id: 'target_status', + type: 'Collection', + first: { + type: 'CollectionPage', + next: nil, + partOf: 'target_status', + items: [ + ActivityPub::TagManager.instance.uri_for(target_status), + ], + }, + }, + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.quote).to be_nil + expect(status.references.pluck(:id)).to eq [target_status.id] + end + end + + context 'with quote' do + let(:recipient) { Fabricate(:account) } + let!(:target_status) { Fabricate(:status, account: Fabricate(:account, domain: nil)) } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + quote: ActivityPub::TagManager.instance.uri_for(target_status), + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.references.pluck(:id)).to eq [target_status.id] + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + end + end + + context 'with references and quote' do + let(:recipient) { Fabricate(:account) } + let!(:target_status) { Fabricate(:status, account: Fabricate(:account, domain: nil)) } + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + quote: ActivityPub::TagManager.instance.uri_for(target_status), + references: { + id: 'target_status', + type: 'Collection', + first: { + type: 'CollectionPage', + next: nil, + partOf: 'target_status', + items: [ + ActivityPub::TagManager.instance.uri_for(target_status), + ], + }, + }, + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.references.pluck(:id)).to eq [target_status.id] + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + end + end + context 'with language' do let(:to) { 'https://www.w3.org/ns/activitystreams#Public' } let(:object_json) do @@ -1274,6 +1365,53 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'when sender quotes to local status' do + subject { described_class.new(json, sender, delivery: true) } + + let!(:local_status) { Fabricate(:status) } + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + quote: ActivityPub::TagManager.instance.uri_for(local_status), + } + end + + before do + subject.perform + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.text).to eq 'Lorem ipsum' + end + end + + context 'when sender quotes to non-local status' do + subject { described_class.new(json, sender, delivery: true) } + + let!(:remote_status) { Fabricate(:status, uri: 'https://foo.bar/among', account: Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/account')) } + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + quote: ActivityPub::TagManager.instance.uri_for(remote_status), + } + end + + before do + subject.perform + end + + it 'creates status' do + expect(sender.statuses.count).to eq 0 + end + end + context 'when sender targets a local user' do subject { described_class.new(json, sender, delivery: true) } diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index 4292f12bc6..ba319b5423 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -8,10 +8,11 @@ describe StatusReachFinder do subject { described_class.new(status) } let(:parent_status) { nil } + let(:quoted_status) { nil } let(:visibility) { :public } let(:searchability) { :public } let(:alice) { Fabricate(:account, username: 'alice') } - let(:status) { Fabricate(:status, account: alice, thread: parent_status, visibility: visibility, searchability: searchability) } + let(:status) { Fabricate(:status, account: alice, thread: parent_status, quote_of_id: quoted_status&.id, visibility: visibility, searchability: searchability) } context 'with a simple case' do let(:bob) { Fabricate(:account, username: 'bob', domain: 'foo.bar', protocol: :activitypub, inbox_url: 'https://foo.bar/inbox') } @@ -165,6 +166,15 @@ describe StatusReachFinder do end end end + + context 'when it is a quote to a remote account' do + let(:bob) { Fabricate(:account, username: 'bob', domain: 'foo.bar', protocol: :activitypub, inbox_url: 'https://foo.bar/inbox') } + let(:quoted_status) { Fabricate(:status, account: bob) } + + it 'includes the inbox of the quoted-to account' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + end + end end context 'with extended domain block' do diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 6462307594..36f4fddec9 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -217,6 +217,39 @@ RSpec.describe Status do end end + describe '#quote' do + let(:target_status) { Fabricate(:status) } + let(:quote) { true } + + before do + Fabricate(:status_reference, status: subject, target_status: target_status, quote: quote) + end + + context 'when quoting single' do + it 'get quote' do + expect(subject.quote).to_not be_nil + expect(subject.quote.id).to eq target_status.id + end + end + + context 'when multiple quotes' do + it 'get quote' do + target2 = Fabricate(:status) + Fabricate(:status_reference, status: subject, quote: quote) + expect(subject.quote).to_not be_nil + expect([target_status.id, target2.id].include?(subject.quote.id)).to be true + end + end + + context 'when no quote but reference' do + let(:quote) { false } + + it 'get quote' do + expect(subject.quote).to be_nil + end + end + end + describe '#content' do it 'returns the text of the status if it is not a reblog' do expect(subject.content).to eql subject.text @@ -324,6 +357,38 @@ RSpec.describe Status do end end + describe '.blocks_map' do + subject { described_class.blocks_map([status.account.id], account) } + + let(:status) { Fabricate(:status) } + let(:account) { Fabricate(:account) } + + it 'returns a hash' do + expect(subject).to be_a Hash + end + + it 'contains true value' do + account.block!(status.account) + expect(subject[status.account.id]).to be true + end + end + + describe '.domain_blocks_map' do + subject { described_class.domain_blocks_map([status.account.domain], account) } + + let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/status')) } + let(:account) { Fabricate(:account) } + + it 'returns a hash' do + expect(subject).to be_a Hash + end + + it 'contains true value' do + account.block_domain!(status.account.domain) + expect(subject[status.account.domain]).to be true + end + end + describe '.favourites_map' do subject { described_class.favourites_map([status], account) } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 271c70804b..3bdc2084d8 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -167,6 +167,48 @@ RSpec.describe StatusPolicy, type: :model do end end + context 'with the permission of emoji_reaction?' do + permissions :emoji_reaction? do + it 'grants access when viewer is not blocked' do + follow = Fabricate(:follow) + status.account = follow.target_account + + expect(subject).to permit(follow.account, status) + end + + it 'denies when viewer is blocked' do + block = Fabricate(:block) + status.account = block.target_account + + expect(subject).to_not permit(block.account, status) + end + end + end + + context 'with the permission of quote?' do + permissions :quote? do + it 'grants access when viewer is not blocked' do + follow = Fabricate(:follow) + status.account = follow.target_account + + expect(subject).to permit(follow.account, status) + end + + it 'denies when viewer is blocked' do + block = Fabricate(:block) + status.account = block.target_account + + expect(subject).to_not permit(block.account, status) + end + + it 'denies when private visibility' do + status.visibility = :private + + expect(subject).to_not permit(Fabricate(:account), status) + end + end + end + context 'with the permission of update?' do permissions :update? do it 'grants access if owner' do diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 0425e2e66b..910b5010ec 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -15,12 +15,10 @@ describe ActivityPub::NoteSerializer do let!(:reply_by_account_visibility_direct) { Fabricate(:status, account: account, thread: parent, visibility: :direct) } let!(:referred) { nil } let!(:referred2) { nil } - let(:convert_to_quote) { false } before(:each) do parent.references << referred if referred.present? parent.references << referred2 if referred2.present? - account.user&.settings&.[]=('single_ref_to_quote', true) if convert_to_quote @serialization = ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter) end @@ -64,28 +62,4 @@ describe ActivityPub::NoteSerializer do expect(subject['references']['first']['items']).to include referred.uri end end - - context 'when has quote and convert setting' do - let(:referred) { Fabricate(:status) } - let(:convert_to_quote) { true } - - it 'has as quote' do - expect(subject['quoteUri']).to_not be_nil - expect(subject['quoteUri']).to eq referred.uri - expect(subject['_misskey_quote']).to eq referred.uri - expect(subject['references']['first']['items']).to include referred.uri - end - end - - context 'when has multiple references and convert setting' do - let(:referred) { Fabricate(:status) } - let(:referred2) { Fabricate(:status) } - let(:convert_to_quote) { true } - - it 'has as quote' do - expect(subject['quoteUri']).to be_nil - expect(subject['references']['first']['items']).to include referred.uri - expect(subject['references']['first']['items']).to include referred2.uri - end - end end diff --git a/spec/services/process_references_service_spec.rb b/spec/services/process_references_service_spec.rb index c41144a2aa..60857278ee 100644 --- a/spec/services/process_references_service_spec.rb +++ b/spec/services/process_references_service_spec.rb @@ -10,6 +10,7 @@ RSpec.describe ProcessReferencesService, type: :service do let(:status) { Fabricate(:status, account: account, text: text, visibility: visibility) } let(:target_status) { Fabricate(:status, account: Fabricate(:user).account, visibility: target_status_visibility) } let(:target_status_uri) { ActivityPub::TagManager.instance.uri_for(target_status) } + let(:quote_urls) { nil } def notify?(target_status_id = nil) target_status_id ||= target_status.id @@ -18,7 +19,7 @@ RSpec.describe ProcessReferencesService, type: :service do describe 'posting new status' do subject do - described_class.new.call(status, reference_parameters, urls: urls, fetch_remote: fetch_remote) + described_class.new.call(status, reference_parameters, urls: urls, fetch_remote: fetch_remote, quote_urls: quote_urls) status.reference_objects.pluck(:target_status_id, :attribute_type) end @@ -35,6 +36,10 @@ RSpec.describe ProcessReferencesService, type: :service do expect(subject.pluck(1)).to include 'RT' expect(notify?).to be true end + + it 'not quote' do + expect(status.quote).to be_nil + end end context 'when multiple references' do @@ -86,6 +91,48 @@ RSpec.describe ProcessReferencesService, type: :service do end end + context 'with quote as parameter only' do + let(:text) { 'Hello' } + let(:quote_urls) { [ActivityPub::TagManager.instance.uri_for(target_status)] } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject.pluck(0)).to include target_status.id + expect(subject.pluck(1)).to include 'QT' + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + expect(notify?).to be true + end + end + + context 'with quote as parameter and embed' do + let(:text) { "Hello QT #{target_status_uri}" } + let(:quote_urls) { [ActivityPub::TagManager.instance.uri_for(target_status)] } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject.pluck(0)).to include target_status.id + expect(subject.pluck(1)).to include 'QT' + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + expect(notify?).to be true + end + end + + context 'with quote as parameter but embed is not quote' do + let(:text) { "Hello RE #{target_status_uri}" } + let(:quote_urls) { [ActivityPub::TagManager.instance.uri_for(target_status)] } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject.pluck(0)).to include target_status.id + expect(subject.pluck(1)).to include 'QT' + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + expect(notify?).to be true + end + end + context 'with quote and reference' do let(:target_status2) { Fabricate(:status) } let(:target_status2_uri) { ActivityPub::TagManager.instance.uri_for(target_status2) } @@ -240,6 +287,17 @@ RSpec.describe ProcessReferencesService, type: :service do end end + context 'when remove quote' do + let(:text) { "QT #{target_status_uri}" } + let(:new_text) { 'Hello' } + + it 'post status' do + expect(subject.size).to eq 0 + expect(status.quote).to be_nil + expect(notify?).to be false + end + end + context 'when change reference' do let(:text) { "BT #{target_status_uri}" } let(:new_text) { "BT #{target_status2_uri}" } @@ -250,5 +308,43 @@ RSpec.describe ProcessReferencesService, type: :service do expect(notify?(target_status2.id)).to be true end end + + context 'when change quote' do + let(:text) { "QT #{target_status_uri}" } + let(:new_text) { "QT #{target_status2_uri}" } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject).to include target_status2.id + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status2.id + expect(notify?(target_status2.id)).to be true + end + end + + context 'when change quote to reference', pending: 'Will fix later' do + let(:text) { "QT #{target_status_uri}" } + let(:new_text) { "RT #{target_status_uri}" } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject).to include target_status.id + expect(status.quote).to be_nil + expect(notify?(target_status.id)).to be true + end + end + + context 'when change reference to quote', pending: 'Will fix later' do + let(:text) { "RT #{target_status_uri}" } + let(:new_text) { "QT #{target_status_uri}" } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject).to include target_status.id + expect(status.quote).to_not be_nil + expect(status.quote.id).to eq target_status.id + expect(notify?(target_status.id)).to be true + end + end end end diff --git a/streaming/index.js b/streaming/index.js index 1851de3cd0..b31da1fa7a 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -801,8 +801,10 @@ const startServer = async () => { // reference_texts property is not working if ProcessReferencesWorker is // used on PostStatusService and so on. (Asynchronous processing) - const reference_texts = payload.reference_texts || []; - delete payload.reference_texts; + const reference_texts = payload?.reference_texts || []; + if (payload && typeof payload.reference_texts !== 'undefined') { + delete payload.reference_texts; + } // Streaming only needs to apply filtering to some channels and only to // some events. This is because majority of the filtering happens on the From e1ac510c655933f3c86613436aaf69bd1186dbe3 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 11:58:12 +0900 Subject: [PATCH 029/237] =?UTF-8?q?=E7=B7=A8=E9=9B=86=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=81=8C=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=81=97=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/reducers/filters.js | 1 + app/javascript/mastodon/selectors/index.js | 19 ++++++++++++++++++- app/serializers/rest/filter_serializer.rb | 2 +- streaming/index.js | 5 +++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/reducers/filters.js b/app/javascript/mastodon/reducers/filters.js index 566ad0c6ca..28f0c3e6e4 100644 --- a/app/javascript/mastodon/reducers/filters.js +++ b/app/javascript/mastodon/reducers/filters.js @@ -11,6 +11,7 @@ const normalizeFilter = (state, filter) => { filter_action: filter.filter_action, keywords: filter.keywords, expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, + with_quote: filter.with_quote, }); if (is(state.get(filter.id), normalizedFilter)) { diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 9446b77c7f..aaf22a0588 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -37,12 +37,14 @@ export const makeGetStatus = () => { [ (state, { id }) => state.getIn(['statuses', id]), (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), + (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'quote_id'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), + (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'quote_id']), 'account'])]), getFilters, ], - (statusBase, statusReblog, accountBase, accountReblog, filters) => { + (statusBase, statusReblog, statusQuote, accountBase, accountReblog, accountQuote, filters) => { if (!statusBase || statusBase.get('isLoading')) { return null; } @@ -53,6 +55,12 @@ export const makeGetStatus = () => { statusReblog = null; } + if (statusQuote) { + statusQuote = statusQuote.set('account', accountQuote); + } else { + statusQuote = null; + } + if (hideBlockingQuote && statusBase.getIn(['quote', 'quote_muted'])) { return null; } @@ -61,6 +69,14 @@ export const makeGetStatus = () => { let filterAction = 'warn'; if ((accountReblog || accountBase).get('id') !== me && filters) { let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList(); + const quoteFilterResults = statusQuote?.get('filtered'); + if (quoteFilterResults) { + const filterWithQuote = quoteFilterResults.some((result) => filters.getIn([result.get('filter'), 'with_quote'])); + if (filterWithQuote) { + filterResults = filterResults.concat(quoteFilterResults); + } + } + if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { return null; } @@ -73,6 +89,7 @@ export const makeGetStatus = () => { return statusBase.withMutations(map => { map.set('reblog', statusReblog); + map.set('quote', statusQuote); map.set('account', accountBase); map.set('matched_filters', filtered); map.set('filter_action', filterAction); diff --git a/app/serializers/rest/filter_serializer.rb b/app/serializers/rest/filter_serializer.rb index 1b5d70dffd..08fadda582 100644 --- a/app/serializers/rest/filter_serializer.rb +++ b/app/serializers/rest/filter_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::FilterSerializer < ActiveModel::Serializer - attributes :id, :title, :exclude_follows, :exclude_localusers, :context, :expires_at, :filter_action + attributes :id, :title, :exclude_follows, :exclude_localusers, :with_quote, :context, :expires_at, :filter_action has_many :keywords, serializer: REST::FilterKeywordSerializer, if: :rules_requested? has_many :statuses, serializer: REST::FilterStatusSerializer, if: :rules_requested? diff --git a/streaming/index.js b/streaming/index.js index b31da1fa7a..f0bdf436be 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -864,7 +864,7 @@ const startServer = async () => { } if (!payload.filtered && !req.cachedFilters) { - queries.push(client.query('SELECT filter.id AS id, filter.phrase AS title, filter.context AS context, filter.expires_at AS expires_at, filter.action AS filter_action, keyword.keyword AS keyword, keyword.whole_word AS whole_word, filter.exclude_follows AS exclude_follows, filter.exclude_localusers AS exclude_localusers FROM custom_filter_keywords keyword JOIN custom_filters filter ON keyword.custom_filter_id = filter.id WHERE filter.account_id = $1 AND (filter.expires_at IS NULL OR filter.expires_at > NOW())', [req.accountId])); + queries.push(client.query('SELECT filter.id AS id, filter.phrase AS title, filter.context AS context, filter.expires_at AS expires_at, filter.action AS filter_action, filter.with_quote AS with_quote, keyword.keyword AS keyword, keyword.whole_word AS whole_word, filter.exclude_follows AS exclude_follows, filter.exclude_localusers AS exclude_localusers FROM custom_filter_keywords keyword JOIN custom_filters filter ON keyword.custom_filter_id = filter.id WHERE filter.account_id = $1 AND (filter.expires_at IS NULL OR filter.expires_at > NOW())', [req.accountId])); } if (!payload.filtered) { queries.push(client.query(`SELECT 1 @@ -913,7 +913,8 @@ const startServer = async () => { // representing a value in an enum defined by Ruby on Rails: // // enum { warn: 0, hide: 1 } - filter_action: ['warn', 'hide'][filter.filter_action], + filter_action: ['warn', 'hide', 'half_warn'][filter.filter_action], + with_quote: filter.with_quote, excludeFollows: filter.exclude_follows, excludeLocalusers: filter.exclude_localusers, }, From ddcf4eb09098adcd0f0c2db653d1c72fbd3346d1 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 12:20:16 +0900 Subject: [PATCH 030/237] =?UTF-8?q?=E5=BC=95=E7=94=A8=E3=82=92BT=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=81=A8=E3=81=8D=E3=80=81=E3=82=A2=E3=82=AB=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=88=E6=83=85=E5=A0=B1=E3=81=8C=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E6=8F=9B=E3=82=8F=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/selectors/index.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index aaf22a0588..ed7543b218 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -40,11 +40,10 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'quote_id'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), - (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'quote_id']), 'account'])]), getFilters, ], - (statusBase, statusReblog, statusQuote, accountBase, accountReblog, accountQuote, filters) => { + (statusBase, statusReblog, statusQuote, accountBase, accountReblog, filters) => { if (!statusBase || statusBase.get('isLoading')) { return null; } @@ -55,12 +54,6 @@ export const makeGetStatus = () => { statusReblog = null; } - if (statusQuote) { - statusQuote = statusQuote.set('account', accountQuote); - } else { - statusQuote = null; - } - if (hideBlockingQuote && statusBase.getIn(['quote', 'quote_muted'])) { return null; } From 72f3f95221bea196a785b7fc68058c241fdefc95 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 12:50:13 +0900 Subject: [PATCH 031/237] =?UTF-8?q?=E3=83=96=E3=83=BC=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=A7=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=8C?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/components/status.jsx | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 88a921c780..4f1e0f47a1 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -416,6 +416,46 @@ class Status extends ImmutablePureComponent { let visibilityIcon = visibilityIconInfo[status.get('limited_scope') || status.get('visibility_ex')] || visibilityIconInfo[status.get('visibility')]; + if (featured) { + prepend = ( +
+
+ +
+ ); + } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') { + const display_name_html = { __html: status.getIn(['account', 'display_name_html']) }; + + prepend = ( +
+
+
+
}} /> +
+ ); + + rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: status.getIn(['account', 'acct']) }); + + account = status.get('account'); + status = status.get('reblog'); + } else if (status.get('visibility') === 'direct') { + prepend = ( +
+
+ +
+ ); + } else if (showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) { + const display_name_html = { __html: status.getIn(['account', 'display_name_html']) }; + + prepend = ( +
+
+ }} /> +
+ ); + } + if (account === undefined || account === null) { statusAvatar = ; } else { @@ -476,46 +516,6 @@ class Status extends ImmutablePureComponent { ); } - if (featured) { - prepend = ( -
-
- -
- ); - } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') { - const display_name_html = { __html: status.getIn(['account', 'display_name_html']) }; - - prepend = ( -
-
-
- }} /> -
- ); - - rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: status.getIn(['account', 'acct']) }); - - account = status.get('account'); - status = status.get('reblog'); - } else if (status.get('visibility') === 'direct') { - prepend = ( -
-
- -
- ); - } else if (showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) { - const display_name_html = { __html: status.getIn(['account', 'display_name_html']) }; - - prepend = ( -
-
- }} /> -
- ); - } - isCardMediaWithSensitive = false; if (pictureInPicture.get('inUse')) { From c4568be616fd12c5a0726170baac2f62e1b95f55 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 13:15:14 +0900 Subject: [PATCH 032/237] =?UTF-8?q?=E4=BB=96=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=8B=E3=82=89=E3=81=8D=E3=81=9F=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E3=81=AE=E5=8F=82=E7=85=A7=E3=82=92=E5=90=8C=E6=9C=9F=E7=9A=84?= =?UTF-8?q?=E3=81=AB=E5=8F=96=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 2 +- app/services/activitypub/process_status_update_service.rb | 2 +- app/services/process_references_service.rb | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 6208130dad..824d45ed75 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -486,7 +486,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def process_references! references = @object['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @object['references']) - ProcessReferencesService.perform_worker_async(@status, [], references, [quote].compact) + ProcessReferencesService.call_service_without_error(@status, [], references, [quote].compact) end def quote_local? diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 2ae2824a1e..6da0880a93 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -255,7 +255,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService references = @json['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @json['references']) quote = @json['quote'] || @json['quoteUrl'] || @json['quoteURL'] || @json['_misskey_quote'] - ProcessReferencesService.perform_worker_async(@status, [], references, [quote].compact) + ProcessReferencesService.call_service_without_error(@status, [], references, [quote].compact) end def expected_type? diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index 6d61c7decd..1b9e4ab48b 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -58,6 +58,14 @@ class ProcessReferencesService < BaseService ProcessReferencesService.new.call(status, reference_parameters || [], urls: urls || [], fetch_remote: false, quote_urls: quote_urls) end + def self.call_service_without_error(status, reference_parameters, urls, quote_urls = []) + begin + call_service(status, reference_parameters, urls, quote_urls) + rescue + true + end + end + private def references From 71b663fcad693f20420ea9b42cd7e744bac4f801 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 13:33:59 +0900 Subject: [PATCH 033/237] Fix parameter --- app/services/process_references_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index 1b9e4ab48b..754be6e52c 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -59,8 +59,10 @@ class ProcessReferencesService < BaseService end def self.call_service_without_error(status, reference_parameters, urls, quote_urls = []) + return unless need_process?(status, reference_parameters, urls, quote_urls) + begin - call_service(status, reference_parameters, urls, quote_urls) + ProcessReferencesService.new.call(status, reference_parameters || [], urls: urls || [], quote_urls: quote_urls) rescue true end From cd01ffc54ec3b9ca97488b6f7de342402f02057f Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 13:46:11 +0900 Subject: [PATCH 034/237] =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E3=81=8C=E5=BC=95=E7=94=A8=E4=BB=98=E3=81=8D=E3=81=A7=E9=85=8D?= =?UTF-8?q?=E4=BF=A1=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 824d45ed75..bebdd70340 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -93,9 +93,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity resolve_thread(@status) fetch_replies(@status) + process_references! distribute forward_for_reply - process_references! join_group! end From ee406e6fb9bbc330de0d223f48452f70baf4d2f7 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 13:52:14 +0900 Subject: [PATCH 035/237] Fix quote --- app/services/process_references_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index 754be6e52c..83dd8a07ee 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -116,7 +116,7 @@ class ProcessReferencesService < BaseService end def quotable?(target_status) - @status.account.allow_quote? && StatusPolicy.new(@status.account, target_status).quote? + @status.account.allow_quote? && (!@status.local? || StatusPolicy.new(@status.account, target_status).quote?) end def add_references From 926f1df1a92e17f4ec9d8a3883314a31383af469 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 13:54:54 +0900 Subject: [PATCH 036/237] Fix quote --- app/services/process_references_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index 83dd8a07ee..ba9dc33285 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -128,7 +128,7 @@ class ProcessReferencesService < BaseService statuses.each do |status| attribute_type = quote_status_ids.include?(status.id) ? 'QT' : @attributes[status.id] attribute_type = 'BT' unless quotable?(status) - quote_type = attribute_type.present? ? attribute_type.casecmp('QT').zero? : false + quote_type = attribute_type.present? ? (attribute_type.casecmp('QT').zero? || attribute_type.casecmp('RE').zero?) : false @status.quote_of_id = status.id if quote_type && (@status.quote_of_id.nil? || references.exclude?(@status.quote_of_id)) @added_objects << @status.reference_objects.new(target_status: status, attribute_type: attribute_type, quote: quote_type) From f5b6592911e32f41a7315c840627d2709b4e772d Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 15:22:26 +0900 Subject: [PATCH 037/237] =?UTF-8?q?Fix:=20=E5=BC=95=E7=94=A8=E4=BB=98?= =?UTF-8?q?=E3=81=8D=E3=81=AE=E6=8A=95=E7=A8=BF=E3=82=92=E3=83=96=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=97=E3=80=81=E3=81=95=E3=82=89=E3=81=AB?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E3=81=95=E3=82=8C=E3=81=9F=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E3=82=92=E7=B7=A8=E9=9B=86=E3=81=97=E3=81=9F=E6=99=82=E3=80=81?= =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=81=8CWeb?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=AB=E5=8F=8D=E6=98=A0=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/selectors/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index ed7543b218..6c5891ca57 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -38,23 +38,25 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', id]), (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'quote_id'])]), + (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'quote_id'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), getFilters, ], - (statusBase, statusReblog, statusQuote, accountBase, accountReblog, filters) => { + (statusBase, statusReblog, statusQuote, statusReblogQuote, accountBase, accountReblog, filters) => { if (!statusBase || statusBase.get('isLoading')) { return null; } if (statusReblog) { statusReblog = statusReblog.set('account', accountReblog); + statusQuote = statusReblogQuote; } else { statusReblog = null; } - if (hideBlockingQuote && statusBase.getIn(['quote', 'quote_muted'])) { + if (hideBlockingQuote && (statusReblog || statusBase).getIn(['quote', 'quote_muted'])) { return null; } From 952f51659baf03b85f4fcc04a2e9434777bbdb4f Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 17:25:49 +0900 Subject: [PATCH 038/237] =?UTF-8?q?Fix:=20=E3=83=96=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=95=E3=82=8C=E3=81=9F=E3=81=B0=E3=81=8B=E3=82=8A?= =?UTF-8?q?=E3=81=AE=E6=8A=95=E7=A8=BF=E3=82=92=E7=B7=A8=E9=9B=86=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=82=82=E7=9B=B8=E6=89=8B=E3=81=AE=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=A0=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=AB=E5=8F=8D=E6=98=A0?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/feed_manager.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 7d530906c6..924884d39d 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -58,7 +58,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_home(account, status, update: false) - return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?) + return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?, update: update) trim(:home, account.id) PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}", { 'update' => update }) if push_update_required?("timeline:#{account.id}") @@ -83,7 +83,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_list(list, status, update: false) - return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) + return false if filter_from_list?(status, list) || !add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?, update: update) trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}", { 'update' => update }) if push_update_required?("timeline:list:#{list.id}") @@ -91,7 +91,7 @@ class FeedManager end def push_to_antenna(antenna, status, update: false) - return false unless add_to_feed(:antenna, antenna.id, status, aggregate_reblogs: antenna.account.user&.aggregates_reblogs?) + return false unless add_to_feed(:antenna, antenna.id, status, aggregate_reblogs: antenna.account.user&.aggregates_reblogs?, update: update) trim(:antenna, antenna.id) PushUpdateWorker.perform_async(antenna.account_id, status.id, "timeline:antenna:#{antenna.id}", { 'update' => update }) if push_update_required?("timeline:antenna:#{antenna.id}") @@ -497,7 +497,9 @@ class FeedManager # @param [Status] status # @param [Boolean] aggregate_reblogs # @return [Boolean] - def add_to_feed(timeline_type, account_id, status, aggregate_reblogs: true) + def add_to_feed(timeline_type, account_id, status, aggregate_reblogs: true, update: false) + return true if update + timeline_key = key(timeline_type, account_id) reblog_key = key(timeline_type, account_id, 'reblogs') From 26213e36d4709498eb31fc7bbcb8bcd4d31deb0b Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 2 Oct 2023 18:45:47 +0900 Subject: [PATCH 039/237] =?UTF-8?q?Fix:=20=E5=BC=95=E7=94=A8=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E6=8A=95=E7=A8=BF=E3=81=A7=E3=81=AF=E3=81=AA?= =?UTF-8?q?=E3=81=8F=E5=BC=95=E7=94=A8=E3=81=99=E3=82=8B=E4=BA=BA=E3=81=AE?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=82=92=E8=A6=8B=E3=81=AB=E8=A1=8C=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E3=81=9F=E3=82=81=E3=80=81?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E8=A8=B1=E5=8F=AF=E3=81=8C=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E3=81=AB=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=AA=E3=81=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/process_references_service.rb | 2 +- .../services/process_references_service_spec.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index ba9dc33285..40405c6ee7 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -116,7 +116,7 @@ class ProcessReferencesService < BaseService end def quotable?(target_status) - @status.account.allow_quote? && (!@status.local? || StatusPolicy.new(@status.account, target_status).quote?) + target_status.account.allow_quote? && (!@status.local? || StatusPolicy.new(@status.account, target_status).quote?) end def add_references diff --git a/spec/services/process_references_service_spec.rb b/spec/services/process_references_service_spec.rb index 60857278ee..8d69e42e5a 100644 --- a/spec/services/process_references_service_spec.rb +++ b/spec/services/process_references_service_spec.rb @@ -11,6 +11,7 @@ RSpec.describe ProcessReferencesService, type: :service do let(:target_status) { Fabricate(:status, account: Fabricate(:user).account, visibility: target_status_visibility) } let(:target_status_uri) { ActivityPub::TagManager.instance.uri_for(target_status) } let(:quote_urls) { nil } + let(:allow_quote) { true } def notify?(target_status_id = nil) target_status_id ||= target_status.id @@ -19,6 +20,9 @@ RSpec.describe ProcessReferencesService, type: :service do describe 'posting new status' do subject do + target_status.account.user.settings('allow_quote', false) unless allow_quote + target_status.account.user&.save + described_class.new.call(status, reference_parameters, urls: urls, fetch_remote: fetch_remote, quote_urls: quote_urls) status.reference_objects.pluck(:target_status_id, :attribute_type) end @@ -133,6 +137,19 @@ RSpec.describe ProcessReferencesService, type: :service do end end + context 'when quote is rejected' do + let(:text) { "Hello QT #{target_status_uri}" } + let(:allow_quote) { false } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject.pluck(0)).to include target_status.id + expect(subject.pluck(1)).to include 'BT' + expect(status.quote).to be_nil + expect(notify?).to be true + end + end + context 'with quote and reference' do let(:target_status2) { Fabricate(:status) } let(:target_status2_uri) { ActivityPub::TagManager.instance.uri_for(target_status2) } From 829be02abe00783ffc82292592bc855670a14f44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:16:02 +0200 Subject: [PATCH 040/237] Update Node.js to v20.8 (#27240) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4d397e3bdf..8e40091add 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.4 # This needs to be bookworm-slim because the Ruby image is built on bookworm-slim -ARG NODE_VERSION="20.7-bookworm-slim" +ARG NODE_VERSION="20.8-bookworm-slim" FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby FROM node:${NODE_VERSION} as build From 73a92f9e7acdd5fda99549384c24c4038fe6bf83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:17:55 +0200 Subject: [PATCH 041/237] Update DefinitelyTyped types (non-major) (#27239) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 19436669f3..5ff66346a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2361,9 +2361,9 @@ integrity sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g== "@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.7" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.7.tgz#f9361f7b87fd5d8188b2c998db0a1f47e9fb391a" - integrity sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog== + version "15.7.8" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.8.tgz#805eae6e8f41bd19e88917d2ea200dc992f405d3" + integrity sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ== "@types/punycode@^2.1.0": version "2.1.0" @@ -2381,9 +2381,9 @@ integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.5.tgz#38bd1733ae299620771bd414837ade2e57757498" + integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.4": version "18.2.8" @@ -2488,9 +2488,9 @@ "@types/react" "*" "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.0.26", "@types/react@^18.2.7": - version "18.2.23" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.23.tgz#60ad6cf4895e93bed858db0e03bcc4ff97d0410e" - integrity sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA== + version "18.2.24" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.24.tgz#3c7d68c02e0205a472f04abe4a0c1df35d995c05" + integrity sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" From bad1629dcdf16797449ed2b60e600dd79c432d9e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:18:06 +0200 Subject: [PATCH 042/237] Update dependency core-js to v3.33.0 (#27237) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5ff66346a0..cf7e7448ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4350,9 +4350,9 @@ core-js@^2.5.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.30.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.2.tgz#172fb5949ef468f93b4be7841af6ab1f21992db7" - integrity sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ== + version "3.33.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.0.tgz#70366dbf737134761edb017990cf5ce6c6369c40" + integrity sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw== core-util-is@~1.0.0: version "1.0.3" From c2f13769cde257f1b0dcfddfbc6d553741d4b68b Mon Sep 17 00:00:00 2001 From: Jake Anto <64896514+jake-anto@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:48:16 +0530 Subject: [PATCH 043/237] Add PWA shortcut to `/explore` page (#27235) --- app/serializers/manifest_serializer.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 48f3aa7a6a..aa7f7ce5d8 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -84,6 +84,10 @@ class ManifestSerializer < ActiveModel::Serializer name: 'Notifications', url: '/notifications', }, + { + name: 'Explore', + url: '/explore', + }, ] end end From 5f2d494f0d072abc5360b170076d13b87aa150f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:18:29 +0200 Subject: [PATCH 044/237] Update dependency react-redux to v8.1.3 (#27229) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index cf7e7448ed..4a14c22ce2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1096,14 +1096,14 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.1", "@babel/runtime@^7.9.2": version "7.23.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== @@ -10144,9 +10144,9 @@ react-redux-loading-bar@^5.0.4: react-lifecycles-compat "^3.0.4" react-redux@^8.0.4: - version "8.1.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.2.tgz#9076bbc6b60f746659ad6d51cb05de9c5e1e9188" - integrity sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw== + version "8.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" + integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== dependencies: "@babel/runtime" "^7.12.1" "@types/hoist-non-react-statics" "^3.3.1" From f68d5402711b81744b6660e750c68de421e863f1 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 2 Oct 2023 13:21:43 +0200 Subject: [PATCH 045/237] Fix websocket connections being incorrectly decremented twice on errors (#27238) --- streaming/index.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index 8015c6815a..3565ed2783 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -1386,19 +1386,21 @@ const startServer = async () => { }; wss.on('connection', (ws, req) => { - const location = url.parse(req.url, true); + // Note: url.parse could throw, which would terminate the connection, so we + // increment the connected clients metric straight away when we establish + // the connection, without waiting: + connectedClients.labels({ type: 'websocket' }).inc(); + // Setup request properties: req.requestId = uuid.v4(); req.remoteAddress = ws._socket.remoteAddress; + // Setup connection keep-alive state: ws.isAlive = true; - ws.on('pong', () => { ws.isAlive = true; }); - connectedClients.labels({ type: 'websocket' }).inc(); - /** * @type {WebSocketSession} */ @@ -1408,27 +1410,31 @@ const startServer = async () => { subscriptions: {}, }; - const onEnd = () => { + ws.on('close', function onWebsocketClose() { const subscriptions = Object.keys(session.subscriptions); subscriptions.forEach(channelIds => { removeSubscription(session.subscriptions, channelIds.split(';'), req) }); + // Decrement the metrics for connected clients: + connectedClients.labels({ type: 'websocket' }).dec(); + // ensure garbage collection: session.socket = null; session.request = null; session.subscriptions = {}; + }); - connectedClients.labels({ type: 'websocket' }).dec(); - }; - - ws.on('close', onEnd); - ws.on('error', onEnd); + // Note: immediately after the `error` event is emitted, the `close` event + // is emitted. As such, all we need to do is log the error here. + ws.on('error', (err) => { + log.error('websocket', err.toString()); + }); ws.on('message', (data, isBinary) => { if (isBinary) { - log.warn('socket', 'Received binary data, closing connection'); + log.warn('websocket', 'Received binary data, closing connection'); ws.close(1003, 'The mastodon streaming server does not support binary messages'); return; } @@ -1451,7 +1457,10 @@ const startServer = async () => { subscribeWebsocketToSystemChannel(session); - if (location.query.stream) { + // Parse the URL for the connection arguments (if supplied), url.parse can throw: + const location = req.url && url.parse(req.url, true); + + if (location && location.query.stream) { subscribeWebsocketToChannel(session, firstParam(location.query.stream), location.query); } }); From ee866ec0e008c3ea0b98093202f1866b7784499d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:35:29 +0200 Subject: [PATCH 046/237] New Crowdin Translations (automated) (#27220) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fa.json | 2 +- app/javascript/mastodon/locales/fi.json | 24 ++-- app/javascript/mastodon/locales/fr-QC.json | 2 +- app/javascript/mastodon/locales/ja.json | 16 +-- app/javascript/mastodon/locales/lv.json | 30 ++--- app/javascript/mastodon/locales/sk.json | 109 ++++++++++++------- app/javascript/mastodon/locales/sr-Latn.json | 2 +- app/javascript/mastodon/locales/sr.json | 2 +- config/locales/doorkeeper.fa.yml | 2 + config/locales/doorkeeper.fi.yml | 2 +- config/locales/fi.yml | 34 +++--- config/locales/ja.yml | 4 +- config/locales/simple_form.fi.yml | 6 +- 13 files changed, 132 insertions(+), 103 deletions(-) diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index c1b067cff8..f4a2e09e73 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -338,7 +338,7 @@ "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها", "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.description": "توضیح", - "keyboard_shortcuts.direct": "باز کردن ستون اشاره‌های خصوصی", + "keyboard_shortcuts.direct": "برای گشودن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", "keyboard_shortcuts.favourite": "پسندیدن فرسته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 094b7d3b36..4c920b038f 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -206,7 +206,7 @@ "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", - "embed.preview": "Se tulee näyttämään tältä:", + "embed.preview": "Tältä se näyttää:", "emoji_button.activity": "Aktiviteetit", "emoji_button.clear": "Tyhjennä", "emoji_button.custom": "Mukautetut", @@ -226,7 +226,7 @@ "empty_column.account_timeline": "Ei viestejä täällä.", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole estänyt käyttäjiä.", - "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", @@ -314,17 +314,17 @@ "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", "home.show_announcements": "Näytä tiedotteet", - "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", - "interaction_modal.login.action": "Palaa aloitussivulle", - "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", + "interaction_modal.login.action": "Siirry kotiin", + "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista, etsi tervetulosähköposti saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -473,7 +473,7 @@ "onboarding.action.back": "Palaa takaisin", "onboarding.actions.back": "Palaa takaisin", "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen", - "onboarding.actions.go_to_home": "Siirry kotisyötteeseen", + "onboarding.actions.go_to_home": "Siirry kotisyötteeseeni", "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", @@ -618,10 +618,10 @@ "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", - "status.bookmark": "Tallenna kirjanmerkki", + "status.bookmark": "Lisää kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", - "status.copy": "Kopioi linkki julkaisuun", + "status.copy": "Kopioi julkaisun linkki", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -662,9 +662,9 @@ "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", - "status.show_less_all": "Näytä vähemmän kaikista", + "status.show_less_all": "Näytä kaikista vähemmän", "status.show_more": "Näytä lisää", - "status.show_more_all": "Näytä lisää kaikista", + "status.show_more_all": "Näytä kaikista enemmän", "status.show_original": "Näytä alkuperäinen", "status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}", "status.translate": "Käännä", @@ -715,7 +715,7 @@ "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", - "username.taken": "Kyseinen käyttäjätunnus on jo käytössä. Kokeile eri tunnusta", + "username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista", "video.close": "Sulje video", "video.download": "Lataa tiedosto", "video.exit_fullscreen": "Poistu koko näytön tilasta", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index 4da7477dca..16a18048b4 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -308,7 +308,7 @@ "home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_replies": "Afficher réponses", "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :", - "home.explore_prompt.title": "C'est chez vous dans Mastadon.", + "home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.", "home.hide_announcements": "Masquer les annonces", "home.pending_critical_update.body": "Veuillez mettre à jour votre serveur Mastodon dès que possible !", "home.pending_critical_update.link": "Voir les mises à jour", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index cfba6db93f..0bf0a96a27 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -1,13 +1,13 @@ { "about.blocks": "制限中のサーバー", "about.contact": "連絡先", - "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。", - "about.domain_blocks.no_reason_available": "制限理由", - "about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。", + "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアであり、Mastodon gGmbHの商標です。", + "about.domain_blocks.no_reason_available": "理由未記載", + "about.domain_blocks.preamble": "Mastodonでは原則的にあらゆるサーバー同士で交流したり、互いの投稿を読んだりできますが、当サーバーでは例外的に次のような制限を設けています。", "about.domain_blocks.silenced.explanation": "このサーバーのプロフィールやコンテンツは、明示的に検索したり、フォローでオプトインしない限り、通常は表示されません。", "about.domain_blocks.silenced.title": "制限", "about.domain_blocks.suspended.explanation": "これらのサーバーからのデータは処理されず、保存や変換もされません。該当するユーザーとの交流もできません。", - "about.domain_blocks.suspended.title": "停止済み", + "about.domain_blocks.suspended.title": "停止中", "about.not_available": "この情報はこのサーバーでは利用できません。", "about.powered_by": "{mastodon}による分散型ソーシャルメディア", "about.rules": "サーバーのルール", @@ -301,7 +301,7 @@ "hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}", "hashtag.follow": "ハッシュタグをフォローする", "hashtag.unfollow": "ハッシュタグのフォローを解除", - "hashtags.and_other": "+{count, plural, other {#件}}", + "hashtags.and_other": "ほか{count, plural, other {#個}}", "home.actions.go_to_explore": "話題をさがす", "home.actions.go_to_suggestions": "フォローするユーザーを検索", "home.column_settings.basic": "基本設定", @@ -405,7 +405,7 @@ "navigation_bar.discover": "見つける", "navigation_bar.domain_blocks": "ブロックしたドメイン", "navigation_bar.edit_profile": "プロフィールを編集", - "navigation_bar.explore": "エクスプローラー", + "navigation_bar.explore": "探索する", "navigation_bar.favourites": "お気に入り", "navigation_bar.filters": "フィルター設定", "navigation_bar.follow_requests": "フォローリクエスト", @@ -424,7 +424,7 @@ "not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。", "notification.admin.report": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", - "notification.favourite": "{name}さんがあなたの投稿をお気に入りに追加しました。", + "notification.favourite": "{name}さんがお気に入りしました", "notification.follow": "{name}さんにフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.mention": "{name}さんがあなたに返信しました", @@ -518,7 +518,7 @@ "privacy.public.long": "誰でも閲覧可", "privacy.public.short": "公開", "privacy.unlisted.long": "誰でも閲覧可、サイレント", - "privacy.unlisted.short": "未収載", + "privacy.unlisted.short": "非収載", "privacy_policy.last_updated": "{date}に更新", "privacy_policy.title": "プライバシーポリシー", "refresh": "更新", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index d35418e185..3f2c74cbac 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,11 +9,11 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", - "account.badges.bot": "Robots", + "account.badges.bot": "Automatizēts", "account.badges.group": "Grupa", "account.block": "Bloķēt @{name}", "account.block_domain": "Bloķēt domēnu {domain}", @@ -102,7 +102,7 @@ "bundle_modal_error.message": "Kaut kas nogāja greizi, ielādējot šo komponenti.", "bundle_modal_error.retry": "Mēģināt vēlreiz", "closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.", - "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši domēnā {domain}, lai izmantotu Mastodon.", + "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši {domain}, lai lietotu Mastodon.", "closed_registrations_modal.find_another_server": "Atrast citu serveri", "closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur tu izveido savu kontu, varēsi sekot līdzi un sazināties ar ikvienu šajā serverī. Tu pat vari vadīt to pats!", "closed_registrations_modal.title": "Reģistrēšanās Mastodon", @@ -113,7 +113,7 @@ "column.direct": "Privāti pieminēti", "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Bloķētie domēni", - "column.favourites": "Iecienīti", + "column.favourites": "Iecienītie", "column.firehose": "Tiešraides plūsmas", "column.follow_requests": "Sekošanas pieprasījumi", "column.home": "Sākums", @@ -151,7 +151,7 @@ "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", "compose_form.publish": "Publicēt", - "compose_form.publish_form": "Publicēt", + "compose_form.publish_form": "Jauns ieraksts", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Saglabāt izmaiņas", "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt multividi kā sensitīvu} other {Atzīmēt multivides kā sensitīvas}}", @@ -161,7 +161,7 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un sūdzēties", + "confirmations.block.block_and_report": "Bloķēt un Ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", @@ -236,7 +236,7 @@ "empty_column.follow_requests": "Šobrīd tev nav sekošanas pieprasījumu. Kad kāds pieteiksies tev sekot, pieprasījums parādīsies šeit.", "empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", - "empty_column.home": "Tava mājas laika līnija ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem. {suggestions}", + "empty_column.home": "Tava mājas laikrinda ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem.", "empty_column.list": "Šis saraksts pašreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.", "empty_column.lists": "Pašreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -476,23 +476,23 @@ "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", - "onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!", + "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Populārs Mastodon", "onboarding.share.lead": "Paziņo citiem, kā viņi tevi var atrast Mastodon!", "onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}", "onboarding.share.next_steps": "Iespējamie nākamie soļi:", "onboarding.share.title": "Kopīgo savu profilu", - "onboarding.start.lead": "Tavs jaunais Mastodon konts ir gatavs lietošanai. Lūk, kā tu vari to pilnīgāk izmantot:", - "onboarding.start.skip": "Vai vēlies izlaist tieši uz priekšu?", + "onboarding.start.lead": "Tagad tu esat daļa no Mastodon — unikālas, decentralizētas sociālo mediju platformas, kurā tu, nevis algoritms, veido savu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", + "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", "onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}", - "onboarding.steps.publish_status.body": "Sveicini pasauli.", + "onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", "onboarding.steps.setup_profile.body": "Citi, visticamāk, sazināsies ar tevi, izmantojot aizpildītu profilu.", "onboarding.steps.setup_profile.title": "Pielāgo savu profilu", "onboarding.steps.share_profile.body": "Paziņo saviem draugiem, kā tevi atrast Mastodon!", - "onboarding.steps.share_profile.title": "Kopīgo savu profilu", + "onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu", "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divu faktoru autentifikāciju. Tas darbojas ar jebkuru tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", "onboarding.tips.accounts_from_other_servers": "Vai zināji? Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!", "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu personīgo serveri!", @@ -518,7 +518,7 @@ "privacy.public.long": "Redzams visiem", "privacy.public.short": "Publiska", "privacy.unlisted.long": "Redzams visiem, bet izslēgts no satura atklāšanas funkcijām", - "privacy.unlisted.short": "Nerindota", + "privacy.unlisted.short": "Neiekļautie", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", "refresh": "Atsvaidzināt", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index bd1252b47f..da12eaa1b5 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -12,53 +12,53 @@ "about.powered_by": "Decentralizované sociálne médiá poháňané technológiou {mastodon}", "about.rules": "Pravidlá servera", "account.account_note_header": "Poznámka", - "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", + "account.add_or_remove_from_list": "Pridaj alebo odober zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", "account.block": "Blokuj @{name}", - "account.block_domain": "Ukry všetko z {domain}", + "account.block_domain": "Skry všetko z {domain}", "account.block_short": "Blokuj", "account.blocked": "Blokovaný/á", "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", - "account.cancel_follow_request": "Stiahni žiadosť o nasledovanie", - "account.direct": "Spomeň @{name} v súkromí", - "account.disable_notifications": "Prestaň ma oboznamovať, keď má @{name} príspevky", - "account.domain_blocked": "Doména ukrytá", + "account.cancel_follow_request": "Zruš žiadosť o sledovanie", + "account.direct": "Spomeň @{name} súkromne", + "account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky", + "account.domain_blocked": "Doména skrytá", "account.edit_profile": "Uprav profil", - "account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky", + "account.enable_notifications": "Oznamuj mi, keď má @{name} príspevky", "account.endorse": "Zobrazuj na profile", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", "account.featured_tags.title": "Odporúčané hashtagy používateľa {name}", - "account.follow": "Nasleduj", - "account.followers": "Nasledovatelia", + "account.follow": "Sleduj", + "account.followers": "Sledovatelia", "account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.", - "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúci} other {{counter} Sledujúci}}", - "account.following": "Nasledujem", + "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúcich} other {{counter} Sledujúcich}}", + "account.following": "Sledujem", "account.following_counter": "{count, plural, one {{counter} Sledovaných} other {{counter} Sledujúcich}}", - "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", - "account.follows_you": "Nasleduje ťa", + "account.follows.empty": "Tento používateľ ešte nikoho nesleduje.", + "account.follows_you": "Sleduje ťa", "account.go_to_profile": "Prejdi na profil", - "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", + "account.hide_reblogs": "Skry zdieľania od @{name}", "account.in_memoriam": "In Memoriam.", "account.joined_short": "Pridal/a sa", "account.languages": "Zmeniť odoberané jazyky", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", - "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", + "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sa sám rozhoduje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", - "account.mute": "Nevšímaj si @{name}", - "account.mute_notifications_short": "Stíš oboznámenia", - "account.mute_short": "Nevšímaj si", - "account.muted": "Nevšímaný/á", - "account.no_bio": "Nieje uvedený žiadny popis.", + "account.mute": "Stíš @{name}", + "account.mute_notifications_short": "Stíš oznámenia", + "account.mute_short": "Stíš", + "account.muted": "Stíšený", + "account.no_bio": "Nie je uvedený žiadny popis.", "account.open_original_page": "Otvor pôvodnú stránku", "account.posts": "Príspevky", "account.posts_with_replies": "Príspevky a odpovede", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", - "account.requested_follow": "{name} ťa žiada nasledovať", + "account.requested_follow": "{name} ti poslal žiadosť na sledovanie", "account.share": "Zdieľaj @{name} profil", "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", @@ -84,7 +84,7 @@ "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Oboznámenie", + "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skry zvuk", "autosuggest_hashtag.per_week": "{count} týždenne", @@ -119,7 +119,7 @@ "column.home": "Domov", "column.lists": "Zoznamy", "column.mutes": "Nevšímaní užívatelia", - "column.notifications": "Oboznámenia", + "column.notifications": "Oznámenia", "column.pins": "Pripnuté príspevky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", @@ -185,7 +185,7 @@ "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", "confirmations.reply.confirm": "Odpovedz", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", - "confirmations.unfollow.confirm": "Nesleduj", + "confirmations.unfollow.confirm": "Prestaň sledovať", "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", "conversation.delete": "Vymaž konverzáciu", "conversation.mark_as_read": "Označ za prečítané", @@ -223,7 +223,7 @@ "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", "empty_column.account_suspended": "Účet bol vylúčený", - "empty_column.account_timeline": "Niesu tu žiadne príspevky!", + "empty_column.account_timeline": "Nie sú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.", @@ -296,19 +296,24 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "hashtag.follow": "Nasleduj haštag", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} sledujúci} few {{counter} sledujúci} many {{counter} sledujúcich} other {{counter} sledujúcich}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes", + "hashtag.follow": "Sleduj haštag", "hashtag.unfollow": "Nesleduj haštag", + "hashtags.and_other": "…a {count, plural, one {} few {# ďalšie} many {# ďalších}other {# ďalších}}", "home.actions.go_to_explore": "Pozrieť, čo je trendy", "home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", + "home.explore_prompt.body": "Váš domovský informačný kanál bude obsahovať mix príspevkov z mriežok, ktoré ste sa rozhodli sledovať, ľudí, ktorých ste sa rozhodli sledovať, a príspevkov, ktoré preferujú. Ak sa vám to zdá príliš málo, možno budete chcieť:", "home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.", - "home.hide_announcements": "Skry oboznámenia", + "home.hide_announcements": "Skry oznámenia", "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", "home.pending_critical_update.link": "Pozri aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia!", - "home.show_announcements": "Ukáž oboznámenia", + "home.show_announcements": "Ukáž oznámenia", "interaction_modal.description.favourite": "S účtom na Mastodone si môžeš tento príspevok obľúbiť, aby si dal/a autorovi vedieť, že ho oceňuješ, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.", "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.", @@ -319,6 +324,7 @@ "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", "interaction_modal.sign_in": "Nie si prihláseý/á na tomto serveri. Kde je tvoj účet hostovaný?", + "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno! (napr. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok", "interaction_modal.title.follow": "Nasleduj {name}", "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok", @@ -346,7 +352,7 @@ "keyboard_shortcuts.mention": "spomeň autora", "keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov", "keyboard_shortcuts.my_profile": "otvor svoj profil", - "keyboard_shortcuts.notifications": "otvor panel oboznámení", + "keyboard_shortcuts.notifications": "Otvor panel oznámení", "keyboard_shortcuts.open_media": "na otvorenie médií", "keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov", "keyboard_shortcuts.profile": "otvor autorov profil", @@ -373,6 +379,7 @@ "lists.delete": "Vymaž list", "lists.edit": "Uprav zoznam", "lists.edit.submit": "Zmeň názov", + "lists.exclusive": "Skryť tieto príspevky z domovskej stránky", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", "lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ", @@ -426,11 +433,11 @@ "notification.reblog": "{name} zdieľal/a tvoj príspevok", "notification.status": "{name} práve uverejnil/a", "notification.update": "{name} upravil/a príspevok", - "notifications.clear": "Vyčisti oboznámenia", - "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", + "notifications.clear": "Vyčisti oznámenia", + "notifications.clear_confirmation": "Naozaj chceš nenávratne odstrániť všetky tvoje oznámenia?", "notifications.column_settings.admin.report": "Nové hlásenia:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", - "notifications.column_settings.alert": "Oboznámenia na ploche", + "notifications.column_settings.alert": "Oznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", "notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie", "notifications.column_settings.filter_bar.category": "Rýchle triedenie", @@ -444,8 +451,8 @@ "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", "notifications.column_settings.status": "Nové príspevky:", - "notifications.column_settings.unread_notifications.category": "Neprečítané oboznámenia", - "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oboznámenia", + "notifications.column_settings.unread_notifications.category": "Neprečítané oznámenia", + "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oznámenia", "notifications.column_settings.update": "Úpravy:", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", @@ -455,12 +462,12 @@ "notifications.filter.polls": "Výsledky ankiet", "notifications.filter.statuses": "Aktualizácie od ľudí, ktorých nasleduješ", "notifications.grant_permission": "Udeľ povolenie.", - "notifications.group": "{count} oboznámení", - "notifications.mark_as_read": "Označ každé oboznámenie za prečítané", - "notifications.permission_denied": "Oboznámenia na plochu sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", - "notifications.permission_denied_alert": "Oboznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača o to, bola už skôr zamietnutá", - "notifications.permission_required": "Oboznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", - "notifications_permission_banner.enable": "Povoliť oboznámenia na plochu", + "notifications.group": "{count} Oznámení", + "notifications.mark_as_read": "Označ každé oznámenie za prečítané", + "notifications.permission_denied": "Oznámenia na ploche sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", + "notifications.permission_denied_alert": "Oznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", + "notifications.permission_required": "Oznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", + "notifications_permission_banner.enable": "Povoliť oznámenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec", "onboarding.action.back": "Vziať ma späť", @@ -468,6 +475,7 @@ "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "Nazdar #Mastodon!", + "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", @@ -476,6 +484,7 @@ "onboarding.share.title": "Zdieľaj svoj profil", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Zvládli ste to!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", @@ -484,6 +493,12 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Vedeli ste? Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!", + "onboarding.tips.accounts_from_other_servers": "Vedeli ste? Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!", + "onboarding.tips.migration": "Vedeli ste? Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostovať svoj vlastný server!", + "onboarding.tips.verification": "Vedeli ste? Svoj účet môžete overiť umiestnením odkazu na svoj profil Mastodon na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!", + "password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla", + "password_confirmation.mismatching": "Zadané heslá sa nezhodujú", "picture_in_picture.restore": "Vrátiť späť", "poll.closed": "Uzatvorená", "poll.refresh": "Obnoviť", @@ -542,6 +557,7 @@ "report.reasons.dislike": "Nepáči sa mi", "report.reasons.dislike_description": "Nieje to niečo, čo chceš vidieť", "report.reasons.legal": "Je to nelegálne", + "report.reasons.legal_description": "Domnievate sa, že porušuje zákony vašej krajiny alebo krajiny servera", "report.reasons.other": "Je to niečo iné", "report.reasons.other_description": "Tento problém nepatrí do iných kategórií", "report.reasons.spam": "Je to spam", @@ -559,6 +575,7 @@ "report.thanks.title": "Nechceš to vidieť?", "report.thanks.title_actionable": "Vďaka za nahlásenie, pozrieme sa na to.", "report.unfollow": "Nesleduj @{name}", + "report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, zrušte jeho sledovanie.", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Právne ujednania", "report_notification.categories.other": "Ostatné", @@ -573,6 +590,8 @@ "search.quick_action.open_url": "Otvor URL v rámci Mastodonu", "search.quick_action.status_search": "Príspevky zodpovedajúce {x}", "search.search_or_paste": "Hľadaj, alebo vlož URL adresu", + "search_popout.full_text_search_disabled_message": "Nie je k dispozícii v doméne {domain}.", + "search_popout.language_code": "ISO kód jazyka", "search_popout.options": "Možnosti vyhľadávania", "search_popout.quick_actions": "Rýchle akcie", "search_popout.recent": "Nedávne vyhľadávania", @@ -585,14 +604,18 @@ "search_results.see_all": "Ukáž všetky", "search_results.statuses": "Príspevky", "search_results.title": "Hľadaj {q}", + "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (Aktívni používatelia za mesiac)", "server_banner.active_users": "aktívni užívatelia", "server_banner.administered_by": "Správcom je:", + "server_banner.introduction": "{domain} je súčasťou decentralizovanej sociálnej siete využívajúcej technológiu {mastodon}.", "server_banner.learn_more": "Zisti viac", "server_banner.server_stats": "Serverové štatistiky:", "sign_in_banner.create_account": "Vytvor účet", "sign_in_banner.sign_in": "Prihlás sa", "sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj", + "sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo haštagy, obľúbené veci, zdieľať ich a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", + "status.admin_domain": "Otvor rozhranie na moderovanie domény {domain}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", "status.bookmark": "Záložka", @@ -649,9 +672,11 @@ "status.uncached_media_warning": "Náhľad nie je k dispozícii", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", + "subscribed_languages.lead": "Po zmene sa na vašej domovskej stránke a časovej osi zoznamu zobrazia iba príspevky vo vybraných jazykoch. Ak chcete dostávať príspevky vo všetkých jazykoch, vyberte možnosť žiadne.", "subscribed_languages.save": "Ulož zmeny", + "subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}", "tabs_bar.home": "Domov", - "tabs_bar.notifications": "Oboznámenia", + "tabs_bar.notifications": "Oznámenia", "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", @@ -680,6 +705,7 @@ "upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením", "upload_modal.analyzing_picture": "Analyzujem obrázok…", "upload_modal.apply": "Použi", + "upload_modal.applying": "Nastavovanie…", "upload_modal.choose_image": "Vyber obrázok", "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", "upload_modal.detect_text": "Rozpoznaj text z obrázka", @@ -689,6 +715,7 @@ "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "upload_progress.processing": "Spracovávanie…", + "username.taken": "Používateľské meno je obsadené. Skúste iné", "video.close": "Zavri video", "video.download": "Stiahni súbor", "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 9750784bbc..f64952f7b5 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Vidljivo samo pomenutim korisnicima", "privacy.direct.short": "Samo pomenute osobe", "privacy.private.long": "Vidljivo samo pratiocima", - "privacy.private.short": "Samo pratiocima", + "privacy.private.short": "Samo pratioci", "privacy.public.long": "Vidljivo za sve", "privacy.public.short": "Javno", "privacy.unlisted.long": "Vidljivo svima, ali isključeno iz funkcija otkrivanja", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index bb4739cbcc..130b28bc74 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Видљиво само поменутим корисницима", "privacy.direct.short": "Само поменуте особе", "privacy.private.long": "Видљиво само пратиоцима", - "privacy.private.short": "Само пратиоцима", + "privacy.private.short": "Само пратиоци", "privacy.public.long": "Видљиво за све", "privacy.public.short": "Јавно", "privacy.unlisted.long": "Видљиво свима, али искључено из функција откривања", diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 085507f8bf..c56e76e346 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -149,6 +149,7 @@ fa: scopes: admin:read: خواندن تمام داده‌ها روی کارساز admin:read:accounts: خواندن اطّلاعات حساس از همهٔ حساب‌ها + admin:read:canonical_email_blocks: خواندن اطّلاعات حسّاس از همهٔ انسدادهای رایانامهٔ متعارف admin:read:domain_allows: خواندن اطّلاعات حساس از همهٔ دامنه ها اجازه داده شد admin:read:domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های مسدودشده admin:read:email_domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های رایانامه های مسدودشده @@ -156,6 +157,7 @@ fa: admin:read:reports: خواندن اطّلاعات حساس از همهٔ گزارش‌ها و حساب‌های گزارش‌شده admin:write: تغییر تمام داده‌ها روی کارساز admin:write:accounts: انجام کنش مدیریتی روی حساب‌ها + admin:write:canonical_email_blocks: انجام کنش‌های نظارتی روی همهٔ انسدادهای رایانامهٔ متعارف admin:write:domain_allows: انجام کنش مدیریتی روی اجازه‌های دامنه admin:write:domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنه admin:write:email_domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنهٔ رایانامه diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 8d030274e7..0f263b00d5 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -182,7 +182,7 @@ fi: write: muokkaa kaikkia tilisi tietoja write:accounts: muokkaa profiiliasi write:blocks: estä tilejä ja verkkotunnuksia - write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:bookmarks: lisää julkaisuja kirjanmerkkeihin write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut write:filters: luo suodattimia diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 466cb95a24..2043d327a1 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1,7 +1,7 @@ --- fi: about: - about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: Ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu! Pidä tietosi ominasi Mastodonilla!' + about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu rakenne! Pidä tietosi ominasi Mastodonin avulla!' contact_missing: Ei asetettu contact_unavailable: Ei saatavilla hosted_on: Mastodon palvelimella %{domain} @@ -262,8 +262,8 @@ fi: disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" - enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" - enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" + enable_sign_in_token_auth_user_html: "%{name} otti todennuksen sähköpostivaltuutuksella käyttöön käyttäjälle %{target}" + enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" @@ -584,7 +584,7 @@ fi: one: "%{count} ilmoitus" other: "%{count} ilmoitusta" action_log: Tarkastusloki - action_taken_by: Toimenpiteen tekijä + action_taken_by: Toimen tehnyt actions: delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. @@ -673,7 +673,7 @@ fi: moderation: Valvonta special: Erikois delete: Poista - description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. + description_html: "Käyttäjärooleilla voit muokata, mihin toimintoihin ja alueisiin käyttäjäsi pääsevät käsiksi." edit: Muokkaa "%{name}" roolia everyone: Oletus käyttöoikeudet everyone_full_description_html: Tämä on perusrooli joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. @@ -945,11 +945,11 @@ fi: webhooks: add_new: Lisää päätepiste delete: Poista - description_html: "Webhook mahdollistaa Mastodonin työntää reaaliaikaisia ilmoituksia valituista tapahtumista omaan sovellukseesi, joten sovelluksesi voi laukaista automaattisesti reaktioita." + description_html: "Webhookin avulla Mastodon voi puskea sovellukseesi reaaliaikaisia ilmoituksia valituista tapahtumista, jotta sovelluksesi voi laukaista reaktioita automaattisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Pois käytöstä edit: Muokkaa päätepistettä - empty: Sinulla ei ole vielä määritetty webhook-päätepisteitä. + empty: Et ole vielä määrittänyt webhook-päätepisteitä. enable: Ota käyttöön enabled: Aktiivinen enabled_events: @@ -1150,7 +1150,7 @@ fi: username_unavailable: Käyttäjänimesi ei tule saataville enää uudestaan disputes: strikes: - action_taken: Toteutetut toimet + action_taken: Tehty toimi appeal: Vetoomus appeal_approved: Tähän valitukseen on haettu muutosta, eikä se ole enää voimassa appeal_rejected: Valitus on hylätty @@ -1389,13 +1389,13 @@ fi: confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: - favourite: sähköpostit ilmoituksille - follow: seuraa sähköpostin ilmoituksia - follow_request: seuraa pyyntöjä sähköpostiin - mention: mainitse sähköpostin ilmoitukset - reblog: tehosta sähköpostien ilmoituksia + favourite: sähköposti-ilmoituksia suosikkeihin lisäämisistä + follow: sähköposti-ilmoituksia seuraamisista + follow_request: sähköposti-ilmoituksia seuraamispyynnöistä + mention: sähköposti-ilmoituksia maininnoista + reblog: sähköposti-ilmoituksia tehostuksista resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. - success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. + success_html: Sinulle ei enää lähetetä Mastodonin %{type} palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: validations: @@ -1812,7 +1812,7 @@ fi: suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili - edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. + edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' @@ -1847,7 +1847,7 @@ fi: success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain nickname_hint: Anna uuden suojausaivaimesi lempinimi - not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa + not_enabled: Et ole vielä ottanut WebAuthn-ohjelmaa käyttöön not_supported: Tämä selain ei tue suojausavaimia otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b18405fb65..6a72c1ca14 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -770,12 +770,12 @@ ja: critical_update: "※緊急 (速やかに適用してください)" description: Mastodonサーバーはいつでも最新の状態を保ち、新しい機能や修正を利用できるようにしておくことをおすすめします。またセキュリティの問題が発生した場合は、速やかにMastodonをアップデートすることが大切です。Mastodonは30分おきにアップデートを確認し、通知設定に応じて新しいアップデートをメールで通知します。 documentation_link: もっと見る - release_notes: 更新情報 + release_notes: リリースノート title: 利用可能なアップデート type: アップデートの種別 types: major: メジャーリリース - minor: リリース + minor: マイナーリリース patch: パッチ (バグ修正のみ) version: バージョン statuses: diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 1eec9a9317..1925ba77f3 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,7 +3,7 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. + discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta. @@ -49,7 +49,7 @@ fi: header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin - locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli + locale: Käyttöliittymän, sähköpostien ja puskuilmoitusten kieli password: Käytä vähintään 8 merkkiä phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. @@ -136,7 +136,7 @@ fi: position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: events: Valitse lähetettävät tapahtumat - template: Luo oma JSON-hyötykuorma käyttäen muuttujainterpolointia. Jättäessäsi kentän tyhjäksi, käytetään vakio-JSON-kuormaa. + template: Luo oma JSON-hyötykuorma käyttäen muuttujien interpolointia. Jätä kenttä tyhjäksi käyttääksesi vakio-JSON-kuormaa. url: Mihin tapahtumat lähetetään labels: account: From 1e2d4975cfcc064b3cf40760b2bb66b3a26e2a40 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:20:04 +0200 Subject: [PATCH 047/237] Fix import progress not updating on certain failures (#27247) --- app/workers/import/row_worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/import/row_worker.rb b/app/workers/import/row_worker.rb index 09dd6ce736..c86900e6ad 100644 --- a/app/workers/import/row_worker.rb +++ b/app/workers/import/row_worker.rb @@ -8,7 +8,7 @@ class Import::RowWorker sidekiq_retries_exhausted do |msg, _exception| ActiveRecord::Base.connection_pool.with_connection do # Increment the total number of processed items, and bump the state of the import if needed - bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:id) + bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:bulk_import_id) BulkImport.progress!(bulk_import_id) unless bulk_import_id.nil? end end From 7e7d6e695b5b7ef8d8c10b1d9ac79375ca1b8209 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:42:52 +0200 Subject: [PATCH 048/237] Fix incorrectly keeping outdated update notices absent from the API endpoint (#27021) --- app/services/software_update_check_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index 49b92f104d..c8ce1753f5 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -35,11 +35,13 @@ class SoftwareUpdateCheckService < BaseService end def process_update_notices!(update_notices) - return if update_notices.blank? || update_notices['updatesAvailable'].blank? + return if update_notices.blank? || update_notices['updatesAvailable'].nil? # Clear notices that are not listed by the update server anymore SoftwareUpdate.where.not(version: update_notices['updatesAvailable'].pluck('version')).delete_all + return if update_notices['updatesAvailable'].blank? + # Check if any of the notices is new, and issue notifications known_versions = SoftwareUpdate.where(version: update_notices['updatesAvailable'].pluck('version')).pluck(:version) new_update_notices = update_notices['updatesAvailable'].filter { |notice| known_versions.exclude?(notice['version']) } From 5e56f3db654bc48ce86361db346a278a975022e2 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 10:09:00 +0200 Subject: [PATCH 049/237] Change some worker lock TTLs (#27246) --- app/workers/account_deletion_worker.rb | 2 +- .../activitypub/synchronize_featured_collection_worker.rb | 2 +- .../activitypub/synchronize_featured_tags_collection_worker.rb | 2 +- app/workers/activitypub/update_distribution_worker.rb | 2 +- app/workers/admin/account_deletion_worker.rb | 2 +- app/workers/admin/domain_purge_worker.rb | 2 +- app/workers/publish_scheduled_status_worker.rb | 2 +- app/workers/resolve_account_worker.rb | 2 +- app/workers/scheduler/indexing_scheduler.rb | 2 +- app/workers/scheduler/scheduled_statuses_scheduler.rb | 2 +- app/workers/verify_account_links_worker.rb | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index b501511728..e4f943fbd1 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -3,7 +3,7 @@ class AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id, options = {}) account = Account.find(account_id) diff --git a/app/workers/activitypub/synchronize_featured_collection_worker.rb b/app/workers/activitypub/synchronize_featured_collection_worker.rb index f67d693cb3..7a187d7f53 100644 --- a/app/workers/activitypub/synchronize_featured_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, options = {}) options = { note: true, hashtag: false }.deep_merge(options.deep_symbolize_keys) diff --git a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb index 14af4f725c..570415c821 100644 --- a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedTagsCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, url) ActivityPub::FetchFeaturedTagsCollectionService.new.call(Account.find(account_id), url) diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb index d0391bb6f6..a04ac621f3 100644 --- a/app/workers/activitypub/update_distribution_worker.rb +++ b/app/workers/activitypub/update_distribution_worker.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ActivityPub::UpdateDistributionWorker < ActivityPub::RawDistributionWorker - sidekiq_options queue: 'push', lock: :until_executed + sidekiq_options queue: 'push', lock: :until_executed, lock_ttl: 1.day.to_i # Distribute an profile update to servers that might have a copy # of the account in question diff --git a/app/workers/admin/account_deletion_worker.rb b/app/workers/admin/account_deletion_worker.rb index 6e0eb331be..5dfdfb6e73 100644 --- a/app/workers/admin/account_deletion_worker.rb +++ b/app/workers/admin/account_deletion_worker.rb @@ -3,7 +3,7 @@ class Admin::AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id) DeleteAccountService.new.call(Account.find(account_id), reserve_username: true, reserve_email: true) diff --git a/app/workers/admin/domain_purge_worker.rb b/app/workers/admin/domain_purge_worker.rb index 095232a6d7..6c5250b660 100644 --- a/app/workers/admin/domain_purge_worker.rb +++ b/app/workers/admin/domain_purge_worker.rb @@ -3,7 +3,7 @@ class Admin::DomainPurgeWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(domain) PurgeDomainService.new.call(domain) diff --git a/app/workers/publish_scheduled_status_worker.rb b/app/workers/publish_scheduled_status_worker.rb index ce42f7be7c..aa5c4a834a 100644 --- a/app/workers/publish_scheduled_status_worker.rb +++ b/app/workers/publish_scheduled_status_worker.rb @@ -3,7 +3,7 @@ class PublishScheduledStatusWorker include Sidekiq::Worker - sidekiq_options lock: :until_executed + sidekiq_options lock: :until_executed, lock_ttl: 1.hour.to_i def perform(scheduled_status_id) scheduled_status = ScheduledStatus.find(scheduled_status_id) diff --git a/app/workers/resolve_account_worker.rb b/app/workers/resolve_account_worker.rb index 2b5be6d1b2..4ae2442af5 100644 --- a/app/workers/resolve_account_worker.rb +++ b/app/workers/resolve_account_worker.rb @@ -3,7 +3,7 @@ class ResolveAccountWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(uri) ResolveAccountService.new.call(uri) diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb index ff1b744442..5c985e25a0 100644 --- a/app/workers/scheduler/indexing_scheduler.rb +++ b/app/workers/scheduler/indexing_scheduler.rb @@ -5,7 +5,7 @@ class Scheduler::IndexingScheduler include Redisable include DatabaseHelper - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i IMPORT_BATCH_SIZE = 1000 SCAN_BATCH_SIZE = 10 * IMPORT_BATCH_SIZE diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb index b5801248f2..fe60d5524e 100644 --- a/app/workers/scheduler/scheduled_statuses_scheduler.rb +++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::ScheduledStatusesScheduler include Sidekiq::Worker - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.hour.to_i def perform publish_scheduled_statuses! diff --git a/app/workers/verify_account_links_worker.rb b/app/workers/verify_account_links_worker.rb index f606e6c26f..ad27f450b7 100644 --- a/app/workers/verify_account_links_worker.rb +++ b/app/workers/verify_account_links_worker.rb @@ -3,7 +3,7 @@ class VerifyAccountLinksWorker include Sidekiq::Worker - sidekiq_options queue: 'default', retry: false, lock: :until_executed + sidekiq_options queue: 'default', retry: false, lock: :until_executed, lock_ttl: 1.hour.to_i def perform(account_id) account = Account.find(account_id) From e95d25e1013b6328457b81bd98e8d6a841d45ec2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:47:28 +0200 Subject: [PATCH 050/237] New Crowdin Translations (automated) (#27260) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/lv.json | 6 ++-- app/javascript/mastodon/locales/si.json | 35 ++++++++++------------ app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.hr.yml | 13 ++++++++ config/locales/hr.yml | 5 ++++ config/locales/simple_form.cy.yml | 5 ++++ 6 files changed, 42 insertions(+), 24 deletions(-) diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3f2c74cbac..aab7b9a8fb 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,7 +9,7 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", @@ -26,7 +26,7 @@ "account.domain_blocked": "Domēns ir bloķēts", "account.edit_profile": "Rediģēt profilu", "account.enable_notifications": "Paziņot man, kad @{name} publicē ierakstu", - "account.endorse": "Izcelt profilā", + "account.endorse": "Izcelts profilā", "account.featured_tags.last_status_at": "Beidzamā ziņa {date}", "account.featured_tags.last_status_never": "Ierakstu nav", "account.featured_tags.title": "{name} izceltie tēmturi", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 27c19adf8e..2c6979b018 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -100,7 +100,7 @@ "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", - "compose_form.publish_form": "Publish", + "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", @@ -160,7 +160,7 @@ "emoji_button.symbols": "සංකේත", "emoji_button.travel": "චාරිකා සහ ස්ථාන", "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", - "empty_column.account_timeline": "මෙහි දත් නැත!", + "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", @@ -240,7 +240,7 @@ "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", - "keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න", + "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", "lightbox.close": "වසන්න", @@ -253,7 +253,7 @@ "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", "lists.delete": "ලේඛනය මකන්න", "lists.edit": "ලේඛනය සංස්කරණය", - "lists.edit.submit": "මාතෘකාව වෙනස් කරන්න", + "lists.edit.submit": "සිරැසිය සංශෝධනය", "lists.new.create": "ලැයිස්තුව එකතු කරන්න", "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", @@ -346,14 +346,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "picture_in_picture.restore": "ආපහු දාන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", - "poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}", - "poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}", "poll.vote": "ඡන්දය", - "poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා", - "poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}", + "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", "poll_button.add_poll": "මත විමසුමක් යොදන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", @@ -363,13 +359,10 @@ "privacy.private.short": "අනුගාමිකයින් පමණි", "privacy.public.long": "සැමට දිස්වෙයි", "privacy.public.short": "ප්‍රසිද්ධ", - "privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය", - "privacy.unlisted.short": "ලැයිස්තුගත නොකළ", + "privacy_policy.title": "රහස්‍යතා ප්‍රතිපත්තිය", "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", - "regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!", "relative_time.days": "ද. {number}", - "relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -381,10 +374,9 @@ "relative_time.today": "අද", "reply_indicator.cancel": "අවලංගු කරන්න", "report.block": "අවහිර", - "report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.", "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", - "report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි", + "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", @@ -426,8 +418,12 @@ "search_results.all": "සියල්ල", "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", + "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", - "sign_in_banner.sign_in": "Sign in", + "search_results.title": "{q} සොයන්න", + "server_banner.learn_more": "තව දැනගන්න", + "sign_in_banner.create_account": "ගිණුමක් සාදන්න", + "sign_in_banner.sign_in": "පිවිසෙන්න", "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", "status.block": "@{name} අවහිර", @@ -455,12 +451,11 @@ "status.read_more": "තව කියවන්න", "status.reblog": "බූස්ට් කරන්න", "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogged_by": "{name} වැඩි කරන ලදී", "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", - "status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න", + "status.replyAll": "නූලට පිළිතුරු දෙන්න", "status.report": "@{name} වාර්තාව", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", @@ -508,10 +503,10 @@ "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", "upload_modal.detect_text": "රූපයෙහි පෙළ අනාවරණය", "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය", - "upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.", - "upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්", + "upload_modal.preparing_ocr": "OCR සඳහා සැරසෙමින්…", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", + "upload_progress.processing": "සැකසෙමින්…", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a6694b21df..8b5f7de2f3 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -373,7 +373,7 @@ "lightbox.previous": "上一步", "limited_account_hint.action": "一律顯示個人檔案", "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", - "link_preview.author": "按照 {name}", + "link_preview.author": "由 {name} 提供", "lists.account.add": "新增至列表", "lists.account.remove": "從列表中移除", "lists.delete": "刪除列表", diff --git a/config/locales/activerecord.hr.yml b/config/locales/activerecord.hr.yml index 98ca8155fd..b095244dd6 100644 --- a/config/locales/activerecord.hr.yml +++ b/config/locales/activerecord.hr.yml @@ -5,3 +5,16 @@ hr: poll: expires_at: Krajnji rok options: Opcije + user: + email: E-mail adresa + password: Lozinka + user/account: + username: Korisničko ime + user/invite_request: + text: Razlog + errors: + models: + account: + attributes: + username: + invalid: mora sadržavati samo slova, brojeve i _ diff --git a/config/locales/hr.yml b/config/locales/hr.yml index d1e6728d42..aa7ee760ba 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -27,12 +27,17 @@ hr: new_email: Nova e-pošta submit: Promijeni e-poštu title: Promjena e-pošte za %{username} + change_role: + changed_msg: Uloga uspješno dodijeljena! + label: Promjeni ulogu confirm: Potvrdi confirmed: Potvrđeno confirming: Potvrđivanje custom: Prilagođeno delete: Izbriši podatke deleted: Izbrisano + disable: Zamrzni + disable_two_factor_authentication: Onemogući 2FA display_name: Prikazano ime domain: Domena edit: Uredi diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 70194a1e0c..ddc1b1b935 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -292,7 +292,11 @@ cy: reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd software_updates: + all: Rhoi gwybod am bob ddiweddariad + critical: Rhoi gwybod am ddiweddariadau critigol yn unig label: Mae fersiwn Mastodon newydd ar gael + none: Byth rhoi gwybod am ddiweddariadau (nid argymhellir) + patch: Rhoi gwybod am ddiweddariadau trwsio byg trending_tag: Mae pwnc llosg newydd angen adolygiad rule: text: Rheol @@ -319,6 +323,7 @@ cy: url: URL diweddbwynt 'no': Na not_recommended: Heb ei argymell + overridden: Wedi'i gwrth-wneud recommended: Argymhellwyd required: mark: "*" From 770fd993ecaf2f35ea08fc7ad7a22711417fe3e5 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Tue, 3 Oct 2023 10:47:50 +0200 Subject: [PATCH 051/237] Fix importer returning negative row estimates (#27258) --- app/lib/importer/base_importer.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/importer/base_importer.rb b/app/lib/importer/base_importer.rb index a21557d303..7688426b48 100644 --- a/app/lib/importer/base_importer.rb +++ b/app/lib/importer/base_importer.rb @@ -34,7 +34,9 @@ class Importer::BaseImporter # Estimate the amount of documents that would be indexed. Not exact! # @returns [Integer] def estimate! - ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples AS estimate FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['estimate'].to_i } + reltuples = ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['reltuples'].to_i } + # If the table has never yet been vacuumed or analyzed, reltuples contains -1 + [reltuples, 0].max end # Import data from the database into the index From e836d078bba90f2ba70ad385756d98745331ad47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:48:05 +0200 Subject: [PATCH 052/237] Update dependency haml_lint to v0.51.0 (#27250) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0535d4ee45..33dc8cb9b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -324,7 +324,7 @@ GEM ruby-progressbar (~> 1.4) globalid (1.1.0) activesupport (>= 5.0) - haml (6.1.2) + haml (6.2.0) temple (>= 0.8.2) thor tilt @@ -333,8 +333,8 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.50.0) - haml (>= 4.0, < 6.2) + haml_lint (0.51.0) + haml (>= 4.0) parallel (~> 1.10) rainbow rubocop (>= 1.0) @@ -747,7 +747,7 @@ GEM climate_control (>= 0.0.3, < 1.0) test-prof (1.2.3) thor (1.2.2) - tilt (2.2.0) + tilt (2.3.0) timeout (0.4.0) tpm-key_attestation (0.12.0) bindata (~> 2.4) @@ -773,7 +773,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - unicode-display_width (2.4.2) + unicode-display_width (2.5.0) uri (0.12.2) validate_email (0.1.6) activemodel (>= 3.0) From ad637eacd1155c37e78615bdab6deb7c520dba56 Mon Sep 17 00:00:00 2001 From: jsgoldstein Date: Tue, 3 Oct 2023 04:48:32 -0400 Subject: [PATCH 053/237] Add a test case for ES8 (#27248) --- .github/workflows/test-ruby.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 343dc36ca1..0d0215bc06 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -282,8 +282,8 @@ jobs: ports: - 6379:6379 - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.17.13 + search: + image: ${{ matrix.search-image }} env: discovery.type: single-node xpack.security.enabled: false @@ -313,6 +313,11 @@ jobs: - '3.0' - '3.1' - '.ruby-version' + search-image: + - docker.elastic.co/elasticsearch/elasticsearch:7.17.13 + include: + - ruby-version: '.ruby-version' + search-image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2 steps: - uses: actions/checkout@v4 From 6320c52630cb0e669f25b860c514b745a0b0bdf8 Mon Sep 17 00:00:00 2001 From: David Aaron <1858430+suddjian@users.noreply.github.com> Date: Tue, 3 Oct 2023 02:48:57 -0700 Subject: [PATCH 054/237] Change min age of backup policy from 1 week to 6 days (#27200) --- app/policies/backup_policy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/policies/backup_policy.rb b/app/policies/backup_policy.rb index 0ef89a8d0c..86b8efbe96 100644 --- a/app/policies/backup_policy.rb +++ b/app/policies/backup_policy.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class BackupPolicy < ApplicationPolicy - MIN_AGE = 1.week + MIN_AGE = 6.days def create? user_signed_in? && current_user.backups.where('created_at >= ?', MIN_AGE.ago).count.zero? From 5a437edc7f22d5797e5af29d9b450a03eccec304 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 3 Oct 2023 04:52:21 -0500 Subject: [PATCH 055/237] Keep version string displayed without breakpoints in UI (#26986) --- .../mastodon/features/ui/components/link_footer.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/link_footer.jsx b/app/javascript/mastodon/features/ui/components/link_footer.jsx index 7aaa887ac6..9585df2ec4 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.jsx +++ b/app/javascript/mastodon/features/ui/components/link_footer.jsx @@ -100,7 +100,7 @@ class LinkFooter extends PureComponent { {DividingCircle} {DividingCircle} - v{version} + v{version}

); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index aac49a389b..2e305ed759 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9009,6 +9009,10 @@ noscript { color: $dark-text-color; margin-bottom: 20px; + .version { + white-space: nowrap; + } + strong { font-weight: 500; } From 4e55001e65a10fc672a2a0a9520023f936d64dc7 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:32 +0200 Subject: [PATCH 056/237] Add a short-lived lock to trend refresh scheduler (#27253) --- app/workers/scheduler/trends/refresh_scheduler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/scheduler/trends/refresh_scheduler.rb b/app/workers/scheduler/trends/refresh_scheduler.rb index b559ba46b4..85c000deea 100644 --- a/app/workers/scheduler/trends/refresh_scheduler.rb +++ b/app/workers/scheduler/trends/refresh_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::Trends::RefreshScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i def perform Trends.refresh! From ceb365c41950283f601058e38e779565eca43b31 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:42 +0200 Subject: [PATCH 057/237] Fix boosts of local users being filtered in account timelines (#27204) --- app/lib/account_statuses_filter.rb | 6 +++++- .../account_statuses_filter_spec.rb | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) rename spec/{models => lib}/account_statuses_filter_spec.rb (91%) diff --git a/app/lib/account_statuses_filter.rb b/app/lib/account_statuses_filter.rb index a5aca96601..b34ebb4777 100644 --- a/app/lib/account_statuses_filter.rb +++ b/app/lib/account_statuses_filter.rb @@ -60,8 +60,12 @@ class AccountStatusesFilter .where(reblog_of_id: nil) .or( scope + # This is basically `Status.not_domain_blocked_by_account(current_account)` + # and `Status.not_excluded_by_account(current_account)` but on the + # `reblog` association. Unfortunately, there seem to be no clean way + # to re-use those scopes in our case. + .where(reblog: { accounts: { domain: nil } }).or(scope.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } })) .where.not(reblog: { account_id: current_account.excluded_from_timeline_account_ids }) - .where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } }) ) end diff --git a/spec/models/account_statuses_filter_spec.rb b/spec/lib/account_statuses_filter_spec.rb similarity index 91% rename from spec/models/account_statuses_filter_spec.rb rename to spec/lib/account_statuses_filter_spec.rb index 0cf6453fe3..c821eb4bac 100644 --- a/spec/models/account_statuses_filter_spec.rb +++ b/spec/lib/account_statuses_filter_spec.rb @@ -202,7 +202,7 @@ RSpec.describe AccountStatusesFilter do context 'when blocking a reblogged domain' do let(:other_account) { Fabricate(:account, domain: 'example.com') } let(:reblogging_status) { Fabricate(:status, account: other_account) } - let(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } before do current_account.block_domain!(other_account.domain) @@ -213,6 +213,20 @@ RSpec.describe AccountStatusesFilter do end end + context 'when blocking an unrelated domain' do + let(:other_account) { Fabricate(:account, domain: nil) } + let(:reblogging_status) { Fabricate(:status, account: other_account, visibility: 'public') } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + + before do + current_account.block_domain!('example.com') + end + + it 'returns the reblog from the non-blocked domain' do + expect(subject.results.pluck(:id)).to include(reblog.id) + end + end + context 'when muting a reblogged account' do let(:reblog) { status_with_reblog!('public') } From 37bbd3c1064380a756b4e821655d7697105f99f5 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 13:12:39 +0200 Subject: [PATCH 058/237] Fix double scroll bars in some columns in advanced interface (#27187) --- app/javascript/mastodon/components/column.jsx | 6 -- .../mastodon/features/explore/index.jsx | 72 +++++++++---------- .../mastodon/features/explore/links.jsx | 2 +- .../mastodon/features/explore/results.jsx | 2 +- .../mastodon/features/explore/suggestions.jsx | 2 +- .../mastodon/features/explore/tags.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 42 ++++++----- .../styles/mastodon/components.scss | 3 + 8 files changed, 62 insertions(+), 69 deletions(-) diff --git a/app/javascript/mastodon/components/column.jsx b/app/javascript/mastodon/components/column.jsx index d737bd347c..cf9df3ba27 100644 --- a/app/javascript/mastodon/components/column.jsx +++ b/app/javascript/mastodon/components/column.jsx @@ -22,12 +22,6 @@ export default class Column extends PureComponent { scrollable = document.scrollingElement; } else { scrollable = this.node.querySelector('.scrollable'); - - // Some columns have nested `.scrollable` containers, with the outer one - // being a wrapper while the actual scrollable content is deeper. - if (scrollable.classList.contains('scrollable--flex')) { - scrollable = scrollable?.querySelector('.scrollable') || scrollable; - } } if (!scrollable) { diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 1a66adc87c..fefdc23fab 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -67,47 +67,45 @@ class Explore extends PureComponent {
-
- {isSearching ? ( - - ) : ( - <> -
- - + {isSearching ? ( + + ) : ( + <> +
+ + + + + + + + + {signedIn && ( + + + )} - - - + + + +
- {signedIn && ( - - - - )} + + + + + + + + - - - -
- - - - - - - - - - - - {intl.formatMessage(messages.title)} - - - - )} -
+ + {intl.formatMessage(messages.title)} + + + + )} ); } diff --git a/app/javascript/mastodon/features/explore/links.jsx b/app/javascript/mastodon/features/explore/links.jsx index 663aa6d80f..e610c84d41 100644 --- a/app/javascript/mastodon/features/explore/links.jsx +++ b/app/javascript/mastodon/features/explore/links.jsx @@ -52,7 +52,7 @@ class Links extends PureComponent { } return ( -
+
{banner} {isLoading ? () : links.map((link, i) => ( diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index c6fe9b78e0..4c23d6422d 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -204,7 +204,7 @@ class Results extends PureComponent {
-
+
+
{isLoading ? : suggestions.map(suggestion => ( ))} diff --git a/app/javascript/mastodon/features/explore/tags.jsx b/app/javascript/mastodon/features/explore/tags.jsx index 1a4d259690..11e0147214 100644 --- a/app/javascript/mastodon/features/explore/tags.jsx +++ b/app/javascript/mastodon/features/explore/tags.jsx @@ -51,7 +51,7 @@ class Tags extends PureComponent { } return ( -
+
{banner} {isLoading ? () : hashtags.map(hashtag => ( diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index e5b47d3fe0..efde58a5c0 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -169,32 +169,30 @@ const Firehose = ({ feedType, multiColumn }) => { -
-
- - - +
+ + + - - - + + + - - - -
- - + + +
+ + {intl.formatMessage(messages.title)} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 2e305ed759..f0380de5bf 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8279,6 +8279,9 @@ noscript { flex: 1 1 auto; display: flex; flex-direction: column; + background: $ui-base-color; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } .story { From 3a3b23fdfad49dd26856e523ca45009304747c37 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 3 Oct 2023 20:42:38 +0900 Subject: [PATCH 059/237] Yarn lock --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index cc3d70f0ee..dd7523ff34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1103,7 +1103,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.12.1", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.1", "@babel/runtime@^7.22.5", "@babel/runtime@^7.9.2": version "7.23.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== @@ -10168,7 +10168,7 @@ react-redux-loading-bar@^5.0.4: prop-types "^15.7.2" react-lifecycles-compat "^3.0.4" -react-redux@^8.0.4: +react-redux@^8.0.4, react-redux@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== From 6d8a9bc8c71caeda24747c1520e40981616250f3 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 3 Oct 2023 21:33:28 +0900 Subject: [PATCH 060/237] Fix test --- spec/services/process_references_service_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/services/process_references_service_spec.rb b/spec/services/process_references_service_spec.rb index 8d69e42e5a..37818b2d45 100644 --- a/spec/services/process_references_service_spec.rb +++ b/spec/services/process_references_service_spec.rb @@ -20,7 +20,7 @@ RSpec.describe ProcessReferencesService, type: :service do describe 'posting new status' do subject do - target_status.account.user.settings('allow_quote', false) unless allow_quote + target_status.account.user.settings['allow_quote'] = false unless allow_quote target_status.account.user&.save described_class.new.call(status, reference_parameters, urls: urls, fetch_remote: fetch_remote, quote_urls: quote_urls) From a202f8b020437f69f6c399d796d4ddd8dcb4de49 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 3 Oct 2023 21:37:40 +0900 Subject: [PATCH 061/237] Bump version to 5.3 LTS --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index c651a9761d..d12507eb08 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def kmyblue_minor - 2 + 3 end def kmyblue_flag From 8bb4706e11658b633ee589138544a0b5845829f1 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Tue, 3 Oct 2023 08:58:40 -0400 Subject: [PATCH 062/237] Move migration_helpers Rubocop ignore to config (#24236) --- .rubocop.yml | 1 + lib/mastodon/migration_helpers.rb | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 4684ef06db..64ec766b22 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -28,6 +28,7 @@ AllCops: - 'Vagrantfile' - 'vendor/**/*' - 'lib/json_ld/*' # Generated files + - 'lib/mastodon/migration_helpers.rb' # Vendored from GitLab - 'lib/templates/**/*' # Reason: Prefer Hashes without extreme indentation diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb index c382b5fbd5..a92a8767ce 100644 --- a/lib/mastodon/migration_helpers.rb +++ b/lib/mastodon/migration_helpers.rb @@ -37,7 +37,6 @@ # This is bad form, but there are enough differences that it's impractical to do # otherwise: -# rubocop:disable all module Mastodon module MigrationHelpers @@ -989,5 +988,3 @@ into similar problems in the future (e.g. when new tables are created). end end end - -# rubocop:enable all From e715da6d25e9ac825b7b2e02d01153b335b71394 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 3 Oct 2023 09:00:40 -0400 Subject: [PATCH 063/237] Fix haml-lint Rubocop `Rails/*` cops (#26042) --- .haml-lint_todo.yml | 4 ++-- app/helpers/admin/announcements_helper.rb | 11 +++++++++++ app/views/admin/accounts/show.html.haml | 2 +- app/views/admin/announcements/edit.html.haml | 6 +++--- app/views/admin/announcements/new.html.haml | 6 +++--- app/views/admin/reports/actions/preview.html.haml | 2 +- app/views/admin/statuses/show.html.haml | 2 +- app/views/admin/tags/show.html.haml | 2 +- app/views/auth/registrations/new.html.haml | 2 +- app/views/disputes/strikes/show.html.haml | 4 ++-- app/views/statuses/_detailed_status.html.haml | 2 +- app/views/user_mailer/warning.html.haml | 4 ++-- 12 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 app/helpers/admin/announcements_helper.rb diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 64f5c0cc75..69937c4c48 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2023-09-28 10:42:25 -0400 using Haml-Lint version 0.50.0. +# on 2023-10-03 08:32:28 -0400 using Haml-Lint version 0.51.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -15,7 +15,7 @@ linters: UnnecessaryStringOutput: enabled: false - # Offense count: 59 + # Offense count: 44 RuboCop: enabled: false diff --git a/app/helpers/admin/announcements_helper.rb b/app/helpers/admin/announcements_helper.rb new file mode 100644 index 0000000000..97abe8e011 --- /dev/null +++ b/app/helpers/admin/announcements_helper.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Admin::AnnouncementsHelper + def datetime_pattern + '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}' + end + + def datetime_placeholder + Time.zone.now.strftime('%FT%R') + end +end diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 44867d0a26..7801ef1913 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -72,7 +72,7 @@ .dashboard__counters__label= t 'admin.accounts.login_status' - if @account.local? && @account.user.nil? - = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.where(reference_account_id: @account.id).exists? + = link_to t('admin.accounts.unblock_email'), unblock_email_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unblock_email, @account) && CanonicalEmailBlock.exists?(reference_account_id: @account.id) - else .table-wrapper %table.table.inline-table diff --git a/app/views/admin/announcements/edit.html.haml b/app/views/admin/announcements/edit.html.haml index df1ac455fb..150d98272f 100644 --- a/app/views/admin/announcements/edit.html.haml +++ b/app/views/admin/announcements/edit.html.haml @@ -5,8 +5,8 @@ = render 'shared/error_messages', object: @announcement .fields-group - = f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } - = f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } + = f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } + = f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } .fields-group = f.input :all_day, as: :boolean, wrapper: :with_label @@ -16,7 +16,7 @@ - unless @announcement.published? .fields-group - = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } + = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/announcements/new.html.haml b/app/views/admin/announcements/new.html.haml index cb39672e16..0123632ff4 100644 --- a/app/views/admin/announcements/new.html.haml +++ b/app/views/admin/announcements/new.html.haml @@ -5,8 +5,8 @@ = render 'shared/error_messages', object: @announcement .fields-group - = f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } - = f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } + = f.input :starts_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } + = f.input :ends_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } .fields-group = f.input :all_day, as: :boolean, wrapper: :with_label @@ -15,7 +15,7 @@ = f.input :text, wrapper: :with_block_label .fields-group - = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}(:[0-9]{2}){1,2}', placeholder: Time.now.strftime('%FT%R') } + = f.input :scheduled_at, include_blank: true, wrapper: :with_block_label, html5: true, input_html: { pattern: datetime_pattern, placeholder: datetime_placeholder } .actions = f.button :button, t('.create'), type: :submit diff --git a/app/views/admin/reports/actions/preview.html.haml b/app/views/admin/reports/actions/preview.html.haml index eb67eebe0d..8634bb215c 100644 --- a/app/views/admin/reports/actions/preview.html.haml +++ b/app/views/admin/reports/actions/preview.html.haml @@ -61,7 +61,7 @@ = fa_icon 'link' = media_attachment.file_file_name .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank' do + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - unless status.application.nil? · diff --git a/app/views/admin/statuses/show.html.haml b/app/views/admin/statuses/show.html.haml index e070e5872b..5fda50a94e 100644 --- a/app/views/admin/statuses/show.html.haml +++ b/app/views/admin/statuses/show.html.haml @@ -2,7 +2,7 @@ = t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false)) - content_for :heading_actions do - = link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank' + = link_to t('admin.statuses.open'), ActivityPub::TagManager.instance.url_for(@status), class: 'button', target: '_blank', rel: 'noopener noreferrer' %h3= t('admin.statuses.metadata') diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index 71bce0c0cb..0878887cea 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -9,7 +9,7 @@ .dashboard .dashboard__item - = react_admin_component :counter, measure: 'tag_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_accounts_measure'), href: tag_url(@tag), target: '_blank' + = react_admin_component :counter, measure: 'tag_accounts', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_accounts_measure'), href: tag_url(@tag), target: '_blank', rel: 'noopener noreferrer' .dashboard__item = react_admin_component :counter, measure: 'tag_uses', start_at: @time_period.first, end_at: @time_period.last, params: { id: @tag.id }, label: t('admin.trends.tags.dashboard.tag_uses_measure') .dashboard__item diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index f473a993b0..c001b66c22 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -26,7 +26,7 @@ = f.input :confirm_password, as: :string, placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), autocomplete: 'off' }, hint: false = f.input :website, as: :url, wrapper: :with_label, label: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label': t('simple_form.labels.defaults.honeypot', label: 'Website'), autocomplete: 'off' } - - if approved_registrations? && !@invite.present? + - if approved_registrations? && @invite.blank? %p.lead= t('auth.sign_up.manual_review', domain: site_hostname) .fields-group diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index ce52e470d9..de883bd873 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -25,7 +25,7 @@ - unless @strike.none_action? %p= t "user_mailer.warning.explanation.#{@strike.action}", instance: Rails.configuration.x.local_domain - - unless @strike.text.blank? + - if @strike.text.present? = linkify(@strike.text) - if @strike.report && !@strike.report.other? @@ -57,7 +57,7 @@ = fa_icon 'link' = media_attachment.file_file_name .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank' do + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener noreferrer' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - unless status.application.nil? · diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index 70cfbd6b87..9e171ff592 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -77,4 +77,4 @@ - if user_signed_in? · - = link_to t('statuses.open_in_web'), web_url("@#{status.account.pretty_acct}/#{status.id}"), class: 'detailed-status__application', target: '_blank' + = link_to t('statuses.open_in_web'), web_url("@#{status.account.pretty_acct}/#{status.id}"), class: 'detailed-status__application', target: '_blank', rel: 'noopener noreferrer' diff --git a/app/views/user_mailer/warning.html.haml b/app/views/user_mailer/warning.html.haml index 8a878bead6..5d64e83247 100644 --- a/app/views/user_mailer/warning.html.haml +++ b/app/views/user_mailer/warning.html.haml @@ -39,7 +39,7 @@ - unless @warning.none_action? %p= t "user_mailer.warning.explanation.#{@warning.action}", instance: @instance - - unless @warning.text.blank? + - if @warning.text.present? = linkify(@warning.text) - if @warning.report && !@warning.report.other? @@ -68,7 +68,7 @@ %table.content-section{ cellspacing: 0, cellpadding: 0 } %tbody %tr - %td.content-cell{ class: @statuses.nil? || @statuses.empty? ? '' : 'content-start' } + %td.content-cell{ class: @statuses.blank? ? '' : 'content-start' } %table.column{ cellspacing: 0, cellpadding: 0 } %tbody %tr From 85db3924645ebd20f0259356fa7556a2e8055b36 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Tue, 3 Oct 2023 09:24:12 -0400 Subject: [PATCH 064/237] Autofix Rubocop cops for config/ (#24145) --- .rubocop_todo.yml | 26 ---------- config/application.rb | 10 ++-- config/environments/production.rb | 10 ++-- config/initializers/3_omniauth.rb | 50 +++++++++---------- .../initializers/content_security_policy.rb | 2 +- config/initializers/rack_attack.rb | 6 +-- config/routes.rb | 8 +-- 7 files changed, 43 insertions(+), 69 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index efe369d776..f10abd9c36 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -13,24 +13,6 @@ Bundler/OrderedGems: Exclude: - 'Gemfile' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. -# SupportedHashRocketStyles: key, separator, table -# SupportedColonStyles: key, separator, table -# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit -Layout/HashAlignment: - Exclude: - - 'config/environments/production.rb' - - 'config/initializers/rack_attack.rb' - - 'config/routes.rb' - -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment. -Layout/LeadingCommentSpace: - Exclude: - - 'config/application.rb' - - 'config/initializers/3_omniauth.rb' - # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns. # URISchemes: http, https @@ -38,14 +20,6 @@ Layout/LineLength: Exclude: - 'app/models/account.rb' -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: require_no_space, require_space -Layout/SpaceInLambdaLiteral: - Exclude: - - 'config/environments/production.rb' - - 'config/initializers/content_security_policy.rb' - # Configuration parameters: AllowComments, AllowEmptyLambdas. Lint/EmptyBlock: Exclude: diff --git a/config/application.rb b/config/application.rb index 2a62c37e8b..d98e332339 100644 --- a/config/application.rb +++ b/config/application.rb @@ -5,15 +5,15 @@ require_relative 'boot' require 'rails' require 'active_record/railtie' -#require 'active_storage/engine' +# require 'active_storage/engine' require 'action_controller/railtie' require 'action_view/railtie' require 'action_mailer/railtie' require 'active_job/railtie' -#require 'action_cable/engine' -#require 'action_mailbox/engine' -#require 'action_text/engine' -#require 'rails/test_unit/railtie' +# require 'action_cable/engine' +# require 'action_mailbox/engine' +# require 'action_text/engine' +# require 'rails/test_unit/railtie' require 'sprockets/railtie' # Used to be implicitly required in action_mailbox/engine diff --git a/config/environments/production.rb b/config/environments/production.rb index 4d80a66af6..7da9d62410 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -44,7 +44,7 @@ Rails.application.configure do config.force_ssl = true config.ssl_options = { redirect: { - exclude: -> request { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } + exclude: ->request { request.path.start_with?('/health') || request.headers["Host"].end_with?('.onion') || request.headers["Host"].end_with?('.i2p') } } } @@ -148,11 +148,11 @@ Rails.application.configure do config.action_mailer.delivery_method = ENV.fetch('SMTP_DELIVERY_METHOD', 'smtp').to_sym config.action_dispatch.default_headers = { - 'Server' => 'Mastodon', - 'X-Frame-Options' => 'DENY', + 'Server' => 'Mastodon', + 'X-Frame-Options' => 'DENY', 'X-Content-Type-Options' => 'nosniff', - 'X-XSS-Protection' => '0', - 'Referrer-Policy' => 'same-origin', + 'X-XSS-Protection' => '0', + 'Referrer-Policy' => 'same-origin', } config.x.otp_secret = ENV.fetch('OTP_SECRET') diff --git a/config/initializers/3_omniauth.rb b/config/initializers/3_omniauth.rb index 7520f09e5e..566e7362a5 100644 --- a/config/initializers/3_omniauth.rb +++ b/config/initializers/3_omniauth.rb @@ -76,35 +76,35 @@ Devise.setup do |config| # OpenID Connect Strategy if ENV['OIDC_ENABLED'] == 'true' oidc_options = {} - oidc_options[:display_name] = ENV['OIDC_DISPLAY_NAME'] #OPTIONAL - oidc_options[:issuer] = ENV['OIDC_ISSUER'] if ENV['OIDC_ISSUER'] #NEED - oidc_options[:discovery] = ENV['OIDC_DISCOVERY'] == 'true' if ENV['OIDC_DISCOVERY'] #OPTIONAL (default: false) - oidc_options[:client_auth_method] = ENV['OIDC_CLIENT_AUTH_METHOD'] if ENV['OIDC_CLIENT_AUTH_METHOD'] #OPTIONAL (default: basic) - scope_string = ENV['OIDC_SCOPE'] if ENV['OIDC_SCOPE'] #NEED + oidc_options[:display_name] = ENV['OIDC_DISPLAY_NAME'] # OPTIONAL + oidc_options[:issuer] = ENV['OIDC_ISSUER'] if ENV['OIDC_ISSUER'] # NEED + oidc_options[:discovery] = ENV['OIDC_DISCOVERY'] == 'true' if ENV['OIDC_DISCOVERY'] # OPTIONAL (default: false) + oidc_options[:client_auth_method] = ENV['OIDC_CLIENT_AUTH_METHOD'] if ENV['OIDC_CLIENT_AUTH_METHOD'] # OPTIONAL (default: basic) + scope_string = ENV['OIDC_SCOPE'] if ENV['OIDC_SCOPE'] # NEED scopes = scope_string.split(',') oidc_options[:scope] = scopes.map { |x| x.to_sym } - oidc_options[:response_type] = ENV['OIDC_RESPONSE_TYPE'] if ENV['OIDC_RESPONSE_TYPE'] #OPTIONAL (default: code) - oidc_options[:response_mode] = ENV['OIDC_RESPONSE_MODE'] if ENV['OIDC_RESPONSE_MODE'] #OPTIONAL (default: query) - oidc_options[:display] = ENV['OIDC_DISPLAY'] if ENV['OIDC_DISPLAY'] #OPTIONAL (default: page) - oidc_options[:prompt] = ENV['OIDC_PROMPT'] if ENV['OIDC_PROMPT'] #OPTIONAL - oidc_options[:send_nonce] = ENV['OIDC_SEND_NONCE'] == 'true' if ENV['OIDC_SEND_NONCE'] #OPTIONAL (default: true) - oidc_options[:send_scope_to_token_endpoint] = ENV['OIDC_SEND_SCOPE_TO_TOKEN_ENDPOINT'] == 'true' if ENV['OIDC_SEND_SCOPE_TO_TOKEN_ENDPOINT'] #OPTIONAL (default: true) - oidc_options[:post_logout_redirect_uri] = ENV['OIDC_IDP_LOGOUT_REDIRECT_URI'] if ENV['OIDC_IDP_LOGOUT_REDIRECT_URI'] #OPTIONAL - oidc_options[:uid_field] = ENV['OIDC_UID_FIELD'] if ENV['OIDC_UID_FIELD'] #NEED + oidc_options[:response_type] = ENV['OIDC_RESPONSE_TYPE'] if ENV['OIDC_RESPONSE_TYPE'] # OPTIONAL (default: code) + oidc_options[:response_mode] = ENV['OIDC_RESPONSE_MODE'] if ENV['OIDC_RESPONSE_MODE'] # OPTIONAL (default: query) + oidc_options[:display] = ENV['OIDC_DISPLAY'] if ENV['OIDC_DISPLAY'] # OPTIONAL (default: page) + oidc_options[:prompt] = ENV['OIDC_PROMPT'] if ENV['OIDC_PROMPT'] # OPTIONAL + oidc_options[:send_nonce] = ENV['OIDC_SEND_NONCE'] == 'true' if ENV['OIDC_SEND_NONCE'] # OPTIONAL (default: true) + oidc_options[:send_scope_to_token_endpoint] = ENV['OIDC_SEND_SCOPE_TO_TOKEN_ENDPOINT'] == 'true' if ENV['OIDC_SEND_SCOPE_TO_TOKEN_ENDPOINT'] # OPTIONAL (default: true) + oidc_options[:post_logout_redirect_uri] = ENV['OIDC_IDP_LOGOUT_REDIRECT_URI'] if ENV['OIDC_IDP_LOGOUT_REDIRECT_URI'] # OPTIONAL + oidc_options[:uid_field] = ENV['OIDC_UID_FIELD'] if ENV['OIDC_UID_FIELD'] # NEED oidc_options[:client_options] = {} - oidc_options[:client_options][:identifier] = ENV['OIDC_CLIENT_ID'] if ENV['OIDC_CLIENT_ID'] #NEED - oidc_options[:client_options][:secret] = ENV['OIDC_CLIENT_SECRET'] if ENV['OIDC_CLIENT_SECRET'] #NEED - oidc_options[:client_options][:redirect_uri] = ENV['OIDC_REDIRECT_URI'] if ENV['OIDC_REDIRECT_URI'] #NEED - oidc_options[:client_options][:scheme] = ENV['OIDC_HTTP_SCHEME'] if ENV['OIDC_HTTP_SCHEME'] #OPTIONAL (default: https) - oidc_options[:client_options][:host] = ENV['OIDC_HOST'] if ENV['OIDC_HOST'] #OPTIONAL - oidc_options[:client_options][:port] = ENV['OIDC_PORT'] if ENV['OIDC_PORT'] #OPTIONAL - oidc_options[:client_options][:authorization_endpoint] = ENV['OIDC_AUTH_ENDPOINT'] if ENV['OIDC_AUTH_ENDPOINT'] #NEED when discovery != true - oidc_options[:client_options][:token_endpoint] = ENV['OIDC_TOKEN_ENDPOINT'] if ENV['OIDC_TOKEN_ENDPOINT'] #NEED when discovery != true - oidc_options[:client_options][:userinfo_endpoint] = ENV['OIDC_USER_INFO_ENDPOINT'] if ENV['OIDC_USER_INFO_ENDPOINT'] #NEED when discovery != true - oidc_options[:client_options][:jwks_uri] = ENV['OIDC_JWKS_URI'] if ENV['OIDC_JWKS_URI'] #NEED when discovery != true - oidc_options[:client_options][:end_session_endpoint] = ENV['OIDC_END_SESSION_ENDPOINT'] if ENV['OIDC_END_SESSION_ENDPOINT'] #OPTIONAL + oidc_options[:client_options][:identifier] = ENV['OIDC_CLIENT_ID'] if ENV['OIDC_CLIENT_ID'] # NEED + oidc_options[:client_options][:secret] = ENV['OIDC_CLIENT_SECRET'] if ENV['OIDC_CLIENT_SECRET'] # NEED + oidc_options[:client_options][:redirect_uri] = ENV['OIDC_REDIRECT_URI'] if ENV['OIDC_REDIRECT_URI'] # NEED + oidc_options[:client_options][:scheme] = ENV['OIDC_HTTP_SCHEME'] if ENV['OIDC_HTTP_SCHEME'] # OPTIONAL (default: https) + oidc_options[:client_options][:host] = ENV['OIDC_HOST'] if ENV['OIDC_HOST'] # OPTIONAL + oidc_options[:client_options][:port] = ENV['OIDC_PORT'] if ENV['OIDC_PORT'] # OPTIONAL + oidc_options[:client_options][:authorization_endpoint] = ENV['OIDC_AUTH_ENDPOINT'] if ENV['OIDC_AUTH_ENDPOINT'] # NEED when discovery != true + oidc_options[:client_options][:token_endpoint] = ENV['OIDC_TOKEN_ENDPOINT'] if ENV['OIDC_TOKEN_ENDPOINT'] # NEED when discovery != true + oidc_options[:client_options][:userinfo_endpoint] = ENV['OIDC_USER_INFO_ENDPOINT'] if ENV['OIDC_USER_INFO_ENDPOINT'] # NEED when discovery != true + oidc_options[:client_options][:jwks_uri] = ENV['OIDC_JWKS_URI'] if ENV['OIDC_JWKS_URI'] # NEED when discovery != true + oidc_options[:client_options][:end_session_endpoint] = ENV['OIDC_END_SESSION_ENDPOINT'] if ENV['OIDC_END_SESSION_ENDPOINT'] # OPTIONAL oidc_options[:security] = {} - oidc_options[:security][:assume_email_is_verified] = ENV['OIDC_SECURITY_ASSUME_EMAIL_IS_VERIFIED'] == 'true' #OPTIONAL + oidc_options[:security][:assume_email_is_verified] = ENV['OIDC_SECURITY_ASSUME_EMAIL_IS_VERIFIED'] == 'true' # OPTIONAL config.omniauth :openid_connect, oidc_options end end diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 6ce84a6e42..5fd9199440 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -74,7 +74,7 @@ end # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only # Rails.application.config.content_security_policy_report_only = true -Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } +Rails.application.config.content_security_policy_nonce_generator = ->request { SecureRandom.base64(16) } Rails.application.config.content_security_policy_nonce_directives = %w(style-src) diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index d0af0fe940..429dbd3248 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -142,10 +142,10 @@ class Rack::Attack match_data = request.env['rack.attack.match_data'] headers = { - 'Content-Type' => 'application/json', - 'X-RateLimit-Limit' => match_data[:limit].to_s, + 'Content-Type' => 'application/json', + 'X-RateLimit-Limit' => match_data[:limit].to_s, 'X-RateLimit-Remaining' => '0', - 'X-RateLimit-Reset' => (now + (match_data[:period] - (now.to_i % match_data[:period]))).iso8601(6), + 'X-RateLimit-Reset' => (now + (match_data[:period] - (now.to_i % match_data[:period]))).iso8601(6), } [429, headers, [{ error: I18n.t('errors.429') }.to_json]] diff --git a/config/routes.rb b/config/routes.rb index 5de8562a8c..89c147869a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -84,10 +84,10 @@ Rails.application.routes.draw do devise_for :users, path: 'auth', format: false, controllers: { omniauth_callbacks: 'auth/omniauth_callbacks', - sessions: 'auth/sessions', - registrations: 'auth/registrations', - passwords: 'auth/passwords', - confirmations: 'auth/confirmations', + sessions: 'auth/sessions', + registrations: 'auth/registrations', + passwords: 'auth/passwords', + confirmations: 'auth/confirmations', } get '/users/:username', to: redirect('/@%{username}'), constraints: lambda { |req| req.format.nil? || req.format.html? } From 2f8f92df48326c7ae61679773e64afca46d9a374 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 3 Oct 2023 09:52:47 -0400 Subject: [PATCH 065/237] Fix Elastic check deprecation warning about gem version (#27262) --- .../admin/system_check/elasticsearch_check.rb | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/app/lib/admin/system_check/elasticsearch_check.rb b/app/lib/admin/system_check/elasticsearch_check.rb index 406bb5bcb9..ea35807f30 100644 --- a/app/lib/admin/system_check/elasticsearch_check.rb +++ b/app/lib/admin/system_check/elasticsearch_check.rb @@ -76,14 +76,35 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck end def compatible_version? - return false if running_version.nil? - - Gem::Version.new(running_version) >= Gem::Version.new(required_version) || - Gem::Version.new(compatible_wire_version) >= Gem::Version.new(required_version) + running_version_ok? || compatible_wire_version_ok? rescue ArgumentError false end + def running_version_ok? + return false if running_version.blank? + + gem_version_running >= gem_version_required + end + + def compatible_wire_version_ok? + return false if compatible_wire_version.blank? + + gem_version_compatible_wire >= gem_version_required + end + + def gem_version_running + Gem::Version.new(running_version) + end + + def gem_version_required + Gem::Version.new(required_version) + end + + def gem_version_compatible_wire + Gem::Version.new(compatible_wire_version) + end + def mismatched_indexes @mismatched_indexes ||= INDEXES.filter_map do |klass| klass.base_name if Chewy.client.indices.get_mapping[klass.index_name]&.deep_symbolize_keys != klass.mappings_hash From c676bc91e9c3aa81eb7cfbce3c5c5e80b84d3d02 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 3 Oct 2023 11:01:45 -0400 Subject: [PATCH 066/237] Dont match mention in url query string (#25656) Co-authored-by: Claire --- .rubocop_todo.yml | 4 ---- app/models/account.rb | 2 +- spec/models/account_spec.rb | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index f10abd9c36..19cfcff7f7 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -255,10 +255,6 @@ RSpec/MultipleMemoizedHelpers: RSpec/NestedGroups: Max: 6 -RSpec/PendingWithoutReason: - Exclude: - - 'spec/models/account_spec.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationController: Exclude: diff --git a/app/models/account.rb b/app/models/account.rb index 679093a59f..bb70b3a7b8 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -66,7 +66,7 @@ class Account < ApplicationRecord BACKGROUND_REFRESH_INTERVAL = 1.week.freeze USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i - MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i + MENTION_RE = %r{(? Date: Wed, 4 Oct 2023 14:20:34 +0900 Subject: [PATCH 067/237] Remove rc1 --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 588a04b042..e4839a83d2 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -29,7 +29,7 @@ module Mastodon end def default_prerelease - 'rc1' + '' end def prerelease From 68ec1d180ae38abca56f2e848db58d23224813de Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Wed, 4 Oct 2023 08:23:50 +0100 Subject: [PATCH 068/237] Fix language sorting in settings (#27158) --- app/helpers/languages_helper.rb | 18 +++++++++++++ app/helpers/settings_helper.rb | 6 ++++- .../preferences/appearance/show.html.haml | 2 +- spec/helpers/languages_helper_spec.rb | 26 +++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index c42c4c23ef..ddb10aa25f 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -230,6 +230,24 @@ module LanguagesHelper 'sr-Latn': 'Srpski (latinica)', }.freeze + # Helper for self.sorted_locale_keys + private_class_method def self.locale_name_for_sorting(locale) + if locale.blank? || locale == 'und' + '000' + elsif (supported_locale = SUPPORTED_LOCALES[locale.to_sym]) + ASCIIFolding.new.fold(supported_locale[1]).downcase + elsif (regional_locale = REGIONAL_LOCALE_NAMES[locale.to_sym]) + ASCIIFolding.new.fold(regional_locale).downcase + else + locale + end + end + + # Sort locales by native name for dropdown menus + def self.sorted_locale_keys(locale_keys) + locale_keys.sort_by { |key, _| locale_name_for_sorting(key) } + end + def native_locale_name(locale) if locale.blank? || locale == 'und' I18n.t('generic.none') diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 889ca7f402..fce36bf43e 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -2,7 +2,11 @@ module SettingsHelper def filterable_languages - LanguagesHelper::SUPPORTED_LOCALES.keys + LanguagesHelper.sorted_locale_keys(LanguagesHelper::SUPPORTED_LOCALES.keys) + end + + def ui_languages + LanguagesHelper.sorted_locale_keys(I18n.available_locales) end def session_device_icon(session) diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index ea33487c3c..11fa2bfc43 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -7,7 +7,7 @@ = simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f| .fields-row .fields-group.fields-row__column.fields-row__column-6 - = f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false + = f.input :locale, collection: ui_languages, wrapper: :with_label, include_blank: false, label_method: ->(locale) { native_locale_name(locale) }, selected: I18n.locale, hint: false .fields-group.fields-row__column.fields-row__column-6 = f.input :time_zone, wrapper: :with_label, collection: ActiveSupport::TimeZone.all.map { |tz| ["(GMT#{tz.formatted_offset}) #{tz.name}", tz.tzinfo.name] }, hint: false diff --git a/spec/helpers/languages_helper_spec.rb b/spec/helpers/languages_helper_spec.rb index 98c8064a33..99461b293b 100644 --- a/spec/helpers/languages_helper_spec.rb +++ b/spec/helpers/languages_helper_spec.rb @@ -60,4 +60,30 @@ describe LanguagesHelper do end end end + + describe 'sorted_locales' do + context 'when sorting with native name' do + it 'returns Suomi after Gàidhlig' do + expect(described_class.sorted_locale_keys(%w(fi gd))).to eq(%w(gd fi)) + end + end + + context 'when sorting with diacritics' do + it 'returns Íslensk before Suomi' do + expect(described_class.sorted_locale_keys(%w(fi is))).to eq(%w(is fi)) + end + end + + context 'when sorting with non-Latin' do + it 'returns Suomi before Amharic' do + expect(described_class.sorted_locale_keys(%w(am fi))).to eq(%w(fi am)) + end + end + + context 'when sorting with local variants' do + it 'returns variant in-line' do + expect(described_class.sorted_locale_keys(%w(en eo en-GB))).to eq(%w(en en-GB eo)) + end + end + end end From 72cec47c13d0f3050e223fc31bfbef73f75ff893 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 4 Oct 2023 04:17:36 -0400 Subject: [PATCH 069/237] Silence deprecation warning in CacheBuster spec (#27264) --- spec/lib/cache_buster_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/lib/cache_buster_spec.rb b/spec/lib/cache_buster_spec.rb index 84085608e8..3dc62a8154 100644 --- a/spec/lib/cache_buster_spec.rb +++ b/spec/lib/cache_buster_spec.rb @@ -28,6 +28,14 @@ describe CacheBuster do end context 'when using default options' do + around do |example| + # Disables the CacheBuster.new deprecation warning about default arguments. + # Remove this `silence` block when default arg support is removed from CacheBuster + ActiveSupport::Deprecation.silence do + example.run + end + end + include_examples 'makes_request' end From 8e4251f9e75992c13cbb3acd2d47a895278b3fbf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:53:04 +0200 Subject: [PATCH 070/237] New Crowdin Translations (automated) (#27270) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/si.json | 290 ++++++------- config/locales/devise.si.yml | 18 +- config/locales/doorkeeper.si.yml | 72 ++-- config/locales/eu.yml | 3 + config/locales/si.yml | 524 +++++++++++++----------- config/locales/simple_form.si.yml | 88 ++-- 6 files changed, 511 insertions(+), 484 deletions(-) diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2c6979b018..4d116bfd31 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,79 +1,77 @@ { + "about.blocks": "මැදිහත්කරණ සේවාදායක", + "about.contact": "සබඳතාව:", + "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", + "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", - "account.badges.bot": "ස්වයං ක්‍රමලේඛය", "account.badges.group": "සමූහය", "account.block": "@{name} අවහිර කරන්න", "account.block_domain": "{domain} වසම අවහිර කරන්න", + "account.block_short": "අවහිර", "account.blocked": "අවහිර කර ඇත", "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", - "account.cancel_follow_request": "Withdraw follow request", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න", "account.domain_blocked": "වසම අවහිර කර ඇත", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", + "account.featured_tags.last_status_never": "ලිපි නැත", "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.", - "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", "account.following": "අනුගමනය", "account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", - "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", + "account.go_to_profile": "පැතිකඩට යන්න", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", - "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", - "account.mention": "@{name} සැඳහුම", + "account.mention": "@{name} සඳහන් කරන්ක", "account.mute": "@{name} නිහඬ කරන්න", + "account.mute_short": "නිහඬ", "account.muted": "නිහඬ කළා", "account.posts": "ලිපි", - "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", + "account.posts_with_replies": "ලිපි සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", - "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", - "account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න", - "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", "account.unblock_short": "අනවහිර", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", - "account.unfollow": "අනුගමනය නොකරන්න", - "account.unmute": "@{name}නිහඬ නොකරන්න", "account.unmute_short": "නොනිහඬ", "account_note.placeholder": "සටහන යෙදීමට ඔබන්න", - "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.retention.average": "සාමාන්යය", - "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", + "admin.dashboard.retention.cohort": "ලියාපදිංචි මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශ්‍රීලකයින්", "alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.", - "alert.rate_limited.title": "මිල සීමා සහිතයි", - "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", + "alert.rate_limited.title": "අනුපාතනය වී ඇත", + "alert.unexpected.message": "අනපේක්‍ෂිත දෝෂයක් සිදු විය.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", - "attachments_list.unprocessed": "(සැකසුම් නොකළ)", "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", - "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", + "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", "bundle_modal_error.close": "වසන්න", - "bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", + "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", + "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක", "column.about": "පිලිබඳව", "column.blocks": "අවහිර කළ අය", - "column.bookmarks": "පොත් යොමු", - "column.community": "දේශීය කාලරේඛාව", + "column.bookmarks": "පොත්යොමු", + "column.community": "ස්ථානීය කාලරේඛාව", + "column.direct": "පෞද්ගලික සැඳහුම්", "column.directory": "පැතිකඩ පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", + "column.favourites": "ප්‍රියතමයන්", + "column.firehose": "සජීව සංග්‍රහ", "column.follow_requests": "අනුගමන ඉල්ලීම්", "column.home": "මුල් පිටුව", - "column.lists": "ලේඛන", + "column.lists": "ලැයිස්තු", "column.mutes": "නිහඬ කළ අය", "column.notifications": "දැනුම්දීම්", "column.pins": "ඇමිණූ ලිපි", - "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", + "column.public": "ඒකාබද්ධ කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", @@ -87,70 +85,60 @@ "community.column_settings.remote_only": "දුරස්ථව පමණයි", "compose.language.change": "භාෂාව සංශෝධනය", "compose.language.search": "භාෂා සොයන්න...", + "compose.published.body": "ලිපිය පළ විය.", + "compose.published.open": "අරින්න", + "compose.saved.body": "ලිපිය සුරැකිණි.", "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", - "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", - "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", - "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", + "compose_form.encryption_warning": "මාස්ටඩන් වෙත පළ කරන දෑ අන්ත සංකේතනයෙන් ආරක්‍ෂා නොවේ. මාස්ටඩන් හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", "compose_form.poll.add_option": "තේරීමක් යොදන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", "compose_form.poll.option_placeholder": "තේරීම {number}", "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", - "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", - "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", - "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", - "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", - "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", - "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?", "confirmations.delete.confirm": "මකන්න", - "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete.message": "ඔබට මෙම ලිපිය මැකීමට වුවමනා ද?", "confirmations.delete_list.confirm": "මකන්න", - "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව සදහටම මැකීමට වුවමනා ද?", "confirmations.discard_edit_media.confirm": "ඉවත ලන්න", "confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", - "confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.", + "confirmations.edit.confirm": "සංස්කරණය", "confirmations.logout.confirm": "නික්මෙන්න", "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?", "confirmations.mute.confirm": "නිශ්ශබ්ද", - "confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.", - "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න", + "confirmations.mute.message": "{name} නිහඬ කිරීමට වුවමනා ද?", "confirmations.reply.confirm": "පිළිතුර", - "confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", - "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", "conversation.delete": "සංවාදය මකන්න", "conversation.mark_as_read": "කියවූ බව යොදන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "copypaste.copied": "පිටපත් විය", - "directory.federated": "දන්නා fediverse වලින්", + "copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්", + "directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්", "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", - "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", + "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", "emoji_button.custom": "අභිරුචි", - "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", "emoji_button.label": "ඉමොජි යොදන්න", - "emoji_button.nature": "ස්වභාවික", + "emoji_button.nature": "සොබාදහම", "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", @@ -164,154 +152,145 @@ "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", - "empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.", - "empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}", - "empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.", + "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", - "empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.", - "empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න", + "empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.", "error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.", "error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.", - "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", + "error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", + "error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.title": "ගවේශණය", + "explore.suggested_follows": "පුද්ගලයින්", + "explore.title": "ගවේශනය", + "explore.trending_links": "පුවත්", + "explore.trending_statuses": "ලිපි", "filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!", "filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්", "filter_modal.added.settings_link": "සැකසුම් පිටුව", + "filter_modal.added.title": "පෙරහන එක් කළා!", "filter_modal.select_filter.expired": "ඉකුත්ය", "filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}", "filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න", - "follow_request.authorize": "අවසරලත්", + "filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න", + "filter_modal.title.status": "ලිපියක් පෙරන්න", + "firehose.local": "මෙම සේවාදායකය", + "firehose.remote": "වෙනත් සේවාදායක", "follow_request.reject": "ප්‍රතික්‍ෂේප", - "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", + "footer.about": "පිළිබඳව", + "footer.directory": "පැතිකඩ නාමාවලිය", + "footer.get_app": "යෙදුම ගන්න", + "footer.invite": "ආරාධනා කරන්න", + "footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං", + "footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය", + "footer.source_code": "මූලාශ්‍ර කේතය බලන්න", + "footer.status": "තත්‍වය", "generic.saved": "සුරැකිණි", "getting_started.heading": "පටන් ගන්න", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", - "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", "hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි", - "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", - "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", + "home.actions.go_to_explore": "නැගී එන දෑ බලන්න", + "home.actions.go_to_suggestions": "පුද්ගලයින් සොයන්න", "home.column_settings.basic": "මූලික", - "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", + "home.explore_prompt.title": "මෙය ඔබගේ මාස්ටඩන් මුල් පිටුවයි.", "home.hide_announcements": "නිවේදන සඟවන්න", + "home.pending_critical_update.link": "යාවත්කාල බලන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", - "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", - "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", - "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", + "interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි", + "intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}", + "intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}", + "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}", "keyboard_shortcuts.back": "ආපසු යාත්‍රණය", - "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.boost": "වැඩි කිරීමට", - "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", - "keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට", "keyboard_shortcuts.description": "සවිස්තරය", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට", + "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගෙනයන්න", "keyboard_shortcuts.enter": "ලිපිය අරින්න", + "keyboard_shortcuts.favourites": "ප්‍රියතමයන් ලැයිස්තුව අරින්න", "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", - "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.hotkey": "උණු යතුර", - "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", - "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.muted": "නිහඬ කළ අය පෙන්වන්න", "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න", "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", "keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න", - "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලේඛනය අරින්න", + "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලැයිස්තුව අරින්න", "keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න", "keyboard_shortcuts.reply": "පිළිතුරු දීමට", - "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", - "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.spoilers": "CW ක්‍ෂේත්‍රය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", - "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", - "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", - "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", + "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න", "lightbox.close": "වසන්න", - "lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න", - "lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න", "lightbox.next": "ඊළඟ", "lightbox.previous": "පෙර", "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", - "lists.account.add": "ලේඛනයට දමන්න", - "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", - "lists.delete": "ලේඛනය මකන්න", - "lists.edit": "ලේඛනය සංස්කරණය", + "lists.account.add": "ලැයිස්තුවට දමන්න", + "lists.account.remove": "ලැයිස්තුවෙන් ඉවතලන්න", + "lists.delete": "ලැයිස්තුව මකන්න", + "lists.edit": "ලැයිස්තුව සංස්කරණය", "lists.edit.submit": "සිරැසිය සංශෝධනය", - "lists.new.create": "ලැයිස්තුව එකතු කරන්න", - "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", - "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", - "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්", + "lists.new.title_placeholder": "නව ලැයිස්තුවේ සිරැසිය", + "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයින්", "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", - "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", - "lists.subheading": "ඔබගේ ලේඛන", - "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", + "lists.subheading": "ඔබගේ ලැයිස්තු", "loading_indicator.label": "පූරණය වෙමින්...", - "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", "mute_modal.duration": "පරාසය", - "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", - "mute_modal.indefinite": "අවිනිශ්චිත", + "mute_modal.hide_notifications": "මෙම පුද්ගලයාගේ දැනුම්දීම් සඟවන්නද?", + "navigation_bar.about": "පිළිබඳව", "navigation_bar.blocks": "අවහිර කළ අය", "navigation_bar.bookmarks": "පොත්යොමු", - "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", - "navigation_bar.compose": "නව ටූට් සාදන්න", - "navigation_bar.discover": "සොයා ගන්න", + "navigation_bar.community_timeline": "ස්ථානීය කාලරේඛාව", + "navigation_bar.compose": "නව ලිපියක් ලියන්න", + "navigation_bar.direct": "පෞද්ගලික සැඳහුම්", "navigation_bar.domain_blocks": "අවහිර කළ වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", - "navigation_bar.explore": "ගවේෂණය කරන්න", + "navigation_bar.explore": "ගවේශනය", + "navigation_bar.favourites": "ප්‍රියතමයන්", "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", - "navigation_bar.lists": "ලේඛන", + "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "නිහඬ කළ අය", "navigation_bar.personal": "පුද්ගලික", "navigation_bar.pins": "ඇමිණූ ලිපි", "navigation_bar.preferences": "අභිප්‍රේත", - "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", + "navigation_bar.public_timeline": "ඒකාබද්ධ කාලරේඛාව", + "navigation_bar.search": "සොයන්න", "navigation_bar.security": "ආරක්ෂාව", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", - "notification.admin.report": "{name} වාර්තා {target}", - "notification.admin.sign_up": "{name} අත්සන් කර ඇත", "notification.follow": "{name} ඔබව අනුගමනය කළා", - "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", "notification.mention": "{name} ඔබව සඳහන් කර ඇත", "notification.own_poll": "ඔබගේ මත විමසුම නිමයි", "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි", - "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", "notification.status": "{name} දැන් පළ කළා", - "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", + "notification.update": "{name} ලිපියක් සංස්කරණය කළා", "notifications.clear": "දැනුම්දීම් මකන්න", - "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", + "notifications.clear_confirmation": "දැනුම්දීම් සියල්ල හිස් කිරීමට වුවමනා ද?", "notifications.column_settings.admin.report": "නව වාර්තා:", "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", + "notifications.column_settings.favourite": "ප්‍රියතමයන්:", "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", - "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", + "notifications.column_settings.poll": "මත විමසුමේ ප්‍රතිඵල:", "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", - "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", "notifications.column_settings.sound": "ශබ්දය වාදනය", "notifications.column_settings.status": "නව ලිපි:", @@ -319,38 +298,26 @@ "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", "notifications.column_settings.update": "සංශෝධන:", "notifications.filter.all": "සියල්ල", - "notifications.filter.boosts": "බූස්ට් කරයි", + "notifications.filter.favourites": "ප්‍රියතමයන්", "notifications.filter.follows": "අනුගමනය", "notifications.filter.mentions": "සැඳහුම්", - "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", - "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", - "notifications.grant_permission": "අවසර දෙන්න.", + "notifications.filter.polls": "මත විමසුමේ ප්‍රතිඵල", "notifications.group": "දැනුම්දීම් {count}", "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", - "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", - "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", - "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", - "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", - "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", + "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!", + "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න", + "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න", + "onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය", + "onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න", + "onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", + "poll.reveal": "ප්‍රතිඵල බලන්න", "poll.vote": "ඡන්දය", "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", - "poll_button.add_poll": "මත විමසුමක් යොදන්න", + "poll_button.add_poll": "මත විමසුමක් අරඹන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", "privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි", @@ -363,6 +330,7 @@ "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", "relative_time.days": "ද. {number}", + "relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -377,10 +345,9 @@ "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", - "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", - "report.category.title_status": "තැපැල්", + "report.category.title_status": "ලිපිය", "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", "report.forward": "{target} වෙත හරවන්න", @@ -391,7 +358,7 @@ "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", - "report.reasons.other": "ඒක වෙන දෙයක්", + "report.reasons.other": "එය වෙනත් දෙයක්", "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", "report.reasons.spam": "එය අයාචිතයි", "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", @@ -402,8 +369,8 @@ "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", "report.submit": "යොමන්න", - "report.target": "වාර්තාව {target}", - "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", + "report.target": "{target} වාර්තා කිරීම", + "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", @@ -415,8 +382,9 @@ "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", + "search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න", + "search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න", "search_results.all": "සියල්ල", - "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", @@ -424,24 +392,23 @@ "server_banner.learn_more": "තව දැනගන්න", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", - "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", - "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", + "status.admin_status": "මෙම ලිපිය මැදිහත්කරණ අතුරුමුහුණතෙහි අරින්න", "status.block": "@{name} අවහිර", "status.bookmark": "පොත්යොමුවක්", - "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", - "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", "status.delete": "මකන්න", "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", "status.edit": "සංස්කරණය", "status.edited": "සංශෝධිතයි {date}", "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", "status.embed": "කාවැද්දූ", + "status.filter": "මෙම ලිපිය පෙරන්න", "status.filtered": "පෙරන ලද", + "status.hide": "ලිපිය සඟවන්න", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", "status.load_more": "තව පූරණය", "status.media_hidden": "මාධ්‍ය සඟවා ඇත", - "status.mention": "@{name} සැඳහුම", + "status.mention": "@{name} සඳහන් කරන්ක", "status.more": "තව", "status.mute": "@{name} නිහඬව", "status.mute_conversation": "සංවාදය නිහඬව", @@ -449,14 +416,10 @@ "status.pin": "පැතිකඩට අමුණන්න", "status.pinned": "ඇමිණූ ලිපියකි", "status.read_more": "තව කියවන්න", - "status.reblog": "බූස්ට් කරන්න", - "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", - "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", "status.replyAll": "නූලට පිළිතුරු දෙන්න", - "status.report": "@{name} වාර්තාව", + "status.report": "@{name} වාර්තා කරන්න", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", "status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න", @@ -464,29 +427,29 @@ "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", "status.show_more": "තවත් පෙන්වන්න", "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.translate": "පරිවර්තනය", + "status.translated_from_with": "{provider} මගින් {lang} භාෂාවෙන් පරිවර්තනය කර ඇත", + "status.uncached_media_warning": "පෙරදසුන නැත", "status.unmute_conversation": "සංවාදය නොනිහඬ", "status.unpin": "පැතිකඩෙන් ගළවන්න", "subscribed_languages.save": "වෙනස්කම් සුරකින්න", "tabs_bar.home": "මුල් පිටුව", "tabs_bar.notifications": "දැනුම්දීම්", - "time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා", - "time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා", - "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා", - "time_remaining.moments": "ඉතිරිව ඇති මොහොත", - "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", + "time_remaining.days": "{number, plural, one {දවස් #} other {දවස් #}} ක් ඉතිරිය", + "time_remaining.hours": "{number, plural, one {පැය #} other {පැය #}} ක් ඉතිරිය", + "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} ක් ඉතිරිය", + "time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", "units.short.thousand": "{count}කි", "upload_area.title": "උඩුගතයට ඇද දමන්න", - "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න", + "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට අමුණන්න", "upload_error.limit": "සීමාව ඉක්මවා ඇත.", "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", @@ -507,6 +470,7 @@ "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", "upload_progress.processing": "සැකසෙමින්…", + "username.taken": "නම දැනටමත් අරගෙන ඇත", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index a20057cef9..c866bed0e9 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -23,7 +23,6 @@ si: explanation: ඔබ මෙම ඊමේල් ලිපිනය සමඟ %{host} හි ගිණුමක් සාදා ඇත. ඔබ එය සක්‍රිය කිරීමට එක ක්ලික් කිරීමක් ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. explanation_when_pending: ඔබ මෙම විද්‍යුත් තැපැල් ලිපිනය සමඟ %{host} වෙත ආරාධනාවක් සඳහා ඉල්ලුම් කළා. ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. ඔබගේ විස්තර වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට ඔබට පුරනය විය හැක, නමුත් ඔබගේ ගිණුම අනුමත වන තුරු ඔබට බොහෝ කාර්යයන් වෙත ප්‍රවේශ විය නොහැක. ඔබගේ අයදුම්පත ප්‍රතික්ෂේප කළහොත්, ඔබගේ දත්ත ඉවත් කරනු ඇත, එබැවින් ඔබෙන් වැඩිදුර ක්‍රියාමාර්ග අවශ්‍ය නොවනු ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. extra_html: කරුණාකර සේවාදායකයේ නීති සහ අපගේ සේවා කොන්දේසිද පරීක්ෂා කරන්න. - subject: 'Mastodon: %{instance}සඳහා තහවුරු කිරීමේ උපදෙස්' title: වි. තැපෑල තහවුරු කරන්න email_changed: explanation: 'ඔබගේ ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් වෙමින් පවතී:' @@ -33,30 +32,26 @@ si: password_change: explanation: ඔබගේ ගිණුම සඳහා මුරපදය වෙනස් කර ඇත. extra: ඔබ ඔබගේ මුරපදය වෙනස් නොකළේ නම්, යමෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. - subject: 'Mastodon: මුරපදය වෙනස් විය' + subject: 'මාස්ටඩන්: මුරපදය වෙනස් විය' title: මුරපදය වෙනස් විය reconfirmation_instructions: explanation: ඔබගේ ඊමේල් වෙනස් කිරීමට නව ලිපිනය තහවුරු කරන්න. - extra: මෙම වෙනස ඔබ විසින් ආරම්භ කරන ලද්දක් නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වන තෙක් Mastodon ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් නොවේ. - subject: 'Mastodon: %{instance}සඳහා විද්‍යුත් තැපෑල තහවුරු කරන්න' title: වි-තැපෑල තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න explanation: ඔබ ඔබගේ ගිණුම සඳහා නව මුරපදයක් ඉල්ලා ඇත. extra: ඔබ මෙය ඉල්ලා නොසිටියේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වී අලුත් එකක් සාදන තෙක් ඔබේ මුරපදය වෙනස් නොවනු ඇත. - subject: 'Mastodon: මුරපද උපදෙස් යළි පිහිටුවන්න' + subject: 'මාස්ටඩන්: මුරපදය යළි සැකසීමේ උපදෙස්' title: මුරපදය යළි සැකසීම two_factor_disabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය අක්‍රීය කර ඇත' title: ද්විපියවර අබලයි two_factor_enabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය සක්‍රීය කර ඇත' title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. - subject: 'Mastodon: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කරන ලදී' + subject: 'මාස්ටඩන්: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි' title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස් විය unlock_instructions: subject: 'මාස්ටඩන්: අගුළු හැරීමේ උපදේශ' @@ -67,15 +62,13 @@ si: title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත deleted: explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමෙන් මකා ඇත - subject: 'Mastodon: ආරක්ෂක යතුර මකා ඇත' + subject: 'මාස්ටඩන්: ආරක්‍ෂණ යතුර මකා ඇත' title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අක්‍රිය කර ඇත' title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත' title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' @@ -108,8 +101,7 @@ si: already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න - not_found: හමු වුණේ නැහැ - not_locked: අගුලු දමා නොතිබුණි + not_found: හමු නොවිණි not_saved: one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 2307f63c0a..31b38444d3 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -74,9 +74,9 @@ si: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. last_used_at: අවසන් වරට භාවිතා කළේ %{date} - never_used: කවදාවත් පාවිච්චි කළේ නැහැ + never_used: භාවිතා කර නැත scopes: අවසර - superapp: අභ්යන්තර + superapp: අභ්‍යන්තර title: ඔබගේ බලයලත් අයදුම්පත් errors: messages: @@ -104,33 +104,34 @@ si: flash: applications: create: - notice: යෙදුම නිර්මාණය කරන ලදී. + notice: යෙදුම සෑදිණි. destroy: - notice: යෙදුම මකා ඇත. + notice: යෙදුම මැකිණි. update: - notice: යෙදුම යාවත්කාලීන කරන ලදී. + notice: යෙදුම යාවත්කාල විය. authorized_applications: destroy: notice: අයදුම්පත අවලංගු කරන ලදී. grouped_scopes: access: - read: කියවීමට පමණක් ප්‍රවේශය - read/write: කියවීමට සහ ලිවීමට ප්‍රවේශය - write: ලිවීමට පමණක් ප්‍රවේශය + read: ප්‍රවේශය කියවීමට පමණි + read/write: කියවීමට හා ලිවීමට ප්‍රවේශය + write: ප්‍රවේශය ලිවීමට පමණි title: accounts: ගිණුම් - admin/accounts: ගිණුම් පරිපාලනය + admin/accounts: ගිණුම් කළමනාකරණය admin/all: සියලුම පරිපාලන කාර්යයන් admin/reports: වාර්තා පරිපාලනය + all: ඔබගේ මාස්ටඩන් ගිණුමට පූර්ණ ප්‍රවේශය blocks: කුට්ටි - bookmarks: පිටු සලකුණු + bookmarks: පොත්යොමු conversations: සංවාද crypto: අන්ත සංකේතනය + favourites: ප්‍රියතමයන් filters: පෙරහන් follows: පහත සඳහන් lists: ලැයිස්තු - media: මාධ්ය ඇමුණුම් - mutes: නිහඬ කරයි + media: මාධ්‍ය ඇමුණුම් notifications: දැනුම්දීම් push: තල්ලු දැනුම්දීම් reports: වාර්තා @@ -142,39 +143,40 @@ si: applications: යෙදුම් oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු application: - title: වි.සත්යා. (OAuth) තොරතුරු අවශ්‍යයි + title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි scopes: - admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න - admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:write: සේවාදායකයේ සියලුම දත්ත වෙනස් කරන්න - admin:write:accounts: ගිණුම් මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - admin:write:reports: වාර්තා මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - crypto: end-to-end encryption භාවිතා කරන්න + admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවයි + admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:write: සේවාදායකයේ සියලුම දත්ත සංශෝධනය කරයි + admin:write:accounts: ගිණුම් සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + admin:write:reports: වාර්තා සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + crypto: අන්ත සංකේතනය භාවිතා කරයි follow: ගිණුම් සබඳතා වෙනස් කරන්න - push: ඔබගේ තල්ලු දැනුම්දීම් ලබා ගන්න - read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න - read:accounts: ගිණුම් තොරතුරු බලන්න + push: ඔබගේ තල්ලු දැනුම්දීම් ලබන්න + read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවයි + read:accounts: ගිණුම්වල තොරතුරු දකියි read:blocks: ඔබගේ වාරණ බලන්න - read:bookmarks: ඔබගේ පිටු සලකුණු බලන්න + read:bookmarks: ඔබගේ පොත්යොමු දකියි + read:favourites: ඔබගේ ප්‍රියතමයන් බලන්න read:filters: ඔබගේ පෙරහන් බලන්න read:follows: ඔබගේ පහත සඳහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න read:mutes: ඔබේ ගොළු බලන්න - read:notifications: ඔබගේ දැනුම්දීම් බලන්න + read:notifications: ඔබගේ දැනුම්දීම් බලයි read:reports: ඔබගේ වාර්තා බලන්න - read:search: ඔබ වෙනුවෙන් සොයන්න - read:statuses: සියලුම පෝස්ට් බලන්න + read:search: ඔබ වෙනුවෙන් සොයයි + read:statuses: සියලු ලිපි බලයි write: ඔබගේ ගිණුමේ සියලුම දත්ත වෙනස් කරන්න write:accounts: ඔබගේ පැතිකඩ වෙනස් කරන්න - write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න - write:bookmarks: පිටු සලකුණු සටහන් + write:blocks: ගිණුම් සහ වසම් අවහිර කරයි + write:bookmarks: ලිපි වලට පොත්යොමු තබයි write:conversations: සංවාද නිහඬ කිරීම සහ මකා දැමීම - write:filters: පෙරහන් කරන්න + write:favourites: ප්‍රියතම ලිපි + write:filters: පෙරහන් සාදයි write:follows: මිනිසුන් අනුගමනය කරන්න write:lists: ලැයිස්තු සාදන්න - write:media: මාධ්‍ය ගොනු උඩුගත කරන්න - write:mutes: මිනිසුන් සහ සංවාද කරන්න - write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න - write:reports: වෙනත් පුද්ගලයින් වාර්තා කරන්න - write:statuses: පළ කිරීම් පළ කරන්න + write:media: මාධ්‍ය ගොනු උඩුගත කරයි + write:mutes: සංවාද හා පුද්ගලයින් නිහඬ කරයි + write:notifications: ඔබගේ දැනුම්දීම් හිස් කරයි + write:statuses: ලිපි පළ කරයි diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7ca7f63a5b..d21259ee77 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -785,6 +785,9 @@ eu: release_notes: Bertsio oharrak title: Eguneraketak eskuragarri type: Mota + types: + major: Argitalpen handia + minor: Argitalpen txikia version: Bertsioa statuses: account: Egilea diff --git a/config/locales/si.yml b/config/locales/si.yml index 45be8b76f2..787d6fde38 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,10 +1,11 @@ --- si: about: - about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, ආයතනික නිරීක්ෂණ නැත, සදාචාරාත්මක සැලසුම් සහ විමධ්‍යගත කිරීම! Mastodon සමඟ ඔබේ දත්ත අයිති කරගන්න!' - contact_missing: සකස් කර නැත + about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, සංස්ථානික අවේක්‍ෂණ නැත, යහපතට නිර්මිතයි සහ විමධ්‍යගතයි! මාස්ටඩන් සමඟ ඔබගේ දත්ත අයිතිව තබාගන්න!' + contact_missing: සකසා නැත contact_unavailable: අ/නොවේ - hosted_on: Mastodon %{domain}හි සත්කාරකත්වය දරයි + hosted_on: "%{domain} හරහා සත්කාරකත්‍වය ලබයි" + title: පිළිබඳව accounts: follow: අනුගමනය followers: @@ -14,7 +15,7 @@ si: instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී - nothing_here: මෙහි කිසිත් නැත! + nothing_here: මෙහි කිසිවක් නැත! pin_errors: following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: @@ -23,51 +24,49 @@ si: posts_tab_heading: ලිපි admin: account_actions: - action: ක්‍රියාව සිදු කරන්න - title: "%{acct}මත මධ්‍යස්ථ ක්‍රියාව සිදු කරන්න" + action: ක්‍රියාමාර්ගයක් ගන්න account_moderation_notes: - create: සටහන හැරයන්න - created_msg: මධ්‍යස්ථ සටහන සාර්ථකව සාදන ලදී! - destroyed_msg: මධ්‍යස්ථ සටහන සාර්ථකව විනාශ විය! + create: සටහනක් තබන්න accounts: add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න - approve: අනුමත කරන්න + approve: අනුමැතිය approved_msg: "%{username}හි ලියාපදිංචි වීමේ යෙදුම සාර්ථකව අනුමත කරන ලදී" are_you_sure: ඔබට විශ්වාසද? - avatar: අවතාරය + avatar: ප්‍රතිරූපය by_domain: වසම change_email: + changed_msg: වි-තැපෑල සාර්ථකව වෙනස් විය! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල submit: වි-තැපෑල වෙනස් කරන්න title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න" + change_role: + changed_msg: භූමිකාව සාර්ථකව වෙනස් විය! + label: භූමිකාව වෙනස් කරන්න + no_role: නව භූමිකාව + title: "%{username} සඳහා භූමිකාව වෙනස් කරන්න" confirm: සනාථ කරන්න - confirmed: තහවුරු කර ඇත + confirmed: සනාථ කර ඇත confirming: සනාථ කරමින් custom: අභිරුචි delete: දත්ත මකන්න - deleted: මකා දමන ලදී - demote: පහත් කරන්න + deleted: මකා ඇත destroyed_msg: "%{username}හි දත්ත ඉක්මනින් මකා දැමීමට පෝලිම් කර ඇත" - disable: කැටි කරන්න disable_sign_in_token_auth: ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න disable_two_factor_authentication: 2FA අබල කරන්න - disabled: ශීත කළ display_name: ප්රදර්ශන නාමය domain: වසම edit: සංස්කරණය email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය - enable: කැටි කිරීම ඉවත් කරන්න enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" followers: අනුගාමිකයින් - follows: පහත සඳහන් header: ශීර්ෂය inbox_url: එන ලිපි URL - invite_request_text: එක්වීම සඳහා + invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) joined: එක් වී ඇත @@ -84,12 +83,13 @@ si: moderation: active: සක්‍රීයයි all: සියල්ල - pending: පොරොත්තුවෙන් + disabled: අබලයි + pending: පොරොත්තු suspended: අත්හිටුවන ලදි - title: මධ්යස්ථභාවය - moderation_notes: මධ්‍යස්ථ සටහන් + title: මැදිහත්කරණය + moderation_notes: මැදිහත්කරණ සටහන් most_recent_activity: වඩාත්ම මෑත ක්රියාකාරිත්වය - most_recent_ip: ඊට වඩා අ.ජා.කේ.(IP) + most_recent_ip: මෑත අ.ජා.කෙ. (IP) no_account_selected: කිසිවක් තෝරා නොගත් බැවින් ගිණුම් කිසිවක් වෙනස් කර නැත no_limits_imposed: සීමාවන් පනවා නැත not_subscribed: දායක වී නැත @@ -99,37 +99,36 @@ si: previous_strikes_description_html: one: මෙම ගිණුමට එක වර්ජනයක් ඇත. other: මෙම ගිණුමේ වර්ජන %{count} ඇත. - promote: ප්රවර්ධනය කරන්න protocol: කෙටුම්පත - public: ප්රසිද්ධ + public: ප්‍රසිද්ධ push_subscription_expires: පුෂ් දායකත්වය කල් ඉකුත් වේ - redownload: පැතිකඩ නැවුම්කරන්න + redownload: පැතිකඩ නැවුම් කරන්න redownloaded_msg: මූලාරම්භයේ සිට %{username}හි පැතිකඩ සාර්ථකව නැවුම් කරන ලදී reject: ප්‍රතික්ෂේප rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" - remove_avatar: අවතාරය ඉවත් කරන්න + remove_avatar: ප්‍රතිරූපය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" resend_confirmation: already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත reset: නැවත සකසන්න - reset_password: මුරපදය නැවතසකසන්න + reset_password: මුරපදය යළි සකසන්න resubscribe: නැවත දායක වන්න + role: භූමිකාව search: සොයන්න search_same_email_domain: එකම විද්‍යුත් තැපැල් වසම සහිත වෙනත් පරිශීලකයන් search_same_ip: එකම IP සහිත වෙනත් පරිශීලකයන් + security: ආරක්‍ෂාව security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitive: සංවේදී sensitized: සංවේදී ලෙස සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා targeted_reports: වෙනත් අය විසින් වාර්තා කරන ලදී - silence: සීමාව - silenced: සීමාසහිත + silenced: සීමා සහිතයි statuses: ලිපි strikes: පෙර වැඩ වර්ජන subscribe: දායක වන්න @@ -147,26 +146,25 @@ si: unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" unsubscribe: දායක නොවන්න unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" - username: පරිශීලක නාමය + username: පරිශ්‍රීලක නාමය view_domain: වසම සඳහා සාරාංශය බලන්න warn: අවවාද web: වියමන - whitelisted: ෆෙඩරේෂන් සඳහා අවසර ඇත + whitelisted: ඒකාබද්ධයට ඉඩ දී ඇත action_logs: action_types: approve_appeal: අභියාචනය අනුමත කරන්න approve_user: පරිශීලක අනුමත කරන්න assigned_to_self_report: වාර්තාව පැවරීම - change_email_user: පරිශීලකයින්ට වි-තැපෑල වෙනස් කරන්න confirm_user: පරිශීලක තහවුරු කරන්න create_account_warning: අවවාදයක් සාදන්න create_announcement: නිවේදනය සාදන්න create_custom_emoji: අභිරුචි ඉමොජි සාදන්න - create_domain_allow: වසම් ඉඩදීමක් සාදන්න - create_domain_block: වසම් අවහිරයක් සාදන්න + create_domain_allow: වසමකට ඉඩදීම සාදන්න create_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එකක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න create_unavailable_domain: ලබා ගත නොහැකි වසම සාදන්න + create_user_role: භූමිකාව සාදන්න demote_user: පරිශීලකයා පහත් කරන්න destroy_announcement: නිවේදනය මකන්න destroy_custom_emoji: අභිරුචි ඉමොජි මකන්න @@ -178,23 +176,21 @@ si: destroy_status: පළ කිරීම මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න - disable_custom_emoji: අභිරුචි ඉමොජි අබල කරන්න + disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න disable_sign_in_token_auth_user: පරිශීලකයා සඳහා ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න - disable_user: පරිශීලනය කරන්න - enable_custom_emoji: අභිරුචි ඉමොජි සබල කරන්න + enable_custom_emoji: අභිරුචි ඉමෝජි සබල කරන්න enable_sign_in_token_auth_user: පරිශීලකයා සඳහා විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කරන්න enable_user: පරිශීලක සබල කරන්න memorialize_account: ගිණුම අනුස්මරණ කරන්න - promote_user: පරිශීලක ප්රවර්ධනය කරන්න reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න reject_user: පරිශීලක ප්‍රතික්ෂේප කරන්න - remove_avatar_user: Avatar ඉවත් කරන්න - reopen_report: වාර්තාව නැවත විවෘත කරන්න - reset_password_user: මුරපදය නැවතසකසන්න + remove_avatar_user: ප්‍රතිරූපය ඉවත් කරන්න + reopen_report: වාර්තාව නැවත අරින්න + reset_password_user: මුරපදය යළි සකසන්න resolve_report: වාර්තාව විසඳන්න sensitive_account: බල සංවේදී ගිණුම silence_account: ගිණුම සීමා කරන්න - suspend_account: සැලකිය යුතු + suspend_account: ගිණුම අත්හිටුවන්න unassigned_report: වාර්තාව පැවරීම ඉවත් කරන්න unblock_email_account: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න unsensitive_account: බල සංවේදී ගිණුම අහෝසි කරන්න @@ -205,7 +201,6 @@ si: update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න update_status: පළ කිරීම යාවත්කාලීන කරන්න actions: - approve_appeal_html: "%{name} අනුමත මධ්‍යස්ථ තීරණ අභියාචනය %{target}සිට" approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" change_email_user_html: "%{name} පරිශීලක %{target}ගේ ඊමේල් ලිපිනය වෙනස් කළේය" @@ -236,7 +231,6 @@ si: enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" promote_user_html: "%{name} උසස් පරිශීලක %{target}" - reject_appeal_html: "%{name} %{target}සිට මධ්‍යස්ථ තීරණ අභියාචනය ප්‍රතික්ෂේප කරන ලදී" reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" remove_avatar_user_html: "%{name} %{target}ගේ අවතාරය ඉවත් කරන ලදී" reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" @@ -255,8 +249,8 @@ si: update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. - filter_by_action: ක්‍රියාව අනුව පෙරන්න - filter_by_user: පරිශීලක අනුව පෙරන්න + filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න title: විගණන සටහන announcements: destroyed_msg: නිවේදනය සාර්ථකව මකා ඇත! @@ -279,22 +273,22 @@ si: assign_category: කාණ්ඩය පැවරීම by_domain: වසම copied_msg: ඉමොජි වල දේශීය පිටපත සාර්ථකව සාදන ලදී - copy: පිටපත් + copy: පිටපතක් copy_failed_msg: එම ඉමොජියේ දේශීය පිටපතක් සෑදීමට නොහැකි විය create_new_category: නව ප්‍රවර්ගයක් සාදන්න created_msg: ඉමොජි සාර්ථකව නිර්මාණය කළා! delete: මකන්න destroyed_msg: Emojo සාර්ථකව විනාශ විය! disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි disabled_msg: එම ඉමොජිය සාර්ථකව අබල කරන ලදී - emoji: ඉමොජි + emoji: ඉමෝජි enable: සබල කරන්න - enabled: සබල කර ඇත + enabled: සබලයි enabled_msg: එම ඉමොජි සාර්ථකව සබල කරන ලදී image_hint: PNG හෝ GIF %{size}දක්වා list: ලැයිස්තුව - listed: ලැයිස්තුගත කර ඇත + listed: ලැයිස්තුගත new: title: නව අභිරුචි ඉමොජි එක් කරන්න not_permitted: මෙම ක්‍රියාව සිදු කිරීමට ඔබට අවසර නැත @@ -313,7 +307,7 @@ si: interactions: අන්තර්ක්රියා media_storage: මාධ්ය ගබඩාව new_users: නව පරිශීලකයන් - opened_reports: වාර්තා විවෘත විය + opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" other: "%{count} අභියාචනා පොරොත්තු" @@ -329,11 +323,11 @@ si: resolved_reports: වාර්තා විසඳා ඇත software: මෘදුකාංගය sources: ලියාපදිංචි මූලාශ්‍ර - space: අවකාශය භාවිතය + space: ඉඩ භාවිතය title: උපකරණ පුවරුව top_languages: ඉහළම ක්රියාකාරී භාෂා top_servers: ඉහළම ක්රියාකාරී සේවාදායකයන් - website: වෙබ් අඩවිය + website: අඩවිය disputes: appeals: empty: අභියාචනා හමු නොවීය. @@ -353,7 +347,6 @@ si: existing_domain_block_html: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත, ඔබට එය අවහිර කිරීම ඉවත් කිරීමට අවශ්‍යයි. new: create: බ්ලොක් එකක් සාදන්න - hint: ඩොමේන් බ්ලොක් එක දත්ත සමුදාය තුල ගිණුම් ඇතුලත් කිරීම් නිර්මාණය වීම වලක්වන්නේ නැත, නමුත් එම ගිණුම් වලට ප්‍රතික්‍රියාශීලීව සහ ස්වයංක්‍රීයව විශේෂිත මධ්‍යස්ථ ක්‍රම යොදනු ඇත. severity: noop: කිසිවක් නැත suspend: අත්හිටුවන්න @@ -361,7 +354,6 @@ si: obfuscate: අපැහැදිලි වසම් නාමය obfuscate_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම් ලැයිස්තුවේ වසම් නාමය අර්ධ වශයෙන් අපැහැදිලි කරන්න private_comment: පුද්ගලික අදහස - private_comment_hint: පරිපාලකයින් විසින් අභ්‍යන්තර භාවිතය සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. public_comment: ප්‍රසිද්ධ අදහස public_comment_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම්, සාමාන්‍ය ජනතාව සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. reject_media: මාධ්‍ය ගොනු ප්‍රතික්ෂේප කරන්න @@ -415,16 +407,16 @@ si: by_domain: වසම confirm_purge: ඔබට මෙම වසමෙන් දත්ත ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද? content_policies: - comment: අභ්යන්තර සටහන + comment: අභ්‍යන්තර සටහන description_html: ඔබට මෙම වසම සහ එහි ඕනෑම උප වසමකින් සියලුම ගිණුම් වලට අදාළ වන අන්තර්ගත ප්‍රතිපත්ති නිර්වචනය කළ හැක. policies: reject_media: මාධ්‍ය ප්‍රතික්ෂේප කරන්න reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න silence: සීමාව suspend: අත්හිටුවන්න - policy: ප්රතිපත්ති + policy: ප්‍රතිපත්තිය reason: පොදු හේතුව - title: අන්තර්ගත ප්රතිපත්ති + title: අන්තර්ගත ප්‍රතිපත්ති dashboard: instance_accounts_dimension: වැඩිපුරම අනුගමනය කරන ගිණුම් instance_accounts_measure: ගබඩා කර ඇති ගිණුම් @@ -452,7 +444,7 @@ si: moderation: all: සියල්ල limited: සීමා සහිතයි - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස purge: පිරිසිදු කරන්න @@ -468,7 +460,6 @@ si: deactivate_all: සියල්ල අක්‍රිය කරන්න filter: all: සියල්ල - available: පවතින expired: ඉකුත් වී ඇත title: පෙරහන title: ඇරයුම් @@ -494,13 +485,13 @@ si: delete: මකන්න description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි enable: සබල කරන්න enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් - save_and_enable: සුරකින්න සහ සක්රිය කරන්න + save_and_enable: සුරකින්න හා සබල කරන්න setup: රිලේ සම්බන්ධතාවයක් සකසන්න signatures_not_enabled: ආරක්ෂිත මාදිලිය හෝ සීමිත ෆෙඩරේෂන් මාදිලිය සබල කර ඇති අතර රිලේ නිවැරදිව ක්‍රියා නොකරනු ඇත status: තත්වය @@ -524,21 +515,21 @@ si: add_to_report: වාර්තා කිරීමට තවත් එක් කරන්න are_you_sure: ඔබට විශ්වාසද? assign_to_self: මට පවරන්න - assigned: පවරා ඇති උපපරිපාලක by_target_domain: වාර්තා කළ ගිණුමෙහි වසම - category: වර්ගය + cancel: අවලංගු + category: ප්‍රවර්ගය category_description_html: මෙම ගිණුම සහ/හෝ අන්තර්ගතය වාර්තා කළ හේතුව වාර්තා කළ ගිණුම සමඟ සන්නිවේදනයේ සඳහන් කරනු ඇත comment: none: කිසිවක් නැත comment_description_html: 'වැඩි විස්තර සැපයීම සඳහා, %{name} ලිවීය:' created_at: වාර්තා කර ඇත - delete_and_resolve: පළ කිරීම් මකන්න - forwarded: යොමු කළා - forwarded_to: "%{domain}වෙත යොමු කරන ලදී" + delete_and_resolve: ලිපි මකන්න + forwarded: හරවා යවා ඇත + forwarded_to: "%{domain} වෙත හරවා යැවිණි" mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න - no_one_assigned: කිසි කෙනෙක නැහැ + no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න create_and_resolve: සටහන සමඟ විසඳන්න @@ -546,10 +537,9 @@ si: delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් - notes_description_html: අනෙකුත් උපපරිපාලකයින්ට සහ ඔබේ අනාගතයට සටහන් බලන්න සහ තබන්න quick_actions_description_html: 'වාර්තා කළ අන්තර්ගතය බැලීමට ඉක්මන් ක්‍රියාමාර්ගයක් ගන්න හෝ පහළට අනුචලනය කරන්න:' remote_user_placeholder: "%{instance}සිට දුරස්ථ පරිශීලකයා" - reopen: වාර්තාව නැවත විවෘත කරන්න + reopen: වාර්තාව නැවත අරින්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම reported_by: විසින් වාර්තා @@ -562,17 +552,46 @@ si: target_origin: වාර්තා කළ ගිණුමේ ආරම්භය title: වාර්තා unassign: පැවරීම ඉවත් කරන්න + unknown_action_msg: 'නොදන්නා ක්‍රියාමාර්ගයකි: %{action}' unresolved: නොවිසඳී ඇත updated_at: යාවත්කාලීන කරන ලදී view_profile: පැතිකඩ බලන්න + roles: + categories: + administration: පරිපාලනය + devops: DevOps + invites: ඇරයුම් + moderation: මැදිහත්කරණය + special: විශේෂ + delete: මකන්න + privileges: + invite_users: ආරාධනා කරන්න + manage_announcements: නිවේදනය කළමනාකරණය + manage_federation: ඒකාබද්ධ කළමනාකරණය + manage_invites: ආරාධනා කළමනාකරණය + manage_reports: වාර්තා කළමනාකරණය + manage_roles: භූමිකා කළමනාකරණය + manage_rules: නීති කළමනාකරණය + manage_settings: සැකසුම් කළමනාකරණය + manage_user_access: ප්‍රවේශය කළමනාකරණය + manage_users: පරිශ්‍රීලකයින් කළමනාකරණය + view_dashboard: උපකරණ පුවරුව බලන්න + view_devops: DevOps + title: භූමිකා rules: - add_new: නීතිය එකතු කරන්න delete: මකන්න description_html: බොහෝ දෙනා සේවා කොන්දේසි කියවා එකඟ වූ බව ප්‍රකාශ කරන අතර, සාමාන්‍යයෙන් මිනිසුන් ගැටලුවක් පැනනඟින තුරු කියවා නොගනිති. පැතලි බුලට් පොයින්ට් ලිස්ට් එකකින් ඒවා ලබා දීමෙන් බැලූ බැල්මට ඔබේ සේවාදායකයේ නීති බැලීම පහසු කරන්න. තනි නීති කෙටි හා සරලව තබා ගැනීමට උත්සාහ කරන්න, නමුත් ඒවා විවිධ අයිතම වලට බෙදීමට උත්සාහ නොකරන්න. - edit: නීතිය සංස්කරණය කරන්න + edit: නීතිය සංස්කරණය empty: තවමත් සේවාදායක රීති නිර්වචනය කර නොමැත. title: සේවාදායකයේ නීති settings: + about: + manage_rules: සේවාදායකයේ නීති කළමනාකරණය + title: පිළිබඳව + appearance: + title: පෙනුම + discovery: + profile_directory: පැතිකඩ නාමාවලිය domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -582,26 +601,43 @@ si: approved: ලියාපදිංචි වීමට අනුමැතිය අවශ්‍යයි none: කිසිවෙකුට ලියාපදිංචි විය නොහැක open: ඕනෑම කෙනෙකුට ලියාපදිංචි විය හැක + title: සේවාදායකයේ සැකසුම් site_uploads: delete: උඩුගත කළ ගොනුව මකන්න destroyed_msg: අඩවිය උඩුගත කිරීම සාර්ථකව මකා ඇත! + software_updates: + documentation_link: තව දැනගන්න + release_notes: නිකුතු සටහන් + title: තිබෙන යාවත්කාල + type: වර්ගය + version: අනුවාදය statuses: - back_to_account: ගිණුම් පිටුවට ආපසු යන්න - back_to_report: වාර්තා පිටුවට ආපසු යන්න + account: කර්තෘ + application: යෙදුම + back_to_account: ගිණුමේ පිටුවට ආපසු + back_to_report: වාර්තා පිටුවට ආපසු batch: remove_from_report: වාර්තාවෙන් ඉවත් කරන්න report: වාර්තාව - deleted: මකා දමන ලදී + deleted: මකා ඇත + favourites: ප්‍රියතමයන් + history: අනුවාද ඉතිහාසය + language: භාෂාව media: title: මාධ්‍යය + metadata: පාරදත්ත no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත - title: ගිණුම් තනතුරු - with_media: මාධ්‍ය දායකත්වය + open: ලිපිය අරින්න + original_status: මුල් ලිපිය + status_changed: ලිපිය සංශෝධිතයි + title: ගිණුමේ ලිපි + trending: නැගී එන + with_media: මාධ්‍ය සමඟ strikes: actions: - delete_statuses: "%{target}ගේ පළ කිරීම් %{name} මකා දමන ලදී" + delete_statuses: "%{target}ගේ ලිපි %{name} මකා ඇත" disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" - mark_statuses_as_sensitive: "%{name} %{target}ගේ පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත" + mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" @@ -611,28 +647,35 @@ si: system_checks: database_schema_check: message_html: පොරොත්තු දත්ත සමුදා සංක්‍රමණයන් ඇත. යෙදුම අපේක්ෂිත පරිදි ක්‍රියා කරන බව සහතික කිරීමට කරුණාකර ඒවා ධාවනය කරන්න + elasticsearch_preset: + action: ප්‍රලේඛනය බලන්න + elasticsearch_preset_single_node: + action: ප්‍රලේඛනය බලන්න elasticsearch_running_check: message_html: Elasticsearch වෙත සම්බන්ධ වීමට නොහැකි විය. කරුණාකර එය ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න, නැතහොත් සම්පූර්ණ පෙළ සෙවීම අක්‍රීය කරන්න elasticsearch_version_check: message_html: 'නොගැලපෙන ඉලාස්ටික් සෙවුම් අනුවාදය: %{value}' version_comparison: Elasticsearch %{running_version} ක්‍රියාත්මක වන අතර %{required_version} අවශ්‍ය වේ rules_check: - action: සේවාදායක නීති කළමනාකරණය කරන්න + action: සේවාදායකයේ නීති කළමනාකරණය message_html: ඔබ සේවාදායක රීති කිසිවක් නිර්වචනය කර නැත. sidekiq_process_check: message_html: "%{value} පෝලිම්(ය) සඳහා Sidekiq ක්‍රියාවලියක් ක්‍රියාත්මක නොවේ. කරුණාකර ඔබේ Sidekiq වින්‍යාසය සමාලෝචනය කරන්න" + software_version_critical_check: + action: තිබෙන යාවත්කාල බලන්න + software_version_patch_check: + action: තිබෙන යාවත්කාල බලන්න tags: review: තත්‍වය සමාලෝචනය updated_msg: Hashtag සැකසුම් සාර්ථකව යාවත්කාලීන කරන ලදී title: පරිපාලනය trends: - allow: ඉඩ දෙන්න - approved: අනුමත කළා + allow: ඉඩදෙන්න + approved: අනුමතයි disallow: අවසර නොදෙන්න links: - allow: සබැඳියට ඉඩ දෙන්න + allow: සබැඳියට ඉඩදෙන්න allow_provider: ප්‍රකාශකයාට ඉඩ දෙන්න - description_html: මේවා ඔබගේ සේවාදායකය විසින් පළ කිරීම් දකින ගිණුම් මගින් දැනට බොහෝ සෙයින් බෙදා ගන්නා සබැඳි වේ. එය ඔබගේ පරිශීලකයින්ට ලෝකයේ සිදුවෙමින් පවතින දේ සොයා ගැනීමට උදවු කළ හැක. ඔබ ප්‍රකාශකයා අනුමත කරන තුරු සබැඳි කිසිවක් ප්‍රසිද්ධියේ ප්‍රදර්ශනය නොවේ. ඔබට තනි සබැඳිවලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: සබැඳියට ඉඩ නොදෙන්න disallow_provider: ප්‍රකාශකයාට ඉඩ නොදෙන්න shared_by_over_week: @@ -640,7 +683,6 @@ si: other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් බෙදා ගන්නා ලදී title: නැඟී එන සබැඳි usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් බෙදා ගන්නා ලදී - only_allowed: අවසර දී ඇත pending_review: පොරොත්තු සමාලෝචනය preview_card_providers: allowed: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු විය හැක @@ -651,14 +693,13 @@ si: statuses: allow: පළ කිරීමට ඉඩ දෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - description_html: මේ වන විට ඔබේ සේවාදායකය දන්නා පෝස්ට් මේ වන විට බොහෝ බෙදාහරින සහ මේ මොහොතේ වැඩි කැමැත්තක් දක්වයි. එය ඔබගේ නව සහ නැවත පැමිණෙන පරිශීලකයින්ට අනුගමනය කිරීමට තවත් පුද්ගලයින් සොයා ගැනීමට උදවු කළ හැක. ඔබ කර්තෘ අනුමත කරන තෙක් පළ කිරීම් කිසිවක් ප්‍රසිද්ධියේ නොපෙන්වන අතර, කර්තෘ තම ගිණුම අන් අයට යෝජනා කිරීමට ඉඩ දෙයි. ඔබට තනි පළ කිරීම්වලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: පළ කිරීමට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: one: එක් වරක් බෙදාගත් හෝ ප්‍රිය කරන ලදී other: "%{friendly_count} වරක් බෙදාගෙන ප්‍රිය කරන ලදී" - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි tags: current_score: වත්මන් ලකුණු %{score} dashboard: @@ -667,9 +708,8 @@ si: tag_servers_dimension: ඉහළම සේවාදායකයන් tag_servers_measure: විවිධ සේවාදායකයන් tag_uses_measure: සම්පූර්ණ භාවිතය - description_html: මේවා දැනට ඔබගේ සේවාදායකය දකින බොහෝ පළ කිරීම් වල දිස්වන හැෂ් ටැග් වේ. මේ මොහොතේ මිනිසුන් වැඩිපුරම කතා කරන්නේ කුමක් දැයි සොයා ගැනීමට එය ඔබගේ පරිශීලකයින්ට උදවු කළ හැක. ඔබ ඒවා අනුමත කරන තුරු හෑෂ් ටැග් ප්‍රසිද්ධියේ නොපෙන්වයි. - listable: යෝජනා කළ හැක - not_listable: යෝජනා නොකරනු ඇත + listable: යෝජනා කළ හැකිය + not_listable: යෝජනා නොවනු ඇත not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත not_usable: භාවිතා කළ නොහැක peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" @@ -692,7 +732,6 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - description_html: A webhook Mastodon හට තෝරාගත් සිදුවීම් පිළිබඳ තත්‍ය කාලීන දැනුම්දීම් ක් ඔබේම යෙදුමට තල්ලු කිරීමට හැකියාව ලබා දෙයි, එම නිසා ඔබේ යෙදුමට ස්වයංක්‍රීයව ප්‍රතික්‍රියා අවුලුවාලීමට හැකිය. disable: අක්රිය කරන්න disabled: ආබාධිතයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න @@ -700,8 +739,8 @@ si: enable: සබල කරන්න enabled: ක්රියාකාරී enabled_events: - one: 1 සබල කළ සිදුවීමක් - other: "%{count} සබල කළ සිදුවීම්" + one: සබල සිදුවීම් 1 + other: සබල සිදුවීම් %{count} events: සිදුවීම් new: නව webhook rotate_secret: රහස කරකවන්න @@ -718,9 +757,6 @@ si: sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට suspend: ඔවුන්ගේ ගිණුම අත්හිටුවීමට - body: "%{target} යනු %{type}ක් වූ %{date}සිට %{action_taken_by} කින් මධ්‍යස්ථ තීරණයක් අභියාචනා කරයි. ඔවුන් මෙසේ ලිවීය." - next_steps: ඔබට මධ්‍යස්ථ තීරණය අවලංගු කිරීමට අභියාචනය අනුමත කළ හැකිය, නැතහොත් එය නොසලකා හරින්න. - subject: "%{username} යනු %{instance}හි මධ්‍යස්ථ තීරණයකට අභියාචනා කරයි" new_pending_account: body: නව ගිණුමේ විස්තර පහතින්. ඔබට මෙම යෙදුම අනුමත කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට හැකිය. subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) @@ -747,25 +783,25 @@ si: hint_html: ඔබට වෙනත් ගිණුමකින් මෙය වෙත මාරු වීමට අවශ්‍ය නම්, මෙහිදී ඔබට අන්වර්ථ නාමයක් සෑදිය හැක, එය පැරණි ගිණුමෙන් අනුගාමිකයින් මෙම ගිණුමට ගෙන යාමට පෙර අවශ්‍ය වේ. මෙම ක්‍රියාවම හානිකර නොවන සහ ආපසු හැරවිය හැකිවේ. ගිණුම් සංක්‍රමණය පැරණි ගිණුමෙන් ආරම්භ වේ. remove: අන්වර්ථය විසන්ධි කරන්න appearance: - advanced_web_interface: උසස් වියමන අතුරුමුහුණත + advanced_web_interface: සංකීර්ණ අතුරු මුහුණත advanced_web_interface_hint: 'ඔබට ඔබේ සම්පූර්ණ තිරයේ පළල භාවිතා කිරීමට අවශ්‍ය නම්, උසස් වෙබ් අතුරු මුහුණත ඔබට අවශ්‍ය පරිදි එකම වේලාවක බොහෝ තොරතුරු බැලීමට විවිධ තීරු වින්‍යාස කිරීමට ඉඩ දෙයි: නිවස, දැනුම්දීම්, ෆෙඩරේටඩ් කාලරාමුව, ඕනෑම ලැයිස්තු සහ හැෂ් ටැග්.' animations_and_accessibility: සජීවිකරණ සහ ප්‍රවේශ්‍යතාව confirmation_dialogs: තහවුරු කිරීමේ සංවාද discovery: සොයාගැනීම localization: - body: Mastodon ස්වේච්ඡා සේවකයන් විසින් පරිවර්තනය කර ඇත. + body: මාස්ටඩන් ස්වේච්ඡාවෙන් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. - sensitive_content: සංවේදී අන්තර්ගතය + sensitive_content: සංවේදී අන්තර්ගත application_mailer: notification_preferences: ඊමේල් මනාප වෙනස් කරන්න salutation: "%{name}," settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' view: 'දැක්ම:' view_profile: පැතිකඩ බලන්න - view_status: පළ කිරීම බලන්න + view_status: ලිපිය බලන්න applications: - created: යෙදුම සාර්ථකව නිර්මාණය කරන ලදී + created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී @@ -775,9 +811,8 @@ si: delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: - prefix_invited_by_user: "@%{name} ඔබට Mastodon හි මෙම සේවාදායකයට සම්බන්ධ වීමට ආරාධනා කරයි!" + prefix_invited_by_user: "@%{name} මෙම මාස්ටඩන් සේවාදායකයට ආරාධනා කර ඇත!" prefix_sign_up: අදම මාස්ටඩන් හි ලියාපදිංචි වන්න! - suffix: ගිණුමක් සමඟ, ඔබට ඕනෑම Mastodon සේවාදායකයකින් සහ තවත් බොහෝ දේ භාවිතා කරන්නන් සමඟ පුද්ගලයින් අනුගමනය කිරීමට, යාවත්කාලීන කිරීම් පළ කිරීමට සහ පණිවිඩ හුවමාරු කර ගැනීමට හැකි වනු ඇත! dont_have_your_security_key: ඔබගේ ආරක්ෂක යතුර නොමැතිද? forgot_password: මුරපදය අමතක වුනාද? invalid_reset_password_token: මුරපද යළි පිහිටුවීමේ ටෝකනය අවලංගු හෝ කල් ඉකුත් වී ඇත. කරුණාකර අලුත් එකක් ඉල්ලන්න. @@ -788,11 +823,13 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. - or_log_in_with: හෝ සමඟින් පිවිසෙන්න register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" - reset_password: මුරපදය නැවත සකසන්න - security: ආරක්ෂාව + reset_password: මුරපදය යළි සකසන්න + rules: + accept: පිළිගන්න + back: ආපසු + security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න status: account_status: ගිණුමේ තත්වය @@ -802,11 +839,11 @@ si: redirecting_to: එය දැනට %{acct}වෙත හරවා යවන බැවින් ඔබගේ ගිණුම අක්‍රියයි. view_strikes: ඔබගේ ගිණුමට එරෙහිව පසුගිය වර්ජන බලන්න too_fast: පෝරමය ඉතා වේගයෙන් ඉදිරිපත් කර ඇත, නැවත උත්සාහ කරන්න. - use_security_key: ආරක්ෂක යතුර භාවිතා කරන්න + use_security_key: ආරක්‍ෂණ යතුර භාවිතා කරන්න challenge: confirm: ඉදිරියට hint_html: "ඉඟිය: අපි ඉදිරි පැය සඳහා නැවත ඔබගේ මුරපදය ඔබෙන් නොඉල්ලමු." - invalid_password: නොවන මුරපදයකි + invalid_password: මුරපදය වැරදිය prompt: ඉදිරියට යාමට මුරපදය තහවුරු කරන්න crypto: errors: @@ -814,20 +851,24 @@ si: invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: - default: "%b %d, %Y" - with_month_name: "%B %d, %Y" + default: "%Y %b %d" + with_month_name: "%Y %B %d" datetime: distance_in_words: about_x_hours: පැය %{count} about_x_months: මාස %{count} + about_x_years: ව.%{count} + almost_x_years: ව.%{count} half_a_minute: මේ දැන් - less_than_x_minutes: මීටර් %{count} + less_than_x_minutes: විනාඩි %{count} less_than_x_seconds: මේ දැන් - x_minutes: මීටර් %{count} + over_x_years: ව.%{count} + x_days: ද.%{count} + x_minutes: විනාඩි %{count} x_months: මාස %{count} - x_seconds: "%{count}තත්" + x_seconds: තත්. %{count} deletes: - challenge_not_passed: ඔබ ඇතුළත් කළ තොරතුරු නිවැරදි නැත + challenge_not_passed: ඔබ ඇතුල් කරන ලද තොරතුරු වැරදියි confirm_password: ඔබගේ අනන්‍යතාවය තහවුරු කිරීමට ඔබගේ වත්මන් මුරපදය ඇතුලත් කරන්න confirm_username: ක්රියා පටිපාටිය තහවුරු කිරීමට ඔබගේ පරිශීලක නාමය ඇතුලත් කරන්න proceed: ගිණුම මකන්න @@ -875,6 +916,9 @@ si: your_appeal_rejected: ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත domain_validator: invalid_domain: වලංගු ඩොමේන් නාමයක් නොවේ + edit_profile: + basic_information: මූලික තොරතුරු + other: වෙනත් errors: '400': ඔබ ඉදිරිපත් කළ ඉල්ලීම අවලංගු හෝ විකෘති විය. '403': ඔබට මෙම පිටුව බැලීමට අවසර නැත. @@ -884,27 +928,28 @@ si: '422': content: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය. ඔබ කුකීස් අවහිර කරනවාද? title: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය - '429': ඉල්ලීම් වැඩියි + '429': ඉල්ලීම් බොහෝය '500': content: අපට කණගාටුයි, නමුත් අපගේ පැත්තෙන් යමක් වැරදී ඇත. - title: මෙම පිටුව නිවැරදි නොවේ + title: මෙම පිටුව වැරදියි '503': තාවකාලික සේවාදායකයේ අසාර්ථක වීමක් හේතුවෙන් පිටුව සේවය කිරීමට නොහැකි විය. - noscript_html: Mastodon වෙබ් යෙදුම භාවිතා කිරීමට, කරුණාකර JavaScript සක්‍රීය කරන්න. විකල්පයක් ලෙස, ඔබේ වේදිකාව සඳහා එකක් උත්සාහ කරන්න. + noscript_html: මාස්ටඩන් වියමන යෙදුම භාවිතා කිරීමට ජාවාස්ක්‍රිප්ට් සබල කරන්න. ඊට අමතරව, ඔබගේ වේදිකාව සඳහා වන නිසග යෙදුමක් අත්හදා බලන්න. existing_username_validator: not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය - download: ඔබගේ සුරක්ෂිතභාවය බාගන්න + download: ඔබගේ සංරක්‍ෂිතය බාගන්න hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය blocks: ඔබ අවහිර කරන්න - bookmarks: පොත් යොමු කරන්න + bookmarks: පොත්යොමු + csv: CSV domain_blocks: වසම් අවහිර කිරීම් - lists: ලැයිස්තුව + lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න storage: මාධ්‍ය ගබඩාව featured_tags: @@ -913,13 +958,14 @@ si: filters: contexts: account: පැතිකඩයන් - home: නිවස සහ ලැයිස්තු + home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් public: පොදු කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න keywords: මූල පද + statuses: තනි ලිපි title: පෙරහන සංස්කරණය errors: deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. @@ -927,21 +973,32 @@ si: index: contexts: "%{contexts}හි පෙරහන්" delete: මකන්න - empty: ඔබට පෙරහන් නොමැත. - expires_in: "%{distance}කින් කල් ඉකුත් වේ" - expires_on: "%{date}දින කල් ඉකුත් වේ" + empty: ඔබ සතුව පෙරහන් නැත. + expires_in: "%{distance} කින් ඉකුත් වේ" + expires_on: "%{date} දී ඉකුත් වේ" keywords: - one: "%{count} මූල පදය" - other: "%{count} මූල පද" + one: මූල පද %{count} + other: මූල පද %{count} + statuses: + one: ලිපි %{count} + other: ලිපි %{count} title: පෙරහන් new: save: නව පෙරහන සුරකින්න title: නව පෙරහනක් එකතු කරන්න + statuses: + back_to_filter: පෙරහනට ආපසු + batch: + remove: පෙරහනෙන් ඉවතලන්න + index: + title: පෙරූ ලිපි generic: all: සියල්ල - changes_saved_msg: වෙනස්කම් සාර්ථකව සුරකින ලදී! + cancel: අවලංගු + changes_saved_msg: වෙනස්කම් සාර්ථකව සුරැකිණි! copy: පිටපතක් delete: මකන්න + deselect: සියල්ල නොතෝරන්න none: කිසිවක් නැත order_by: විසින් ඇණවුම් කරන්න save_changes: වෙනස්කම් සුරකින්න @@ -951,24 +1008,30 @@ si: other: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂ %{count} ක් සමාලෝචනය කරන්න imports: errors: + empty: හිස් CSV ගොනුවකි over_rows_processing_limit: පේළි %{count} කට වඩා අඩංගු වේ + too_large: ගොනුව ඉතා විශාලයි + imported: ආයාත විය modes: - merge: ඒකාබද්ධ කරන්න + merge: ඒකාබද්ධ merge_long: පවතින වාර්තා තබා නව ඒවා එකතු කරන්න overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත + titles: + lists: ලැයිස්තු ආයාත වෙමින් types: - blocking: අවහිර කිරීමේ ලැයිස්තුව - bookmarks: පොත් යොමු - domain_blocking: වසම් අවහිර කිරීමේ ලැයිස්තුව - following: පහත ලැයිස්තුව + blocking: අවහිර ලැයිස්තුව + bookmarks: පොත්යොමු + domain_blocking: වසම් අවහිර ලැයිස්තුව + following: අනුගමන ලැයිස්තුව + lists: ලැයිස්තු muting: නිහඬ කිරීමේ ලැයිස්තුව upload: උඩුගත කරන්න invites: - delete: අක්රිය කරන්න - expired: කල් ඉකුත් වී ඇත + delete: අක්‍රිය කරන්න + expired: ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 '21600': පැය 6 @@ -987,7 +1050,7 @@ si: table: expires_at: කල් ඉකුත් වේ uses: භාවිතා කරයි - title: මිනිසුන්ට ආරාධනා කරන්න + title: ආරාධනා කරන්න login_activities: authentication_methods: otp: ද්වි-සාධක සත්‍යාපන යෙදුම @@ -1036,7 +1099,7 @@ si: other_data: වෙනත් දත්ත කිසිවක් ස්වයංක්‍රීයව ගෙන නොයනු ඇත redirect: ඔබගේ ජංගම ගිණුමේ පැතිකඩ යළි-යොමු කිරීමේ දැන්වීමක් සමඟ යාවත්කාලීන කෙරෙන අතර සෙවුම් වලින් බැහැර කරනු ලැබේ moderation: - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය move_handler: carry_blocks_over_text: මෙම පරිශීලකයා ඔබ අවහිර කර තිබූ %{acct}සිට මාරු විය. carry_mutes_over_text: මෙම පරිශීලකයා ඔබ නිශ්ශබ්ද කර තිබූ %{acct}වෙතින් මාරු විය. @@ -1044,37 +1107,31 @@ si: notification_mailer: admin: report: - subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" + subject: "%{name} වාර්තාවක් යොමු කර ඇත" sign_up: subject: "%{name} අත්සන් කර ඇත" favourite: - body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' - subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" - title: නව ප්රියතම + body: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා:" + subject: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා" + title: නව ප්‍රියතමය follow: body: "%{name} දැන් ඔබව අනුගමනය කරයි!" subject: "%{name} දැන් ඔබව අනුගමනය කරයි" title: නව අනුගාමිකයෙක් follow_request: - action: අනුගමනය කරන ඉල්ලීම් කළමනාකරණය කරන්න + action: අනුගමන ඉල්ලීම් කළමනාකරණය body: "%{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත" subject: 'පොරොත්තු අනුගාමිකයා: %{name}' - title: නව අනුගමනය ඉල්ලීම + title: නව අනුගමන ඉල්ලීම mention: action: පිළිතුර - body: 'ඔබව මෙහි %{name} කින් සඳහන් කර ඇත:' - subject: ඔබව %{name}මගින් සඳහන් කර ඇත + body: "%{name} ඔබව මෙහි සඳහන් කර ඇත:" + subject: "%{name} ඔබව සඳහන් කර ඇත" title: නව සඳැහුම - poll: - subject: "%{name} න් මත විමසුමක් අවසන් විය" - reblog: - body: 'ඔබේ පළ කිරීම %{name}කින් වැඩි කරන ලදී:' - subject: "%{name} ඔබේ පළ කිරීම ඉහළ නැංවීය" - title: නව තල්ලුවක් status: subject: "%{name} දැන් පළ කළා" update: - subject: "%{name} පළ කිරීමක් සංස්කරණය කළා" + subject: "%{name} ලිපිය සංශෝධනය කළා" notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' @@ -1084,11 +1141,8 @@ si: decimal_units: format: "%n%u" units: - billion: බී million: ද.ල. - quadrillion: ප්‍රශ්නය thousand: ද. - trillion: ටී otp_authentication: code_hint: තහවුරු කිරීමට ඔබගේ සත්‍යාපන යෙදුම මගින් ජනනය කරන ලද කේතය ඇතුළු කරන්න description_html: ඔබ සත්‍යාපන යෙදුමක් භාවිතයෙන් ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්නේ නම්, ලොගින් වීමේදී ඔබට ඔබගේ දුරකථනය සන්තකයේ තබා ගැනීමට අවශ්‍ය වනු ඇත, එය ඔබට ඇතුළු වීමට ටෝකන ජනනය කරයි. @@ -1105,19 +1159,21 @@ si: truncate: "…" polls: errors: - already_voted: ඔබ දැනටමත් මෙම මත විමසුමට ඡන්දය දී ඇත - duplicate_options: අනුපිටපත් අයිතම අඩංගු වේ + already_voted: ඔබ මෙම මත විමසුමට ඡන්දය දී ඇත duration_too_long: අනාගතයට බොහෝ දුරයි - duration_too_short: ඉතා ඉක්මනින් වේ - expired: මත විමසුම දැනටමත් අවසන් වී ඇත + expired: මත විමසුම දැනටමත් නිමා වී ඇත invalid_choice: තෝරාගත් ඡන්ද විකල්පය නොපවතී - over_character_limit: එක් එක් අක්ෂර %{max} ට වඩා දිගු විය නොහැක - too_few_options: එක් අයිතමයකට වඩා තිබිය යුතුය - too_many_options: අයිතම %{max} කට වඩා අඩංගු විය නොහැක + self_vote: ඔබගේ මත විමසුමට ජන්දය දීමට නොහැකිය + too_few_options: එක් අථකයකට වඩා තිබිය යුතුය + too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් posting_defaults: පෙරනිමි පළ කිරීම public_timelines: පොදු කාලරේඛා + privacy: + search: සොයන්න + privacy_policy: + title: රහස්‍යතා ප්‍රතිපත්තිය reactions: errors: limit_reached: විවිධ ප්‍රතික්‍රියා වල සීමාව ළඟා විය @@ -1133,7 +1189,7 @@ si: most_recent: මෑතකාලීන moved: මාරු කළා mutual: අන්යෝන්ය - primary: ප්රාථමික + primary: ප්‍රාථමික relationship: සම්බන්ධතාවය remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න @@ -1158,36 +1214,45 @@ si: browser: අතිරික්සුව browsers: alipay: අලිපේ + blackberry: බ්ලැක්බෙරි chrome: ක්‍රෝම් edge: මයික්‍රොසොෆ්ට් එඩ්ගේ electron: ඉලෙක්ට්‍රෝන් firefox: ෆයර්ෆොක්ස් generic: නොදන්නා අතිරික්සුවකි + huawei_browser: හුආවේ අතිරික්සුව ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් micro_messenger: මයික්‍රොමැසෙන්ජර් - nokia: Nokia S40 Ovi බ්‍රව්සරය + nokia: නොකියා S40 Ovi අතිරික්සුව opera: ඔපෙරා otter: ඔටර් + phantom_js: PhantomJS qq: කියුකියු අතිරික්සුව safari: සෆාරි + uc_browser: UC අතිරික්සුව + unknown_browser: නොදන්නා අතිරික්සුවකි weibo: වෙයිබො - current_session: වත්මන් සැසිය - description: "%{browser} මත %{platform}" - explanation: මේවා දැනට ඔබගේ Mastodon ගිණුමට ලොග් වී ඇති වෙබ් බ්‍රව්සර් වේ. + current_session: වත්මන් වාරය + description: "%{platform} හි %{browser}" + explanation: ඔබගේ මාස්ටඩන් ගිණුමට පිවිසීම සඳහා භාවිතා කර තිබෙන අතිරික්සු. ip: අ.ජා. කෙ. (IP) platforms: adobe_air: ඇඩෝබි එයාර් android: ඇන්ඩ්‍රොයිඩ් + blackberry: බ්ලැක්බෙරි + chrome_os: ChromeOS firefox_os: ෆයර්ෆොක්ස් ඕඑස් ios: අයිඕඑස් + kai_os: KaiOS linux: ලිනක්ස් mac: මැක්ඕඑස් + unknown_platform: නොදන්නා වේදිකාවකි windows: වින්ඩෝස් windows_mobile: වින්ඩෝස් මොබයිල් windows_phone: වින්ඩෝස් පෝන් revoke: අවලංගු කරන්න - revoke_success: සැසිය සාර්ථකව අවලංගු කරන ලදී - title: සැසිවාර + revoke_success: වාරය සාර්ථකව අවලංගු කෙරිණි + title: වාර view_authentication_history: ඔබගේ ගිණුමේ සත්‍යාපන ඉතිහාසය බලන්න settings: account: ගිණුම @@ -1195,8 +1260,8 @@ si: aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම authorized_apps: අවසර ලත් යෙදුම් - back: Mastodon වෙත නැවත යන්න - delete: ගිණුම මකා දැමීම + back: මාස්ටඩන් වෙත ආපසු + delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය export: දත්ත නිර්යාතය @@ -1205,13 +1270,12 @@ si: import_and_export: ආයාත හා නිර්යාත migrate: ගිණුම් සංක්‍රමණය notifications: දැනුම්දීම් - preferences: මනාප - profile: පැතිකඩ + preferences: අභිප්‍රේත + profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම - strikes: මධ්‍යස්ථ වැඩ වර්ජන two_factor_authentication: ද්වි සාධක Aut - webauthn_authentication: ආරක්ෂක යතුරු + webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: attached: audio: @@ -1219,14 +1283,13 @@ si: other: "%{count} ශ්රව්ය" description: 'අමුණා ඇත: %{attached}' image: - one: "%{count} රූපය" - other: පින්තූර %{count} + one: රූප %{count} + other: රූප %{count} video: - one: "%{count} වීඩියෝ" - other: වීඩියෝ %{count} - boosted_from_html: "%{acct_link}සිට වැඩි කරන ලදී" + one: දෘශ්‍යක %{count} + other: දෘශ්‍යක %{count} content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම: %{warning}' - default_language: අතුරු මුහුණත් භාෂාවට සමානයි + default_language: අතුරු මුහුණතේ භාෂාවම disallowed_hashtags: one: 'අනුමත නොකළ හැෂ් ටැගයක් අඩංගු විය: %{tags}' other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' @@ -1239,15 +1302,14 @@ si: direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක - reblog: බූස්ට් එකක් ඇලවිය නොහැක poll: total_people: - one: "%{count} පුද්ගලයෙක්" - other: පුද්ගලයන් %{count} + one: පුද්ගලයින් %{count} + other: පුද්ගලයින් %{count} total_votes: - one: "%{count} ඡන්ද" + one: ඡන්ද %{count} යි other: ඡන්ද %{count} යි - vote: ඡන්දය දෙන්න + vote: ඡන්දය show_more: තව පෙන්වන්න show_newer: අලුත්ම පෙන්වන්න show_older: පැරණි පෙන්වන්න @@ -1264,37 +1326,32 @@ si: statuses_cleanup: enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි - exceptions: ව්යතිරේක + exceptions: හැර දැමීම් explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. - ignore_favs: ප්‍රියතමයන් නොසලකා හරින්න - ignore_reblogs: වැඩි කිරීම් නොසලකා හරින්න + ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක - interaction_exceptions_explanation: පළ කිරීම් වරක් ඒවා ඉක්මවා ගිය පසු ප්‍රියතම හෝ බූස්ට් සීමාවට පහළින් ගියහොත් ඒවා මැකීමට සහතිකයක් නොමැති බව සලකන්න. - keep_direct: සෘජු පණිවිඩ තබා ගන්න - keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මකන්නේ නැත - keep_media: මාධ්‍ය ඇමුණුම් සමඟ පළ කිරීම් තබා ගන්න + keep_direct: සෘජු පණිවිඩ තබාගන්න + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත + keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි - keep_polls: ඡන්ද තබා ගන්න - keep_polls_hint: ඔබගේ ඡන්ද විමසීම් කිසිවක් මකන්නේ නැත - keep_self_bookmark: ඔබ පිටු සලකුණු කළ පළ කිරීම් තබා ගන්න - keep_self_bookmark_hint: ඔබ ඔබේම පළ කිරීම් පිටු සලකුණු කර ඇත්නම් ඒවා මකා නොදමන්න - keep_self_fav: ඔබ කැමති පළ කිරීම් තබා ගන්න - keep_self_fav_hint: ඔබ ඒවාට කැමති නම් ඔබේම පළ කිරීම් මකා නොදමන්න + keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත + keep_self_bookmark: ඔබ පොත්යොමු තැබූ ලිපි තබාගන්න + keep_self_bookmark_hint: ඔබගේම ලිපි වලට පොත්යොමු තබා ඇත්නම් ඒවා මකා නොදැමෙයි + keep_self_fav: ඔබ ප්‍රිය කළ ලිපි තබාගන්න + keep_self_fav_hint: ඔබගේම ලිපි වලට ප්‍රිය කර ඇත්නම් ඒවා මකා නොදැමෙයි min_age: - '1209600': සති 2 යි - '15778476': මාස 6 යි - '2629746': මාස 1 යි - '31556952': වසර 1 යි - '5259492': මාස 2 ක් - '604800': 1 සතිය - '63113904': අවුරුදු 2 ක් - '7889238': මාස 3 යි + '1209600': සති 2 + '15778476': මාස 6 + '2629746': මාස 1 + '31556952': අවුරුදු 1 + '5259492': මාස 2 + '604800': සති 1 + '63113904': අවුරුදු 2 + '7889238': මාස 3 min_age_label: වයස් සීමාව - min_favs: අඩුම තරමින් පෝස්ට් ප්‍රිය කරන ලෙස තබා ගන්න - min_reblogs: අඩුම තරමේ පෝස්ට් බූස්ට් කරගෙන තියාගන්න - min_reblogs_hint: අඩුම තරමින් මෙම වාර ගණන වැඩි කර ඇති ඔබගේ පළ කිරීම් කිසිවක් මකා නොදමන්න. බූස්ට් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න + min_favs: අවම වශයෙන් ප්‍රිය කළ ලිපි තබාගන්න stream_entries: sensitive_content: සංවේදී අන්තර්ගතයකි strikes: @@ -1303,11 +1360,15 @@ si: tags: does_not_match_previous_name: පෙර නමට නොගැලපේ themes: - contrast: Mastodon (ඉහළ වෙනස) - default: මැස්ටෝඩන් (අඳුරු) - mastodon-light: මැස්ටෝඩන් (ආලෝකය) + default: මාස්ටඩන් (අඳුරු) + mastodon-light: මාස්ටඩන් (දීප්ත) + time: + formats: + default: "%Y %b %d, %H:%M" + month: "%Y %b" + with_time_zone: "%Y %b %d, %H:%M %Z" two_factor_authentication: - add: එකතු කරන්න + add: එකතු disable: 2FA අබල කරන්න disabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව අබල කර ඇත edit: සංස්කරණය @@ -1332,11 +1393,11 @@ si: subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: - explanation: ඔබ ඔබේ Mastodon ගිණුමේ සම්පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගත කිරීම සඳහා සූදානම්! + explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: - change_password: ඔබගේ මුරපදය වෙනස් කරන්න + change_password: මුරපදය වෙනස් කරන්න details: 'පුරනය වීමේ විස්තර මෙන්න:' explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. @@ -1349,9 +1410,7 @@ si: spam: ආයාචිත තැපැල් violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: - delete_statuses: ඔබගේ සමහර පළ කිරීම් ප්‍රජා මාර්ගෝපදේශ එකක් හෝ කිහිපයක් උල්ලංඝනය කරන බව සොයා ගෙන ඇති අතර පසුව %{instance}හි උපපරිපාලකයින් විසින් ඉවත් කර ඇත. disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - mark_statuses_as_sensitive: ඔබගේ සමහර පළ කිරීම් %{instance}හි පරිපාලකයින් විසින් සංවේදී ලෙස සලකුණු කර ඇත. මෙයින් අදහස් කරන්නේ පෙරදසුනක් දර්ශනය වීමට පෙර පුද්ගලයින්ට පළ කිරීම් වල මාධ්‍ය තට්ටු කිරීමට අවශ්‍ය වනු ඇති බවයි. අනාගතයේදී පළ කිරීමේදී ඔබට මාධ්‍ය සංවේදී ලෙස සලකුණු කළ හැක. sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. @@ -1361,25 +1420,25 @@ si: delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" - none: "%{acct}සඳහා අනතුරු ඇඟවීම" - sensitive: "%{acct} හි ඔබගේ පළ කිරීම් මෙතැන් සිට සංවේදී ලෙස සලකුණු කෙරේ" + none: "%{acct} සඳහා අවවාදය" + sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත suspend: ඔබගේ ගිණුම %{acct} අත්හිටුවා ඇත title: - delete_statuses: පළ කිරීම් ඉවත් කරන ලදී + delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත none: අවවාදයයි - sensitive: ගිණුම සංවේදී ලෙස ලකුණු කර ඇත - silence: ගිණුම සීමා සහිතයි + sensitive: ගිණුම සංවේදී බව යොදා ඇත + silence: ගිණුම සීමා කර ඇත suspend: ගිණුම අත්හිටුවා ඇත welcome: - edit_profile_action: සැකසුම් පැතිකඩ + edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: පළ කිරීම ආරම්භ කරන්න + final_action: ලිපි පළ කරන්න full_handle: ඔබේ සම්පූර්ණ හසුරුව full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. - subject: Mastodon වෙත සාදරයෙන් පිළිගනිමු + subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: follow_limit_reached: ඔබට පුද්ගලයින් %{limit} කට වඩා අනුගමනය කළ නොහැක @@ -1388,9 +1447,10 @@ si: seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත. signed_in_as: 'මෙසේ පුරනය වී ඇත:' verification: - verification: සත්යාපනය + here_is_how: කෙසේදැයි මෙන්න + verification: සත්‍යාපනය webauthn_credentials: - add: නව ආරක්ෂක යතුර එක් කරන්න + add: නව ආරක්‍ෂණ යතුර එක් කරන්න create: error: ඔබගේ ආරක්ෂක යතුර එක් කිරීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව එක් කරන ලදී. @@ -1400,9 +1460,9 @@ si: destroy: error: ඔබගේ ආරක්ෂක යතුර මැකීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව මකා ඇත. - invalid_credential: වලංගු නොවන ආරක්ෂක යතුර + invalid_credential: ආරක්‍ෂණ යතුර වලංගු නොවේ nickname_hint: ඔබගේ නව ආරක්ෂක යතුරේ අන්වර්ථ නාමය ඇතුළත් කරන්න not_enabled: ඔබ තවමත් WebAuthn සබල කර නැත not_supported: මෙම බ්‍රවුසරය ආරක්ෂක යතුරු සඳහා සහය නොදක්වයි otp_required: ආරක්ෂක යතුරු භාවිතා කිරීමට කරුණාකර පළමුව ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්න. - registered_on: "%{date}හි ලියාපදිංචි වී ඇත" + registered_on: "%{date} දී ලියාපදිංචි වී ඇත" diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 23e63ef42c..917d3791f6 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -7,10 +7,9 @@ si: account_migration: acct: ඔබට යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න account_warning_preset: - text: ඔබට URL, හෑෂ් ටැග් සහ සඳහන් කිරීම් වැනි පෝස්ට් සින්ටැක්ස් භාවිතා කළ හැක + text: ඔබට ඒ.ස.නි., පූරක අනන්‍යන සහ සැඳහුම් වැනි ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: - include_statuses: මධ්‍යස්ථ ක්‍රියාව හෝ අනතුරු ඇඟවීමට හේතු වී ඇත්තේ කුමන පළ කිරීම්දැයි පරිශීලකයා දකිනු ඇත send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" @@ -38,17 +37,16 @@ si: email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න - irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත - locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් + irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්‍රතිවර්ත්‍යව අතුරුදහන් වනු ඇත + locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්‍රීලක අතුරුමුහුණතේ භාෂාව password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න - phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ + phrase: ලිපිවල පෙළ හෝ අන්තර්ගත අවවාද නොසලකා ගැළපෙනු ඇත scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. - setting_aggregate_reblogs: මෑතකදී බූස්ට් කරන ලද පළ කිරීම් සඳහා නව බූස්ට් පෙන්වන්න එපා (අලුතින් ලැබුණු බූස්ට් වලට පමණක් බලපායි) - setting_always_send_emails: සාමාන්‍යයෙන් ඔබ Mastodon සක්‍රියව භාවිතා කරන විට විද්‍යුත් තැපැල් දැනුම්දීම් නොයවනු ඇත + setting_always_send_emails: ඔබ නිතර මාස්ටඩන් භාවිතා කරන විට වි-තැපැල් දැනුම්දීම් නොලැබෙයි setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක - setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න - setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න - setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න + setting_display_media_default: සංවේදී බව සලකුණු කළ මාධ්‍ය සඟවන්න + setting_display_media_hide_all: සැමවිට මාධ්‍ය සඟවන්න + setting_display_media_show_all: සැමවිට මාධ්‍ය පෙන්වන්න setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි @@ -58,14 +56,14 @@ si: domain: මෙය විද්‍යුත් තැපැල් ලිපිනයේ හෝ එය භාවිතා කරන MX වාර්තාවේ පෙන්වන ඩොමේන් නාමය විය හැක. ලියාපදිංචි වූ පසු ඒවා පරීක්ෂා කරනු ලැබේ. with_dns_records: ලබා දී ඇති වසමේ DNS වාර්තා විසඳීමට උත්සාහ කරන අතර ප්‍රතිඵල ද අවහිර කරනු ලැබේ filters: - action: පළ කිරීමක් පෙරහනට ගැළපෙන විට සිදු කළ යුතු ක්‍රියාව තෝරන්න + action: ලිපියක් පෙරහනට ගැළපෙන විට ඉටු විය යුතු ක්‍රියාමාර්ගය තෝරන්න actions: hide: පෙරහන් කළ අන්තර්ගතය සම්පූර්ණයෙන්ම සඟවන්න, එය නොපවතින ලෙස හැසිරෙන්න warn: පෙරහන මාතෘකාව සඳහන් කරන අනතුරු ඇඟවීමක් පිටුපස පෙරූ අන්තර්ගතය සඟවන්න form_challenge: current_password: ඔබ ආරක්ෂිත ප්‍රදේශයකට ඇතුල් වේ imports: - data: CSV ගොනුව වෙනත් Mastodon සේවාදායකයකින් අපනයනය කරන ලදී + data: CSV ගොනුව වෙනත් මාස්ටඩන් සේවාදායකයකින් නිර්යාත කර ඇත invite_request: text: මෙය ඔබගේ අයදුම්පත සමාලෝචනය කිරීමට අපට උපකාරී වනු ඇත ip_block: @@ -84,7 +82,7 @@ si: tag: name: ඔබට අකුරු වල ආවරණය පමණක් වෙනස් කළ හැකිය, උදාහරණයක් ලෙස, එය වඩාත් කියවිය හැකි කිරීමට user: - chosen_languages: පරීක්ෂා කළ විට, තෝරාගත් භාෂාවලින් පළ කිරීම් පමණක් පොදු කාලරේඛා තුළ සංදර්ශන කෙරේ + chosen_languages: සබල නම්, තෝරාගත් භාෂාවල ලිපි පමණක් ප්‍රසිද්ධ කාල රේඛාවේ දිස්වේ webhook: events: යැවීමට සිදුවීම් තෝරන්න url: සිදුවීම් යවනු ලබන ස්ථානය @@ -99,16 +97,16 @@ si: acct: නව ගිණුමේ හැසිරවීම account_warning_preset: text: පෙර සැකසූ පෙළ - title: ශීර්ෂය + title: සිරැසිය admin_account_action: - include_statuses: විද්‍යුත් තැපෑලෙහි වාර්තා කරන ලද පළ කිරීම් ඇතුළත් කරන්න + include_statuses: වි-තැපෑලට වාර්තා කරන ලද ලිපි ද ඇතුළත් කරන්න send_email_notification: විද්‍යුත් තැපෑලෙන් පරිශීලකයාට දැනුම් දෙන්න text: අභිරුචි අනතුරු ඇඟවීම type: ක්‍රියාමාර්ගය types: disable: කැටි කරන්න none: අනතුරු ඇඟවීමක් යවන්න - sensitive: පවතී + sensitive: සංවේදීතාව silence: සීමාව suspend: අත්හිටුවන්න warning_preset_id: අනතුරු ඇඟවීමේ පෙරසිටුවක් භාවිතා කරන්න @@ -123,12 +121,11 @@ si: defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න avatar: අවතාරය - bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි - chosen_languages: භාෂා පෙරහන් කරන්න - confirm_new_password: නව මුර පදය තහවුරු කරන්න - confirm_password: මුරපදය තහවුරු කර ඇත - context: සන්දර්භ පෙරහන් කරන්න - current_password: වත්මන් මුර පදය + chosen_languages: භාෂා පෙරන්න + confirm_new_password: නව මුරපදය තහවුරු කරන්න + confirm_password: මුරපදය තහවුරු කරන්න + context: සන්දර්භ පෙරන්න + current_password: වත්මන් මුරපදය data: දත්ත display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය @@ -138,28 +135,25 @@ si: honeypot: "%{label} (පුරවන්න එපා)" inbox_url: රිලේ එන ලිපි URL irreversible: සැඟවීම වෙනුවට අතහරින්න - locale: අතුරු මුහුණත භාෂාව + locale: අතුරු මුහුණතේ භාෂාව max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය - note: ජෛව otp_attempt: ද්වි සාධක කේතය password: මුරපදය phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න - setting_aggregate_reblogs: කණ්ඩායම් කාලරේඛාව වැඩි කරයි setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න - setting_boost_modal: වැඩි කිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න - setting_default_language: පළ කිරීමේ භාෂාව - setting_default_privacy: පුද්ගලිකත්වය පළ කිරීම - setting_default_sensitive: සෑම විටම මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න - setting_delete_modal: පළ කිරීමක් මැකීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_default_language: ලිපිවල භාෂාව + setting_default_privacy: ලිපියේ රහස්‍යතාව + setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න + setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය - setting_display_media_default: පෙරනිමිය + setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න setting_display_media_show_all: සියල්ල පෙන්වන්න - setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න + setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න @@ -167,10 +161,10 @@ si: setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න setting_use_blurhash: සැඟවුණු මාධ්‍ය සඳහා වර්ණවත් අනුක්‍රමික පෙන්වන්න - setting_use_pending_items: මන්දගාමී මාදිලිය + setting_use_pending_items: මන්දගාමී ප්‍රකාරය severity: බරපතලකම sign_in_token_attempt: ආරක්‍ෂණ කේතය - title: ශීර්ෂය + title: සිරැසිය type: ආයාත වර්ගය username: පරිශීලක නාමය username_or_email: පරි. නාමය හෝ වි-තැපෑල @@ -183,10 +177,16 @@ si: actions: hide: සම්පූර්ණයෙන්ම සඟවන්න warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + form_admin_settings: + custom_css: අභිරුචි CSS + profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න + site_terms: රහස්‍යතා ප්‍රතිපත්තිය + site_title: සේවාදායකයේ නම + theme: පෙරනිමි තේමාව interactions: must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න - must_be_following_dm: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගෙන් සෘජු පණිවිඩ අවහිර කරන්න + must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස invite_request: @@ -195,18 +195,16 @@ si: comment: අදහස ip: අ.ජා. කෙ. (IP) severities: - no_access: ප්රවේශය අවහිර කරන්න + no_access: ප්‍රවේශය අවහිර කරන්න sign_up_requires_approval: ලියාපදිංචි වීම සීමා කරන්න severity: නීතිය notification_emails: - appeal: යමෙක් උපපරිපාලක තීරණයකට අභියාචනා කරයි digest: digest ඊමේල් යවන්න - favourite: කවුරුහරි ඔබේ පළ කිරීම ප්‍රිය කළා + favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා follow: කවුරුහරි ඔබව අනුගමනය කළා follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය mention: කවුරුහරි ඔබව සඳහන් කළා pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - reblog: කවුරුහරි ඔබේ පළ කිරීම වැඩි කළා report: නව වාර්තාවක් ඉදිරිපත් කෙරේ trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ rule: @@ -215,11 +213,19 @@ si: listable: මෙම හැෂ් ටැගය සෙවීම් සහ යෝජනා වල දිස් වීමට ඉඩ දෙන්න name: හෑෂ් ටැගය trendable: මෙම හැෂ් ටැගය ප්‍රවණතා යටතේ දිස් වීමට ඉඩ දෙන්න - usable: මෙම හැෂ් ටැගය භාවිතා කිරීමට පළ කිරීම් වලට ඉඩ දෙන්න + usable: ලිපි සඳහා මෙම පූරක අනන්‍යනය භාවිතයට ඉඩදෙන්න + user: + role: භූමිකාව + time_zone: වේලා කලාපය + user_role: + color: චිහ්නයේ පාට + name: නම + permissions_as_keys: අවසර + position: ප්‍රමුඛත්‍වය webhook: events: සබල කළ සිදුවීම් url: අන්ත ලක්ෂ්‍ය URL - 'no': නැත + 'no': නැහැ recommended: නිර්දේශිත required: mark: "*" From eaccc439548f488427569f22ad87b04a01e927b6 Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 5 Oct 2023 13:32:39 +0900 Subject: [PATCH 071/237] Bump version to 7.0 --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index e4839a83d2..6867f42992 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -5,7 +5,7 @@ module Mastodon module_function def kmyblue_major - 6 + 7 end def kmyblue_minor From a359345f864eb5603b1ce0c8d7ddfe36b991b5eb Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 5 Oct 2023 15:59:45 +0900 Subject: [PATCH 072/237] Fix mastodon version --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 6867f42992..e1f1ed87dc 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def minor - 3 + 2 end def patch From 235bef36d07334c31f0b21ad3ae67e8d508f2b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Thu, 5 Oct 2023 16:37:27 +0900 Subject: [PATCH 073/237] =?UTF-8?q?Add:=20=E6=A4=9C=E7=B4=A2=E8=A8=B1?= =?UTF-8?q?=E5=8F=AF=E3=80=8C=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E3=81=A8?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AD=E3=83=AF=E3=83=BC=E3=80=8D=20(#60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/searchability_dropdown.jsx | 3 ++ .../status/components/detailed_status.jsx | 2 + app/javascript/mastodon/locales/en.json | 2 + app/javascript/mastodon/locales/ja.json | 2 + app/lib/account_statuses_filter.rb | 2 +- app/lib/importer/statuses_index_importer.rb | 2 +- app/lib/search_query_transformer.rb | 12 +++--- app/models/concerns/status_search_concern.rb | 2 +- app/models/status.rb | 25 ++++++++---- app/models/trends/statuses.rb | 3 +- app/serializers/rest/status_serializer.rb | 2 +- app/services/delivery_antenna_service.rb | 8 ++-- app/services/fan_out_on_write_service.rb | 2 +- app/services/post_status_service.rb | 4 +- .../preferences/reaching/show.html.haml | 2 +- config/locales/en.yml | 2 + config/locales/ja.yml | 2 + spec/lib/status_reach_finder_spec.rb | 16 ++++++++ spec/models/status_spec.rb | 27 +++++++++++++ spec/models/tag_feed_spec.rb | 18 +++++++++ .../services/statuses_search_service_spec.rb | 39 +++++++++++++++++++ .../activitypub/note_serializer_spec.rb | 28 ++++++++++++- .../services/fan_out_on_write_service_spec.rb | 9 +++++ spec/services/post_status_service_spec.rb | 21 ++++++++++ 24 files changed, 210 insertions(+), 25 deletions(-) diff --git a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx index e7a002b9d8..3b597e7735 100644 --- a/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/searchability_dropdown.jsx @@ -15,6 +15,8 @@ import { IconButton } from '../../../components/icon_button'; const messages = defineMessages({ public_short: { id: 'searchability.public.short', defaultMessage: 'Public' }, public_long: { id: 'searchability.public.long', defaultMessage: 'Anyone can find' }, + public_unlisted_short: { id: 'searchability.public_unlisted.short', defaultMessage: 'Public unlisted' }, + public_unlisted_long: { id: 'searchability.public_unlisted.long', defaultMessage: 'Local users and followers can find' }, private_short: { id: 'searchability.unlisted.short', defaultMessage: 'Followers' }, private_long: { id: 'searchability.unlisted.long', defaultMessage: 'Your followers can find' }, direct_short: { id: 'searchability.private.short', defaultMessage: 'Reactionners' }, @@ -223,6 +225,7 @@ class SearchabilityDropdown extends PureComponent { this.options = [ { icon: 'globe', value: 'public', text: formatMessage(messages.public_short), meta: formatMessage(messages.public_long) }, + { icon: 'cloud', value: 'public_unlisted', text: formatMessage(messages.public_unlisted_short), meta: formatMessage(messages.public_unlisted_long) }, { icon: 'unlock', value: 'private', text: formatMessage(messages.private_short), meta: formatMessage(messages.private_long) }, { icon: 'lock', value: 'direct', text: formatMessage(messages.direct_short), meta: formatMessage(messages.direct_long) }, { icon: 'at', value: 'limited', text: formatMessage(messages.limited_short), meta: formatMessage(messages.limited_long) }, diff --git a/app/javascript/mastodon/features/status/components/detailed_status.jsx b/app/javascript/mastodon/features/status/components/detailed_status.jsx index e9568bf9d0..ce60f2459c 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.jsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.jsx @@ -38,6 +38,7 @@ const messages = defineMessages({ personal_short: { id: 'privacy.personal.short', defaultMessage: 'Yourself only' }, direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' }, searchability_public_short: { id: 'searchability.public.short', defaultMessage: 'Public' }, + searchability_public_unlisted_short: { id: 'searchability.public_unlisted.short', defaultMessage: 'Public unlisted' }, searchability_private_short: { id: 'searchability.unlisted.short', defaultMessage: 'Followers' }, searchability_direct_short: { id: 'searchability.private.short', defaultMessage: 'Reactionners' }, searchability_limited_short: { id: 'searchability.direct.short', defaultMessage: 'Self only' }, @@ -270,6 +271,7 @@ class DetailedStatus extends ImmutablePureComponent { const searchabilityIconInfo = { 'public': { icon: 'globe', text: intl.formatMessage(messages.searchability_public_short) }, + 'public_unlisted': { icon: 'cloud', text: intl.formatMessage(messages.searchability_public_unlisted_short) }, 'private': { icon: 'unlock', text: intl.formatMessage(messages.searchability_private_short) }, 'direct': { icon: 'lock', text: intl.formatMessage(messages.searchability_direct_short) }, 'limited': { icon: 'at', text: intl.formatMessage(messages.searchability_limited_short) }, diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 780a5df5c8..8fbc847d1a 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -629,6 +629,8 @@ "searchability.private.short": "Reactionners", "searchability.public.long": "Anyone can find", "searchability.public.short": "Everyone", + "searchability.public_unlisted.long": "Local users and followers can find", + "searchability.public_unlisted.short": "Local and followers", "searchability.unlisted.long": "Your followers and reactionners can find", "searchability.unlisted.short": "Followers and reactionners", "search_popout.domain": "domain", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index fdd4e0cdc1..4d5f0cbc9a 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -714,6 +714,8 @@ "searchability.private.short": "反応者のみ", "searchability.public.long": "この投稿は誰でも検索できます", "searchability.public.short": "誰でも", + "searchability.public_unlisted.long": "ローカルユーザーとフォロワーが検索できます", + "searchability.public_unlisted.short": "ローカルとフォロワー", "searchability.unlisted.long": "この投稿はあなたのフォロワーと反応者だけが検索できます", "searchability.unlisted.short": "フォロワーと反応者", "search_popout.domain": "ドメイン", diff --git a/app/lib/account_statuses_filter.rb b/app/lib/account_statuses_filter.rb index 9a4a2b5d6e..4ff5975610 100644 --- a/app/lib/account_statuses_filter.rb +++ b/app/lib/account_statuses_filter.rb @@ -26,7 +26,7 @@ class AccountStatusesFilter scope.merge!(no_reblogs_scope) if exclude_reblogs? scope.merge!(hashtag_scope) if tagged? - available_searchabilities = [:public, :unlisted, :private, :direct, :limited, nil] + available_searchabilities = [:public, :public_unlisted, :unlisted, :private, :direct, :limited, nil] available_visibilities = [:public, :public_unlisted, :login, :unlisted, :private, :direct, :limited] available_searchabilities = [:public] if domain_block&.reject_send_not_public_searchability diff --git a/app/lib/importer/statuses_index_importer.rb b/app/lib/importer/statuses_index_importer.rb index 9fbce14478..5a8fa29c86 100644 --- a/app/lib/importer/statuses_index_importer.rb +++ b/app/lib/importer/statuses_index_importer.rb @@ -23,7 +23,7 @@ class Importer::StatusesIndexImporter < Importer::BaseImporter to_index.map do |object| # This is unlikely to happen, but the post may have been # un-interacted with since it was queued for indexing - if object.searchable_by.empty? && %w(public private).exclude?(object.searchability) + if object.searchable_by.empty? && %w(public public_unlisted private).exclude?(object.searchability) deleted += 1 { delete: { _id: object.id } } else diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index ba4383f674..567b10ade2 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -89,10 +89,10 @@ class SearchQueryTransformer < Parslet::Transform public_index, searchability_limited, ] - definition_should << searchability_public if %i(public).include?(@searchability) - definition_should << searchability_private if %i(public unlisted private).include?(@searchability) - definition_should << searchable_by_me if %i(public unlisted private direct).include?(@searchability) - definition_should << self_posts if %i(public unlisted private direct).exclude?(@searchability) + definition_should << searchability_public if %i(public public_unlisted).include?(@searchability) + definition_should << searchability_private if %i(public public_unlisted unlisted private).include?(@searchability) + definition_should << searchable_by_me if %i(public public_unlisted unlisted private direct).include?(@searchability) + definition_should << self_posts if %i(public public_unlisted unlisted private direct).exclude?(@searchability) { bool: { @@ -199,8 +199,8 @@ class SearchQueryTransformer < Parslet::Transform def following_account_ids return @following_account_ids if defined?(@following_account_ids) - account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public private)).reorder(nil).select(1).to_sql - status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public private)).reorder(nil).select(1).to_sql + account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql + status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql following_accounts = Follow.where(account_id: @options[:current_account].id).merge(Account.where("EXISTS (#{account_exists_sql})").or(Account.where("EXISTS (#{status_exists_sql})"))) @following_account_ids = following_accounts.pluck(:target_account_id) end diff --git a/app/models/concerns/status_search_concern.rb b/app/models/concerns/status_search_concern.rb index 376f82e509..e73a12d511 100644 --- a/app/models/concerns/status_search_concern.rb +++ b/app/models/concerns/status_search_concern.rb @@ -5,7 +5,7 @@ module StatusSearchConcern included do scope :indexable, -> { without_reblogs.where(visibility: [:public, :login], searchability: nil).joins(:account).where(account: { indexable: true }) } - scope :remote_dynamic_searchability, -> { remote.where(searchability: [:public, :private]) } + scope :remote_dynamic_searchability, -> { remote.where(searchability: [:public, :public_unlisted, :private]) } end def searchable_by diff --git a/app/models/status.rb b/app/models/status.rb index 4c076ca5d7..5a33411aba 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -129,7 +129,7 @@ class Status < ApplicationRecord scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') } scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) } scope :with_public_visibility, -> { where(visibility: [:public, :public_unlisted, :login]) } - scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: :public))) } + scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: [:public, :public_unlisted]))) } scope :with_global_timeline_visibility, -> { where(visibility: [:public, :login]) } scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced_at: nil }) } @@ -442,19 +442,26 @@ class Status < ApplicationRecord def compute_searchability local = account.local? + check_searchability = public_unlisted_searchability? ? 'public' : searchability - return 'private' if public_searchability? && account.silenced? + return 'private' if %w(public public_unlisted).include?(check_searchability) && account.silenced? return 'direct' if unsupported_searchability? - return searchability if local && !searchability.nil? - return 'direct' if local || [:public, :private, :direct, :limited].exclude?(account.searchability.to_sym) + return check_searchability if local && !check_searchability.nil? + return 'direct' if local || %i(public private direct limited).exclude?(account.searchability.to_sym) account_searchability = Status.searchabilities[account.searchability] - status_searchability = Status.searchabilities[searchability.nil? ? 'direct' : searchability] + status_searchability = Status.searchabilities[check_searchability.nil? ? 'direct' : check_searchability] Status.searchabilities.invert.fetch([account_searchability, status_searchability].max) || 'direct' end def compute_searchability_activitypub - return 'private' if public_unlisted_visibility? && public_searchability? + return 'private' if public_unlisted_searchability? + + compute_searchability + end + + def compute_searchability_local + return 'public_unlisted' if public_unlisted_searchability? compute_searchability end @@ -477,6 +484,10 @@ class Status < ApplicationRecord end def selectable_searchabilities + searchabilities.keys - %w(unsupported) + end + + def selectable_searchabilities_for_search searchabilities.keys - %w(public_unlisted unsupported) end @@ -620,7 +631,7 @@ class Status < ApplicationRecord elsif visibility == 'limited' :limited elsif visibility == 'private' - searchability == 'public' ? :private : searchability + searchability == 'public' || searchability == 'public_unlisted' ? :private : searchability elsif visibility == 'direct' searchability == 'limited' ? :limited : :direct else diff --git a/app/models/trends/statuses.rb b/app/models/trends/statuses.rb index f2c04f220d..c7fe097904 100644 --- a/app/models/trends/statuses.rb +++ b/app/models/trends/statuses.rb @@ -106,7 +106,8 @@ class Trends::Statuses < Trends::Base private def eligible?(status) - (status.searchability.nil? || status.public_searchability?) && (status.public_visibility? || status.public_unlisted_visibility?) && + (status.searchability.nil? || status.compute_searchability == 'public') && + (status.public_visibility? || status.public_unlisted_visibility?) && status.account.discoverable? && !status.account.silenced? && status.spoiler_text.blank? && (!status.sensitive? || status.media_attachments.none?) && !status.reply? && valid_locale?(status.language) end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index e9ac924f7e..1fcc939cdb 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -93,7 +93,7 @@ class REST::StatusSerializer < ActiveModel::Serializer end def searchability - object.compute_searchability + object.compute_searchability_local end def sensitive diff --git a/app/services/delivery_antenna_service.rb b/app/services/delivery_antenna_service.rb index 3d26321995..fb60473c30 100644 --- a/app/services/delivery_antenna_service.rb +++ b/app/services/delivery_antenna_service.rb @@ -64,8 +64,10 @@ class DeliveryAntennaService next if antenna.exclude_accounts&.include?(@status.account_id) next if antenna.exclude_domains&.include?(domain) next if antenna.exclude_tags&.any? { |tag_id| tag_ids.include?(tag_id) } - next if @status.unlisted_visibility? && !@status.public_searchability? && follower_ids.exclude?(antenna.account_id) - next if @status.unlisted_visibility? && @status.public_searchability? && follower_ids.exclude?(antenna.account_id) && antenna.any_keywords && antenna.any_tags + + searchability = @status.compute_searchability + next if @status.unlisted_visibility? && searchability != 'public' && follower_ids.exclude?(antenna.account_id) + next if @status.unlisted_visibility? && searchability == 'public' && follower_ids.exclude?(antenna.account_id) && antenna.any_keywords && antenna.any_tags collection.push(antenna) end @@ -121,7 +123,7 @@ class DeliveryAntennaService when :public, :public_unlisted, :login, :limited false when :unlisted - !@status.public_searchability? + @status.compute_searchability != 'public' else true end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index a2e2653813..b56474ddf6 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -218,6 +218,6 @@ class FanOutOnWriteService < BaseService end def broadcastable_unlisted2? - @status.unlisted_visibility? && @status.public_searchability? && !@status.reblog? && !@account.silenced? + @status.unlisted_visibility? && @status.compute_searchability == 'public' && !@status.reblog? && !@account.silenced? end end diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index bf2ba2cdbf..cdd1aa8674 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -81,7 +81,7 @@ class PostStatusService < BaseService @visibility = :public_unlisted if @visibility&.to_sym == :public && !@options[:force_visibility] && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted && Setting.enable_public_unlisted_visibility @limited_scope = @options[:visibility]&.to_sym if @visibility == :limited @searchability = searchability - @searchability = :private if @account.silenced? && @searchability&.to_sym == :public + @searchability = :private if @account.silenced? && %i(public public_unlisted).include?(@searchability&.to_sym) @markdown = @options[:markdown] || false @scheduled_at = @options[:scheduled_at]&.to_datetime @scheduled_at = nil if scheduled_in_the_past? @@ -129,6 +129,8 @@ class PostStatusService < BaseService case @options[:searchability]&.to_sym when :public case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted then :public when :private then :private else :direct end + when :public_unlisted + case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted then :public_unlisted when :private then :private else :direct end when :private case @visibility&.to_sym when :public, :public_unlisted, :login, :unlisted, :private then :private else :direct end when :direct diff --git a/app/views/settings/preferences/reaching/show.html.haml b/app/views/settings/preferences/reaching/show.html.haml index 03077758aa..3e330ad590 100644 --- a/app/views/settings/preferences/reaching/show.html.haml +++ b/app/views/settings/preferences/reaching/show.html.haml @@ -41,7 +41,7 @@ .fields-row .fields-group.fields-row__column.fields-row__column-12 - = ff.input :default_searchability_of_search, collection: Status.selectable_searchabilities, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search') + = ff.input :default_searchability_of_search, collection: Status.selectable_searchabilities_for_search, wrapper: :with_label, kmyblue: true, include_blank: false, label_method: lambda { |searchability| safe_join([I18n.t("statuses.searchabilities.#{searchability}"), I18n.t("statuses.searchabilities.#{searchability}_search_long")], ' - ') }, required: false, hint: false, label: I18n.t('simple_form.labels.defaults.setting_default_searchability_of_search') .fields-group = ff.input :use_public_index, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.defaults.setting_use_public_index') diff --git a/config/locales/en.yml b/config/locales/en.yml index d56dd1d3fb..8633f4dfc0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1836,6 +1836,8 @@ en: public: Public public_long: Anyone can find public_search_long: You can search all posts permitted to search + public_unlisted: Local and followers + public_unlisted_long: Local users and followers can find show_more: Show more show_newer: Show newer show_older: Show older diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 2447395e88..87de99e515 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1814,6 +1814,8 @@ ja: public: 誰でも public_long: この投稿は誰でも検索できます public_search_long: 検索が許可された全ての投稿が検索できます + public_unlisted: ローカルとフォロワー + public_unlisted_long: ローカル・フォロワー・反応者のみが検索できます show_more: もっと見る show_newer: 新しいものを表示 show_older: 古いものを表示 diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index ba319b5423..3d51fedb14 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -67,6 +67,22 @@ describe StatusReachFinder do end end + context 'when misskey with public_unlisted searchability' do + let(:sender_software) { 'misskey' } + let(:searchability) { :public_unlisted } + + it 'send status without setting' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to_not include 'https://foo.bar/inbox' + end + + it 'send status with setting' do + alice.user.settings.update(reject_unlisted_subscription: 'true') + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to include 'https://foo.bar/inbox' + end + end + context 'when misskey with public searchability' do let(:sender_software) { 'misskey' } diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 36f4fddec9..96f6bb56c9 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -137,6 +137,15 @@ RSpec.describe Status do end end + context 'when public-public_unlisted but silenced' do + let(:silenced_at) { Time.now.utc } + let(:status_searchability) { :public_unlisted } + + it 'returns private' do + expect(subject.compute_searchability).to eq 'private' + end + end + context 'when public-private' do let(:status_searchability) { :private } @@ -215,6 +224,24 @@ RSpec.describe Status do expect(subject.compute_searchability).to eq 'public' end end + + context 'when public-public_unlisted of local account' do + let(:account_searchability) { :public } + let(:account_domain) { nil } + let(:status_searchability) { :public_unlisted } + + it 'returns public' do + expect(subject.compute_searchability).to eq 'public' + end + + it 'returns public_unlisted for local' do + expect(subject.compute_searchability_local).to eq 'public_unlisted' + end + + it 'returns private for activitypub' do + expect(subject.compute_searchability_activitypub).to eq 'private' + end + end end describe '#quote' do diff --git a/spec/models/tag_feed_spec.rb b/spec/models/tag_feed_spec.rb index 270797ccd8..5206e7cede 100644 --- a/spec/models/tag_feed_spec.rb +++ b/spec/models/tag_feed_spec.rb @@ -91,18 +91,36 @@ describe TagFeed, type: :service do expect(results).to include status_tagged_with_cats end + it 'unlisted/public_unlisted_searchability post returns' do + status_tagged_with_cats.update(visibility: :unlisted, searchability: :public_unlisted) + results = described_class.new(tag_cats, nil).get(20) + expect(results).to include status_tagged_with_cats + end + it 'unlisted/public_searchability post returns with account' do status_tagged_with_cats.update(visibility: :unlisted, searchability: :public) results = described_class.new(tag_cats, account).get(20) expect(results).to include status_tagged_with_cats end + it 'unlisted/public_unlisted_searchability post returns with account' do + status_tagged_with_cats.update(visibility: :unlisted, searchability: :public_unlisted) + results = described_class.new(tag_cats, account).get(20) + expect(results).to include status_tagged_with_cats + end + it 'private post not returns' do status_tagged_with_cats.update(visibility: :private, searchability: :public) results = described_class.new(tag_cats, nil).get(20) expect(results).to_not include status_tagged_with_cats end + it 'private, public_unlisted post not returns' do + status_tagged_with_cats.update(visibility: :private, searchability: :public_unlisted) + results = described_class.new(tag_cats, nil).get(20) + expect(results).to_not include status_tagged_with_cats + end + it 'private post not returns with account' do status_tagged_with_cats.update(visibility: :private, searchability: :public) results = described_class.new(tag_cats, account).get(20) diff --git a/spec/search/services/statuses_search_service_spec.rb b/spec/search/services/statuses_search_service_spec.rb index c0d4116ae0..51245f7354 100644 --- a/spec/search/services/statuses_search_service_spec.rb +++ b/spec/search/services/statuses_search_service_spec.rb @@ -63,6 +63,45 @@ describe StatusesSearchService do end end + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + let(:account) { other } + + context 'with other account' do + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with follower' do + let(:account) { following } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with reacted user' do + let(:account) { reacted } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + + context 'with self' do + let(:account) { alice } + + it 'search status' do + expect(subject.count).to eq 1 + expect(subject).to include status.id + end + end + end + context 'when private searchability' do let(:searchability) { :private } let(:account) { other } diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 910b5010ec..a9760c799c 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -5,9 +5,11 @@ require 'rails_helper' describe ActivityPub::NoteSerializer do subject { JSON.parse(@serialization.to_json) } + let(:visibility) { :public } + let(:searchability) { :public } let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :public) } + let!(:parent) { Fabricate(:status, account: account, visibility: visibility, searchability: searchability) } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } @@ -46,6 +48,30 @@ describe ActivityPub::NoteSerializer do expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) end + it 'send as public visibility' do + expect(subject['to']).to include 'https://www.w3.org/ns/activitystreams#Public' + end + + context 'when public_unlisted visibility' do + let(:visibility) { :public_unlisted } + + it 'send as unlisted visibility' do + expect(subject['to']).to_not include 'https://www.w3.org/ns/activitystreams#Public' + end + end + + it 'send as public searchability' do + expect(subject['searchableBy']).to include 'https://www.w3.org/ns/activitystreams#Public' + end + + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + + it 'send as private searchability' do + expect(subject['searchableBy']).to_not include 'https://www.w3.org/ns/activitystreams#Public' + end + end + context 'when has quote but no_convert setting' do let(:referred) { Fabricate(:status) } diff --git a/spec/services/fan_out_on_write_service_spec.rb b/spec/services/fan_out_on_write_service_spec.rb index 65db23214a..34169fcb71 100644 --- a/spec/services/fan_out_on_write_service_spec.rb +++ b/spec/services/fan_out_on_write_service_spec.rb @@ -363,6 +363,15 @@ RSpec.describe FanOutOnWriteService, type: :service do expect(redis).to_not have_received(:publish).with('timeline:public', anything) end + context 'with searchability public_unlisted' do + let(:searchability) { 'public_unlisted' } + + it 'is not broadcast to the hashtag stream' do + expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything) + expect(redis).to have_received(:publish).with('timeline:hashtag:hoge:local', anything) + end + end + context 'with searchability private' do let(:searchability) { 'private' } diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 5e2a54c264..529ab09969 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -127,6 +127,13 @@ RSpec.describe PostStatusService, type: :service do expect(status.searchability).to eq 'private' end + it 'creates a status with limited searchability for silenced users with public_unlisted searchability' do + status = subject.call(Fabricate(:account, silenced: true), text: 'test', searchability: :public_unlisted, visibility: :public) + + expect(status).to be_persisted + expect(status.searchability).to eq 'private' + end + it 'creates a status with the given searchability=public / visibility=unlisted' do status = create_status_with_options(searchability: :public, visibility: :unlisted) @@ -134,6 +141,13 @@ RSpec.describe PostStatusService, type: :service do expect(status.searchability).to eq 'public' end + it 'creates a status with the given searchability=public_unlisted / visibility=unlisted' do + status = create_status_with_options(searchability: :public_unlisted, visibility: :unlisted) + + expect(status).to be_persisted + expect(status.searchability).to eq 'public_unlisted' + end + it 'creates a status with the given searchability=public / visibility=private' do status = create_status_with_options(searchability: :public, visibility: :private) @@ -141,6 +155,13 @@ RSpec.describe PostStatusService, type: :service do expect(status.searchability).to eq 'private' end + it 'creates a status with the given searchability=public_unlisted / visibility=private' do + status = create_status_with_options(searchability: :public_unlisted, visibility: :private) + + expect(status).to be_persisted + expect(status.searchability).to eq 'private' + end + it 'creates a status for the given application' do application = Fabricate(:application) From 40ba6e119b7457161fd43b449875d0fb9d473c1a Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 09:50:08 +0200 Subject: [PATCH 074/237] Fix Vary headers not being set on some redirects (#27272) --- app/controllers/concerns/web_app_controller_concern.rb | 10 ++++++---- app/controllers/follower_accounts_controller.rb | 1 - app/controllers/following_accounts_controller.rb | 1 - spec/requests/cache_spec.rb | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 273d7344ca..5687d6e5b6 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -4,10 +4,10 @@ module WebAppControllerConcern extend ActiveSupport::Concern included do - prepend_before_action :redirect_unauthenticated_to_permalinks! - before_action :set_app_body_class - vary_by 'Accept, Accept-Language, Cookie' + + before_action :redirect_unauthenticated_to_permalinks! + before_action :set_app_body_class end def skip_csrf_meta_tags? @@ -22,7 +22,9 @@ module WebAppControllerConcern return if user_signed_in? && current_account.moved_to_account_id.nil? redirect_path = PermalinkRedirector.new(request.path).redirect_path + return if redirect_path.blank? - redirect_to(redirect_path) if redirect_path.present? + expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? + redirect_to(redirect_path) end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ffdbd01802..5effd9495e 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index cce296f9fd..268fad96d0 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index 178d19ed0d..c391c8b3da 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -30,6 +30,7 @@ module TestEndpoints /directory /@alice /@alice/110224538612341312 + /deck/home ).freeze # Endpoints that should be cachable when accessed anonymously but have a Vary From d22515861ea00b2544ff869a4c3623900e7017ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:28:47 +0200 Subject: [PATCH 075/237] Update dependency @reduxjs/toolkit to v1.9.7 (#27275) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4a14c22ce2..8604dcce25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1825,9 +1825,9 @@ integrity sha512-tOQQBVH8LsUpGXqDnk+kaOGVsgZ8maHAhEiw3Git3p88q+c0Slgu47HuDnL6sVxeCfz24zbq7dOjsVYDiTpDIA== "@reduxjs/toolkit@^1.9.5": - version "1.9.6" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.6.tgz#fc968b45fe5b17ff90932c4556960d9c1078365a" - integrity sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw== + version "1.9.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.7.tgz#7fc07c0b0ebec52043f8cb43510cf346405f78a6" + integrity sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ== dependencies: immer "^9.0.21" redux "^4.2.1" From a742394b22df948eba4548932c666d6d5e37084b Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 5 Oct 2023 19:45:37 +0900 Subject: [PATCH 076/237] =?UTF-8?q?Fix:=20=E4=BB=96=E3=82=B5=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=81=AB=E9=85=8D=E4=BF=A1=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E5=85=AC=E9=96=8B=E6=8A=95?= =?UTF-8?q?=E7=A8=BF=E3=81=AE=E6=A4=9C=E7=B4=A2=E8=A8=B1=E5=8F=AF=E3=81=8C?= =?UTF-8?q?=E5=BC=B7=E5=88=B6=E7=9A=84=E3=81=AB=E3=83=95=E3=82=A9=E3=83=AD?= =?UTF-8?q?=E3=83=AF=E3=83=BC=E3=81=AE=E3=81=BF=E3=81=AB=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/status.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/models/status.rb b/app/models/status.rb index 719ba3eeda..a5501fcbf6 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -437,8 +437,6 @@ class Status < ApplicationRecord end def compute_searchability_activitypub - return 'private' if public_unlisted_visibility? && public_searchability? - compute_searchability end From f0f808619d41fa19c44b46bf3f4d9934c5ec544a Mon Sep 17 00:00:00 2001 From: KMY Date: Thu, 5 Oct 2023 19:46:52 +0900 Subject: [PATCH 077/237] =?UTF-8?q?Fix:=20=E4=BB=96=E3=82=B5=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=81=AB=E9=85=8D=E4=BF=A1=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E5=85=AC=E9=96=8B=E6=8A=95?= =?UTF-8?q?=E7=A8=BF=E3=81=AE=E6=A4=9C=E7=B4=A2=E8=A8=B1=E5=8F=AF=E3=81=8C?= =?UTF-8?q?=E5=BC=B7=E5=88=B6=E7=9A=84=E3=81=AB=E3=83=95=E3=82=A9=E3=83=AD?= =?UTF-8?q?=E3=83=AF=E3=83=BC=E3=81=AE=E3=81=BF=E3=81=AB=E3=81=AA=E3=82=8B?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/status.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/models/status.rb b/app/models/status.rb index 4c076ca5d7..852c592896 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -454,8 +454,6 @@ class Status < ApplicationRecord end def compute_searchability_activitypub - return 'private' if public_unlisted_visibility? && public_searchability? - compute_searchability end From 3c13d7060031f0db8fd805fe3b4dd24187f8c809 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 13:10:17 +0200 Subject: [PATCH 078/237] Add mention of YJIT in admin dashboard if enabled (#27283) --- app/lib/admin/metrics/dimension/software_versions_dimension.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/lib/admin/metrics/dimension/software_versions_dimension.rb b/app/lib/admin/metrics/dimension/software_versions_dimension.rb index 72a98a88ab..ccf556eae0 100644 --- a/app/lib/admin/metrics/dimension/software_versions_dimension.rb +++ b/app/lib/admin/metrics/dimension/software_versions_dimension.rb @@ -25,7 +25,8 @@ class Admin::Metrics::Dimension::SoftwareVersionsDimension < Admin::Metrics::Dim end def ruby_version - value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}" + yjit = defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled? + value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}#{yjit ? ' +YJIT' : ''}" { key: 'ruby', From 32ab4744727187c07961ef89385882851d33882a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:13:14 +0200 Subject: [PATCH 079/237] New Crowdin Translations (automated) (#27277) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/si.json | 16 ++- config/locales/doorkeeper.si.yml | 8 +- config/locales/ko.yml | 2 +- config/locales/si.yml | 142 ++++++++++++------------ config/locales/simple_form.si.yml | 23 ++-- 7 files changed, 98 insertions(+), 95 deletions(-) diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 4b055f53a4..85d6f2474a 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -190,6 +190,7 @@ "conversation.open": "কথপোকথন দেখান", "conversation.with": "{names} এর সঙ্গে", "copypaste.copied": "অনুলিপিকৃত", + "copypaste.copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন", "directory.federated": "পরিচিত ফেডিভারসের থেকে", "directory.local": "শুধু {domain} থেকে", "directory.new_arrivals": "নতুন আগত", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c6993c809c..3814e69151 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -593,6 +593,7 @@ "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", + "search_results.see_all": "Lihat semua", "search_results.statuses": "Hantaran", "search_results.title": "Mencari {q}", "server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4d116bfd31..632e716bca 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,6 +1,7 @@ { "about.blocks": "මැදිහත්කරණ සේවාදායක", "about.contact": "සබඳතාව:", + "about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.", "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", @@ -25,6 +26,7 @@ "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", "account.go_to_profile": "පැතිකඩට යන්න", + "account.joined_short": "එක් වූ දිනය", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", "account.media": "මාධ්‍යය", "account.mention": "@{name} සඳහන් කරන්ක", @@ -102,6 +104,8 @@ "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", + "compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න", + "compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", @@ -131,7 +135,7 @@ "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", - "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", + "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.", "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", @@ -151,7 +155,7 @@ "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", - "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.bookmarked_statuses": "ඔබ සතුව පොත්යොමු තබන ලද ලිපි කිසිවක් නැත. ඔබ පොත්යොමුවක් තබන විට, එය මෙහි දිස්වනු ඇත.", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", @@ -353,7 +357,7 @@ "report.forward": "{target} වෙත හරවන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", "report.mute": "නිහඬ", - "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", + "report.mute_explanation": "ඔබ ඔවුන්ගේ ලිපි නොදකිනු ඇත. ඔවුන්ට තවමත් ඔබව අනුගමනයට සහ ඔබගේ ලිපි දැකීමට හැකි අතර ඔවුන්ව නිහඬ කර ඇති බව දැන ගැනීමට නොහැකිය.", "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", @@ -367,7 +371,7 @@ "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", - "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", + "report.statuses.title": "මෙම වාර්තාව උපස්ථ කළ ලිපි තිබේ ද?", "report.submit": "යොමන්න", "report.target": "{target} වාර්තා කිරීම", "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", @@ -375,7 +379,7 @@ "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", "report.unfollow": "@{name}අනුගමනය නොකරන්න", - "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", + "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබගේ මුල් පිටුවේ ඔවුන්ගේ ලිපි නොදැකීමට, ඔවුන්ව තවදුරටත් අනුගමනය නොකරන්න.", "report_notification.attached_statuses": "{count, plural, one {ලිපි {count}} other {ලිපි {count} ක්}} අමුණා ඇත", "report_notification.categories.other": "වෙනත්", "report_notification.categories.spam": "ආයාචිත", @@ -443,7 +447,7 @@ "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.trending_now": "දැන් ප්‍රවණතාවය", + "trends.trending_now": "දැන් නැගී එන", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 31b38444d3..d3550cf598 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -58,10 +58,10 @@ si: authorize: සත්‍යාපනය deny: ප්‍රතික්ෂේප කරන්න error: - title: දෝෂයක් සිදුවී ඇත + title: දෝෂයක් සිදු වී ඇත new: prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." - review_permissions: අවසර සමාලෝචනය කරන්න + review_permissions: අවසර සමාලෝචනය title: බලය පැවරීමේ අවශ්ය show: title: මෙම අවසර කේතය පිටපත් කර එය යෙදුමට අලවන්න. @@ -73,11 +73,11 @@ si: index: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. - last_used_at: අවසන් වරට භාවිතා කළේ %{date} + last_used_at: අන්තිම භාවිතය %{date} never_used: භාවිතා කර නැත scopes: අවසර superapp: අභ්‍යන්තර - title: ඔබගේ බලයලත් අයදුම්පත් + title: ඔබගේ බලයලත් යෙදුම් errors: messages: access_denied: සම්පත් හිමිකරු හෝ අවසර සේවාදායකය ඉල්ලීම ප්‍රතික්ෂේප කළේය. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cc3fd07c49..ff337cc6ca 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -47,7 +47,7 @@ ko: label: 역할 변경 no_role: 역할 없음 title: "%{username}의 역할 변경" - confirm: 확정 + confirm: 신원 확인 confirmed: 확인됨 confirming: 확인 중 custom: 사용자 지정 diff --git a/config/locales/si.yml b/config/locales/si.yml index 787d6fde38..51e1b838f3 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -16,8 +16,6 @@ si: last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී nothing_here: මෙහි කිසිවක් නැත! - pin_errors: - following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: one: ලිපිය other: ලිපි @@ -69,7 +67,7 @@ si: invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) - joined: එක් වී ඇත + joined: එක් වූ දිනය location: all: සියල්ල local: ස්ථානීය @@ -123,7 +121,7 @@ si: security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitized: සංවේදී ලෙස සලකුණු කර ඇත + sensitized: සංවේදී බව සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා @@ -173,7 +171,7 @@ si: destroy_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එක මකන්න destroy_instance: වසම පිරිසිදු කරන්න destroy_ip_block: IP රීතිය මකන්න - destroy_status: පළ කිරීම මකන්න + destroy_status: ලිපිය මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න @@ -199,7 +197,7 @@ si: update_announcement: නිවේදනය යාවත්කාල කරන්න update_custom_emoji: අභිරුචි ඉමොජි යාවත්කාලීන කරන්න update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න - update_status: පළ කිරීම යාවත්කාලීන කරන්න + update_status: ලිපිය යාවත්කාල කරන්න actions: approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" @@ -220,7 +218,6 @@ si: destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" destroy_ip_block_html: IP %{target}සඳහා %{name} මකා දැමූ රීතිය - destroy_status_html: "%{name} පෝස්ට් %{target}විසින් ඉවත් කරන ලදී" destroy_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවත ආරම්භ විය" disable_2fa_user_html: "%{name} පරිශීලක %{target}සඳහා සාධක දෙකක අවශ්‍යතාවය අක්‍රීය කර ඇත" disable_custom_emoji_html: "%{name} ආබාධිත ඉමොජි %{target}" @@ -236,18 +233,17 @@ si: reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" reset_password_user_html: "%{name} පරිශීලක %{target}හි මුරපදය යළි පිහිටුවන්න" resolve_report_html: "%{name} විසඳන ලද වාර්තාව %{target}" - sensitive_account_html: "%{name} %{target}හි මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත" + sensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} සලකුණු කර ඇත" silence_account_html: "%{name} සීමිත %{target}ගිණුමක්" suspend_account_html: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" unassigned_report_html: "%{name} පවරා නොදුන් වාර්තාව %{target}" unblock_email_account_html: "%{name} %{target}ගේ ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන ලදී" - unsensitive_account_html: "%{name} සලකුණු නොකළ %{target}ගේ මාධ්‍ය සංවේදී ලෙස" + unsensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} ඉවත් කර ඇත" unsilence_account_html: "%{target}ගිණුමේ %{name} undid සීමාව" unsuspend_account_html: "%{name} අත්හිටුවන ලද %{target}ගිණුම" update_announcement_html: "%{name} යාවත්කාලීන නිවේදනය %{target}" update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" - update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න @@ -305,8 +301,8 @@ si: dashboard: active_users: ක්රියාකාරී පරිශීලකයන් interactions: අන්තර්ක්රියා - media_storage: මාධ්ය ගබඩාව - new_users: නව පරිශීලකයන් + media_storage: මාධ්‍ය ආචයනය + new_users: නව පරිශ්‍රීලකයින් opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" @@ -435,7 +431,7 @@ si: unavailable: ලබා ගත නොහැක delivery_available: බෙදා හැරීම ලබා ගත හැකිය delivery_error_days: බෙදා හැරීමේ දෝෂ සහිත දින - delivery_error_hint: දින %{count} ක් සඳහා බෙදා හැරීම කළ නොහැකි නම්, එය ස්වයංක්‍රීයව බෙදා හැරිය නොහැකි ලෙස ලකුණු කරනු ලැබේ. + delivery_error_hint: දවස් %{count} කින් බාරදීමට නොහැකි වුවහොත්, බාරදීමට නොහැකි බව ස්වයංක්‍රීයව සලකුණු වේ. destroyed_msg: "%{domain} සිට දත්ත දැන් ආසන්න මකාදැමීම සඳහා පෝලිම් කර ඇත." empty: වසම් කිසිවක් හමු නොවීය. known_accounts: @@ -454,7 +450,7 @@ si: total_followed_by_them: ඔවුන් විසින් අනුගමනය කරන ලදී total_followed_by_us: අප විසින් අනුගමනය කරන ලදී total_reported: ඔවුන් ගැන වාර්තා - total_storage: මාධ්ය ඇමුණුම් + total_storage: මාධ්‍ය ඇමුණුම් totals_time_period_hint_html: පහත දැක්වෙන එකතුවෙහි සියලු කාලය සඳහා දත්ත ඇතුළත් වේ. invites: deactivate_all: සියල්ල අක්‍රිය කරන්න @@ -483,11 +479,9 @@ si: relays: add_new: නව රිලේ එක් කරන්න delete: මකන්න - description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න disabled: අබලයි enable: සබල කරන්න - enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් @@ -507,8 +501,6 @@ si: action_log: විගණන සටහන action_taken_by: විසින් ගන්නා ලද පියවර actions: - delete_description_html: වාර්තා කරන ලද පළ කිරීම් මකා දැමෙනු ඇති අතර එම ගිණුමේම අනාගත උල්ලංඝනයන් තීව්‍ර කිරීමට ඔබට උදවු කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. - mark_as_sensitive_description_html: වාර්තා කරන ලද පළ කිරීම් වල මාධ්‍ය සංවේදී ලෙස සලකුණු කරනු ලබන අතර එම ගිණුම මගින් අනාගත උල්ලංඝනයන් උත්සන්න කිරීමට ඔබට උපකාර කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. other_description_html: ගිණුමේ හැසිරීම පාලනය කිරීම සහ වාර්තා කළ ගිණුමට සන්නිවේදනය අභිරුචිකරණය කිරීම සඳහා තවත් විකල්ප බලන්න. resolve_description_html: වාර්තා කරන ලද ගිණුමට එරෙහිව කිසිදු ක්‍රියාමාර්ගයක් නොගනු ඇත, වැඩ වර්ජනයක් වාර්තා නොකෙරේ, වාර්තාව වසා දමනු ඇත. actions_description_html: මෙම වාර්තාව විසඳීමට ගත යුතු ක්‍රියාමාර්ගය තීරණය කරන්න. ඔබ වාර්තා කරන ලද ගිණුමට එරෙහිව දණ්ඩනීය ක්‍රියාමාර්ගයක් ගන්නේ නම්, Spam කාණ්ඩය තෝරාගත් විට හැර, ඔවුන්ට විද්‍යුත් තැපෑලෙන් දැනුම්දීමක් යවනු ලැබේ. @@ -526,14 +518,14 @@ si: delete_and_resolve: ලිපි මකන්න forwarded: හරවා යවා ඇත forwarded_to: "%{domain} වෙත හරවා යැවිණි" - mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න - mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න - mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න + mark_as_resolved: විසඳූ බව යොදන්න + mark_as_sensitive: සංවේදී බව යොදන්න + mark_as_unresolved: නොවිසඳූ බව යොදන්න no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න - create_and_resolve: සටහන සමඟ විසඳන්න - create_and_unresolve: සටහනක් සමඟ නැවත විවෘත කරන්න + create_and_resolve: සටහනක් සමඟ විසඳන්න + create_and_unresolve: සටහනක් සමඟ නැවත අරින්න delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් @@ -564,7 +556,12 @@ si: moderation: මැදිහත්කරණය special: විශේෂ delete: මකන්න + permissions_count: + one: අවසර %{count} + other: අවසර %{count} privileges: + administrator: පරිපාලක + delete_user_data: පරිශ්‍රීලක දත්ත මකන්න invite_users: ආරාධනා කරන්න manage_announcements: නිවේදනය කළමනාකරණය manage_federation: ඒකාබද්ධ කළමනාකරණය @@ -592,6 +589,7 @@ si: title: පෙනුම discovery: profile_directory: පැතිකඩ නාමාවලිය + public_timelines: ප්‍රසිද්ධ කාලරේඛා domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -626,7 +624,7 @@ si: media: title: මාධ්‍යය metadata: පාරදත්ත - no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත + no_status_selected: කිසිවක් නොතේරූ බැවින් ලිපි කිසිවක් වෙනස් කර නැත open: ලිපිය අරින්න original_status: මුල් ලිපිය status_changed: ලිපිය සංශෝධිතයි @@ -639,7 +637,7 @@ si: disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" - sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" + sensitive: "%{target}ගේ ගිණුම සංවේදී බව %{name} සලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" suspend: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" appeal_approved: අභියාචනා කළා @@ -691,9 +689,9 @@ si: title: ප්‍රකාශකයන් rejected: ප්‍රතික්ෂේප කළා statuses: - allow: පළ කිරීමට ඉඩ දෙන්න + allow: පළ කිරීමට ඉඩදෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - disallow: පළ කිරීමට ඉඩ නොදෙන්න + disallow: ප්‍රකාශනයට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: @@ -732,12 +730,12 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - disable: අක්රිය කරන්න - disabled: ආබාධිතයි + disable: අබල කරන්න + disabled: අබලයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න empty: ඔබට තවම වින්‍යාස කර ඇති කිසිදු webhook අන්ත ලක්ෂ්‍යයක් නොමැත. enable: සබල කරන්න - enabled: ක්රියාකාරී + enabled: ක්‍රියාත්මකයි enabled_events: one: සබල සිදුවීම් 1 other: සබල සිදුවීම් %{count} @@ -752,7 +750,6 @@ si: actions: delete_statuses: ඔවුන්ගේ පළ කිරීම් මකා දැමීමට disable: ඔවුන්ගේ ගිණුම කැටි කිරීමට - mark_statuses_as_sensitive: ඔවුන්ගේ තනතුරු සංවේදී ලෙස සලකුණු කිරීමට none: අනතුරු ඇඟවීමක් sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට @@ -769,7 +766,7 @@ si: new_trending_links: title: නැඟී එන සබැඳි new_trending_statuses: - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි new_trending_tags: no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' @@ -803,11 +800,13 @@ si: applications: created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත + logout: නික්මෙන්න regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී warning: මෙම දත්ත සමඟ ඉතා ප්රවේශම් වන්න. එය කිසි විටෙක කිසිවෙකු සමඟ බෙදා නොගන්න! your_token: ඔබේ ප්‍රවේශ ටෝකනය auth: + apply_for_account: ගිණුමක් ඉල්ලන්න delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: @@ -823,14 +822,25 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. + progress: + details: ඔබගේ විස්තර + rules: නීති පිළිගන්න + providers: + cas: CAS + saml: SAML register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" reset_password: මුරපදය යළි සකසන්න rules: accept: පිළිගන්න back: ආපසු + title_invited: ඔබට ආරාධනා කර ඇත. security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න + setup: + title: ඔබගේ එනලිපි බලන්න + sign_in: + title: "%{domain} වෙත පිවිසෙන්න" status: account_status: ගිණුමේ තත්වය confirming: විද්‍යුත් තැපෑල තහවුරු කිරීම සම්පූර්ණ කිරීම සඳහා රැඳී සිටිමින්. @@ -876,7 +886,7 @@ si: warning: before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' caches: වෙනත් සේවාදායකයන් විසින් හැඹිලිගත කර ඇති අන්තර්ගතය දිගටම පැවතිය හැක - data_removal: ඔබගේ පළ කිරීම් සහ අනෙකුත් දත්ත ස්ථිරවම ඉවත් කරනු ලැබේ + data_removal: ඔබගේ ලිපි සහ අනෙකුත් දත්ත සදහටම ඉවත් කෙරෙනු ඇත email_change_html: ඔබට ඔබගේ ගිණුම මකා කළ හැක email_contact_html: එය තවමත් නොපැමිණියේ නම්, ඔබට උදව් සඳහා %{email} විද්‍යුත් තැපෑලෙන් යැවිය හැක email_reconfirmation_html: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑල නොලැබුනේ නම්, ඔබට එය නැවත ඉල්ලා සිටිය හැක @@ -900,13 +910,12 @@ si: description_html: මේවා ඔබගේ ගිණුමට එරෙහිව ගන්නා ලද ක්‍රියා සහ %{instance}හි කාර්ය මණ්ඩලය විසින් ඔබට එවා ඇති අනතුරු ඇඟවීම් වේ. recipient: වෙත යොමු කරන ලදී reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න - status: 'පළ කිරීම #%{id}' - status_removed: පළ කිරීම දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත + status: "#%{id} ලිපිය" + status_removed: ලිපිය දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත title: "%{action} සිට %{date}" title_actions: - delete_statuses: පසු ඉවත් කිරීම + delete_statuses: ලිපි ඉවත් කිරීම disable: ගිණුම කැටි කිරීම - mark_statuses_as_sensitive: තනතුරු සංවේදී ලෙස සලකුණු කිරීම none: අවවාදයයි sensitive: ගිණුම සංවේදී ලෙස සලකුණු කිරීම silence: ගිණුම සීමා කිරීම @@ -941,7 +950,7 @@ si: archive_takeout: date: දිනය download: ඔබගේ සංරක්‍ෂිතය බාගන්න - hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. + hint_html: ඔබට ලිපි සහ උඩුගත කළ මාධ්‍යවල සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. නිර්යාත කළ දත්ත ActivityPub ආකෘතියට ගැළපෙන ඕනෑම මෘදුකාංගයකින් කියවීමට හැකිය. ඔබට දවස් 7 කට වරක් සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය @@ -951,16 +960,15 @@ si: domain_blocks: වසම් අවහිර කිරීම් lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න - storage: මාධ්‍ය ගබඩාව + storage: මාධ්‍ය ආචයනය featured_tags: add_new: අලුතින් එකතු කරන්න - hint_html: "විශේෂාංගගත හැෂ් ටැග් මොනවාද? ඒවා ඔබේ පොදු පැතිකඩෙහි ප්‍රමුඛව ප්‍රදර්ශනය වන අතර එම හැෂ් ටැග් යටතේ ඔබේ පොදු පළ කිරීම් බ්‍රවුස් කිරීමට මිනිසුන්ට ඉඩ සලසයි. නිර්මාණාත්මක කෘති හෝ දිගු කාලීන ව්යාපෘති පිළිබඳ වාර්තාවක් තබා ගැනීම සඳහා ඔවුන් විශිෂ්ට මෙවලමක් වේ." filters: contexts: account: පැතිකඩයන් home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් - public: පොදු කාලරේඛා + public: ප්‍රසිද්ධ කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න @@ -1018,9 +1026,12 @@ si: overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. + status: තත්‍වය success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත titles: lists: ලැයිස්තු ආයාත වෙමින් + type_groups: + constructive: අනුගමන හා පොත්යොමු types: blocking: අවහිර ලැයිස්තුව bookmarks: පොත්යොමු @@ -1064,7 +1075,7 @@ si: title: සත්‍යාපන ඉතිහාසය media_attachments: validations: - images_and_video: දැනටමත් පින්තූර අඩංගු පළ කිරීමකට වීඩියෝවක් ඇමිණිය නොහැක + images_and_video: දැනටමත් රූප අඩංගු ලිපියකට දෘශ්‍යකයක් ඇමිණීමට නොහැකිය not_ready: සැකසීම අවසන් නොකළ ගොනු ඇමිණිය නොහැක. මොහොතකින් නැවත උත්සාහ කරන්න! too_many: ගොනු 4කට වඩා ඇමිණිය නොහැක migrations: @@ -1168,8 +1179,8 @@ si: too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් - posting_defaults: පෙරනිමි පළ කිරීම - public_timelines: පොදු කාලරේඛා + posting_defaults: සැමවිට පළ කරන ආකාරය + public_timelines: ප්‍රසිද්ධ කාලරේඛා privacy: search: සොයන්න privacy_policy: @@ -1203,11 +1214,8 @@ si: rss: content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම:' descriptions: - account: "@%{acct}සිට පොදු පළ කිරීම්" - tag: "#%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම්" + account: "@%{acct} වෙතින් ප්‍රසිද්ධ ලිපි" scheduled_statuses: - over_daily_limit: ඔබ අද දිනට නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත - over_total_limit: ඔබ නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත too_soon: නියමිත දිනය අනාගතයේ විය යුතුය sessions: activity: අවසාන ක්‍රියාකාරකම @@ -1259,7 +1267,7 @@ si: account_settings: ගිණුමේ සැකසුම් aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම - authorized_apps: අවසර ලත් යෙදුම් + authorized_apps: බලයලත් යෙදුම් back: මාස්ටඩන් වෙත ආපසු delete: ගිණුම මැකීම development: සංවර්ධනය @@ -1273,7 +1281,7 @@ si: preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් - statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම + statuses_cleanup: ස්වයංක්‍රීය ලිපි මැකීම two_factor_authentication: ද්වි සාධක Aut webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: @@ -1295,13 +1303,13 @@ si: other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' edited_at_html: සංස්කරණය %{date} errors: - in_reply_not_found: ඔබ පිළිතුරු දීමට උත්සාහ කරන පළ කිරීම පවතින බවක් නොපෙනේ. + in_reply_not_found: ඔබ පිළිතුරු දීමට තැත් කරන ලිපිය නොපවතින බව පෙනෙයි. open_in_web: වෙබයේ විවෘත කරන්න over_character_limit: අක්ෂර සීමාව %{max} ඉක්මවා ඇත pin_errors: - direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක - limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත - ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක + direct: සඳහන් කළ අයට පමණක් පෙනෙන ලිපි ඇමිණීමට නොහැකිය + limit: දැනටමත් මුදුනට ඇමිණිමට හැකි ලිපි සීමාවට ළඟා වී ඇත + ownership: වෙනත් අයගේ ලිපි ඇමිණීමට නොහැකිය poll: total_people: one: පුද්ගලයින් %{count} @@ -1324,16 +1332,14 @@ si: unlisted: ලැයිස්තුගත නොකළ unlisted_long: සෑම කෙනෙකුටම දැකිය හැක, නමුත් පොදු කාලරාමුවෙහි ලැයිස්තුගත කර නොමැත statuses_cleanup: - enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න - enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි + enabled: පරණ ලිපි ස්වයංක්‍රීයව මකන්න exceptions: හැර දැමීම් - explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක keep_direct: සෘජු පණිවිඩ තබාගන්න keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න - keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් මැකෙන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත @@ -1374,12 +1380,12 @@ si: edit: සංස්කරණය enabled: ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත enabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව සබල කර ඇත - generate_recovery_codes: ප්‍රතිසාධන කේත ජනනය කරන්න + generate_recovery_codes: ප්‍රතිසාධන කේත උත්පාදනය කරන්න lost_recovery_codes: ඔබගේ දුරකථනය නැති වුවහොත් ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට ප්‍රතිසාධන කේත ඔබට ඉඩ සලසයි. ඔබට ඔබේ ප්‍රතිසාධන කේත නැති වී ඇත්නම්, ඔබට ඒවා මෙහි නැවත උත්පාදනය කළ හැක. ඔබගේ පැරණි ප්‍රතිසාධන කේත අවලංගු වනු ඇත. - methods: ද්වි සාධක ක්රම + methods: ද්වි සාධක ක්‍රම otp: Authenticator යෙදුම - recovery_codes: උපස්ථ ප්‍රතිසාධන කේත - recovery_codes_regenerated: ප්‍රතිසාධන කේත සාර්ථකව ප්‍රතිජනනය කරන ලදී + recovery_codes: ප්‍රතිසාධන කේත උපස්ථය + recovery_codes_regenerated: ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි recovery_instructions_html: ඔබට කවදා හෝ ඔබගේ දුරකථනයට ප්‍රවේශය අහිමි වුවහොත්, ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට පහත ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කළ හැක. ප්‍රතිසාධන කේත ආරක්ෂිතව තබා ගන්න. උදාහරණයක් ලෙස, ඔබට ඒවා මුද්‍රණය කර වෙනත් වැදගත් ලේඛන සමඟ ගබඩා කළ හැකිය. webauthn: ආරක්‍ෂණ යතුරු user_mailer: @@ -1407,19 +1413,17 @@ si: appeal: අභියාචනයක් ඉදිරිපත් කරන්න appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. categories: - spam: ආයාචිත තැපැල් + spam: ආයාචිත violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. - silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. + sensitive: මේ මොහොත් සිට ඔබ උඩුගත කරන සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකා අවවාදයක් පිටුපස සඟවනු ඇත. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. reason: 'හේතුව:' - statuses: 'උපුටා දක්වන ලද පළ කිරීම්:' subject: - delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" + delete_statuses: "%{acct} හි ඔබගේ ලිපිය ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත - mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" + mark_statuses_as_sensitive: ඔබගේ %{acct} ලිපි සංවේදී බව සලකුණු කර ඇත none: "%{acct} සඳහා අවවාදය" sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත @@ -1427,7 +1431,7 @@ si: title: delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත - mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත + mark_statuses_as_sensitive: ලිපි සංවේදී බව සලකුණු කර ඇත none: අවවාදයයි sensitive: ගිණුම සංවේදී බව යොදා ඇත silence: ගිණුම සීමා කර ඇත diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 917d3791f6..7e529c0eee 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -11,7 +11,6 @@ si: title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත - text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" types: disable: පරිශීලකයාගේ ගිණුම භාවිතා කිරීමෙන් වළක්වන්න, නමුත් ඔවුන්ගේ අන්තර්ගතය මකා දැමීම හෝ සඟවන්න එපා. @@ -23,7 +22,7 @@ si: ends_at: විකල්ප. මෙම අවස්ථාවේදී නිවේදනය ස්වයංක්‍රීයව ප්‍රකාශනය කිරීමෙන් ඉවත් වනු ඇත scheduled_at: නිවේදනය වහාම ප්‍රකාශයට පත් කිරීමට හිස්ව තබන්න starts_at: විකල්ප. ඔබගේ නිවේදනය නිශ්චිත කාල පරාසයකට බැඳී ඇත්නම් - text: ඔබට post syntax භාවිතා කළ හැක. කරුණාකර පරිශීලකයාගේ තිරය මත නිවේදනය ලබා ගන්නා ඉඩ ගැන සැලකිලිමත් වන්න + text: ඔබට ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය. කරුණාකර නිවේදනයෙන් පරිශ්‍රීලකයින්ගේ තිරයේ ඉඩ කෙතරම් ඇහිරෙනවා ද පිළිබඳව සැලකිලිමත් වන්න appeal: text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: @@ -120,7 +119,7 @@ si: text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න - avatar: අවතාරය + avatar: පැතිකඩ ඡායාරූපය chosen_languages: භාෂා පෙරන්න confirm_new_password: නව මුරපදය තහවුරු කරන්න confirm_password: මුරපදය තහවුරු කරන්න @@ -148,7 +147,6 @@ si: setting_default_privacy: ලිපියේ රහස්‍යතාව setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න - setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න @@ -156,7 +154,7 @@ si: setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න - setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න + setting_system_font_ui: පද්ධතියේ පෙරනිමි රුවකුරු භාවිතා කරන්න setting_theme: අඩවියේ තේමාව setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න @@ -175,8 +173,8 @@ si: name: හෑෂ් ටැගය filters: actions: - hide: සම්පූර්ණයෙන්ම සඟවන්න - warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + hide: මුළුමනින්ම සඟවන්න + warn: අවවාදයක් සහිතව සඟවන්න form_admin_settings: custom_css: අභිරුචි CSS profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න @@ -184,8 +182,6 @@ si: site_title: සේවාදායකයේ නම theme: පෙරනිමි තේමාව interactions: - must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න - must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස @@ -201,12 +197,9 @@ si: notification_emails: digest: digest ඊමේල් යවන්න favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා - follow: කවුරුහරි ඔබව අනුගමනය කළා - follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය - mention: කවුරුහරි ඔබව සඳහන් කළා - pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - report: නව වාර්තාවක් ඉදිරිපත් කෙරේ - trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ + follow: යමෙක් ඔබව අනුගමනය කළා + mention: යමෙක් ඔබව සඳහන් කළා + report: නව වාර්තාවක් යොමු කර ඇත rule: text: නීතිය tag: From 2b98e2ecd6224ad41d38f5febd31efa7e4de316d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 16:33:54 +0200 Subject: [PATCH 080/237] Fix auto-loading-more when not scrolled (#27286) --- app/javascript/mastodon/components/scrollable_list.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/scrollable_list.jsx b/app/javascript/mastodon/components/scrollable_list.jsx index 7672a4e424..79dc481362 100644 --- a/app/javascript/mastodon/components/scrollable_list.jsx +++ b/app/javascript/mastodon/components/scrollable_list.jsx @@ -78,7 +78,7 @@ class ScrollableList extends PureComponent { const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; - if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { + if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { this.props.onLoadMore(); } From 5606a179330ba257274c6bc86aa2179cfb32d914 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:35:05 +0200 Subject: [PATCH 081/237] Update dependency sidekiq to v6.5.10 (#27287) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 33dc8cb9b4..9c1f5d1b94 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -691,7 +691,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.9) + sidekiq (6.5.10) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) From 165ec6c7795665f15edc31a1f9b6346bde1e8303 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 5 Oct 2023 15:23:42 -0400 Subject: [PATCH 082/237] Remove bundle audit skipping sidekiq CVE (#27291) --- .bundler-audit.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .bundler-audit.yml diff --git a/.bundler-audit.yml b/.bundler-audit.yml deleted file mode 100644 index a457fc41e8..0000000000 --- a/.bundler-audit.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -ignore: - # Sidekiq security issue, fixes in the latest Sidekiq 7 but we can not upgrade. Will be fixed in Sidekiq 6.5.10 - - CVE-2023-26141 From c4cff3d7621e8408b46c45dd049e418d4d4fcc7a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 6 Oct 2023 11:33:43 +0200 Subject: [PATCH 083/237] Remove Capistrano (#27295) --- .gitignore | 3 --- .prettierignore | 3 --- Capfile | 15 --------------- Gemfile | 6 ------ Gemfile.lock | 27 --------------------------- 5 files changed, 54 deletions(-) delete mode 100644 Capfile diff --git a/.gitignore b/.gitignore index 2bc8b18c8f..cb442609a1 100644 --- a/.gitignore +++ b/.gitignore @@ -31,9 +31,6 @@ # Ignore Vagrant files .vagrant/ -# Ignore Capistrano customizations -/config/deploy/* - # Ignore IDE files .vscode/ .idea/ diff --git a/.prettierignore b/.prettierignore index 91029f665d..305f0fd753 100644 --- a/.prettierignore +++ b/.prettierignore @@ -31,9 +31,6 @@ # Ignore Vagrant files .vagrant/ -# Ignore Capistrano customizations -/config/deploy/* - # Ignore IDE files .vscode/ .idea/ diff --git a/Capfile b/Capfile deleted file mode 100644 index 86efa5bacf..0000000000 --- a/Capfile +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -require 'capistrano/setup' -require 'capistrano/deploy' -require 'capistrano/scm/git' - -install_plugin Capistrano::SCM::Git - -require 'capistrano/rbenv' -require 'capistrano/bundler' -require 'capistrano/yarn' -require 'capistrano/rails/assets' -require 'capistrano/rails/migrations' - -Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } diff --git a/Gemfile b/Gemfile index 6f20ff25a5..17cbabd3be 100644 --- a/Gemfile +++ b/Gemfile @@ -170,12 +170,6 @@ group :development do # Linter CLI for HAML files gem 'haml_lint', require: false - # Deployment automation - gem 'capistrano', '~> 3.17' - gem 'capistrano-rails', '~> 1.6' - gem 'capistrano-rbenv', '~> 2.2' - gem 'capistrano-yarn', '~> 2.0' - # Validate missing i18n keys gem 'i18n-tasks', '~> 1.0', require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 9c1f5d1b94..b4fe022ea8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,8 +112,6 @@ GEM addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) aes_key_wrap (1.1.0) - airbrussh (1.4.1) - sshkit (>= 1.6.1, != 1.7.0) android_key_attestation (0.3.0) annotate (3.2.0) activerecord (>= 3.2, < 8.0) @@ -175,21 +173,6 @@ GEM bundler-audit (0.9.1) bundler (>= 1.2.0, < 3) thor (~> 1.0) - capistrano (3.17.3) - airbrussh (>= 1.0.0) - i18n - rake (>= 10.0.0) - sshkit (>= 1.9.0) - capistrano-bundler (2.1.0) - capistrano (~> 3.1) - capistrano-rails (1.6.3) - capistrano (~> 3.1) - capistrano-bundler (>= 1.1, < 3) - capistrano-rbenv (2.2.0) - capistrano (~> 3.1) - sshkit (~> 1.3) - capistrano-yarn (2.0.2) - capistrano (~> 3.0) capybara (3.39.2) addressable matrix @@ -473,11 +456,8 @@ GEM net-protocol net-protocol (0.2.1) timeout - net-scp (4.0.0) - net-ssh (>= 2.6.5, < 8.0.0) net-smtp (0.3.3) net-protocol - net-ssh (7.1.0) nio4r (2.5.9) nokogiri (1.15.4) mini_portile2 (~> 2.8.2) @@ -726,9 +706,6 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - sshkit (1.21.5) - net-scp (>= 1.1.2) - net-ssh (>= 2.8.0) stackprof (0.2.25) statsd-ruby (1.5.0) stoplight (3.0.2) @@ -829,10 +806,6 @@ DEPENDENCIES brakeman (~> 6.0) browser bundler-audit (~> 0.9) - capistrano (~> 3.17) - capistrano-rails (~> 1.6) - capistrano-rbenv (~> 2.2) - capistrano-yarn (~> 2.0) capybara (~> 3.39) charlock_holmes (~> 0.7.7) chewy (~> 7.3) From 027c1bef8d0314dfd800d345d322d8023f2383f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:43:30 +0200 Subject: [PATCH 084/237] Update dependency active_model_serializers to v0.10.14 (#27303) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b4fe022ea8..c64487c2e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -84,9 +84,9 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - active_model_serializers (0.10.13) - actionpack (>= 4.1, < 7.1) - activemodel (>= 4.1, < 7.1) + active_model_serializers (0.10.14) + actionpack (>= 4.1) + activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) activejob (7.0.8) From e0b54ed3e16f9320751fdccfaeebb384f65b3113 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:49:09 +0200 Subject: [PATCH 085/237] New Crowdin Translations (automated) (#27304) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/lv.json | 54 ++++++++++++------------- app/javascript/mastodon/locales/ru.json | 2 +- config/locales/lv.yml | 4 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4c920b038f..87d7c90c41 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -686,7 +686,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index aab7b9a8fb..7f71d9318b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -161,13 +161,13 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un Ziņot", + "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", "confirmations.cancel_follow_request.message": "Vai tiešām vēlies atsaukt pieprasījumu sekot {name}?", "confirmations.delete.confirm": "Dzēst", - "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ziņu?", + "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -309,11 +309,11 @@ "home.column_settings.show_replies": "Rādīt atbildes", "home.explore_prompt.body": "Tavā mājas plūsmā būs dažādu ziņu sajaukums no atsaucēm, kurām esi izvēlējies sekot, personām, kurām esi izvēlējies sekot, un ziņām, kuras tās izceļ. Ja tas šķiet pārāk kluss, iespējams, vēlēsies:", "home.explore_prompt.title": "Šī ir tava Mastodon mājvieta.", - "home.hide_announcements": "Slēpt anonsus", + "home.hide_announcements": "Slēpt paziņojumus", "home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!", "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!", - "home.show_announcements": "Rādīt anonsus", + "home.show_announcements": "Rādīt paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", "interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.", "interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.", @@ -369,7 +369,7 @@ "lightbox.close": "Aizvērt", "lightbox.compress": "Saspiest attēla skata lodziņu", "lightbox.expand": "Izvērst attēla skata lodziņu", - "lightbox.next": "Nākamais", + "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.", @@ -422,8 +422,8 @@ "navigation_bar.search": "Meklēt", "navigation_bar.security": "Drošība", "not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.", - "notification.admin.report": "{name} sūdzējās par {target}", - "notification.admin.sign_up": "{name} pierakstījās", + "notification.admin.report": "{name} ziņoja par {target}", + "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", "notification.follow": "{name} uzsāka tev sekot", "notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu", @@ -435,7 +435,7 @@ "notification.update": "{name} rediģēja ierakstu", "notifications.clear": "Notīrīt paziņojumus", "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", - "notifications.column_settings.admin.report": "Jaunas sūdzības:", + "notifications.column_settings.admin.report": "Jauni ziņojumi:", "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlase:", @@ -445,7 +445,7 @@ "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", "notifications.column_settings.mention": "Pieminējumi:", - "notifications.column_settings.poll": "Aptauju rezultāti:", + "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", "notifications.column_settings.reblog": "Pastiprinātie ieraksti:", "notifications.column_settings.show": "Rādīt kolonnā", @@ -457,13 +457,13 @@ "notifications.filter.all": "Visi", "notifications.filter.boosts": "Pastiprinātie ieraksti", "notifications.filter.favourites": "Izlases", - "notifications.filter.follows": "Sekošana", + "notifications.filter.follows": "Seko", "notifications.filter.mentions": "Pieminējumi", - "notifications.filter.polls": "Aptauju rezultāti", + "notifications.filter.polls": "Aptaujas rezultāti", "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", "notifications.grant_permission": "Piešķirt atļauju.", "notifications.group": "{count} paziņojumi", - "notifications.mark_as_read": "Atzīmēt visus paziņojumus kā izlasītus", + "notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu", "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", @@ -563,25 +563,25 @@ "report.reasons.spam": "Tas ir spams", "report.reasons.spam_description": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes", "report.reasons.violation": "Tas pārkāpj servera noteikumus", - "report.reasons.violation_description": "Tu zini, ka tas pārkāpj konkrētus noteikumus", + "report.reasons.violation_description": "Tu zini, ka tas pārkāpj īpašus noteikumus", "report.rules.subtitle": "Atlasi visus atbilstošos", "report.rules.title": "Kuri noteikumi tiek pārkāpti?", "report.statuses.subtitle": "Atlasi visus atbilstošos", "report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?", "report.submit": "Iesniegt", - "report.target": "Sūdzība par {target}", - "report.thanks.take_action": "Vari veikt šīs darbības, lai kontrolētu Mastodon redzamo saturu:", + "report.target": "Ziņošana par: {target}", + "report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:", "report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:", "report.thanks.title": "Vai nevēlies to redzēt?", "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekot @{name}", "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.", - "report_notification.attached_statuses": "{count, plural, one {Pievienots {count} ieraksts} other {Pievienoti {count} ieraksti}}", + "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", "report_notification.categories.legal": "Tiesisks", "report_notification.categories.other": "Cita", "report_notification.categories.spam": "Spams", "report_notification.categories.violation": "Noteikumu pārkāpums", - "report_notification.open": "Atvērt sūdzību", + "report_notification.open": "Atvērt ziņojumu", "search.no_recent_searches": "Nav nesen veiktu meklējumu", "search.placeholder": "Meklēšana", "search.quick_action.account_search": "Profili atbilst {x}", @@ -628,7 +628,7 @@ "status.direct_indicator": "Pieminēts privāti", "status.edit": "Rediģēt", "status.edited": "Rediģēts {date}", - "status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}", + "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienīts", "status.filter": "Filtrē šo ziņu", @@ -656,8 +656,8 @@ "status.remove_bookmark": "Noņemt grāmatzīmi", "status.replied_to": "Atbildēja {name}", "status.reply": "Atbildēt", - "status.replyAll": "Atbildēt uz pavedienu", - "status.report": "Sūdzēties par @{name}", + "status.replyAll": "Atbildēt uz tematu", + "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", "status.show_filter_reason": "Tomēr rādīt", @@ -668,7 +668,7 @@ "status.show_original": "Rādīt oriģinālu", "status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}", "status.translate": "Tulkot", - "status.translated_from_with": "Tulkots no {lang}, izmantojot {provider}", + "status.translated_from_with": "Tulkots no {lang} izmantojot {provider}", "status.uncached_media_warning": "Priekšskatījums nav pieejams", "status.unmute_conversation": "Noņemt sarunas apklusinājumu", "status.unpin": "Noņemt profila piespraudumu", @@ -681,16 +681,16 @@ "time_remaining.hours": "{number, plural, one {Atlikusi # stunda} other {Atlikušas # stundas}}", "time_remaining.minutes": "{number, plural, one {Atlikusi # minūte} other {Atlikušas # minūtes}}", "time_remaining.moments": "Atlikuši daži mirkļi", - "time_remaining.seconds": "{number, plural, one {Atlikusi # sekunde} other {Atlikušas # sekundes}}", + "time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}", "timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.", "timeline_hint.resources.followers": "Sekotāji", - "timeline_hint.resources.follows": "Sekojošie", + "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecāki ieraksti", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}", "trends.trending_now": "Aktuālās tendences", - "ui.beforeunload": "Ja pametīsiet Mastodon, jūsu melnraksts tiks zaudēts.", + "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}Mjd", - "units.short.million": "{count}Mjn", + "units.short.million": "{count}M", "units.short.thousand": "{count}Tk", "upload_area.title": "Velc un nomet, lai augšupielādētu", "upload_button.label": "Pievienot bildi, video vai audio datni", @@ -707,7 +707,7 @@ "upload_modal.apply": "Pielietot", "upload_modal.applying": "Pielieto…", "upload_modal.choose_image": "Izvēlēties attēlu", - "upload_modal.description_placeholder": "Raibais runcis Rīgā ratu rumbā rūc", + "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", "upload_modal.detect_text": "Noteikt tekstu no attēla", "upload_modal.edit_media": "Rediģēt multividi", "upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ae9cef5938..69db89dc86 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -537,7 +537,7 @@ "relative_time.today": "сегодня", "reply_indicator.cancel": "Отмена", "report.block": "Заблокировать", - "report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.", + "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", "report.categories.legal": "Правовая информация", "report.categories.other": "Другое", "report.categories.spam": "Спам", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 02a34fd856..28a1a33dcb 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -460,7 +460,7 @@ lv: description_html: Tu gatavojies importēt domēna bloku sarakstu. Lūdzu, ļoti rūpīgi pārskati šo sarakstu, it īpaši, ja tu pats neesi to veidojis. existing_relationships_warning: Esošās sekošanas attiecības private_comment_description_html: 'Lai palīdzētu tev izsekot, no kurienes nāk importētie bloki, tiks izveidoti importētie bloki ar šādu privātu komentāru: %{comment}' - private_comment_template: Importēts no %{source} %{date} + private_comment_template: Importēt no %{source} %{date} title: Importēt bloķētos domēnus invalid_domain_block: 'Viens vai vairāki domēna bloķi tika izlaisti šādas kļūdas(-u) dēļ: %{error}' new: @@ -1107,7 +1107,7 @@ lv: new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pastu ar apstiprinājuma saiti! title: Pārbaudi savu iesūtni sign_in: - preamble_html: Pierakstieties ar saviem %{domain} akreditācijas datiem. Ja jūsu konts ir mitināts citā serverī, jūs nevarēsit pieteikties šeit. + preamble_html: Piesakies ar saviem %{domain} akreditācijas datiem. Ja tavs konts ir mitināts citā serverī, tu nevarēsi pieteikties šeit. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. From dd88cef84bc233508bc7388cb974b0a096dbdb39 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 18:59:10 +0900 Subject: [PATCH 086/237] =?UTF-8?q?#63=20NodeInfo=E3=81=A7=E3=81=AE`fedibi?= =?UTF-8?q?rd=5Fcapabilities`=E5=85=AC=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 31 +++++++++++++++++++ app/serializers/nodeinfo/serializer.rb | 5 ++- app/serializers/rest/instance_serializer.rb | 26 +--------------- .../rest/v1/instance_serializer.rb | 26 +--------------- 4 files changed, 37 insertions(+), 51 deletions(-) create mode 100644 app/helpers/kmyblue_capabilities_helper.rb diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb new file mode 100644 index 0000000000..7ad1d55fc4 --- /dev/null +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module KmyblueCapabilitiesHelper + def fedibird_capabilities + capabilities = [ + :enable_wide_emoji, + :kmyblue_searchability, + :searchability, + :kmyblue_markdown, + :kmyblue_reaction_deck, + :kmyblue_visibility_login, + :status_reference, + :visibility_mutual, + :visibility_limited, + :kmyblue_limited_scope, + :kmyblue_antenna, + :kmyblue_bookmark_category, + :kmyblue_quote, + :kmyblue_searchability_limited, + ] + + capabilities << :profile_search unless Chewy.enabled? + if Setting.enable_emoji_reaction + capabilities << :emoji_reaction + capabilities << :enable_wide_emoji_reaction + end + capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility + + capabilities + end +end diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb index f70cc38f06..df8bc07611 100644 --- a/app/serializers/nodeinfo/serializer.rb +++ b/app/serializers/nodeinfo/serializer.rb @@ -2,6 +2,7 @@ class NodeInfo::Serializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :version, :software, :protocols, :services, :usage, :open_registrations, :metadata @@ -38,7 +39,9 @@ class NodeInfo::Serializer < ActiveModel::Serializer end def metadata - {} + { + fedibird_capabilities: fedibird_capabilities, + } end private diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 9b52277bf0..ed4e40523a 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -8,6 +8,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer end include RoutingHelper + include KmyblueCapabilitiesHelper attributes :domain, :title, :version, :source_url, :description, :usage, :thumbnail, :languages, :configuration, @@ -105,31 +106,6 @@ class REST::InstanceSerializer < ActiveModel::Serializer } end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def registrations_enabled? diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 64951b3db5..d0473f5f97 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -2,6 +2,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, @@ -114,31 +115,6 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer UserRole.everyone.can?(:invite_users) end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def instance_presenter From f95a995b81ba270ff534064cbfc1c7f0bda8a4b3 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:00:19 +0900 Subject: [PATCH 087/237] =?UTF-8?q?Capabilities=E3=81=AE=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=81=AB=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb index 7ad1d55fc4..5b3b89f9e9 100644 --- a/app/helpers/kmyblue_capabilities_helper.rb +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -17,6 +17,7 @@ module KmyblueCapabilitiesHelper :kmyblue_bookmark_category, :kmyblue_quote, :kmyblue_searchability_limited, + :kmyblue_searchability_public_unlisted, ] capabilities << :profile_search unless Chewy.enabled? From 016a8490d2cabd499c295b1405a607a036670d0d Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 18:59:10 +0900 Subject: [PATCH 088/237] =?UTF-8?q?#63=20NodeInfo=E3=81=A7=E3=81=AE`fedibi?= =?UTF-8?q?rd=5Fcapabilities`=E5=85=AC=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 31 +++++++++++++++++++ app/serializers/nodeinfo/serializer.rb | 5 ++- app/serializers/rest/instance_serializer.rb | 26 +--------------- .../rest/v1/instance_serializer.rb | 26 +--------------- 4 files changed, 37 insertions(+), 51 deletions(-) create mode 100644 app/helpers/kmyblue_capabilities_helper.rb diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb new file mode 100644 index 0000000000..7ad1d55fc4 --- /dev/null +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module KmyblueCapabilitiesHelper + def fedibird_capabilities + capabilities = [ + :enable_wide_emoji, + :kmyblue_searchability, + :searchability, + :kmyblue_markdown, + :kmyblue_reaction_deck, + :kmyblue_visibility_login, + :status_reference, + :visibility_mutual, + :visibility_limited, + :kmyblue_limited_scope, + :kmyblue_antenna, + :kmyblue_bookmark_category, + :kmyblue_quote, + :kmyblue_searchability_limited, + ] + + capabilities << :profile_search unless Chewy.enabled? + if Setting.enable_emoji_reaction + capabilities << :emoji_reaction + capabilities << :enable_wide_emoji_reaction + end + capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility + + capabilities + end +end diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb index f70cc38f06..df8bc07611 100644 --- a/app/serializers/nodeinfo/serializer.rb +++ b/app/serializers/nodeinfo/serializer.rb @@ -2,6 +2,7 @@ class NodeInfo::Serializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :version, :software, :protocols, :services, :usage, :open_registrations, :metadata @@ -38,7 +39,9 @@ class NodeInfo::Serializer < ActiveModel::Serializer end def metadata - {} + { + fedibird_capabilities: fedibird_capabilities, + } end private diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 9b52277bf0..ed4e40523a 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -8,6 +8,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer end include RoutingHelper + include KmyblueCapabilitiesHelper attributes :domain, :title, :version, :source_url, :description, :usage, :thumbnail, :languages, :configuration, @@ -105,31 +106,6 @@ class REST::InstanceSerializer < ActiveModel::Serializer } end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def registrations_enabled? diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 64951b3db5..d0473f5f97 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -2,6 +2,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer include RoutingHelper + include KmyblueCapabilitiesHelper attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, @@ -114,31 +115,6 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer UserRole.everyone.can?(:invite_users) end - # for third party apps - def fedibird_capabilities - capabilities = [ - :enable_wide_emoji, - :enable_wide_emoji_reaction, - :kmyblue_searchability, - :searchability, - :kmyblue_markdown, - :kmyblue_reaction_deck, - :kmyblue_visibility_login, - :status_reference, - :visibility_mutual, - :visibility_limited, - :kmyblue_limited_scope, - :kmyblue_antenna, - :kmyblue_bookmark_category, - ] - - capabilities << :profile_search unless Chewy.enabled? - capabilities << :emoji_reaction if Setting.enable_emoji_reaction - capabilities << :kmyblue_visibility_public_unlisted if Setting.enable_public_unlisted_visibility - - capabilities - end - private def instance_presenter From b3a0ca430405fe13621fe6c595e2b0c803074bcc Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:15:17 +0900 Subject: [PATCH 089/237] =?UTF-8?q?Change:=20NodeInfo=E3=81=A7=E5=85=AC?= =?UTF-8?q?=E9=96=8B=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E3=82=92Features=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/serializers/nodeinfo/serializer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb index df8bc07611..3555f0bd8d 100644 --- a/app/serializers/nodeinfo/serializer.rb +++ b/app/serializers/nodeinfo/serializer.rb @@ -40,7 +40,7 @@ class NodeInfo::Serializer < ActiveModel::Serializer def metadata { - fedibird_capabilities: fedibird_capabilities, + features: fedibird_capabilities, } end From 1fb0df2ca68f44d161556694ad176fca5e9f43fa Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 6 Oct 2023 19:45:11 +0900 Subject: [PATCH 090/237] =?UTF-8?q?Add:=20`circle=5Fhistory`=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E5=85=AC=E9=96=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/kmyblue_capabilities_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/kmyblue_capabilities_helper.rb b/app/helpers/kmyblue_capabilities_helper.rb index 7ad1d55fc4..8161508cee 100644 --- a/app/helpers/kmyblue_capabilities_helper.rb +++ b/app/helpers/kmyblue_capabilities_helper.rb @@ -17,6 +17,7 @@ module KmyblueCapabilitiesHelper :kmyblue_bookmark_category, :kmyblue_quote, :kmyblue_searchability_limited, + :kmyblue_circle_history, ] capabilities << :profile_search unless Chewy.enabled? From 4d59dfb1c619ebec44243acc7f21dc3edb9feb3b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:02 +0200 Subject: [PATCH 091/237] Fix some remote posts getting truncated (#27307) --- .../mastodon/components/__tests__/hashtag_bar.tsx | 15 +++++++++++++++ .../mastodon/components/hashtag_bar.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx index 1856b7109e..b7225fc92e 100644 --- a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx @@ -45,6 +45,21 @@ describe('computeHashtagBarForStatus', () => { ); }); + it('does not truncate the contents when the last child is a text node', () => { + const status = createStatus( + 'this is a #test. Some more text', + ['test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"this is a #test. Some more text"`, + ); + }); + it('extract tags from the last line', () => { const status = createStatus( '

Simple text

#hashtag

', diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index d45a6e20eb..91fa922198 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -109,7 +109,7 @@ export function computeHashtagBarForStatus(status: StatusLike): { const lastChild = template.content.lastChild; - if (!lastChild) return defaultResult; + if (!lastChild || lastChild.nodeType === Node.TEXT_NODE) return defaultResult; template.content.removeChild(lastChild); const contentWithoutLastLine = template; From 340c390849c8a265dd11d0132e49b01042c58567 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:16 +0200 Subject: [PATCH 092/237] =?UTF-8?q?Fix=20crash=20when=20filtering=20for=20?= =?UTF-8?q?=E2=80=9Cdormant=E2=80=9D=20relationships=20(#27306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/account.rb | 2 +- app/models/relationship_filter.rb | 2 +- spec/models/relationship_filter_spec.rb | 68 +++++++++++++++++-------- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index bb70b3a7b8..a25ebc4aaf 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -127,7 +127,7 @@ class Account < ApplicationRecord scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } - scope :by_recent_status, -> { order(Arel.sql('account_stats.last_status_at DESC NULLS LAST')) } + scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) } scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) } scope :popular, -> { order('account_stats.followers_count desc') } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 955d7d188a..d686f9ed89 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -114,7 +114,7 @@ class RelationshipFilter def activity_scope(value) case value when 'dormant' - AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) + Account.joins(:account_stat).where(account_stat: { last_status_at: [nil, ...1.month.ago] }) else raise Mastodon::InvalidParameterError, "Unknown activity: #{value}" end diff --git a/spec/models/relationship_filter_spec.rb b/spec/models/relationship_filter_spec.rb index ac31885774..fccd42aaad 100644 --- a/spec/models/relationship_filter_spec.rb +++ b/spec/models/relationship_filter_spec.rb @@ -6,32 +6,60 @@ describe RelationshipFilter do let(:account) { Fabricate(:account) } describe '#results' do - context 'when default params are used' do - subject do - described_class.new(account, 'order' => 'active').results + let(:account_of_7_months) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 7.months.ago).account } + let(:account_of_1_day) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 1.day.ago).account } + let(:account_of_3_days) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 3.days.ago).account } + let(:silent_account) { Fabricate(:account_stat, statuses_count: 0, last_status_at: nil).account } + + before do + account.follow!(account_of_7_months) + account.follow!(account_of_1_day) + account.follow!(account_of_3_days) + account.follow!(silent_account) + end + + context 'when ordering by last activity' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'active').results + end + + it 'returns followings ordered by last activity' do + expect(subject).to eq [account_of_1_day, account_of_3_days, account_of_7_months, silent_account] + end end - before do - add_following_account_with(last_status_at: 7.days.ago) - add_following_account_with(last_status_at: 1.day.ago) - add_following_account_with(last_status_at: 3.days.ago) + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'active', 'activity' => 'dormant').results + end + + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [account_of_7_months, silent_account] + end + end + end + + context 'when ordering by account creation' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'recent').results + end + + it 'returns followings ordered by last account creation' do + expect(subject).to eq [silent_account, account_of_3_days, account_of_1_day, account_of_7_months] + end end - it 'returns followings ordered by last activity' do - expected_result = account.following.eager_load(:account_stat).reorder(nil).by_recent_status + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'recent', 'activity' => 'dormant').results + end - expect(subject).to eq expected_result + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [silent_account, account_of_7_months] + end end end end - - def add_following_account_with(last_status_at:) - following_account = Fabricate(:account) - Fabricate(:account_stat, account: following_account, - last_status_at: last_status_at, - statuses_count: 1, - following_count: 0, - followers_count: 0) - Fabricate(:follow, account: account, target_account: following_account).account - end end From aad6803deb8ede917461a5c5f2248422685b8249 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 22 Sep 2023 10:13:53 +0200 Subject: [PATCH 093/237] Fix the search documentation URL in system checks (#27036) --- app/lib/admin/system_check/elasticsearch_check.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/admin/system_check/elasticsearch_check.rb b/app/lib/admin/system_check/elasticsearch_check.rb index c0a1a21e86..406bb5bcb9 100644 --- a/app/lib/admin/system_check/elasticsearch_check.rb +++ b/app/lib/admin/system_check/elasticsearch_check.rb @@ -41,13 +41,13 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck elsif cluster_health['status'] == 'red' Admin::SystemCheck::Message.new(:elasticsearch_health_red) elsif cluster_health['number_of_nodes'] < 2 && es_preset != 'single_node_cluster' - Admin::SystemCheck::Message.new(:elasticsearch_preset_single_node, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') + Admin::SystemCheck::Message.new(:elasticsearch_preset_single_node, nil, 'https://docs.joinmastodon.org/admin/elasticsearch/#scaling') elsif Chewy.client.indices.get_settings[Chewy::Stash::Specification.index_name]&.dig('settings', 'index', 'number_of_replicas')&.to_i&.positive? && es_preset == 'single_node_cluster' Admin::SystemCheck::Message.new(:elasticsearch_reset_chewy) elsif cluster_health['status'] == 'yellow' Admin::SystemCheck::Message.new(:elasticsearch_health_yellow) else - Admin::SystemCheck::Message.new(:elasticsearch_preset, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') + Admin::SystemCheck::Message.new(:elasticsearch_preset, nil, 'https://docs.joinmastodon.org/admin/elasticsearch/#scaling') end rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error Admin::SystemCheck::Message.new(:elasticsearch_running_check) From 9d9f94bf2a36340a971fdf4dd54945519ec635c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 11:06:48 +0200 Subject: [PATCH 094/237] New Crowdin Translations (automated) (#27052) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 4 ++-- app/javascript/mastodon/locales/en-GB.json | 1 + app/javascript/mastodon/locales/es-AR.json | 4 ++-- app/javascript/mastodon/locales/ko.json | 10 +++++----- app/javascript/mastodon/locales/no.json | 2 ++ app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/vi.json | 2 +- config/locales/ja.yml | 2 +- config/locales/ko.yml | 2 +- config/locales/sr-Latn.yml | 1 + config/locales/sr.yml | 1 + config/locales/vi.yml | 2 +- 13 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index d17bfdde7d..83bffd946d 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -26,7 +26,7 @@ "account.domain_blocked": "Блокиран домейн", "account.edit_profile": "Редактиране на профила", "account.enable_notifications": "Известяване при публикуване от @{name}", - "account.endorse": "Характеристика на профила", + "account.endorse": "Представи в профила", "account.featured_tags.last_status_at": "Последна публикация на {date}", "account.featured_tags.last_status_never": "Няма публикации", "account.featured_tags.title": "Главни хаштагове на {name}", @@ -393,7 +393,7 @@ "media_gallery.toggle_visible": "Скриване на {number, plural, one {изображение} other {изображения}}", "moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.", "mute_modal.duration": "Времетраене", - "mute_modal.hide_notifications": "Скривате ли известията от потребителя?", + "mute_modal.hide_notifications": "Скриване на известия от този потребител?", "mute_modal.indefinite": "Неопределено", "navigation_bar.about": "Относно", "navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 8d3535e326..20ed8937bc 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.status_search": "Posts matching {x}", "search.search_or_paste": "Search or paste URL", + "search_popout.full_text_search_disabled_message": "Unavailable on {domain}.", "search_popout.language_code": "ISO language code", "search_popout.options": "Search options", "search_popout.quick_actions": "Quick actions", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 1277264a99..7aeb66b546 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -302,8 +302,8 @@ "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", - "home.actions.go_to_explore": "Mirá qué está en tendencia", - "home.actions.go_to_suggestions": "Encontrá cuentas para seguir", + "home.actions.go_to_explore": "Ver qué está en tendencia", + "home.actions.go_to_suggestions": "Encontrar cuentas para seguir", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e1361f6537..37c3990e49 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -137,7 +137,7 @@ "compose.language.search": "언어 검색...", "compose.published.body": "게시하였습니다.", "compose.published.open": "열기", - "compose.saved.body": "게시물을 저장했어요.", + "compose.saved.body": "게시물이 저장되었습니다.", "compose_form.direct_message_warning_learn_more": "더 알아보기", "compose_form.encryption_warning": "마스토돈의 게시물들은 종단간 암호화가 되지 않습니다. 민감한 정보를 마스토돈을 통해 전달하지 마세요.", "compose_form.hashtag_warning": "이 게시물은 전체공개가 아니기 때문에 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색될 수 있습니다.", @@ -307,12 +307,12 @@ "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", - "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:", + "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타납니다. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있습니다.", "home.explore_prompt.title": "이곳은 마스토돈의 내 본거지입니다.", "home.hide_announcements": "공지사항 숨기기", "home.pending_critical_update.body": "서둘러 마스토돈 서버를 업데이트 하세요!", "home.pending_critical_update.link": "업데이트 보기", - "home.pending_critical_update.title": "긴급 보안 업데이트가 있어요!", + "home.pending_critical_update.title": "긴급 보안 업데이트가 있습니다!", "home.show_announcements": "공지사항 보기", "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", @@ -554,7 +554,7 @@ "report.mute_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 해당 계정은 자신이 뮤트 되었는지 알지 못합니다.", "report.next": "다음", "report.placeholder": "코멘트", - "report.reasons.dislike": "마음에 안듭니다", + "report.reasons.dislike": "마음에 안 듭니다", "report.reasons.dislike_description": "내가 보기 싫은 종류에 속합니다", "report.reasons.legal": "불법입니다", "report.reasons.legal_description": "내 서버가 속한 국가의 법률을 위반한다고 생각합니다", @@ -695,7 +695,7 @@ "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", - "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없어요.", + "upload_error.poll": "파일 업로드는 투표와 함께 쓸 수 없습니다.", "upload_form.audio_description": "청각 장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명", "upload_form.description_missing": "설명이 추가되지 않음", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 08949e9f7c..a670fd2e4f 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -310,6 +310,8 @@ "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", + "home.pending_critical_update.link": "Se oppdateringer", + "home.pending_critical_update.title": "Kritisk sikkerhetsoppdatering er tilgjengelig!", "home.show_announcements": "Vis kunngjøring", "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.", "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 49755e90ed..6fe5603f40 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Otvori URL adresu u Mastodon-u", "search.quick_action.status_search": "Podudaranje objava {x}", "search.search_or_paste": "Pretražite ili unesite adresu", + "search_popout.full_text_search_disabled_message": "Nije dostupno na {domain}.", "search_popout.language_code": "ISO kod jezika", "search_popout.options": "Opcije pretrage", "search_popout.quick_actions": "Brze radnje", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 0beabb5187..f3c077cf31 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Отвори URL адресу у Mastodon-у", "search.quick_action.status_search": "Подударање објава {x}", "search.search_or_paste": "Претражите или унесите адресу", + "search_popout.full_text_search_disabled_message": "Није доступно на {domain}.", "search_popout.language_code": "ISO код језика", "search_popout.options": "Опције претраге", "search_popout.quick_actions": "Брзе радње", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 01d301d5e8..5c2417274a 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -592,7 +592,7 @@ "search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search_popout.full_text_search_disabled_message": "Không khả dụng trên {domain}.", "search_popout.language_code": "Mã ngôn ngữ ISO", - "search_popout.options": "Tuỳ chọn tìm kiếm", + "search_popout.options": "Tùy chọn tìm kiếm", "search_popout.quick_actions": "Thao tác nhanh", "search_popout.recent": "Tìm kiếm gần đây", "search_popout.specific_date": "ngày cụ thể", diff --git a/config/locales/ja.yml b/config/locales/ja.yml index abcb3ccf90..8da2695fdc 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -378,7 +378,7 @@ ja: add_new: ドメインブロックを追加 confirm_suspension: cancel: キャンセル - confirm: ブロック + confirm: 停止 permanent_action: 失われたデータやフォロー関係は、ブロックを解除しても元に戻せません。 preamble_html: "%{domain} と、そのサブドメインをブロックします。" remove_all_data: この操作により、対象のドメインにあるアカウントからのコンテンツやメディア、プロフィール情報はすべて削除されます。 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 128667834d..a6a85464e6 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -833,7 +833,7 @@ ko: action: 문서 참조 message_html: Elasticsearch 클러스터가 한 대의 노드만 사용하고 있습니다. ES_PRESETsingle_node_cluster로 설정되어야 합니다. elasticsearch_reset_chewy: - message_html: 설정 변경으로 인해Elasticsearch 시스템 인덱스가 최신상태가 아닙니다. tootctl search deploy --reset-chewy 명령으로 업데이트 하세요. + message_html: 설정 변경으로 인해 Elasticsearch 시스템 인덱스가 최신상태가 아닙니다. tootctl search deploy --reset-chewy 명령으로 업데이트 하세요. elasticsearch_running_check: message_html: Elasticsearch에 연결할 수 없습니다. 실행중인지 확인하거나, 전문검색을 비활성화하세요 elasticsearch_version_check: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 84178ef041..5d6849091a 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1770,6 +1770,7 @@ sr-Latn: default: "%d %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d. %b %Y, %H:%M %Z" translation: errors: quota_exceeded: Prekoračena je kvota korišćenja usluge prevođenja na celom serveru. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 012afecb47..379b9cb9d6 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1770,6 +1770,7 @@ sr: default: "%d %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d. %b %Y, %H:%M %Z" translation: errors: quota_exceeded: Прекорачена је квота коришћења услуге превођења на целом серверу. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 093b0bca9e..73222a6047 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1513,7 +1513,7 @@ vi: activity: Tương tác confirm_follow_selected_followers: Bạn có chắc muốn theo dõi những người đã chọn? confirm_remove_selected_followers: Bạn có chắc muốn bỏ theo dõi những người đã chọn? - confirm_remove_selected_follows: Bạn có chắc muốn xoá những người theo dõi bạn đã chọn không? + confirm_remove_selected_follows: Bạn có chắc muốn xóa những người theo dõi bạn đã chọn không? dormant: Chưa follow_failure: Không thể theo dõi một số tài khoản đã chọn. follow_selected_followers: Theo dõi những người đã chọn From b2518e763c03c56e5da240c051a92e697592233a Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 22 Sep 2023 16:01:59 +0200 Subject: [PATCH 095/237] Fix ActiveRecord using two connection pools when no replica is defined (#27061) --- app/helpers/database_helper.rb | 17 +++++++++++++++-- app/models/application_record.rb | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/helpers/database_helper.rb b/app/helpers/database_helper.rb index 79227bb109..62a26a0c2a 100644 --- a/app/helpers/database_helper.rb +++ b/app/helpers/database_helper.rb @@ -1,11 +1,24 @@ # frozen_string_literal: true module DatabaseHelper + def replica_enabled? + ENV['REPLICA_DB_NAME'] || ENV.fetch('REPLICA_DATABASE_URL', nil) + end + module_function :replica_enabled? + def with_read_replica(&block) - ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block) + if replica_enabled? + ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block) + else + yield + end end def with_primary(&block) - ApplicationRecord.connected_to(role: :writing, &block) + if replica_enabled? + ApplicationRecord.connected_to(role: :writing, &block) + else + yield + end end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 567542f91d..014a73997d 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -5,7 +5,7 @@ class ApplicationRecord < ActiveRecord::Base include Remotable - connects_to database: { writing: :primary, reading: ENV['REPLICA_DB_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary } + connects_to database: { writing: :primary, reading: :replica } if DatabaseHelper.replica_enabled? class << self def update_index(_type_name, *_args, &_block) From e1dc8e299b110e3f597f24cc5af55acde94b18a6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:50:09 +0200 Subject: [PATCH 096/237] New Crowdin Translations (automated) (#27080) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 28 ++++---- app/javascript/mastodon/locales/cs.json | 3 +- app/javascript/mastodon/locales/de.json | 6 +- app/javascript/mastodon/locales/eo.json | 4 ++ app/javascript/mastodon/locales/es.json | 2 +- app/javascript/mastodon/locales/fa.json | 74 ++++++++++++-------- app/javascript/mastodon/locales/fr.json | 10 +-- app/javascript/mastodon/locales/gd.json | 6 +- app/javascript/mastodon/locales/gl.json | 2 +- app/javascript/mastodon/locales/ko.json | 4 +- app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/no.json | 4 ++ app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/vi.json | 6 +- app/javascript/mastodon/locales/zh-CN.json | 12 ++-- app/javascript/mastodon/locales/zh-HK.json | 1 + config/locales/ca.yml | 4 +- config/locales/cs.yml | 80 ++++++++++++++++++++++ config/locales/cy.yml | 1 + config/locales/de.yml | 2 +- config/locales/doorkeeper.fa.yml | 8 ++- config/locales/fa.yml | 72 +++++++++++++++++-- config/locales/gd.yml | 2 +- config/locales/gl.yml | 2 +- config/locales/ja.yml | 8 +-- config/locales/ko.yml | 2 +- config/locales/no.yml | 26 +++++++ config/locales/simple_form.ca.yml | 2 +- config/locales/simple_form.cy.yml | 2 + config/locales/simple_form.fa.yml | 35 ++++++++++ config/locales/simple_form.no.yml | 8 ++- config/locales/simple_form.zh-CN.yml | 10 +-- config/locales/sk.yml | 9 +++ config/locales/sl.yml | 1 + config/locales/zh-CN.yml | 12 ++-- 35 files changed, 356 insertions(+), 97 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 99640953af..433b9b47b7 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -321,7 +321,7 @@ "interaction_modal.login.action": "Torna a l'inici", "interaction_modal.login.prompt": "Domini del teu servidor domèstic, p.ex. mastodon.social", "interaction_modal.no_account_yet": "No a Mastodon?", - "interaction_modal.on_another_server": "En un servidor diferent", + "interaction_modal.on_another_server": "A un altre servidor", "interaction_modal.on_this_server": "En aquest servidor", "interaction_modal.sign_in": "No has iniciat sessió en aquest servidor. On tens el teu compte?", "interaction_modal.sign_in_hint": "Ajuda: Aquesta és la web on vas registrar-te. Si no ho recordes, mira el correu electrònic de benvinguda en la teva safata d'entrada. També pots introduïr el teu nom d'usuari complet! (per ex. @Mastodon@mastodon.social)", @@ -391,7 +391,7 @@ "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", "loading_indicator.label": "Es carrega...", "media_gallery.toggle_visible": "{number, plural, one {Amaga la imatge} other {Amaga les imatges}}", - "moved_to_account_banner.text": "El teu compte {disabledAccount} està actualment desactivat perquè l'has traslladat a {movedToAccount}.", + "moved_to_account_banner.text": "El teu compte {disabledAccount} està desactivat perquè l'has mogut a {movedToAccount}.", "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Amagar les notificacions d'aquest usuari?", "mute_modal.indefinite": "Indefinit", @@ -426,8 +426,8 @@ "notification.admin.sign_up": "{name} s'ha registrat", "notification.favourite": "{name} ha afavorit el teu tut", "notification.follow": "{name} et segueix", - "notification.follow_request": "{name} ha sol·licitat seguir-te", - "notification.mention": "{name} t'ha mencionat", + "notification.follow_request": "{name} ha sol·licitat de seguir-te", + "notification.mention": "{name} t'ha esmentat", "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en què has votat", "notification.reblog": "{name} t'ha impulsat", @@ -451,7 +451,7 @@ "notifications.column_settings.show": "Mostra a la columna", "notifications.column_settings.sound": "Reprodueix so", "notifications.column_settings.status": "Nous tuts:", - "notifications.column_settings.unread_notifications.category": "Notificacions no llegides", + "notifications.column_settings.unread_notifications.category": "Notificacions pendents de llegir", "notifications.column_settings.unread_notifications.highlight": "Destaca les notificacions no llegides", "notifications.column_settings.update": "Edicions:", "notifications.filter.all": "Totes", @@ -473,25 +473,25 @@ "onboarding.action.back": "Porta'm enrere", "onboarding.actions.back": "Porta'm enrere", "onboarding.actions.go_to_explore": "Mira què és tendència", - "onboarding.actions.go_to_home": "Vés a la teva línia de temps inici", + "onboarding.actions.go_to_home": "Ves a la teva línia de temps", "onboarding.compose.template": "Hola Mastodon!", "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.", - "onboarding.follows.lead": "Tu tens cura de la teva línia de temps inici. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant-los de seguir!", - "onboarding.follows.title": "Popular a Mastodon", + "onboarding.follows.lead": "La teva línia de temps inici només està a les teves mans. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant de seguir-los!:", + "onboarding.follows.title": "Personalitza la pantalla d'inci", "onboarding.share.lead": "Permet que la gent sàpiga com trobar-te a Mastodon!", "onboarding.share.message": "Sóc {username} a #Mastodon! Vine i segueix-me a {url}", "onboarding.share.next_steps": "Possibles passes següents:", "onboarding.share.title": "Comparteix el teu perfil", - "onboarding.start.lead": "El teu nou compte a Mastodon ja està preparat. Aquí tens com en pots treure tot el suc:", + "onboarding.start.lead": "El teu nou compte ja està preparat a Mastodon, la xarxa social on tu—no un algorisme—té tot el control. Aquí tens com en pots treure tot el suc:", "onboarding.start.skip": "Vols saltar-te tota la resta?", "onboarding.start.title": "Llestos!", - "onboarding.steps.follow_people.body": "Tu tens cura de la teva línia de temps. Omple-la de gent interessant.", - "onboarding.steps.follow_people.title": "{count, plural, zero {No segueixes cap persona} one {Segeueixes ona persona} other {Segueixes # persones}}", - "onboarding.steps.publish_status.body": "Saluda el món.", + "onboarding.steps.follow_people.body": "Mastodon va de seguir a gent interessant.", + "onboarding.steps.follow_people.title": "Personalitza la pantalla d'inci", + "onboarding.steps.publish_status.body": "Saluda al món amb text, fotos, vídeos o enquestes {emoji}", "onboarding.steps.publish_status.title": "Fes el teu primer tut", - "onboarding.steps.setup_profile.body": "És més fàcil que altres interaccionin amb tu si tens un perfil complet.", + "onboarding.steps.setup_profile.body": "És més fàcil que altres interactuïn amb tu si tens un perfil complet.", "onboarding.steps.setup_profile.title": "Personalitza el perfil", - "onboarding.steps.share_profile.body": "Permet als teus amics de saber com trobar-te a Mastodon!", + "onboarding.steps.share_profile.body": "Fer saber als teus amics com trobar-te a Mastodon", "onboarding.steps.share_profile.title": "Comparteix el teu perfil", "onboarding.tips.2fa": "Ho sabies? Pots securitzar el teu compte activant l'autenticació de doble factor en la configuració del teu perfil. Funciona amb qualsevol aplicació TOTP de la teva elecció, no cal número de telèfon!", "onboarding.tips.accounts_from_other_servers": "Ho sabies? Com Mastodon és descentralitzat, et pots trobar amb perfils que són a servidors diferents del teu. I, tanmateix, també hi pots interactuar sense cap problema! El servidor és la segona part del seu nom d'usuari!", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 94fc3ed2d0..94d62a4889 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -114,7 +114,7 @@ "column.directory": "Prozkoumat profily", "column.domain_blocks": "Blokované domény", "column.favourites": "Oblíbené", - "column.firehose": "Živé kanály l", + "column.firehose": "Živé kanály", "column.follow_requests": "Žádosti o sledování", "column.home": "Domů", "column.lists": "Seznamy", @@ -585,6 +585,7 @@ "search.quick_action.open_url": "Otevřít URL v Mastodonu", "search.quick_action.status_search": "Příspěvky odpovídající {x}", "search.search_or_paste": "Hledat nebo vložit URL", + "search_popout.full_text_search_disabled_message": "Nedostupné na {domain}.", "search_popout.language_code": "Kód jazyka podle ISO", "search_popout.options": "Možnosti hledání", "search_popout.quick_actions": "Rychlé akce", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 7f8ffbb0db..acd53c28a7 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -143,7 +143,7 @@ "compose_form.hashtag_warning": "Dieser Beitrag wird unter keinem Hashtag sichtbar sein, weil er nicht öffentlich ist. Nur öffentliche Beiträge können nach Hashtags durchsucht werden.", "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Andere können dir folgen und deine Beiträge sehen, die nur für Follower bestimmt sind.", "compose_form.lock_disclaimer.lock": "geschützt", - "compose_form.placeholder": "Was gibt's Neues?", + "compose_form.placeholder": "Was gibt’s Neues?", "compose_form.poll.add_option": "Auswahl", "compose_form.poll.duration": "Umfragedauer", "compose_form.poll.option_placeholder": "{number}. Auswahl", @@ -286,7 +286,7 @@ "footer.source_code": "Quellcode anzeigen", "footer.status": "Status", "generic.saved": "Gespeichert", - "getting_started.heading": "Auf geht's!", + "getting_started.heading": "Auf geht’s!", "hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.none": "ohne {additional}", @@ -360,7 +360,7 @@ "keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen", "keyboard_shortcuts.search": "Suchleiste fokussieren", "keyboard_shortcuts.spoilers": "Feld für Inhaltswarnung anzeigen/ausblenden", - "keyboard_shortcuts.start": "„Auf geht's!“ öffnen", + "keyboard_shortcuts.start": "„Auf geht’s!“ öffnen", "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden", "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden", "keyboard_shortcuts.toot": "Neuen Beitrag erstellen", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 2eace137c1..6b4258a6bc 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -113,6 +113,7 @@ "column.direct": "Privataj mencioj", "column.directory": "Foliumi la profilojn", "column.domain_blocks": "Blokitaj domajnoj", + "column.favourites": "Stelumoj", "column.firehose": "Vivantaj fluoj", "column.follow_requests": "Petoj de sekvado", "column.home": "Hejmo", @@ -136,6 +137,7 @@ "compose.language.search": "Serĉi lingvojn...", "compose.published.body": "Afiŝo publikigita.", "compose.published.open": "Malfermi", + "compose.saved.body": "Afiŝo konservita.", "compose_form.direct_message_warning_learn_more": "Lerni pli", "compose_form.encryption_warning": "La afiŝoj en Mastodon ne estas tutvoje ĉifritaj. Ne kunhavigu tiklajn informojn ĉe Mastodon.", "compose_form.hashtag_warning": "Ĉi tiu afiŝo ne estos listigita en neniu kradvorto ĉar ĝi ne estas publika. Nur publikaj afiŝoj povas esti serĉitaj per kradvortoj.", @@ -180,6 +182,7 @@ "confirmations.mute.explanation": "Tio kaŝos la mesaĝojn de la uzanto kaj la mesaĝojn kiuj mencias rin, sed ri ankoraŭ rajtos vidi viajn mesaĝojn kaj sekvi vin.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", + "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun afiŝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", @@ -548,6 +551,7 @@ "search.search_or_paste": "Serĉu aŭ algluu URL-on", "search_popout.quick_actions": "Rapidaj agoj", "search_popout.recent": "Lastaj serĉoj", + "search_popout.user": "uzanto", "search_results.accounts": "Profiloj", "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 5d32464ba1..5684ec4873 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -379,7 +379,7 @@ "lists.delete": "Borrar lista", "lists.edit": "Editar lista", "lists.edit.submit": "Cambiar título", - "lists.exclusive": "Ocultar estas publicaciones en inicio", + "lists.exclusive": "Ocultar estas publicaciones de inicio", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", "lists.replies_policy.followed": "Cualquier usuario seguido", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 4e8cd70938..c1b067cff8 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -15,13 +15,13 @@ "account.add_or_remove_from_list": "افزودن یا برداشتن از سیاهه‌ها", "account.badges.bot": "روبات", "account.badges.group": "گروه", - "account.block": "مسدود کردن ‎@{name}", - "account.block_domain": "مسدود کردن دامنهٔ {domain}", + "account.block": "انسداد ‎@{name}", + "account.block_domain": "انسداد دامنهٔ {domain}", "account.block_short": "انسداد", - "account.blocked": "مسدود شده", + "account.blocked": "مسدود", "account.browse_more_on_origin_server": "مرور بیش‌تر روی نمایهٔ اصلی", "account.cancel_follow_request": "رد کردن درخواست پی‌گیری", - "account.direct": "خصوصی از @{name} نام ببرید", + "account.direct": "اشارهٔ خصوصی به ‪@{name}‬", "account.disable_notifications": "آگاه کردن من هنگام فرسته‌های ‎@{name} را متوقّف کن", "account.domain_blocked": "دامنه مسدود شد", "account.edit_profile": "ویرایش نمایه", @@ -46,7 +46,7 @@ "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد", "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی پی‌گیرش باشد.", "account.media": "رسانه", - "account.mention": "نام‌بردن از ‎@{name}", + "account.mention": "اشاره به ‎@{name}", "account.moved_to": "{name} نشان داده که حساب جدیدش این است:", "account.mute": "خموشاندن ‎@{name}", "account.mute_notifications_short": "خموشی آگاهی‌ها", @@ -110,7 +110,7 @@ "column.blocks": "کاربران مسدود شده", "column.bookmarks": "نشانک‌ها", "column.community": "خط زمانی محلّی", - "column.direct": "خصوصی نام ببرید", + "column.direct": "اشاره‌های خصوصی", "column.directory": "مرور نمایه‌ها", "column.domain_blocks": "دامنه‌های مسدود شده", "column.favourites": "برگزیده‌ها", @@ -137,6 +137,7 @@ "compose.language.search": "جست‌وجوی زبان‌ها…", "compose.published.body": "فرسته منتشر شد.", "compose.published.open": "گشودن", + "compose.saved.body": "فرسته ذخیره شد.", "compose_form.direct_message_warning_learn_more": "بیشتر بدانید", "compose_form.encryption_warning": "فرسته‌های ماستودون رمزگذاری سرتاسری نشده‌اند. هیچ اطّلاعات حساسی را روی ماستودون هم‌رسانی نکنید.", "compose_form.hashtag_warning": "از آن‌جا که این فرسته عمومی نیست زیر هیچ برچسبی سیاهه نخواهد شد. تنها فرسته‌های عمومی می‌توانند با برچسب جست‌وجو شوند.", @@ -147,7 +148,7 @@ "compose_form.poll.duration": "مدت نظرسنجی", "compose_form.poll.option_placeholder": "گزینهٔ {number}", "compose_form.poll.remove_option": "برداشتن این گزینه", - "compose_form.poll.switch_to_multiple": "تبدیل به نظرسنجی چندگزینه‌ای", + "compose_form.poll.switch_to_multiple": "تغییر نظرسنجی برای اجازه به چندین گزینه", "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.publish": "انتشار", "compose_form.publish_form": "انتشار", @@ -160,8 +161,8 @@ "compose_form.spoiler.unmarked": "افزودن هشدار محتوا", "compose_form.spoiler_placeholder": "هشدارتان را این‌جا بنویسید", "confirmation_modal.cancel": "لغو", - "confirmations.block.block_and_report": "مسدود کردن و گزارش", - "confirmations.block.confirm": "مسدود کردن", + "confirmations.block.block_and_report": "انسداد و گزارش", + "confirmations.block.confirm": "انسداد", "confirmations.block.message": "مطمئنید که می‌خواهید {name} را مسدود کنید؟", "confirmations.cancel_follow_request.confirm": "رد کردن درخواست", "confirmations.cancel_follow_request.message": "مطمئنید که می خواهید درخواست پی‌گیری {name} را لغو کنید؟", @@ -171,7 +172,7 @@ "confirmations.delete_list.message": "مطمئنید می‌خواهید این سیاهه را برای همیشه حذف کنید؟", "confirmations.discard_edit_media.confirm": "دور انداختن", "confirmations.discard_edit_media.message": "تغییرات ذخیره نشده‌ای در توضیحات یا پیش‌نمایش رسانه دارید. همگی نادیده گرفته شوند؟", - "confirmations.domain_block.confirm": "مسدود کردن تمام دامنه", + "confirmations.domain_block.confirm": "انسداد تمام دامنه", "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدود کردن یا خموشاندن چند حساب خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ محتوایی را از این دامنه در خط زمانی عمومی یا آگاهی‌هایتان نخواهید دید. پی‌گیرانتان از این دامنه هم برداشته خواهند شد.", "confirmations.edit.confirm": "ویرایش", "confirmations.edit.message": "در صورت ویرایش، پیامی که در حال نوشتنش بودید از بین خواهد رفت. می‌خواهید ادامه دهید؟", @@ -181,6 +182,7 @@ "confirmations.mute.explanation": "این کار فرسته‌های آن‌ها و فرسته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند فرسته‌های شما را ببینند و شما را پی‌گیری کنند.", "confirmations.mute.message": "مطمئنید می‌خواهید {name} را بخموشانید؟", "confirmations.redraft.confirm": "حذف و بازنویسی", + "confirmations.redraft.message": "مطمئنید که می‌خواهید این فرسته را حذف کنید و از نو بنویسید؟ با این کار تقویت‌ها و پسندهایش از دست رفته و پاسخ‌ها به آن بی‌مرجع می‌شود.", "confirmations.reply.confirm": "پاسخ", "confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. می‌خواهید ادامه دهید؟", "confirmations.unfollow.confirm": "پی‌نگرفتن", @@ -294,16 +296,23 @@ "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} مشارکت کننده} other {{counter} مشارکت کننده}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}} امروز", "hashtag.follow": "پی‌گرفتن برچسب", "hashtag.unfollow": "پی‌نگرفتن برچسب", + "hashtags.and_other": "…و {count, plural, other {# بیش‌تر}}", "home.actions.go_to_explore": "ببینید چه داغ است", "home.actions.go_to_suggestions": "یافتن افراد برای پی‌گیری", "home.column_settings.basic": "پایه‌ای", "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", + "home.explore_prompt.body": "خوراک خانگیتان ترکیبی از فرسته‌ها از برچسب‌هایی که برای پی‌گیری گزیده‌اید، افرادی که پی می‌گیرید و فرسته‌هایی که تقویت می‌کنند را خواهد داشت. اگر خیلی خلوت به نظر می‌رسد،‌ شاید بخواهید:", "home.explore_prompt.title": "این پایگاه خانگیتان در ماستودون است.", "home.hide_announcements": "نهفتن اعلامیه‌ها", + "home.pending_critical_update.body": "لطفاً کارساز ماستودونتان را در نخستین فرصت به‌روز کنید!", + "home.pending_critical_update.link": "دیدن به‌روز رسانی‌ها", + "home.pending_critical_update.title": "به‌روز رسانی امنیتی بحرانی موجود است!", "home.show_announcements": "نمایش اعلامیه‌ها", "interaction_modal.description.favourite": "با حسابی روی ماستودون می‌توانید این فرسته را برگزیده تا نگارنده بداند قدردانش هستید و برای آینده ذخیره‌اش می‌کنید.", "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", @@ -314,6 +323,8 @@ "interaction_modal.no_account_yet": "در ماستودون نیست؟", "interaction_modal.on_another_server": "روی کارسازی دیگر", "interaction_modal.on_this_server": "روی این کارساز", + "interaction_modal.sign_in": "شما در این کارساز وارد نشده‌اید. حسابتان کجا میزبانی شده؟", + "interaction_modal.sign_in_hint": "نکته: میزبانتان، پایگاه وبیست که رویش ثبت‌نام کرده‌اید. اگر به خاطر نمی‌آورید، به رایانامهٔ خوش‌آمد در صندوق ورودیتان بنگرید. همچنین می‌توانید نام کاربری کاملتان (چون ‪@Mastodon@mastodon.social‬) را وارد کنید!", "interaction_modal.title.favourite": "فرسته‌های برگزیدهٔ {name}", "interaction_modal.title.follow": "پیگیری {name}", "interaction_modal.title.reblog": "تقویت فرستهٔ {name}", @@ -330,6 +341,7 @@ "keyboard_shortcuts.direct": "باز کردن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", + "keyboard_shortcuts.favourite": "پسندیدن فرسته", "keyboard_shortcuts.favourites": "گشودن فهرست برگزیده‌ها", "keyboard_shortcuts.federated": "گشودن خط زمانی همگانی", "keyboard_shortcuts.heading": "میان‌برهای صفحه‌کلید", @@ -337,7 +349,7 @@ "keyboard_shortcuts.hotkey": "میان‌بر", "keyboard_shortcuts.legend": "نمایش این نشانه", "keyboard_shortcuts.local": "گشودن خط زمانی محلّی", - "keyboard_shortcuts.mention": "نام‌بردن نویسنده", + "keyboard_shortcuts.mention": "اشاره به نویسنده", "keyboard_shortcuts.muted": "گشودن فهرست کاربران خموش", "keyboard_shortcuts.my_profile": "گشودن نمایه‌تان", "keyboard_shortcuts.notifications": "گشودن ستون آگاهی‌ها", @@ -361,7 +373,7 @@ "lightbox.previous": "قبلی", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", "limited_account_hint.title": "این نمایه از سوی ناظم‌های {domain} پنهان شده.", - "link_preview.author": "بر اساس {name}", + "link_preview.author": "از {name}", "lists.account.add": "افزودن به سیاهه", "lists.account.remove": "برداشتن از سیاهه", "lists.delete": "حذف سیاهه", @@ -402,6 +414,7 @@ "navigation_bar.lists": "سیاهه‌ها", "navigation_bar.logout": "خروج", "navigation_bar.mutes": "کاربران خموشانده", + "navigation_bar.opened_in_classic_interface": "فرسته‌ها، حساب‌ها و دیگر صفحه‌های خاص به طور پیش‌گزیده در میانای وب کلاسیک گشوده می‌شوند.", "navigation_bar.personal": "شخصی", "navigation_bar.pins": "فرسته‌های سنجاق شده", "navigation_bar.preferences": "ترجیحات", @@ -411,11 +424,11 @@ "not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.", "notification.admin.report": "{name}، {target} را گزارش داد", "notification.admin.sign_up": "{name} ثبت نام کرد", - "notification.favourite": "{name} نوشتهٔ شما را پسندید", + "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.follow": "‫{name}‬ پی‌گیرتان شد", - "notification.follow_request": "{name} می‌خواهد پی‌گیر شما باشد", - "notification.mention": "‫{name}‬ از شما نام برد", - "notification.own_poll": "نظرسنجی شما به پایان رسید", + "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", + "notification.mention": "‫{name}‬ به شما اشاره کرد", + "notification.own_poll": "نظرسنجیتان پایان یافت", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", "notification.reblog": "‫{name}‬ فرسته‌تان را تقویت کرد", "notification.status": "{name} چیزی فرستاد", @@ -431,7 +444,7 @@ "notifications.column_settings.filter_bar.show_bar": "نمایش نوار پالایه", "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", - "notifications.column_settings.mention": "نام‌بردن‌ها:", + "notifications.column_settings.mention": "اشاره‌ها:", "notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.push": "آگاهی‌های ارسالی", "notifications.column_settings.reblog": "تقویت‌ها:", @@ -445,7 +458,7 @@ "notifications.filter.boosts": "تقویت‌ها", "notifications.filter.favourites": "برگزیده‌ها", "notifications.filter.follows": "پی‌گرفتگان", - "notifications.filter.mentions": "نام‌بردن‌ها", + "notifications.filter.mentions": "اشاره‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", "notifications.grant_permission": "اعطای مجوز.", @@ -480,10 +493,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "آیا میدانستید؟ شما می‌توانید با رفتن به تنظیمات حساب و فعال کردن احراز هویت دوعاملی، حساب خود را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه شما کار مي‌کند و نیازی به شماره تلفن ندارد!", - "onboarding.tips.accounts_from_other_servers": "آیا می‌دانستید؟ چون ماستودون نامتمرکز است، بعضی از پروفایل‌هایی که با آنها برخورد می‌کنید درواقع روی کارساز هایی متفاوت از کارساز شما میزبانی می‌شوند. و شما همچنان می‌توانید با آنها به شکل راحت و روان تعامل کنید! کارساز آن‌ها در نیمه دوم نام کاربری‌شان است!", - "onboarding.tips.migration": "آیا می‌دانستید؟ اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به یک کارساز ماستودون دیگر مهاجرت کنید. شما حتی می‌توانید کارساز خودتان را میزبانی کنید!", - "onboarding.tips.verification": "آیا می‌دانستید؟ شما می‌توانید حساب خود را با قراردادن پیوندی به نمایه ماستودون‌تان روی وبسایت خود، و اضافه کردن وبسایت‌تان به نمایه خود تایید کنید. بدون نیاز به هیچ کارمزد یا سندی!", + "onboarding.tips.2fa": "آیا می‌دانستید؟ می‌توانید با پریایی هویت‌سنجی دو عاملی در تنظیمات حساب، حسابتان را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه کار کرده و نیازی به شماره تلفن ندارد!", + "onboarding.tips.accounts_from_other_servers": "آیا می‌دانستید؟ از آن‌جا که ماستودون نامتمرکز است، برخی نمایه‌ها که به آن‌ها برمی‌خورید روی کارسازهایی متفاوت از شما میزبانی می‌شوند و باز هم می‌توانید بدون مشکل با آن‌ها تعامل داشته باشید! کارسازشان در نیمه دوم نام کاربریشان است!", + "onboarding.tips.migration": "آیا می‌دانستید؟ اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به کارساز ماستودون دیگری مهاجرت کنید. حتا می‌توانید کارساز خودتان را میزبانی کنید!", + "onboarding.tips.verification": "آیا می‌دانستید؟ می‌توانید حسابتان را با گذاشتن پیوندی به نمایهٔ ماستودونتان روی پایگاه وب خود و افزودن پایگاه وبتان به نمایه‌تان تأیید کنید. بدون نیاز به هیچ کارمزد یا سندی!", "password_confirmation.exceeds_maxlength": "تأییدیه گذرواژه از حداکثر طول گذرواژه بیشتر است", "password_confirmation.mismatching": "تایید گذرواژه با گذرواژه مطابقت ندارد", "picture_in_picture.restore": "برگرداندن", @@ -523,8 +536,9 @@ "relative_time.seconds": "{number} ثانیه", "relative_time.today": "امروز", "reply_indicator.cancel": "لغو", - "report.block": "مسدود کردن", + "report.block": "انسداد", "report.block_explanation": "شما فرسته‌هایشان را نخواهید دید. آن‌ها نمی‌توانند فرسته‌هایتان را ببینند یا شما را پی‌بگیرند. آنها می‌توانند بگویند که مسدود شده‌اند.", + "report.categories.legal": "حقوقی", "report.categories.other": "غیره", "report.categories.spam": "هرزنامه", "report.categories.violation": "محتوا یک یا چند قانون کارساز را نقض می‌کند", @@ -576,12 +590,18 @@ "search.quick_action.open_url": "باز کردن پیوند در ماستودون", "search.quick_action.status_search": "فرسته‌های جور با {x}", "search.search_or_paste": "جست‌وجو یا جایگذاری نشانی", + "search_popout.full_text_search_disabled_message": "روی {domain} موجود نیست.", + "search_popout.language_code": "کد زبان ایزو", + "search_popout.options": "گزینه‌های جست‌وجو", "search_popout.quick_actions": "کنش‌های سریع", "search_popout.recent": "جست‌وجوهای اخیر", + "search_popout.specific_date": "تاریخ مشخص", + "search_popout.user": "کاربر", "search_results.accounts": "نمایه‌ها", "search_results.all": "همه", "search_results.hashtags": "برچسب‌ها", "search_results.nothing_found": "چیزی برای این عبارت جست‌وجو یافت نشد", + "search_results.see_all": "دیدن همه", "search_results.statuses": "فرسته‌ها", "search_results.title": "جست‌وجو برای {q}", "server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کرده‌اند (کاربران فعّال ماهانه)", @@ -597,15 +617,15 @@ "status.admin_account": "گشودن واسط مدیریت برای ‎@{name}", "status.admin_domain": "گشودن واسط مدیریت برای ‎{domain}", "status.admin_status": "گشودن این فرسته در واسط مدیریت", - "status.block": "مسدود کردن ‎@{name}", + "status.block": "انسداد ‎@{name}", "status.bookmark": "نشانک", "status.cancel_reblog_private": "ناتقویت", "status.cannot_reblog": "این فرسته قابل تقویت نیست", "status.copy": "رونوشت از پیوند فرسته", "status.delete": "حذف", "status.detailed_status": "نمایش کامل گفتگو", - "status.direct": "خصوصی به @{name} اشاره کنید", - "status.direct_indicator": "اشاره خصوصی", + "status.direct": "اشارهٔ خصوصی به ‪@{name}‬", + "status.direct_indicator": "اشارهٔ خصوصی", "status.edit": "ویرایش", "status.edited": "ویرایش شده در {date}", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", @@ -620,7 +640,7 @@ "status.media.open": "کلیک برای گشودن", "status.media.show": "کلیک برای نمایش", "status.media_hidden": "رسانهٔ نهفته", - "status.mention": "نام‌بردن از ‎@{name}", + "status.mention": "اشاره به ‎@{name}", "status.more": "بیشتر", "status.mute": "خموشاندن ‎@{name}", "status.mute_conversation": "خموشاندن گفت‌وگو", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 16fca0a288..9471918543 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -20,7 +20,7 @@ "account.block_short": "Bloquer", "account.blocked": "Bloqué·e", "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", - "account.cancel_follow_request": "Retirer la demande d’abonnement", + "account.cancel_follow_request": "Annuler le suivi", "account.direct": "Mention privée @{name}", "account.disable_notifications": "Ne plus me notifier quand @{name} publie quelque chose", "account.domain_blocked": "Domaine bloqué", @@ -50,7 +50,7 @@ "account.moved_to": "{name} a indiqué que son nouveau compte est maintenant :", "account.mute": "Masquer @{name}", "account.mute_notifications_short": "Désactiver les alertes", - "account.mute_short": "Masquer", + "account.mute_short": "Mettre en sourdine", "account.muted": "Masqué·e", "account.no_bio": "Aucune description fournie.", "account.open_original_page": "Ouvrir la page d'origine", @@ -108,7 +108,7 @@ "closed_registrations_modal.title": "Inscription sur Mastodon", "column.about": "À propos", "column.blocks": "Comptes bloqués", - "column.bookmarks": "Signets", + "column.bookmarks": "Marque-pages", "column.community": "Fil public local", "column.direct": "Mentions privées", "column.directory": "Parcourir les profils", @@ -149,9 +149,9 @@ "compose_form.poll.option_placeholder": "Choix {number}", "compose_form.poll.remove_option": "Supprimer ce choix", "compose_form.poll.switch_to_multiple": "Changer le sondage pour autoriser plusieurs choix", - "compose_form.poll.switch_to_single": "Changer le sondage pour autoriser qu'un seul choix", + "compose_form.poll.switch_to_single": "Modifier le sondage pour autoriser qu'un seul choix", "compose_form.publish": "Publier", - "compose_form.publish_form": "Publier", + "compose_form.publish_form": "Nouvelle publication", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Enregistrer les modifications", "compose_form.sensitive.hide": "{count, plural, one {Marquer le média comme sensible} other {Marquer les médias comme sensibles}}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index fa202a5e86..ea1ce59e84 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -683,9 +683,9 @@ "time_remaining.moments": "Cha doir e ach greiseag", "time_remaining.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air fhàgail", "timeline_hint.remote_resource_not_displayed": "Cha dèid {resource} o fhrithealaichean eile a shealltainn.", - "timeline_hint.resources.followers": "Luchd-leantainn", - "timeline_hint.resources.follows": "A’ leantainn", - "timeline_hint.resources.statuses": "Postaichean nas sine", + "timeline_hint.resources.followers": "luchd-leantainn", + "timeline_hint.resources.follows": "an fheadhainn gan leantainn", + "timeline_hint.resources.statuses": "postaichean nas sine", "trends.counter_by_accounts": "{count, plural, one {{counter} neach} two {{counter} neach} few {{counter} daoine} other {{counter} duine}} {days, plural, one {san {days} latha} two {san {days} latha} few {sna {days} làithean} other {sna {days} latha}} seo chaidh", "trends.trending_now": "A’ treandadh an-dràsta", "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 2919c74b48..b5d9e50f65 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -135,7 +135,7 @@ "community.column_settings.remote_only": "Só remoto", "compose.language.change": "Elixe o idioma", "compose.language.search": "Buscar idiomas...", - "compose.published.body": "Publicación publicada.", + "compose.published.body": "Mensaxe publicada.", "compose.published.open": "Abrir", "compose.saved.body": "Publicación gardada.", "compose_form.direct_message_warning_learn_more": "Saber máis", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 37c3990e49..5b37324f7d 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -487,7 +487,7 @@ "onboarding.start.title": "해내셨군요!", "onboarding.steps.follow_people.body": "흥미로운 사람들을 팔로우하는 것은 마스토돈의 전부입니다.", "onboarding.steps.follow_people.title": "내게 맞는 홈 피드 꾸미기", - "onboarding.steps.publish_status.body": "글, 사진, 영상, 투표 또는 {emoji}와 함께 세상에 인사해보세요.", + "onboarding.steps.publish_status.body": "글, 사진, 영상, 설문 또는 {emoji}와 함께 세상에 인사해보세요.", "onboarding.steps.publish_status.title": "첫번째 게시물 쓰기", "onboarding.steps.setup_profile.body": "의미있는 프로필을 작성해 상호작용을 늘려보세요.", "onboarding.steps.setup_profile.title": "프로필 꾸미기", @@ -695,7 +695,7 @@ "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", - "upload_error.poll": "파일 업로드는 투표와 함께 쓸 수 없습니다.", + "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없어요.", "upload_form.audio_description": "청각 장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명", "upload_form.description_missing": "설명이 추가되지 않음", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 4bf1979b9d..87a2af4f20 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -379,7 +379,7 @@ "lists.delete": "Lijst verwijderen", "lists.edit": "Lijst bewerken", "lists.edit.submit": "Titel veranderen", - "lists.exclusive": "Verberg deze berichten op je startpagina", + "lists.exclusive": "Verberg deze berichten op je starttijdlijn", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", "lists.replies_policy.followed": "Elke gevolgde gebruiker", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a670fd2e4f..449fdfb1a1 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -310,6 +310,7 @@ "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", + "home.pending_critical_update.body": "Vennligst oppdater Mastodon-serveren din så snart som mulig!", "home.pending_critical_update.link": "Se oppdateringer", "home.pending_critical_update.title": "Kritisk sikkerhetsoppdatering er tilgjengelig!", "home.show_announcements": "Vis kunngjøring", @@ -413,6 +414,7 @@ "navigation_bar.lists": "Lister", "navigation_bar.logout": "Logg ut", "navigation_bar.mutes": "Dempede brukere", + "navigation_bar.opened_in_classic_interface": "Innlegg, kontoer og andre spesifikke sider åpnes som standard i det klassiske webgrensesnittet.", "navigation_bar.personal": "Personlig", "navigation_bar.pins": "Festede innlegg", "navigation_bar.preferences": "Innstillinger", @@ -588,6 +590,7 @@ "search.quick_action.open_url": "Åpne URL i Mastodon", "search.quick_action.status_search": "Innlegg som samsvarer med {x}", "search.search_or_paste": "Søk eller lim inn URL", + "search_popout.full_text_search_disabled_message": "Ikke tilgjengelig på {domain}.", "search_popout.language_code": "ISO språkkode", "search_popout.options": "Alternativer for søk", "search_popout.quick_actions": "Hurtighandlinger", @@ -598,6 +601,7 @@ "search_results.all": "Alle", "search_results.hashtags": "Emneknagger", "search_results.nothing_found": "Fant ikke noe for disse søkeordene", + "search_results.see_all": "Se alle", "search_results.statuses": "Innlegg", "search_results.title": "Søk etter {q}", "server_banner.about_active_users": "Personer som har brukt denne serveren i løpet av de siste 30 dagene (aktive brukere månedlig)", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 6c08f899a4..bd1252b47f 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -47,7 +47,7 @@ "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", - "account.moved_to": "{name} uvádza, že jeho/jej nový účet je:", + "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", "account.mute": "Nevšímaj si @{name}", "account.mute_notifications_short": "Stíš oboznámenia", "account.mute_short": "Nevšímaj si", @@ -303,6 +303,7 @@ "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", + "home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.", "home.hide_announcements": "Skry oboznámenia", "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", "home.pending_critical_update.link": "Pozri aktualizácie", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 5c2417274a..3a7e75b912 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -341,8 +341,8 @@ "keyboard_shortcuts.direct": "mở mục nhắn riêng", "keyboard_shortcuts.down": "di chuyển xuống dưới danh sách", "keyboard_shortcuts.enter": "viết tút mới", - "keyboard_shortcuts.favourite": "Thích tút", - "keyboard_shortcuts.favourites": "Mở lượt thích", + "keyboard_shortcuts.favourite": "thích tút", + "keyboard_shortcuts.favourites": "mở lượt thích", "keyboard_shortcuts.federated": "mở mạng liên hợp", "keyboard_shortcuts.heading": "Danh sách phím tắt", "keyboard_shortcuts.home": "mở trang chính", @@ -557,7 +557,7 @@ "report.reasons.dislike": "Tôi không thích nó", "report.reasons.dislike_description": "Đó không phải là thứ gì mà bạn muốn thấy", "report.reasons.legal": "Vi phạm pháp luật", - "report.reasons.legal_description": "Bạn tin rằng nó vi phạm pháp luật ở nơi đặt máy chủ hoặc nước bạn", + "report.reasons.legal_description": "Vi phạm pháp luật ở nơi đặt máy chủ hoặc nước bạn", "report.reasons.other": "Một lý do khác", "report.reasons.other_description": "Vấn đề không nằm trong những mục trên", "report.reasons.spam": "Đây là spam", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 51c8e3f374..c311b5ae33 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -137,7 +137,7 @@ "compose.language.search": "搜索语言...", "compose.published.body": "嘟文已发布。", "compose.published.open": "打开", - "compose.saved.body": "帖子已保存。", + "compose.saved.body": "嘟文已保存。", "compose_form.direct_message_warning_learn_more": "详细了解", "compose_form.encryption_warning": "Mastodon 上的嘟文未经端到端加密。请勿在 Mastodon 上分享敏感信息。", "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。", @@ -199,7 +199,7 @@ "directory.recently_active": "最近活跃", "disabled_account_banner.account_settings": "账号设置", "disabled_account_banner.text": "您的账号 {disabledAccount} 目前已被禁用。", - "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公共嘟文。", + "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公开嘟文。", "dismissable_banner.dismiss": "忽略", "dismissable_banner.explore_links": "这些新闻故事正被本站和分布式网络上其他站点的用户谈论。", "dismissable_banner.explore_statuses": "这些是目前在社交网络上引起关注的嘟文。嘟文的喜欢和转嘟次数越多,排名越高。", @@ -414,7 +414,7 @@ "navigation_bar.lists": "列表", "navigation_bar.logout": "退出登录", "navigation_bar.mutes": "已隐藏的用户", - "navigation_bar.opened_in_classic_interface": "帖子、账户和其他特定页面默认在经典网页界面中打开。", + "navigation_bar.opened_in_classic_interface": "嘟文、账户和其他特定页面默认在经典网页界面中打开。", "navigation_bar.personal": "个人", "navigation_bar.pins": "置顶嘟文", "navigation_bar.preferences": "首选项", @@ -473,7 +473,7 @@ "onboarding.action.back": "带我返回", "onboarding.actions.back": "带我返回", "onboarding.actions.go_to_explore": "看看有什么新鲜事", - "onboarding.actions.go_to_home": "转到主页订阅流", + "onboarding.actions.go_to_home": "转到主页动态", "onboarding.compose.template": "你好 #Mastodon!", "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。您可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!", @@ -575,7 +575,7 @@ "report.thanks.title": "不想看到这个内容?", "report.thanks.title_actionable": "感谢提交举报,我们将会进行处理。", "report.unfollow": "取消关注 @{name}", - "report.unfollow_explanation": "你正在关注此账户。如果要想在你的主页上不再看到他们的帖子,取消对他们的关注即可。", + "report.unfollow_explanation": "你正在关注此账户。如果不想继续在主页看到他们的嘟文,取消对他们的关注即可。", "report_notification.attached_statuses": "附上 {count} 条嘟文", "report_notification.categories.legal": "法律义务", "report_notification.categories.other": "其他", @@ -588,7 +588,7 @@ "search.quick_action.go_to_account": "前往 {x} 个人资料", "search.quick_action.go_to_hashtag": "前往标签 {x}", "search.quick_action.open_url": "在 Mastodon 中打开网址", - "search.quick_action.status_search": "匹配 {x} 的帖子", + "search.quick_action.status_search": "匹配 {x} 的嘟文", "search.search_or_paste": "搜索或输入网址", "search_popout.full_text_search_disabled_message": "在 {domain} 不可用", "search_popout.language_code": "ISO语言代码", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 8725c35e89..e5de8daa9d 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -600,6 +600,7 @@ "search_results.all": "全部", "search_results.hashtags": "標籤", "search_results.nothing_found": "找不到與搜尋字詞相關的內容", + "search_results.see_all": "顯示全部", "search_results.statuses": "文章", "search_results.title": "搜尋 {q}", "server_banner.about_active_users": "在最近 30 天內內使用此伺服器的人 (月活躍用戶)", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 694bdcc9c5..2cdf87d8fd 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -14,7 +14,7 @@ ca: following: Seguint instance_actor_flash: Aquest compte és un actor virtual usat per a representar el mateix servidor i no cap usuari individual. Es fa servir per a federar i no s'hauria d'esborrar. last_active: última activitat - link_verified_on: La propietat d'aquest enllaç s'ha verificat el %{date} + link_verified_on: La propietat d'aquest enllaç va quedar verificada el %{date} nothing_here: No hi ha res aquí! pin_errors: following: Has d'estar seguint la persona que vulguis avalar @@ -1464,7 +1464,7 @@ ca: action: Respon body: "%{name} t'ha mencionat en:" subject: "%{name} t'ha mencionat" - title: Menció nova + title: Nova menció poll: subject: Ha finalitzat l'enquesta de %{name} reblog: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 95c980a6d4..03ec9708d5 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -315,6 +315,7 @@ cs: unpublish: Skrýt unpublished_msg: Zveřejněné oznámení bylo úspěšně skryto! updated_msg: Oznámení bylo úspěšně aktualizováno! + critical_update_pending: Čeká se na kritickou aktualizaci custom_emojis: assign_category: Přiřadit kategorii by_domain: Doména @@ -396,6 +397,15 @@ cs: undo: Zakázat federaci s doménou domain_blocks: add_new: Přidat novou blokaci domény + confirm_suspension: + cancel: Zrušit + confirm: Pozastavit + permanent_action: Zrušení pozastavení neobnoví žádná data ani vztah. + preamble_html: Chystáte se pozastavit %{domain} a jeho poddomény. + remove_all_data: Tímto odstraníte z vašeho serveru všechen obsah, média a profilové údaje účtů této domény. + stop_communication: Váš server přestane komunikovat s těmito servery. + title: Potvrďte blokování domény %{domain} + undo_relationships: Toto vrátí jakýkoliv vztah sledování mezi účty na těchto serverech a vaším. created_msg: Blokace domény se právě vyřizuje destroyed_msg: Blokace domény byla odvolána domain: Doména @@ -759,6 +769,9 @@ cs: branding: preamble: Značka vašeho serveru jej odlišuje od ostatních serverů v síti. Tyto informace se mohou zobrazovat v různých prostředích, například ve webovém rozhraní Mastodonu, v nativních aplikacích, v náhledech odkazů na jiných webových stránkách a v aplikacích pro zasílání zpráv atd. Z tohoto důvodu je nejlepší, aby tyto informace byly jasné, krátké a stručné. title: Značka + captcha_enabled: + desc_html: Toto spoléhá na externí skripty z hCaptcha, což může být budit obavy o bezpečnost a soukromí. Navíc to může způsobit, že proces registrace bude pro některé osoby (zejména se zdravotním postižením) hůře přístupný. Z těchto důvodů zvažte alternativní přístup, jako je schvalování registrace nebo pozvánky. + title: Vyžadovat po nových uživatelích, aby vyřešili CAPTCHU pro potvrzení jejich účtu content_retention: preamble: Určuje, jak je obsah generovaný uživatelem uložen v Mastodonu. title: Uchovávání obsahu @@ -786,9 +799,24 @@ cs: approved: Pro registraci je vyžadováno schválení none: Nikdo se nemůže registrovat open: Kdokoliv se může registrovat + security: + authorized_fetch: Vyžadovat autentizaci od federovaných serverů + authorized_fetch_overridden_hint: Momentálně nemůžete změnit toto nastavení, protože je přepsáno proměnnou prostředí. + title: Nastavení serveru site_uploads: delete: Odstranit nahraný soubor destroyed_msg: Upload stránky byl úspěšně smazán! + software_updates: + critical_update: Kritické — aktualizujte, prosím, co nejdříve + documentation_link: Zjistit více + release_notes: Poznámky k vydání + title: Dostupné aktualizace + type: Typ + types: + major: Hlavní vydání + minor: Menší vydání + patch: Záplatové vydání — opravy chyb a rychle aplikovatelné změny + version: Verze statuses: account: Autor application: Aplikace @@ -829,6 +857,20 @@ cs: system_checks: database_schema_check: message_html: Na spuštění čekají databázové migrace. Nechte je prosím proběhnout pro zajištění očekávaného chování aplikace + elasticsearch_health_red: + message_html: Elasticsearch cluster je nezdravý (červený stav), vyhledávací funkce jsou nedostupné + elasticsearch_health_yellow: + message_html: Elasticsearch cluster je nezdravý (žlutý stav), možná budete chtít prozkoumat důvod + elasticsearch_index_mismatch: + message_html: Mapování indexu Elasticsearch jsou zastaralá. Prosím spusťte tootctl search deploy --only=%{value} + elasticsearch_preset: + action: Prohlédnout dokumentaci + message_html: Váš Elasticsearch cluster má více než jeden node, ale Mastodon není nakonfigurován pro jejich používání. + elasticsearch_preset_single_node: + action: Zobrazit dokumentaci + message_html: Váš Elasticsearch cluster má pouze jeden uzel, ES_PRESET by měl být nastaven na single_node_cluster. + elasticsearch_reset_chewy: + message_html: Váš system index v Elasticsearch je kvůli změně nastavení zastaralý. Pro aktualizaci prosím spusťte tootctl search deploy --reset-chewy. elasticsearch_running_check: message_html: Nelze se připojit k Elasticsearch. Prosím zkontrolujte, že běží, nebo vypněte fulltextové vyhledávání elasticsearch_version_check: @@ -839,6 +881,12 @@ cs: message_html: Nedefinovali jste žádná pravidla serveru. sidekiq_process_check: message_html: Pro %{value} frontu/fronty neběží žádný Sidekiq proces. Zkontrolujte prosím svou Sidekiq konfiguraci + software_version_critical_check: + action: Zobrazit dostupné aktualizace + message_html: K dispozici je kritická aktualizace Mastodonu, prosím aktualizujte co nejrychleji. + software_version_patch_check: + action: Zobrazit dostupné aktualizace + message_html: Je dostupná opravná aktualizace Mastodonu. upload_check_privacy_error: action: Pro více informací se podívejte zde message_html: "Váš webový server je špatně nakonfigurován. Soukromí vašich uživatelů je ohroženo." @@ -960,6 +1008,9 @@ cs: body: 'Uživatel %{target} se odvolává proti rozhodnutí moderátora %{action_taken_by} z %{date}, kterým bylo %{type}. Napsal:' next_steps: Můžete schválit odvolání pro vrácení rozhodnutí moderátora, nebo to ignorovat. subject: Uživatel %{username} se odvolává proti rozhodnutí moderátora na %{instance} + new_critical_software_updates: + body: Byly vydány nové kritické verze Mastodonu, možná budete chtít aktualizovat co nejdříve! + subject: Pro %{instance} jsou dostupné kritické aktualizace Mastodonu! new_pending_account: body: Detaily nového účtu jsou uvedeny níže. Tuto žádost můžete schválit nebo zamítnout. subject: Nový účet na serveru %{instance} čekající na posouzení (%{username}) @@ -967,6 +1018,9 @@ cs: body: Uživatel %{reporter} nahlásil uživatele %{target} body_remote: Někdo z domény %{domain} nahlásil uživatele %{target} subject: Nové hlášení pro %{instance} (#%{id}) + new_software_updates: + body: Byly vydány nové verze Mastodonu, možná budete chtít aktualizovat! + subject: Pro %{instance} jsou dostupné nové verze Mastodonu! new_trends: body: 'Následující položky vyžadují posouzení, než mohou být zobrazeny veřejně:' new_trending_links: @@ -1000,6 +1054,7 @@ cs: notification_preferences: Změnit předvolby e-mailů salutation: "%{name}," settings: 'Změnit předvolby e-mailů: %{link}' + unsubscribe: Přestat odebírat view: 'Zobrazit:' view_profile: Zobrazit profil view_status: Zobrazit příspěvek @@ -1013,6 +1068,10 @@ cs: your_token: Váš přístupový token auth: apply_for_account: Požádat o účet + captcha_confirmation: + help_html: Pokud máte problémy s řešením CAPTCHA, můžete se s námi spojit prostřednictvím %{email} a můžeme vám pomoci. + hint_html: Ještě jedna věc! Musíme potvrdit, že jste člověk (to proto, abychom drželi stranou spam!). Vyřešte CAPTCHA níže a klikněte na "Pokračovat". + title: Bezpečnostní kontrola confirmations: wrong_email_hint: Pokud není e-mail správný, můžete si ho změnit v nastavení účtu. delete_account: Odstranit účet @@ -1049,8 +1108,11 @@ cs: rules: accept: Přijmout back: Zpět + invited_by: 'Můžete se připojit k %{domain} díky pozvánce, kterou jste obdrželi od:' preamble: Tohle nastavují a prosazují moderátoři %{domain}. + preamble_invited: Než budete pokračovat, vezměte prosím v úvahu základní pravidla stanovená moderátory %{domain}. title: Některá základní pravidla. + title_invited: Byl/a jsi pozván/a. security: Zabezpečení set_new_password: Nastavit nové heslo setup: @@ -1151,6 +1213,10 @@ cs: your_appeal_rejected: Vaše odvolání bylo zamítnuto domain_validator: invalid_domain: není platné doménové jméno + edit_profile: + basic_information: Základní informace + hint_html: "Nastavte si, co lidé uvidí na vašem veřejném profilu a vedle vašich příspěvků. Ostatní lidé vás budou spíše sledovat a komunikovat s vámi, když budete mít vyplněný profil a profilový obrázek." + other: Další errors: '400': Žádost, kterou jste odeslali, byla neplatná nebo poškozená. '403': Nejste oprávněni tuto stránku zobrazit. @@ -1306,6 +1372,7 @@ cs: bookmarks: Záložky domain_blocking: Seznam blokovaných domén following: Seznam sledovaných + lists: Seznamy muting: Seznam ignorovaných upload: Nahrát invites: @@ -1461,12 +1528,22 @@ cs: expired: Anketa již skončila invalid_choice: Zvolená možnost hlasování neexistuje over_character_limit: nesmí být žádná delší než %{max} znaků + self_vote: Nemůžete hlasovat ve svých vlastních anketách too_few_options: musí mít více než jednu položku too_many_options: nesmí obsahovat více než %{max} položek preferences: other: Ostatní posting_defaults: Výchozí možnosti psaní public_timelines: Veřejné časové osy + privacy: + hint_html: "Nastavte si, jak chcete, aby šlo váš profil a vaše příspěvky nalézt. Řada funkcí v Mastodonu vám může po zapnutí pomoci získat širší publikum. Věnujte chvíli kontrole těchto nastavení, aby vyhovovala vašim potřebám." + privacy: Soukromí + privacy_hint_html: Nastavte si, kolik toho chcete zveřejnit ve prospěch ostatních. Lidé objevují zajímavé profily a skvělé aplikace procházením sledovaných ostatních lidí i tím, že vidí, z jakých aplikací ostatní posílají příspěvky, vy se však můžete rozhodnout tyto údaje skrýt. + reach: Dosah + reach_hint_html: Nastavte si, zda chcete být objeveni a sledováni novými lidmi. Chcete, aby se vaše příspěvky objevovaly na obrazovce Objevit? Chcete, aby vás další lidé viděli ve svých doporučeních ke sledování? Chcete přijímat všechny nové sledující automaticky nebo mít podrobnou kontrolu nad každým z nich? + search: Vyhledávání + search_hint_html: Mějte pod kontrolou, jak chcete být nalezeni. Chcete, aby vás lidé našli podle toho, o čem jste veřejně psali? Chcete, aby lidé mimo Mastodon mohli nalézt váš profil při prohledávání webu? Mějte na vědomí, že úplné vyřazení ze všech vyhledávačů nelze u veřejných informací garantovat. + title: Soukromí a dosah privacy_policy: title: Zásady ochrany osobních údajů reactions: @@ -1773,7 +1850,10 @@ cs: seamless_external_login: Jste přihlášeni přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná. signed_in_as: 'Přihlášeni jako:' verification: + here_is_how: Jak na to + instructions_html: Zkopírujte a vložte níže uvedený kód do HTML vašeho webu. Poté přidejte adresu vašeho webu do jednoho z extra políček na vašem profilu na záložce "Upravit profil" a uložte změny. verification: Ověření + verified_links: Vaše ověřené odkazy webauthn_credentials: add: Přidat nový bezpečnostní klíč create: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index ec6dc75396..a975457cf9 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1866,6 +1866,7 @@ cy: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" translation: errors: quota_exceeded: Aethpwyd y tu hwnt i gwota defnydd y gweinydd cyfan ar gyfer y gwasanaeth cyfieithu. diff --git a/config/locales/de.yml b/config/locales/de.yml index da92f8fa27..69151b2e70 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1829,7 +1829,7 @@ de: signed_in_as: 'Angemeldet als:' verification: extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. - here_is_how: So funktioniert's + here_is_how: So funktioniert’s hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an." instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. verification: Verifizierung diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 0eb1479aa1..085507f8bf 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -64,7 +64,7 @@ fa: review_permissions: بازبینی اجازه‌ها title: نیاز به اجازه دادن show: - title: این کد مجوز را کپی کرده و در برنامه وارد کنید. + title: این کد تأیید را رونوشت کرده و در برنامه بگذارید. authorized_applications: buttons: revoke: فسخ @@ -127,6 +127,7 @@ fa: bookmarks: نشانک‌ها conversations: گفت‌وگوها crypto: رمزگذاری سرتاسری + favourites: برگزیده‌ها filters: پالایه‌ها follow: پی‌گیری، خموشی و مسدودی‌ها follows: پی‌گرفتگان @@ -155,6 +156,9 @@ fa: admin:read:reports: خواندن اطّلاعات حساس از همهٔ گزارش‌ها و حساب‌های گزارش‌شده admin:write: تغییر تمام داده‌ها روی کارساز admin:write:accounts: انجام کنش مدیریتی روی حساب‌ها + admin:write:domain_allows: انجام کنش مدیریتی روی اجازه‌های دامنه + admin:write:domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنه + admin:write:email_domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنهٔ رایانامه admin:write:ip_blocks: انجام کنش مدیریتی روی مسدودسازی های IP admin:write:reports: انجام کنش مدیریتی روی گزارش‌ها crypto: از رمزگذاری سرتاسر استفاده کنید @@ -164,6 +168,7 @@ fa: read:accounts: دیدن اطّلاعات حساب read:blocks: دیدن مسدودهایتان read:bookmarks: دیدن نشانک‌هایتان + read:favourites: دیدن برگزیده‌هایتان read:filters: دیدن پالایه‌هایتان read:follows: دیدن پی‌گیری‌هایتان read:lists: دیدن سیاهه‌هایتان @@ -177,6 +182,7 @@ fa: write:blocks: انسداد حساب‌ها و دامنه‌ها write:bookmarks: نشانک‌گذاری وضعیت‌ها write:conversations: مکالمات را بی‌صدا و حذف کنید + write:favourites: فرسته‌های برگزیده write:filters: ایحاد پالایش‌ها write:follows: پی‌گیری افراد write:lists: ایجاد سیاهه‌ها diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f5ba91e1f9..e2138e0aeb 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -31,7 +31,7 @@ fa: created_msg: یادداشت مدیر با موفقیت ساخته شد! destroyed_msg: یادداشت نظارتی با موفقیت نابود شد! accounts: - add_email_domain_block: مسدود کردن دامنهٔ رایانامه + add_email_domain_block: انسداد دامنهٔ رایانامه approve: پذیرفتن approved_msg: کارهٔ ثبت‌نام %{username} با موفقیت تأیید شد are_you_sure: مطمئنید؟ @@ -309,6 +309,7 @@ fa: unpublish: عدم انتشار unpublished_msg: انتشار اعلامیه با موفقیت لغو شد! updated_msg: اعلامیه با موفقیت به‌روز شد! + critical_update_pending: به‌روز رسانی‌های بحرانی منتظرند custom_emojis: assign_category: تعیین دسته by_domain: دامنه @@ -387,7 +388,7 @@ fa: confirm: تعلیق title: تأیید انسداد دامنه برای %{domain} created_msg: مسدودسازی دامنه در حال پردازش است - destroyed_msg: مسدودکردن دامنه واگردانده شد + destroyed_msg: انسداد دامنه واگردانده شد domain: دامنه edit: ویرایش مسدودسازی دامنه existing_domain_block_html: شما پیش‌تر محدودیت‌های سخت‌تری روی %{name} اعمال کرده‌اید، و باید نخست مسدودسازی را لغو کنید. @@ -432,8 +433,16 @@ fa: not_permitted: مجاز نیست title: دامنه‌های رایانامهٔ مسدود شده export_domain_allows: + new: + title: درون‌ریزی اجازه‌های دامنه no_file: هیچ پرونده‌ای گزیده نشده export_domain_blocks: + import: + existing_relationships_warning: رابطه‌های پی‌گیری موجود + private_comment_template: درون‌ریخته از %{source} در %{date} + title: درون‌ریزی انسدادهای دامنه + new: + title: درون‌ریزی انسدادهای دامنه no_file: هیچ پرونده‌ای گزیده نشده follow_recommendations: description_html: "پیشنهادات پیگیری به کاربران جدید کک می‌کند تا سریع‌تر محتوای جالب را پیدا کنند. زمانی که کاربری هنوز به اندازه کافی با دیگران تعامل نداشته است تا پیشنهادات پیگیری شخصی‌سازی‌شده دریافت کند، این حساب‌ها را به جای آن فهرست مشاهده خواهد کرد. این حساب‌ها به صورت روزانه و در ترکیب با بیشتری تعاملات و بالاترین دنبال‌کنندگان محلی برای یک زبان مشخص بازمحاسبه می‌شوند." @@ -445,6 +454,7 @@ fa: unsuppress: بازگردانی پیشنهادهای پی‌گیری instances: availability: + failure_threshold_reached: در %{date} به آستانهٔ شکست رسید. no_failures_recorded: هیچ شکستی در سابقه نیست. title: موجود بودن back_to_all: همه @@ -473,6 +483,7 @@ fa: delivery: all: همه clear: پاک کردن خطاهای تحول محتوا + failing: شکست خوردن restart: بازراه‌اندازی تحویل محتوا stop: متوقف‌کردن تحویل محتوا unavailable: ناموجود @@ -618,8 +629,10 @@ fa: delete_user_data: حذف داده‌های کاربر invite_users: دعوت کاربران manage_announcements: مدیریت اعلامیه‌ها + manage_appeals: مدیریت درخواست‌های بازنگری manage_blocks: مدیریت مسدودی‌ها manage_custom_emojis: مدیریت ایموجی‌های سفارشی + manage_federation: مدیریت خودگردانی manage_invites: مدیریت دعوت‌ها manage_reports: مدیریت گزارش‌ها manage_roles: مدیریت نقش‌ها @@ -648,6 +661,8 @@ fa: appearance: preamble: سفارشی‌سازی رابطس وب ماستودون. title: ظاهر + default_noindex: + title: درخواست خروج از اندیس‌گذاری پیش‌گزیدهٔ موتور جست‌وجو discovery: follow_recommendations: پیروی از پیشنهادها profile_directory: شاخهٔ نمایه @@ -667,9 +682,20 @@ fa: approved: ثبت نام نیازمند تأیید مدیران است none: کسی نمی‌تواند ثبت نام کند open: همه می‌توانند ثبت نام کنند + title: تنظیمات کارساز site_uploads: delete: پرونده بارگذاری شده را پاک کنید destroyed_msg: بارگذاری پایگاه با موفقیت حذف شد! + software_updates: + critical_update: بحرانی — لطفاً به سرعت به‌روز کنید + documentation_link: بیش‌تر بیاموزید + release_notes: یادداشت‌های انتشار + title: به‌روز رسانی‌های موجود + type: گونه + types: + major: ارائه بزرگ + minor: ارائه کوچک + version: نگارش statuses: account: نگارنده application: برنامه @@ -710,11 +736,24 @@ fa: system_checks: database_schema_check: message_html: تعداد مهاجرت پایگاه داده در انتظار انجام هستند. لطفا آن‌ها را اجرا کنید تا اطمینان یابید که برنامه مطابق انتظار رفتار خواهد کرد + elasticsearch_preset: + action: دیدن مستندات + elasticsearch_preset_single_node: + action: دیدن مستندات + elasticsearch_version_check: + message_html: 'نگارش الستیک‌سرچ ناسازگار: %{value}' + version_comparison: الستیک‌سرچ %{running_version} در حال اجراست، حال که %{required_version} لازم است rules_check: action: مدیریت قانون‌های کارساز message_html: هیچ قانون کارسازی تعریف نکرده‌اید. sidekiq_process_check: message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید + upload_check_privacy_error: + action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید + message_html: "کارساز وبتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است." + upload_check_privacy_error_object_storage: + action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید + message_html: "ذخیره‌سازتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است." tags: review: وضعیت بازبینی updated_msg: تنظیمات برچسب‌ها با موفقیت به‌روز شد @@ -858,6 +897,7 @@ fa: migrate_account: نقل مکان به یک حساب دیگر migrate_account_html: اگر می‌خواهید این حساب را به حساب دیگری منتقل کنید، این‌جا را کلیک کنید. or_log_in_with: یا ورود به وسیلهٔ + privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفته‌ام progress: confirm: تأیید رایانامه details: جزئیات شما @@ -967,6 +1007,7 @@ fa: invalid_domain: نام دامین معتبر نیست edit_profile: basic_information: اطلاعات پایه + hint_html: "شخصی‌سازی آن چه مردم روی نمایهٔ عمومیتان و کنار فرسته‌هایتان می‌بینند. هنگامی که نمایه‌ای کامل و یک تصویر نمایه داشته باشید،‌ احتمال پی‌گیری متقابل و تعامل با شما بیش‌تر است." other: سایر errors: '400': درخواستی که فرستادید نامعتبر یا اشتباه بود. @@ -1019,6 +1060,7 @@ fa: statuses: فرسته‌های جدا title: ویرایش پالایه errors: + deprecated_api_multiple_keywords: این پارامترها نمی‌توانند از این برنامه تغییر یابند؛ چرا که به بیش از یک کلیدواژهٔ پالایه اعمال می‌شود. از برنامه‌ای جدیدتر یا میانای وب استفاده کنید. invalid_context: زمینه‌ای موجود نیست یا نامعتبر است index: delete: پاک‌کردن @@ -1045,6 +1087,9 @@ fa: title: فرسته‌های پالوده generic: all: همه + all_matching_items_selected_html: + one: "%{count} مورد مطابق با جست‌وجویتان گزیده شده." + other: "%{count} مورد مطابق با جست‌وجویتان گزیده شدند." cancel: لغو changes_saved_msg: تغییرات با موفقیت ذخیره شدند! confirm: تأیید @@ -1107,6 +1152,9 @@ fa: expires_at: تاریخ انقضا uses: استفاده‌ها title: دعوت دیگران + lists: + errors: + limit: به بیشینهٔ تعداد سیاهه‌ها رسیدید login_activities: authentication_methods: otp: کارهٔ تأیید هویت دوعاملی @@ -1121,6 +1169,9 @@ fa: mail_subscriptions: unsubscribe: complete: لغو اشتراک شد + emails: + notification_emails: + mention: رایانامه‌های آگاهی اشاره title: لغو اشتراک media_attachments: validations: @@ -1187,9 +1238,9 @@ fa: title: درخواست پیگیری تازه mention: action: پاسخ - body: "%{name} در این‌جا از شما نام برد:" - subject: "%{name} از شما نام برد" - title: نام‌برده‌شدن تازه + body: "%{name} در این‌جا به شما اشاره کرد:" + subject: "%{name} به شما اشاره کرد" + title: اشارهٔ جدید poll: subject: نظرسنجی‌ای از %{name} پایان یافت reblog: @@ -1244,6 +1295,14 @@ fa: other: سایر تنظیمات posting_defaults: تنظیمات پیش‌فرض انتشار public_timelines: خط زمانی‌های عمومی + privacy: + hint_html: "شخصی‌سازی چگونگی پیدا شدن فرسته‌ها و نمایه‌تان. ویژگی‌های متعدّدی در ماستودون می‌توانند هنگام به کار افتادن در رسیدن به مخاطبینی گسترده‌تر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند." + privacy: محرمانگی + reach: دسترسی + reach_hint_html: واپایش این که می‌خواهید به دست افراد جدید قابل کشف و پی‌گیری باشید یا نه. می‌خواهید فرسته‌هایتان روی صفحهٔ کشف ظاهر شوند؟ می‌خواهید دیگر افراد در پیشنهادهای پی‌گیریشان ببینندتان؟ می‌خواهید پی‌گیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟ + search: جست‌وجو + search_hint_html: واپایش این که چگونه می‌خواهید پیدا شوید. می‌خواهید افراد با آن‌چه به صورت عمومی درباره‌اش فرستاده‌اید پیدایتان کنند؟ می‌خواهید افراد خارج از ماستودون هنگام جست‌وجوی وب نمایه‌تان را بیابند؟ لطفاً‌به خاطر داشته باشید که خروج کامل از تمامی موتورهای جست‌وجو برای اطّلاعات عمومی قابل تضمین نیست. + title: محرمانگی و دسترسی privacy_policy: title: سیاست محرمانگی reactions: @@ -1519,7 +1578,10 @@ fa: seamless_external_login: شما با یک سرویس خارج از مجموعه وارد شده‌اید، به همین دلیل تنظیمات ایمیل و گذرواژه برای شما در دسترس نیست. signed_in_as: 'واردشده به نام:' verification: + extra_instructions_html: نکته: پیوند روی پایگاه وبتان می‌تواند نامرئی باشد. بخش مهم rel="me" است که از جعل هویت روی پایگاه‌هایی با محتوای تولید شده به دست کاربر جلوگیری می‌کند. حتا می‌توانید به جای برچسب a از برچسب link در سرایند صفحه استفاده کنید؛ ولی HTML باید بدون اجرای جاوااسکریپت در دسترس باشد. here_is_how: به اینصورت + hint_html: "تأیید هویتتان روی ماستودون برای همه است. برپایهٔ استانداردهای وب و رایگان برای همیشه. تمام آن چه نیاز دارید پایگاه وب شخصیست که افراد شما را با آن بشناسند. هنگام پیوند دادن به این پایگاه از نمایه‌تان، بررسی می‌کنیم که پیوندهای پایگاه وب نیز به نمایه‌تان پیوند داده باشد و نشانگری تصویری رویش نشان می‌دهیم." + instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینه‌های اضافی روی نمایه‌تان افزوده و تغییرات را ذخیره کنید. verification: تأیید verified_links: "‏پیوندهای تأییدشده‌ شما" webauthn_credentials: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index dbc962d250..e620db3a78 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -458,7 +458,7 @@ gd: not_permitted: Chan eil seo ceadaichte resolved_dns_records_hint_html: Thèid ainm na h-àrainne fhuasgladh nan àrainnean MX a leanas agus an urra riutha-san gun gabh iad ri post-d. Ma bhacas tu àrainn MX, bacaidh seo an clàradh o sheòladh puist-d sam bith a chleachdas an aon àrainn MX fiù ’s ma bhios ainm àrainne eadar-dhealaichte ’ga sealltainn. Thoir an aire nach bac thu solaraichean puist-d mòra. resolved_through_html: Chaidh fuasgladh slighe %{domain} - title: Àrainnean puist-d ’gam bacadh + title: Bacadh àrainnean puist-d export_domain_allows: new: title: Ion-phortaich àrainnean ceadaichte diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 1dfbaf03d2..14f78e4615 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -71,7 +71,7 @@ gl: enabled: Activado enabled_msg: Desbloqueada a conta de %{username} followers: Seguidoras - follows: Segue + follows: Seguimentos header: Cabeceira inbox_url: URL da caixa de entrada invite_request_text: Razóns para unirte diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 8da2695fdc..b18405fb65 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -379,11 +379,11 @@ ja: confirm_suspension: cancel: キャンセル confirm: 停止 - permanent_action: 失われたデータやフォロー関係は、ブロックを解除しても元に戻せません。 - preamble_html: "%{domain} と、そのサブドメインをブロックします。" + permanent_action: 失われたデータやフォロー関係は、停止を解除しても元に戻せません。 + preamble_html: "%{domain} と、そのサブドメインに「停止」の処置を行います。" remove_all_data: この操作により、対象のドメインにあるアカウントからのコンテンツやメディア、プロフィール情報はすべて削除されます。 - stop_communication: ブロックしたサーバーとは通信を行わなくなります。 - title: "%{domain} をブロック" + stop_communication: 対象のサーバーとは通信を行わなくなります。 + title: "「%{domain}」ドメインブロックの確認" undo_relationships: この操作により、このサーバーと対象サーバーのアカウント間のフォロー関係はすべて解除されます。 created_msg: ドメインブロック処理を完了しました destroyed_msg: ドメインブロックを外しました diff --git a/config/locales/ko.yml b/config/locales/ko.yml index a6a85464e6..da6d8596e0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1303,7 +1303,7 @@ ko: unconfirmed: 미확인 status: 상태 success: 파일이 정상적으로 업로드되었으며, 현재 처리 중입니다 - time_started: 시작 시간 + time_started: 시작 시각 titles: blocking: 차단한 계정 가져오는 중 bookmarks: 북마크 가져오는 중 diff --git a/config/locales/no.yml b/config/locales/no.yml index 8bb36e76f8..dc8151d552 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -309,6 +309,7 @@ unpublish: Avpubliser unpublished_msg: Kunngjøring upublisert! updated_msg: Kunngjøringen er oppdatert! + critical_update_pending: Kritisk oppdatering avventer custom_emojis: assign_category: Tilegn kategori by_domain: Domene @@ -774,6 +775,18 @@ site_uploads: delete: Slett den opplastede filen destroyed_msg: Vellykket sletting av sideopplasting! + software_updates: + critical_update: Kritisk — vennligst oppdater raskt + description: "Det anbefales å holde Mastodon-installasjonen oppdatert for å dra nytte av nye rettelser og funksjoner. Dessuten er det av og til viktig å oppdatere Mastodon raskt for å unngå sikkerhetsproblemer. Derfor sjekker Mastodon om det finnes oppdateringer \nhvert 30. minutt, og varsler deg i henhold til dine valg for e-postvarsling." + documentation_link: Finn ut mer + release_notes: Informasjon om utgivelsen + title: Tilgjengelige oppdateringer + type: Type + types: + major: Stor oppdatering + minor: Mindre oppdatering + patch: Liten oppdatering – feilrettinger og endringer som er lette å legge til + version: Versjon statuses: account: Forfatter application: Applikasjon @@ -838,6 +851,12 @@ message_html: Du har ikke definert noen serverregler. sidekiq_process_check: message_html: Ingen Sidekiq-prosess kjører for %{value} køen(e). Vennligst se gjennom Sidekiq-konfigurasjonen din + software_version_critical_check: + action: Se tilgjengelige oppdateringer + message_html: En kritisk oppdatering av Mastodon er tilgjengelig. Vennligst oppdater så raskt som mulig. + software_version_patch_check: + action: Se tilgjengelige oppdateringer + message_html: En oppdatering av Mastodon som inneholder feilrettinger er tilgjengelig. upload_check_privacy_error: action: Sjekk her for mer informasjon message_html: "Webserveren din er feilkonfigurert. Personvernet til brukerne dine er i fare." @@ -951,6 +970,9 @@ body: "%{target} klager på en moderasjonsbeslutning av %{action_taken_by} fra %{date}, noe som var %{type}. De skrev:" next_steps: Du kan godkjenne klagen for å angre på moderasjonsvedtaket eller ignorere det. subject: "%{username} klager på en moderasjonsbeslutning for %{instance}" + new_critical_software_updates: + body: Nye kritiske versjoner av Mastodon har blitt utgitt, det kan være fordelaktig å oppdatere så snart som mulig! + subject: Kritiske Mastodon-oppdateringer er tilgjengelige for %{instance}! new_pending_account: body: Detaljer om den nye kontoen er nedenfor. Du kan godkjenne eller avvise denne søknaden. subject: Ny konto opp til vurdering på %{instance} (%{username}) @@ -958,6 +980,9 @@ body: "%{reporter} har rapportert %{target}" body_remote: Noen fra %{domain} har rapportert %{target} subject: Ny rapport for %{instance} (#%{id}) + new_software_updates: + body: Nye versjoner av Mastodoner har blitt utgitt, du ønsker kanskje å oppdatere! + subject: Nye versjoner av Mastodon er tilgjengelige for %{instance}! new_trends: body: 'Følgende elementer trenger en gjennomgang før de kan vises offentlig:' new_trending_links: @@ -1708,6 +1733,7 @@ default: "%-d. %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%-d. %b %Y, %H:%M %Z" two_factor_authentication: add: Legg til disable: Skru av diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 15e1d0de24..12a6ac1fe8 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -15,7 +15,7 @@ ca: account_migration: acct: Especifica l'usuari@domini del compte al qual et vols traslladar account_warning_preset: - text: Pots usar totes les sintaxis, com ara URL, etiquetes i mencions + text: Pots usar tota mena de sintaxi, com ara URL, etiquetes i mencions title: Opcional. No és visible per al destinatari admin_account_action: include_statuses: L'usuari veurà quins tuts han causat l'acció de moderació o avís diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 8079fd03c0..70194a1e0c 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -291,6 +291,8 @@ cy: pending_account: Mae cyfrif newydd angen adolygiad reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd + software_updates: + label: Mae fersiwn Mastodon newydd ar gael trending_tag: Mae pwnc llosg newydd angen adolygiad rule: text: Rheol diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index ca382f387e..676eb192ee 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -2,6 +2,14 @@ fa: simple_form: hints: + account: + discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. + display_name: نام کامل یا باحالتان. + fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. + indexable: ممکن است فرسته‌های عمومیتان در نتیجه‌های جست‌وجوی ماستودون ظاهر شود. افرادی که با فرسته‌هایتان تعامل داشتند در هر صورت می‌توانند جست‌وجویشان کنند. + note: 'می‌توانید افراد دیگر را @نام برده یا #برچسب بزنید.' + show_collections: افراد خواهند توانست پی‌گیران و پی‌گرفته شده‌هایتان را مرور کنند. افرادی که پی‌می‌گیریدشان در هر صورت خواهند دید که پی‌می‌گیریدشان. + unlocked: افراد خواهند توانست بدون درخواست تأیید پی‌بگیرندتان. اگر می‌خواهید درخواست‌های پی‌گیری را بازبینی کرده و بگزینید که پی‌گیران جدید را بپذیرید یا رد کنید، علامت را بردارید. account_alias: acct: مشخّص کردن username@domain حسابی که می‌خواهید از آن منتقل شوید account_migration: @@ -72,7 +80,17 @@ fa: backups_retention_period: نگه داشتن بایگانی‌های کاربری برای روزهای مشخّص شده. bootstrap_timeline_accounts: سنجاق کردنThese accounts will be pinned to the top of new users' follow recommendations. closed_registrations_message: نمایش داده هنگام بسته بودن ثبت‌نام‌ها + content_cache_retention_period: همهٔ فرسته‌ها و تقویت‌ها از دیگر کارسازها پس از روزهای نشخّص حذف خواهند شد. ممکن است برخی فرسته‌ها قابل بازیابی نباشند. همهٔ نشانک‌ها، پسندها و تقویت‌ها نیز از دست خواهند رفت و قابل بازگشت نخواهند بود. + custom_css: می‌توانیدروی نگارش وب ماستودون سبک‌های سفارشی اعمال کنید. + mascot: نقش میانای وب پیش‌رفته را پایمال می‌کند. + media_cache_retention_period: اگر به مقدار مثبتی تنظیم شود، پرونده‌های رسانهٔ بارگرفته پس از روزهای مشخّص شده حذف خواهند شد و هنگام درخواست دوباره بارگرفته می‌شوند. + profile_directory: شاخهٔ نمایه، همهٔ کاربرانی که کشف‌پذیری را برگزیده‌اند سیاهه می‌کند. require_invite_text: زمانی که نام‌نویسی ها نیازمند تایید دستی است، متن «چرا می‌خواهید بپیوندید؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید + site_contact_email: چگونگی دسترسی افراد به شما برای مقاصد قانونی یا پشتیبانی. + site_contact_username: چکونگی رسیدن افراد به شما روی ماستودون. + site_extended_description: هر اطّلاعات بیش‌تری که ممکن است برای بازدیدکنندگان و کاربرانتان مفید باشد. می‌تواند به شکل مارک‌دون باشد. + site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چه‌کسی می‌گرداندش و برای چه کسیست؟ + site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیش‌گزیده خالی بگذارید. می‌تواند در قالب مارک‌دون باشد. form_challenge: current_password: شما در حال ورود به یک منطقهٔ‌ حفاظت‌شده هستید imports: @@ -93,6 +111,9 @@ fa: sessions: otp: 'کد تأیید دومرحله‌ای که کاره روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' webauthn: اگر کلید USB باشد ، از اتصاڵ آن مطمئن شوید و، اگر لازم باشد، به آن ضربه‌ایی بزنید. + settings: + indexable: صفحهٔ نمایه‌تان ممکن است در نتیجه‌های جست‌وجو روی گوگل، بینگ و جاهای دیگر ظاهر شود. + show_application: خودتان همواره خواهید توانست ببینید که کدام کاره فرسته‌تان را منتشر کرده. tag: name: شما تنها می‌توانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید user: @@ -102,9 +123,13 @@ fa: url: جایی که رویدادها فرستاده می‌شوند labels: account: + discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف fields: name: برچسب value: محتوا + indexable: بودن فرسته‌های عمومی در نتیجه‌های جست‌وجو + show_collections: نمایش پی‌گیران و پی‌گرفته شده‌ها روی نمایه + unlocked: پذیرش خودکار پی‌گیران جدید account_alias: acct: نشانی حساب قدیمی account_migration: @@ -249,9 +274,18 @@ fa: pending_account: وقتی حساب تازه‌ای نیاز به بازبینی داشت ایمیل بفرست reblog: وقتی کسی فرستهٔ شما را تقویت کرد ایمیل بفرست report: گزارش جدیدی فرستاده شد + software_updates: + all: آگاهی برای همهٔ به‌روز رسانی‌ها + critical: آگاهی فقط برای به‌روز رسانی‌های بحرانی + label: نگارشی جدید از ماستادون موجود است + none: هرگز برای به‌روز رسانی‌ها آگاهی داده نشود (توصیه نمی‌شود) + patch: آگاهی برای به‌روز رسانی‌های رفع اشکال trending_tag: روند جدیدی نیازمند بازبینی است rule: text: قانون + settings: + indexable: بودن صفحهٔ نمایه در نتیجه‌های جست‌وجو + show_application: نمایش این که فرسته را از کدام کاره فرستاده‌اید tag: listable: اجازه به این برچسب برای ظاهر شدن در جست‌وجوها و پیشنهادها name: برچسب @@ -271,6 +305,7 @@ fa: url: نشانی نقطهٔ پایانی 'no': خیر not_recommended: پیشنهاد نشده + overridden: پایمال recommended: توصیه می‌شود required: mark: "*" diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 1a32a5fadb..a9d5465f36 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -200,7 +200,7 @@ password: Passord phrase: Nøkkelord eller frase setting_advanced_layout: Skru på det avanserte nettgrensesnittet - setting_aggregate_reblogs: Gruppefremhevinger i tidslinjer + setting_aggregate_reblogs: Samle fremhevinger i tidslinjer setting_always_send_emails: Alltid send e-postvarslinger setting_auto_play_gif: Autoavspill animert GIF-filer setting_boost_modal: Vis bekreftelse før fremheving @@ -291,6 +291,12 @@ pending_account: Ny bruker avventer gjennomgang reblog: Send e-post når noen fremhever din status report: Ny rapport er sendt + software_updates: + all: Varsle om alle oppdateringer + critical: Varsle kun om kritiske oppdateringer + label: En ny versjon av Mastodon er tilgjengelig + none: Aldri varsle om oppdateringer (anbefales ikke) + patch: Varsle om oppdateringer med feilrettinger trending_tag: Ny trend krever gjennomgang rule: text: Regler diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 04266d2719..7a56fa2559 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -3,10 +3,10 @@ zh-CN: simple_form: hints: account: - discoverable: 您的公开帖子和个人资料可能会在Mastodon的各个领域中被推荐,您的个人资料可能会被推荐给其他用户。 + discoverable: 您的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,您的个人资料可能会被推荐给其他用户。 display_name: 您的全名或昵称。 fields: 你的主页、人称代词、年龄,以及任何你想要添加的内容。 - indexable: 您的公开嘟文可能会出现在Mastodon的搜索结果中。与您的嘟文互动过的人可能能够进行搜索并找到它们。 + indexable: 您的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与您的嘟文有过交互的人都可能通过搜索找到它们。 note: '您可以提及 @其他人 或 #标签 。' show_collections: 人们将能够浏览您的关注和追随者。您关注的人会看到您关注他们。 unlocked: 人们将能够在不请求批准的情况下关注您。如果您希望审核关注请求并选择接受或拒绝新的粉丝,请取消勾选此项。 @@ -71,12 +71,12 @@ zh-CN: featured_tag: name: 以下是你最近使用过的标签: filters: - action: 选择在帖子匹配过滤器时要执行的操作 + action: 选择在嘟文命中过滤器时要执行的操作 actions: hide: 彻底屏蔽过滤内容,犹如它不曾存在过一般 warn: 在警告中提及过滤器标题后,隐藏过滤内容 form_admin_settings: - activity_api_enabled: 本地发布的帖子、 活跃用户和每周的注册数 + activity_api_enabled: 本站每周的嘟文数、活跃用户数和新注册用户数 backups_retention_period: 将在指定天数内保留生成的用户存档。 bootstrap_timeline_accounts: 这些账号将在新用户关注推荐中置顶。 closed_registrations_message: 在关闭注册时显示 @@ -144,7 +144,7 @@ zh-CN: fields: name: 标签 value: 内容 - indexable: 在搜索结果中包含公共嘟文 + indexable: 将公开嘟文纳入搜索范围 show_collections: 在个人资料中显示关注和关注者 unlocked: 自动接受新关注者 account_alias: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 11e8de056a..e08d1101ef 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -425,6 +425,7 @@ sk: failing: Zlyhávajúce unavailable: Nedostupné delivery_available: Je v dosahu doručovania + empty: Nenájdené žiadne domény. moderation: all: Všetky limited: Obmedzené @@ -482,6 +483,12 @@ sk: created_msg: Poznámka o nahlásení úspešne vytvorená! destroyed_msg: Poznámka o nahlásení úspešne vymazaná! reports: + account: + notes: + few: "%{count} poznámok" + many: "%{count} poznámok" + one: "%{count} poznámka" + other: "%{count} poznámky" action_taken_by: Zákrok vykonal/a actions: suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu. @@ -1015,6 +1022,8 @@ sk: other: Ostatné posting_defaults: Východiskové nastavenia príspevkov public_timelines: Verejné časové osi + privacy: + title: Súkromie a dosah reactions: errors: limit_reached: Maximálny počet rôznorodých reakcií bol dosiahnutý diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 576833b043..35230ceddb 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -869,6 +869,7 @@ sl: action: Glejte razpoložljive posodobitve software_version_patch_check: action: Glejte razpoložljive posodobitve + message_html: Na voljo je posodobitev Mastodona s popravki hroščev. upload_check_privacy_error: action: Preverite tukaj za več informacij message_html: "Vaš spletni strežnik je napačno nastavljen. Zasebnost vaših uporabnikov je izpostavljena tveganjem." diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index db3902b704..51baaf7a4e 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -626,13 +626,13 @@ zh-CN: statuses_description_html: 在与该账号的通信中将引用违规内容 summary: action_preambles: - delete_html: 您即将删除 @%{acct} 的一些帖子。 这将: + delete_html: 您即将删除 @%{acct} 的一些嘟文。 这将: mark_as_sensitive_html: 您即将 标记 @%{acct} 的帖一些子为 敏感。这将: silence_html: 您即将限制 @%{acct} 的帐户。 这将: suspend_html: 您即将暂停 @%{acct} 的帐户。 这将: actions: - delete_html: 删除违规帖子 - mark_as_sensitive_html: 将违规帖子的媒体标记为敏感 + delete_html: 删除违规嘟文 + mark_as_sensitive_html: 将违规嘟文的媒体标记为敏感 silence_html: 严格限制 @%{acct} 的影响力,方法是让他们的个人资料和内容仅对已经关注他们的人可见,或手动查找其个人资料时 suspend_html: 暂停 @%{acct},使他们的个人资料和内容无法访问,也无法与之互动 close_report: '将报告 #%{id} 标记为已解决' @@ -759,7 +759,7 @@ zh-CN: open: 开放注册 security: authorized_fetch: 需要跨站认证 - authorized_fetch_hint: 要求跨站验证可以更严格地执行用户级和服务器级的封锁。然而,这会产生性能上的代价,减少你的回复触达范围,并可能导致与一些联邦服务的兼容问题。此外,这并不能阻止专门的参与者获取你的公共帖子和账户。 + authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账户。 authorized_fetch_overridden_hint: 由于此设置被环境变量覆盖,目前无法更改。 federation_authentication: 强制跨站认证 title: 服务器设置 @@ -1164,7 +1164,7 @@ zh-CN: invalid_domain: 不是一个有效的域名 edit_profile: basic_information: 基本信息 - hint_html: "自定义公开资料和帖子旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" + hint_html: "自定义公开资料和嘟文旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" other: 其他 errors: '400': 你提交的请求无效或格式不正确。 @@ -1499,7 +1499,7 @@ zh-CN: privacy: 隐私 privacy_hint_html: 控制你愿意向他人透露多少信息。通过浏览他人的关注列表和查看他们发嘟所用的应用,人们可以发现有趣的用户和酷炫的应用,但你可能更喜欢将其隐藏起来。 reach: 范围 - reach_hint_html: 控制您是否希望被新人发现和关注。您是否希望您的帖子出现在“探索”屏幕上?您是否希望其他人在关注推荐中看到您?您是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? + reach_hint_html: 控制您是否希望被新人发现和关注。您是否希望您的嘟文出现在“探索”页面上?您是否希望其他人在关注推荐中看到您?您是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? search: 搜索 search_hint_html: 控制你希望被找到的方式。你想让人们通过你公开发布的内容来找到你吗?当在网络上搜索时,你是否希望Mastodon之外的人能够找到你的个人资料?请注意,我们无法保证完全排除所有搜索引擎对公开信息的索引。 title: 隐私与可达性 From 8dcc74d0289c9477f22921ff17e3c1a0a423badd Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 15:06:43 +0200 Subject: [PATCH 097/237] =?UTF-8?q?Fix=20inefficient=20queries=20in=20?= =?UTF-8?q?=E2=80=9CFollows=20and=20followers=E2=80=9D=20as=20well=20as=20?= =?UTF-8?q?several=20admin=20pages=20(#27116)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/relationship_filter.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 3d75dce05e..955d7d188a 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -62,13 +62,13 @@ class RelationshipFilter def relationship_scope(value) case value when 'following' - account.following.eager_load(:account_stat).reorder(nil) + account.following.includes(:account_stat).reorder(nil) when 'followed_by' - account.followers.eager_load(:account_stat).reorder(nil) + account.followers.includes(:account_stat).reorder(nil) when 'mutual' - account.followers.eager_load(:account_stat).reorder(nil).merge(Account.where(id: account.following)) + account.followers.includes(:account_stat).reorder(nil).merge(Account.where(id: account.following)) when 'invited' - Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil) + Account.joins(user: :invite).merge(Invite.where(user: account.user)).includes(:account_stat).reorder(nil) else raise Mastodon::InvalidParameterError, "Unknown relationship: #{value}" end From 1cd191c8e1f7a18dbfc8521514694c506e821620 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 15:07:10 +0200 Subject: [PATCH 098/237] Add redirection on `/deck` URLs for logged-out users (#27128) --- app/lib/permalink_redirector.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index 0fcec683d9..0dd37483e2 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -14,6 +14,8 @@ class PermalinkRedirector find_account_url_by_name(first_segment) elsif accounts_request? && record_integer_id_request? find_account_url_by_id(second_segment) + elsif @path.start_with?('/deck') + @path.delete_prefix('/deck') end end @@ -52,7 +54,7 @@ class PermalinkRedirector end def path_segments - @path_segments ||= @path.delete_prefix('/').split('/') + @path_segments ||= @path.delete_prefix('/deck').delete_prefix('/').split('/') end def find_status_url_by_id(id) From bb172703ca07650cce2eb3d775920a6699b7cc40 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 17:07:01 +0200 Subject: [PATCH 099/237] Fix explore prompt sometimes showing up when the home TL is loading (#27062) --- app/javascript/mastodon/features/home_timeline/index.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 8ff0377946..63d373b9a9 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -55,8 +55,10 @@ const homeTooSlow = createSelector([ getHomeFeedSpeed, ], (isLoading, isPartial, speed) => !isLoading && !isPartial // Only if the home feed has finished loading - && (speed.gap > (30 * 60) // If the average gap between posts is more than 20 minutes - || (Date.now() - speed.newest) > (1000 * 3600)) // If the most recent post is from over an hour ago + && ( + (speed.gap > (30 * 60) // If the average gap between posts is more than 30 minutes + || (Date.now() - speed.newest) > (1000 * 3600)) // If the most recent post is from over an hour ago + ) ); const mapStateToProps = state => ({ From 3c9947734dd99397198377d971eca73c3077f577 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 17:07:52 +0200 Subject: [PATCH 100/237] Fix division by zero in video in bitrate computation code (#27129) --- lib/paperclip/transcoder.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index ed5425a3b8..d2d946d3ad 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -43,7 +43,8 @@ module Paperclip unless eligible_to_passthrough?(metadata) size_limit_in_bits = MediaAttachment::VIDEO_LIMIT * 8 desired_bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL).floor - maximum_bitrate = (size_limit_in_bits / metadata.duration).floor - 192_000 # Leave some space for the audio stream + duration = [metadata.duration, 1].max + maximum_bitrate = (size_limit_in_bits / duration).floor - 192_000 # Leave some space for the audio stream bitrate = [desired_bitrate, maximum_bitrate].min @output_options['b:v'] = bitrate From eea27750b059cbad03e84f6e4e7eb8d789e37fdd Mon Sep 17 00:00:00 2001 From: Essem Date: Mon, 25 Sep 2023 12:21:07 -0500 Subject: [PATCH 101/237] Properly remove tIME chunk from PNG uploads (#27111) --- app/models/concerns/account_avatar.rb | 2 +- app/models/concerns/account_header.rb | 2 +- app/models/custom_emoji.rb | 2 +- app/models/media_attachment.rb | 2 +- app/models/preview_card.rb | 2 +- app/models/preview_card_provider.rb | 2 +- app/models/site_upload.rb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/models/concerns/account_avatar.rb b/app/models/concerns/account_avatar.rb index e9b8b4adba..b5919a9a23 100644 --- a/app/models/concerns/account_avatar.rb +++ b/app/models/concerns/account_avatar.rb @@ -18,7 +18,7 @@ module AccountAvatar included do # Avatar upload - has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '+profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail] + has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail] validates_attachment_content_type :avatar, content_type: IMAGE_MIME_TYPES validates_attachment_size :avatar, less_than: LIMIT remotable_attachment :avatar, LIMIT, suppress_errors: false diff --git a/app/models/concerns/account_header.rb b/app/models/concerns/account_header.rb index 0d197abfcd..e184880f93 100644 --- a/app/models/concerns/account_header.rb +++ b/app/models/concerns/account_header.rb @@ -19,7 +19,7 @@ module AccountHeader included do # Header upload - has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '+profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail] + has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail] validates_attachment_content_type :header, content_type: IMAGE_MIME_TYPES validates_attachment_size :header, less_than: LIMIT remotable_attachment :header, LIMIT, suppress_errors: false diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index f66353fadd..717de27723 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -39,7 +39,7 @@ class CustomEmoji < ApplicationRecord has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode, inverse_of: false - has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false + has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false before_validation :downcase_domain diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 2d1b70661b..b567003fb9 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -171,7 +171,7 @@ class MediaAttachment < ApplicationRecord DEFAULT_STYLES = [:original].freeze GLOBAL_CONVERT_OPTIONS = { - all: '-quality 90 +profile "!icc,*" +set modify-date -define jpeg:dct-method=float +set create-date', + all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp -define jpeg:dct-method=float', }.freeze belongs_to :account, inverse_of: :media_attachments, optional: true diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 3e2b5bf992..4e24fab240 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -53,7 +53,7 @@ class PreviewCard < ApplicationRecord has_and_belongs_to_many :statuses has_one :trend, class_name: 'PreviewCardTrend', inverse_of: :preview_card, dependent: :destroy - has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 90 +profile "!icc,*" +set modify-date +set create-date' }, validate_media_type: false + has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, validate_media_type: false validates :url, presence: true, uniqueness: true validates_attachment_content_type :image, content_type: IMAGE_MIME_TYPES diff --git a/app/models/preview_card_provider.rb b/app/models/preview_card_provider.rb index f3e4b49013..8ba24331bb 100644 --- a/app/models/preview_card_provider.rb +++ b/app/models/preview_card_provider.rb @@ -27,7 +27,7 @@ class PreviewCardProvider < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true - has_attached_file :icon, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false + has_attached_file :icon, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false validates_attachment :icon, content_type: { content_type: ICON_MIME_TYPES }, size: { less_than: LIMIT } remotable_attachment :icon, LIMIT diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 2335ffac53..03d472cdb2 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -41,7 +41,7 @@ class SiteUpload < ApplicationRecord mascot: {}.freeze, }.freeze - has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector] + has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector] validates_attachment_content_type :file, content_type: %r{\Aimage/.*\z} validates :file, presence: true From 829d6e13cebfe11ca7e01edbcbddde6fc6b37f3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 10:47:16 +0200 Subject: [PATCH 102/237] New Crowdin Translations (automated) (#27144) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/sr-Latn.json | 4 ++-- app/javascript/mastodon/locales/sr.json | 4 ++-- config/locales/devise.sr-Latn.yml | 8 ++++---- config/locales/devise.sr.yml | 8 ++++---- config/locales/simple_form.lv.yml | 2 +- config/locales/sk.yml | 3 +++ config/locales/sr-Latn.yml | 10 +++++----- config/locales/sr.yml | 10 +++++----- 8 files changed, 26 insertions(+), 23 deletions(-) diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 6fe5603f40..9750784bbc 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -302,8 +302,8 @@ "hashtag.follow": "Zaprati heš oznaku", "hashtag.unfollow": "Otprati heš oznaku", "hashtags.and_other": "…i {count, plural, one {još #} few {još #}other {još #}}", - "home.actions.go_to_explore": "Pogledaj šta je u trendu", - "home.actions.go_to_suggestions": "Pronađite ljude za praćenje", + "home.actions.go_to_explore": "Pogledate šta je u trendu", + "home.actions.go_to_suggestions": "Pronađete ljude koje biste pratili", "home.column_settings.basic": "Osnovna", "home.column_settings.show_reblogs": "Prikaži podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index f3c077cf31..bb4739cbcc 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -302,8 +302,8 @@ "hashtag.follow": "Запрати хеш ознаку", "hashtag.unfollow": "Отпрати хеш ознаку", "hashtags.and_other": "…и {count, plural, one {још #} few {још #}other {још #}}", - "home.actions.go_to_explore": "Погледај шта је у тренду", - "home.actions.go_to_suggestions": "Пронађите људе за праћење", + "home.actions.go_to_explore": "Погледате шта је у тренду", + "home.actions.go_to_suggestions": "Пронађeте људе које бисте пратили", "home.column_settings.basic": "Основна", "home.column_settings.show_reblogs": "Прикажи подржавања", "home.column_settings.show_replies": "Прикажи одговоре", diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml index 836f83a9a5..6b4a5801c6 100644 --- a/config/locales/devise.sr-Latn.yml +++ b/config/locales/devise.sr-Latn.yml @@ -18,13 +18,13 @@ sr-Latn: unconfirmed: Pre nastavka morate potvrditi svoj nalog. mailer: confirmation_instructions: - action: Potvrdite adresu e-pošte + action: Verifikujte adresu e-pošte action_with_app: Potvrdi i vrati se na %{app} explanation: Napravili ste nalog na %{host} sa adresom ove e-pošte. Na jedan klik ste udaljeni od aktiviranja. Ako ovo niste vi, molimo ignorišite ovu e-poštu. explanation_when_pending: Prijavili ste se za poziv %{host} sa ovim imejlom. Kada potvrdite svoj imejl, pregledaćemo vašu prijavu. Možete se prijaviti da biste promenili detalje ili izbrisali nalog, ali ne možete pristupiti većini funkcija dok vam nalog ne bude odobren. Ako vaša prijava bude odbijena, vaši podaci će biti uklonjeni, tako da od vas neće biti potrebne dalje radnje. Ako ovo niste bili vi, zanemarite ovaj imejl. extra_html: Molimo da takođe proverite pravila ove instance i naše uslove korišćenja. subject: 'Mastodont: Uputstvo za potvrdu korisničkog naloga na instanci %{instance}' - title: Potvrdite adresu e-pošte + title: Verifikujte adresu e-pošte email_changed: explanation: 'Adresa ove e-pošte za vaš nalog će biti promenjena u:' extra: Ako niste promenili vašu e-poštu, sasvim je moguće da je neko drugi dobio pristup vašem nalogu. Molimo promenite lozinku odmah ili kontaktirajte administratora instance ako ste zaključani izvan vašeg naloga. @@ -39,7 +39,7 @@ sr-Latn: explanation: Potvrdite novu adresu da biste promenili e-poštu. extra: Ako ova promena nije inicirana sa vaše strane, molimo ignorišite ovu e-poštu. Adresa e-pošta za ovaj Mastodon nalog neće biti promenjena dok ne pristupite poveznici/linku iznad. subject: 'Mastodon: Potvrdite e-poštu za %{instance}' - title: Potvrdite adresu e-pošte + title: Verifikujte adresu e-pošte reset_password_instructions: action: Lozinka promenjena explanation: Zatražili ste novu lozinku za vaš nalog. @@ -93,7 +93,7 @@ sr-Latn: signed_up_but_locked: Uspešno ste se registrovali. Nažalost ne možete se prijaviti zato što je Vaš nalog zaključan. signed_up_but_pending: Na vaš imejl poslata je poruka sa vezom za potvrdu. Nakon što kliknete na vezu, pregledaćemo vašu prijavu. Bićete obavešteni ako bude odobreno. signed_up_but_unconfirmed: Poruka za potvrdu Vašeg naloga je poslata na Vašu imejl adresu. Kliknite na vezu u imejlu da potvrdite svoj nalog. Molimo proverite i spam fasciklu ako niste primili poruku. - update_needs_confirmation: Uspešno ste ažurirali svoj nalog, ali treba da potvrdimo novu adresu Vaše e-pošte. Molimo Vas da proverite e-poštu i pratite link za potvrdu nove adrese Vaše e-pošte. + update_needs_confirmation: Uspešno ste ažurirali svoj nalog, ali moramo da verifikujemo vašu novu adresu e-pošte. Proverite svoju e-poštu i pratite vezu za potvrdu da biste potvrdili novu adresu e-pošte. Proverite svoju fasciklu neželjene pošte ako niste primili ovu e-poštu. updated: Vaš nalog je uspešno ažuriran. sessions: already_signed_out: Uspešno ste se odjavili. diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml index b1be1eebfa..d55cf7a268 100644 --- a/config/locales/devise.sr.yml +++ b/config/locales/devise.sr.yml @@ -18,13 +18,13 @@ sr: unconfirmed: Пре наставка морате потврдити свој налог. mailer: confirmation_instructions: - action: Потврдите адресу е-поште + action: Верификујте адресу е-поште action_with_app: Потврди и врати се на %{app} explanation: Направили сте налог на %{host} са адресом ове е-поште. На један клик сте удаљени од активирања. Ако ово нисте ви, молимо игноришите ову е-пошту. explanation_when_pending: Пријавили сте се за позив %{host} са овим имејлом. Када потврдите свој имејл, прегледаћемо вашу пријаву. Можете се пријавити да бисте променили детаље или избрисали налог, али не можете приступити већини функција док вам налог не буде одобрен. Ако ваша пријава буде одбијена, ваши подаци ће бити уклоњени, тако да од вас неће бити потребне даље радње. Ако ово нисте били ви, занемарите овај имејл. extra_html: Молимо да такође проверите правила ове инстанце и наше услове коришћења. subject: 'Mastodon: Упутство за потврду корисничког налога на инстанци %{instance}' - title: Потврдите адресу е-поште + title: Верификујте адресу е-поште email_changed: explanation: 'Адреса ове е-поште за ваш налог ће бити промењена у:' extra: Ако нисте променили вашу е-пошту, сасвим је могуће да је неко други добио приступ вашем налогу. Молимо промените лозинку одмах или контактирајте администратора инстанце ако сте закључани изван вашег налога. @@ -39,7 +39,7 @@ sr: explanation: Потврдите нову адресу да бисте променили е-пошту. extra: Ако ова промена није иницирана са ваше стране, молимо игноришите ову е-пошту. Адреса е-поште за овај Mastodon налог неће бити промењена док не приступите вези изнад. subject: 'Mastodon: Потврдите е-пошту за %{instance}' - title: Потврдите адресу е-поште + title: Верификујте адресу е-поште reset_password_instructions: action: Лозинка промењена explanation: Затражили сте нову лозинку за ваш налог. @@ -93,7 +93,7 @@ sr: signed_up_but_locked: Успешно сте се регистровали. Нажалост не можете се пријавити зато што је Ваш налог закључан. signed_up_but_pending: На ваш имејл послата је порука са везом за потврду. Након што кликнете на везу, прегледаћемо вашу пријаву. Бићете обавештени ако буде одобрено. signed_up_but_unconfirmed: Порука за потврду Вашег налога је послата на Вашу имејл адресу. Кликните на везу у имејлу да потврдите свој налог. Молимо проверите и спам фасциклу ако нисте примили поруку. - update_needs_confirmation: Uспешно сте ажурирали свој налог, али треба да потврдимо нову адресу Ваше е-поште. Молимо Вас да проверите е-пошту и пратите линк за потврду нове адресе Ваше е-поште. + update_needs_confirmation: Успешно сте ажурирали свој налог, али морамо да верификујемо вашу нову адресу е-поште. Проверите своју е-пошту и пратите везу за потврду да бисте потврдили нову адресу е-поште. Проверите своју фасциклу нежељене поште ако нисте примили ову е-пошту. updated: Ваш налог је успешно ажуриран. sessions: already_signed_out: Успешно сте се одјавили. diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index beff4ee64a..bf831c946f 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -301,7 +301,7 @@ lv: rule: text: Noteikumi settings: - indexable: Ietvert profila lapu muklēšanas dzinējos + indexable: Ietvert profila lapu meklēšanas dzinējos show_application: Parādi, no kuras lietotnes nosūtīji ziņu tag: listable: Atļaut šim tēmturim parādīties meklējumos un ieteikumos diff --git a/config/locales/sk.yml b/config/locales/sk.yml index e08d1101ef..78b9b87db3 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -273,6 +273,7 @@ sk: title: Oboznámenia unpublish: Zruš zverejnenie updated_msg: Oboznámenie úspešne aktualizované! + critical_update_pending: Čaká kritická aktualizácia custom_emojis: assign_category: Priraď kategóriu by_domain: Doména @@ -418,6 +419,8 @@ sk: instance_accounts_dimension: Najsledovanejšie účty instance_accounts_measure: uložené účty instance_follows_measure: ich sledovatelia tu + instance_languages_dimension: Najpopulárnejšie jazyky + instance_media_attachments_measure: uložené mediálne prílohy instance_reports_measure: hlásenia o nich instance_statuses_measure: uložené príspevky delivery: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 5d6849091a..82fbbff49e 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1151,7 +1151,7 @@ sr-Latn: x_seconds: "%{count} sek." deletes: challenge_not_passed: Lozinka koju ste uneli nije bila ispravna - confirm_password: Unesite trenutnu lozinku da bismo proverili Vaš identitet + confirm_password: Unesite trenutnu lozinku za verifikaciju vašeg identiteta confirm_username: Unesite svoje korisničko ime da biste potvrdili proceduru proceed: Obriši nalog success_msg: Vaš nalog je uspešno obrisan @@ -1209,8 +1209,8 @@ sr-Latn: '406': Ova stranica nije dostupna u izabranom formatu. '410': Strana koju ste tražili više ne postoji. '422': - content: Bezbedonosna provera nije uspela. Da ne blokirate kolačiće? - title: Bezbedonosna provera nije uspela + content: Bezbedonosna verifikacija nije uspela. Da li blokirate kolačiće? + title: Bezbedonosna verifikacija nije uspela '429': Uspored '500': content: Izvinjavamo se, nešto je pošlo po zlu sa ove strane. @@ -1296,7 +1296,7 @@ sr-Latn: one: "%{count} stavka koja se poklapa sa Vašom pretragom je izabrana." other: Svih %{count} stavki koje se poklapaju sa Vašom pretragom su izabrane. cancel: Otkaži - changes_saved_msg: Izmene uspešno sačuvane! + changes_saved_msg: Promene su uspešno sačuvane! confirm: Potvrdi copy: Kopiraj delete: Izbriši @@ -1864,7 +1864,7 @@ sr-Latn: here_is_how: Evo kako hint_html: "Verifikacija vašeg identiteta na Mastodon-u je za svakoga. Zasnovano na otvorenim veb standardima, sada i zauvek besplatno. Sve što vam treba je lični veb sajt po kome vas ljudi prepoznaju. Kada se povežete sa ovim veb sajtom sa svog profila, proverićemo da li je veb sajt povezan sa vašim profilom i na njemu ćemo prikazati vizuelni indikator." instructions_html: Kopirajte i nalepite kod ispod u HTML svog veb sajta. Zatim dodajte adresu svog veb sajta u jedno od dodatnih polja na svom profilu sa kartice „Uredi profil” i sačuvajte promene. - verification: Provera + verification: Verifikacija verified_links: Vaše verifikovane veze webauthn_credentials: add: Dodajte novi sigurnosni ključ diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 379b9cb9d6..ffddab8697 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1151,7 +1151,7 @@ sr: x_seconds: "%{count} сек." deletes: challenge_not_passed: Лозинка коју сте унели није била исправна - confirm_password: Унесите тренутну лозинку да бисмо проверили Ваш идентитет + confirm_password: Унесите тренутну лозинку за верификацију вашег идентитета confirm_username: Унесите своје корисничко име да бисте потврдили процедуру proceed: Обриши налог success_msg: Ваш налог је успешно обрисан @@ -1209,8 +1209,8 @@ sr: '406': Ова страница није доступна у изабраном формату. '410': Страна коју сте тражили више не постоји. '422': - content: Безбедоносна провера није успела. Да не блокирате колачиће? - title: Безбедоносна провера није успела + content: Безбедоносна верификација није успела. Да ли блокирате колачиће? + title: Безбедоносна верификација није успела '429': Успоред '500': content: Извињавамо се, нешто је пошло по злу са ове стране. @@ -1296,7 +1296,7 @@ sr: one: "%{count} ставка која се поклапа са Вашом претрагом је изабрана." other: Свих %{count} ставки које се поклапају са Вашом претрагом су изабране. cancel: Откажи - changes_saved_msg: Измене успешно сачуване! + changes_saved_msg: Промене су успешно сачуване! confirm: Потврди copy: Копирај delete: Избриши @@ -1864,7 +1864,7 @@ sr: here_is_how: Ево како hint_html: "Верификација вашег идентитета на Mastodon-у је за свакога. Засновано на отвореним веб стандардима, сада и заувек бесплатно. Све што вам треба је лични веб сајт по коме вас људи препознају. Када се повежете са овим веб сајтом са свог профила, проверићемо да ли је веб сајт повезан са вашим профилом и на њему ћемо приказати визуелни индикатор." instructions_html: Копирајте и налепите код испод у HTML свог веб сајта. Затим додајте адресу свог веб сајта у једно од додатних поља на свом профилу са картице „Уреди профил” и сачувајте промене. - verification: Провера + verification: Верификација verified_links: Ваше верификоване везе webauthn_credentials: add: Додајте нови сигурносни кључ From 2c5421e96207b8c05fe4859d842d4f979ba2e928 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 26 Sep 2023 11:11:52 +0200 Subject: [PATCH 103/237] Update `tootctl maintenance fix-duplicates` to Mastodon v4.2.0 (#27147) --- lib/mastodon/cli/maintenance.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index e9badfb8d1..e73bcbf86a 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -5,7 +5,7 @@ require_relative 'base' module Mastodon::CLI class Maintenance < Base MIN_SUPPORTED_VERSION = 2019_10_01_213028 - MAX_SUPPORTED_VERSION = 2022_11_04_133904 + MAX_SUPPORTED_VERSION = 2023_09_07_150100 # Stubs to enjoy ActiveRecord queries while not depending on a particular # version of the code/database @@ -37,6 +37,8 @@ module Mastodon::CLI class CanonicalEmailBlock < ApplicationRecord; end class Appeal < ApplicationRecord; end class Webhook < ApplicationRecord; end + class BulkImport < ApplicationRecord; end + class SoftwareUpdate < ApplicationRecord; end class PreviewCard < ApplicationRecord self.inheritance_column = false @@ -86,6 +88,7 @@ module Mastodon::CLI owned_classes << FollowRecommendationSuppression if ActiveRecord::Base.connection.table_exists?(:follow_recommendation_suppressions) owned_classes << AccountIdentityProof if ActiveRecord::Base.connection.table_exists?(:account_identity_proofs) owned_classes << Appeal if ActiveRecord::Base.connection.table_exists?(:appeals) + owned_classes << BulkImport if ActiveRecord::Base.connection.table_exists?(:bulk_imports) owned_classes.each do |klass| klass.where(account_id: other_account.id).find_each do |record| @@ -169,6 +172,7 @@ module Mastodon::CLI deduplicate_tags! deduplicate_webauthn_credentials! deduplicate_webhooks! + deduplicate_software_updates! Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false) if ActiveRecord::Migrator.current_version >= 2020_12_06_004238 Rails.cache.clear @@ -204,6 +208,7 @@ module Mastodon::CLI ActiveRecord::Base.connection.execute('REINDEX INDEX search_index;') ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_uri;') ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_url;') + ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_domain_and_id;') if ActiveRecord::Migrator.current_version >= 2023_05_24_190515 end def deduplicate_users! @@ -241,6 +246,8 @@ module Mastodon::CLI else ActiveRecord::Base.connection.add_index :users, ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true, where: 'reset_password_token IS NOT NULL', opclass: :text_pattern_ops end + + ActiveRecord::Base.connection.execute('REINDEX INDEX index_users_on_unconfirmed_email;') if ActiveRecord::Migrator.current_version >= 2023_07_02_151753 end def deduplicate_users_process_confirmation_token @@ -541,6 +548,11 @@ module Mastodon::CLI ActiveRecord::Base.connection.add_index :webhooks, ['url'], name: 'index_webhooks_on_url', unique: true end + def deduplicate_software_updates! + # Not bothering with this, it's data that will be recovered with the scheduler + SoftwareUpdate.delete_all + end + def deduplicate_local_accounts!(accounts) accounts = accounts.sort_by(&:id).reverse From 865af28d5b85cb717b4b11d92b192656316787b9 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Thu, 28 Sep 2023 03:16:15 -0500 Subject: [PATCH 104/237] Fix retention dashboard not displaying correct month (#27180) --- app/javascript/mastodon/components/admin/Retention.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/admin/Retention.jsx b/app/javascript/mastodon/components/admin/Retention.jsx index 7bef96d8c4..2f56710682 100644 --- a/app/javascript/mastodon/components/admin/Retention.jsx +++ b/app/javascript/mastodon/components/admin/Retention.jsx @@ -9,11 +9,12 @@ import api from 'mastodon/api'; import { roundTo10 } from 'mastodon/utils/numbers'; const dateForCohort = cohort => { + const timeZone = 'UTC'; switch(cohort.frequency) { case 'day': - return ; + return ; default: - return ; + return ; } }; From 6978e337a83fd0ac6625b3fd0be9038cbb5238db Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 28 Sep 2023 10:39:38 +0200 Subject: [PATCH 105/237] Make notification respect reduce-motion (#27178) --- app/javascript/styles/mastodon/components.scss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 418a9cfeae..58bc430ce2 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9283,14 +9283,17 @@ noscript { 0 10px 15px -3px rgba($base-shadow-color, 0.25), 0 4px 6px -4px rgba($base-shadow-color, 0.25); cursor: default; - transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); - transform: translateZ(0); font-size: 15px; line-height: 21px; &.notification-bar-active { inset-inline-start: 1rem; } + + .no-reduce-motion & { + transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); + transform: translateZ(0); + } } .notification-bar-title { From 738c415c42d585c070f1ddd11e99c7b1f4469ccc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:44:16 +0200 Subject: [PATCH 106/237] New Crowdin Translations (automated) (#27168) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/fi.json | 230 +++++----- app/javascript/mastodon/locales/hy.json | 15 + app/javascript/mastodon/locales/lv.json | 2 +- config/locales/de.yml | 2 +- config/locales/devise.en-GB.yml | 24 +- config/locales/doorkeeper.fi.yml | 86 ++-- config/locales/en-GB.yml | 22 +- config/locales/fi.yml | 572 ++++++++++++------------ config/locales/hy.yml | 22 + config/locales/ko.yml | 2 +- config/locales/simple_form.en-GB.yml | 2 +- config/locales/simple_form.fi.yml | 68 +-- config/locales/simple_form.hy.yml | 1 + 14 files changed, 544 insertions(+), 506 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index acd53c28a7..76b37ef44b 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -383,7 +383,7 @@ "lists.new.create": "Neue Liste erstellen", "lists.new.title_placeholder": "Titel der neuen Liste", "lists.replies_policy.followed": "Alle folgenden Profile", - "lists.replies_policy.list": "Mitglieder*innen der Liste", + "lists.replies_policy.list": "Mitglieder der Liste", "lists.replies_policy.none": "Niemanden", "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten, denen du folgst", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2454bdf980..4aa46ec0fc 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -1,9 +1,9 @@ { - "about.blocks": "Moderoidut palvelimet", - "about.contact": "Yhteystiedot:", + "about.blocks": "Valvotut palvelimet", + "about.contact": "Yhteydenotto:", "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.", "about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu", - "about.domain_blocks.preamble": "Yleisesti Mastodonin avulla voidaan tarkastella minkä tahansa muun fediverse-palvelinten sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", + "about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", "about.domain_blocks.silenced.explanation": "Et yleensä näe tämän palvelimen profiileja ja sisältöä, jollet erityisesti etsi juuri sitä tai liity siihen seuraamalla.", "about.domain_blocks.silenced.title": "Rajoitettu", "about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta tai vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.", @@ -16,7 +16,7 @@ "account.badges.bot": "Botti", "account.badges.group": "Ryhmä", "account.block": "Estä @{name}", - "account.block_domain": "Estä palvelu {domain}", + "account.block_domain": "Estä verkkotunnus {domain}", "account.block_short": "Estä", "account.blocked": "Estetty", "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", @@ -25,11 +25,11 @@ "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee", "account.domain_blocked": "Verkkotunnus estetty", "account.edit_profile": "Muokkaa profiilia", - "account.enable_notifications": "Ilmoita kun käyttäjä @{name} julkaisee viestin", + "account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee", "account.endorse": "Suosittele profiilissasi", - "account.featured_tags.last_status_at": "Viimeisin viesti {date}", - "account.featured_tags.last_status_never": "Ei viestejä", - "account.featured_tags.title": "Käyttäjän {name} esillä olevat aihetunnisteet", + "account.featured_tags.last_status_at": "Viimeisin julkaisu {date}", + "account.featured_tags.last_status_never": "Ei julkaisuja", + "account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet", "account.follow": "Seuraa", "account.followers": "seuraaja(t)", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", @@ -54,21 +54,21 @@ "account.muted": "Mykistetty", "account.no_bio": "Kuvausta ei ole annettu.", "account.open_original_page": "Avaa alkuperäinen sivu", - "account.posts": "viesti(t)", - "account.posts_with_replies": "Viestit ja vastaukset", + "account.posts": "Julkaisut", + "account.posts_with_replies": "Julkaisut ja vastaukset", "account.report": "Raportoi @{name}", - "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla", + "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö napsauttamalla", "account.requested_follow": "{name} on pyytänyt lupaa seurata sinua", "account.share": "Jaa käyttäjän @{name} profiili", - "account.show_reblogs": "Näytä tehostukset käyttäjältä @{name}", - "account.statuses_counter": "{count, plural, one {{counter} viesti} other {{counter} viestiä}}", + "account.show_reblogs": "Näytä käyttäjän @{name} tehostukset", + "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", "account.unblock": "Poista esto: @{name}", "account.unblock_domain": "Salli palvelu {domain}", "account.unblock_short": "Poista esto", "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", - "account.unmute_notifications_short": "Kumoa ilmoitusten mykistys", + "account.unmute_notifications_short": "Poista ilmoitusten mykistys", "account.unmute_short": "Poista mykistys", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä", @@ -112,7 +112,7 @@ "column.community": "Paikallinen aikajana", "column.direct": "Yksityiset maininnat", "column.directory": "Selaa profiileja", - "column.domain_blocks": "Estetyt palvelut", + "column.domain_blocks": "Estetyt verkkotunnukset", "column.favourites": "Suosikit", "column.firehose": "Live-syötteet", "column.follow_requests": "Seuraamispyynnöt", @@ -120,7 +120,7 @@ "column.lists": "Listat", "column.mutes": "Mykistetyt käyttäjät", "column.notifications": "Ilmoitukset", - "column.pins": "Kiinnitetyt viestit", + "column.pins": "Kiinnitetyt julkaisut", "column.public": "Yleinen aikajana", "column_back_button.label": "Takaisin", "column_header.hide_settings": "Piilota asetukset", @@ -128,7 +128,7 @@ "column_header.moveRight_settings": "Siirrä saraketta oikealle", "column_header.pin": "Kiinnitä", "column_header.show_settings": "Näytä asetukset", - "column_header.unpin": "Poista kiinnitys", + "column_header.unpin": "Irrota", "column_subheading.settings": "Asetukset", "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", @@ -137,13 +137,13 @@ "compose.language.search": "Hae kieliä...", "compose.published.body": "Julkaisusi julkaistiin.", "compose.published.open": "Avaa", - "compose.saved.body": "Viesti tallennettu.", + "compose.saved.body": "Julkaisu tallennettu.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", - "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", + "compose_form.encryption_warning": "Mastodonin julkaisut eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", "compose_form.hashtag_warning": "Tätä julkaisua ei voi liittää aihetunnisteisiin, koska se ei ole julkinen. Vain näkyvyydeltään julkisiksi määritettyjä julkaisuja voidaan hakea aihetunnisteiden avulla.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", - "compose_form.placeholder": "Mitä sinulla on mielessäsi?", + "compose_form.placeholder": "Mitä mietit?", "compose_form.poll.add_option": "Lisää valinta", "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.option_placeholder": "Valinta {number}", @@ -167,24 +167,24 @@ "confirmations.cancel_follow_request.confirm": "Peruuta pyyntö", "confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata profiilia {name}?", "confirmations.delete.confirm": "Poista", - "confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?", + "confirmations.delete.message": "Haluatko varmasti poistaa tämän julkaisun?", "confirmations.delete_list.confirm": "Poista", - "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?", + "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan pysyvästi?", "confirmations.discard_edit_media.confirm": "Hylkää", "confirmations.discard_edit_media.message": "Sinulla on tallentamattomia muutoksia median kuvaukseen tai esikatseluun, hylätäänkö ne silti?", "confirmations.domain_block.confirm": "Estä koko verkkotunnus", - "confirmations.domain_block.message": "Haluatko aivan varmasti estää palvelun {domain} täysin? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimenpide. Et näe kyseisen sisältöä kyseiseltä verkkoalueelta missään julkisissa aikajanoissa tai ilmoituksissa. Tälle verkkoalueelle kuuluvat seuraajasi poistetaan.", + "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkkotunnuksen {domain}? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimi. Et näe sisältöä tästä verkkotunnuksesta millään julkisilla aikajanoilla tai ilmoituksissa. Tähän verkkotunnukseen kuuluvat seuraajasi poistetaan.", "confirmations.edit.confirm": "Muokkaa", - "confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?", + "confirmations.edit.message": "Jos muokkaat viestiä nyt, se korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.logout.confirm": "Kirjaudu ulos", "confirmations.logout.message": "Haluatko varmasti kirjautua ulos?", "confirmations.mute.confirm": "Mykistä", "confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta – mukaan lukien ne, joissa heidät mainitaan – sallien heidän yhä nähdä julkaisusi ja seurata sinua.", - "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?", + "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", - "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.", + "confirmations.redraft.message": "Haluatko varmasti poistaa julkaisun ja tehdä siitä luonnoksen? Suosikit ja tehostukset menetetään, ja alkuperäisen julkaisun vastaukset jäävät orvoiksi.", "confirmations.reply.confirm": "Vastaa", - "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", + "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.unfollow.confirm": "Lopeta seuraaminen", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta profiilia {name}?", "conversation.delete": "Poista keskustelu", @@ -193,18 +193,18 @@ "conversation.with": "{names} kanssa", "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", - "directory.federated": "Koko tunnettu fediverse", + "directory.federated": "Koko tunnettu fediversumi", "directory.local": "Vain palvelusta {domain}", "directory.new_arrivals": "Äskettäin saapuneet", "directory.recently_active": "Hiljattain aktiiviset", "disabled_account_banner.account_settings": "Tilin asetukset", "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", - "dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.", + "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.", + "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", - "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.", + "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", @@ -218,7 +218,7 @@ "emoji_button.objects": "Esineet", "emoji_button.people": "Ihmiset", "emoji_button.recent": "Usein käytetyt", - "emoji_button.search": "Etsi...", + "emoji_button.search": "Hae...", "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu ja paikat", @@ -231,20 +231,20 @@ "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!", - "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.", - "empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.", - "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.", - "empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.", + "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkijulkaisua. Kun lisäät sellaisen, näkyy se tässä.", + "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä julkaisua suosikkeihinsa. Kun joku tekee niin, tulee hän tähän näkyviin.", + "empty_column.follow_requests": "Et ole vielä vastaanottanut seuraamispyyntöjä. Saamasi pyynnöt näkyvät täällä.", + "empty_column.followed_tags": "Et seuraa vielä yhtäkään aihetunnistetta. Kun alat seurata, ne tulevat tähän näkyviin.", "empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.", "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.", - "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.", + "empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.", "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.", - "error.unexpected_crash.next_steps": "Kokeile sivun päivitystä. Jos se ei auta, voi Mastodonin käyttö silti olla mahdollista eri selaimella tai natiivilla sovelluksella.", + "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos se ei auta, voi Mastodonin käyttö ehkä onnistua eri selaimella tai natiivisovelluksella.", "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.", "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", @@ -254,28 +254,28 @@ "explore.trending_links": "Uutiset", "explore.trending_statuses": "Julkaisut", "explore.trending_tags": "Aihetunnisteet", - "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.", - "filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!", - "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut ja sinun on muutettava viimeistä voimassaolon päivää, jotta sitä voidaan käyttää.", + "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske kontekstia, jossa olet tarkastellut tätä julkaisua. Jos haluat, että julkaisu suodatetaan myös tässä kontekstissa, sinun pitää muokata suodatinta.", + "filter_modal.added.context_mismatch_title": "Konteksti ei täsmää!", + "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut, joten sinun on muutettava viimeistä voimassaolopäivää, jotta suodatin on voimassa.", "filter_modal.added.expired_title": "Vanhentunut suodatin!", - "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin siirtymällä {settings_link}.", + "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin kohdassa {settings_link}.", "filter_modal.added.review_and_configure_title": "Suodattimen asetukset", "filter_modal.added.settings_link": "asetukset-sivulle", - "filter_modal.added.short_explanation": "Tämä viesti on lisätty seuraavaan suodatinluokkaan: {title}.", + "filter_modal.added.short_explanation": "Tämä julkaisu on lisätty seuraavaan suodatinluokkaan: {title}.", "filter_modal.added.title": "Suodatin lisätty!", - "filter_modal.select_filter.context_mismatch": "ei sovellu tähän asiayhteyteen", + "filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin", "filter_modal.select_filter.expired": "vanhentunut", "filter_modal.select_filter.prompt_new": "Uusi luokka: {name}", "filter_modal.select_filter.search": "Etsi tai luo", - "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi luokka", - "filter_modal.select_filter.title": "Suodata tämä viesti", - "filter_modal.title.status": "Suodata viesti", + "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", + "filter_modal.select_filter.title": "Suodata tämä julkaisu", + "filter_modal.title.status": "Suodata julkaisu", "firehose.all": "Kaikki", "firehose.local": "Tämä palvelin", "firehose.remote": "Muut palvelimet", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", - "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, on palvelun {domain} ylläpito arvioinut, että saatat olla halukas tarkistamaan nämä seurauspyynnöt erikseen.", + "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.", "followed_tags": "Seuratut aihetunnisteet", "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", @@ -307,17 +307,17 @@ "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä tehostukset", "home.column_settings.show_replies": "Näytä vastaukset", - "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:", + "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamiasi aihetunnisteita ja käyttäjiä sekä heidän tehostamiaan julkaisuja. Jos se tuntuu liian hiljaiselta, saatat haluta:", "home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.", - "home.hide_announcements": "Piilota ilmoitukset", + "home.hide_announcements": "Piilota tiedotteet", "home.pending_critical_update.body": "Päivitäthän Mastodon-palvelimen mahdollisimman pian!", "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", - "home.show_announcements": "Näytä ilmoitukset", - "interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.", - "interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.", - "interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.", - "interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.", + "home.show_announcements": "Näytä tiedotteet", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", + "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", + "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", "interaction_modal.login.action": "Palaa aloitussivulle", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", @@ -326,15 +326,15 @@ "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", - "interaction_modal.title.follow": "Seuraa {name}", - "interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä", - "interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin", + "interaction_modal.title.follow": "Seuraa käyttäjää {name}", + "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", + "interaction_modal.title.reply": "Vastaa käyttäjän {name} julkaisuun", "intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}", "intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}", "intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}", "keyboard_shortcuts.back": "Siirry takaisin", "keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo", - "keyboard_shortcuts.boost": "Tehosta viestiä", + "keyboard_shortcuts.boost": "Tehosta julkaisua", "keyboard_shortcuts.column": "Kohdista sarakkeeseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", @@ -342,7 +342,7 @@ "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin", - "keyboard_shortcuts.favourites": "Avaa suosikkilista", + "keyboard_shortcuts.favourites": "Avaa suosikkiluettelo", "keyboard_shortcuts.federated": "Avaa yleinen aikajana", "keyboard_shortcuts.heading": "Pikanäppäimet", "keyboard_shortcuts.home": "Avaa kotiaikajana", @@ -354,16 +354,16 @@ "keyboard_shortcuts.my_profile": "Avaa profiilisi", "keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko", "keyboard_shortcuts.open_media": "Avaa media", - "keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä", + "keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo", "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili", - "keyboard_shortcuts.reply": "Vastaa viestiin", - "keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä", + "keyboard_shortcuts.reply": "Vastaa julkaisuun", + "keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo", "keyboard_shortcuts.search": "siirry hakukenttään", "keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä", "keyboard_shortcuts.start": "avaa \"Aloitus\"", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", - "keyboard_shortcuts.toot": "Luo uusi viesti", + "keyboard_shortcuts.toot": "Luo uusi julkaisu", "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä", "keyboard_shortcuts.up": "Siirry listassa ylöspäin", "lightbox.close": "Sulje", @@ -372,19 +372,19 @@ "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", "limited_account_hint.action": "Näytä profiili joka tapauksessa", - "limited_account_hint.title": "Palvelun {domain} ylläpito on piilottanut tämän profiilin.", + "limited_account_hint.title": "Palvelun {domain} valvojat ovat piilottaneet tämän profiilin.", "link_preview.author": "Julkaissut {name}", - "lists.account.add": "Lisää listaan", - "lists.account.remove": "Poista listasta", + "lists.account.add": "Lisää listalle", + "lists.account.remove": "Poista listalta", "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", - "lists.edit.submit": "Vaihda otsikko", - "lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi", + "lists.edit.submit": "Vaihda nimi", + "lists.exclusive": "Piilota nämä julkaisut kotisyötteestä", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", - "lists.replies_policy.followed": "Jokainen seurattu käyttäjä", - "lists.replies_policy.list": "Listan jäsenet", - "lists.replies_policy.none": "Ei kukaan", + "lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle", + "lists.replies_policy.list": "Listan jäsenille", + "lists.replies_policy.none": "Ei kellekään", "lists.replies_policy.title": "Näytä vastaukset:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listasi", @@ -400,23 +400,23 @@ "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", - "navigation_bar.compose": "Julkaise", + "navigation_bar.compose": "Kirjoita uusi julkaisu", "navigation_bar.direct": "Yksityiset maininnat", "navigation_bar.discover": "Löydä uutta", - "navigation_bar.domain_blocks": "Estetyt palvelut", + "navigation_bar.domain_blocks": "Estetyt verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.explore": "Selaa", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", "navigation_bar.followed_tags": "Seuratut aihetunnisteet", - "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", + "navigation_bar.follows_and_followers": "Seuratut ja seuraajat", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit sekä tietyt muut sivut avataan oletuksena perinteisessä käyttöliittymässä.", + "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen web-käyttöliittymään.", "navigation_bar.personal": "Henkilökohtainen", - "navigation_bar.pins": "Kiinnitetyt viestit", + "navigation_bar.pins": "Kiinnitetyt julkaisut", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.search": "Haku", @@ -430,9 +430,9 @@ "notification.mention": "{name} mainitsi sinut", "notification.own_poll": "Äänestyksesi on päättynyt", "notification.poll": "Äänestys, johon osallistuit, on päättynyt", - "notification.reblog": "{name} tehosti viestiäsi", - "notification.status": "{name} julkaisi juuri viestin", - "notification.update": "{name} muokkasi viestiä", + "notification.reblog": "{name} tehosti julkaisuasi", + "notification.status": "{name} julkaisi juuri", + "notification.update": "{name} muokkasi julkaisua", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.admin.report": "Uudet ilmoitukset:", @@ -446,7 +446,7 @@ "notifications.column_settings.follow_request": "Uudet seuraamispyynnöt:", "notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.poll": "Äänestyksen tulokset:", - "notifications.column_settings.push": "Push-ilmoitukset", + "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", @@ -477,7 +477,7 @@ "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", - "onboarding.follows.title": "Suosittua Mastodonissa", + "onboarding.follows.title": "Mukauta kotisyötettäsi", "onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!", "onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}", "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:", @@ -494,7 +494,7 @@ "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", - "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!", + "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", @@ -510,15 +510,15 @@ "poll.votes": "{votes, plural, one {# ääni} other {# ääntä}}", "poll_button.add_poll": "Lisää äänestys", "poll_button.remove_poll": "Poista äänestys", - "privacy.change": "Muuta viestin näkyvyyttä", - "privacy.direct.long": "Näkyvissä vain mainituille käyttäjille", - "privacy.direct.short": "Vain mainitut henkilöt", - "privacy.private.long": "Näkyvissä vain seuraajille", + "privacy.change": "Muuta julkaisun näkyvyyttä", + "privacy.direct.long": "Näkyy vain mainituille käyttäjille", + "privacy.direct.short": "Vain mainitut käyttäjät", + "privacy.private.long": "Näkyy vain seuraajille", "privacy.private.short": "Vain seuraajat", - "privacy.public.long": "Näkyvissä kaikille", + "privacy.public.long": "Näkyy kaikille", "privacy.public.short": "Julkinen", - "privacy.unlisted.long": "Näkyvissä kaikille, mutta jättäen pois hakemisen mahdollisuus", - "privacy.unlisted.short": "Listaamaton julkinen", + "privacy.unlisted.long": "Näkyy kaikille, mutta jää pois löytämisominaisuuksista", + "privacy.unlisted.short": "Listaamaton", "privacy_policy.last_updated": "Viimeksi päivitetty {date}", "privacy_policy.title": "Tietosuojakäytäntö", "refresh": "Päivitä", @@ -539,11 +539,11 @@ "report.block": "Estä", "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.", "report.categories.legal": "Lakiasiat", - "report.categories.other": "muu", + "report.categories.other": "Muu", "report.categories.spam": "Roskaposti", "report.categories.violation": "Sisältö rikkoo yhtä tai useampaa palvelimen sääntöä", - "report.category.subtitle": "Valitse se, mikä sopii parhaiten", - "report.category.title": "Kerro meille miksi tämä {type} pitää raportoida", + "report.category.subtitle": "Valitse sopivin", + "report.category.title": "Kerro meille, miksi tämä {type} pitää raportoida", "report.category.title_account": "profiili", "report.category.title_status": "julkaisu", "report.close": "Valmis", @@ -551,7 +551,7 @@ "report.forward": "Välitä kohteeseen {target}", "report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?", "report.mute": "Mykistä", - "report.mute_explanation": "Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.", + "report.mute_explanation": "Et näe hänen julkaisujaan. Hän voi silti seurata sinua ja nähdä julkaisusi. Hän ei tiedä, että hänet on mykistetty.", "report.next": "Seuraava", "report.placeholder": "Lisäkommentit", "report.reasons.dislike": "En pidä siitä", @@ -564,10 +564,10 @@ "report.reasons.spam_description": "Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset", "report.reasons.violation": "Se rikkoo palvelimen sääntöjä", "report.reasons.violation_description": "Tiedät, että se rikkoo tiettyjä sääntöjä", - "report.rules.subtitle": "Valitse kaikki jotka sopivat", + "report.rules.subtitle": "Valitse kaikki sopivat", "report.rules.title": "Mitä sääntöjä rikotaan?", "report.statuses.subtitle": "Valitse kaikki sopivat", - "report.statuses.title": "Onko olemassa yhtään viestiä, jotka tukevat tätä raporttia?", + "report.statuses.title": "Onko julkaisuja, jotka tukevat tätä raporttia?", "report.submit": "Lähetä", "report.target": "Raportoidaan {target}", "report.thanks.take_action": "Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:", @@ -576,7 +576,7 @@ "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.", "report.unfollow": "Lopeta käyttäjän @{name} seuraaminen", "report.unfollow_explanation": "Seuraat tätä tiliä. Estääksesi tilin viestejä näykymästä kotisyötteessäsi, lopeta sen seuraaminen.", - "report_notification.attached_statuses": "{count, plural, one {{count} viesti} other {{count} viestiä}} liitteenä", + "report_notification.attached_statuses": "{count, plural, one {{count} julkaisu} other {{count} julkaisua}} liitteenä", "report_notification.categories.legal": "Laillinen", "report_notification.categories.other": "Muu", "report_notification.categories.spam": "Roskaposti", @@ -588,7 +588,7 @@ "search.quick_action.go_to_account": "Avaa profiili {x}", "search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}", "search.quick_action.open_url": "Avaa URL-osoite Mastodonissa", - "search.quick_action.status_search": "Julkaisut, jotka vastaavat hakua {x}", + "search.quick_action.status_search": "Julkaisut haulla {x}", "search.search_or_paste": "Etsi tai kirjoita URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", "search_popout.language_code": "ISO-kielikoodi", @@ -602,8 +602,8 @@ "search_results.hashtags": "Aihetunnisteet", "search_results.nothing_found": "Näille hakusanoille ei löytynyt mitään", "search_results.see_all": "Näytä kaikki", - "search_results.statuses": "Viestit", - "search_results.title": "Etsi {q}", + "search_results.statuses": "Julkaisut", + "search_results.title": "Hae {q}", "server_banner.about_active_users": "Palvelinta käyttäneet ihmiset viimeisen 30 päivän aikana (kuukauden aktiiviset käyttäjät)", "server_banner.active_users": "aktiivista käyttäjää", "server_banner.administered_by": "Ylläpitäjä:", @@ -613,15 +613,15 @@ "sign_in_banner.create_account": "Luo tili", "sign_in_banner.sign_in": "Kirjaudu", "sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy", - "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.", - "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", - "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot", - "status.admin_status": "Avaa viesti moderointinäkymässä", + "sign_in_banner.text": "Kirjaudu sisään, niin voit seurata profiileja tai aihetunnisteita, lisätä julkaisuja suosikkeihin, jakaa julkaisuja ja vastata niihin. Voit olla vuorovaikutuksessa myös eri palvelimella olevalta tililtäsi.", + "status.admin_account": "Avaa tilin @{name} valvontanäkymä", + "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", + "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", "status.bookmark": "Tallenna kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", - "status.cannot_reblog": "Tätä viestiä ei voi tehostaa", - "status.copy": "Kopioi linkki viestiin", + "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", + "status.copy": "Kopioi linkki julkaisuun", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -630,8 +630,8 @@ "status.edited": "Muokattu {date}", "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}", "status.embed": "Upota", - "status.favourite": "Merkitse suosikiksi", - "status.filter": "Suodata tämä viesti", + "status.favourite": "Suosikki", + "status.filter": "Suodata tämä julkaisu", "status.filtered": "Suodatettu", "status.hide": "Piilota julkaisu", "status.history.created": "{name} luotu {date}", @@ -644,21 +644,21 @@ "status.more": "Lisää", "status.mute": "Mykistä @{name}", "status.mute_conversation": "Mykistä keskustelu", - "status.open": "Laajenna viesti", + "status.open": "Laajenna julkaisu", "status.pin": "Kiinnitä profiiliin", "status.pinned": "Kiinnitetty julkaisu", "status.read_more": "Näytä enemmän", "status.reblog": "Tehosta", "status.reblog_private": "Tehosta alkuperäiselle yleisölle", "status.reblogged_by": "{name} tehosti", - "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä viestiä. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.", "status.redraft": "Poista ja palauta muokattavaksi", "status.remove_bookmark": "Poista kirjanmerkki", "status.replied_to": "Vastattu {name}", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", "status.report": "Raportoi @{name}", - "status.sensitive_warning": "Arkaluontoista sisältöä", + "status.sensitive_warning": "Arkaluonteista sisältöä", "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", @@ -672,7 +672,7 @@ "status.uncached_media_warning": "Esikatselu ei ole käytettävissä", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", - "subscribed_languages.lead": "Vain valituilla kielillä julkaistut viestit näkyvät etusivullasi ja aikajanalla muutoksen jälkeen. Valitse ei mitään, jos haluat vastaanottaa viestejä kaikilla kielillä.", + "subscribed_languages.lead": "Vain valituilla kielillä kirjoitetut julkaisut näkyvät koti- ja lista-aikajanoillasi muutoksen jälkeen. Älä valitse mitään, jos haluat nähdä julkaisuja kaikilla kielillä.", "subscribed_languages.save": "Tallenna muutokset", "subscribed_languages.target": "Vaihda tilatut kielet {target}", "tabs_bar.home": "Koti", @@ -685,7 +685,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.", "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", - "timeline_hint.resources.statuses": "Vanhemmat viestit", + "timeline_hint.resources.statuses": "Vanhemmat julkaisut", "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", @@ -711,7 +711,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", - "upload_modal.preparing_ocr": "Valmistellaan OCR…", + "upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", @@ -725,5 +725,5 @@ "video.mute": "Mykistä ääni", "video.pause": "Keskeytä", "video.play": "Toista", - "video.unmute": "Poista äänen mykistys" + "video.unmute": "Palauta ääni" } diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index e61aa773dc..776991b014 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -17,6 +17,7 @@ "account.blocked": "Արգելափակուած է", "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.cancel_follow_request": "Withdraw follow request", + "account.direct": "Մասնաւոր յիշատակում @{name}", "account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել հաշիւը", @@ -85,9 +86,11 @@ "column.blocks": "Արգելափակուած օգտատէրեր", "column.bookmarks": "Էջանիշեր", "column.community": "Տեղական հոսք", + "column.direct": "Մասնաւոր յիշատակումներ", "column.directory": "Զննել անձնական էջերը", "column.domain_blocks": "Թաքցուած տիրոյթները", "column.favourites": "Հաւանածներ", + "column.firehose": "Հոսքեր", "column.follow_requests": "Հետեւելու հայցեր", "column.home": "Հիմնական", "column.lists": "Ցանկեր", @@ -135,6 +138,7 @@ "confirmations.block.block_and_report": "Արգելափակել եւ բողոքել", "confirmations.block.confirm": "Արգելափակել", "confirmations.block.message": "Վստա՞հ ես, որ ուզում ես արգելափակել {name}֊ին։", + "confirmations.cancel_follow_request.confirm": "Կասեցնել հայցը", "confirmations.delete.confirm": "Ջնջել", "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս գրառումը։", "confirmations.delete_list.confirm": "Ջնջել", @@ -216,6 +220,8 @@ "filter_modal.select_filter.search": "Որոնել կամ ստեղծել", "filter_modal.select_filter.title": "Զտել այս գրառումը", "firehose.all": "Բոլորը", + "firehose.local": "Այս հանգոյցը", + "firehose.remote": "Այլ հանգոյցներ", "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", @@ -246,6 +252,8 @@ "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", "home.show_announcements": "Ցուցադրել յայտարարութիւնները", + "interaction_modal.on_another_server": "Այլ հանգոյցում", + "interaction_modal.on_this_server": "Այս հանգոյցում", "interaction_modal.title.favourite": "Հաւանել {name}-ի գրառումը", "interaction_modal.title.follow": "Հետեւել {name}-ին", "interaction_modal.title.reblog": "Տարածել {name}-ի գրառումը", @@ -316,6 +324,7 @@ "navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.community_timeline": "Տեղական հոսք", "navigation_bar.compose": "Ստեղծել նոր գրառում", + "navigation_bar.direct": "Մասնաւոր յիշատակումներ", "navigation_bar.discover": "Բացայայտել", "navigation_bar.domain_blocks": "Թաքցուած տիրոյթներ", "navigation_bar.edit_profile": "Խմբագրել հաշիւը", @@ -451,11 +460,15 @@ "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "Այլ", "report_notification.categories.spam": "Սպամ", + "search.no_recent_searches": "Որոնման պատմութիւն չկայ", "search.placeholder": "Փնտրել", "search.search_or_paste": "Որոնել կամ դնել URL", + "search_popout.options": "Որոնման տեսակները", + "search_popout.recent": "Վերջին որոնումները", "search_results.accounts": "Հաշիւներ", "search_results.all": "Բոլորը", "search_results.hashtags": "Պիտակներ", + "search_results.see_all": "Տեսնել բոլորը", "search_results.statuses": "Գրառումներ", "search_results.title": "Որոնել {q}-ն", "server_banner.active_users": "ակտիւ մարդիկ", @@ -475,6 +488,8 @@ "status.copy": "Պատճէնել գրառման յղումը", "status.delete": "Ջնջել", "status.detailed_status": "Շղթայի ընդլայնուած դիտում", + "status.direct": "Մասնաւոր յիշատակում @{name}", + "status.direct_indicator": "Մասնաւոր յիշատակում", "status.edit": "Խմբագրել", "status.edited": "Խմբագրուել է՝ {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 2480f879ca..d35418e185 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -202,7 +202,7 @@ "dismissable_banner.community_timeline": "Šīs ir jaunākās publiskās ziņas no personām, kuru kontus mitina {domain}.", "dismissable_banner.dismiss": "Atcelt", "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.", - "dismissable_banner.explore_statuses": "Šīs ir ziņas no visa sociālā tīkla, kas šodien kļūst arvien populārākas. Jaunākas ziņas ar vairāk uzlabojumiem un iecienītākajām ziņām tiek novērtētas augstāk.", + "dismissable_banner.explore_statuses": "Ieraksti, kas šobrīd gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti neseni ieraksti, kas pastiprināti un pievienoti izlasēm.", "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", "dismissable_banner.public_timeline": "Šīs ir jaunākās publiskās ziņas no lietotājiem sociālajā tīmeklī, kurām seko lietotāji domēnā {domain}.", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", diff --git a/config/locales/de.yml b/config/locales/de.yml index 69151b2e70..d72b0a608f 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1069,7 +1069,7 @@ de: cas: CAS saml: SAML register: Registrieren - registration_closed: "%{instance} akzeptiert keine neuen Mitglieder*innen" + registration_closed: "%{instance} akzeptiert keine neuen Mitglieder" resend_confirmation: Bestätigungslink erneut zusenden reset_password: Passwort zurücksetzen rules: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index 9a51d07576..e7ab9462dc 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -6,22 +6,22 @@ en-GB: send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. failure: - already_authenticated: You are already signed in. + already_authenticated: You are already logged in. inactive: Your account is not activated yet. invalid: Invalid %{authentication_keys} or password. last_attempt: You have one more attempt before your account is locked. locked: Your account is locked. not_found_in_database: Invalid %{authentication_keys} or password. pending: Your account is still under review. - timeout: Your session expired. Please sign in again to continue. - unauthenticated: You need to sign in or sign up before continuing. + timeout: Your session expired. Please log in again to continue. + unauthenticated: You need to log in or sign up before continuing. unconfirmed: You have to confirm your email address before continuing. mailer: confirmation_instructions: action: Verify email address action_with_app: Confirm and return to %{app} explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. - explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can login to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can log in to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. extra_html: Please also check out the rules of the server and our terms of service. subject: 'Mastodon: Confirmation instructions for %{instance}' title: Verify email address @@ -84,28 +84,28 @@ en-GB: no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. - updated: Your password has been changed successfully. You are now signed in. + updated: Your password has been changed successfully. You are now logged in. updated_not_active: Your password has been changed successfully. registrations: destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. signed_up: Welcome! You have signed up successfully. - signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. - signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_inactive: You have signed up successfully. However, we could not log you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not log you in because your account is locked. signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. updated: Your account has been updated successfully. sessions: - already_signed_out: Signed out successfully. - signed_in: Signed in successfully. - signed_out: Signed out successfully. + already_signed_out: Logged out successfully. + signed_in: Logged in successfully. + signed_out: Logged out successfully. unlocks: send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. - unlocked: Your account has been unlocked successfully. Please sign in to continue. + unlocked: Your account has been unlocked successfully. Please log in to continue. errors: messages: - already_confirmed: was already confirmed, please try signing in + already_confirmed: was already confirmed, please try logging in confirmation_period_expired: needs to be confirmed within %{period}, please request a new one expired: has expired, please request a new one not_found: not found diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 71958c5b3d..81b248ef2e 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -6,7 +6,7 @@ fi: name: Sovelluksen nimi redirect_uri: Uudelleenohjauksen URI scopes: Oikeudet - website: Sovelluksen verkkosivu + website: Sovelluksen verkkosivusto errors: models: doorkeeper/application: @@ -135,7 +135,7 @@ fi: media: Medialiitteet mutes: Mykistykset notifications: Ilmoitukset - push: Push-ilmoitukset + push: Puskuilmoitukset reports: Raportit search: Hae statuses: Viestit @@ -147,49 +147,49 @@ fi: application: title: OAuth-valtuutus tarvitaan scopes: - admin:read: lukea kaikkia tietoja palvelimelta - admin:read:accounts: lue arkaluontoinen sisältö kaikilta tileiltä - admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista kanonisesti sallituista sähköpostiosoitteista + admin:read: lue kaikkia palvelimen tietoja + admin:read:accounts: lue arkaluonteisia tietoja kaikista tileistä + admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista estetyistä kanonisista sähköpostiosoitteista admin:read:domain_allows: lue arkaluonteisia tietoja kaikista sallituista verkkotunnuksista admin:read:domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä verkkotunnuksista admin:read:email_domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä sähköpostiverkkotunnuksista admin:read:ip_blocks: lue arkaluonteisia tietoja kaikista estetyistä IP-osoitteista - admin:read:reports: lue arkaluonteiset tiedot kaikista raporteista ja raportoiduista tileistä - admin:write: muokata kaikkia tietoja palvelimella - admin:write:accounts: suorita moderointitoiminnot tileillä - admin:write:canonical_email_blocks: toteuta moderointitoimenpiteitä kanonisille sähköpostiosoite-estoille - admin:write:domain_allows: toteuta moderointitoimenpiteitä sallituille verkkotunnuksille - admin:write:domain_blocks: toteuta moderointitoimenpiteitä estetyille verkkotunnuksille - admin:write:email_domain_blocks: toteuta moderointitoimenpiteitä estetyille sähköpostiverkkotunnuksille - admin:write:ip_blocks: toteuta moderointitoimenpiteitä estetyille IP-osoitteille - admin:write:reports: suorita moderointitoiminnot raporteissa - crypto: käytä päästä päähän salausta - follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen - push: vastaanottaa push-ilmoituksesi - read: lukea tilin tietoja - read:accounts: nähdä tilin tiedot - read:blocks: katso lohkosi - read:bookmarks: katso kirjanmerkkisi - read:favourites: näytä suosikkisi - read:filters: katso suodattimesi - read:follows: katso ketä seuraat - read:lists: katso listasi - read:mutes: katso mykistyksesi - read:notifications: katso ilmoitukset - read:reports: katso raporttisi - read:search: haku sinun puolesta - read:statuses: katso kaikki viestit - write: julkaista puolestasi - write:accounts: muokata profiiliasi - write:blocks: estää tilit ja palvelimet - write:bookmarks: kirjanmerkki viestit - write:conversations: mykistä ja poistaa keskustelut + admin:read:reports: lue arkaluonteisia tietoja kaikista raporteista ja raportoiduista tileistä + admin:write: muokkaa kaikkia palvelimen tietoja + admin:write:accounts: suorita valvontatoimia tileille + admin:write:canonical_email_blocks: suorita valvontatoimia estetyille kanonisille sähköpostiosoitteille + admin:write:domain_allows: suorita valvontatoimia sallituille verkkotunnuksille + admin:write:domain_blocks: suorita valvontatoimia estetyille verkkotunnuksille + admin:write:email_domain_blocks: suorita valvontatoimia estetyille sähköpostiverkkotunnuksille + admin:write:ip_blocks: suorita valvontatoimia estetyille IP-osoitteille + admin:write:reports: suorita valvontatoimia raporteille + crypto: käytä päästä päähän -salausta + follow: muokkaa tilin suhteita + push: vastaanota puskuilmoituksiasi + read: lue kaikkia tilin tietoja + read:accounts: katso tilien tietoja + read:blocks: katso estojasi + read:bookmarks: katso kirjanmerkkejäsi + read:favourites: katso suosikkejasi + read:filters: katso suodattimiasi + read:follows: katso seurattujasi + read:lists: katso listojasi + read:mutes: katso mykistyksiäsi + read:notifications: katso ilmoituksiasi + read:reports: katso raporttejasi + read:search: hae puolestasi + read:statuses: katso kaikkia julkaisujasi + write: muokkaa kaikkia tilisi tietoja + write:accounts: muokkaa profiiliasi + write:blocks: estä tilejä ja verkkotunnuksia + write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut - write:filters: luoda suodattimia - write:follows: seurata ihmisiä - write:lists: luoda listoja - write:media: lähettää mediatiedostoja - write:mutes: mykistää ihmisiä ja keskusteluja - write:notifications: tyhjentää ilmoituksesi - write:reports: raportoi muille ihmisille - write:statuses: julkaise viestejä + write:filters: luo suodattimia + write:follows: seuraa käyttäjiä + write:lists: luo listoja + write:media: lähetä mediatiedostoja + write:mutes: mykistä käyttäjiä ja keskusteluja + write:notifications: tyhjennä ilmoituksesi + write:reports: raportoi muita käyttäjiä + write:statuses: julkaise julkaisuja diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index ca61644632..98a40c45cf 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1028,7 +1028,7 @@ en-GB: applications: created: Application successfully created destroyed: Application successfully deleted - logout: Logout + logout: Log out regenerate_token: Regenerate access token token_regenerated: Access token successfully regenerated warning: Be very careful with this data. Never share it with anyone! @@ -1055,7 +1055,7 @@ en-GB: link_to_webauth: Use your security key device log_in_with: Log in with login: Log in - logout: Logout + logout: Log out migrate_account: Move to a different account migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. or_log_in_with: Or log in with @@ -1089,8 +1089,8 @@ en-GB: new_confirmation_instructions_sent: You will receive a new e-mail with the confirmation link in a few minutes! title: Check your inbox sign_in: - preamble_html: Sign in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. - title: Sign in to %{domain} + preamble_html: Log in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. + title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted. @@ -1379,8 +1379,8 @@ en-GB: webauthn: security keys description_html: If you see activity that you don't recognise, consider changing your password and enabling two-factor authentication. empty: No authentication history available - failed_sign_in_html: Failed sign-in attempt with %{method} from %{ip} (%{browser}) - successful_sign_in_html: Successful sign-in with %{method} from %{ip} (%{browser}) + failed_sign_in_html: Failed login attempt with %{method} from %{ip} (%{browser}) + successful_sign_in_html: Successful login with %{method} from %{ip} (%{browser}) title: Authentication history mail_subscriptions: unsubscribe: @@ -1773,11 +1773,11 @@ en-GB: title: Archive takeout suspicious_sign_in: change_password: change your password - details: 'Here are details of the sign-in:' - explanation: We've detected a sign-in to your account from a new IP address. + details: 'Here are details of the login:' + explanation: We've detected a login to your account from a new IP address. further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure. subject: Your account has been accessed from a new IP address - title: A new sign-in + title: A new login warning: appeal: Submit an appeal appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}. @@ -1790,7 +1790,7 @@ en-GB: mark_statuses_as_sensitive: Some of your posts have been marked as sensitive by the moderators of %{instance}. This means that people will need to tap the media in the posts before a preview is displayed. You can mark media as sensitive yourself when posting in the future. sensitive: From now on, all your uploaded media files will be marked as sensitive and hidden behind a click-through warning. silence: You can still use your account but only people who are already following you will see your posts on this server, and you may be excluded from various discovery features. However, others may still manually follow you. - suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. + suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still log in to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. reason: 'Reason:' statuses: 'Posts cited:' subject: @@ -1825,7 +1825,7 @@ en-GB: invalid_otp_token: Invalid two-factor code otp_lost_help_html: If you lost access to both, you may get in touch with %{email} seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. - signed_in_as: 'Signed in as:' + signed_in_as: 'Logged in as:' verification: extra_instructions_html: Tip: The link on your website can be invisible. The important part is rel="me" which prevents impersonation on websites with user-generated content. You can even use a link tag in the header of the page instead of a, but the HTML must be accessible without executing JavaScript. here_is_how: Here's how diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5403f22473..8a5d72a661 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -12,24 +12,24 @@ fi: one: seuraaja other: seuraajaa following: seurattu(a) - instance_actor_flash: Tämä on virtuaalitili, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään yhdistämistarkoituksiin, eikä sitä tule jäädyttää. + 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} nothing_here: Täällä ei ole mitään! pin_errors: following: Sinun täytyy seurata henkilöä jota haluat tukea posts: - one: viesti + one: Julkaisu other: viestiä - posts_tab_heading: Viestit + posts_tab_heading: Julkaisut admin: account_actions: action: Suorita toimenpide - title: Suorita moderointitoiminto %{acct} + title: Suorita valvontatoimi käyttäjälle %{acct} account_moderation_notes: create: Jätä muistiinpano - created_msg: Moderointimerkinnän luonti onnistui! - destroyed_msg: Moderointimerkinnän poisto onnistui! + created_msg: Valvontamerkinnän luonti onnistui! + destroyed_msg: Valvontamerkinnän poisto onnistui! accounts: add_email_domain_block: Estä sähköpostidomain approve: Hyväksy @@ -48,7 +48,7 @@ fi: changed_msg: Rooli vaihdettu onnistuneesti! label: Vaihda roolia no_role: Ei roolia - title: Vaihda roolia käyttäjälle %{username} + title: Vaihda käyttäjän %{username} roolia confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan @@ -61,7 +61,7 @@ fi: disable_sign_in_token_auth: Poista sähköpostitunnuksen todennus käytöstä disable_two_factor_authentication: Poista 2FA käytöstä disabled: Poistettu käytöstä - display_name: Nimimerkki + display_name: Näyttönimi domain: Verkkotunnus edit: Muokkaa email: Sähköposti @@ -71,7 +71,7 @@ fi: enabled: Käytössä enabled_msg: Käyttäjän %{username} tili palautettu onnistuneesti käyttöön followers: Seuraajat - follows: Seuraa + follows: Seuratut header: Otsakekuva inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen @@ -94,9 +94,9 @@ fi: disabled: Ei käytössä pending: Odottavat silenced: Rajoitettu - suspended: Jäähyllä - title: Moderointi - moderation_notes: Moderointimerkinnät + suspended: Jäädytetty + title: Valvonta + moderation_notes: Valvontamerkinnät most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu @@ -104,7 +104,7 @@ fi: no_role_assigned: Roolia ei ole määritetty not_subscribed: Ei tilaaja pending: Odottaa tarkistusta - perform_full_suspension: Siirrä kokonaan jäähylle + perform_full_suspension: Jäädytä previous_strikes: Aiemmat varoitukset previous_strikes_description_html: one: Tällä tilillä on yksi varoitus. @@ -118,7 +118,7 @@ fi: reject: Hylkää rejected_msg: Käyttäjän %{username} rekisteröitymishakemus hylättiin remote_suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. - remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja tilin kaikki tiedot poistetaan %{date}. Ennen tätä ajankohtaa on kyseessä olevan palvelimen ylläpidolla mahdollisuus palauttaa tili ongelmitta. Jos puolestaan haluat poistaa tilin tietoineen heti, onnistuu se alta. + remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja kaikki tiedot poistetaan %{date}. Sitä ennen etäpalvelin voi palauttaa tilin ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. remove_avatar: Poista profiilikuva remove_header: Poista otsakekuva removed_avatar_msg: Käyttäjän %{username} avatar-kuva poistettu onnistuneesti @@ -144,21 +144,21 @@ fi: show: created_reports: Tämän tilin luomat raportit targeted_reports: Tästä tilistä tehdyt raportit - silence: Hiljennä - silenced: Mykistetty - statuses: Viestit + silence: Rajoita + silenced: Rajoitettu + statuses: Julkaisut strikes: Aiemmat varoitukset subscribe: Tilaa suspend: Jäädytä - suspended: Jäähyllä - suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit peruuttaa tilin jäädyttämisen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. - suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ilman haitallisia vaikutuksia. Jos haluat poistaa kaikki tilin tiedot välittömästi, voit tehdä sen alla. + suspended: Jäädytetty + suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit kumota tilin jäädytyksen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. + suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. title: Tilit unblock_email: Poista sähköpostiosoitteen esto unblocked_email_msg: Käyttäjän %{username} sähköpostiosoitteen esto kumottiin unconfirmed_email: Sähköpostia ei vahvistettu undo_sensitized: Kumoa pakotus arkaluonteiseksi tiliksi - undo_silenced: Peru hiljennys + undo_silenced: Kumoa rajoitus undo_suspension: Peru jäähy unsilenced_msg: Tilin %{username} rajoituksen kumoaminen onnistui unsubscribe: Lopeta tilaus @@ -167,7 +167,7 @@ fi: view_domain: Näytä verkkotunnuksen yhteenveto warn: Varoita web: Verkko - whitelisted: Sallittu federaatioon + whitelisted: Sallittu federoimaan action_logs: action_types: approve_appeal: Hyväksy valitus @@ -177,7 +177,7 @@ fi: change_role_user: Muuta käyttäjän roolia confirm_user: Vahvista käyttäjä create_account_warning: Luo varoitus - create_announcement: Luo ilmoitus + create_announcement: Luo tiedote create_canonical_email_block: Luo sähköpostin esto create_custom_emoji: Luo mukautettu emoji create_domain_allow: Luo verkkotunnuksen salliminen @@ -187,7 +187,7 @@ fi: create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus create_user_role: Luo rooli demote_user: Alenna käyttäjä - destroy_announcement: Poista ilmoitus + destroy_announcement: Poista tiedote destroy_canonical_email_block: Poista sähköpostin esto destroy_custom_emoji: Poista mukautettu emoji destroy_domain_allow: Poista verkkotunnuksen salliminen @@ -195,7 +195,7 @@ fi: destroy_email_domain_block: Poista sähköpostin verkkotunnuksen esto destroy_instance: Tyhjennä verkkotunnus destroy_ip_block: Poista IP-sääntö - destroy_status: Poista viesti + destroy_status: Poista julkaisu destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus destroy_user_role: Hävitä rooli disable_2fa_user: Poista kaksivaiheinen tunnistautuminen käytöstä @@ -215,77 +215,77 @@ fi: reset_password_user: Nollaa salasana resolve_report: Selvitä raportti sensitive_account: Pakotus arkaluontoiseksi tiliksi - silence_account: Hiljennä tili + silence_account: Rajoita tiliä suspend_account: Jäädytä tili unassigned_report: Peruuta raportin määritys unblock_email_account: Poista sähköpostiosoitteen esto unsensitive_account: Kumoa pakotus arkaluontoiseksi tiliksi - unsilence_account: Peruuta tilin rajoitus - unsuspend_account: Peruuta tilin jäädytys - update_announcement: Päivitä ilmoitus - update_custom_emoji: Päivitä muokattu emoji + unsilence_account: Kumoa tilin rajoitus + unsuspend_account: Kumoa tilin jäädytys + update_announcement: Päivitä tiedote + update_custom_emoji: Päivitä mukautettu emoji update_domain_block: Päivitä verkkotunnuksen esto update_ip_block: Päivitä IP-sääntö - update_status: Päivitä viesti + update_status: Päivitä julkaisu update_user_role: Päivitä rooli actions: - approve_appeal_html: "%{name} hyväksyi moderointipäätöksen muutoksenhaun lähettäjältä %{target}" + approve_appeal_html: "%{name} hyväksyi valvontapäätöksen valituksen käyttäjältä %{target}" approve_user_html: "%{name} hyväksyi käyttäjän rekisteröitymisen kohteesta %{target}" assigned_to_self_report_html: "%{name} otti raportin %{target} tehtäväkseen" change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen" change_role_user_html: "%{name} muutti käyttäjän %{target} roolia" confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" create_account_warning_html: "%{name} lähetti varoituksen käyttäjälle %{target}" - create_announcement_html: "%{name} loi uuden ilmoituksen %{target}" + create_announcement_html: "%{name} loi uuden tiedotteen %{target}" create_canonical_email_block_html: "%{name} esti sähköpostin hashilla %{target}" create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}" - create_domain_allow_html: "%{name} salli federaation verkkotunnuksella %{target}" + create_domain_allow_html: "%{name} salli federoinnin verkkotunnuksen %{target} kanssa" create_domain_block_html: "%{name} esti verkkotunnuksen %{target}" create_email_domain_block_html: "%{name} esti sähköpostin %{target}" create_ip_block_html: "%{name} loi IP-säännön %{target}" create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" create_user_role_html: "%{name} loi roolin %{target}" demote_user_html: "%{name} alensi käyttäjän %{target}" - destroy_announcement_html: "%{name} poisti ilmoituksen %{target}" + destroy_announcement_html: "%{name} poisti tiedotteen %{target}" destroy_canonical_email_block_html: "%{name} poisti sähköpostieston hashilla %{target}" destroy_custom_emoji_html: "%{name} poisti emojin %{target}" - destroy_domain_allow_html: "%{name} esti federaation verkkotunnuksella %{target}" + destroy_domain_allow_html: "%{name} kielsi federoinnin verkkotunnuksen %{target} kanssa" destroy_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" destroy_email_domain_block_html: "%{name} poisti sähköpostin verkkotunnuksen %{target} eston" destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}" destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" - destroy_status_html: "%{name} poisti käyttäjän %{target} viestin" + destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun" destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}" destroy_user_role_html: "%{name} poisti roolin %{target}" disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen" disable_custom_emoji_html: "%{name} poisti käytöstä emojin %{target}" disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" - enable_custom_emoji_html: "%{name} salli emojin %{target}" + enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" - reject_appeal_html: "%{name} hylkäsi moderointipäätöksen muutoksenhaun %{target}" + reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" reject_user_html: "%{name} hylkäsi käyttäjän rekisteröitymisen kohteesta %{target}" remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" reopen_report_html: "%{name} avasi uudelleen raportin %{target}" - resend_user_html: "%{name} lähetti vahvistusviestin sähköpostitse käyttäjälle %{target}" + resend_user_html: "%{name} lähetti vahvistussähköpostiviestin uudelleen käyttäjälle %{target}" reset_password_user_html: "%{name} palautti käyttäjän %{target} salasanan" resolve_report_html: "%{name} ratkaisi raportin %{target}" sensitive_account_html: "%{name} merkitsi käyttäjän %{target} median arkaluonteiseksi" - silence_account_html: "%{name} rajoitti käyttäjän %{target} tilin" - suspend_account_html: "%{name} siirsi käyttäjän %{target} jäähylle" + silence_account_html: "%{name} rajoitti käyttäjän %{target} tiliä" + suspend_account_html: "%{name} jäädytti käyttäjän %{target} tilin" unassigned_report_html: "%{name} peruutti raportin määrityksen %{target}" unblock_email_account_html: "%{name} poisti käyttäjän %{target} sähköpostiosoitteen eston" unsensitive_account_html: "%{name} poisti käyttäjän %{target} median arkaluonteisen merkinnän" - unsilence_account_html: "%{name} ei tehnyt rajoitusta %{target} tilille" - unsuspend_account_html: "%{name} perui käyttäjän %{target} jäähyn" - update_announcement_html: "%{name} päivitti ilmoituksen %{target}" + unsilence_account_html: "%{name} kumosi käyttäjän %{target} rajoituksen" + unsuspend_account_html: "%{name} kumosi käyttäjän %{target} tilin jäädytyksen" + update_announcement_html: "%{name} päivitti tiedotteen %{target}" update_custom_emoji_html: "%{name} päivitti emojin %{target}" update_domain_block_html: "%{name} päivitti verkkotunnuksen %{target} eston" update_ip_block_html: "%{name} muutti sääntöä IP-osoitteelle %{target}" - update_status_html: "%{name} päivitti viestin %{target}" + update_status_html: "%{name} päivitti käyttäjän %{target} julkaisun" update_user_role_html: "%{name} muutti roolia %{target}" deleted_account: poisti tilin empty: Lokeja ei löytynyt. @@ -293,43 +293,43 @@ fi: filter_by_user: Suodata käyttäjän mukaan title: Auditointiloki announcements: - destroyed_msg: Ilmoitus poistettu onnistuneesti! + destroyed_msg: Tiedote poistettu onnistuneesti! edit: - title: Muokkaa ilmoitusta - empty: Yhtään ilmoitusta ei löytynyt. - live: Suora + title: Muokkaa tiedotetta + empty: Tiedotteita ei löytynyt. + live: Julki new: - create: Luo ilmoitus - title: Uusi ilmoitus + create: Luo tiedote + title: Uusi tiedote publish: Julkaise - published_msg: Ilmoitus julkaistu onnistuneesti! - scheduled_for: Ajastettu %{time} - scheduled_msg: Ilmoitus on ajastettu julkaisua varten! - title: Ilmoitukset + published_msg: Tiedote julkaistu onnistuneesti! + scheduled_for: Ajoitettu %{time} + scheduled_msg: Tiedotteen julkaisu ajoitettu! + title: Tiedotteet unpublish: Lopeta julkaisu - unpublished_msg: Ilmoituksen julkaisu lopetettu! - updated_msg: Ilmoitus päivitetty onnistuneesti! + unpublished_msg: Tiedotteen julkaisu lopetettu onnistuneesti! + updated_msg: Tiedote päivitetty onnistuneesti! critical_update_pending: Kriittinen päivitys odottaa custom_emojis: - assign_category: Aseta kategoria + assign_category: Aseta luokka by_domain: Verkkotunnus copied_msg: Emojin paikallisen kopion luonti onnistui copy: Kopioi copy_failed_msg: Emojista ei voitu tehdä paikallista kopiota - create_new_category: Luo uusi kategoria - created_msg: Emojin luotu! + create_new_category: Luo uusi luokka + created_msg: Emojin luonti onnistui! delete: Poista - destroyed_msg: Emojo poistettu! + destroyed_msg: Emojon poisto onnistui! disable: Poista käytöstä disabled: Ei käytössä - disabled_msg: Emojin poisto käytöstä onnistui + disabled_msg: Emojin käytöstäpoisto onnistui emoji: Emoji enable: Ota käyttöön enabled: Käytössä enabled_msg: Emojin käyttöönotto onnistui image_hint: PNG tai GIF, enintään %{size} - list: Listaa - listed: Listassa + list: Lisää listalle + listed: Listalla new: title: Lisää uusi mukautettu emoji no_emoji_selected: Emojeita ei muutettu, koska yhtään ei valittu @@ -340,7 +340,7 @@ fi: title: Mukautetut emojit uncategorized: Luokittelemattomat unlist: Poista listalta - unlisted: Ei listassa + unlisted: Ei listalla update_failed_msg: Emojin päivitys epäonnistui updated_msg: Emojin päivitys onnistui! upload: Lähetä @@ -349,26 +349,26 @@ fi: interactions: vuorovaikutukset media_storage: Median tallennustila new_users: uudet käyttäjät - opened_reports: raportit avattu + opened_reports: avatut raportit pending_appeals_html: one: "%{count} vireillä oleva valitus" - other: "%{count} vireillä olevat valitukset" + other: "%{count} vireillä olevaa valitusta" pending_reports_html: one: "%{count} odottava raportti" - other: "%{count} odottavat raportit" + other: "%{count} odottavaa raporttia" pending_tags_html: - one: "%{count} odottava hashtagi" + one: "%{count} odottava aihetunniste" other: "%{count} odottavaa aihetunnistetta" pending_users_html: one: "%{count} odottava käyttäjä" - other: "%{count} odottavat käyttäjät" - resolved_reports: raportit ratkaistu + other: "%{count} odottavaa käyttäjää" + resolved_reports: ratkaistut raportit software: Ohjelmisto sources: Rekisteröitymisen lähteet space: Tilankäyttö title: Hallintapaneeli - top_languages: Aktiiviset kielet - top_servers: Aktiiviset palvelimet + top_languages: Aktiivisimmat kielet + top_servers: Aktiivisimmat palvelimet website: Sivusto disputes: appeals: @@ -376,8 +376,8 @@ fi: title: Valitukset domain_allows: add_new: Salli liitto verkkotunnuksella - created_msg: Verkkotunnus on onnistuneesti sallittu federaatiolle - destroyed_msg: Verkkotunnus on estetty federaatiossa + created_msg: Verkkotunnus on onnistuneesti sallittu federoinnille + destroyed_msg: Verkkotunnusta on kielletty federoimasta export: Vie import: Tuo undo: Estä liitto verkkotunnukselle @@ -389,34 +389,34 @@ fi: permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita. preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} ja sen aliverkkotunnukset. remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä. - stop_communication: Palvelimesi lopettaa näiden palvelinten viestinnän. + stop_communication: Palvelimesi lopettaa viestinnän näiden palvelinten kanssa. title: Vahvista verkkotunnuksen %{domain} esto undo_relationships: Tämä kumoaa näiden palvelimien ja sinun tilien välisen seurannan. created_msg: Verkkotunnuksen estoa käsitellään destroyed_msg: Verkkotunnuksen esto on peruttu domain: Verkkotunnus edit: Muokkaa verkkotunnuksen estoa - existing_domain_block: Olet jo asettanut tiukemmat rajoitukset %{name}. - existing_domain_block_html: Olet jo asettanut %{name} tiukemmat rajat ja sinun täytyy poistaa se ensin. + existing_domain_block: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}. + existing_domain_block_html: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}, joten sinun täytyy poistaa sen esto ensin. export: Vie import: Tuo new: create: Luo esto - hint: Verkkotunnuksen esto ei estä tilien luomista ja lisäämistä tietokantaan, mutta se soveltaa näihin tileihin automaattisesti määrättyjä moderointitoimia tilin luomisen jälkeen. + hint: Verkkotunnuksen esto ei estä tilien lisäämistä tietokantaan, mutta se soveltaa näihin tileihin takautuvasti ja automaattisesti tiettyjä valvontatoimia. severity: - desc_html: "Rajoita -valinta piilottaa tämän verkkoalueen tilien julkaisut heiltä, jotka eivät seuraa kyseisiä tilejä. Lopeta poistaa kaiken sisällön, median ja profiilien tiedot tämän verkkotunnuksen tileiltä palvelimellasi. Käytä valintaa Ei mitään, jos haluat vain estää mediatiedostojen julkaisemisen." + desc_html: Valinta Rajoita piilottaa tässä verkkotunnuksessa sijaitsevien tilien julkaisut kaikilta, jotka eivät seuraa näitä tilejä. Valinta Jäädytä poistaa palvelimeltasi kaikkien tässä verkkotunnuksessa sijaitsevien tilien sisällön, median ja profiilitiedot. Käytä valintaa Ei mitään, jos haluat vain hylätä mediatiedostot. noop: Ei mitään silence: Rajoita - suspend: Jäähy + suspend: Jäädytä title: Uusi verkkotunnuksen esto no_domain_block_selected: Verkkoalue-estoihin ei tehty muutoksia, koska valintoja ei tehty not_permitted: Nykyiset käyttöoikeutesi eivät kata tätä toimintoa obfuscate: Peitä verkkotunnuksen nimi - obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos verkkotunnuksen rajoitusten luettelo on käytössä + obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos julkinen verkkotunnusten rajoitusluettelo on käytössä private_comment: Yksityinen kommentti private_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta, valvojien sisäiseen käyttöön. public_comment: Julkinen kommentti - public_comment_hint: Kommentoi tätä verkkotunnukselle koskevaa rajoitusta suurelle yleisölle, jos verkkotunnusten luettelon mainonta on käytössä. + public_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta suurelle yleisölle, jos julkinen verkkotunnusten rajoitusluettelo on käytössä. reject_media: Hylkää mediatiedostot reject_media_hint: Poistaa paikallisesti tallennetut mediatiedostot eikä lataa niitä enää jatkossa. Ei merkitystä jäähyn kohdalla reject_reports: Hylkää raportit @@ -449,7 +449,7 @@ fi: no_file: Yhtäkään tiedostoa ei ole valittu export_domain_blocks: import: - description_html: Olet tuomassa järjestelmään luetteloa verkkoalue-estoista. Tarkista luettelo huolella – etenkin, ellet ole itse tehnyt listausta. + description_html: Olet tuomassa verkkotunnusten estoluetteloa. Tarkista luettelo huolella – etenkin, jos et ole laatinut sitä itse. existing_relationships_warning: Olemassa olevat seuraussuhteet private_comment_description_html: 'Tuodun estolistan alkuperän selvillä pitämiseksi, lisätään tietojen yhteyteen seuraava yksityinen kommentti: %{comment}' private_comment_template: Tuotu lähteestä %{source}, pvm %{date} @@ -459,13 +459,13 @@ fi: title: Tuo luettelo verkkoalue-estoista no_file: Yhtäkään tiedostoa ei ole valittu follow_recommendations: - description_html: "Suositusten noudattaminen auttaa uusia käyttäjiä löytämään nopeasti mielenkiintoista sisältöä.. Jos käyttäjä ei ole ollut vuorovaikutuksessa tarpeeksi muiden kanssa luodakseen henkilökohtaisia seuraajia, näitä muita tilejä suositellaan sen sijaan. Ne lasketaan uudelleen päivittäin yhdistelmästä tilejä, joilla on korkein viimeaikainen käyttö ja korkein paikallinen seuraajien määrä tietyllä kielellä." + description_html: "Seuraamissuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä." language: Kielelle status: Tila - suppress: Peitä noudata suosituksia - suppressed: Rajoitettu - title: Noudata suosituksia - unsuppress: Palauta seuraa suositus + suppress: Hylkää seuraamissuositus + suppressed: Hylätty + title: Seuraamissuositukset + unsuppress: Palauta seuraamissuositus instances: availability: description_html: @@ -490,7 +490,7 @@ fi: policies: reject_media: Hylkää media reject_reports: Hylkää raportit - silence: Rajoitus + silence: Rajoita suspend: Jäädytä policy: Käytännöt reason: Julkinen syy @@ -503,7 +503,7 @@ fi: instance_languages_dimension: Suosituimmat kielet instance_media_attachments_measure: tallennetut median liitteet instance_reports_measure: niitä koskevat raportit - instance_statuses_measure: tallennetut viestit + instance_statuses_measure: tallennetut julkaisut delivery: all: Kaikki clear: Tyhjennä toimitusvirheet @@ -522,12 +522,12 @@ fi: moderation: all: Kaikki limited: Rajoitettu - title: Moderointi + title: Valvonta private_comment: Yksityinen kommentti public_comment: Julkinen kommentti purge: Tyhjennä - purge_description_html: Jos uskot tämän verkkotunnuksen olevan offline-tilassa, voit poistaa kaikki tilitietueet ja niihin liittyvät tiedot sinun tallennustilasta. Tämä voi kestää jonkin aikaa. - title: Tiedossa olevat instanssit + purge_description_html: Jos uskot, että tämä verkkotunnus on offline-tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa. + title: Federointi total_blocked_by_us: Estetty meidän toimesta total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama @@ -562,11 +562,11 @@ fi: relays: add_new: Lisää uusi välittäjä delete: Poista - description_html: "federaatiovälittäjä on välityspalvelin, joka siirtää siihen liittyneiden palvelimien välillä suuria julksia viestimääriä. Tämä voi auttaa pieniä ja keskikokoisia palvelimia löytämään fediversen sisältöä, joka muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvelimien käyttäjiä manuaalisesti." + description_html: "Federointivälittäjä on välityspalvelin, joka siirtää suuria määriä julkisia julkaisuja siihen liittyneiden palvelinten välillä. Se voi auttaa pieniä ja keskisuuria palvelimia löytämään fediversumin sisältöä, mikä muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvalinten käyttäjiä manuaalisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Poissa käytöstä enable: Ota käyttöön - enable_hint: Kun tämä on otettu käyttöön, palvelimesi liittyy välittäjään ja vastaanottaa jatkossa kaikki sen jakelemat julkiset julkaisut sekä välittää omat julkiset julkaisunsa sille. + enable_hint: Kun tämä on otettu käyttöön, palvelimesi tilaa välittäjältä kaikki sen välittämät julkiset julkaisut ja alkaa lähettää omansa sille. enabled: Käytössä inbox_url: Välittäjän URL pending: Odotetaan välittäjän hyväksyntää @@ -586,13 +586,13 @@ fi: action_log: Tarkastusloki action_taken_by: Toimenpiteen tekijä actions: - delete_description_html: Ilmoitetut viestit poistetaan ja kirjataan varoitus, joka auttaa sinua saman tilin tulevista rikkomuksista. - mark_as_sensitive_description_html: Ilmoitettujen viestien media merkitään arkaluonteisiksi ja varoitus tallennetaan, jotta voit kärjistää saman tilin tulevia rikkomuksia. - other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja ilmoitetun tilin viestinnän mukauttamiseksi. - resolve_description_html: Ilmoitettua tiliä vastaan ei ryhdytä toimenpiteisiin, varoitusta ei kirjata ja raportti suljetaan. - silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai estävät sen manuaalisesti, mikä rajoittaa merkittävästi sen kattavuutta. Se voidaan aina palauttaa. Sulkee kaikki raportit tätä tiliä vastaan. - suspend_description_html: Tili ja kaikki sen sisältö eivät ole käytettävissä ja vuorovaikutus sen kanssa on mahdotonta, sekä lopulta poistetaan. Palautettava 30 päivän kuluessa. Sulkee kaikki raportit tätä tiliä vastaan. - actions_description_html: Päätä, mihin toimiin ryhdyt tämän ilmoituksen ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä vastaan, heille lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti luokka on valittuna. + delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja raportoidulle tilille kohdistuvan viestinnän mukauttamiseksi. + resolve_description_html: Ilmoitettua tiliä kohtaan ei ryhdytä toimiin, varoitusta ei kirjata ja raportti suljetaan. + silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai etsivät sen manuaalisesti, mikä rajoittaa merkittävästi sen tavoitettavuutta. Voidaan perua milloin vain. Sulkee kaikki tilin vastaiset raportit. + suspend_description_html: Tili ja mikään sen sisältö eivät ole käytettävissä, ja lopulta ne poistetaan, ja vuorovaikutus tilin kanssa on mahdotonta. Peruttavissa 30 päivän ajan. Sulkee kaikki tämän tilin vastaiset raportit. + actions_description_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä kohtaan, hänelle lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti-luokka on valittuna. actions_description_remote_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Tämä vaikuttaa vain siihen, miten palvelimesi kommunikoi tämän etätilin kanssa ja käsittelee sen sisältöä. add_to_report: Lisää raporttiin are_you_sure: Oletko varma? @@ -600,15 +600,15 @@ fi: assigned: Määritetty valvoja by_target_domain: Ilmoitetun tilin verkkotunnus cancel: Peruuta - category: Kategoria - category_description_html: Syy, miksi tämä tili ja/tai sisältö ilmoitettiin, mainitaan yhteydenotossa ilmoitettuun tiliin + category: Luokka + category_description_html: Syy siihen, miksi tämä tili ja/tai sisältö raportoitiin, mainitaan ilmoitetun tilin kanssa viestiessä comment: none: Ei mitään comment_description_html: 'Antaakseen lisätietoja %{name} kirjoitti:' confirm: Vahvista - confirm_action: Vahvista moderointitoiminto käyttäjää @%{acct} kohtaan + confirm_action: Vahvista valvontatoimi käyttäjää @%{acct} kohtaan created_at: Raportoitu - delete_and_resolve: Poista viestejä + delete_and_resolve: Poista julkaisut forwarded: Välitetty forwarded_to: Välitetty %{domain} mark_as_resolved: Merkitse ratkaistuksi @@ -638,22 +638,22 @@ fi: statuses_description_html: Loukkaava sisältö mainitaan ilmoitetun tilin yhteydessä summary: action_preambles: - delete_html: 'Olet aikeissa poistaa joitain käyttäjän @%{acct} viestejä. Tästä seuraa:' - mark_as_sensitive_html: 'Olet aikeissa merkitä joitain käyttäjän @%{acct} viestejä arkaluonteisiksi. Tästä seuraa:' + delete_html: 'Olet aikeissa poistaa käyttäjän @%{acct} julkaisuja. Tästä seuraa:' + mark_as_sensitive_html: 'Olet aikeissa merkitä käyttäjän @%{acct} julkaisuja arkaluonteisiksi. Tästä seuraa:' silence_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' - suspend_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' + suspend_html: 'Olet aikeissa jäädyttää käyttäjän @%{acct} tilin. Tästä seuraa:' actions: - delete_html: Loukkaavat viestit poistetaan - mark_as_sensitive_html: Loukkaavien viestien media merkitään arkaluonteiseksi - silence_html: Vakavasti rajoittaa käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain jo häntä seuraaville tai niille, jotka etsivät profiilia manuaalisesti - suspend_html: Rajoita @%{acct}, jolloin heidän profiilinsa ja sisällönsä ei ole käytettävissä ja on mahdotonta olla vuorovaikutuksessa + delete_html: Poista loukkaavat julkaisut + mark_as_sensitive_html: Merkitse loukkaavien julkaisujen media arkaluonteiseksi + silence_html: Rajoita merkittävästi käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain niille, jotka jo seuraavat tiliä tai etsivät sen manuaalisesti + suspend_html: Jäädytä @%{acct}, jolloin hänen profiilinsa ja sisältönsä ei ole käytettävissä ja hänen kanssaan on mahdotonta olla vuorovaikutuksessa close_report: 'Merkitse raportti #%{id} selvitetyksi' close_reports_html: Merkitse kaikki käyttäjään @%{acct} kohdistuvat raportit ratkaistuiksi - delete_data_html: Poista @%{acct}profiili ja sisältö 30 päivän kuluttua, ellei jäädytystä tällä välin peruuteta + delete_data_html: Poista käyttäjän @%{acct} profiili ja sen sisältö 30 päivän kuluttua, ellei jäädytystä sillä välin kumota preview_preamble_html: "@%{acct} saa varoituksen, jonka sisältö on seuraava:" record_strike_html: Tallenna varoitus @%{acct} vastaan, joka auttaa sinua selvittämään tulevia rikkomuksia tältä tililtä send_email_html: Lähetä käyttäjälle @%{acct} varoitus sähköpostitse - warning_placeholder: Valinnaiset lisäperustelut moderointitoimenpiteelle. + warning_placeholder: Valinnaiset lisäperustelut valvontatoimelle. target_origin: Raportoidun tilin alkuperä title: Raportit unassign: Määrittämätön @@ -670,7 +670,7 @@ fi: administration: Ylläpito devops: DevOps invites: Kutsut - moderation: Moderointi + moderation: Valvonta special: Erikois delete: Poista description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. @@ -687,34 +687,34 @@ fi: delete_user_data_description: Salli käyttäjien poistaa muiden käyttäjien tiedot viipymättä invite_users: Kutsu käyttäjiä invite_users_description: Sallii käyttäjien kutsua uusia ihmisiä palvelimelle - manage_announcements: Hallitse Ilmoituksia - manage_announcements_description: Salli käyttäjien hallita ilmoituksia palvelimella + manage_announcements: Hallitse tiedotteita + manage_announcements_description: Sallii käyttäjien hallita tiedotteita palvelimella manage_appeals: Hallitse valituksia - manage_appeals_description: Antaa käyttäjien tarkastella valvontatoimia koskevia valituksia - manage_blocks: Hallitse lohkoja - manage_blocks_description: Sallii käyttäjien estää sähköpostipalvelujen ja IP-osoitteiden käytön - manage_custom_emojis: Hallita mukautettuja hymiöitä - manage_custom_emojis_description: Salli käyttäjien hallita mukautettuja hymiöitä palvelimella - manage_federation: Hallita liitoksia - manage_federation_description: Sallii käyttäjien estää tai sallia liitoksen muiden verkkotunnusten kanssa ja hallita toimitusta - manage_invites: Hallita kutsuja + manage_appeals_description: Sallii käyttäjien tarkistaa valvontatoimia koskevia valituksia + manage_blocks: Hallitse estoja + manage_blocks_description: Sallii käyttäjien estää sähköpostipalveluntarjoajia ja IP-osoitteita + manage_custom_emojis: Hallitse mukautettuja emojeita + manage_custom_emojis_description: Sallii käyttäjien hallita mukautettuja emojeita palvelimella + manage_federation: Hallitse federointia + manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta + manage_invites: Hallitse kutsuja manage_invites_description: Sallii käyttäjien selata ja poistaa kutsulinkkejä käytöstä - manage_reports: Hallita raportteja - manage_reports_description: Sallii käyttäjien tarkastella raportteja ja suorittaa valvontatoimia niitä vastaan - manage_roles: Hallita rooleja + manage_reports: Hallitse raportteja + manage_reports_description: Sallii käyttäjien tarkistaa raportteja ja suorittaa valvontatoimia niitä vastaan + manage_roles: Hallitse rooleja manage_roles_description: Sallii käyttäjien hallita ja määrittää rooleja heidän alapuolellaan - manage_rules: Hallita sääntöjä - manage_rules_description: Sallii käyttäjien vaihtaa palvelinsääntöjä - manage_settings: Hallita asetuksia - manage_settings_description: Salli käyttäjien muuttaa sivuston asetuksia - manage_taxonomies: Hallita luokittelua + manage_rules: Hallitse sääntöjä + manage_rules_description: Sallii käyttäjien muuttaa palvelimen sääntöjä + manage_settings: Hallitse asetuksia + manage_settings_description: Sallii käyttäjien muuttaa sivuston asetuksia + manage_taxonomies: Hallitse luokittelua manage_taxonomies_description: Sallii käyttäjien tarkistaa nousussa olevan sisällön ja päivittää aihetunnisteiden asetuksia - manage_user_access: Hallita käyttäjän oikeuksia - manage_user_access_description: Sallii käyttäjien poistaa käytöstä muiden käyttäjien kaksivaiheisen todennuksen, muuttaa heidän sähköpostiosoitettaan ja nollata heidän salasanansa - manage_users: Hallita käyttäjiä - manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä vastaan - manage_webhooks: Hallita Webhookit - manage_webhooks_description: Sallii käyttäjien luoda webhookit hallinnollisiin tapahtumiin + manage_user_access: Hallitse käyttäjäoikeuksia + manage_user_access_description: Sallii käyttäjien poistaa muiden käyttäjien kaksivaiheinen todennus käytöstä, vaihtaa heidän sähköpostiosoitteensa ja nollata heidän salasanansa + manage_users: Hallitse käyttäjiä + manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä kohtaan + manage_webhooks: Hallitse webhookeja + manage_webhooks_description: Sallii käyttäjien luoda webhookeja hallinnollisiin tapahtumiin view_audit_log: Katsoa valvontalokia view_audit_log_description: Sallii käyttäjien nähdä palvelimen hallinnollisten toimien historian view_dashboard: Näytä koontinäyttö @@ -725,13 +725,13 @@ fi: rules: add_new: Lisää sääntö delete: Poista - description_html: Vaikka useimmat väittävät, että ovat lukenut ja hyväksyneet käyttöehdot niin yleensä ihmiset eivät lue niitä läpi ennen kuin ongelma syntyy. Tee helpoksi nähdä palvelimen säännöt yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä moniin erillisiin kohteisiin. + description_html: Vaikka useimmat väittävät, että ovat lukeneet ja hyväksyneet käyttöehdot, niin yleensä ihmiset eivät lue niitä läpi ennen kuin ilmenee ongelma. Helpota palvelimen sääntöjen näkemistä yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä useisiin erillisiin kohtiin. edit: Muokkaa sääntöä empty: Palvelimen sääntöjä ei ole vielä määritelty. title: Palvelimen säännöt settings: about: - manage_rules: Hallinnoi palvelimen sääntöjä + manage_rules: Hallitse palvelimen sääntöjä preamble: Anna perusteellista tietoa siitä, miten palvelinta käytetään, valvotaan, rahoitetaan. rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja @@ -739,7 +739,7 @@ fi: preamble: Muokkaa Mastodonin web-käyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voidaan näyttää useissa eri ympäristöissä, kuten Mastodonin käyttöliittymässä, sovelluksissa, linkkien esikatselu muilla sivustoilla ja viestisovelluksien sisällä ja niin edelleen. Tästä syystä on parasta pitää nämä tiedot selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -751,7 +751,7 @@ fi: desc_html: Vaikuttaa kaikkiin käyttäjiin, jotka eivät ole muuttaneet tätä asetusta itse title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle discovery: - follow_recommendations: Noudata suosituksia + follow_recommendations: Seuraamissuositukset preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset etsintäominaisuudet toimivat palvelimellasi. profile_directory: Profiilihakemisto public_timelines: Julkiset aikajanat @@ -773,7 +773,7 @@ fi: open: Kaikki voivat rekisteröityä security: authorized_fetch: Vaadi todennus yhdistetyiltä palvelimilta - authorized_fetch_hint: Todennuksen vaatiminen yhdistetyiltä palvelimilta mahdollistaa sekä käyttäjätason että palvelintason alueiden tiukemmat estot. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksien ulottuvuutta ja voi luoda yhteensopivuusongelmia joidenkin yhdistettyjen palveluiden kanssa. Lisäksi, tämä ei myöskään estä muita toimijoita hakemasta julkisia viestejäsi ja tilejäsi. + authorized_fetch_hint: Todennuksen vaatiminen federoiduilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin federoitujen palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. authorized_fetch_overridden_hint: Et voi tällä hetkellä muuttaa tätä asetusta, koska se on ohitettu ympäristömuuttujalla. federation_authentication: Yhdistettyjen palvelinten todentamisen täytäntöönpano title: Palvelimen asetukset @@ -808,23 +808,23 @@ fi: media: title: Media metadata: Metadata - no_status_selected: Viestejä ei muutettu, koska yhtään ei ole valittuna - open: Avaa viesti - original_status: Alkuperäinen viesti + no_status_selected: Julkaisuja ei muutettu, koska yhtään ei ole valittuna + open: Avaa julkaisu + original_status: Alkuperäinen julkaisu reblogs: Edelleen jako - status_changed: Viesti muutettu + status_changed: Julkaisua muutettu title: Tilin tilat trending: Nousussa visibility: Näkyvyys with_media: Sisältää mediaa strikes: actions: - delete_statuses: "%{name} poisti käyttäjän %{target} viestit" + delete_statuses: "%{name} poisti käyttäjän %{target} julkaisut" disable: "%{name} jäädytti %{target} tilin" - mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} viestit arkaluonteisiksi" + mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} julkaisut arkaluonteisiksi" none: "%{name} lähetti varoituksen henkilölle %{target}" sensitive: "%{name} merkitsi käyttäjän %{target} tilin arkaluonteiseksi" - silence: "%{name} rajoitti käyttäjän %{target} tilin" + silence: "%{name} rajoitti käyttäjän %{target} tiliä" suspend: "%{name} jäädytti käyttäjän %{target} tilin" appeal_approved: Valitti appeal_pending: Valitus vireillä @@ -852,7 +852,7 @@ fi: message_html: 'Yhteensopimaton Elasticsearch versio: %{value}' version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: - action: Hallinnoi palvelimen sääntöjä + action: Hallitse palvelimen sääntöjä message_html: Et ole määrittänyt mitään palvelimen sääntöä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset @@ -900,17 +900,17 @@ fi: title: Julkaisijat rejected: Hylätty statuses: - allow: Salli viesti + allow: Salli julkaisu allow_account: Salli tekijä - description_html: Nämä ovat viestejä, jotka palvelimesi tietää tällä hetkellä jaetuksi ja suosituksi. Tämä voi auttaa uusia ja palaavia ihmisiä löytämään lisää ihmisiä, joita seurata seurata. Julkaisuja ei näytetä julkisesti ennen kuin hyväksyt tekijän ja kirjoittaja sallii tilinsä ehdottamisen muille. Voit myös sallia tai hylätä yksittäiset viestit. - disallow: Estä viesti + description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden julkaisijan ja julkaisija sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja. + disallow: Kiellä julkaisu disallow_account: Estä tekijä - no_status_selected: Suosittuja viestejä ei muutettu, koska yhtään ei valittu + no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ole valittuna not_discoverable: Tekijä ei ole ilmoittanut olevansa löydettävissä shared_by: - one: Jaettu tai merkitty suosikiksi kerran + one: Jaettu tai lisätty suosikkeihin kerran other: Jaettu tai merkitty suosikiksi %{friendly_count} kertaa - title: Suositut viestit + title: Suositut julkaisut tags: current_score: Nykyinen tulos %{score} dashboard: @@ -941,7 +941,7 @@ fi: delete: Poista edit_preset: Muokkaa varoituksen esiasetusta empty: Et ole vielä määrittänyt yhtäkään varoitusten esiasetusta. - title: Hallinnoi varoitusten esiasetuksia + title: Hallitse varoitusten esiasetuksia webhooks: add_new: Lisää päätepiste delete: Poista @@ -965,16 +965,16 @@ fi: admin_mailer: new_appeal: actions: - delete_statuses: poistaa heidän viestit + delete_statuses: poistaa hänen julkaisunsa disable: jäädyttää heidän tilinsä - mark_statuses_as_sensitive: merkitä heidän viestinsä arkaluonteisiksi + mark_statuses_as_sensitive: merkitä hänen julkaisunsa arkaluonteisiksi none: varoitus sensitive: merkitä heidän tilinsä arkaluonteiseksi - silence: rajoittaa heidän tilinsä - suspend: jäädyttää heidän tilinsä - body: "%{target} on valittanut valvojan päätöksestä %{action_taken_by} aika %{date}, joka oli %{type}. He kirjoittivat:" - next_steps: Voit hyväksyä vetoomuksen ja kumota päätöksen tai jättää sen huomiotta. - subject: "%{username} valittaa valvojan päätöksestä, joka koskee instanssia %{instance}" + silence: rajoittaa hänen tiliään + suspend: jäädyttää hänen tilinsä + body: "%{target} valittaa valvojan %{action_taken_by} päätöksestä %{date}, joka oli %{type}. Hän kirjoitti:" + next_steps: Voit hyväksyä valituksen, jolloin valvontapäätös kumoutuu, tai sivuuttaa sen. + subject: "%{username} valittaa valvontapäätöksestä, joka koskee instanssia %{instance}" new_critical_software_updates: body: Mastodonin uusia kriittisen tärkeitä versioita on julkaistu, joten saatat haluta päivittää niin pian kuin mahdollista! subject: Kriittisiä Mastodon-päivityksiä on saatavilla instanssille %{instance}! @@ -983,7 +983,7 @@ fi: subject: Uusi tili tarkastettavana instanssissa %{instance} (%{username}) new_report: body: "%{reporter} on raportoinut kohteen %{target}" - body_remote: Joku osoitteesta %{domain} on raportoinut kohteen %{target} + body_remote: Joku palvelimelta %{domain} raportoi käyttäjän %{target} subject: Uusi raportti instanssista %{instance} (nro %{id}) new_software_updates: body: Uusia Mastodon-versioita on julkaistu, joten saatat haluta päivittää! @@ -993,7 +993,7 @@ fi: new_trending_links: title: Suositut linkit new_trending_statuses: - title: Suositut viestit + title: Suositut julkaisut new_trending_tags: no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä aihetunnisteita. requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.' @@ -1008,10 +1008,10 @@ fi: remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä - advanced_web_interface_hint: 'Jos haluat käyttää koko näytön leveyttä, edistyneen web-käyttöliittymän avulla voit määrittää useita eri sarakkeita näyttämään niin paljon tietoa samanaikaisesti kuin haluat: Koti, ilmoitukset, yhdistetty aikajana, mikä tahansa määrä luetteloita ja aihetunnisteita.' + advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen webkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.' animations_and_accessibility: Animaatiot ja saavutettavuus confirmation_dialogs: Vahvistusvalinnat - discovery: Löydöt + discovery: Löytäminen localization: body: Mastodonin ovat kääntäneet vapaaehtoiset. guide_link: https://crowdin.com/project/mastodon @@ -1076,8 +1076,8 @@ fi: accept: Hyväksy back: Takaisin invited_by: 'Seuraavalta käyttäjältä vastaanottamasi kutsun ansiosta voit liittyä palvelimelle %{domain}:' - preamble: "%{domain} valvojat määrittävät ja valvovat sääntöjä." - preamble_invited: Ennen kuin jatkat, huomioi palvelimen %{domain} valvojien asettamat perussäännöt. + preamble: Palvelimen %{domain} valvojat määrittävät ja valvovat sääntöjä. + preamble_invited: Ennen kuin jatkat, ota huomioon palvelimen %{domain} valvojien asettamat perussäännöt. title: Joitakin perussääntöjä. title_invited: Sinut on kutsuttu. security: Tunnukset @@ -1086,21 +1086,21 @@ fi: email_below_hint_html: Tarkista roskapostikansiosi tai pyydä uusi viesti. Voit korjata sähköpostiosoitteesi, jos se oli väärin. email_settings_hint_html: Napsauta lähettämäämme linkkiä vahvistaaksesi osoitteen %{email}. Odotamme täällä. link_not_received: Etkö saanut linkkiä? - new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutaman minuutin sisällä! - title: Tarkista saamasi viestit + new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutamassa minuutissa! + title: Tarkista sähköpostilaatikkosi sign_in: preamble_html: Kirjaudu %{domain}-tunnuksellasi. Jos tilisi sijaitsee eri palvelimella, et voi kirjautua täällä. title: Kirjaudu palvelimelle %{domain} sign_up: - manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä, kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. + manual_review: Palvelimen %{domain} valvojat tarkistavat rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia henkilöitä riippumatta siitä, missä heidän tilinsä on. title: Otetaan sinulle käyttöön %{domain}. status: account_status: Tilin tila confirming: Odotetaan sähköpostivahvistuksen valmistumista. functional: Tilisi on täysin toiminnassa. - pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi on hyväksytty. - redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä kohteeseen %{acct}. + pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi hyväksytään. + redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä tilille %{acct}. view_strikes: Näytä tiliäsi koskevia aiempia varoituksia too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen. use_security_key: Käytä suojausavainta @@ -1140,7 +1140,7 @@ fi: warning: before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä - data_removal: Viestit ja muut tiedot poistetaan pysyvästi + data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi email_contact_html: Jos ei saavu perille, voit pyytää apua sähköpostilla %{email} email_reconfirmation_html: Jos et saa vahvistuksen sähköpostia, niin voit pyytää sitä uudelleen @@ -1164,17 +1164,17 @@ fi: description_html: Nämä ovat tiliäsi koskevia toimia ja varoituksia, jotka instanssin %{instance} henkilökunta on lähettänyt sinulle. recipient: Osoitettu reject_appeal: Hylkää valitus - status: 'Viesti #%{id}' - status_removed: Viesti on jo poistettu järjestelmästä + status: 'Julkaisu #%{id}' + status_removed: Julkaisu on jo poistettu järjestelmästä title: "%{action} alkaen %{date}" title_actions: - delete_statuses: Viestin poisto + delete_statuses: Julkaisun poisto disable: Tilin jäädyttäminen - mark_statuses_as_sensitive: Viestien merkitseminen arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisujen merkitseminen arkaluonteisiksi none: Varoitus sensitive: Tilin merkitseminen arkaluonteiseksi silence: Tilin rajoittaminen - suspend: Tilin jäädyttäminen + suspend: Tilin jäädytys your_appeal_approved: Valituksesi on hyväksytty your_appeal_pending: Olet lähettänyt valituksen your_appeal_rejected: Valituksesi on hylätty @@ -1182,8 +1182,8 @@ fi: invalid_domain: ei ole kelvollinen toimialueen nimi edit_profile: basic_information: Perustiedot - hint_html: "Mukauta mitä ihmiset näkevät julkisessa profiilissasi ja sinun julkaisujen vieressä. Ihmiset todennäköisesti seuraavat ja kirjoittavat sinulle, kun sinulla on täytetty profiili ja profiilikuva." - other: Muu + hint_html: "Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä. Ihmiset seuraavat sinua takaisin ja ovat kanssasi vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva." + other: Muut errors: '400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti. '403': Sinulla ei ole lupaa nähdä tätä sivua. @@ -1206,7 +1206,7 @@ fi: archive_takeout: date: Päiväys download: Lataa arkisto - hint_html: Voit pyytää arkistoa omista viesteistä ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa viikon välein. + hint_html: Voit pyytää arkistoa omista julkaisuista ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa 7 päivän välein. in_progress: Arkistoa kootaan... request: Pyydä arkisto size: Koko @@ -1225,15 +1225,15 @@ fi: filters: contexts: account: Profiilit - home: Kotiaikajana + home: Kotisyöte ja listat notifications: Ilmoitukset public: Julkiset aikajanat thread: Keskustelut edit: add_keyword: Lisää avainsana keywords: Avainsanat - statuses: Yksittäiset viestit - statuses_hint_html: Tämä suodatin koskee yksittäisten viestien valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista viestit suodattimesta. + statuses: Yksittäiset julkaisut + statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. @@ -1248,11 +1248,11 @@ fi: one: "%{count} avainsana" other: "%{count} avainsanaa" statuses: - one: "%{count} viesti" - other: "%{count} viestiä" + one: "%{count} julkaisu" + other: "%{count} julkaisua" statuses_long: - one: "%{count} yksittäinen viesti piilotettu" - other: "%{count} yksittäistä viestiä piilotettu" + one: "%{count} yksittäinen julkaisu piilotettu" + other: "%{count} yksittäistä julkaisua piilotettu" title: Suodattimet new: save: Tallenna uusi suodatin @@ -1262,8 +1262,8 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten viestien valintaa muista kriteereistä riippumatta. Voit lisätä lisää viestejä tähän suodattimeen web-käyttöliittymästä. - title: Suodatetut viestit + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + title: Suodatetut julkaisut generic: all: Kaikki all_items_on_page_selected_html: @@ -1291,7 +1291,7 @@ fi: imports: errors: empty: Tyhjä CSV-tiedosto - incompatible_type: Yhteensopimaton valitun tuontityypin kanssa + incompatible_type: Yhteensopimaton valitun tuontilajin kanssa invalid_csv_file: 'Epäkelpo CSV-tiedosto. Virhe: %{error}' over_rows_processing_limit: sisältää yli %{count} riviä too_large: Tiedosto on liian suuri @@ -1304,20 +1304,20 @@ fi: overwrite: Korvaa overwrite_long: Korvaa nykyiset tietueet uusilla overwrite_preambles: - blocking_html: Olet aikeissa korvata estoluettelon kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. - bookmarks_html: Olet aikeissa korvata kirjanmerkit kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. - domain_blocking_html: Olet aikeissa korvata verkkotunnusestot kaikkiaan %{total_items} verkkotunnuksella tiedostoon %{filename} perustuen. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. Aiot lisäksi lopettaa kaikkien muiden seuraamisen. - lists_html: Olet korvaamassa listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. - muting_html: Olet korvaamassa mykistettyjä tilejäsi kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. + blocking_html: Olet aikeissa korvata estoluettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. + bookmarks_html: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. + domain_blocking_html: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{total_items} verkkotunnuksella tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. + lists_html: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. + muting_html: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. preambles: - blocking_html: Olet estämässä yhteensä %{total_items} tiliä tiedostoon %{filename} perustuen. - bookmarks_html: Olet lisäämässä %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. - domain_blocking_html: Olet estämässä yhteensä %{total_items} verkkotunnusta tiedoston %{filename} nojalla. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. - lists_html: Olet lisäämässä listoihisi %{total_items} tiliä tiedostosta %{filename}. Uudet listat luodaan, jos sopivaa kohdelistaa ei ole olemassa. - muting_html: Olet hiljentämässä yhteensä %{total_items} tiliä tiedostosta %{filename}. - preface: Voit tuoda toisesta instanssista viemiäsi tietoja, kuten esimerkiksi seuraamiesi tai estämiesi henkilöiden listan. + blocking_html: Olet aikeissa estää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + bookmarks_html: Olet lisäämässä kaikkiaan %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. + domain_blocking_html: Olet aikeissa estää kaikkiaan %{total_items} verkkotunnusta tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + lists_html: Olet lisäämässä listoihisi kaikkiaan %{total_items} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. + muting_html: Olet aikeissa mykistää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi henkilöiden luettelon. recent_imports: Viimeksi tuotu states: finished: Valmis @@ -1337,14 +1337,14 @@ fi: type: Tuonnin tyyppi type_groups: constructive: Seuratut ja kirjanmerkit - destructive: Estot ja hiljennykset + destructive: Estot ja mykistykset types: - blocking: Estettyjen lista + blocking: Estoluettelo bookmarks: Kirjanmerkit - domain_blocking: Verkkoalueen estolista - following: Seurattujen lista + domain_blocking: Verkkotunnuksen estoluettelo + following: Seurattujen luettelo lists: Listat - muting: Mykistettyjen lista + muting: Mykistettyjen luettelo upload: Lähetä invites: delete: Poista käytöstä @@ -1386,7 +1386,7 @@ fi: unsubscribe: action: Kyllä, peru tilaus complete: Tilaus lopetettiin - confirmation_html: Olethan varma, että haluat lopettaa %{type} -aiheisten Mastodonin sähköposti-ilmoitusten vastaanoton palvelimelta %{domain} osoitteeseesi %{email}? Voit toki milloin tahansa ottaa jälleen käyttöön muun muassa nämä viestit sähköposti-ilmoitusasetusten kautta. + confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: favourite: sähköpostit ilmoituksille @@ -1394,7 +1394,7 @@ fi: follow_request: seuraa pyyntöjä sähköpostiin mention: mainitse sähköpostin ilmoitukset reblog: tehosta sähköpostien ilmoituksia - resubscribe_html: Jos olet perunut ilmoitusviestien vastaanottamisen suotta, pääset jälleentilaamaan ilmoitusviestejä sähköposti-ilmoitusasetusten kautta. + resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: @@ -1434,7 +1434,7 @@ fi: other_data: Muita tietoja ei siirretä automaattisesti redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta moderation: - title: Moderointi + title: Valvonta move_handler: carry_blocks_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka olit estänyt. carry_mutes_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka mykistit. @@ -1448,15 +1448,15 @@ fi: sign_up: subject: "%{name} rekisteröityi" favourite: - body: "%{name} tykkäsi tilastasi:" - subject: "%{name} tykkäsi tilastasi" - title: Uusi tykkäys + body: "%{name} lisäsi julkaisusi suosikkeihinsa:" + subject: "%{name} lisäsi julkaisusi suosikkeihinsa" + title: Uusi suosikkeihin lisäys follow: body: "%{name} seuraa nyt sinua!" subject: "%{name} seuraa nyt sinua" title: Uusi seuraaja follow_request: - action: Hallinnoi seuraamispyyntöjä + action: Hallitse seuraamispyyntöjä body: "%{name} haluaa seurata sinua" subject: 'Odottava seuraamispyyntö: %{name}' title: Uusi seuraamispyyntö @@ -1468,13 +1468,13 @@ fi: poll: subject: Äänestys käyttäjältä %{name} on päättynyt reblog: - body: "%{name} tehosti viestiäsi:" - subject: "%{name} tehosti viestiäsi" + body: "%{name} tehosti julkaisuasi:" + subject: "%{name} tehosti julkaisuasi" title: Uusi tehostus status: subject: "%{name} julkaisi juuri" update: - subject: "%{name} muokkasi viestiä" + subject: "%{name} muokkasi julkaisua" notifications: administration_emails: Ylläpitäjän sähköposti-ilmoitukset email_events: Sähköposti-ilmoitusten tapahtumat @@ -1518,16 +1518,16 @@ fi: too_many_options: ei voi sisältää enempää kuin %{max} kohdetta preferences: other: Muut - posting_defaults: Viestien oletusasetukset + posting_defaults: Julkaisun oletusasetukset public_timelines: Julkiset aikajanat privacy: - hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua saavuttamaan laajemman yleisön. Käytä hetki aikaa tarkistaaksesi, soveltuvatko nämä vaihtoehdot tarpeisiisi." + hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua tavoittamaan laajemman yleisön. Käytä hetki tarkistaaksesi, sopivatko nämä asetukset käyttöösi." privacy: Yksityisyys - privacy_hint_html: Määritä miten paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja sekä hienoja sovelluksia selaillen toisten seuraamia käyttäjiä, ja näkemällä, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. + privacy_hint_html: Määritä, kuinka paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja ja hienoja sovelluksia, kun he selaavat toisten seuraamia käyttäjiä ja kun he näkevät, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. reach: Tavoittavuus - reach_hint_html: Päätä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko viestiesi näkyvän Selaa-sivulla? Haluatko käyttäjien näkevän sinut heidän seuraussuosituksissaan? Haluatko hyväksyä uudet seuraajat automaattisesti vai haluatko hyväksyä jokaisen erikseen? + reach_hint_html: Määritä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko julkaisujesi näkyvän Selaa-sivulla? Haluatko muiden käyttäjien näkevän sinut seuraamissuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen? search: Haku - search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Huomioithan, ettei täyttä poisjättäytymistä kaikista hakukoneista voida taata julkisille tiedoille. + search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata. title: Yksityisyys ja tavoittavuus privacy_policy: title: Tietosuojakäytäntö @@ -1564,12 +1564,12 @@ fi: rss: content_warning: 'Sisältövaroitus:' descriptions: - account: Julkiset viestit lähettäjältä @%{acct} - tag: 'Julkiset viestit merkitty #%{hashtag}' + account: Julkiset julkaisut tililtä @%{acct} + tag: 'Julkiset julkaisut aihetunnisteella #%{hashtag}' scheduled_statuses: - over_daily_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan tälle päivälle - over_total_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan - too_soon: Ajoitetun päivämäärän on oltava tulevaisuudessa + over_daily_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan tälle päivälle + over_total_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan + too_soon: Ajoitetun päiväyksen pitää olla tulevaisuudessa sessions: activity: Viimeisin toiminta browser: Selain @@ -1623,19 +1623,19 @@ fi: authorized_apps: Valtuutetut sovellukset back: Takaisin Mastodoniin delete: Tilin poisto - development: Kehittäminen + development: Kehitys edit_profile: Muokkaa profiilia export: Vie tietoja - featured_tags: Esitellyt aihetunnisteet + featured_tags: Esiteltävät aihetunnisteet import: Tuo - import_and_export: Tuo ja vie + import_and_export: Tuonti ja vienti migrate: Tilin muutto muualle notifications: Ilmoitukset preferences: Ominaisuudet - profile: Profiili - relationships: Seurattavat ja seuraajat - statuses_cleanup: Automaattinen viestin poisto - strikes: Valvojan varoitukset + profile: Julkinen profiili + relationships: Seuratut ja seuraajat + statuses_cleanup: Autom. julkaisujen poisto + strikes: Valvontavaroitukset two_factor_authentication: Kaksivaiheinen todentaminen webauthn_authentication: Suojausavaimet statuses: @@ -1650,21 +1650,21 @@ fi: video: one: "%{count} video" other: "%{count} videota" - boosted_from_html: Tehostus lähteestä %{acct_link} + boosted_from_html: Tehosti lähteestä %{acct_link} content_warning: 'Sisältövaroitus: %{warning}' default_language: Sama kuin käyttöliittymän kieli disallowed_hashtags: - one: 'sisälsi aihetunnisteen jota ei sallita: %{tags}' - other: 'sisälsi aihetunnisteet joita ei sallita: %{tags}' + one: 'sisälsi kielletyn aihetunnisteen: %{tags}' + other: 'sisälsi kiellettyjä aihetunnisteita: %{tags}' edited_at_html: Muokattu %{date} errors: - in_reply_not_found: Viesti, johon yrität vastata, ei näytä olevan olemassa. + in_reply_not_found: Julkaisua, johon yrität vastata, ei näytä olevan olemassa. open_in_web: Avaa selaimessa over_character_limit: merkkimäärän rajoitus %{max} ylitetty pin_errors: - direct: Viestejä, jotka ovat näkyvissä vain mainituille käyttäjille, ei voi kiinnittää - limit: Olet jo kiinnittänyt suurimman mahdollisen määrän viestejä - ownership: Muiden viestejä ei voi kiinnittää + direct: Vain mainituille käyttäjille näkyviä julkaisuja ei voi kiinnittää + limit: Olet jo kiinnittänyt enimmäismäärän julkaisuja + ownership: Muiden julkaisuja ei voi kiinnittää reblog: Tehostusta ei voi kiinnittää poll: total_people: @@ -1685,29 +1685,29 @@ fi: private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä - unlisted: Listaamaton julkinen + unlisted: Listaamaton unlisted_long: Kaikki voivat nähdä, mutta ei näytetä julkisilla aikajanoilla statuses_cleanup: - enabled: Poista vanhat viestit automaattisesti - enabled_hint: Poistaa viestit automaattisesti, kun ne saavuttavat tietyn ikärajan, elleivät ne täsmää yhtä alla olevista poikkeuksista + enabled: Poista vanhat julkaisut automaattisesti + enabled_hint: Poistaa julkaisusi automaattisesti, kun ne saavuttavat valitun ikärajan, ellei jokin alla olevista poikkeuksista tule kyseeseen exceptions: Poikkeukset - explanation: Koska viestien poistaminen on kallista toimintaa, sitä tehdään hitaasti ajan mittaan, kun palvelin ei ole muutoin kiireinen. Viestejäsi voidaankin siis poistaa myös viiveellä verrattuna niille määrittämääsi aikarajaan. + explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen - interaction_exceptions_explanation: Huomaa, että ei ole takeita viestien poistamiselle, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen, kun ne on kerran ylitetty. + interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit - keep_direct_hint: Ei poista mitään sinun suoria viestejä - keep_media: Säilytä viestit, joissa on liitetiedostoja - keep_media_hint: Ei poista viestejä, joissa on liitteitä - keep_pinned: Pidä kiinnitettyt viestit - keep_pinned_hint: Ei poista mitään kiinnitettyä viestiä + keep_direct_hint: Ei poista yksityisviestejäsi + keep_media: Säilytä julkaisut, joissa on medialiitteitä + keep_media_hint: Ei poista julkaisujasi, joissa on medialiitteitä + keep_pinned: Säilytä kiinnitetyt julkaisut + keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset keep_polls_hint: Ei poista yhtäkään äänestystä - keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi viestit - keep_self_bookmark_hint: Ei poista viestejäsi, jos olet lisännyt ne kirjanmerkkeihin - keep_self_fav: Säilyttää viestit suosikeissa - keep_self_fav_hint: Ei poista omia viestejäsi, jos olet lisännyt ne suosikkeihin + keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut + keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin + keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut + keep_self_fav_hint: Ei poista julkaisujasi, jos olet lisännyt ne suosikkeihin min_age: '1209600': 2 viikkoa '15778476': 6 kuukautta @@ -1718,12 +1718,12 @@ fi: '63113904': 2 vuotta '7889238': 3 kuukautta min_age_label: Ikäraja - min_favs: Pidä viestit suosikeissa vähintään - min_favs_hint: Toiminto ei poista julkaisujasi, joista on tykätty vähintään tässä kohtaa määritellyn monesti. Jätä kenttä tyhjäksi, jos haluat poistaa julkaisut tykkäyksistä huolimatta - min_reblogs: Pidä viestit tehostettuna vähintään - min_reblogs_hint: Ei poista yhtään viestiäsi, jota on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi poistaaksesi viestejä riippumatta niiden tehosteiden määrästä + min_favs: Säilytä julkaisut, joilla on suosikiksi lisäyksiä vähintään + min_favs_hint: Ei poista julkaisujasi, joita on lisätty suosikeihin vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta suosikkeihin lisäysmääristä + min_reblogs: Säilytä julkaisut, joilla on tehostuksia vähintään + min_reblogs_hint: Ei poista julkaisujasi, joita on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta niiden tehostusten määrästä stream_entries: - sensitive_content: Arkaluontoista sisältöä + sensitive_content: Arkaluonteista sisältöä strikes: errors: too_late: On liian myöhäistä vedota tähän varoitukseen @@ -1786,38 +1786,38 @@ fi: spam: Roskaposti violation: Sisältö rikkoo seuraavia yhteisön sääntöjä explanation: - delete_statuses: Joitakin viesteistäsi on havaittu rikkovan yhtä tai useampaa yhteisön sääntöä ja instanssin %{instance} valvojat ovat poistaneet ne. + delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, ja instanssin %{instance} valvojat ovat poistaneet ne. disable: Et voi enää käyttää tiliäsi, mutta profiilisi ja muut tiedot pysyvät muuttumattomina. Voit pyytää varmuuskopiota tiedoistasi, vaihtaa tilin asetuksia tai poistaa tilisi. - mark_statuses_as_sensitive: Instanssin %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa viestiä ennen kuin esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi kun julkaiset tulevaisuudessa. + mark_statuses_as_sensitive: Palvelimen %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa mediaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa. sensitive: Tästä lähtien kaikki ladatut mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse. - silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat ihmiset näkevät viestisi tällä palvelimella ja sinut voidaan sulkea pois erilaisista hakuominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. - suspend: Et voi enää käyttää tiliäsi ja profiilisi ja muut tiedot eivät ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi varmuuskopiota tiedoistasi, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme joitakin perustietoja, jotka estävät sinua kiertämästä keskeyttämistä. + silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat käyttäjät näkevät julkaisusi tällä palvelimella ja sinut voidaan sulkea pois eri löytämisominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. + suspend: Et voi enää käyttää tiliäsi, eivätkä profiilisi ja muut tiedot ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi tietojesi varmuuskopiota, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme kuitenkin joitain perustietoja, jotka estävät sinua kiertämästä jäädytystä. reason: 'Syy:' - statuses: 'Viestejä lainattu:' + statuses: 'Julkaisuja lainattu:' subject: - delete_statuses: Viestisi %{acct} on poistettu + delete_statuses: Julkaisusi tilillä %{acct} on poistettu disable: Tilisi %{acct} on jäädytetty - mark_statuses_as_sensitive: Viestisi %{acct} on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisusi tilillä %{acct} on merkitty arkaluonteisiksi none: Varoitus %{acct} - sensitive: Sinun viestisi %{acct} merkitään arkaluonteisiksi tästä lähtien - silence: Tilisi %{acct} on rajoitettu + sensitive: Julkaisusi tilillä %{acct} merkitään arkaluonteisiksi tästä lähtien + silence: Tiliäsi %{acct} on rajoitettu suspend: Tilisi %{acct} on jäädytetty title: - delete_statuses: Viestit poistettu + delete_statuses: Julkaisut poistettu disable: Tili jäädytetty - mark_statuses_as_sensitive: Viestit on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisut merkitty arkaluonteisiksi none: Varoitus sensitive: Tili on merkitty arkaluonteiseksi - silence: Rajoitettu tili - suspend: Tilin käyttäminen jäädytetty + silence: Tiliä rajoitettu + suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista - final_step: 'Aloita julkaiseminen! Vaikkei sinulla ole seuraajia, voivat muut nähdä julkiset julkaisusi esimerkiksi paikallisella aikajanalla ja aihetunnisteilla. Kannattaa myös esittäytyä käyttämällä aihetunnistetta #introductions.' + final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' full_handle: Koko käyttäjätunnuksesi - full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai löytää sinut muiden palvelimien kautta. + full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta. subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f32fe33ab7..f3a6392ff0 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -463,20 +463,40 @@ hy: regenerate_token: Ստեղծել նոր հասանելիութեան կտրոն your_token: Քո մուտքի բանալին auth: + apply_for_account: Ուղարկել delete_account: Ջնջել հաշիվը description: prefix_sign_up: Գրանցուի՛ր Մաստոդոնում հենց այսօր + didnt_get_confirmation: Չե՞ս ստացել հաստատման յղում dont_have_your_security_key: Չունե՞ս անվտանգութեան բանալի։ forgot_password: Մոռացե՞լ ես գաղտնաբառդ login: Մտնել logout: Դուրս գալ migrate_account: Տեղափոխուել այլ հաշիւ or_log_in_with: Կամ մուտք գործել օգտագործելով՝ + privacy_policy_agreement_html: Ես կարդացել եւ ընդունել եմ գաղնիութեան քաղաքականութիւնը + progress: + confirm: Փոստի հաստատում + details: Ձեր տուեալները + review: Վաւերացում + rules: Ընդունել կանոները register: Գրանցվել registration_closed: "%{instance}ը չի ընդունում նոր անդամներ" reset_password: Վերականգնել գաղտանաբառը + rules: + accept: Հաստատել + back: Վերադառնալ + preamble: Կանոնները սահմանում եւ կիրառում են %{domain}-ի մոդերատորները։ + title: Մի քանի հիմանական կանոններ։ security: Անվտանգություն set_new_password: Սահմանել նոր գաղտնաբառ + sign_in: + preamble_html: Մուտքագրէք %{domain}-ի ձեր տուեալները։ Եթե ձեր հաշիւը ուրիշ սպասարկիչի վրայ է, այտեղ մտնել չի ստացուի։ + title: Մտնել %{domain} + sign_up: + manual_review: Գրանցումները %{domain}-ում վաւերացնում են մոդերատորնրը։ Մեզ օգնելու համար մի փոքր պատմէք ձեր մասին եւ թե ինչու էք ուզում գրանցուել։ + preamble: Այս հանգոյցում հաշիւ ունենալով դուք կարող էք հերտեւել դաշնեզերքի ցանկացած օգտատիրոջ, անկախ նրանից թե որտեղ է նրա հաշիւը տեղակայուած։ + title: Ստեղծի՜ր հաշիւ %{domain}-ում status: account_status: Հաշուի կարգավիճակ pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։ @@ -685,6 +705,8 @@ hy: other: Այլ posting_defaults: Կանխադիր կարգաւորումներ public_timelines: Հանրային հոսք + privacy: + search: Որոնել privacy_policy: title: Գաղտնիութեան քաղաքականութիւն reactions: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index da6d8596e0..cc3fd07c49 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -269,7 +269,7 @@ ko: reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다" resend_user_html: "%{name} 님이 %{target} 님에 대한 확인 메일을 다시 보냈습니다" reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다" - resolve_report_html: "%{name} 중재자가 %{target}번 신고를 해결로 변경하였습니다" + resolve_report_html: "%{name} 님이 %{target}번 신고를 해결로 변경하였습니다" sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다" silence_account_html: "%{name} 님이 %{target}의 계정을 제한시켰습니다" suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다" diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 12af55af62..f0c18d1128 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -330,5 +330,5 @@ en-GB: text: required title: sessions: - webauthn: Use one of your security keys to sign in + webauthn: Use one of your security keys to log in 'yes': 'Yes' diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index cc2f1141d9..db82edba24 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,13 +3,13 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla, ja profiiliasi voidaan myös ehdottaa suoraan toisille käyttäjille. + discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. - fields: Kotisivusi, pronominit, ikä, mitä ikinä haluatkin. - indexable: Julkiset viestit voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa viestiesi kanssa, voivat etsiä niitä siitä riippumatta. + fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. + indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, 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 eivät näe ketä seuraat ja ketkä seuraavat sinua. Käyttäjät, joita sinä seuraat, näkevät kuitenkin sinun seuraavan heitä. - unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seurantapyynnöt. + 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ä. + unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: @@ -18,7 +18,7 @@ fi: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle admin_account_action: - include_statuses: Käyttäjä näkee mitkä viestit johtivat toimenpiteeseen tai varoitukseen + include_statuses: Käyttäjä näkee, mitkä julkaisut johtivat valvontatoimeen tai varoitukseen send_email_notification: Käyttäjä saa selvityksen siitä, mitä hänen tililleen tapahtui text_html: Valinnainen. Voit käyttää julkaisun syntaksia. Voit lisätä varoitusasetuksia säästääksesi aikaa type_html: Valitse mitä teet käyttäjälle %{acct} @@ -31,10 +31,10 @@ fi: warning_preset_id: Valinnainen. Voit silti lisätä mukautetun tekstin esiasetuksen loppuun announcement: all_day: Kun valittu, vain valittu aikaväli näytetään - ends_at: Valinnainen. Ilmoitus tullaan poistamaan automaattisesti tällä hetkellä - scheduled_at: Jätä tyhjäksi julkaistaksesi ilmoituksen välittömästi - starts_at: Valinnainen. Jos ilmoituksesi on sidottu tiettyyn aikaväliin - text: Voit käyttää julkaisun syntaksia. Muista, kuinka paljon tilaa ilmoitus vie käyttäjän näytöltä + ends_at: Valinnainen. Tiedote poistetaan automaattisesti tällä hetkellä + scheduled_at: Jätä tyhjäksi julkaistaksesi tiedotteen heti + starts_at: Valinnainen. Jos tiedotteesi on sidottu tiettyyn aikaväliin + text: Voit käyttää julkaisun syntaksia. Ota huomioon, kuinka paljon tilaa tiedote vie käyttäjän näytöltä appeal: text: Voit valittaa varoituksesta vain kerran defaults: @@ -51,14 +51,14 @@ fi: irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli password: Käytä vähintään 8 merkkiä - phrase: Täytetään riippumatta julkaisun kirjainkoon tai sisällön varoituksesta + phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. - setting_aggregate_reblogs: Älä näytä uusia tehosteita viesteille, joita on äskettäin tehostettu (koskee vain äskettäin saatuja tehosteita) + setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media - setting_display_media_hide_all: Piilota aina kaikki media - setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media + setting_display_media_hide_all: Piilota media aina + setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja @@ -74,7 +74,7 @@ fi: action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa - warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen otsikko + warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi form_admin_settings: activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä backups_retention_period: Säilytä luodut arkistot määritetyn määrän päiviä. @@ -84,7 +84,7 @@ fi: custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa. mascot: Ohittaa kuvituksen edistyneessä käyttöliittymässä. media_cache_retention_period: Ladatut mediatiedostot poistetaan määritetyn määrän päiviä jälkeen, kun arvo on positiivinen ja ladataan uudelleen pyynnöstä. - peers_api_enabled: Lista verkkotunnuksista, joita tämä palvelin on kohdannut fediversessä. Täällä ei ole tietoja siitä, oletko liitossa tiettyjen palvelinten kanssa, vaan ainoastaan luettelo niistä verkkotunnuksista, joista palvelimesi on ylipäätään tietoinen. Tätä tietoa käytetään palveluissa, jotka keräävät liittotilastoja laajassa merkityksessä. + peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja liittoutumisesta yleisellä tasolla. profile_directory: Profiilihakemisto lueteloi kaikki käyttäjät, jotka ovat ilmoittaneet olevansa löydettävissä. require_invite_text: Kun kirjautuminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” teksti syötetään pakolliseksi eikä vapaaehtoiseksi site_contact_email: Kuinka ihmiset voivat tavoittaa sinut oikeudellisissa tai tukikysymyksissä. @@ -103,7 +103,7 @@ fi: form_challenge: current_password: Olet menossa suojatulle alueelle imports: - data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto + data: Toiselta Mastodon-palvelimelta tuotu CSV-tiedosto invite_request: text: Tämä auttaa meitä arvioimaan hakemustasi ip_block: @@ -122,7 +122,7 @@ fi: webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä. settings: indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa. - show_application: Voit siitä huolimatta aina nähdä, millä sovelluksella julkaisusi laadittiin. + show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin. tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: @@ -140,11 +140,11 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - discoverable: Sisällytä profiili ja julkaisut etsintäalgoritmeihin + discoverable: Nosta profiili ja julkaisut esille löytämisalgoritmeissa fields: name: Nimike value: Sisältö - indexable: Sisällytä julkiset viestit hakutuloksiin + indexable: Sisällytä julkiset julkaisut hakutuloksiin show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: @@ -169,9 +169,9 @@ fi: announcement: all_day: Koko päivän kestävä tapahtuma ends_at: Tapahtuman loppu - scheduled_at: Ajasta julkaisu + scheduled_at: Ajoita julkaisu starts_at: Tapahtuman alku - text: Ilmoitus + text: Tiedote appeal: text: Perustele, miksi tämä päätös olisi kumottava defaults: @@ -184,18 +184,18 @@ fi: context: Suodata konteksteista current_password: Nykyinen salasana data: Tiedot - display_name: Nimimerkki + display_name: Näyttönimi email: Sähköpostiosoite expires_in: Vanhenee - fields: Profiilin metadata - header: Otsakekuva + fields: Lisäkentät + header: Otsikkokuva honeypot: "%{label} (älä täytä)" inbox_url: Välittäjän postilaatikon URL-osoite irreversible: Pudota piilottamisen sijaan locale: Kieli max_uses: Käyttökertoja enintään new_password: Uusi salasana - note: Kuvaus + note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana phrase: Avainsana tai lause @@ -203,29 +203,29 @@ fi: setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia setting_auto_play_gif: Toista GIF-animaatiot automaattisesti - setting_boost_modal: Kysy vahvistus ennen tehostusta + setting_boost_modal: Kysy vahvistusta ennen tehostusta setting_default_language: Viestien kieli setting_default_privacy: Viestin näkyvyys setting_default_sensitive: Merkitse media aina arkaluontoiseksi - setting_delete_modal: Kysy vahvistusta ennen viestin poistamista + setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen setting_display_media_default: Oletus setting_display_media_hide_all: Piilota kaikki setting_display_media_show_all: Näytä kaikki - setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt viestit + setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt julkaisut setting_hide_network: Piilota verkkosi setting_reduce_motion: Vähennä animaatioiden liikettä setting_system_font_ui: Käytä järjestelmän oletusfonttia setting_theme: Sivuston teema setting_trends: Näytä päivän trendit - setting_unfollow_modal: Kysy vahvistusta, ennen kuin lopetat seuraamisen + setting_unfollow_modal: Kysy vahvistusta ennen seuraamisen lopettamista setting_use_blurhash: Näytä värikkäät liukuvärit piilotetulle medialle - setting_use_pending_items: Hidastila + setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi title: Otsikko - type: Tietojen laji + type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti whole_word: Koko sana @@ -289,7 +289,7 @@ fi: follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua mention: Lähetä sähköposti, kun sinut mainitaan pending_account: Uusi tili tarvitsee tarkastusta - reblog: Lähetä sähköposti, kun joku tehosti viestiäsi + reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: all: Ilmoita kaikista päivityksistä @@ -302,7 +302,7 @@ fi: text: Sääntö settings: indexable: Sisällytä profiilisivu hakukoneisiin - show_application: Näytä, mistä sovelluksesta lähetit viestin + show_application: Näytä, mistä sovelluksesta lähetit julkaisun tag: listable: Salli tämän aihetunnisteen näkyä hauissa ja ehdotuksissa name: Aihetunniste diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index d2fab9e048..56aa1d66b1 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -44,6 +44,7 @@ hy: setting_display_media_show_all: Մեդիա միշտ ցոյց տալ setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն + username: Միայն լատինատառեր, թուեր եւ տակի գծիկ whole_word: Եթէ բանալի բառը կամ արտայայտութիւնը պարունակում է միայն այբբենական նիշեր եւ թուեր, ապա այն կիրառուելու է ամբողջ բառի հետ համընկնելու դէպքում միայն domain_allow: domain: Այս տիրոյթը կարող է ստանալ տուեալներ այս սպասարկչից եւ ստացուող տուեալները կարող են օգտագործուել եւ պահուել From f67c91b0f06f661a8d13f9a6b95798dc64d6b3dd Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 13:41:24 +0200 Subject: [PATCH 107/237] Fix filtering audit log for entries about disabling 2FA (#27186) --- app/models/admin/action_log_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index f89d452ef4..0117974628 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -38,7 +38,7 @@ class Admin::ActionLogFilter destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze, destroy_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'destroy' }.freeze, - disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, + disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze, enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze, From 6bc7d9e24a063dbfd6f097bf1f7aeabebc9f93f6 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 15:29:07 +0200 Subject: [PATCH 108/237] Fix link handling of mentions in user profiles when logged out (#27185) --- app/javascript/mastodon/actions/search.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index 7aea346e6d..38a089b486 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -147,6 +147,10 @@ export const openURL = (value, history, onFailure) => (dispatch, getState) => { const signedIn = !!getState().getIn(['meta', 'me']); if (!signedIn) { + if (onFailure) { + onFailure(); + } + return; } From fa54baf58db8652085af05c036d0c7afe13854f8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 10:04:18 +0200 Subject: [PATCH 109/237] New Crowdin Translations (automated) (#27202) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 12 ++-- config/locales/devise.fi.yml | 14 ++-- config/locales/doorkeeper.fi.yml | 8 +-- config/locales/fi.yml | 92 ++++++++++++------------- config/locales/simple_form.fi.yml | 62 ++++++++--------- 5 files changed, 94 insertions(+), 94 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4aa46ec0fc..094b7d3b36 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -201,9 +201,9 @@ "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", - "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", - "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", + "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", @@ -324,7 +324,7 @@ "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -493,10 +493,10 @@ "onboarding.steps.setup_profile.title": "Mukauta profiiliasi", "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", - "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", + "onboarding.tips.2fa": "Tiesitkö? Voit suojata tilisi ottamalla kaksivaiheisen todennuksen käyttöön tilisi asetuksista. Se toimii millä tahansa TOTP-sovelluksella, eikä sen käyttö edellytä puhelinnumeroa!", "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", - "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", + "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi lisäkenttään. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", "password_confirmation.mismatching": "Salasanan vahvistus ei täsmää", "picture_in_picture.restore": "Laita se takaisin", diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index eecbb3897a..8bbcb071e3 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -27,12 +27,12 @@ fi: title: Vahvista sähköpostiosoite email_changed: explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:' - extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: Sähköpostiosoite vaihdettu' title: Uusi sähköpostiosoite password_change: explanation: Tilisi salasana on vaihdettu. - extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: salasana vaihdettu' title: Salasana vaihdettu reconfirmation_instructions: @@ -47,11 +47,11 @@ fi: subject: 'Mastodon: ohjeet salasanan vaihtoon' title: Salasanan vaihto two_factor_disabled: - explanation: Kaksivaiheinen todennus tilillesi poistettiin käytöstä. Kirjautuminen onnistuu nyt käyttäen pelkkää sähköpostiosoitetta ja salasanaa. + explanation: Tilisi kaksivaiheinen todennus poistettiin käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitella ja salasanalla. subject: 'Mastodon: kaksivaiheinen todennus poistettu käytöstä' title: 2-vaiheinen todennus pois käytöstä two_factor_enabled: - explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Kaksivaiheisen tunnistuksen sovelluksesta saatu koodi tarvitaan kirjautumiseen. + explanation: Kaksivaiheinen todennus on otettu käyttöön tilillesi. Kirjautumiseen tarvitaan kaksivaiheisen todennuksen sovelluksesta saatu koodi. subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön' title: 2-vaiheinen todennus käytössä two_factor_recovery_codes_changed: @@ -70,11 +70,11 @@ fi: subject: 'Mastodon: suojausavain poistettu' title: Yksi suojausavaimistasi on poistettu webauthn_disabled: - explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista käyttämällä vain paritetun TOTP-sovelluksen luomaa tokenia. - subject: 'Mastodon: Todennus suoja-avaimilla poistettu käytöstä' + explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista vain paritetun TOTP-sovelluksen luomaa koodia käyttämällä. + subject: 'Mastodon: Todennus suojausavaimilla poistettu käytöstä' title: Suojausavaimet poistettu käytöstä webauthn_enabled: - explanation: Todennus suojausavaimella on otettu käyttöön tililläsi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. + explanation: Todennus suojausavaimella on otettu käyttöön tilillesi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. subject: 'Mastodon: Todennus suojausavaimella on otettu käyttöön' title: Suojausavaimet käytössä omniauth_callbacks: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 81b248ef2e..8d030274e7 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -67,13 +67,13 @@ fi: title: Kopioi tämä valtuutuskoodi ja liitä se sovellukseen. authorized_applications: buttons: - revoke: Peru + revoke: Hylkää confirmations: revoke: Oletko varma? index: authorized_at: Valtuutettu %{date} - description_html: Nämä ovat sovelluksia, jotka voivat käyttää tiliäsi käyttäen API. Jos et tunnista sitä tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. - last_used_at: Viimeksi käytetty %{date} + description_html: Nämä sovellukset voivat käyttää tiliäsi ohjelmointirajapinnan kautta. Jos tässä on sovelluksia, joita et tunnista, tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. + last_used_at: Käytetty viimeksi %{date} never_used: Ei käytetty scopes: Oikeudet superapp: Sisäinen @@ -114,7 +114,7 @@ fi: notice: Sovellus poistettu. grouped_scopes: access: - read: Vain luku + read: Vain lukuoikeus read/write: Luku- ja kirjoitusoikeudet write: Vain kirjoitusoikeus title: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 8a5d72a661..466cb95a24 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -76,7 +76,7 @@ fi: inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen invited_by: Kutsuja - ip: IP + ip: IP-osoite joined: Liittynyt location: all: Kaikki @@ -736,10 +736,10 @@ fi: rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja appearance: - preamble: Muokkaa Mastodonin web-käyttöliittymää. + preamble: Mukauta Mastodonin verkkokäyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin verkkokäyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -853,7 +853,7 @@ fi: version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: action: Hallitse palvelimen sääntöjä - message_html: Et ole määrittänyt mitään palvelimen sääntöä. + message_html: Et ole määrittänyt lainkaan palvelimen sääntöjä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset software_version_critical_check: @@ -864,7 +864,7 @@ fi: message_html: Mastodonin virhekorjauspäivitys on saatavilla. upload_check_privacy_error: action: Katso täältä lisätietoja - message_html: "Verkkopalvelimesi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." + message_html: "Verkkopalvelimesi on määritetty väärin. Käyttäjiesi yksityisyys on vaarassa." upload_check_privacy_error_object_storage: action: Katso täältä lisätietoja message_html: "Objektivarastosi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." @@ -1004,7 +1004,7 @@ fi: created_msg: Uusi alias luotiin onnistuneesti. Voit nyt aloittaa siirron vanhasta tilistä. deleted_msg: Alias poistettiin onnistuneesti. Siirtyminen tuolta tililtä tähän ei ole enää mahdollista. empty: Sinulla ei ole aliaksia. - hint_html: Jos haluat siirtyä toisesta tilistä tähän tiliin, voit luoda aliasin, joka on pakollinen, ennen kuin voit siirtää seuraajia vanhasta tilistä tähän tiliin. Tämä toiminto on itsessään vaaraton ja palautuva. Tilin siirtyminen aloitetaan vanhalta tililtä. + hint_html: Jos haluat muuttaa toiselta tililtä tälle tilille, voit luoda tässä aliaksen, mitä vaaditaan ennen kuin voit edetä siirtämään seuraajat vanhalta tililtä tälle tilille. Tänä toiminto on itsessään vaaraton ja kumottavissa. Tilin muuttaminen aloitetaan vanhalta tililtä. remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä @@ -1042,7 +1042,7 @@ fi: confirmations: wrong_email_hint: Jos sähköpostiosoite ei ole oikein, voit muuttaa sen tilin asetuksista. delete_account: Poista tili - delete_account_html: Jos haluat poistaa tilisi, paina tästä. Poisto on vahvistettava. + delete_account_html: Jos haluat poistaa tilisi, voit edetä tästä. Sinua pyydetään vahvistamaan poisto. description: prefix_invited_by_user: "@%{name} kutsuu sinut liittymään tälle Mastodonin palvelimelle!" prefix_sign_up: Liity Mastodoniin tänään! @@ -1051,13 +1051,13 @@ fi: dont_have_your_security_key: Eikö sinulla ole suojausavainta? forgot_password: Unohditko salasanasi? invalid_reset_password_token: Salasanan palautustunnus on virheellinen tai vanhentunut. Pyydä uusi. - link_to_otp: Syötä puhelimesi kaksivaiheinen koodi tai palautuskoodi + link_to_otp: Syötä puhelimesi kaksivaiheisen todennuksen koodi tai palautuskoodi link_to_webauth: Käytä suojausavaintasi log_in_with: Kirjaudu käyttäen login: Kirjaudu sisään logout: Kirjaudu ulos migrate_account: Muuta toiseen tiliin - migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit asettaa toisen tilin tästä. + migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit asettaa toisen tilin tästä. or_log_in_with: Tai käytä kirjautumiseen privacy_policy_agreement_html: Olen lukenut ja hyväksynyt tietosuojakäytännön progress: @@ -1138,7 +1138,7 @@ fi: proceed: Poista tili success_msg: Tilin poisto onnistui warning: - before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi @@ -1198,7 +1198,7 @@ fi: content: Valitettavasti jokin meni pieleen meidän päässämme. title: Sivu ei ole oikein '503': Sivua ei voitu näyttää palvelimen väliaikaisen vian vuoksi. - noscript_html: Käyttääksesi Mastodon-verkkopalvelua, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla myös jotakin juuri käyttämällesi alustalle kehitettyä Mastodon-sovellusta. + noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin natiivisovelluksia. existing_username_validator: not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä not_found_multiple: "%{usernames} ei löytynyt" @@ -1236,7 +1236,7 @@ fi: statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: - deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. + deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai verkkokäyttöliittymää. invalid_context: Ei sisältöä tai se on virheellinen index: contexts: Suodattimet %{contexts} @@ -1262,7 +1262,7 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen verkkokäyttöliittymästä. title: Suodatetut julkaisut generic: all: Kaikki @@ -1279,7 +1279,7 @@ fi: delete: Poista deselect: Poista kaikki valinnat none: Ei mitään - order_by: Järjestä + order_by: Järjestys save_changes: Tallenna muutokset select_all_matching_items: one: Valitse %{count} kohde, joka vastaa hakuasi. @@ -1373,7 +1373,7 @@ fi: limit: Sinulla on enimmäismäärä listoja login_activities: authentication_methods: - otp: kaksivaiheinen todennussovellus + otp: kaksivaiheisen todennuksen sovellus password: salasana sign_in_token: sähköpostin turvakoodi webauthn: suojausavaimet @@ -1415,7 +1415,7 @@ fi: on_cooldown: Sinä olet jäähyllä followers_count: Seuraajat muuton aikana incoming_migrations: Siirtyminen toiselta tililtä - incoming_migrations_html: Siirtääksesi toisesta tilistä tähän tiliin, sinun täytyy ensin luoda tilin alias. + incoming_migrations_html: Siirtyäksesi toisesta tilistä tähän, sinun täytyy ensin luoda tilin alias. moved_msg: Tilisi ohjaa nyt kohteeseen %{acct} ja seuraajiasi siirretään. not_redirecting: Tilisi ei ohjaa tällä hetkellä mihinkään muuhun tiliin. on_cooldown: Olet siirtänyt tilisi äskettäin. Tämä toiminto tulee saataville uudelleen %{count} päivän kuluttua. @@ -1426,13 +1426,13 @@ fi: set_redirect: Aseta uudelleenohjaus warning: backreference_required: Uusi tili on ensin määritettävä viittaamaan tähän tiliin - before: 'Ennen jatkamista, lue nämä huomautukset huolellisesti:' - cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää liikkumaan - disabled_account: Nykyinen tilisi ei ole täysin käytettävissä jälkikäteen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' + cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää muuttamaan + disabled_account: Nykyinen tilisi ei ole täysin käytettävissä tämän jälkeen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. followers: Tämä toiminto siirtää kaikki seuraajat nykyisestä tilistä uudelle tilille - only_redirect_html: Vaihtoehtoisesti voit asettaa vain uudelleenohjauksen profiiliisi. + only_redirect_html: Vaihtoehtoisesti voit asettaa vain ohjauksen profiiliisi. other_data: Muita tietoja ei siirretä automaattisesti - redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta + redirect: Nykyisen tilisi profiili päivitetään ohjaushuomautuksella ja suljetaan pois hauista moderation: title: Valvonta move_handler: @@ -1492,7 +1492,7 @@ fi: trillion: B otp_authentication: code_hint: Anna todennussovelluksen luoma koodi vahvistaaksesi - description_html: Jos otat käyttöön kaksivaiheisen todentamisen, käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. + description_html: Jos otat kaksivaiheisen todennuksen käyttöön käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. enable: Ota käyttöön instructions_html: "Lue tämä QR-koodi puhelimen Google Authenticator- tai vastaavalla TOTP-sovelluksella. Sen jälkeen sovellus luo tunnuksia, joita tarvitset kun kirjaudut sisään." manual_instructions: 'Jos et voi lukea QR-koodia ja haluat syöttää sen käsin, tässä on salainen koodi tekstinä:' @@ -1547,10 +1547,10 @@ fi: following: Seuratut invited: Kutsutut last_active: Viimeksi aktiivinen - most_recent: Viimeisin - moved: Muuttanut + most_recent: Viimeisimmät + moved: Muuttaneet mutual: Molemmat - primary: Ensisijainen + primary: Ensisijaiset relationship: Suhde remove_selected_domains: Poista kaikki seuraajat valituista verkkotunnuksista remove_selected_followers: Poista valitut seuraajat @@ -1595,7 +1595,7 @@ fi: weibo: Weibo current_session: Nykyinen istunto description: "%{browser} alustalla %{platform}" - explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi. + explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneena Mastodon-tilillesi. ip: IP-osoite platforms: adobe_air: Adobe AIR @@ -1636,7 +1636,7 @@ fi: relationships: Seuratut ja seuraajat statuses_cleanup: Autom. julkaisujen poisto strikes: Valvontavaroitukset - two_factor_authentication: Kaksivaiheinen todentaminen + two_factor_authentication: Kaksivaiheinen todennus webauthn_authentication: Suojausavaimet statuses: attached: @@ -1681,7 +1681,7 @@ fi: title: "%{name}: ”%{quote}”" visibilities: direct: Suoraan - private: Vain seuraajille + private: Vain seuraajat private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä @@ -1694,7 +1694,7 @@ fi: explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset - interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen + interaction_exceptions: Vuorovaikutuksiin perustuvat poikkeukset interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit keep_direct_hint: Ei poista yksityisviestejäsi @@ -1703,7 +1703,7 @@ fi: keep_pinned: Säilytä kiinnitetyt julkaisut keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset - keep_polls_hint: Ei poista yhtäkään äänestystä + keep_polls_hint: Ei poista äänestyksiäsi keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut @@ -1745,16 +1745,16 @@ fi: too_many_requests: Käännöspalvelulle on hiljattain esitetty liian monta pyyntöä. two_factor_authentication: add: Lisää - disable: Poista käytöstä + disable: Poista 2FA käytöstä disabled_success: Kaksivaiheinen todennus on poistettu käytöstä edit: Muokkaa - enabled: Kaksivaiheinen todentaminen käytössä - enabled_success: Kaksivaiheisen todentamisen käyttöönotto onnistui + enabled: Kaksivaiheinen todennus käytössä + enabled_success: Kaksivaiheisen todennuksen käyttöönotto onnistui generate_recovery_codes: Luo palautuskoodit - lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodit, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. - methods: Kaksivaiheisen tunnistautumisen menetelmät + lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodisi, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. + methods: Kaksivaiheisen todennuksen menetelmät otp: Todennussovellus - recovery_codes: Varapalautuskoodit + recovery_codes: Ota palautuskoodit talteen recovery_codes_regenerated: Uusien palautuskoodien luonti onnistui recovery_instructions_html: Jos menetät puhelimesi, voit kirjautua tilillesi jollakin alla olevista palautuskoodeista. Pidä palautuskoodit hyvässä tallessa. Voit esimerkiksi tulostaa ne ja säilyttää muiden tärkeiden papereiden joukossa. webauthn: Suojausavaimet @@ -1776,7 +1776,7 @@ fi: change_password: vaihda salasanasi details: 'Tässä on tiedot kirjautumisesta:' explanation: Olemme havainneet kirjautumisen tilillesi uudesta IP-osoitteesta. - further_actions_html: Jos tämä et ollut sinä, suosittelemme että %{action} välittömästi ja ota kaksivaiheinen todennus käyttöön säilyttääksesi tilisi turvallisena. + further_actions_html: Jos tämä et ollut sinä, suosittelemme, että %{action} heti ja otat käyttöön kaksivaiheisen todennuksen pitääksesi tilisi turvassa. subject: Tiliäsi on käytetty uudesta IP-osoitteesta title: Uusi kirjautuminen warning: @@ -1828,26 +1828,26 @@ fi: seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä. signed_in_as: 'Kirjautunut tilillä:' verification: - extra_instructions_html: Vinkki: Tämä linkitys verkkosivustollasi voidaan toteuttaa myös näkymättömänä. Tärkeä osuus on rel="me" -määre, jolla ehkäistään valeprofiilikäyttötarkoituksia sivustoilla, joiden sisältö perustuu käyttäjiensä julkaisuihin. Voit siis käyttää linkkiviittauselementtiä link HTML-lähdekoodin otsakeosassa (head) sen sijaan, että käyttäisit näkyvää hyperlinkkielementtiä a. HTML-lähdekoodin tulee tuolta osin kuitenkin olla JavaScriptistä riippumatonta. + extra_instructions_html: Vinkki: Verkkosivustollasi oleva linkki voi olla myös näkymätön. Olennainen osuus on rel="me", joka estää toiseksi henkilöksi tekeytymisen verkkosivustoilla, joilla on käyttäjien luomaa sisältöä. Voit käyttää jopa link-elementtiä sivun head-osassa elementin a sijaan, mutta HTML:n pitää olla käytettävissä ilman JavaScript-koodin suorittamista. here_is_how: Näin voit tehdä sen - hint_html: "Mastodonissa henkilöllisyyden vahventaminen on jokaisen käyttäjän ulottuvilla. Tämä perustuu avoimiin standardeihin, maksuttomasti nyt ja aina. Kaikki mitä tarvitset on henkilökohtainen verkkosivusto, jonka avulla sinut voidaan tunnistaa. Kun Mastodon-profiilistasi on linkki kyseiselle verkkosivustollesi, ja sieltä löytyy vastaviittaus tai -linkitys profiiliisi, näkyy profiilissasi vahvistustunniste." - instructions_html: Kopioi ja liitä alla oleva koodi verkkosivusi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin ylimääräisistä kentistä profiiliasetuksissa, "Muokkaa profiilia" -välilehdestä, ja tallenna muutokset. + hint_html: "Henkilöllisyyden vahvistaminen on Mastodonissa jokaisen käyttäjän ulottuvilla. Se perustuu avoimiin standardeihin ja on maksutonta nyt ja aina. Tarvitset vain henkilökohtaisen verkkosivuston, jonka perusteella sinut voidaan tunnistaa. Kun teet linkin tuolle verkkosivulle profiilistasi, tarkistamme, että verkkosivustolla on linkki takaisin profiiliisi, ja näytämme profiilissasi visuaalisen ilmaisimen." + instructions_html: Kopioi ja liitä alla oleva koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset. verification: Vahvistus verified_links: Vahvistetut linkkisi webauthn_credentials: add: Lisää uusi suojausavain create: - error: Suojausavaimen lisäämisessä tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen lisääminen onnistui. + error: Suojausavaimen lisäämisessä oli ongelma. Yritä uudelleen. + success: Suojausavaimesi lisääminen onnistui. delete: Poista delete_confirmation: Haluatko varmasti poistaa tämän suojausavaimen? description_html: Jos otat suojausavaimen todennuksen käyttöön, kirjautuminen edellyttää jonkin suojausavaimen käyttämistä. destroy: - error: Suojausavaimen poistamisessa tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen poistaminen onnistui. + error: Suojausavaimen poistamisessa oli ongelma. Yritä uudelleen. + success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain - nickname_hint: Anna nimimerkki uudelle suojausavaimelle + nickname_hint: Anna uuden suojausaivaimesi lempinimi not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa not_supported: Tämä selain ei tue suojausavaimia - otp_required: Jos haluat käyttää suojausavaimia, ota ensin käyttöön kaksivaiheinen todennus. + otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index db82edba24..1eec9a9317 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -11,9 +11,9 @@ fi: 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ä. unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, johon haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, johon haluat siirtyä account_warning_preset: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle @@ -41,7 +41,7 @@ fi: autofollow: Henkilöt, jotka rekisteröityvät kutsun kautta, seuraavat sinua automaattisesti avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja eikä sitä ehkä valvota - context: Yksi tai useampi asiayhteys, jossa suodattimen pitäisi olla käytössä + context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana @@ -54,15 +54,15 @@ fi: phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) - setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia - setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella + setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät Mastodonia aktiivisesti + setting_default_sensitive: Arkaluonteinen media on oletuksena piilotettu, ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media setting_display_media_hide_all: Piilota media aina setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja - whole_word: Kun avainsana tai lause on vain aakkosnumeerinen, se otetaan käyttöön, jos se vastaa koko sanaa + whole_word: Kun avainsana tai -fraasi on kokonaan aakkosnumeerinen, se on voimassa vain, jos se vastaa koko sanaa domain_allow: domain: Tämä verkkotunnus voi noutaa tietoja tältä palvelimelta ja sieltä saapuvat tiedot käsitellään ja tallennetaan email_domain_block: @@ -71,7 +71,7 @@ fi: featured_tag: name: 'Tässä muutamia hiljattain käyttämiäsi aihetunnisteita:' filters: - action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta + action: Valitse, mikä toiminto suoritetaan, kun julkaisu vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi @@ -126,7 +126,7 @@ fi: tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: - chosen_languages: Kun valittu, vain valituilla kielillä julkaistut viestit näkyvät julkisilla aikajanoilla + chosen_languages: Kun valittu, vain valituilla kielillä kirjoitetut julkaisut näkyvät julkisilla aikajanoilla role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on user_role: color: Väri, jota käytetään roolin koko käyttöliittymässä, RGB heksamuodossa @@ -148,21 +148,21 @@ fi: show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: - acct: Vanhan tilin käsittely + acct: Vanhan tilin käyttäjätunnus account_migration: - acct: Uuden tilin käsittely + acct: Uuden tilin käyttäjätunnus account_warning_preset: text: Esiasetettu teksti - title: Otsikko + title: Nimi admin_account_action: include_statuses: Sisällytä raportoidut viestit sähköpostiin send_email_notification: Ilmoita käyttäjälle sähköpostitse text: Mukautettu varoitus - type: Toimenpide + type: Toimi types: disable: Poista kirjautuminen käytöstä none: Älä tee mitään - sensitive: Arkaluontoinen + sensitive: Arkaluonteinen silence: Hiljennä suspend: Poista käytöstä ja tuhoa käyttäjätunnuksen tiedot peruuttamattomasti warning_preset_id: Käytä varoitusmallia @@ -181,7 +181,7 @@ fi: chosen_languages: Suodata kieliä confirm_new_password: Vahvista uusi salasana confirm_password: Vahvista salasana - context: Suodata konteksteista + context: Suodattimen kontekstit current_password: Nykyinen salasana data: Tiedot display_name: Näyttönimi @@ -198,15 +198,15 @@ fi: note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana - phrase: Avainsana tai lause - setting_advanced_layout: Ota käyttöön edistynyt selainkäyttöliittymä - setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla - setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia + phrase: Avainsana tai -fraasi + setting_advanced_layout: Ota edistynyt selainkäyttöliittymä käyttöön + setting_aggregate_reblogs: Ryhmitä tehostukset aikajanoilla + setting_always_send_emails: Lähetä sähköposti-ilmoitukset aina setting_auto_play_gif: Toista GIF-animaatiot automaattisesti setting_boost_modal: Kysy vahvistusta ennen tehostusta - setting_default_language: Viestien kieli - setting_default_privacy: Viestin näkyvyys - setting_default_sensitive: Merkitse media aina arkaluontoiseksi + setting_default_language: Julkaisun kieli + setting_default_privacy: Julkaisun näkyvyys + setting_default_sensitive: Merkitse media aina arkaluonteiseksi setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen @@ -224,7 +224,7 @@ fi: setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi - title: Otsikko + title: Nimi type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti @@ -236,7 +236,7 @@ fi: filters: actions: hide: Piilota kokonaan - warn: Piilota varoituksella + warn: Piilota ja näytä varoitus form_admin_settings: activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta rajapinnassa backups_retention_period: Käyttäjän arkiston säilytysaika @@ -268,14 +268,14 @@ fi: interactions: must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa - must_be_following_dm: Estä suorat viestit käyttäjiltä, joita et seuraa + must_be_following_dm: Estä yksityisviestit käyttäjiltä, joita et seuraa invite: comment: Kommentoi invite_request: text: Miksi haluat liittyä? ip_block: comment: Kommentti - ip: IP + ip: IP-osoite severities: no_access: Estä pääsy sign_up_block: Estä kirjautumiset @@ -284,11 +284,11 @@ fi: notification_emails: appeal: Joku valittaa valvojan päätöksestä digest: Lähetä koosteviestejä sähköpostitse - favourite: Lähetä sähköposti, kun joku tykkää tilastasi - follow: Lähetä sähköposti, kun joku seuraa sinua - follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua - mention: Lähetä sähköposti, kun sinut mainitaan - pending_account: Uusi tili tarvitsee tarkastusta + favourite: Joku lisäsi julkaisusi suosikkeihinsa + follow: Joku seurasi sinua + follow_request: Joku pyysi saada seurata sinua + mention: Joku mainitsi sinut + pending_account: Uusi tili tarvitsee tarkistusta reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: @@ -297,7 +297,7 @@ fi: label: Uusi Mastodon-versio on saatavilla none: Älä koskaan ilmoita päivityksistä (ei suositeltu) patch: Ilmoita virhekorjauspäivityksistä - trending_tag: Uusi trendi vaatii tarkastelua + trending_tag: Uusi trendi vaatii tarkistusta rule: text: Sääntö settings: From e5fe2d1a3974d2a19e2d011114588096467a1670 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 29 Sep 2023 15:51:36 +0200 Subject: [PATCH 110/237] Fix explore prompt appearing because of posts being received out of order (#27211) --- .../mastodon/features/home_timeline/index.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 63d373b9a9..93f9376285 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -39,8 +39,17 @@ const getHomeFeedSpeed = createSelector([ ], (statusIds, pendingStatusIds, statusMap) => { const recentStatusIds = pendingStatusIds.size > 0 ? pendingStatusIds : statusIds; const statuses = recentStatusIds.filter(id => id !== null).map(id => statusMap.get(id)).filter(status => status?.get('account') !== me).take(20); - const oldest = new Date(statuses.getIn([statuses.size - 1, 'created_at'], 0)); - const newest = new Date(statuses.getIn([0, 'created_at'], 0)); + + if (statuses.isEmpty()) { + return { + gap: 0, + newest: new Date(0), + }; + } + + const datetimes = statuses.map(status => status.get('created_at', 0)); + const oldest = new Date(datetimes.min()); + const newest = new Date(datetimes.max()); const averageGap = (newest - oldest) / (1000 * (statuses.size + 1)); // Average gap between posts on first page in seconds return { From bcb3c25ba44beb99b81545d090d25065184f9f55 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 2 Oct 2023 13:21:43 +0200 Subject: [PATCH 111/237] Fix websocket connections being incorrectly decremented twice on errors (#27238) --- streaming/index.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index 8015c6815a..3565ed2783 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -1386,19 +1386,21 @@ const startServer = async () => { }; wss.on('connection', (ws, req) => { - const location = url.parse(req.url, true); + // Note: url.parse could throw, which would terminate the connection, so we + // increment the connected clients metric straight away when we establish + // the connection, without waiting: + connectedClients.labels({ type: 'websocket' }).inc(); + // Setup request properties: req.requestId = uuid.v4(); req.remoteAddress = ws._socket.remoteAddress; + // Setup connection keep-alive state: ws.isAlive = true; - ws.on('pong', () => { ws.isAlive = true; }); - connectedClients.labels({ type: 'websocket' }).inc(); - /** * @type {WebSocketSession} */ @@ -1408,27 +1410,31 @@ const startServer = async () => { subscriptions: {}, }; - const onEnd = () => { + ws.on('close', function onWebsocketClose() { const subscriptions = Object.keys(session.subscriptions); subscriptions.forEach(channelIds => { removeSubscription(session.subscriptions, channelIds.split(';'), req) }); + // Decrement the metrics for connected clients: + connectedClients.labels({ type: 'websocket' }).dec(); + // ensure garbage collection: session.socket = null; session.request = null; session.subscriptions = {}; + }); - connectedClients.labels({ type: 'websocket' }).dec(); - }; - - ws.on('close', onEnd); - ws.on('error', onEnd); + // Note: immediately after the `error` event is emitted, the `close` event + // is emitted. As such, all we need to do is log the error here. + ws.on('error', (err) => { + log.error('websocket', err.toString()); + }); ws.on('message', (data, isBinary) => { if (isBinary) { - log.warn('socket', 'Received binary data, closing connection'); + log.warn('websocket', 'Received binary data, closing connection'); ws.close(1003, 'The mastodon streaming server does not support binary messages'); return; } @@ -1451,7 +1457,10 @@ const startServer = async () => { subscribeWebsocketToSystemChannel(session); - if (location.query.stream) { + // Parse the URL for the connection arguments (if supplied), url.parse can throw: + const location = req.url && url.parse(req.url, true); + + if (location && location.query.stream) { subscribeWebsocketToChannel(session, firstParam(location.query.stream), location.query); } }); From a5abc7075afcff93bd539b1f557fd0fcdde06e15 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:35:29 +0200 Subject: [PATCH 112/237] New Crowdin Translations (automated) (#27220) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fa.json | 2 +- app/javascript/mastodon/locales/fi.json | 24 ++-- app/javascript/mastodon/locales/fr-QC.json | 2 +- app/javascript/mastodon/locales/ja.json | 16 +-- app/javascript/mastodon/locales/lv.json | 30 ++--- app/javascript/mastodon/locales/sk.json | 109 ++++++++++++------- app/javascript/mastodon/locales/sr-Latn.json | 2 +- app/javascript/mastodon/locales/sr.json | 2 +- config/locales/doorkeeper.fa.yml | 2 + config/locales/doorkeeper.fi.yml | 2 +- config/locales/fi.yml | 34 +++--- config/locales/ja.yml | 4 +- config/locales/simple_form.fi.yml | 6 +- 13 files changed, 132 insertions(+), 103 deletions(-) diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index c1b067cff8..f4a2e09e73 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -338,7 +338,7 @@ "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها", "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.description": "توضیح", - "keyboard_shortcuts.direct": "باز کردن ستون اشاره‌های خصوصی", + "keyboard_shortcuts.direct": "برای گشودن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", "keyboard_shortcuts.favourite": "پسندیدن فرسته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 094b7d3b36..4c920b038f 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -206,7 +206,7 @@ "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", - "embed.preview": "Se tulee näyttämään tältä:", + "embed.preview": "Tältä se näyttää:", "emoji_button.activity": "Aktiviteetit", "emoji_button.clear": "Tyhjennä", "emoji_button.custom": "Mukautetut", @@ -226,7 +226,7 @@ "empty_column.account_timeline": "Ei viestejä täällä.", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole estänyt käyttäjiä.", - "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", @@ -314,17 +314,17 @@ "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", "home.show_announcements": "Näytä tiedotteet", - "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", - "interaction_modal.login.action": "Palaa aloitussivulle", - "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", + "interaction_modal.login.action": "Siirry kotiin", + "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista, etsi tervetulosähköposti saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -473,7 +473,7 @@ "onboarding.action.back": "Palaa takaisin", "onboarding.actions.back": "Palaa takaisin", "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen", - "onboarding.actions.go_to_home": "Siirry kotisyötteeseen", + "onboarding.actions.go_to_home": "Siirry kotisyötteeseeni", "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", @@ -618,10 +618,10 @@ "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", - "status.bookmark": "Tallenna kirjanmerkki", + "status.bookmark": "Lisää kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", - "status.copy": "Kopioi linkki julkaisuun", + "status.copy": "Kopioi julkaisun linkki", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -662,9 +662,9 @@ "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", - "status.show_less_all": "Näytä vähemmän kaikista", + "status.show_less_all": "Näytä kaikista vähemmän", "status.show_more": "Näytä lisää", - "status.show_more_all": "Näytä lisää kaikista", + "status.show_more_all": "Näytä kaikista enemmän", "status.show_original": "Näytä alkuperäinen", "status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}", "status.translate": "Käännä", @@ -715,7 +715,7 @@ "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", - "username.taken": "Kyseinen käyttäjätunnus on jo käytössä. Kokeile eri tunnusta", + "username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista", "video.close": "Sulje video", "video.download": "Lataa tiedosto", "video.exit_fullscreen": "Poistu koko näytön tilasta", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index 4da7477dca..16a18048b4 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -308,7 +308,7 @@ "home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_replies": "Afficher réponses", "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :", - "home.explore_prompt.title": "C'est chez vous dans Mastadon.", + "home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.", "home.hide_announcements": "Masquer les annonces", "home.pending_critical_update.body": "Veuillez mettre à jour votre serveur Mastodon dès que possible !", "home.pending_critical_update.link": "Voir les mises à jour", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index cfba6db93f..0bf0a96a27 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -1,13 +1,13 @@ { "about.blocks": "制限中のサーバー", "about.contact": "連絡先", - "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。", - "about.domain_blocks.no_reason_available": "制限理由", - "about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。", + "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアであり、Mastodon gGmbHの商標です。", + "about.domain_blocks.no_reason_available": "理由未記載", + "about.domain_blocks.preamble": "Mastodonでは原則的にあらゆるサーバー同士で交流したり、互いの投稿を読んだりできますが、当サーバーでは例外的に次のような制限を設けています。", "about.domain_blocks.silenced.explanation": "このサーバーのプロフィールやコンテンツは、明示的に検索したり、フォローでオプトインしない限り、通常は表示されません。", "about.domain_blocks.silenced.title": "制限", "about.domain_blocks.suspended.explanation": "これらのサーバーからのデータは処理されず、保存や変換もされません。該当するユーザーとの交流もできません。", - "about.domain_blocks.suspended.title": "停止済み", + "about.domain_blocks.suspended.title": "停止中", "about.not_available": "この情報はこのサーバーでは利用できません。", "about.powered_by": "{mastodon}による分散型ソーシャルメディア", "about.rules": "サーバーのルール", @@ -301,7 +301,7 @@ "hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}", "hashtag.follow": "ハッシュタグをフォローする", "hashtag.unfollow": "ハッシュタグのフォローを解除", - "hashtags.and_other": "+{count, plural, other {#件}}", + "hashtags.and_other": "ほか{count, plural, other {#個}}", "home.actions.go_to_explore": "話題をさがす", "home.actions.go_to_suggestions": "フォローするユーザーを検索", "home.column_settings.basic": "基本設定", @@ -405,7 +405,7 @@ "navigation_bar.discover": "見つける", "navigation_bar.domain_blocks": "ブロックしたドメイン", "navigation_bar.edit_profile": "プロフィールを編集", - "navigation_bar.explore": "エクスプローラー", + "navigation_bar.explore": "探索する", "navigation_bar.favourites": "お気に入り", "navigation_bar.filters": "フィルター設定", "navigation_bar.follow_requests": "フォローリクエスト", @@ -424,7 +424,7 @@ "not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。", "notification.admin.report": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", - "notification.favourite": "{name}さんがあなたの投稿をお気に入りに追加しました。", + "notification.favourite": "{name}さんがお気に入りしました", "notification.follow": "{name}さんにフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.mention": "{name}さんがあなたに返信しました", @@ -518,7 +518,7 @@ "privacy.public.long": "誰でも閲覧可", "privacy.public.short": "公開", "privacy.unlisted.long": "誰でも閲覧可、サイレント", - "privacy.unlisted.short": "未収載", + "privacy.unlisted.short": "非収載", "privacy_policy.last_updated": "{date}に更新", "privacy_policy.title": "プライバシーポリシー", "refresh": "更新", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index d35418e185..3f2c74cbac 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,11 +9,11 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", - "account.badges.bot": "Robots", + "account.badges.bot": "Automatizēts", "account.badges.group": "Grupa", "account.block": "Bloķēt @{name}", "account.block_domain": "Bloķēt domēnu {domain}", @@ -102,7 +102,7 @@ "bundle_modal_error.message": "Kaut kas nogāja greizi, ielādējot šo komponenti.", "bundle_modal_error.retry": "Mēģināt vēlreiz", "closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.", - "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši domēnā {domain}, lai izmantotu Mastodon.", + "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši {domain}, lai lietotu Mastodon.", "closed_registrations_modal.find_another_server": "Atrast citu serveri", "closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur tu izveido savu kontu, varēsi sekot līdzi un sazināties ar ikvienu šajā serverī. Tu pat vari vadīt to pats!", "closed_registrations_modal.title": "Reģistrēšanās Mastodon", @@ -113,7 +113,7 @@ "column.direct": "Privāti pieminēti", "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Bloķētie domēni", - "column.favourites": "Iecienīti", + "column.favourites": "Iecienītie", "column.firehose": "Tiešraides plūsmas", "column.follow_requests": "Sekošanas pieprasījumi", "column.home": "Sākums", @@ -151,7 +151,7 @@ "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", "compose_form.publish": "Publicēt", - "compose_form.publish_form": "Publicēt", + "compose_form.publish_form": "Jauns ieraksts", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Saglabāt izmaiņas", "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt multividi kā sensitīvu} other {Atzīmēt multivides kā sensitīvas}}", @@ -161,7 +161,7 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un sūdzēties", + "confirmations.block.block_and_report": "Bloķēt un Ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", @@ -236,7 +236,7 @@ "empty_column.follow_requests": "Šobrīd tev nav sekošanas pieprasījumu. Kad kāds pieteiksies tev sekot, pieprasījums parādīsies šeit.", "empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", - "empty_column.home": "Tava mājas laika līnija ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem. {suggestions}", + "empty_column.home": "Tava mājas laikrinda ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem.", "empty_column.list": "Šis saraksts pašreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.", "empty_column.lists": "Pašreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -476,23 +476,23 @@ "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", - "onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!", + "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Populārs Mastodon", "onboarding.share.lead": "Paziņo citiem, kā viņi tevi var atrast Mastodon!", "onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}", "onboarding.share.next_steps": "Iespējamie nākamie soļi:", "onboarding.share.title": "Kopīgo savu profilu", - "onboarding.start.lead": "Tavs jaunais Mastodon konts ir gatavs lietošanai. Lūk, kā tu vari to pilnīgāk izmantot:", - "onboarding.start.skip": "Vai vēlies izlaist tieši uz priekšu?", + "onboarding.start.lead": "Tagad tu esat daļa no Mastodon — unikālas, decentralizētas sociālo mediju platformas, kurā tu, nevis algoritms, veido savu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", + "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", "onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}", - "onboarding.steps.publish_status.body": "Sveicini pasauli.", + "onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", "onboarding.steps.setup_profile.body": "Citi, visticamāk, sazināsies ar tevi, izmantojot aizpildītu profilu.", "onboarding.steps.setup_profile.title": "Pielāgo savu profilu", "onboarding.steps.share_profile.body": "Paziņo saviem draugiem, kā tevi atrast Mastodon!", - "onboarding.steps.share_profile.title": "Kopīgo savu profilu", + "onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu", "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divu faktoru autentifikāciju. Tas darbojas ar jebkuru tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", "onboarding.tips.accounts_from_other_servers": "Vai zināji? Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!", "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu personīgo serveri!", @@ -518,7 +518,7 @@ "privacy.public.long": "Redzams visiem", "privacy.public.short": "Publiska", "privacy.unlisted.long": "Redzams visiem, bet izslēgts no satura atklāšanas funkcijām", - "privacy.unlisted.short": "Nerindota", + "privacy.unlisted.short": "Neiekļautie", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", "refresh": "Atsvaidzināt", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index bd1252b47f..da12eaa1b5 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -12,53 +12,53 @@ "about.powered_by": "Decentralizované sociálne médiá poháňané technológiou {mastodon}", "about.rules": "Pravidlá servera", "account.account_note_header": "Poznámka", - "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", + "account.add_or_remove_from_list": "Pridaj alebo odober zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", "account.block": "Blokuj @{name}", - "account.block_domain": "Ukry všetko z {domain}", + "account.block_domain": "Skry všetko z {domain}", "account.block_short": "Blokuj", "account.blocked": "Blokovaný/á", "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", - "account.cancel_follow_request": "Stiahni žiadosť o nasledovanie", - "account.direct": "Spomeň @{name} v súkromí", - "account.disable_notifications": "Prestaň ma oboznamovať, keď má @{name} príspevky", - "account.domain_blocked": "Doména ukrytá", + "account.cancel_follow_request": "Zruš žiadosť o sledovanie", + "account.direct": "Spomeň @{name} súkromne", + "account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky", + "account.domain_blocked": "Doména skrytá", "account.edit_profile": "Uprav profil", - "account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky", + "account.enable_notifications": "Oznamuj mi, keď má @{name} príspevky", "account.endorse": "Zobrazuj na profile", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", "account.featured_tags.title": "Odporúčané hashtagy používateľa {name}", - "account.follow": "Nasleduj", - "account.followers": "Nasledovatelia", + "account.follow": "Sleduj", + "account.followers": "Sledovatelia", "account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.", - "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúci} other {{counter} Sledujúci}}", - "account.following": "Nasledujem", + "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúcich} other {{counter} Sledujúcich}}", + "account.following": "Sledujem", "account.following_counter": "{count, plural, one {{counter} Sledovaných} other {{counter} Sledujúcich}}", - "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", - "account.follows_you": "Nasleduje ťa", + "account.follows.empty": "Tento používateľ ešte nikoho nesleduje.", + "account.follows_you": "Sleduje ťa", "account.go_to_profile": "Prejdi na profil", - "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", + "account.hide_reblogs": "Skry zdieľania od @{name}", "account.in_memoriam": "In Memoriam.", "account.joined_short": "Pridal/a sa", "account.languages": "Zmeniť odoberané jazyky", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", - "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", + "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sa sám rozhoduje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", - "account.mute": "Nevšímaj si @{name}", - "account.mute_notifications_short": "Stíš oboznámenia", - "account.mute_short": "Nevšímaj si", - "account.muted": "Nevšímaný/á", - "account.no_bio": "Nieje uvedený žiadny popis.", + "account.mute": "Stíš @{name}", + "account.mute_notifications_short": "Stíš oznámenia", + "account.mute_short": "Stíš", + "account.muted": "Stíšený", + "account.no_bio": "Nie je uvedený žiadny popis.", "account.open_original_page": "Otvor pôvodnú stránku", "account.posts": "Príspevky", "account.posts_with_replies": "Príspevky a odpovede", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", - "account.requested_follow": "{name} ťa žiada nasledovať", + "account.requested_follow": "{name} ti poslal žiadosť na sledovanie", "account.share": "Zdieľaj @{name} profil", "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", @@ -84,7 +84,7 @@ "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Oboznámenie", + "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skry zvuk", "autosuggest_hashtag.per_week": "{count} týždenne", @@ -119,7 +119,7 @@ "column.home": "Domov", "column.lists": "Zoznamy", "column.mutes": "Nevšímaní užívatelia", - "column.notifications": "Oboznámenia", + "column.notifications": "Oznámenia", "column.pins": "Pripnuté príspevky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", @@ -185,7 +185,7 @@ "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", "confirmations.reply.confirm": "Odpovedz", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", - "confirmations.unfollow.confirm": "Nesleduj", + "confirmations.unfollow.confirm": "Prestaň sledovať", "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", "conversation.delete": "Vymaž konverzáciu", "conversation.mark_as_read": "Označ za prečítané", @@ -223,7 +223,7 @@ "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", "empty_column.account_suspended": "Účet bol vylúčený", - "empty_column.account_timeline": "Niesu tu žiadne príspevky!", + "empty_column.account_timeline": "Nie sú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.", @@ -296,19 +296,24 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "hashtag.follow": "Nasleduj haštag", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} sledujúci} few {{counter} sledujúci} many {{counter} sledujúcich} other {{counter} sledujúcich}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes", + "hashtag.follow": "Sleduj haštag", "hashtag.unfollow": "Nesleduj haštag", + "hashtags.and_other": "…a {count, plural, one {} few {# ďalšie} many {# ďalších}other {# ďalších}}", "home.actions.go_to_explore": "Pozrieť, čo je trendy", "home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", + "home.explore_prompt.body": "Váš domovský informačný kanál bude obsahovať mix príspevkov z mriežok, ktoré ste sa rozhodli sledovať, ľudí, ktorých ste sa rozhodli sledovať, a príspevkov, ktoré preferujú. Ak sa vám to zdá príliš málo, možno budete chcieť:", "home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.", - "home.hide_announcements": "Skry oboznámenia", + "home.hide_announcements": "Skry oznámenia", "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", "home.pending_critical_update.link": "Pozri aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia!", - "home.show_announcements": "Ukáž oboznámenia", + "home.show_announcements": "Ukáž oznámenia", "interaction_modal.description.favourite": "S účtom na Mastodone si môžeš tento príspevok obľúbiť, aby si dal/a autorovi vedieť, že ho oceňuješ, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.", "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.", @@ -319,6 +324,7 @@ "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", "interaction_modal.sign_in": "Nie si prihláseý/á na tomto serveri. Kde je tvoj účet hostovaný?", + "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno! (napr. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok", "interaction_modal.title.follow": "Nasleduj {name}", "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok", @@ -346,7 +352,7 @@ "keyboard_shortcuts.mention": "spomeň autora", "keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov", "keyboard_shortcuts.my_profile": "otvor svoj profil", - "keyboard_shortcuts.notifications": "otvor panel oboznámení", + "keyboard_shortcuts.notifications": "Otvor panel oznámení", "keyboard_shortcuts.open_media": "na otvorenie médií", "keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov", "keyboard_shortcuts.profile": "otvor autorov profil", @@ -373,6 +379,7 @@ "lists.delete": "Vymaž list", "lists.edit": "Uprav zoznam", "lists.edit.submit": "Zmeň názov", + "lists.exclusive": "Skryť tieto príspevky z domovskej stránky", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", "lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ", @@ -426,11 +433,11 @@ "notification.reblog": "{name} zdieľal/a tvoj príspevok", "notification.status": "{name} práve uverejnil/a", "notification.update": "{name} upravil/a príspevok", - "notifications.clear": "Vyčisti oboznámenia", - "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", + "notifications.clear": "Vyčisti oznámenia", + "notifications.clear_confirmation": "Naozaj chceš nenávratne odstrániť všetky tvoje oznámenia?", "notifications.column_settings.admin.report": "Nové hlásenia:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", - "notifications.column_settings.alert": "Oboznámenia na ploche", + "notifications.column_settings.alert": "Oznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", "notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie", "notifications.column_settings.filter_bar.category": "Rýchle triedenie", @@ -444,8 +451,8 @@ "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", "notifications.column_settings.status": "Nové príspevky:", - "notifications.column_settings.unread_notifications.category": "Neprečítané oboznámenia", - "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oboznámenia", + "notifications.column_settings.unread_notifications.category": "Neprečítané oznámenia", + "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oznámenia", "notifications.column_settings.update": "Úpravy:", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", @@ -455,12 +462,12 @@ "notifications.filter.polls": "Výsledky ankiet", "notifications.filter.statuses": "Aktualizácie od ľudí, ktorých nasleduješ", "notifications.grant_permission": "Udeľ povolenie.", - "notifications.group": "{count} oboznámení", - "notifications.mark_as_read": "Označ každé oboznámenie za prečítané", - "notifications.permission_denied": "Oboznámenia na plochu sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", - "notifications.permission_denied_alert": "Oboznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača o to, bola už skôr zamietnutá", - "notifications.permission_required": "Oboznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", - "notifications_permission_banner.enable": "Povoliť oboznámenia na plochu", + "notifications.group": "{count} Oznámení", + "notifications.mark_as_read": "Označ každé oznámenie za prečítané", + "notifications.permission_denied": "Oznámenia na ploche sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", + "notifications.permission_denied_alert": "Oznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", + "notifications.permission_required": "Oznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", + "notifications_permission_banner.enable": "Povoliť oznámenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec", "onboarding.action.back": "Vziať ma späť", @@ -468,6 +475,7 @@ "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "Nazdar #Mastodon!", + "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", @@ -476,6 +484,7 @@ "onboarding.share.title": "Zdieľaj svoj profil", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Zvládli ste to!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", @@ -484,6 +493,12 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Vedeli ste? Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!", + "onboarding.tips.accounts_from_other_servers": "Vedeli ste? Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!", + "onboarding.tips.migration": "Vedeli ste? Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostovať svoj vlastný server!", + "onboarding.tips.verification": "Vedeli ste? Svoj účet môžete overiť umiestnením odkazu na svoj profil Mastodon na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!", + "password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla", + "password_confirmation.mismatching": "Zadané heslá sa nezhodujú", "picture_in_picture.restore": "Vrátiť späť", "poll.closed": "Uzatvorená", "poll.refresh": "Obnoviť", @@ -542,6 +557,7 @@ "report.reasons.dislike": "Nepáči sa mi", "report.reasons.dislike_description": "Nieje to niečo, čo chceš vidieť", "report.reasons.legal": "Je to nelegálne", + "report.reasons.legal_description": "Domnievate sa, že porušuje zákony vašej krajiny alebo krajiny servera", "report.reasons.other": "Je to niečo iné", "report.reasons.other_description": "Tento problém nepatrí do iných kategórií", "report.reasons.spam": "Je to spam", @@ -559,6 +575,7 @@ "report.thanks.title": "Nechceš to vidieť?", "report.thanks.title_actionable": "Vďaka za nahlásenie, pozrieme sa na to.", "report.unfollow": "Nesleduj @{name}", + "report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, zrušte jeho sledovanie.", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Právne ujednania", "report_notification.categories.other": "Ostatné", @@ -573,6 +590,8 @@ "search.quick_action.open_url": "Otvor URL v rámci Mastodonu", "search.quick_action.status_search": "Príspevky zodpovedajúce {x}", "search.search_or_paste": "Hľadaj, alebo vlož URL adresu", + "search_popout.full_text_search_disabled_message": "Nie je k dispozícii v doméne {domain}.", + "search_popout.language_code": "ISO kód jazyka", "search_popout.options": "Možnosti vyhľadávania", "search_popout.quick_actions": "Rýchle akcie", "search_popout.recent": "Nedávne vyhľadávania", @@ -585,14 +604,18 @@ "search_results.see_all": "Ukáž všetky", "search_results.statuses": "Príspevky", "search_results.title": "Hľadaj {q}", + "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (Aktívni používatelia za mesiac)", "server_banner.active_users": "aktívni užívatelia", "server_banner.administered_by": "Správcom je:", + "server_banner.introduction": "{domain} je súčasťou decentralizovanej sociálnej siete využívajúcej technológiu {mastodon}.", "server_banner.learn_more": "Zisti viac", "server_banner.server_stats": "Serverové štatistiky:", "sign_in_banner.create_account": "Vytvor účet", "sign_in_banner.sign_in": "Prihlás sa", "sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj", + "sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo haštagy, obľúbené veci, zdieľať ich a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", + "status.admin_domain": "Otvor rozhranie na moderovanie domény {domain}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", "status.bookmark": "Záložka", @@ -649,9 +672,11 @@ "status.uncached_media_warning": "Náhľad nie je k dispozícii", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", + "subscribed_languages.lead": "Po zmene sa na vašej domovskej stránke a časovej osi zoznamu zobrazia iba príspevky vo vybraných jazykoch. Ak chcete dostávať príspevky vo všetkých jazykoch, vyberte možnosť žiadne.", "subscribed_languages.save": "Ulož zmeny", + "subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}", "tabs_bar.home": "Domov", - "tabs_bar.notifications": "Oboznámenia", + "tabs_bar.notifications": "Oznámenia", "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", @@ -680,6 +705,7 @@ "upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením", "upload_modal.analyzing_picture": "Analyzujem obrázok…", "upload_modal.apply": "Použi", + "upload_modal.applying": "Nastavovanie…", "upload_modal.choose_image": "Vyber obrázok", "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", "upload_modal.detect_text": "Rozpoznaj text z obrázka", @@ -689,6 +715,7 @@ "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "upload_progress.processing": "Spracovávanie…", + "username.taken": "Používateľské meno je obsadené. Skúste iné", "video.close": "Zavri video", "video.download": "Stiahni súbor", "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 9750784bbc..f64952f7b5 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Vidljivo samo pomenutim korisnicima", "privacy.direct.short": "Samo pomenute osobe", "privacy.private.long": "Vidljivo samo pratiocima", - "privacy.private.short": "Samo pratiocima", + "privacy.private.short": "Samo pratioci", "privacy.public.long": "Vidljivo za sve", "privacy.public.short": "Javno", "privacy.unlisted.long": "Vidljivo svima, ali isključeno iz funkcija otkrivanja", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index bb4739cbcc..130b28bc74 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Видљиво само поменутим корисницима", "privacy.direct.short": "Само поменуте особе", "privacy.private.long": "Видљиво само пратиоцима", - "privacy.private.short": "Само пратиоцима", + "privacy.private.short": "Само пратиоци", "privacy.public.long": "Видљиво за све", "privacy.public.short": "Јавно", "privacy.unlisted.long": "Видљиво свима, али искључено из функција откривања", diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 085507f8bf..c56e76e346 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -149,6 +149,7 @@ fa: scopes: admin:read: خواندن تمام داده‌ها روی کارساز admin:read:accounts: خواندن اطّلاعات حساس از همهٔ حساب‌ها + admin:read:canonical_email_blocks: خواندن اطّلاعات حسّاس از همهٔ انسدادهای رایانامهٔ متعارف admin:read:domain_allows: خواندن اطّلاعات حساس از همهٔ دامنه ها اجازه داده شد admin:read:domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های مسدودشده admin:read:email_domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های رایانامه های مسدودشده @@ -156,6 +157,7 @@ fa: admin:read:reports: خواندن اطّلاعات حساس از همهٔ گزارش‌ها و حساب‌های گزارش‌شده admin:write: تغییر تمام داده‌ها روی کارساز admin:write:accounts: انجام کنش مدیریتی روی حساب‌ها + admin:write:canonical_email_blocks: انجام کنش‌های نظارتی روی همهٔ انسدادهای رایانامهٔ متعارف admin:write:domain_allows: انجام کنش مدیریتی روی اجازه‌های دامنه admin:write:domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنه admin:write:email_domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنهٔ رایانامه diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 8d030274e7..0f263b00d5 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -182,7 +182,7 @@ fi: write: muokkaa kaikkia tilisi tietoja write:accounts: muokkaa profiiliasi write:blocks: estä tilejä ja verkkotunnuksia - write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:bookmarks: lisää julkaisuja kirjanmerkkeihin write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut write:filters: luo suodattimia diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 466cb95a24..2043d327a1 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1,7 +1,7 @@ --- fi: about: - about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: Ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu! Pidä tietosi ominasi Mastodonilla!' + about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu rakenne! Pidä tietosi ominasi Mastodonin avulla!' contact_missing: Ei asetettu contact_unavailable: Ei saatavilla hosted_on: Mastodon palvelimella %{domain} @@ -262,8 +262,8 @@ fi: disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" - enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" - enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" + enable_sign_in_token_auth_user_html: "%{name} otti todennuksen sähköpostivaltuutuksella käyttöön käyttäjälle %{target}" + enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" @@ -584,7 +584,7 @@ fi: one: "%{count} ilmoitus" other: "%{count} ilmoitusta" action_log: Tarkastusloki - action_taken_by: Toimenpiteen tekijä + action_taken_by: Toimen tehnyt actions: delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. @@ -673,7 +673,7 @@ fi: moderation: Valvonta special: Erikois delete: Poista - description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. + description_html: "Käyttäjärooleilla voit muokata, mihin toimintoihin ja alueisiin käyttäjäsi pääsevät käsiksi." edit: Muokkaa "%{name}" roolia everyone: Oletus käyttöoikeudet everyone_full_description_html: Tämä on perusrooli joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. @@ -945,11 +945,11 @@ fi: webhooks: add_new: Lisää päätepiste delete: Poista - description_html: "Webhook mahdollistaa Mastodonin työntää reaaliaikaisia ilmoituksia valituista tapahtumista omaan sovellukseesi, joten sovelluksesi voi laukaista automaattisesti reaktioita." + description_html: "Webhookin avulla Mastodon voi puskea sovellukseesi reaaliaikaisia ilmoituksia valituista tapahtumista, jotta sovelluksesi voi laukaista reaktioita automaattisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Pois käytöstä edit: Muokkaa päätepistettä - empty: Sinulla ei ole vielä määritetty webhook-päätepisteitä. + empty: Et ole vielä määrittänyt webhook-päätepisteitä. enable: Ota käyttöön enabled: Aktiivinen enabled_events: @@ -1150,7 +1150,7 @@ fi: username_unavailable: Käyttäjänimesi ei tule saataville enää uudestaan disputes: strikes: - action_taken: Toteutetut toimet + action_taken: Tehty toimi appeal: Vetoomus appeal_approved: Tähän valitukseen on haettu muutosta, eikä se ole enää voimassa appeal_rejected: Valitus on hylätty @@ -1389,13 +1389,13 @@ fi: confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: - favourite: sähköpostit ilmoituksille - follow: seuraa sähköpostin ilmoituksia - follow_request: seuraa pyyntöjä sähköpostiin - mention: mainitse sähköpostin ilmoitukset - reblog: tehosta sähköpostien ilmoituksia + favourite: sähköposti-ilmoituksia suosikkeihin lisäämisistä + follow: sähköposti-ilmoituksia seuraamisista + follow_request: sähköposti-ilmoituksia seuraamispyynnöistä + mention: sähköposti-ilmoituksia maininnoista + reblog: sähköposti-ilmoituksia tehostuksista resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. - success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. + success_html: Sinulle ei enää lähetetä Mastodonin %{type} palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: validations: @@ -1812,7 +1812,7 @@ fi: suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili - edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. + edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' @@ -1847,7 +1847,7 @@ fi: success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain nickname_hint: Anna uuden suojausaivaimesi lempinimi - not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa + not_enabled: Et ole vielä ottanut WebAuthn-ohjelmaa käyttöön not_supported: Tämä selain ei tue suojausavaimia otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b18405fb65..6a72c1ca14 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -770,12 +770,12 @@ ja: critical_update: "※緊急 (速やかに適用してください)" description: Mastodonサーバーはいつでも最新の状態を保ち、新しい機能や修正を利用できるようにしておくことをおすすめします。またセキュリティの問題が発生した場合は、速やかにMastodonをアップデートすることが大切です。Mastodonは30分おきにアップデートを確認し、通知設定に応じて新しいアップデートをメールで通知します。 documentation_link: もっと見る - release_notes: 更新情報 + release_notes: リリースノート title: 利用可能なアップデート type: アップデートの種別 types: major: メジャーリリース - minor: リリース + minor: マイナーリリース patch: パッチ (バグ修正のみ) version: バージョン statuses: diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 1eec9a9317..1925ba77f3 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,7 +3,7 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. + discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta. @@ -49,7 +49,7 @@ fi: header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin - locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli + locale: Käyttöliittymän, sähköpostien ja puskuilmoitusten kieli password: Käytä vähintään 8 merkkiä phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. @@ -136,7 +136,7 @@ fi: position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: events: Valitse lähetettävät tapahtumat - template: Luo oma JSON-hyötykuorma käyttäen muuttujainterpolointia. Jättäessäsi kentän tyhjäksi, käytetään vakio-JSON-kuormaa. + template: Luo oma JSON-hyötykuorma käyttäen muuttujien interpolointia. Jätä kenttä tyhjäksi käyttääksesi vakio-JSON-kuormaa. url: Mihin tapahtumat lähetetään labels: account: From 42dfdd6bd9f226c51f1edd85af055f57d345ca8f Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:20:04 +0200 Subject: [PATCH 113/237] Fix import progress not updating on certain failures (#27247) --- app/workers/import/row_worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/import/row_worker.rb b/app/workers/import/row_worker.rb index 09dd6ce736..c86900e6ad 100644 --- a/app/workers/import/row_worker.rb +++ b/app/workers/import/row_worker.rb @@ -8,7 +8,7 @@ class Import::RowWorker sidekiq_retries_exhausted do |msg, _exception| ActiveRecord::Base.connection_pool.with_connection do # Increment the total number of processed items, and bump the state of the import if needed - bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:id) + bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:bulk_import_id) BulkImport.progress!(bulk_import_id) unless bulk_import_id.nil? end end From fdb3e43544acc8339f12ac19fa7f376bbb64ca76 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:42:52 +0200 Subject: [PATCH 114/237] Fix incorrectly keeping outdated update notices absent from the API endpoint (#27021) --- app/services/software_update_check_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index 49b92f104d..c8ce1753f5 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -35,11 +35,13 @@ class SoftwareUpdateCheckService < BaseService end def process_update_notices!(update_notices) - return if update_notices.blank? || update_notices['updatesAvailable'].blank? + return if update_notices.blank? || update_notices['updatesAvailable'].nil? # Clear notices that are not listed by the update server anymore SoftwareUpdate.where.not(version: update_notices['updatesAvailable'].pluck('version')).delete_all + return if update_notices['updatesAvailable'].blank? + # Check if any of the notices is new, and issue notifications known_versions = SoftwareUpdate.where(version: update_notices['updatesAvailable'].pluck('version')).pluck(:version) new_update_notices = update_notices['updatesAvailable'].filter { |notice| known_versions.exclude?(notice['version']) } From 2f5923e7da3849771c7bd60a0eff8bc87ba58d66 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 10:09:00 +0200 Subject: [PATCH 115/237] Change some worker lock TTLs (#27246) --- app/workers/account_deletion_worker.rb | 2 +- .../activitypub/synchronize_featured_collection_worker.rb | 2 +- .../activitypub/synchronize_featured_tags_collection_worker.rb | 2 +- app/workers/activitypub/update_distribution_worker.rb | 2 +- app/workers/admin/account_deletion_worker.rb | 2 +- app/workers/admin/domain_purge_worker.rb | 2 +- app/workers/publish_scheduled_status_worker.rb | 2 +- app/workers/resolve_account_worker.rb | 2 +- app/workers/scheduler/indexing_scheduler.rb | 2 +- app/workers/scheduler/scheduled_statuses_scheduler.rb | 2 +- app/workers/verify_account_links_worker.rb | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index b501511728..e4f943fbd1 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -3,7 +3,7 @@ class AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id, options = {}) account = Account.find(account_id) diff --git a/app/workers/activitypub/synchronize_featured_collection_worker.rb b/app/workers/activitypub/synchronize_featured_collection_worker.rb index f67d693cb3..7a187d7f53 100644 --- a/app/workers/activitypub/synchronize_featured_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, options = {}) options = { note: true, hashtag: false }.deep_merge(options.deep_symbolize_keys) diff --git a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb index 14af4f725c..570415c821 100644 --- a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedTagsCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, url) ActivityPub::FetchFeaturedTagsCollectionService.new.call(Account.find(account_id), url) diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb index d0391bb6f6..a04ac621f3 100644 --- a/app/workers/activitypub/update_distribution_worker.rb +++ b/app/workers/activitypub/update_distribution_worker.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ActivityPub::UpdateDistributionWorker < ActivityPub::RawDistributionWorker - sidekiq_options queue: 'push', lock: :until_executed + sidekiq_options queue: 'push', lock: :until_executed, lock_ttl: 1.day.to_i # Distribute an profile update to servers that might have a copy # of the account in question diff --git a/app/workers/admin/account_deletion_worker.rb b/app/workers/admin/account_deletion_worker.rb index 6e0eb331be..5dfdfb6e73 100644 --- a/app/workers/admin/account_deletion_worker.rb +++ b/app/workers/admin/account_deletion_worker.rb @@ -3,7 +3,7 @@ class Admin::AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id) DeleteAccountService.new.call(Account.find(account_id), reserve_username: true, reserve_email: true) diff --git a/app/workers/admin/domain_purge_worker.rb b/app/workers/admin/domain_purge_worker.rb index 095232a6d7..6c5250b660 100644 --- a/app/workers/admin/domain_purge_worker.rb +++ b/app/workers/admin/domain_purge_worker.rb @@ -3,7 +3,7 @@ class Admin::DomainPurgeWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(domain) PurgeDomainService.new.call(domain) diff --git a/app/workers/publish_scheduled_status_worker.rb b/app/workers/publish_scheduled_status_worker.rb index ce42f7be7c..aa5c4a834a 100644 --- a/app/workers/publish_scheduled_status_worker.rb +++ b/app/workers/publish_scheduled_status_worker.rb @@ -3,7 +3,7 @@ class PublishScheduledStatusWorker include Sidekiq::Worker - sidekiq_options lock: :until_executed + sidekiq_options lock: :until_executed, lock_ttl: 1.hour.to_i def perform(scheduled_status_id) scheduled_status = ScheduledStatus.find(scheduled_status_id) diff --git a/app/workers/resolve_account_worker.rb b/app/workers/resolve_account_worker.rb index 2b5be6d1b2..4ae2442af5 100644 --- a/app/workers/resolve_account_worker.rb +++ b/app/workers/resolve_account_worker.rb @@ -3,7 +3,7 @@ class ResolveAccountWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(uri) ResolveAccountService.new.call(uri) diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb index ff1b744442..5c985e25a0 100644 --- a/app/workers/scheduler/indexing_scheduler.rb +++ b/app/workers/scheduler/indexing_scheduler.rb @@ -5,7 +5,7 @@ class Scheduler::IndexingScheduler include Redisable include DatabaseHelper - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i IMPORT_BATCH_SIZE = 1000 SCAN_BATCH_SIZE = 10 * IMPORT_BATCH_SIZE diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb index b5801248f2..fe60d5524e 100644 --- a/app/workers/scheduler/scheduled_statuses_scheduler.rb +++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::ScheduledStatusesScheduler include Sidekiq::Worker - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.hour.to_i def perform publish_scheduled_statuses! diff --git a/app/workers/verify_account_links_worker.rb b/app/workers/verify_account_links_worker.rb index f606e6c26f..ad27f450b7 100644 --- a/app/workers/verify_account_links_worker.rb +++ b/app/workers/verify_account_links_worker.rb @@ -3,7 +3,7 @@ class VerifyAccountLinksWorker include Sidekiq::Worker - sidekiq_options queue: 'default', retry: false, lock: :until_executed + sidekiq_options queue: 'default', retry: false, lock: :until_executed, lock_ttl: 1.hour.to_i def perform(account_id) account = Account.find(account_id) From 9ecd47100138e3cac0ecf76a6b3ea1044ba74752 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:47:28 +0200 Subject: [PATCH 116/237] New Crowdin Translations (automated) (#27260) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/lv.json | 6 ++-- app/javascript/mastodon/locales/si.json | 35 ++++++++++------------ app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.hr.yml | 13 ++++++++ config/locales/hr.yml | 5 ++++ config/locales/simple_form.cy.yml | 5 ++++ 6 files changed, 42 insertions(+), 24 deletions(-) diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3f2c74cbac..aab7b9a8fb 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,7 +9,7 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", @@ -26,7 +26,7 @@ "account.domain_blocked": "Domēns ir bloķēts", "account.edit_profile": "Rediģēt profilu", "account.enable_notifications": "Paziņot man, kad @{name} publicē ierakstu", - "account.endorse": "Izcelt profilā", + "account.endorse": "Izcelts profilā", "account.featured_tags.last_status_at": "Beidzamā ziņa {date}", "account.featured_tags.last_status_never": "Ierakstu nav", "account.featured_tags.title": "{name} izceltie tēmturi", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 27c19adf8e..2c6979b018 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -100,7 +100,7 @@ "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", - "compose_form.publish_form": "Publish", + "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", @@ -160,7 +160,7 @@ "emoji_button.symbols": "සංකේත", "emoji_button.travel": "චාරිකා සහ ස්ථාන", "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", - "empty_column.account_timeline": "මෙහි දත් නැත!", + "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", @@ -240,7 +240,7 @@ "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", - "keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න", + "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", "lightbox.close": "වසන්න", @@ -253,7 +253,7 @@ "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", "lists.delete": "ලේඛනය මකන්න", "lists.edit": "ලේඛනය සංස්කරණය", - "lists.edit.submit": "මාතෘකාව වෙනස් කරන්න", + "lists.edit.submit": "සිරැසිය සංශෝධනය", "lists.new.create": "ලැයිස්තුව එකතු කරන්න", "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", @@ -346,14 +346,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "picture_in_picture.restore": "ආපහු දාන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", - "poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}", - "poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}", "poll.vote": "ඡන්දය", - "poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා", - "poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}", + "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", "poll_button.add_poll": "මත විමසුමක් යොදන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", @@ -363,13 +359,10 @@ "privacy.private.short": "අනුගාමිකයින් පමණි", "privacy.public.long": "සැමට දිස්වෙයි", "privacy.public.short": "ප්‍රසිද්ධ", - "privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය", - "privacy.unlisted.short": "ලැයිස්තුගත නොකළ", + "privacy_policy.title": "රහස්‍යතා ප්‍රතිපත්තිය", "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", - "regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!", "relative_time.days": "ද. {number}", - "relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -381,10 +374,9 @@ "relative_time.today": "අද", "reply_indicator.cancel": "අවලංගු කරන්න", "report.block": "අවහිර", - "report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.", "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", - "report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි", + "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", @@ -426,8 +418,12 @@ "search_results.all": "සියල්ල", "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", + "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", - "sign_in_banner.sign_in": "Sign in", + "search_results.title": "{q} සොයන්න", + "server_banner.learn_more": "තව දැනගන්න", + "sign_in_banner.create_account": "ගිණුමක් සාදන්න", + "sign_in_banner.sign_in": "පිවිසෙන්න", "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", "status.block": "@{name} අවහිර", @@ -455,12 +451,11 @@ "status.read_more": "තව කියවන්න", "status.reblog": "බූස්ට් කරන්න", "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogged_by": "{name} වැඩි කරන ලදී", "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", - "status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න", + "status.replyAll": "නූලට පිළිතුරු දෙන්න", "status.report": "@{name} වාර්තාව", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", @@ -508,10 +503,10 @@ "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", "upload_modal.detect_text": "රූපයෙහි පෙළ අනාවරණය", "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය", - "upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.", - "upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්", + "upload_modal.preparing_ocr": "OCR සඳහා සැරසෙමින්…", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", + "upload_progress.processing": "සැකසෙමින්…", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a6694b21df..8b5f7de2f3 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -373,7 +373,7 @@ "lightbox.previous": "上一步", "limited_account_hint.action": "一律顯示個人檔案", "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", - "link_preview.author": "按照 {name}", + "link_preview.author": "由 {name} 提供", "lists.account.add": "新增至列表", "lists.account.remove": "從列表中移除", "lists.delete": "刪除列表", diff --git a/config/locales/activerecord.hr.yml b/config/locales/activerecord.hr.yml index 98ca8155fd..b095244dd6 100644 --- a/config/locales/activerecord.hr.yml +++ b/config/locales/activerecord.hr.yml @@ -5,3 +5,16 @@ hr: poll: expires_at: Krajnji rok options: Opcije + user: + email: E-mail adresa + password: Lozinka + user/account: + username: Korisničko ime + user/invite_request: + text: Razlog + errors: + models: + account: + attributes: + username: + invalid: mora sadržavati samo slova, brojeve i _ diff --git a/config/locales/hr.yml b/config/locales/hr.yml index d1e6728d42..aa7ee760ba 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -27,12 +27,17 @@ hr: new_email: Nova e-pošta submit: Promijeni e-poštu title: Promjena e-pošte za %{username} + change_role: + changed_msg: Uloga uspješno dodijeljena! + label: Promjeni ulogu confirm: Potvrdi confirmed: Potvrđeno confirming: Potvrđivanje custom: Prilagođeno delete: Izbriši podatke deleted: Izbrisano + disable: Zamrzni + disable_two_factor_authentication: Onemogući 2FA display_name: Prikazano ime domain: Domena edit: Uredi diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 70194a1e0c..ddc1b1b935 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -292,7 +292,11 @@ cy: reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd software_updates: + all: Rhoi gwybod am bob ddiweddariad + critical: Rhoi gwybod am ddiweddariadau critigol yn unig label: Mae fersiwn Mastodon newydd ar gael + none: Byth rhoi gwybod am ddiweddariadau (nid argymhellir) + patch: Rhoi gwybod am ddiweddariadau trwsio byg trending_tag: Mae pwnc llosg newydd angen adolygiad rule: text: Rheol @@ -319,6 +323,7 @@ cy: url: URL diweddbwynt 'no': Na not_recommended: Heb ei argymell + overridden: Wedi'i gwrth-wneud recommended: Argymhellwyd required: mark: "*" From 6639168fd673c2cce30e38b9676bc55094088555 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Tue, 3 Oct 2023 10:47:50 +0200 Subject: [PATCH 117/237] Fix importer returning negative row estimates (#27258) --- app/lib/importer/base_importer.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/importer/base_importer.rb b/app/lib/importer/base_importer.rb index a21557d303..7688426b48 100644 --- a/app/lib/importer/base_importer.rb +++ b/app/lib/importer/base_importer.rb @@ -34,7 +34,9 @@ class Importer::BaseImporter # Estimate the amount of documents that would be indexed. Not exact! # @returns [Integer] def estimate! - ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples AS estimate FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['estimate'].to_i } + reltuples = ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['reltuples'].to_i } + # If the table has never yet been vacuumed or analyzed, reltuples contains -1 + [reltuples, 0].max end # Import data from the database into the index From a420f839f8e014af8205a0cb0d15a03ea1941a71 Mon Sep 17 00:00:00 2001 From: David Aaron <1858430+suddjian@users.noreply.github.com> Date: Tue, 3 Oct 2023 02:48:57 -0700 Subject: [PATCH 118/237] Change min age of backup policy from 1 week to 6 days (#27200) --- app/policies/backup_policy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/policies/backup_policy.rb b/app/policies/backup_policy.rb index 0ef89a8d0c..86b8efbe96 100644 --- a/app/policies/backup_policy.rb +++ b/app/policies/backup_policy.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class BackupPolicy < ApplicationPolicy - MIN_AGE = 1.week + MIN_AGE = 6.days def create? user_signed_in? && current_user.backups.where('created_at >= ?', MIN_AGE.ago).count.zero? From 30ec5580e09d5c52654896ebfeb25723042dc55d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 3 Oct 2023 04:52:21 -0500 Subject: [PATCH 119/237] Keep version string displayed without breakpoints in UI (#26986) --- .../mastodon/features/ui/components/link_footer.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/link_footer.jsx b/app/javascript/mastodon/features/ui/components/link_footer.jsx index 7aaa887ac6..9585df2ec4 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.jsx +++ b/app/javascript/mastodon/features/ui/components/link_footer.jsx @@ -100,7 +100,7 @@ class LinkFooter extends PureComponent { {DividingCircle} {DividingCircle} - v{version} + v{version}

); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 58bc430ce2..41436a92f9 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9008,6 +9008,10 @@ noscript { color: $dark-text-color; margin-bottom: 20px; + .version { + white-space: nowrap; + } + strong { font-weight: 500; } From 2376ff357ba57cbecf706eb39574ad9f69c32abb Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:32 +0200 Subject: [PATCH 120/237] Add a short-lived lock to trend refresh scheduler (#27253) --- app/workers/scheduler/trends/refresh_scheduler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/scheduler/trends/refresh_scheduler.rb b/app/workers/scheduler/trends/refresh_scheduler.rb index b559ba46b4..85c000deea 100644 --- a/app/workers/scheduler/trends/refresh_scheduler.rb +++ b/app/workers/scheduler/trends/refresh_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::Trends::RefreshScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i def perform Trends.refresh! From be22810ef9b2c8e068ef601660774b0b2493129f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:42 +0200 Subject: [PATCH 121/237] Fix boosts of local users being filtered in account timelines (#27204) --- app/lib/account_statuses_filter.rb | 6 +++++- .../account_statuses_filter_spec.rb | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) rename spec/{models => lib}/account_statuses_filter_spec.rb (91%) diff --git a/app/lib/account_statuses_filter.rb b/app/lib/account_statuses_filter.rb index a5aca96601..b34ebb4777 100644 --- a/app/lib/account_statuses_filter.rb +++ b/app/lib/account_statuses_filter.rb @@ -60,8 +60,12 @@ class AccountStatusesFilter .where(reblog_of_id: nil) .or( scope + # This is basically `Status.not_domain_blocked_by_account(current_account)` + # and `Status.not_excluded_by_account(current_account)` but on the + # `reblog` association. Unfortunately, there seem to be no clean way + # to re-use those scopes in our case. + .where(reblog: { accounts: { domain: nil } }).or(scope.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } })) .where.not(reblog: { account_id: current_account.excluded_from_timeline_account_ids }) - .where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } }) ) end diff --git a/spec/models/account_statuses_filter_spec.rb b/spec/lib/account_statuses_filter_spec.rb similarity index 91% rename from spec/models/account_statuses_filter_spec.rb rename to spec/lib/account_statuses_filter_spec.rb index 0cf6453fe3..c821eb4bac 100644 --- a/spec/models/account_statuses_filter_spec.rb +++ b/spec/lib/account_statuses_filter_spec.rb @@ -202,7 +202,7 @@ RSpec.describe AccountStatusesFilter do context 'when blocking a reblogged domain' do let(:other_account) { Fabricate(:account, domain: 'example.com') } let(:reblogging_status) { Fabricate(:status, account: other_account) } - let(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } before do current_account.block_domain!(other_account.domain) @@ -213,6 +213,20 @@ RSpec.describe AccountStatusesFilter do end end + context 'when blocking an unrelated domain' do + let(:other_account) { Fabricate(:account, domain: nil) } + let(:reblogging_status) { Fabricate(:status, account: other_account, visibility: 'public') } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + + before do + current_account.block_domain!('example.com') + end + + it 'returns the reblog from the non-blocked domain' do + expect(subject.results.pluck(:id)).to include(reblog.id) + end + end + context 'when muting a reblogged account' do let(:reblog) { status_with_reblog!('public') } From c3dd31475e2f22262af902f7a5addcce0f621326 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 13:12:39 +0200 Subject: [PATCH 122/237] Fix double scroll bars in some columns in advanced interface (#27187) --- app/javascript/mastodon/components/column.jsx | 6 -- .../mastodon/features/explore/index.jsx | 72 +++++++++---------- .../mastodon/features/explore/links.jsx | 2 +- .../mastodon/features/explore/results.jsx | 2 +- .../mastodon/features/explore/suggestions.jsx | 2 +- .../mastodon/features/explore/tags.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 42 ++++++----- .../styles/mastodon/components.scss | 3 + 8 files changed, 62 insertions(+), 69 deletions(-) diff --git a/app/javascript/mastodon/components/column.jsx b/app/javascript/mastodon/components/column.jsx index d737bd347c..cf9df3ba27 100644 --- a/app/javascript/mastodon/components/column.jsx +++ b/app/javascript/mastodon/components/column.jsx @@ -22,12 +22,6 @@ export default class Column extends PureComponent { scrollable = document.scrollingElement; } else { scrollable = this.node.querySelector('.scrollable'); - - // Some columns have nested `.scrollable` containers, with the outer one - // being a wrapper while the actual scrollable content is deeper. - if (scrollable.classList.contains('scrollable--flex')) { - scrollable = scrollable?.querySelector('.scrollable') || scrollable; - } } if (!scrollable) { diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 1a66adc87c..fefdc23fab 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -67,47 +67,45 @@ class Explore extends PureComponent {
-
- {isSearching ? ( - - ) : ( - <> -
- - + {isSearching ? ( + + ) : ( + <> +
+ + + + + + + + + {signedIn && ( + + + )} - - - + + + +
- {signedIn && ( - - - - )} + + + + + + + + - - - -
- - - - - - - - - - - - {intl.formatMessage(messages.title)} - - - - )} -
+ + {intl.formatMessage(messages.title)} + + + + )} ); } diff --git a/app/javascript/mastodon/features/explore/links.jsx b/app/javascript/mastodon/features/explore/links.jsx index 663aa6d80f..e610c84d41 100644 --- a/app/javascript/mastodon/features/explore/links.jsx +++ b/app/javascript/mastodon/features/explore/links.jsx @@ -52,7 +52,7 @@ class Links extends PureComponent { } return ( -
+
{banner} {isLoading ? () : links.map((link, i) => ( diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index c6fe9b78e0..4c23d6422d 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -204,7 +204,7 @@ class Results extends PureComponent {
-
+
+
{isLoading ? : suggestions.map(suggestion => ( ))} diff --git a/app/javascript/mastodon/features/explore/tags.jsx b/app/javascript/mastodon/features/explore/tags.jsx index 1a4d259690..11e0147214 100644 --- a/app/javascript/mastodon/features/explore/tags.jsx +++ b/app/javascript/mastodon/features/explore/tags.jsx @@ -51,7 +51,7 @@ class Tags extends PureComponent { } return ( -
+
{banner} {isLoading ? () : hashtags.map(hashtag => ( diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index e5b47d3fe0..efde58a5c0 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -169,32 +169,30 @@ const Firehose = ({ feedType, multiColumn }) => { -
-
- - - +
+ + + - - - + + + - - - -
- - + + +
+ + {intl.formatMessage(messages.title)} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 41436a92f9..567397a07b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8278,6 +8278,9 @@ noscript { flex: 1 1 auto; display: flex; flex-direction: column; + background: $ui-base-color; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } .story { From b733192c26a8583d0115149f069ee5b7aacf0716 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 3 Oct 2023 11:01:45 -0400 Subject: [PATCH 123/237] Dont match mention in url query string (#25656) Co-authored-by: Claire --- .rubocop_todo.yml | 4 ---- app/models/account.rb | 2 +- spec/models/account_spec.rb | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index adfd476892..631b9b5669 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -289,10 +289,6 @@ RSpec/MultipleMemoizedHelpers: RSpec/NestedGroups: Max: 6 -RSpec/PendingWithoutReason: - Exclude: - - 'spec/models/account_spec.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationController: Exclude: diff --git a/app/models/account.rb b/app/models/account.rb index 679093a59f..bb70b3a7b8 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -66,7 +66,7 @@ class Account < ApplicationRecord BACKGROUND_REFRESH_INTERVAL = 1.week.freeze USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i - MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i + MENTION_RE = %r{(? Date: Thu, 5 Oct 2023 09:50:08 +0200 Subject: [PATCH 124/237] Fix Vary headers not being set on some redirects (#27272) --- app/controllers/concerns/web_app_controller_concern.rb | 10 ++++++---- app/controllers/follower_accounts_controller.rb | 1 - app/controllers/following_accounts_controller.rb | 1 - spec/requests/cache_spec.rb | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 273d7344ca..5687d6e5b6 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -4,10 +4,10 @@ module WebAppControllerConcern extend ActiveSupport::Concern included do - prepend_before_action :redirect_unauthenticated_to_permalinks! - before_action :set_app_body_class - vary_by 'Accept, Accept-Language, Cookie' + + before_action :redirect_unauthenticated_to_permalinks! + before_action :set_app_body_class end def skip_csrf_meta_tags? @@ -22,7 +22,9 @@ module WebAppControllerConcern return if user_signed_in? && current_account.moved_to_account_id.nil? redirect_path = PermalinkRedirector.new(request.path).redirect_path + return if redirect_path.blank? - redirect_to(redirect_path) if redirect_path.present? + expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? + redirect_to(redirect_path) end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ffdbd01802..5effd9495e 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index cce296f9fd..268fad96d0 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index 178d19ed0d..c391c8b3da 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -30,6 +30,7 @@ module TestEndpoints /directory /@alice /@alice/110224538612341312 + /deck/home ).freeze # Endpoints that should be cachable when accessed anonymously but have a Vary From 9c9c6d722c9449da1b944a73f095ea9cab90db6b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:53:04 +0200 Subject: [PATCH 125/237] New Crowdin Translations (automated) (#27270) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/si.json | 290 ++++++------- config/locales/devise.si.yml | 18 +- config/locales/doorkeeper.si.yml | 72 ++-- config/locales/eu.yml | 3 + config/locales/si.yml | 524 +++++++++++++----------- config/locales/simple_form.si.yml | 88 ++-- 6 files changed, 511 insertions(+), 484 deletions(-) diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2c6979b018..4d116bfd31 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,79 +1,77 @@ { + "about.blocks": "මැදිහත්කරණ සේවාදායක", + "about.contact": "සබඳතාව:", + "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", + "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", - "account.badges.bot": "ස්වයං ක්‍රමලේඛය", "account.badges.group": "සමූහය", "account.block": "@{name} අවහිර කරන්න", "account.block_domain": "{domain} වසම අවහිර කරන්න", + "account.block_short": "අවහිර", "account.blocked": "අවහිර කර ඇත", "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", - "account.cancel_follow_request": "Withdraw follow request", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න", "account.domain_blocked": "වසම අවහිර කර ඇත", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", + "account.featured_tags.last_status_never": "ලිපි නැත", "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.", - "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", "account.following": "අනුගමනය", "account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", - "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", + "account.go_to_profile": "පැතිකඩට යන්න", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", - "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", - "account.mention": "@{name} සැඳහුම", + "account.mention": "@{name} සඳහන් කරන්ක", "account.mute": "@{name} නිහඬ කරන්න", + "account.mute_short": "නිහඬ", "account.muted": "නිහඬ කළා", "account.posts": "ලිපි", - "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", + "account.posts_with_replies": "ලිපි සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", - "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", - "account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න", - "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", "account.unblock_short": "අනවහිර", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", - "account.unfollow": "අනුගමනය නොකරන්න", - "account.unmute": "@{name}නිහඬ නොකරන්න", "account.unmute_short": "නොනිහඬ", "account_note.placeholder": "සටහන යෙදීමට ඔබන්න", - "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.retention.average": "සාමාන්යය", - "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", + "admin.dashboard.retention.cohort": "ලියාපදිංචි මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශ්‍රීලකයින්", "alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.", - "alert.rate_limited.title": "මිල සීමා සහිතයි", - "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", + "alert.rate_limited.title": "අනුපාතනය වී ඇත", + "alert.unexpected.message": "අනපේක්‍ෂිත දෝෂයක් සිදු විය.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", - "attachments_list.unprocessed": "(සැකසුම් නොකළ)", "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", - "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", + "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", "bundle_modal_error.close": "වසන්න", - "bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", + "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", + "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක", "column.about": "පිලිබඳව", "column.blocks": "අවහිර කළ අය", - "column.bookmarks": "පොත් යොමු", - "column.community": "දේශීය කාලරේඛාව", + "column.bookmarks": "පොත්යොමු", + "column.community": "ස්ථානීය කාලරේඛාව", + "column.direct": "පෞද්ගලික සැඳහුම්", "column.directory": "පැතිකඩ පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", + "column.favourites": "ප්‍රියතමයන්", + "column.firehose": "සජීව සංග්‍රහ", "column.follow_requests": "අනුගමන ඉල්ලීම්", "column.home": "මුල් පිටුව", - "column.lists": "ලේඛන", + "column.lists": "ලැයිස්තු", "column.mutes": "නිහඬ කළ අය", "column.notifications": "දැනුම්දීම්", "column.pins": "ඇමිණූ ලිපි", - "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", + "column.public": "ඒකාබද්ධ කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", @@ -87,70 +85,60 @@ "community.column_settings.remote_only": "දුරස්ථව පමණයි", "compose.language.change": "භාෂාව සංශෝධනය", "compose.language.search": "භාෂා සොයන්න...", + "compose.published.body": "ලිපිය පළ විය.", + "compose.published.open": "අරින්න", + "compose.saved.body": "ලිපිය සුරැකිණි.", "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", - "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", - "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", - "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", + "compose_form.encryption_warning": "මාස්ටඩන් වෙත පළ කරන දෑ අන්ත සංකේතනයෙන් ආරක්‍ෂා නොවේ. මාස්ටඩන් හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", "compose_form.poll.add_option": "තේරීමක් යොදන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", "compose_form.poll.option_placeholder": "තේරීම {number}", "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", - "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", - "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", - "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", - "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", - "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", - "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?", "confirmations.delete.confirm": "මකන්න", - "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete.message": "ඔබට මෙම ලිපිය මැකීමට වුවමනා ද?", "confirmations.delete_list.confirm": "මකන්න", - "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව සදහටම මැකීමට වුවමනා ද?", "confirmations.discard_edit_media.confirm": "ඉවත ලන්න", "confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", - "confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.", + "confirmations.edit.confirm": "සංස්කරණය", "confirmations.logout.confirm": "නික්මෙන්න", "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?", "confirmations.mute.confirm": "නිශ්ශබ්ද", - "confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.", - "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න", + "confirmations.mute.message": "{name} නිහඬ කිරීමට වුවමනා ද?", "confirmations.reply.confirm": "පිළිතුර", - "confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", - "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", "conversation.delete": "සංවාදය මකන්න", "conversation.mark_as_read": "කියවූ බව යොදන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "copypaste.copied": "පිටපත් විය", - "directory.federated": "දන්නා fediverse වලින්", + "copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්", + "directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්", "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", - "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", + "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", "emoji_button.custom": "අභිරුචි", - "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", "emoji_button.label": "ඉමොජි යොදන්න", - "emoji_button.nature": "ස්වභාවික", + "emoji_button.nature": "සොබාදහම", "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", @@ -164,154 +152,145 @@ "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", - "empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.", - "empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}", - "empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.", + "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", - "empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.", - "empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න", + "empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.", "error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.", "error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.", - "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", + "error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", + "error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.title": "ගවේශණය", + "explore.suggested_follows": "පුද්ගලයින්", + "explore.title": "ගවේශනය", + "explore.trending_links": "පුවත්", + "explore.trending_statuses": "ලිපි", "filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!", "filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්", "filter_modal.added.settings_link": "සැකසුම් පිටුව", + "filter_modal.added.title": "පෙරහන එක් කළා!", "filter_modal.select_filter.expired": "ඉකුත්ය", "filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}", "filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න", - "follow_request.authorize": "අවසරලත්", + "filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න", + "filter_modal.title.status": "ලිපියක් පෙරන්න", + "firehose.local": "මෙම සේවාදායකය", + "firehose.remote": "වෙනත් සේවාදායක", "follow_request.reject": "ප්‍රතික්‍ෂේප", - "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", + "footer.about": "පිළිබඳව", + "footer.directory": "පැතිකඩ නාමාවලිය", + "footer.get_app": "යෙදුම ගන්න", + "footer.invite": "ආරාධනා කරන්න", + "footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං", + "footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය", + "footer.source_code": "මූලාශ්‍ර කේතය බලන්න", + "footer.status": "තත්‍වය", "generic.saved": "සුරැකිණි", "getting_started.heading": "පටන් ගන්න", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", - "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", "hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි", - "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", - "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", + "home.actions.go_to_explore": "නැගී එන දෑ බලන්න", + "home.actions.go_to_suggestions": "පුද්ගලයින් සොයන්න", "home.column_settings.basic": "මූලික", - "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", + "home.explore_prompt.title": "මෙය ඔබගේ මාස්ටඩන් මුල් පිටුවයි.", "home.hide_announcements": "නිවේදන සඟවන්න", + "home.pending_critical_update.link": "යාවත්කාල බලන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", - "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", - "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", - "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", + "interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි", + "intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}", + "intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}", + "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}", "keyboard_shortcuts.back": "ආපසු යාත්‍රණය", - "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.boost": "වැඩි කිරීමට", - "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", - "keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට", "keyboard_shortcuts.description": "සවිස්තරය", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට", + "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගෙනයන්න", "keyboard_shortcuts.enter": "ලිපිය අරින්න", + "keyboard_shortcuts.favourites": "ප්‍රියතමයන් ලැයිස්තුව අරින්න", "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", - "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.hotkey": "උණු යතුර", - "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", - "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.muted": "නිහඬ කළ අය පෙන්වන්න", "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න", "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", "keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න", - "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලේඛනය අරින්න", + "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලැයිස්තුව අරින්න", "keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න", "keyboard_shortcuts.reply": "පිළිතුරු දීමට", - "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", - "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.spoilers": "CW ක්‍ෂේත්‍රය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", - "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", - "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", - "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", + "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න", "lightbox.close": "වසන්න", - "lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න", - "lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න", "lightbox.next": "ඊළඟ", "lightbox.previous": "පෙර", "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", - "lists.account.add": "ලේඛනයට දමන්න", - "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", - "lists.delete": "ලේඛනය මකන්න", - "lists.edit": "ලේඛනය සංස්කරණය", + "lists.account.add": "ලැයිස්තුවට දමන්න", + "lists.account.remove": "ලැයිස්තුවෙන් ඉවතලන්න", + "lists.delete": "ලැයිස්තුව මකන්න", + "lists.edit": "ලැයිස්තුව සංස්කරණය", "lists.edit.submit": "සිරැසිය සංශෝධනය", - "lists.new.create": "ලැයිස්තුව එකතු කරන්න", - "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", - "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", - "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්", + "lists.new.title_placeholder": "නව ලැයිස්තුවේ සිරැසිය", + "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයින්", "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", - "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", - "lists.subheading": "ඔබගේ ලේඛන", - "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", + "lists.subheading": "ඔබගේ ලැයිස්තු", "loading_indicator.label": "පූරණය වෙමින්...", - "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", "mute_modal.duration": "පරාසය", - "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", - "mute_modal.indefinite": "අවිනිශ්චිත", + "mute_modal.hide_notifications": "මෙම පුද්ගලයාගේ දැනුම්දීම් සඟවන්නද?", + "navigation_bar.about": "පිළිබඳව", "navigation_bar.blocks": "අවහිර කළ අය", "navigation_bar.bookmarks": "පොත්යොමු", - "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", - "navigation_bar.compose": "නව ටූට් සාදන්න", - "navigation_bar.discover": "සොයා ගන්න", + "navigation_bar.community_timeline": "ස්ථානීය කාලරේඛාව", + "navigation_bar.compose": "නව ලිපියක් ලියන්න", + "navigation_bar.direct": "පෞද්ගලික සැඳහුම්", "navigation_bar.domain_blocks": "අවහිර කළ වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", - "navigation_bar.explore": "ගවේෂණය කරන්න", + "navigation_bar.explore": "ගවේශනය", + "navigation_bar.favourites": "ප්‍රියතමයන්", "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", - "navigation_bar.lists": "ලේඛන", + "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "නිහඬ කළ අය", "navigation_bar.personal": "පුද්ගලික", "navigation_bar.pins": "ඇමිණූ ලිපි", "navigation_bar.preferences": "අභිප්‍රේත", - "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", + "navigation_bar.public_timeline": "ඒකාබද්ධ කාලරේඛාව", + "navigation_bar.search": "සොයන්න", "navigation_bar.security": "ආරක්ෂාව", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", - "notification.admin.report": "{name} වාර්තා {target}", - "notification.admin.sign_up": "{name} අත්සන් කර ඇත", "notification.follow": "{name} ඔබව අනුගමනය කළා", - "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", "notification.mention": "{name} ඔබව සඳහන් කර ඇත", "notification.own_poll": "ඔබගේ මත විමසුම නිමයි", "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි", - "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", "notification.status": "{name} දැන් පළ කළා", - "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", + "notification.update": "{name} ලිපියක් සංස්කරණය කළා", "notifications.clear": "දැනුම්දීම් මකන්න", - "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", + "notifications.clear_confirmation": "දැනුම්දීම් සියල්ල හිස් කිරීමට වුවමනා ද?", "notifications.column_settings.admin.report": "නව වාර්තා:", "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", + "notifications.column_settings.favourite": "ප්‍රියතමයන්:", "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", - "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", + "notifications.column_settings.poll": "මත විමසුමේ ප්‍රතිඵල:", "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", - "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", "notifications.column_settings.sound": "ශබ්දය වාදනය", "notifications.column_settings.status": "නව ලිපි:", @@ -319,38 +298,26 @@ "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", "notifications.column_settings.update": "සංශෝධන:", "notifications.filter.all": "සියල්ල", - "notifications.filter.boosts": "බූස්ට් කරයි", + "notifications.filter.favourites": "ප්‍රියතමයන්", "notifications.filter.follows": "අනුගමනය", "notifications.filter.mentions": "සැඳහුම්", - "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", - "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", - "notifications.grant_permission": "අවසර දෙන්න.", + "notifications.filter.polls": "මත විමසුමේ ප්‍රතිඵල", "notifications.group": "දැනුම්දීම් {count}", "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", - "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", - "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", - "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", - "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", - "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", + "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!", + "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න", + "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න", + "onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය", + "onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න", + "onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", + "poll.reveal": "ප්‍රතිඵල බලන්න", "poll.vote": "ඡන්දය", "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", - "poll_button.add_poll": "මත විමසුමක් යොදන්න", + "poll_button.add_poll": "මත විමසුමක් අරඹන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", "privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි", @@ -363,6 +330,7 @@ "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", "relative_time.days": "ද. {number}", + "relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -377,10 +345,9 @@ "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", - "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", - "report.category.title_status": "තැපැල්", + "report.category.title_status": "ලිපිය", "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", "report.forward": "{target} වෙත හරවන්න", @@ -391,7 +358,7 @@ "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", - "report.reasons.other": "ඒක වෙන දෙයක්", + "report.reasons.other": "එය වෙනත් දෙයක්", "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", "report.reasons.spam": "එය අයාචිතයි", "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", @@ -402,8 +369,8 @@ "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", "report.submit": "යොමන්න", - "report.target": "වාර්තාව {target}", - "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", + "report.target": "{target} වාර්තා කිරීම", + "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", @@ -415,8 +382,9 @@ "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", + "search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න", + "search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න", "search_results.all": "සියල්ල", - "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", @@ -424,24 +392,23 @@ "server_banner.learn_more": "තව දැනගන්න", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", - "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", - "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", + "status.admin_status": "මෙම ලිපිය මැදිහත්කරණ අතුරුමුහුණතෙහි අරින්න", "status.block": "@{name} අවහිර", "status.bookmark": "පොත්යොමුවක්", - "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", - "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", "status.delete": "මකන්න", "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", "status.edit": "සංස්කරණය", "status.edited": "සංශෝධිතයි {date}", "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", "status.embed": "කාවැද්දූ", + "status.filter": "මෙම ලිපිය පෙරන්න", "status.filtered": "පෙරන ලද", + "status.hide": "ලිපිය සඟවන්න", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", "status.load_more": "තව පූරණය", "status.media_hidden": "මාධ්‍ය සඟවා ඇත", - "status.mention": "@{name} සැඳහුම", + "status.mention": "@{name} සඳහන් කරන්ක", "status.more": "තව", "status.mute": "@{name} නිහඬව", "status.mute_conversation": "සංවාදය නිහඬව", @@ -449,14 +416,10 @@ "status.pin": "පැතිකඩට අමුණන්න", "status.pinned": "ඇමිණූ ලිපියකි", "status.read_more": "තව කියවන්න", - "status.reblog": "බූස්ට් කරන්න", - "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", - "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", "status.replyAll": "නූලට පිළිතුරු දෙන්න", - "status.report": "@{name} වාර්තාව", + "status.report": "@{name} වාර්තා කරන්න", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", "status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න", @@ -464,29 +427,29 @@ "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", "status.show_more": "තවත් පෙන්වන්න", "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.translate": "පරිවර්තනය", + "status.translated_from_with": "{provider} මගින් {lang} භාෂාවෙන් පරිවර්තනය කර ඇත", + "status.uncached_media_warning": "පෙරදසුන නැත", "status.unmute_conversation": "සංවාදය නොනිහඬ", "status.unpin": "පැතිකඩෙන් ගළවන්න", "subscribed_languages.save": "වෙනස්කම් සුරකින්න", "tabs_bar.home": "මුල් පිටුව", "tabs_bar.notifications": "දැනුම්දීම්", - "time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා", - "time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා", - "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා", - "time_remaining.moments": "ඉතිරිව ඇති මොහොත", - "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", + "time_remaining.days": "{number, plural, one {දවස් #} other {දවස් #}} ක් ඉතිරිය", + "time_remaining.hours": "{number, plural, one {පැය #} other {පැය #}} ක් ඉතිරිය", + "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} ක් ඉතිරිය", + "time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", "units.short.thousand": "{count}කි", "upload_area.title": "උඩුගතයට ඇද දමන්න", - "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න", + "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට අමුණන්න", "upload_error.limit": "සීමාව ඉක්මවා ඇත.", "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", @@ -507,6 +470,7 @@ "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", "upload_progress.processing": "සැකසෙමින්…", + "username.taken": "නම දැනටමත් අරගෙන ඇත", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index a20057cef9..c866bed0e9 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -23,7 +23,6 @@ si: explanation: ඔබ මෙම ඊමේල් ලිපිනය සමඟ %{host} හි ගිණුමක් සාදා ඇත. ඔබ එය සක්‍රිය කිරීමට එක ක්ලික් කිරීමක් ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. explanation_when_pending: ඔබ මෙම විද්‍යුත් තැපැල් ලිපිනය සමඟ %{host} වෙත ආරාධනාවක් සඳහා ඉල්ලුම් කළා. ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. ඔබගේ විස්තර වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට ඔබට පුරනය විය හැක, නමුත් ඔබගේ ගිණුම අනුමත වන තුරු ඔබට බොහෝ කාර්යයන් වෙත ප්‍රවේශ විය නොහැක. ඔබගේ අයදුම්පත ප්‍රතික්ෂේප කළහොත්, ඔබගේ දත්ත ඉවත් කරනු ඇත, එබැවින් ඔබෙන් වැඩිදුර ක්‍රියාමාර්ග අවශ්‍ය නොවනු ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. extra_html: කරුණාකර සේවාදායකයේ නීති සහ අපගේ සේවා කොන්දේසිද පරීක්ෂා කරන්න. - subject: 'Mastodon: %{instance}සඳහා තහවුරු කිරීමේ උපදෙස්' title: වි. තැපෑල තහවුරු කරන්න email_changed: explanation: 'ඔබගේ ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් වෙමින් පවතී:' @@ -33,30 +32,26 @@ si: password_change: explanation: ඔබගේ ගිණුම සඳහා මුරපදය වෙනස් කර ඇත. extra: ඔබ ඔබගේ මුරපදය වෙනස් නොකළේ නම්, යමෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. - subject: 'Mastodon: මුරපදය වෙනස් විය' + subject: 'මාස්ටඩන්: මුරපදය වෙනස් විය' title: මුරපදය වෙනස් විය reconfirmation_instructions: explanation: ඔබගේ ඊමේල් වෙනස් කිරීමට නව ලිපිනය තහවුරු කරන්න. - extra: මෙම වෙනස ඔබ විසින් ආරම්භ කරන ලද්දක් නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වන තෙක් Mastodon ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් නොවේ. - subject: 'Mastodon: %{instance}සඳහා විද්‍යුත් තැපෑල තහවුරු කරන්න' title: වි-තැපෑල තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න explanation: ඔබ ඔබගේ ගිණුම සඳහා නව මුරපදයක් ඉල්ලා ඇත. extra: ඔබ මෙය ඉල්ලා නොසිටියේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වී අලුත් එකක් සාදන තෙක් ඔබේ මුරපදය වෙනස් නොවනු ඇත. - subject: 'Mastodon: මුරපද උපදෙස් යළි පිහිටුවන්න' + subject: 'මාස්ටඩන්: මුරපදය යළි සැකසීමේ උපදෙස්' title: මුරපදය යළි සැකසීම two_factor_disabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය අක්‍රීය කර ඇත' title: ද්විපියවර අබලයි two_factor_enabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය සක්‍රීය කර ඇත' title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. - subject: 'Mastodon: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කරන ලදී' + subject: 'මාස්ටඩන්: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි' title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස් විය unlock_instructions: subject: 'මාස්ටඩන්: අගුළු හැරීමේ උපදේශ' @@ -67,15 +62,13 @@ si: title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත deleted: explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමෙන් මකා ඇත - subject: 'Mastodon: ආරක්ෂක යතුර මකා ඇත' + subject: 'මාස්ටඩන්: ආරක්‍ෂණ යතුර මකා ඇත' title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අක්‍රිය කර ඇත' title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත' title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' @@ -108,8 +101,7 @@ si: already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න - not_found: හමු වුණේ නැහැ - not_locked: අගුලු දමා නොතිබුණි + not_found: හමු නොවිණි not_saved: one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 2307f63c0a..31b38444d3 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -74,9 +74,9 @@ si: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. last_used_at: අවසන් වරට භාවිතා කළේ %{date} - never_used: කවදාවත් පාවිච්චි කළේ නැහැ + never_used: භාවිතා කර නැත scopes: අවසර - superapp: අභ්යන්තර + superapp: අභ්‍යන්තර title: ඔබගේ බලයලත් අයදුම්පත් errors: messages: @@ -104,33 +104,34 @@ si: flash: applications: create: - notice: යෙදුම නිර්මාණය කරන ලදී. + notice: යෙදුම සෑදිණි. destroy: - notice: යෙදුම මකා ඇත. + notice: යෙදුම මැකිණි. update: - notice: යෙදුම යාවත්කාලීන කරන ලදී. + notice: යෙදුම යාවත්කාල විය. authorized_applications: destroy: notice: අයදුම්පත අවලංගු කරන ලදී. grouped_scopes: access: - read: කියවීමට පමණක් ප්‍රවේශය - read/write: කියවීමට සහ ලිවීමට ප්‍රවේශය - write: ලිවීමට පමණක් ප්‍රවේශය + read: ප්‍රවේශය කියවීමට පමණි + read/write: කියවීමට හා ලිවීමට ප්‍රවේශය + write: ප්‍රවේශය ලිවීමට පමණි title: accounts: ගිණුම් - admin/accounts: ගිණුම් පරිපාලනය + admin/accounts: ගිණුම් කළමනාකරණය admin/all: සියලුම පරිපාලන කාර්යයන් admin/reports: වාර්තා පරිපාලනය + all: ඔබගේ මාස්ටඩන් ගිණුමට පූර්ණ ප්‍රවේශය blocks: කුට්ටි - bookmarks: පිටු සලකුණු + bookmarks: පොත්යොමු conversations: සංවාද crypto: අන්ත සංකේතනය + favourites: ප්‍රියතමයන් filters: පෙරහන් follows: පහත සඳහන් lists: ලැයිස්තු - media: මාධ්ය ඇමුණුම් - mutes: නිහඬ කරයි + media: මාධ්‍ය ඇමුණුම් notifications: දැනුම්දීම් push: තල්ලු දැනුම්දීම් reports: වාර්තා @@ -142,39 +143,40 @@ si: applications: යෙදුම් oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු application: - title: වි.සත්යා. (OAuth) තොරතුරු අවශ්‍යයි + title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි scopes: - admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න - admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:write: සේවාදායකයේ සියලුම දත්ත වෙනස් කරන්න - admin:write:accounts: ගිණුම් මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - admin:write:reports: වාර්තා මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - crypto: end-to-end encryption භාවිතා කරන්න + admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවයි + admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:write: සේවාදායකයේ සියලුම දත්ත සංශෝධනය කරයි + admin:write:accounts: ගිණුම් සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + admin:write:reports: වාර්තා සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + crypto: අන්ත සංකේතනය භාවිතා කරයි follow: ගිණුම් සබඳතා වෙනස් කරන්න - push: ඔබගේ තල්ලු දැනුම්දීම් ලබා ගන්න - read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න - read:accounts: ගිණුම් තොරතුරු බලන්න + push: ඔබගේ තල්ලු දැනුම්දීම් ලබන්න + read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවයි + read:accounts: ගිණුම්වල තොරතුරු දකියි read:blocks: ඔබගේ වාරණ බලන්න - read:bookmarks: ඔබගේ පිටු සලකුණු බලන්න + read:bookmarks: ඔබගේ පොත්යොමු දකියි + read:favourites: ඔබගේ ප්‍රියතමයන් බලන්න read:filters: ඔබගේ පෙරහන් බලන්න read:follows: ඔබගේ පහත සඳහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න read:mutes: ඔබේ ගොළු බලන්න - read:notifications: ඔබගේ දැනුම්දීම් බලන්න + read:notifications: ඔබගේ දැනුම්දීම් බලයි read:reports: ඔබගේ වාර්තා බලන්න - read:search: ඔබ වෙනුවෙන් සොයන්න - read:statuses: සියලුම පෝස්ට් බලන්න + read:search: ඔබ වෙනුවෙන් සොයයි + read:statuses: සියලු ලිපි බලයි write: ඔබගේ ගිණුමේ සියලුම දත්ත වෙනස් කරන්න write:accounts: ඔබගේ පැතිකඩ වෙනස් කරන්න - write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න - write:bookmarks: පිටු සලකුණු සටහන් + write:blocks: ගිණුම් සහ වසම් අවහිර කරයි + write:bookmarks: ලිපි වලට පොත්යොමු තබයි write:conversations: සංවාද නිහඬ කිරීම සහ මකා දැමීම - write:filters: පෙරහන් කරන්න + write:favourites: ප්‍රියතම ලිපි + write:filters: පෙරහන් සාදයි write:follows: මිනිසුන් අනුගමනය කරන්න write:lists: ලැයිස්තු සාදන්න - write:media: මාධ්‍ය ගොනු උඩුගත කරන්න - write:mutes: මිනිසුන් සහ සංවාද කරන්න - write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න - write:reports: වෙනත් පුද්ගලයින් වාර්තා කරන්න - write:statuses: පළ කිරීම් පළ කරන්න + write:media: මාධ්‍ය ගොනු උඩුගත කරයි + write:mutes: සංවාද හා පුද්ගලයින් නිහඬ කරයි + write:notifications: ඔබගේ දැනුම්දීම් හිස් කරයි + write:statuses: ලිපි පළ කරයි diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7ca7f63a5b..d21259ee77 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -785,6 +785,9 @@ eu: release_notes: Bertsio oharrak title: Eguneraketak eskuragarri type: Mota + types: + major: Argitalpen handia + minor: Argitalpen txikia version: Bertsioa statuses: account: Egilea diff --git a/config/locales/si.yml b/config/locales/si.yml index 45be8b76f2..787d6fde38 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,10 +1,11 @@ --- si: about: - about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, ආයතනික නිරීක්ෂණ නැත, සදාචාරාත්මක සැලසුම් සහ විමධ්‍යගත කිරීම! Mastodon සමඟ ඔබේ දත්ත අයිති කරගන්න!' - contact_missing: සකස් කර නැත + about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, සංස්ථානික අවේක්‍ෂණ නැත, යහපතට නිර්මිතයි සහ විමධ්‍යගතයි! මාස්ටඩන් සමඟ ඔබගේ දත්ත අයිතිව තබාගන්න!' + contact_missing: සකසා නැත contact_unavailable: අ/නොවේ - hosted_on: Mastodon %{domain}හි සත්කාරකත්වය දරයි + hosted_on: "%{domain} හරහා සත්කාරකත්‍වය ලබයි" + title: පිළිබඳව accounts: follow: අනුගමනය followers: @@ -14,7 +15,7 @@ si: instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී - nothing_here: මෙහි කිසිත් නැත! + nothing_here: මෙහි කිසිවක් නැත! pin_errors: following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: @@ -23,51 +24,49 @@ si: posts_tab_heading: ලිපි admin: account_actions: - action: ක්‍රියාව සිදු කරන්න - title: "%{acct}මත මධ්‍යස්ථ ක්‍රියාව සිදු කරන්න" + action: ක්‍රියාමාර්ගයක් ගන්න account_moderation_notes: - create: සටහන හැරයන්න - created_msg: මධ්‍යස්ථ සටහන සාර්ථකව සාදන ලදී! - destroyed_msg: මධ්‍යස්ථ සටහන සාර්ථකව විනාශ විය! + create: සටහනක් තබන්න accounts: add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න - approve: අනුමත කරන්න + approve: අනුමැතිය approved_msg: "%{username}හි ලියාපදිංචි වීමේ යෙදුම සාර්ථකව අනුමත කරන ලදී" are_you_sure: ඔබට විශ්වාසද? - avatar: අවතාරය + avatar: ප්‍රතිරූපය by_domain: වසම change_email: + changed_msg: වි-තැපෑල සාර්ථකව වෙනස් විය! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල submit: වි-තැපෑල වෙනස් කරන්න title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න" + change_role: + changed_msg: භූමිකාව සාර්ථකව වෙනස් විය! + label: භූමිකාව වෙනස් කරන්න + no_role: නව භූමිකාව + title: "%{username} සඳහා භූමිකාව වෙනස් කරන්න" confirm: සනාථ කරන්න - confirmed: තහවුරු කර ඇත + confirmed: සනාථ කර ඇත confirming: සනාථ කරමින් custom: අභිරුචි delete: දත්ත මකන්න - deleted: මකා දමන ලදී - demote: පහත් කරන්න + deleted: මකා ඇත destroyed_msg: "%{username}හි දත්ත ඉක්මනින් මකා දැමීමට පෝලිම් කර ඇත" - disable: කැටි කරන්න disable_sign_in_token_auth: ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න disable_two_factor_authentication: 2FA අබල කරන්න - disabled: ශීත කළ display_name: ප්රදර්ශන නාමය domain: වසම edit: සංස්කරණය email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය - enable: කැටි කිරීම ඉවත් කරන්න enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" followers: අනුගාමිකයින් - follows: පහත සඳහන් header: ශීර්ෂය inbox_url: එන ලිපි URL - invite_request_text: එක්වීම සඳහා + invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) joined: එක් වී ඇත @@ -84,12 +83,13 @@ si: moderation: active: සක්‍රීයයි all: සියල්ල - pending: පොරොත්තුවෙන් + disabled: අබලයි + pending: පොරොත්තු suspended: අත්හිටුවන ලදි - title: මධ්යස්ථභාවය - moderation_notes: මධ්‍යස්ථ සටහන් + title: මැදිහත්කරණය + moderation_notes: මැදිහත්කරණ සටහන් most_recent_activity: වඩාත්ම මෑත ක්රියාකාරිත්වය - most_recent_ip: ඊට වඩා අ.ජා.කේ.(IP) + most_recent_ip: මෑත අ.ජා.කෙ. (IP) no_account_selected: කිසිවක් තෝරා නොගත් බැවින් ගිණුම් කිසිවක් වෙනස් කර නැත no_limits_imposed: සීමාවන් පනවා නැත not_subscribed: දායක වී නැත @@ -99,37 +99,36 @@ si: previous_strikes_description_html: one: මෙම ගිණුමට එක වර්ජනයක් ඇත. other: මෙම ගිණුමේ වර්ජන %{count} ඇත. - promote: ප්රවර්ධනය කරන්න protocol: කෙටුම්පත - public: ප්රසිද්ධ + public: ප්‍රසිද්ධ push_subscription_expires: පුෂ් දායකත්වය කල් ඉකුත් වේ - redownload: පැතිකඩ නැවුම්කරන්න + redownload: පැතිකඩ නැවුම් කරන්න redownloaded_msg: මූලාරම්භයේ සිට %{username}හි පැතිකඩ සාර්ථකව නැවුම් කරන ලදී reject: ප්‍රතික්ෂේප rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" - remove_avatar: අවතාරය ඉවත් කරන්න + remove_avatar: ප්‍රතිරූපය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" resend_confirmation: already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත reset: නැවත සකසන්න - reset_password: මුරපදය නැවතසකසන්න + reset_password: මුරපදය යළි සකසන්න resubscribe: නැවත දායක වන්න + role: භූමිකාව search: සොයන්න search_same_email_domain: එකම විද්‍යුත් තැපැල් වසම සහිත වෙනත් පරිශීලකයන් search_same_ip: එකම IP සහිත වෙනත් පරිශීලකයන් + security: ආරක්‍ෂාව security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitive: සංවේදී sensitized: සංවේදී ලෙස සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා targeted_reports: වෙනත් අය විසින් වාර්තා කරන ලදී - silence: සීමාව - silenced: සීමාසහිත + silenced: සීමා සහිතයි statuses: ලිපි strikes: පෙර වැඩ වර්ජන subscribe: දායක වන්න @@ -147,26 +146,25 @@ si: unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" unsubscribe: දායක නොවන්න unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" - username: පරිශීලක නාමය + username: පරිශ්‍රීලක නාමය view_domain: වසම සඳහා සාරාංශය බලන්න warn: අවවාද web: වියමන - whitelisted: ෆෙඩරේෂන් සඳහා අවසර ඇත + whitelisted: ඒකාබද්ධයට ඉඩ දී ඇත action_logs: action_types: approve_appeal: අභියාචනය අනුමත කරන්න approve_user: පරිශීලක අනුමත කරන්න assigned_to_self_report: වාර්තාව පැවරීම - change_email_user: පරිශීලකයින්ට වි-තැපෑල වෙනස් කරන්න confirm_user: පරිශීලක තහවුරු කරන්න create_account_warning: අවවාදයක් සාදන්න create_announcement: නිවේදනය සාදන්න create_custom_emoji: අභිරුචි ඉමොජි සාදන්න - create_domain_allow: වසම් ඉඩදීමක් සාදන්න - create_domain_block: වසම් අවහිරයක් සාදන්න + create_domain_allow: වසමකට ඉඩදීම සාදන්න create_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එකක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න create_unavailable_domain: ලබා ගත නොහැකි වසම සාදන්න + create_user_role: භූමිකාව සාදන්න demote_user: පරිශීලකයා පහත් කරන්න destroy_announcement: නිවේදනය මකන්න destroy_custom_emoji: අභිරුචි ඉමොජි මකන්න @@ -178,23 +176,21 @@ si: destroy_status: පළ කිරීම මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න - disable_custom_emoji: අභිරුචි ඉමොජි අබල කරන්න + disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න disable_sign_in_token_auth_user: පරිශීලකයා සඳහා ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න - disable_user: පරිශීලනය කරන්න - enable_custom_emoji: අභිරුචි ඉමොජි සබල කරන්න + enable_custom_emoji: අභිරුචි ඉමෝජි සබල කරන්න enable_sign_in_token_auth_user: පරිශීලකයා සඳහා විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කරන්න enable_user: පරිශීලක සබල කරන්න memorialize_account: ගිණුම අනුස්මරණ කරන්න - promote_user: පරිශීලක ප්රවර්ධනය කරන්න reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න reject_user: පරිශීලක ප්‍රතික්ෂේප කරන්න - remove_avatar_user: Avatar ඉවත් කරන්න - reopen_report: වාර්තාව නැවත විවෘත කරන්න - reset_password_user: මුරපදය නැවතසකසන්න + remove_avatar_user: ප්‍රතිරූපය ඉවත් කරන්න + reopen_report: වාර්තාව නැවත අරින්න + reset_password_user: මුරපදය යළි සකසන්න resolve_report: වාර්තාව විසඳන්න sensitive_account: බල සංවේදී ගිණුම silence_account: ගිණුම සීමා කරන්න - suspend_account: සැලකිය යුතු + suspend_account: ගිණුම අත්හිටුවන්න unassigned_report: වාර්තාව පැවරීම ඉවත් කරන්න unblock_email_account: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න unsensitive_account: බල සංවේදී ගිණුම අහෝසි කරන්න @@ -205,7 +201,6 @@ si: update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න update_status: පළ කිරීම යාවත්කාලීන කරන්න actions: - approve_appeal_html: "%{name} අනුමත මධ්‍යස්ථ තීරණ අභියාචනය %{target}සිට" approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" change_email_user_html: "%{name} පරිශීලක %{target}ගේ ඊමේල් ලිපිනය වෙනස් කළේය" @@ -236,7 +231,6 @@ si: enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" promote_user_html: "%{name} උසස් පරිශීලක %{target}" - reject_appeal_html: "%{name} %{target}සිට මධ්‍යස්ථ තීරණ අභියාචනය ප්‍රතික්ෂේප කරන ලදී" reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" remove_avatar_user_html: "%{name} %{target}ගේ අවතාරය ඉවත් කරන ලදී" reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" @@ -255,8 +249,8 @@ si: update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. - filter_by_action: ක්‍රියාව අනුව පෙරන්න - filter_by_user: පරිශීලක අනුව පෙරන්න + filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න title: විගණන සටහන announcements: destroyed_msg: නිවේදනය සාර්ථකව මකා ඇත! @@ -279,22 +273,22 @@ si: assign_category: කාණ්ඩය පැවරීම by_domain: වසම copied_msg: ඉමොජි වල දේශීය පිටපත සාර්ථකව සාදන ලදී - copy: පිටපත් + copy: පිටපතක් copy_failed_msg: එම ඉමොජියේ දේශීය පිටපතක් සෑදීමට නොහැකි විය create_new_category: නව ප්‍රවර්ගයක් සාදන්න created_msg: ඉමොජි සාර්ථකව නිර්මාණය කළා! delete: මකන්න destroyed_msg: Emojo සාර්ථකව විනාශ විය! disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි disabled_msg: එම ඉමොජිය සාර්ථකව අබල කරන ලදී - emoji: ඉමොජි + emoji: ඉමෝජි enable: සබල කරන්න - enabled: සබල කර ඇත + enabled: සබලයි enabled_msg: එම ඉමොජි සාර්ථකව සබල කරන ලදී image_hint: PNG හෝ GIF %{size}දක්වා list: ලැයිස්තුව - listed: ලැයිස්තුගත කර ඇත + listed: ලැයිස්තුගත new: title: නව අභිරුචි ඉමොජි එක් කරන්න not_permitted: මෙම ක්‍රියාව සිදු කිරීමට ඔබට අවසර නැත @@ -313,7 +307,7 @@ si: interactions: අන්තර්ක්රියා media_storage: මාධ්ය ගබඩාව new_users: නව පරිශීලකයන් - opened_reports: වාර්තා විවෘත විය + opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" other: "%{count} අභියාචනා පොරොත්තු" @@ -329,11 +323,11 @@ si: resolved_reports: වාර්තා විසඳා ඇත software: මෘදුකාංගය sources: ලියාපදිංචි මූලාශ්‍ර - space: අවකාශය භාවිතය + space: ඉඩ භාවිතය title: උපකරණ පුවරුව top_languages: ඉහළම ක්රියාකාරී භාෂා top_servers: ඉහළම ක්රියාකාරී සේවාදායකයන් - website: වෙබ් අඩවිය + website: අඩවිය disputes: appeals: empty: අභියාචනා හමු නොවීය. @@ -353,7 +347,6 @@ si: existing_domain_block_html: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත, ඔබට එය අවහිර කිරීම ඉවත් කිරීමට අවශ්‍යයි. new: create: බ්ලොක් එකක් සාදන්න - hint: ඩොමේන් බ්ලොක් එක දත්ත සමුදාය තුල ගිණුම් ඇතුලත් කිරීම් නිර්මාණය වීම වලක්වන්නේ නැත, නමුත් එම ගිණුම් වලට ප්‍රතික්‍රියාශීලීව සහ ස්වයංක්‍රීයව විශේෂිත මධ්‍යස්ථ ක්‍රම යොදනු ඇත. severity: noop: කිසිවක් නැත suspend: අත්හිටුවන්න @@ -361,7 +354,6 @@ si: obfuscate: අපැහැදිලි වසම් නාමය obfuscate_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම් ලැයිස්තුවේ වසම් නාමය අර්ධ වශයෙන් අපැහැදිලි කරන්න private_comment: පුද්ගලික අදහස - private_comment_hint: පරිපාලකයින් විසින් අභ්‍යන්තර භාවිතය සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. public_comment: ප්‍රසිද්ධ අදහස public_comment_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම්, සාමාන්‍ය ජනතාව සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. reject_media: මාධ්‍ය ගොනු ප්‍රතික්ෂේප කරන්න @@ -415,16 +407,16 @@ si: by_domain: වසම confirm_purge: ඔබට මෙම වසමෙන් දත්ත ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද? content_policies: - comment: අභ්යන්තර සටහන + comment: අභ්‍යන්තර සටහන description_html: ඔබට මෙම වසම සහ එහි ඕනෑම උප වසමකින් සියලුම ගිණුම් වලට අදාළ වන අන්තර්ගත ප්‍රතිපත්ති නිර්වචනය කළ හැක. policies: reject_media: මාධ්‍ය ප්‍රතික්ෂේප කරන්න reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න silence: සීමාව suspend: අත්හිටුවන්න - policy: ප්රතිපත්ති + policy: ප්‍රතිපත්තිය reason: පොදු හේතුව - title: අන්තර්ගත ප්රතිපත්ති + title: අන්තර්ගත ප්‍රතිපත්ති dashboard: instance_accounts_dimension: වැඩිපුරම අනුගමනය කරන ගිණුම් instance_accounts_measure: ගබඩා කර ඇති ගිණුම් @@ -452,7 +444,7 @@ si: moderation: all: සියල්ල limited: සීමා සහිතයි - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස purge: පිරිසිදු කරන්න @@ -468,7 +460,6 @@ si: deactivate_all: සියල්ල අක්‍රිය කරන්න filter: all: සියල්ල - available: පවතින expired: ඉකුත් වී ඇත title: පෙරහන title: ඇරයුම් @@ -494,13 +485,13 @@ si: delete: මකන්න description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි enable: සබල කරන්න enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් - save_and_enable: සුරකින්න සහ සක්රිය කරන්න + save_and_enable: සුරකින්න හා සබල කරන්න setup: රිලේ සම්බන්ධතාවයක් සකසන්න signatures_not_enabled: ආරක්ෂිත මාදිලිය හෝ සීමිත ෆෙඩරේෂන් මාදිලිය සබල කර ඇති අතර රිලේ නිවැරදිව ක්‍රියා නොකරනු ඇත status: තත්වය @@ -524,21 +515,21 @@ si: add_to_report: වාර්තා කිරීමට තවත් එක් කරන්න are_you_sure: ඔබට විශ්වාසද? assign_to_self: මට පවරන්න - assigned: පවරා ඇති උපපරිපාලක by_target_domain: වාර්තා කළ ගිණුමෙහි වසම - category: වර්ගය + cancel: අවලංගු + category: ප්‍රවර්ගය category_description_html: මෙම ගිණුම සහ/හෝ අන්තර්ගතය වාර්තා කළ හේතුව වාර්තා කළ ගිණුම සමඟ සන්නිවේදනයේ සඳහන් කරනු ඇත comment: none: කිසිවක් නැත comment_description_html: 'වැඩි විස්තර සැපයීම සඳහා, %{name} ලිවීය:' created_at: වාර්තා කර ඇත - delete_and_resolve: පළ කිරීම් මකන්න - forwarded: යොමු කළා - forwarded_to: "%{domain}වෙත යොමු කරන ලදී" + delete_and_resolve: ලිපි මකන්න + forwarded: හරවා යවා ඇත + forwarded_to: "%{domain} වෙත හරවා යැවිණි" mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න - no_one_assigned: කිසි කෙනෙක නැහැ + no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න create_and_resolve: සටහන සමඟ විසඳන්න @@ -546,10 +537,9 @@ si: delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් - notes_description_html: අනෙකුත් උපපරිපාලකයින්ට සහ ඔබේ අනාගතයට සටහන් බලන්න සහ තබන්න quick_actions_description_html: 'වාර්තා කළ අන්තර්ගතය බැලීමට ඉක්මන් ක්‍රියාමාර්ගයක් ගන්න හෝ පහළට අනුචලනය කරන්න:' remote_user_placeholder: "%{instance}සිට දුරස්ථ පරිශීලකයා" - reopen: වාර්තාව නැවත විවෘත කරන්න + reopen: වාර්තාව නැවත අරින්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම reported_by: විසින් වාර්තා @@ -562,17 +552,46 @@ si: target_origin: වාර්තා කළ ගිණුමේ ආරම්භය title: වාර්තා unassign: පැවරීම ඉවත් කරන්න + unknown_action_msg: 'නොදන්නා ක්‍රියාමාර්ගයකි: %{action}' unresolved: නොවිසඳී ඇත updated_at: යාවත්කාලීන කරන ලදී view_profile: පැතිකඩ බලන්න + roles: + categories: + administration: පරිපාලනය + devops: DevOps + invites: ඇරයුම් + moderation: මැදිහත්කරණය + special: විශේෂ + delete: මකන්න + privileges: + invite_users: ආරාධනා කරන්න + manage_announcements: නිවේදනය කළමනාකරණය + manage_federation: ඒකාබද්ධ කළමනාකරණය + manage_invites: ආරාධනා කළමනාකරණය + manage_reports: වාර්තා කළමනාකරණය + manage_roles: භූමිකා කළමනාකරණය + manage_rules: නීති කළමනාකරණය + manage_settings: සැකසුම් කළමනාකරණය + manage_user_access: ප්‍රවේශය කළමනාකරණය + manage_users: පරිශ්‍රීලකයින් කළමනාකරණය + view_dashboard: උපකරණ පුවරුව බලන්න + view_devops: DevOps + title: භූමිකා rules: - add_new: නීතිය එකතු කරන්න delete: මකන්න description_html: බොහෝ දෙනා සේවා කොන්දේසි කියවා එකඟ වූ බව ප්‍රකාශ කරන අතර, සාමාන්‍යයෙන් මිනිසුන් ගැටලුවක් පැනනඟින තුරු කියවා නොගනිති. පැතලි බුලට් පොයින්ට් ලිස්ට් එකකින් ඒවා ලබා දීමෙන් බැලූ බැල්මට ඔබේ සේවාදායකයේ නීති බැලීම පහසු කරන්න. තනි නීති කෙටි හා සරලව තබා ගැනීමට උත්සාහ කරන්න, නමුත් ඒවා විවිධ අයිතම වලට බෙදීමට උත්සාහ නොකරන්න. - edit: නීතිය සංස්කරණය කරන්න + edit: නීතිය සංස්කරණය empty: තවමත් සේවාදායක රීති නිර්වචනය කර නොමැත. title: සේවාදායකයේ නීති settings: + about: + manage_rules: සේවාදායකයේ නීති කළමනාකරණය + title: පිළිබඳව + appearance: + title: පෙනුම + discovery: + profile_directory: පැතිකඩ නාමාවලිය domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -582,26 +601,43 @@ si: approved: ලියාපදිංචි වීමට අනුමැතිය අවශ්‍යයි none: කිසිවෙකුට ලියාපදිංචි විය නොහැක open: ඕනෑම කෙනෙකුට ලියාපදිංචි විය හැක + title: සේවාදායකයේ සැකසුම් site_uploads: delete: උඩුගත කළ ගොනුව මකන්න destroyed_msg: අඩවිය උඩුගත කිරීම සාර්ථකව මකා ඇත! + software_updates: + documentation_link: තව දැනගන්න + release_notes: නිකුතු සටහන් + title: තිබෙන යාවත්කාල + type: වර්ගය + version: අනුවාදය statuses: - back_to_account: ගිණුම් පිටුවට ආපසු යන්න - back_to_report: වාර්තා පිටුවට ආපසු යන්න + account: කර්තෘ + application: යෙදුම + back_to_account: ගිණුමේ පිටුවට ආපසු + back_to_report: වාර්තා පිටුවට ආපසු batch: remove_from_report: වාර්තාවෙන් ඉවත් කරන්න report: වාර්තාව - deleted: මකා දමන ලදී + deleted: මකා ඇත + favourites: ප්‍රියතමයන් + history: අනුවාද ඉතිහාසය + language: භාෂාව media: title: මාධ්‍යය + metadata: පාරදත්ත no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත - title: ගිණුම් තනතුරු - with_media: මාධ්‍ය දායකත්වය + open: ලිපිය අරින්න + original_status: මුල් ලිපිය + status_changed: ලිපිය සංශෝධිතයි + title: ගිණුමේ ලිපි + trending: නැගී එන + with_media: මාධ්‍ය සමඟ strikes: actions: - delete_statuses: "%{target}ගේ පළ කිරීම් %{name} මකා දමන ලදී" + delete_statuses: "%{target}ගේ ලිපි %{name} මකා ඇත" disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" - mark_statuses_as_sensitive: "%{name} %{target}ගේ පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත" + mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" @@ -611,28 +647,35 @@ si: system_checks: database_schema_check: message_html: පොරොත්තු දත්ත සමුදා සංක්‍රමණයන් ඇත. යෙදුම අපේක්ෂිත පරිදි ක්‍රියා කරන බව සහතික කිරීමට කරුණාකර ඒවා ධාවනය කරන්න + elasticsearch_preset: + action: ප්‍රලේඛනය බලන්න + elasticsearch_preset_single_node: + action: ප්‍රලේඛනය බලන්න elasticsearch_running_check: message_html: Elasticsearch වෙත සම්බන්ධ වීමට නොහැකි විය. කරුණාකර එය ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න, නැතහොත් සම්පූර්ණ පෙළ සෙවීම අක්‍රීය කරන්න elasticsearch_version_check: message_html: 'නොගැලපෙන ඉලාස්ටික් සෙවුම් අනුවාදය: %{value}' version_comparison: Elasticsearch %{running_version} ක්‍රියාත්මක වන අතර %{required_version} අවශ්‍ය වේ rules_check: - action: සේවාදායක නීති කළමනාකරණය කරන්න + action: සේවාදායකයේ නීති කළමනාකරණය message_html: ඔබ සේවාදායක රීති කිසිවක් නිර්වචනය කර නැත. sidekiq_process_check: message_html: "%{value} පෝලිම්(ය) සඳහා Sidekiq ක්‍රියාවලියක් ක්‍රියාත්මක නොවේ. කරුණාකර ඔබේ Sidekiq වින්‍යාසය සමාලෝචනය කරන්න" + software_version_critical_check: + action: තිබෙන යාවත්කාල බලන්න + software_version_patch_check: + action: තිබෙන යාවත්කාල බලන්න tags: review: තත්‍වය සමාලෝචනය updated_msg: Hashtag සැකසුම් සාර්ථකව යාවත්කාලීන කරන ලදී title: පරිපාලනය trends: - allow: ඉඩ දෙන්න - approved: අනුමත කළා + allow: ඉඩදෙන්න + approved: අනුමතයි disallow: අවසර නොදෙන්න links: - allow: සබැඳියට ඉඩ දෙන්න + allow: සබැඳියට ඉඩදෙන්න allow_provider: ප්‍රකාශකයාට ඉඩ දෙන්න - description_html: මේවා ඔබගේ සේවාදායකය විසින් පළ කිරීම් දකින ගිණුම් මගින් දැනට බොහෝ සෙයින් බෙදා ගන්නා සබැඳි වේ. එය ඔබගේ පරිශීලකයින්ට ලෝකයේ සිදුවෙමින් පවතින දේ සොයා ගැනීමට උදවු කළ හැක. ඔබ ප්‍රකාශකයා අනුමත කරන තුරු සබැඳි කිසිවක් ප්‍රසිද්ධියේ ප්‍රදර්ශනය නොවේ. ඔබට තනි සබැඳිවලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: සබැඳියට ඉඩ නොදෙන්න disallow_provider: ප්‍රකාශකයාට ඉඩ නොදෙන්න shared_by_over_week: @@ -640,7 +683,6 @@ si: other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් බෙදා ගන්නා ලදී title: නැඟී එන සබැඳි usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් බෙදා ගන්නා ලදී - only_allowed: අවසර දී ඇත pending_review: පොරොත්තු සමාලෝචනය preview_card_providers: allowed: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු විය හැක @@ -651,14 +693,13 @@ si: statuses: allow: පළ කිරීමට ඉඩ දෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - description_html: මේ වන විට ඔබේ සේවාදායකය දන්නා පෝස්ට් මේ වන විට බොහෝ බෙදාහරින සහ මේ මොහොතේ වැඩි කැමැත්තක් දක්වයි. එය ඔබගේ නව සහ නැවත පැමිණෙන පරිශීලකයින්ට අනුගමනය කිරීමට තවත් පුද්ගලයින් සොයා ගැනීමට උදවු කළ හැක. ඔබ කර්තෘ අනුමත කරන තෙක් පළ කිරීම් කිසිවක් ප්‍රසිද්ධියේ නොපෙන්වන අතර, කර්තෘ තම ගිණුම අන් අයට යෝජනා කිරීමට ඉඩ දෙයි. ඔබට තනි පළ කිරීම්වලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: පළ කිරීමට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: one: එක් වරක් බෙදාගත් හෝ ප්‍රිය කරන ලදී other: "%{friendly_count} වරක් බෙදාගෙන ප්‍රිය කරන ලදී" - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි tags: current_score: වත්මන් ලකුණු %{score} dashboard: @@ -667,9 +708,8 @@ si: tag_servers_dimension: ඉහළම සේවාදායකයන් tag_servers_measure: විවිධ සේවාදායකයන් tag_uses_measure: සම්පූර්ණ භාවිතය - description_html: මේවා දැනට ඔබගේ සේවාදායකය දකින බොහෝ පළ කිරීම් වල දිස්වන හැෂ් ටැග් වේ. මේ මොහොතේ මිනිසුන් වැඩිපුරම කතා කරන්නේ කුමක් දැයි සොයා ගැනීමට එය ඔබගේ පරිශීලකයින්ට උදවු කළ හැක. ඔබ ඒවා අනුමත කරන තුරු හෑෂ් ටැග් ප්‍රසිද්ධියේ නොපෙන්වයි. - listable: යෝජනා කළ හැක - not_listable: යෝජනා නොකරනු ඇත + listable: යෝජනා කළ හැකිය + not_listable: යෝජනා නොවනු ඇත not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත not_usable: භාවිතා කළ නොහැක peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" @@ -692,7 +732,6 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - description_html: A webhook Mastodon හට තෝරාගත් සිදුවීම් පිළිබඳ තත්‍ය කාලීන දැනුම්දීම් ක් ඔබේම යෙදුමට තල්ලු කිරීමට හැකියාව ලබා දෙයි, එම නිසා ඔබේ යෙදුමට ස්වයංක්‍රීයව ප්‍රතික්‍රියා අවුලුවාලීමට හැකිය. disable: අක්රිය කරන්න disabled: ආබාධිතයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න @@ -700,8 +739,8 @@ si: enable: සබල කරන්න enabled: ක්රියාකාරී enabled_events: - one: 1 සබල කළ සිදුවීමක් - other: "%{count} සබල කළ සිදුවීම්" + one: සබල සිදුවීම් 1 + other: සබල සිදුවීම් %{count} events: සිදුවීම් new: නව webhook rotate_secret: රහස කරකවන්න @@ -718,9 +757,6 @@ si: sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට suspend: ඔවුන්ගේ ගිණුම අත්හිටුවීමට - body: "%{target} යනු %{type}ක් වූ %{date}සිට %{action_taken_by} කින් මධ්‍යස්ථ තීරණයක් අභියාචනා කරයි. ඔවුන් මෙසේ ලිවීය." - next_steps: ඔබට මධ්‍යස්ථ තීරණය අවලංගු කිරීමට අභියාචනය අනුමත කළ හැකිය, නැතහොත් එය නොසලකා හරින්න. - subject: "%{username} යනු %{instance}හි මධ්‍යස්ථ තීරණයකට අභියාචනා කරයි" new_pending_account: body: නව ගිණුමේ විස්තර පහතින්. ඔබට මෙම යෙදුම අනුමත කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට හැකිය. subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) @@ -747,25 +783,25 @@ si: hint_html: ඔබට වෙනත් ගිණුමකින් මෙය වෙත මාරු වීමට අවශ්‍ය නම්, මෙහිදී ඔබට අන්වර්ථ නාමයක් සෑදිය හැක, එය පැරණි ගිණුමෙන් අනුගාමිකයින් මෙම ගිණුමට ගෙන යාමට පෙර අවශ්‍ය වේ. මෙම ක්‍රියාවම හානිකර නොවන සහ ආපසු හැරවිය හැකිවේ. ගිණුම් සංක්‍රමණය පැරණි ගිණුමෙන් ආරම්භ වේ. remove: අන්වර්ථය විසන්ධි කරන්න appearance: - advanced_web_interface: උසස් වියමන අතුරුමුහුණත + advanced_web_interface: සංකීර්ණ අතුරු මුහුණත advanced_web_interface_hint: 'ඔබට ඔබේ සම්පූර්ණ තිරයේ පළල භාවිතා කිරීමට අවශ්‍ය නම්, උසස් වෙබ් අතුරු මුහුණත ඔබට අවශ්‍ය පරිදි එකම වේලාවක බොහෝ තොරතුරු බැලීමට විවිධ තීරු වින්‍යාස කිරීමට ඉඩ දෙයි: නිවස, දැනුම්දීම්, ෆෙඩරේටඩ් කාලරාමුව, ඕනෑම ලැයිස්තු සහ හැෂ් ටැග්.' animations_and_accessibility: සජීවිකරණ සහ ප්‍රවේශ්‍යතාව confirmation_dialogs: තහවුරු කිරීමේ සංවාද discovery: සොයාගැනීම localization: - body: Mastodon ස්වේච්ඡා සේවකයන් විසින් පරිවර්තනය කර ඇත. + body: මාස්ටඩන් ස්වේච්ඡාවෙන් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. - sensitive_content: සංවේදී අන්තර්ගතය + sensitive_content: සංවේදී අන්තර්ගත application_mailer: notification_preferences: ඊමේල් මනාප වෙනස් කරන්න salutation: "%{name}," settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' view: 'දැක්ම:' view_profile: පැතිකඩ බලන්න - view_status: පළ කිරීම බලන්න + view_status: ලිපිය බලන්න applications: - created: යෙදුම සාර්ථකව නිර්මාණය කරන ලදී + created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී @@ -775,9 +811,8 @@ si: delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: - prefix_invited_by_user: "@%{name} ඔබට Mastodon හි මෙම සේවාදායකයට සම්බන්ධ වීමට ආරාධනා කරයි!" + prefix_invited_by_user: "@%{name} මෙම මාස්ටඩන් සේවාදායකයට ආරාධනා කර ඇත!" prefix_sign_up: අදම මාස්ටඩන් හි ලියාපදිංචි වන්න! - suffix: ගිණුමක් සමඟ, ඔබට ඕනෑම Mastodon සේවාදායකයකින් සහ තවත් බොහෝ දේ භාවිතා කරන්නන් සමඟ පුද්ගලයින් අනුගමනය කිරීමට, යාවත්කාලීන කිරීම් පළ කිරීමට සහ පණිවිඩ හුවමාරු කර ගැනීමට හැකි වනු ඇත! dont_have_your_security_key: ඔබගේ ආරක්ෂක යතුර නොමැතිද? forgot_password: මුරපදය අමතක වුනාද? invalid_reset_password_token: මුරපද යළි පිහිටුවීමේ ටෝකනය අවලංගු හෝ කල් ඉකුත් වී ඇත. කරුණාකර අලුත් එකක් ඉල්ලන්න. @@ -788,11 +823,13 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. - or_log_in_with: හෝ සමඟින් පිවිසෙන්න register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" - reset_password: මුරපදය නැවත සකසන්න - security: ආරක්ෂාව + reset_password: මුරපදය යළි සකසන්න + rules: + accept: පිළිගන්න + back: ආපසු + security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න status: account_status: ගිණුමේ තත්වය @@ -802,11 +839,11 @@ si: redirecting_to: එය දැනට %{acct}වෙත හරවා යවන බැවින් ඔබගේ ගිණුම අක්‍රියයි. view_strikes: ඔබගේ ගිණුමට එරෙහිව පසුගිය වර්ජන බලන්න too_fast: පෝරමය ඉතා වේගයෙන් ඉදිරිපත් කර ඇත, නැවත උත්සාහ කරන්න. - use_security_key: ආරක්ෂක යතුර භාවිතා කරන්න + use_security_key: ආරක්‍ෂණ යතුර භාවිතා කරන්න challenge: confirm: ඉදිරියට hint_html: "ඉඟිය: අපි ඉදිරි පැය සඳහා නැවත ඔබගේ මුරපදය ඔබෙන් නොඉල්ලමු." - invalid_password: නොවන මුරපදයකි + invalid_password: මුරපදය වැරදිය prompt: ඉදිරියට යාමට මුරපදය තහවුරු කරන්න crypto: errors: @@ -814,20 +851,24 @@ si: invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: - default: "%b %d, %Y" - with_month_name: "%B %d, %Y" + default: "%Y %b %d" + with_month_name: "%Y %B %d" datetime: distance_in_words: about_x_hours: පැය %{count} about_x_months: මාස %{count} + about_x_years: ව.%{count} + almost_x_years: ව.%{count} half_a_minute: මේ දැන් - less_than_x_minutes: මීටර් %{count} + less_than_x_minutes: විනාඩි %{count} less_than_x_seconds: මේ දැන් - x_minutes: මීටර් %{count} + over_x_years: ව.%{count} + x_days: ද.%{count} + x_minutes: විනාඩි %{count} x_months: මාස %{count} - x_seconds: "%{count}තත්" + x_seconds: තත්. %{count} deletes: - challenge_not_passed: ඔබ ඇතුළත් කළ තොරතුරු නිවැරදි නැත + challenge_not_passed: ඔබ ඇතුල් කරන ලද තොරතුරු වැරදියි confirm_password: ඔබගේ අනන්‍යතාවය තහවුරු කිරීමට ඔබගේ වත්මන් මුරපදය ඇතුලත් කරන්න confirm_username: ක්රියා පටිපාටිය තහවුරු කිරීමට ඔබගේ පරිශීලක නාමය ඇතුලත් කරන්න proceed: ගිණුම මකන්න @@ -875,6 +916,9 @@ si: your_appeal_rejected: ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත domain_validator: invalid_domain: වලංගු ඩොමේන් නාමයක් නොවේ + edit_profile: + basic_information: මූලික තොරතුරු + other: වෙනත් errors: '400': ඔබ ඉදිරිපත් කළ ඉල්ලීම අවලංගු හෝ විකෘති විය. '403': ඔබට මෙම පිටුව බැලීමට අවසර නැත. @@ -884,27 +928,28 @@ si: '422': content: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය. ඔබ කුකීස් අවහිර කරනවාද? title: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය - '429': ඉල්ලීම් වැඩියි + '429': ඉල්ලීම් බොහෝය '500': content: අපට කණගාටුයි, නමුත් අපගේ පැත්තෙන් යමක් වැරදී ඇත. - title: මෙම පිටුව නිවැරදි නොවේ + title: මෙම පිටුව වැරදියි '503': තාවකාලික සේවාදායකයේ අසාර්ථක වීමක් හේතුවෙන් පිටුව සේවය කිරීමට නොහැකි විය. - noscript_html: Mastodon වෙබ් යෙදුම භාවිතා කිරීමට, කරුණාකර JavaScript සක්‍රීය කරන්න. විකල්පයක් ලෙස, ඔබේ වේදිකාව සඳහා එකක් උත්සාහ කරන්න. + noscript_html: මාස්ටඩන් වියමන යෙදුම භාවිතා කිරීමට ජාවාස්ක්‍රිප්ට් සබල කරන්න. ඊට අමතරව, ඔබගේ වේදිකාව සඳහා වන නිසග යෙදුමක් අත්හදා බලන්න. existing_username_validator: not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය - download: ඔබගේ සුරක්ෂිතභාවය බාගන්න + download: ඔබගේ සංරක්‍ෂිතය බාගන්න hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය blocks: ඔබ අවහිර කරන්න - bookmarks: පොත් යොමු කරන්න + bookmarks: පොත්යොමු + csv: CSV domain_blocks: වසම් අවහිර කිරීම් - lists: ලැයිස්තුව + lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න storage: මාධ්‍ය ගබඩාව featured_tags: @@ -913,13 +958,14 @@ si: filters: contexts: account: පැතිකඩයන් - home: නිවස සහ ලැයිස්තු + home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් public: පොදු කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න keywords: මූල පද + statuses: තනි ලිපි title: පෙරහන සංස්කරණය errors: deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. @@ -927,21 +973,32 @@ si: index: contexts: "%{contexts}හි පෙරහන්" delete: මකන්න - empty: ඔබට පෙරහන් නොමැත. - expires_in: "%{distance}කින් කල් ඉකුත් වේ" - expires_on: "%{date}දින කල් ඉකුත් වේ" + empty: ඔබ සතුව පෙරහන් නැත. + expires_in: "%{distance} කින් ඉකුත් වේ" + expires_on: "%{date} දී ඉකුත් වේ" keywords: - one: "%{count} මූල පදය" - other: "%{count} මූල පද" + one: මූල පද %{count} + other: මූල පද %{count} + statuses: + one: ලිපි %{count} + other: ලිපි %{count} title: පෙරහන් new: save: නව පෙරහන සුරකින්න title: නව පෙරහනක් එකතු කරන්න + statuses: + back_to_filter: පෙරහනට ආපසු + batch: + remove: පෙරහනෙන් ඉවතලන්න + index: + title: පෙරූ ලිපි generic: all: සියල්ල - changes_saved_msg: වෙනස්කම් සාර්ථකව සුරකින ලදී! + cancel: අවලංගු + changes_saved_msg: වෙනස්කම් සාර්ථකව සුරැකිණි! copy: පිටපතක් delete: මකන්න + deselect: සියල්ල නොතෝරන්න none: කිසිවක් නැත order_by: විසින් ඇණවුම් කරන්න save_changes: වෙනස්කම් සුරකින්න @@ -951,24 +1008,30 @@ si: other: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂ %{count} ක් සමාලෝචනය කරන්න imports: errors: + empty: හිස් CSV ගොනුවකි over_rows_processing_limit: පේළි %{count} කට වඩා අඩංගු වේ + too_large: ගොනුව ඉතා විශාලයි + imported: ආයාත විය modes: - merge: ඒකාබද්ධ කරන්න + merge: ඒකාබද්ධ merge_long: පවතින වාර්තා තබා නව ඒවා එකතු කරන්න overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත + titles: + lists: ලැයිස්තු ආයාත වෙමින් types: - blocking: අවහිර කිරීමේ ලැයිස්තුව - bookmarks: පොත් යොමු - domain_blocking: වසම් අවහිර කිරීමේ ලැයිස්තුව - following: පහත ලැයිස්තුව + blocking: අවහිර ලැයිස්තුව + bookmarks: පොත්යොමු + domain_blocking: වසම් අවහිර ලැයිස්තුව + following: අනුගමන ලැයිස්තුව + lists: ලැයිස්තු muting: නිහඬ කිරීමේ ලැයිස්තුව upload: උඩුගත කරන්න invites: - delete: අක්රිය කරන්න - expired: කල් ඉකුත් වී ඇත + delete: අක්‍රිය කරන්න + expired: ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 '21600': පැය 6 @@ -987,7 +1050,7 @@ si: table: expires_at: කල් ඉකුත් වේ uses: භාවිතා කරයි - title: මිනිසුන්ට ආරාධනා කරන්න + title: ආරාධනා කරන්න login_activities: authentication_methods: otp: ද්වි-සාධක සත්‍යාපන යෙදුම @@ -1036,7 +1099,7 @@ si: other_data: වෙනත් දත්ත කිසිවක් ස්වයංක්‍රීයව ගෙන නොයනු ඇත redirect: ඔබගේ ජංගම ගිණුමේ පැතිකඩ යළි-යොමු කිරීමේ දැන්වීමක් සමඟ යාවත්කාලීන කෙරෙන අතර සෙවුම් වලින් බැහැර කරනු ලැබේ moderation: - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය move_handler: carry_blocks_over_text: මෙම පරිශීලකයා ඔබ අවහිර කර තිබූ %{acct}සිට මාරු විය. carry_mutes_over_text: මෙම පරිශීලකයා ඔබ නිශ්ශබ්ද කර තිබූ %{acct}වෙතින් මාරු විය. @@ -1044,37 +1107,31 @@ si: notification_mailer: admin: report: - subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" + subject: "%{name} වාර්තාවක් යොමු කර ඇත" sign_up: subject: "%{name} අත්සන් කර ඇත" favourite: - body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' - subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" - title: නව ප්රියතම + body: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා:" + subject: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා" + title: නව ප්‍රියතමය follow: body: "%{name} දැන් ඔබව අනුගමනය කරයි!" subject: "%{name} දැන් ඔබව අනුගමනය කරයි" title: නව අනුගාමිකයෙක් follow_request: - action: අනුගමනය කරන ඉල්ලීම් කළමනාකරණය කරන්න + action: අනුගමන ඉල්ලීම් කළමනාකරණය body: "%{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත" subject: 'පොරොත්තු අනුගාමිකයා: %{name}' - title: නව අනුගමනය ඉල්ලීම + title: නව අනුගමන ඉල්ලීම mention: action: පිළිතුර - body: 'ඔබව මෙහි %{name} කින් සඳහන් කර ඇත:' - subject: ඔබව %{name}මගින් සඳහන් කර ඇත + body: "%{name} ඔබව මෙහි සඳහන් කර ඇත:" + subject: "%{name} ඔබව සඳහන් කර ඇත" title: නව සඳැහුම - poll: - subject: "%{name} න් මත විමසුමක් අවසන් විය" - reblog: - body: 'ඔබේ පළ කිරීම %{name}කින් වැඩි කරන ලදී:' - subject: "%{name} ඔබේ පළ කිරීම ඉහළ නැංවීය" - title: නව තල්ලුවක් status: subject: "%{name} දැන් පළ කළා" update: - subject: "%{name} පළ කිරීමක් සංස්කරණය කළා" + subject: "%{name} ලිපිය සංශෝධනය කළා" notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' @@ -1084,11 +1141,8 @@ si: decimal_units: format: "%n%u" units: - billion: බී million: ද.ල. - quadrillion: ප්‍රශ්නය thousand: ද. - trillion: ටී otp_authentication: code_hint: තහවුරු කිරීමට ඔබගේ සත්‍යාපන යෙදුම මගින් ජනනය කරන ලද කේතය ඇතුළු කරන්න description_html: ඔබ සත්‍යාපන යෙදුමක් භාවිතයෙන් ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්නේ නම්, ලොගින් වීමේදී ඔබට ඔබගේ දුරකථනය සන්තකයේ තබා ගැනීමට අවශ්‍ය වනු ඇත, එය ඔබට ඇතුළු වීමට ටෝකන ජනනය කරයි. @@ -1105,19 +1159,21 @@ si: truncate: "…" polls: errors: - already_voted: ඔබ දැනටමත් මෙම මත විමසුමට ඡන්දය දී ඇත - duplicate_options: අනුපිටපත් අයිතම අඩංගු වේ + already_voted: ඔබ මෙම මත විමසුමට ඡන්දය දී ඇත duration_too_long: අනාගතයට බොහෝ දුරයි - duration_too_short: ඉතා ඉක්මනින් වේ - expired: මත විමසුම දැනටමත් අවසන් වී ඇත + expired: මත විමසුම දැනටමත් නිමා වී ඇත invalid_choice: තෝරාගත් ඡන්ද විකල්පය නොපවතී - over_character_limit: එක් එක් අක්ෂර %{max} ට වඩා දිගු විය නොහැක - too_few_options: එක් අයිතමයකට වඩා තිබිය යුතුය - too_many_options: අයිතම %{max} කට වඩා අඩංගු විය නොහැක + self_vote: ඔබගේ මත විමසුමට ජන්දය දීමට නොහැකිය + too_few_options: එක් අථකයකට වඩා තිබිය යුතුය + too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් posting_defaults: පෙරනිමි පළ කිරීම public_timelines: පොදු කාලරේඛා + privacy: + search: සොයන්න + privacy_policy: + title: රහස්‍යතා ප්‍රතිපත්තිය reactions: errors: limit_reached: විවිධ ප්‍රතික්‍රියා වල සීමාව ළඟා විය @@ -1133,7 +1189,7 @@ si: most_recent: මෑතකාලීන moved: මාරු කළා mutual: අන්යෝන්ය - primary: ප්රාථමික + primary: ප්‍රාථමික relationship: සම්බන්ධතාවය remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න @@ -1158,36 +1214,45 @@ si: browser: අතිරික්සුව browsers: alipay: අලිපේ + blackberry: බ්ලැක්බෙරි chrome: ක්‍රෝම් edge: මයික්‍රොසොෆ්ට් එඩ්ගේ electron: ඉලෙක්ට්‍රෝන් firefox: ෆයර්ෆොක්ස් generic: නොදන්නා අතිරික්සුවකි + huawei_browser: හුආවේ අතිරික්සුව ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් micro_messenger: මයික්‍රොමැසෙන්ජර් - nokia: Nokia S40 Ovi බ්‍රව්සරය + nokia: නොකියා S40 Ovi අතිරික්සුව opera: ඔපෙරා otter: ඔටර් + phantom_js: PhantomJS qq: කියුකියු අතිරික්සුව safari: සෆාරි + uc_browser: UC අතිරික්සුව + unknown_browser: නොදන්නා අතිරික්සුවකි weibo: වෙයිබො - current_session: වත්මන් සැසිය - description: "%{browser} මත %{platform}" - explanation: මේවා දැනට ඔබගේ Mastodon ගිණුමට ලොග් වී ඇති වෙබ් බ්‍රව්සර් වේ. + current_session: වත්මන් වාරය + description: "%{platform} හි %{browser}" + explanation: ඔබගේ මාස්ටඩන් ගිණුමට පිවිසීම සඳහා භාවිතා කර තිබෙන අතිරික්සු. ip: අ.ජා. කෙ. (IP) platforms: adobe_air: ඇඩෝබි එයාර් android: ඇන්ඩ්‍රොයිඩ් + blackberry: බ්ලැක්බෙරි + chrome_os: ChromeOS firefox_os: ෆයර්ෆොක්ස් ඕඑස් ios: අයිඕඑස් + kai_os: KaiOS linux: ලිනක්ස් mac: මැක්ඕඑස් + unknown_platform: නොදන්නා වේදිකාවකි windows: වින්ඩෝස් windows_mobile: වින්ඩෝස් මොබයිල් windows_phone: වින්ඩෝස් පෝන් revoke: අවලංගු කරන්න - revoke_success: සැසිය සාර්ථකව අවලංගු කරන ලදී - title: සැසිවාර + revoke_success: වාරය සාර්ථකව අවලංගු කෙරිණි + title: වාර view_authentication_history: ඔබගේ ගිණුමේ සත්‍යාපන ඉතිහාසය බලන්න settings: account: ගිණුම @@ -1195,8 +1260,8 @@ si: aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම authorized_apps: අවසර ලත් යෙදුම් - back: Mastodon වෙත නැවත යන්න - delete: ගිණුම මකා දැමීම + back: මාස්ටඩන් වෙත ආපසු + delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය export: දත්ත නිර්යාතය @@ -1205,13 +1270,12 @@ si: import_and_export: ආයාත හා නිර්යාත migrate: ගිණුම් සංක්‍රමණය notifications: දැනුම්දීම් - preferences: මනාප - profile: පැතිකඩ + preferences: අභිප්‍රේත + profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම - strikes: මධ්‍යස්ථ වැඩ වර්ජන two_factor_authentication: ද්වි සාධක Aut - webauthn_authentication: ආරක්ෂක යතුරු + webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: attached: audio: @@ -1219,14 +1283,13 @@ si: other: "%{count} ශ්රව්ය" description: 'අමුණා ඇත: %{attached}' image: - one: "%{count} රූපය" - other: පින්තූර %{count} + one: රූප %{count} + other: රූප %{count} video: - one: "%{count} වීඩියෝ" - other: වීඩියෝ %{count} - boosted_from_html: "%{acct_link}සිට වැඩි කරන ලදී" + one: දෘශ්‍යක %{count} + other: දෘශ්‍යක %{count} content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම: %{warning}' - default_language: අතුරු මුහුණත් භාෂාවට සමානයි + default_language: අතුරු මුහුණතේ භාෂාවම disallowed_hashtags: one: 'අනුමත නොකළ හැෂ් ටැගයක් අඩංගු විය: %{tags}' other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' @@ -1239,15 +1302,14 @@ si: direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක - reblog: බූස්ට් එකක් ඇලවිය නොහැක poll: total_people: - one: "%{count} පුද්ගලයෙක්" - other: පුද්ගලයන් %{count} + one: පුද්ගලයින් %{count} + other: පුද්ගලයින් %{count} total_votes: - one: "%{count} ඡන්ද" + one: ඡන්ද %{count} යි other: ඡන්ද %{count} යි - vote: ඡන්දය දෙන්න + vote: ඡන්දය show_more: තව පෙන්වන්න show_newer: අලුත්ම පෙන්වන්න show_older: පැරණි පෙන්වන්න @@ -1264,37 +1326,32 @@ si: statuses_cleanup: enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි - exceptions: ව්යතිරේක + exceptions: හැර දැමීම් explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. - ignore_favs: ප්‍රියතමයන් නොසලකා හරින්න - ignore_reblogs: වැඩි කිරීම් නොසලකා හරින්න + ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක - interaction_exceptions_explanation: පළ කිරීම් වරක් ඒවා ඉක්මවා ගිය පසු ප්‍රියතම හෝ බූස්ට් සීමාවට පහළින් ගියහොත් ඒවා මැකීමට සහතිකයක් නොමැති බව සලකන්න. - keep_direct: සෘජු පණිවිඩ තබා ගන්න - keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මකන්නේ නැත - keep_media: මාධ්‍ය ඇමුණුම් සමඟ පළ කිරීම් තබා ගන්න + keep_direct: සෘජු පණිවිඩ තබාගන්න + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත + keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි - keep_polls: ඡන්ද තබා ගන්න - keep_polls_hint: ඔබගේ ඡන්ද විමසීම් කිසිවක් මකන්නේ නැත - keep_self_bookmark: ඔබ පිටු සලකුණු කළ පළ කිරීම් තබා ගන්න - keep_self_bookmark_hint: ඔබ ඔබේම පළ කිරීම් පිටු සලකුණු කර ඇත්නම් ඒවා මකා නොදමන්න - keep_self_fav: ඔබ කැමති පළ කිරීම් තබා ගන්න - keep_self_fav_hint: ඔබ ඒවාට කැමති නම් ඔබේම පළ කිරීම් මකා නොදමන්න + keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත + keep_self_bookmark: ඔබ පොත්යොමු තැබූ ලිපි තබාගන්න + keep_self_bookmark_hint: ඔබගේම ලිපි වලට පොත්යොමු තබා ඇත්නම් ඒවා මකා නොදැමෙයි + keep_self_fav: ඔබ ප්‍රිය කළ ලිපි තබාගන්න + keep_self_fav_hint: ඔබගේම ලිපි වලට ප්‍රිය කර ඇත්නම් ඒවා මකා නොදැමෙයි min_age: - '1209600': සති 2 යි - '15778476': මාස 6 යි - '2629746': මාස 1 යි - '31556952': වසර 1 යි - '5259492': මාස 2 ක් - '604800': 1 සතිය - '63113904': අවුරුදු 2 ක් - '7889238': මාස 3 යි + '1209600': සති 2 + '15778476': මාස 6 + '2629746': මාස 1 + '31556952': අවුරුදු 1 + '5259492': මාස 2 + '604800': සති 1 + '63113904': අවුරුදු 2 + '7889238': මාස 3 min_age_label: වයස් සීමාව - min_favs: අඩුම තරමින් පෝස්ට් ප්‍රිය කරන ලෙස තබා ගන්න - min_reblogs: අඩුම තරමේ පෝස්ට් බූස්ට් කරගෙන තියාගන්න - min_reblogs_hint: අඩුම තරමින් මෙම වාර ගණන වැඩි කර ඇති ඔබගේ පළ කිරීම් කිසිවක් මකා නොදමන්න. බූස්ට් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න + min_favs: අවම වශයෙන් ප්‍රිය කළ ලිපි තබාගන්න stream_entries: sensitive_content: සංවේදී අන්තර්ගතයකි strikes: @@ -1303,11 +1360,15 @@ si: tags: does_not_match_previous_name: පෙර නමට නොගැලපේ themes: - contrast: Mastodon (ඉහළ වෙනස) - default: මැස්ටෝඩන් (අඳුරු) - mastodon-light: මැස්ටෝඩන් (ආලෝකය) + default: මාස්ටඩන් (අඳුරු) + mastodon-light: මාස්ටඩන් (දීප්ත) + time: + formats: + default: "%Y %b %d, %H:%M" + month: "%Y %b" + with_time_zone: "%Y %b %d, %H:%M %Z" two_factor_authentication: - add: එකතු කරන්න + add: එකතු disable: 2FA අබල කරන්න disabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව අබල කර ඇත edit: සංස්කරණය @@ -1332,11 +1393,11 @@ si: subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: - explanation: ඔබ ඔබේ Mastodon ගිණුමේ සම්පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගත කිරීම සඳහා සූදානම්! + explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: - change_password: ඔබගේ මුරපදය වෙනස් කරන්න + change_password: මුරපදය වෙනස් කරන්න details: 'පුරනය වීමේ විස්තර මෙන්න:' explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. @@ -1349,9 +1410,7 @@ si: spam: ආයාචිත තැපැල් violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: - delete_statuses: ඔබගේ සමහර පළ කිරීම් ප්‍රජා මාර්ගෝපදේශ එකක් හෝ කිහිපයක් උල්ලංඝනය කරන බව සොයා ගෙන ඇති අතර පසුව %{instance}හි උපපරිපාලකයින් විසින් ඉවත් කර ඇත. disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - mark_statuses_as_sensitive: ඔබගේ සමහර පළ කිරීම් %{instance}හි පරිපාලකයින් විසින් සංවේදී ලෙස සලකුණු කර ඇත. මෙයින් අදහස් කරන්නේ පෙරදසුනක් දර්ශනය වීමට පෙර පුද්ගලයින්ට පළ කිරීම් වල මාධ්‍ය තට්ටු කිරීමට අවශ්‍ය වනු ඇති බවයි. අනාගතයේදී පළ කිරීමේදී ඔබට මාධ්‍ය සංවේදී ලෙස සලකුණු කළ හැක. sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. @@ -1361,25 +1420,25 @@ si: delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" - none: "%{acct}සඳහා අනතුරු ඇඟවීම" - sensitive: "%{acct} හි ඔබගේ පළ කිරීම් මෙතැන් සිට සංවේදී ලෙස සලකුණු කෙරේ" + none: "%{acct} සඳහා අවවාදය" + sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත suspend: ඔබගේ ගිණුම %{acct} අත්හිටුවා ඇත title: - delete_statuses: පළ කිරීම් ඉවත් කරන ලදී + delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත none: අවවාදයයි - sensitive: ගිණුම සංවේදී ලෙස ලකුණු කර ඇත - silence: ගිණුම සීමා සහිතයි + sensitive: ගිණුම සංවේදී බව යොදා ඇත + silence: ගිණුම සීමා කර ඇත suspend: ගිණුම අත්හිටුවා ඇත welcome: - edit_profile_action: සැකසුම් පැතිකඩ + edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: පළ කිරීම ආරම්භ කරන්න + final_action: ලිපි පළ කරන්න full_handle: ඔබේ සම්පූර්ණ හසුරුව full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. - subject: Mastodon වෙත සාදරයෙන් පිළිගනිමු + subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: follow_limit_reached: ඔබට පුද්ගලයින් %{limit} කට වඩා අනුගමනය කළ නොහැක @@ -1388,9 +1447,10 @@ si: seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත. signed_in_as: 'මෙසේ පුරනය වී ඇත:' verification: - verification: සත්යාපනය + here_is_how: කෙසේදැයි මෙන්න + verification: සත්‍යාපනය webauthn_credentials: - add: නව ආරක්ෂක යතුර එක් කරන්න + add: නව ආරක්‍ෂණ යතුර එක් කරන්න create: error: ඔබගේ ආරක්ෂක යතුර එක් කිරීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව එක් කරන ලදී. @@ -1400,9 +1460,9 @@ si: destroy: error: ඔබගේ ආරක්ෂක යතුර මැකීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව මකා ඇත. - invalid_credential: වලංගු නොවන ආරක්ෂක යතුර + invalid_credential: ආරක්‍ෂණ යතුර වලංගු නොවේ nickname_hint: ඔබගේ නව ආරක්ෂක යතුරේ අන්වර්ථ නාමය ඇතුළත් කරන්න not_enabled: ඔබ තවමත් WebAuthn සබල කර නැත not_supported: මෙම බ්‍රවුසරය ආරක්ෂක යතුරු සඳහා සහය නොදක්වයි otp_required: ආරක්ෂක යතුරු භාවිතා කිරීමට කරුණාකර පළමුව ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්න. - registered_on: "%{date}හි ලියාපදිංචි වී ඇත" + registered_on: "%{date} දී ලියාපදිංචි වී ඇත" diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 23e63ef42c..917d3791f6 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -7,10 +7,9 @@ si: account_migration: acct: ඔබට යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න account_warning_preset: - text: ඔබට URL, හෑෂ් ටැග් සහ සඳහන් කිරීම් වැනි පෝස්ට් සින්ටැක්ස් භාවිතා කළ හැක + text: ඔබට ඒ.ස.නි., පූරක අනන්‍යන සහ සැඳහුම් වැනි ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: - include_statuses: මධ්‍යස්ථ ක්‍රියාව හෝ අනතුරු ඇඟවීමට හේතු වී ඇත්තේ කුමන පළ කිරීම්දැයි පරිශීලකයා දකිනු ඇත send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" @@ -38,17 +37,16 @@ si: email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න - irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත - locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් + irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්‍රතිවර්ත්‍යව අතුරුදහන් වනු ඇත + locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්‍රීලක අතුරුමුහුණතේ භාෂාව password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න - phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ + phrase: ලිපිවල පෙළ හෝ අන්තර්ගත අවවාද නොසලකා ගැළපෙනු ඇත scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. - setting_aggregate_reblogs: මෑතකදී බූස්ට් කරන ලද පළ කිරීම් සඳහා නව බූස්ට් පෙන්වන්න එපා (අලුතින් ලැබුණු බූස්ට් වලට පමණක් බලපායි) - setting_always_send_emails: සාමාන්‍යයෙන් ඔබ Mastodon සක්‍රියව භාවිතා කරන විට විද්‍යුත් තැපැල් දැනුම්දීම් නොයවනු ඇත + setting_always_send_emails: ඔබ නිතර මාස්ටඩන් භාවිතා කරන විට වි-තැපැල් දැනුම්දීම් නොලැබෙයි setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක - setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න - setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න - setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න + setting_display_media_default: සංවේදී බව සලකුණු කළ මාධ්‍ය සඟවන්න + setting_display_media_hide_all: සැමවිට මාධ්‍ය සඟවන්න + setting_display_media_show_all: සැමවිට මාධ්‍ය පෙන්වන්න setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි @@ -58,14 +56,14 @@ si: domain: මෙය විද්‍යුත් තැපැල් ලිපිනයේ හෝ එය භාවිතා කරන MX වාර්තාවේ පෙන්වන ඩොමේන් නාමය විය හැක. ලියාපදිංචි වූ පසු ඒවා පරීක්ෂා කරනු ලැබේ. with_dns_records: ලබා දී ඇති වසමේ DNS වාර්තා විසඳීමට උත්සාහ කරන අතර ප්‍රතිඵල ද අවහිර කරනු ලැබේ filters: - action: පළ කිරීමක් පෙරහනට ගැළපෙන විට සිදු කළ යුතු ක්‍රියාව තෝරන්න + action: ලිපියක් පෙරහනට ගැළපෙන විට ඉටු විය යුතු ක්‍රියාමාර්ගය තෝරන්න actions: hide: පෙරහන් කළ අන්තර්ගතය සම්පූර්ණයෙන්ම සඟවන්න, එය නොපවතින ලෙස හැසිරෙන්න warn: පෙරහන මාතෘකාව සඳහන් කරන අනතුරු ඇඟවීමක් පිටුපස පෙරූ අන්තර්ගතය සඟවන්න form_challenge: current_password: ඔබ ආරක්ෂිත ප්‍රදේශයකට ඇතුල් වේ imports: - data: CSV ගොනුව වෙනත් Mastodon සේවාදායකයකින් අපනයනය කරන ලදී + data: CSV ගොනුව වෙනත් මාස්ටඩන් සේවාදායකයකින් නිර්යාත කර ඇත invite_request: text: මෙය ඔබගේ අයදුම්පත සමාලෝචනය කිරීමට අපට උපකාරී වනු ඇත ip_block: @@ -84,7 +82,7 @@ si: tag: name: ඔබට අකුරු වල ආවරණය පමණක් වෙනස් කළ හැකිය, උදාහරණයක් ලෙස, එය වඩාත් කියවිය හැකි කිරීමට user: - chosen_languages: පරීක්ෂා කළ විට, තෝරාගත් භාෂාවලින් පළ කිරීම් පමණක් පොදු කාලරේඛා තුළ සංදර්ශන කෙරේ + chosen_languages: සබල නම්, තෝරාගත් භාෂාවල ලිපි පමණක් ප්‍රසිද්ධ කාල රේඛාවේ දිස්වේ webhook: events: යැවීමට සිදුවීම් තෝරන්න url: සිදුවීම් යවනු ලබන ස්ථානය @@ -99,16 +97,16 @@ si: acct: නව ගිණුමේ හැසිරවීම account_warning_preset: text: පෙර සැකසූ පෙළ - title: ශීර්ෂය + title: සිරැසිය admin_account_action: - include_statuses: විද්‍යුත් තැපෑලෙහි වාර්තා කරන ලද පළ කිරීම් ඇතුළත් කරන්න + include_statuses: වි-තැපෑලට වාර්තා කරන ලද ලිපි ද ඇතුළත් කරන්න send_email_notification: විද්‍යුත් තැපෑලෙන් පරිශීලකයාට දැනුම් දෙන්න text: අභිරුචි අනතුරු ඇඟවීම type: ක්‍රියාමාර්ගය types: disable: කැටි කරන්න none: අනතුරු ඇඟවීමක් යවන්න - sensitive: පවතී + sensitive: සංවේදීතාව silence: සීමාව suspend: අත්හිටුවන්න warning_preset_id: අනතුරු ඇඟවීමේ පෙරසිටුවක් භාවිතා කරන්න @@ -123,12 +121,11 @@ si: defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න avatar: අවතාරය - bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි - chosen_languages: භාෂා පෙරහන් කරන්න - confirm_new_password: නව මුර පදය තහවුරු කරන්න - confirm_password: මුරපදය තහවුරු කර ඇත - context: සන්දර්භ පෙරහන් කරන්න - current_password: වත්මන් මුර පදය + chosen_languages: භාෂා පෙරන්න + confirm_new_password: නව මුරපදය තහවුරු කරන්න + confirm_password: මුරපදය තහවුරු කරන්න + context: සන්දර්භ පෙරන්න + current_password: වත්මන් මුරපදය data: දත්ත display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය @@ -138,28 +135,25 @@ si: honeypot: "%{label} (පුරවන්න එපා)" inbox_url: රිලේ එන ලිපි URL irreversible: සැඟවීම වෙනුවට අතහරින්න - locale: අතුරු මුහුණත භාෂාව + locale: අතුරු මුහුණතේ භාෂාව max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය - note: ජෛව otp_attempt: ද්වි සාධක කේතය password: මුරපදය phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න - setting_aggregate_reblogs: කණ්ඩායම් කාලරේඛාව වැඩි කරයි setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න - setting_boost_modal: වැඩි කිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න - setting_default_language: පළ කිරීමේ භාෂාව - setting_default_privacy: පුද්ගලිකත්වය පළ කිරීම - setting_default_sensitive: සෑම විටම මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න - setting_delete_modal: පළ කිරීමක් මැකීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_default_language: ලිපිවල භාෂාව + setting_default_privacy: ලිපියේ රහස්‍යතාව + setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න + setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය - setting_display_media_default: පෙරනිමිය + setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න setting_display_media_show_all: සියල්ල පෙන්වන්න - setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න + setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න @@ -167,10 +161,10 @@ si: setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න setting_use_blurhash: සැඟවුණු මාධ්‍ය සඳහා වර්ණවත් අනුක්‍රමික පෙන්වන්න - setting_use_pending_items: මන්දගාමී මාදිලිය + setting_use_pending_items: මන්දගාමී ප්‍රකාරය severity: බරපතලකම sign_in_token_attempt: ආරක්‍ෂණ කේතය - title: ශීර්ෂය + title: සිරැසිය type: ආයාත වර්ගය username: පරිශීලක නාමය username_or_email: පරි. නාමය හෝ වි-තැපෑල @@ -183,10 +177,16 @@ si: actions: hide: සම්පූර්ණයෙන්ම සඟවන්න warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + form_admin_settings: + custom_css: අභිරුචි CSS + profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න + site_terms: රහස්‍යතා ප්‍රතිපත්තිය + site_title: සේවාදායකයේ නම + theme: පෙරනිමි තේමාව interactions: must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න - must_be_following_dm: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගෙන් සෘජු පණිවිඩ අවහිර කරන්න + must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස invite_request: @@ -195,18 +195,16 @@ si: comment: අදහස ip: අ.ජා. කෙ. (IP) severities: - no_access: ප්රවේශය අවහිර කරන්න + no_access: ප්‍රවේශය අවහිර කරන්න sign_up_requires_approval: ලියාපදිංචි වීම සීමා කරන්න severity: නීතිය notification_emails: - appeal: යමෙක් උපපරිපාලක තීරණයකට අභියාචනා කරයි digest: digest ඊමේල් යවන්න - favourite: කවුරුහරි ඔබේ පළ කිරීම ප්‍රිය කළා + favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා follow: කවුරුහරි ඔබව අනුගමනය කළා follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය mention: කවුරුහරි ඔබව සඳහන් කළා pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - reblog: කවුරුහරි ඔබේ පළ කිරීම වැඩි කළා report: නව වාර්තාවක් ඉදිරිපත් කෙරේ trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ rule: @@ -215,11 +213,19 @@ si: listable: මෙම හැෂ් ටැගය සෙවීම් සහ යෝජනා වල දිස් වීමට ඉඩ දෙන්න name: හෑෂ් ටැගය trendable: මෙම හැෂ් ටැගය ප්‍රවණතා යටතේ දිස් වීමට ඉඩ දෙන්න - usable: මෙම හැෂ් ටැගය භාවිතා කිරීමට පළ කිරීම් වලට ඉඩ දෙන්න + usable: ලිපි සඳහා මෙම පූරක අනන්‍යනය භාවිතයට ඉඩදෙන්න + user: + role: භූමිකාව + time_zone: වේලා කලාපය + user_role: + color: චිහ්නයේ පාට + name: නම + permissions_as_keys: අවසර + position: ප්‍රමුඛත්‍වය webhook: events: සබල කළ සිදුවීම් url: අන්ත ලක්ෂ්‍ය URL - 'no': නැත + 'no': නැහැ recommended: නිර්දේශිත required: mark: "*" From 18301673c8610e188b49dc8df1ed3ca28cd75869 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:13:14 +0200 Subject: [PATCH 126/237] New Crowdin Translations (automated) (#27277) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/si.json | 16 ++- config/locales/doorkeeper.si.yml | 8 +- config/locales/ko.yml | 2 +- config/locales/si.yml | 142 ++++++++++++------------ config/locales/simple_form.si.yml | 23 ++-- 7 files changed, 98 insertions(+), 95 deletions(-) diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 4b055f53a4..85d6f2474a 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -190,6 +190,7 @@ "conversation.open": "কথপোকথন দেখান", "conversation.with": "{names} এর সঙ্গে", "copypaste.copied": "অনুলিপিকৃত", + "copypaste.copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন", "directory.federated": "পরিচিত ফেডিভারসের থেকে", "directory.local": "শুধু {domain} থেকে", "directory.new_arrivals": "নতুন আগত", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c6993c809c..3814e69151 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -593,6 +593,7 @@ "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", + "search_results.see_all": "Lihat semua", "search_results.statuses": "Hantaran", "search_results.title": "Mencari {q}", "server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4d116bfd31..632e716bca 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,6 +1,7 @@ { "about.blocks": "මැදිහත්කරණ සේවාදායක", "about.contact": "සබඳතාව:", + "about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.", "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", @@ -25,6 +26,7 @@ "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", "account.go_to_profile": "පැතිකඩට යන්න", + "account.joined_short": "එක් වූ දිනය", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", "account.media": "මාධ්‍යය", "account.mention": "@{name} සඳහන් කරන්ක", @@ -102,6 +104,8 @@ "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", + "compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න", + "compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", @@ -131,7 +135,7 @@ "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", - "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", + "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.", "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", @@ -151,7 +155,7 @@ "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", - "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.bookmarked_statuses": "ඔබ සතුව පොත්යොමු තබන ලද ලිපි කිසිවක් නැත. ඔබ පොත්යොමුවක් තබන විට, එය මෙහි දිස්වනු ඇත.", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", @@ -353,7 +357,7 @@ "report.forward": "{target} වෙත හරවන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", "report.mute": "නිහඬ", - "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", + "report.mute_explanation": "ඔබ ඔවුන්ගේ ලිපි නොදකිනු ඇත. ඔවුන්ට තවමත් ඔබව අනුගමනයට සහ ඔබගේ ලිපි දැකීමට හැකි අතර ඔවුන්ව නිහඬ කර ඇති බව දැන ගැනීමට නොහැකිය.", "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", @@ -367,7 +371,7 @@ "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", - "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", + "report.statuses.title": "මෙම වාර්තාව උපස්ථ කළ ලිපි තිබේ ද?", "report.submit": "යොමන්න", "report.target": "{target} වාර්තා කිරීම", "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", @@ -375,7 +379,7 @@ "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", "report.unfollow": "@{name}අනුගමනය නොකරන්න", - "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", + "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබගේ මුල් පිටුවේ ඔවුන්ගේ ලිපි නොදැකීමට, ඔවුන්ව තවදුරටත් අනුගමනය නොකරන්න.", "report_notification.attached_statuses": "{count, plural, one {ලිපි {count}} other {ලිපි {count} ක්}} අමුණා ඇත", "report_notification.categories.other": "වෙනත්", "report_notification.categories.spam": "ආයාචිත", @@ -443,7 +447,7 @@ "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.trending_now": "දැන් ප්‍රවණතාවය", + "trends.trending_now": "දැන් නැගී එන", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 31b38444d3..d3550cf598 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -58,10 +58,10 @@ si: authorize: සත්‍යාපනය deny: ප්‍රතික්ෂේප කරන්න error: - title: දෝෂයක් සිදුවී ඇත + title: දෝෂයක් සිදු වී ඇත new: prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." - review_permissions: අවසර සමාලෝචනය කරන්න + review_permissions: අවසර සමාලෝචනය title: බලය පැවරීමේ අවශ්ය show: title: මෙම අවසර කේතය පිටපත් කර එය යෙදුමට අලවන්න. @@ -73,11 +73,11 @@ si: index: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. - last_used_at: අවසන් වරට භාවිතා කළේ %{date} + last_used_at: අන්තිම භාවිතය %{date} never_used: භාවිතා කර නැත scopes: අවසර superapp: අභ්‍යන්තර - title: ඔබගේ බලයලත් අයදුම්පත් + title: ඔබගේ බලයලත් යෙදුම් errors: messages: access_denied: සම්පත් හිමිකරු හෝ අවසර සේවාදායකය ඉල්ලීම ප්‍රතික්ෂේප කළේය. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cc3fd07c49..ff337cc6ca 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -47,7 +47,7 @@ ko: label: 역할 변경 no_role: 역할 없음 title: "%{username}의 역할 변경" - confirm: 확정 + confirm: 신원 확인 confirmed: 확인됨 confirming: 확인 중 custom: 사용자 지정 diff --git a/config/locales/si.yml b/config/locales/si.yml index 787d6fde38..51e1b838f3 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -16,8 +16,6 @@ si: last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී nothing_here: මෙහි කිසිවක් නැත! - pin_errors: - following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: one: ලිපිය other: ලිපි @@ -69,7 +67,7 @@ si: invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) - joined: එක් වී ඇත + joined: එක් වූ දිනය location: all: සියල්ල local: ස්ථානීය @@ -123,7 +121,7 @@ si: security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitized: සංවේදී ලෙස සලකුණු කර ඇත + sensitized: සංවේදී බව සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා @@ -173,7 +171,7 @@ si: destroy_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එක මකන්න destroy_instance: වසම පිරිසිදු කරන්න destroy_ip_block: IP රීතිය මකන්න - destroy_status: පළ කිරීම මකන්න + destroy_status: ලිපිය මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න @@ -199,7 +197,7 @@ si: update_announcement: නිවේදනය යාවත්කාල කරන්න update_custom_emoji: අභිරුචි ඉමොජි යාවත්කාලීන කරන්න update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න - update_status: පළ කිරීම යාවත්කාලීන කරන්න + update_status: ලිපිය යාවත්කාල කරන්න actions: approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" @@ -220,7 +218,6 @@ si: destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" destroy_ip_block_html: IP %{target}සඳහා %{name} මකා දැමූ රීතිය - destroy_status_html: "%{name} පෝස්ට් %{target}විසින් ඉවත් කරන ලදී" destroy_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවත ආරම්භ විය" disable_2fa_user_html: "%{name} පරිශීලක %{target}සඳහා සාධක දෙකක අවශ්‍යතාවය අක්‍රීය කර ඇත" disable_custom_emoji_html: "%{name} ආබාධිත ඉමොජි %{target}" @@ -236,18 +233,17 @@ si: reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" reset_password_user_html: "%{name} පරිශීලක %{target}හි මුරපදය යළි පිහිටුවන්න" resolve_report_html: "%{name} විසඳන ලද වාර්තාව %{target}" - sensitive_account_html: "%{name} %{target}හි මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත" + sensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} සලකුණු කර ඇත" silence_account_html: "%{name} සීමිත %{target}ගිණුමක්" suspend_account_html: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" unassigned_report_html: "%{name} පවරා නොදුන් වාර්තාව %{target}" unblock_email_account_html: "%{name} %{target}ගේ ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන ලදී" - unsensitive_account_html: "%{name} සලකුණු නොකළ %{target}ගේ මාධ්‍ය සංවේදී ලෙස" + unsensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} ඉවත් කර ඇත" unsilence_account_html: "%{target}ගිණුමේ %{name} undid සීමාව" unsuspend_account_html: "%{name} අත්හිටුවන ලද %{target}ගිණුම" update_announcement_html: "%{name} යාවත්කාලීන නිවේදනය %{target}" update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" - update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න @@ -305,8 +301,8 @@ si: dashboard: active_users: ක්රියාකාරී පරිශීලකයන් interactions: අන්තර්ක්රියා - media_storage: මාධ්ය ගබඩාව - new_users: නව පරිශීලකයන් + media_storage: මාධ්‍ය ආචයනය + new_users: නව පරිශ්‍රීලකයින් opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" @@ -435,7 +431,7 @@ si: unavailable: ලබා ගත නොහැක delivery_available: බෙදා හැරීම ලබා ගත හැකිය delivery_error_days: බෙදා හැරීමේ දෝෂ සහිත දින - delivery_error_hint: දින %{count} ක් සඳහා බෙදා හැරීම කළ නොහැකි නම්, එය ස්වයංක්‍රීයව බෙදා හැරිය නොහැකි ලෙස ලකුණු කරනු ලැබේ. + delivery_error_hint: දවස් %{count} කින් බාරදීමට නොහැකි වුවහොත්, බාරදීමට නොහැකි බව ස්වයංක්‍රීයව සලකුණු වේ. destroyed_msg: "%{domain} සිට දත්ත දැන් ආසන්න මකාදැමීම සඳහා පෝලිම් කර ඇත." empty: වසම් කිසිවක් හමු නොවීය. known_accounts: @@ -454,7 +450,7 @@ si: total_followed_by_them: ඔවුන් විසින් අනුගමනය කරන ලදී total_followed_by_us: අප විසින් අනුගමනය කරන ලදී total_reported: ඔවුන් ගැන වාර්තා - total_storage: මාධ්ය ඇමුණුම් + total_storage: මාධ්‍ය ඇමුණුම් totals_time_period_hint_html: පහත දැක්වෙන එකතුවෙහි සියලු කාලය සඳහා දත්ත ඇතුළත් වේ. invites: deactivate_all: සියල්ල අක්‍රිය කරන්න @@ -483,11 +479,9 @@ si: relays: add_new: නව රිලේ එක් කරන්න delete: මකන්න - description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න disabled: අබලයි enable: සබල කරන්න - enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් @@ -507,8 +501,6 @@ si: action_log: විගණන සටහන action_taken_by: විසින් ගන්නා ලද පියවර actions: - delete_description_html: වාර්තා කරන ලද පළ කිරීම් මකා දැමෙනු ඇති අතර එම ගිණුමේම අනාගත උල්ලංඝනයන් තීව්‍ර කිරීමට ඔබට උදවු කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. - mark_as_sensitive_description_html: වාර්තා කරන ලද පළ කිරීම් වල මාධ්‍ය සංවේදී ලෙස සලකුණු කරනු ලබන අතර එම ගිණුම මගින් අනාගත උල්ලංඝනයන් උත්සන්න කිරීමට ඔබට උපකාර කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. other_description_html: ගිණුමේ හැසිරීම පාලනය කිරීම සහ වාර්තා කළ ගිණුමට සන්නිවේදනය අභිරුචිකරණය කිරීම සඳහා තවත් විකල්ප බලන්න. resolve_description_html: වාර්තා කරන ලද ගිණුමට එරෙහිව කිසිදු ක්‍රියාමාර්ගයක් නොගනු ඇත, වැඩ වර්ජනයක් වාර්තා නොකෙරේ, වාර්තාව වසා දමනු ඇත. actions_description_html: මෙම වාර්තාව විසඳීමට ගත යුතු ක්‍රියාමාර්ගය තීරණය කරන්න. ඔබ වාර්තා කරන ලද ගිණුමට එරෙහිව දණ්ඩනීය ක්‍රියාමාර්ගයක් ගන්නේ නම්, Spam කාණ්ඩය තෝරාගත් විට හැර, ඔවුන්ට විද්‍යුත් තැපෑලෙන් දැනුම්දීමක් යවනු ලැබේ. @@ -526,14 +518,14 @@ si: delete_and_resolve: ලිපි මකන්න forwarded: හරවා යවා ඇත forwarded_to: "%{domain} වෙත හරවා යැවිණි" - mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න - mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න - mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න + mark_as_resolved: විසඳූ බව යොදන්න + mark_as_sensitive: සංවේදී බව යොදන්න + mark_as_unresolved: නොවිසඳූ බව යොදන්න no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න - create_and_resolve: සටහන සමඟ විසඳන්න - create_and_unresolve: සටහනක් සමඟ නැවත විවෘත කරන්න + create_and_resolve: සටහනක් සමඟ විසඳන්න + create_and_unresolve: සටහනක් සමඟ නැවත අරින්න delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් @@ -564,7 +556,12 @@ si: moderation: මැදිහත්කරණය special: විශේෂ delete: මකන්න + permissions_count: + one: අවසර %{count} + other: අවසර %{count} privileges: + administrator: පරිපාලක + delete_user_data: පරිශ්‍රීලක දත්ත මකන්න invite_users: ආරාධනා කරන්න manage_announcements: නිවේදනය කළමනාකරණය manage_federation: ඒකාබද්ධ කළමනාකරණය @@ -592,6 +589,7 @@ si: title: පෙනුම discovery: profile_directory: පැතිකඩ නාමාවලිය + public_timelines: ප්‍රසිද්ධ කාලරේඛා domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -626,7 +624,7 @@ si: media: title: මාධ්‍යය metadata: පාරදත්ත - no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත + no_status_selected: කිසිවක් නොතේරූ බැවින් ලිපි කිසිවක් වෙනස් කර නැත open: ලිපිය අරින්න original_status: මුල් ලිපිය status_changed: ලිපිය සංශෝධිතයි @@ -639,7 +637,7 @@ si: disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" - sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" + sensitive: "%{target}ගේ ගිණුම සංවේදී බව %{name} සලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" suspend: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" appeal_approved: අභියාචනා කළා @@ -691,9 +689,9 @@ si: title: ප්‍රකාශකයන් rejected: ප්‍රතික්ෂේප කළා statuses: - allow: පළ කිරීමට ඉඩ දෙන්න + allow: පළ කිරීමට ඉඩදෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - disallow: පළ කිරීමට ඉඩ නොදෙන්න + disallow: ප්‍රකාශනයට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: @@ -732,12 +730,12 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - disable: අක්රිය කරන්න - disabled: ආබාධිතයි + disable: අබල කරන්න + disabled: අබලයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න empty: ඔබට තවම වින්‍යාස කර ඇති කිසිදු webhook අන්ත ලක්ෂ්‍යයක් නොමැත. enable: සබල කරන්න - enabled: ක්රියාකාරී + enabled: ක්‍රියාත්මකයි enabled_events: one: සබල සිදුවීම් 1 other: සබල සිදුවීම් %{count} @@ -752,7 +750,6 @@ si: actions: delete_statuses: ඔවුන්ගේ පළ කිරීම් මකා දැමීමට disable: ඔවුන්ගේ ගිණුම කැටි කිරීමට - mark_statuses_as_sensitive: ඔවුන්ගේ තනතුරු සංවේදී ලෙස සලකුණු කිරීමට none: අනතුරු ඇඟවීමක් sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට @@ -769,7 +766,7 @@ si: new_trending_links: title: නැඟී එන සබැඳි new_trending_statuses: - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි new_trending_tags: no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' @@ -803,11 +800,13 @@ si: applications: created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත + logout: නික්මෙන්න regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී warning: මෙම දත්ත සමඟ ඉතා ප්රවේශම් වන්න. එය කිසි විටෙක කිසිවෙකු සමඟ බෙදා නොගන්න! your_token: ඔබේ ප්‍රවේශ ටෝකනය auth: + apply_for_account: ගිණුමක් ඉල්ලන්න delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: @@ -823,14 +822,25 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. + progress: + details: ඔබගේ විස්තර + rules: නීති පිළිගන්න + providers: + cas: CAS + saml: SAML register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" reset_password: මුරපදය යළි සකසන්න rules: accept: පිළිගන්න back: ආපසු + title_invited: ඔබට ආරාධනා කර ඇත. security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න + setup: + title: ඔබගේ එනලිපි බලන්න + sign_in: + title: "%{domain} වෙත පිවිසෙන්න" status: account_status: ගිණුමේ තත්වය confirming: විද්‍යුත් තැපෑල තහවුරු කිරීම සම්පූර්ණ කිරීම සඳහා රැඳී සිටිමින්. @@ -876,7 +886,7 @@ si: warning: before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' caches: වෙනත් සේවාදායකයන් විසින් හැඹිලිගත කර ඇති අන්තර්ගතය දිගටම පැවතිය හැක - data_removal: ඔබගේ පළ කිරීම් සහ අනෙකුත් දත්ත ස්ථිරවම ඉවත් කරනු ලැබේ + data_removal: ඔබගේ ලිපි සහ අනෙකුත් දත්ත සදහටම ඉවත් කෙරෙනු ඇත email_change_html: ඔබට ඔබගේ ගිණුම මකා කළ හැක email_contact_html: එය තවමත් නොපැමිණියේ නම්, ඔබට උදව් සඳහා %{email} විද්‍යුත් තැපෑලෙන් යැවිය හැක email_reconfirmation_html: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑල නොලැබුනේ නම්, ඔබට එය නැවත ඉල්ලා සිටිය හැක @@ -900,13 +910,12 @@ si: description_html: මේවා ඔබගේ ගිණුමට එරෙහිව ගන්නා ලද ක්‍රියා සහ %{instance}හි කාර්ය මණ්ඩලය විසින් ඔබට එවා ඇති අනතුරු ඇඟවීම් වේ. recipient: වෙත යොමු කරන ලදී reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න - status: 'පළ කිරීම #%{id}' - status_removed: පළ කිරීම දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත + status: "#%{id} ලිපිය" + status_removed: ලිපිය දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත title: "%{action} සිට %{date}" title_actions: - delete_statuses: පසු ඉවත් කිරීම + delete_statuses: ලිපි ඉවත් කිරීම disable: ගිණුම කැටි කිරීම - mark_statuses_as_sensitive: තනතුරු සංවේදී ලෙස සලකුණු කිරීම none: අවවාදයයි sensitive: ගිණුම සංවේදී ලෙස සලකුණු කිරීම silence: ගිණුම සීමා කිරීම @@ -941,7 +950,7 @@ si: archive_takeout: date: දිනය download: ඔබගේ සංරක්‍ෂිතය බාගන්න - hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. + hint_html: ඔබට ලිපි සහ උඩුගත කළ මාධ්‍යවල සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. නිර්යාත කළ දත්ත ActivityPub ආකෘතියට ගැළපෙන ඕනෑම මෘදුකාංගයකින් කියවීමට හැකිය. ඔබට දවස් 7 කට වරක් සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය @@ -951,16 +960,15 @@ si: domain_blocks: වසම් අවහිර කිරීම් lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න - storage: මාධ්‍ය ගබඩාව + storage: මාධ්‍ය ආචයනය featured_tags: add_new: අලුතින් එකතු කරන්න - hint_html: "විශේෂාංගගත හැෂ් ටැග් මොනවාද? ඒවා ඔබේ පොදු පැතිකඩෙහි ප්‍රමුඛව ප්‍රදර්ශනය වන අතර එම හැෂ් ටැග් යටතේ ඔබේ පොදු පළ කිරීම් බ්‍රවුස් කිරීමට මිනිසුන්ට ඉඩ සලසයි. නිර්මාණාත්මක කෘති හෝ දිගු කාලීන ව්යාපෘති පිළිබඳ වාර්තාවක් තබා ගැනීම සඳහා ඔවුන් විශිෂ්ට මෙවලමක් වේ." filters: contexts: account: පැතිකඩයන් home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් - public: පොදු කාලරේඛා + public: ප්‍රසිද්ධ කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න @@ -1018,9 +1026,12 @@ si: overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. + status: තත්‍වය success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත titles: lists: ලැයිස්තු ආයාත වෙමින් + type_groups: + constructive: අනුගමන හා පොත්යොමු types: blocking: අවහිර ලැයිස්තුව bookmarks: පොත්යොමු @@ -1064,7 +1075,7 @@ si: title: සත්‍යාපන ඉතිහාසය media_attachments: validations: - images_and_video: දැනටමත් පින්තූර අඩංගු පළ කිරීමකට වීඩියෝවක් ඇමිණිය නොහැක + images_and_video: දැනටමත් රූප අඩංගු ලිපියකට දෘශ්‍යකයක් ඇමිණීමට නොහැකිය not_ready: සැකසීම අවසන් නොකළ ගොනු ඇමිණිය නොහැක. මොහොතකින් නැවත උත්සාහ කරන්න! too_many: ගොනු 4කට වඩා ඇමිණිය නොහැක migrations: @@ -1168,8 +1179,8 @@ si: too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් - posting_defaults: පෙරනිමි පළ කිරීම - public_timelines: පොදු කාලරේඛා + posting_defaults: සැමවිට පළ කරන ආකාරය + public_timelines: ප්‍රසිද්ධ කාලරේඛා privacy: search: සොයන්න privacy_policy: @@ -1203,11 +1214,8 @@ si: rss: content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම:' descriptions: - account: "@%{acct}සිට පොදු පළ කිරීම්" - tag: "#%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම්" + account: "@%{acct} වෙතින් ප්‍රසිද්ධ ලිපි" scheduled_statuses: - over_daily_limit: ඔබ අද දිනට නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත - over_total_limit: ඔබ නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත too_soon: නියමිත දිනය අනාගතයේ විය යුතුය sessions: activity: අවසාන ක්‍රියාකාරකම @@ -1259,7 +1267,7 @@ si: account_settings: ගිණුමේ සැකසුම් aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම - authorized_apps: අවසර ලත් යෙදුම් + authorized_apps: බලයලත් යෙදුම් back: මාස්ටඩන් වෙත ආපසු delete: ගිණුම මැකීම development: සංවර්ධනය @@ -1273,7 +1281,7 @@ si: preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් - statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම + statuses_cleanup: ස්වයංක්‍රීය ලිපි මැකීම two_factor_authentication: ද්වි සාධක Aut webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: @@ -1295,13 +1303,13 @@ si: other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' edited_at_html: සංස්කරණය %{date} errors: - in_reply_not_found: ඔබ පිළිතුරු දීමට උත්සාහ කරන පළ කිරීම පවතින බවක් නොපෙනේ. + in_reply_not_found: ඔබ පිළිතුරු දීමට තැත් කරන ලිපිය නොපවතින බව පෙනෙයි. open_in_web: වෙබයේ විවෘත කරන්න over_character_limit: අක්ෂර සීමාව %{max} ඉක්මවා ඇත pin_errors: - direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක - limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත - ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක + direct: සඳහන් කළ අයට පමණක් පෙනෙන ලිපි ඇමිණීමට නොහැකිය + limit: දැනටමත් මුදුනට ඇමිණිමට හැකි ලිපි සීමාවට ළඟා වී ඇත + ownership: වෙනත් අයගේ ලිපි ඇමිණීමට නොහැකිය poll: total_people: one: පුද්ගලයින් %{count} @@ -1324,16 +1332,14 @@ si: unlisted: ලැයිස්තුගත නොකළ unlisted_long: සෑම කෙනෙකුටම දැකිය හැක, නමුත් පොදු කාලරාමුවෙහි ලැයිස්තුගත කර නොමැත statuses_cleanup: - enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න - enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි + enabled: පරණ ලිපි ස්වයංක්‍රීයව මකන්න exceptions: හැර දැමීම් - explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක keep_direct: සෘජු පණිවිඩ තබාගන්න keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න - keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් මැකෙන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත @@ -1374,12 +1380,12 @@ si: edit: සංස්කරණය enabled: ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත enabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව සබල කර ඇත - generate_recovery_codes: ප්‍රතිසාධන කේත ජනනය කරන්න + generate_recovery_codes: ප්‍රතිසාධන කේත උත්පාදනය කරන්න lost_recovery_codes: ඔබගේ දුරකථනය නැති වුවහොත් ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට ප්‍රතිසාධන කේත ඔබට ඉඩ සලසයි. ඔබට ඔබේ ප්‍රතිසාධන කේත නැති වී ඇත්නම්, ඔබට ඒවා මෙහි නැවත උත්පාදනය කළ හැක. ඔබගේ පැරණි ප්‍රතිසාධන කේත අවලංගු වනු ඇත. - methods: ද්වි සාධක ක්රම + methods: ද්වි සාධක ක්‍රම otp: Authenticator යෙදුම - recovery_codes: උපස්ථ ප්‍රතිසාධන කේත - recovery_codes_regenerated: ප්‍රතිසාධන කේත සාර්ථකව ප්‍රතිජනනය කරන ලදී + recovery_codes: ප්‍රතිසාධන කේත උපස්ථය + recovery_codes_regenerated: ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි recovery_instructions_html: ඔබට කවදා හෝ ඔබගේ දුරකථනයට ප්‍රවේශය අහිමි වුවහොත්, ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට පහත ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කළ හැක. ප්‍රතිසාධන කේත ආරක්ෂිතව තබා ගන්න. උදාහරණයක් ලෙස, ඔබට ඒවා මුද්‍රණය කර වෙනත් වැදගත් ලේඛන සමඟ ගබඩා කළ හැකිය. webauthn: ආරක්‍ෂණ යතුරු user_mailer: @@ -1407,19 +1413,17 @@ si: appeal: අභියාචනයක් ඉදිරිපත් කරන්න appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. categories: - spam: ආයාචිත තැපැල් + spam: ආයාචිත violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. - silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. + sensitive: මේ මොහොත් සිට ඔබ උඩුගත කරන සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකා අවවාදයක් පිටුපස සඟවනු ඇත. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. reason: 'හේතුව:' - statuses: 'උපුටා දක්වන ලද පළ කිරීම්:' subject: - delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" + delete_statuses: "%{acct} හි ඔබගේ ලිපිය ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත - mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" + mark_statuses_as_sensitive: ඔබගේ %{acct} ලිපි සංවේදී බව සලකුණු කර ඇත none: "%{acct} සඳහා අවවාදය" sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත @@ -1427,7 +1431,7 @@ si: title: delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත - mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත + mark_statuses_as_sensitive: ලිපි සංවේදී බව සලකුණු කර ඇත none: අවවාදයයි sensitive: ගිණුම සංවේදී බව යොදා ඇත silence: ගිණුම සීමා කර ඇත diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 917d3791f6..7e529c0eee 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -11,7 +11,6 @@ si: title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත - text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" types: disable: පරිශීලකයාගේ ගිණුම භාවිතා කිරීමෙන් වළක්වන්න, නමුත් ඔවුන්ගේ අන්තර්ගතය මකා දැමීම හෝ සඟවන්න එපා. @@ -23,7 +22,7 @@ si: ends_at: විකල්ප. මෙම අවස්ථාවේදී නිවේදනය ස්වයංක්‍රීයව ප්‍රකාශනය කිරීමෙන් ඉවත් වනු ඇත scheduled_at: නිවේදනය වහාම ප්‍රකාශයට පත් කිරීමට හිස්ව තබන්න starts_at: විකල්ප. ඔබගේ නිවේදනය නිශ්චිත කාල පරාසයකට බැඳී ඇත්නම් - text: ඔබට post syntax භාවිතා කළ හැක. කරුණාකර පරිශීලකයාගේ තිරය මත නිවේදනය ලබා ගන්නා ඉඩ ගැන සැලකිලිමත් වන්න + text: ඔබට ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය. කරුණාකර නිවේදනයෙන් පරිශ්‍රීලකයින්ගේ තිරයේ ඉඩ කෙතරම් ඇහිරෙනවා ද පිළිබඳව සැලකිලිමත් වන්න appeal: text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: @@ -120,7 +119,7 @@ si: text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න - avatar: අවතාරය + avatar: පැතිකඩ ඡායාරූපය chosen_languages: භාෂා පෙරන්න confirm_new_password: නව මුරපදය තහවුරු කරන්න confirm_password: මුරපදය තහවුරු කරන්න @@ -148,7 +147,6 @@ si: setting_default_privacy: ලිපියේ රහස්‍යතාව setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න - setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න @@ -156,7 +154,7 @@ si: setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න - setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න + setting_system_font_ui: පද්ධතියේ පෙරනිමි රුවකුරු භාවිතා කරන්න setting_theme: අඩවියේ තේමාව setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න @@ -175,8 +173,8 @@ si: name: හෑෂ් ටැගය filters: actions: - hide: සම්පූර්ණයෙන්ම සඟවන්න - warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + hide: මුළුමනින්ම සඟවන්න + warn: අවවාදයක් සහිතව සඟවන්න form_admin_settings: custom_css: අභිරුචි CSS profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න @@ -184,8 +182,6 @@ si: site_title: සේවාදායකයේ නම theme: පෙරනිමි තේමාව interactions: - must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න - must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස @@ -201,12 +197,9 @@ si: notification_emails: digest: digest ඊමේල් යවන්න favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා - follow: කවුරුහරි ඔබව අනුගමනය කළා - follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය - mention: කවුරුහරි ඔබව සඳහන් කළා - pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - report: නව වාර්තාවක් ඉදිරිපත් කෙරේ - trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ + follow: යමෙක් ඔබව අනුගමනය කළා + mention: යමෙක් ඔබව සඳහන් කළා + report: නව වාර්තාවක් යොමු කර ඇත rule: text: නීතිය tag: From bd96f38e53cbdd9767cded01d518a69f811af620 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 16:33:54 +0200 Subject: [PATCH 127/237] Fix auto-loading-more when not scrolled (#27286) --- app/javascript/mastodon/components/scrollable_list.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/scrollable_list.jsx b/app/javascript/mastodon/components/scrollable_list.jsx index ce0b579f50..3b142f76f2 100644 --- a/app/javascript/mastodon/components/scrollable_list.jsx +++ b/app/javascript/mastodon/components/scrollable_list.jsx @@ -73,7 +73,7 @@ class ScrollableList extends PureComponent { const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; - if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { + if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { this.props.onLoadMore(); } From 081c7cf73ed438efc58b5be84f9280c09880712b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:35:05 +0200 Subject: [PATCH 128/237] Update dependency sidekiq to v6.5.10 (#27287) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 13bca58a5c..a003cd18dd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -691,7 +691,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.9) + sidekiq (6.5.10) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) From e1721f7c8f054649233c65fbda3b942ac1e304f4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:49:09 +0200 Subject: [PATCH 129/237] New Crowdin Translations (automated) (#27304) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/lv.json | 54 ++++++++++++------------- app/javascript/mastodon/locales/ru.json | 2 +- config/locales/lv.yml | 4 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4c920b038f..87d7c90c41 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -686,7 +686,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index aab7b9a8fb..7f71d9318b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -161,13 +161,13 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un Ziņot", + "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", "confirmations.cancel_follow_request.message": "Vai tiešām vēlies atsaukt pieprasījumu sekot {name}?", "confirmations.delete.confirm": "Dzēst", - "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ziņu?", + "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -309,11 +309,11 @@ "home.column_settings.show_replies": "Rādīt atbildes", "home.explore_prompt.body": "Tavā mājas plūsmā būs dažādu ziņu sajaukums no atsaucēm, kurām esi izvēlējies sekot, personām, kurām esi izvēlējies sekot, un ziņām, kuras tās izceļ. Ja tas šķiet pārāk kluss, iespējams, vēlēsies:", "home.explore_prompt.title": "Šī ir tava Mastodon mājvieta.", - "home.hide_announcements": "Slēpt anonsus", + "home.hide_announcements": "Slēpt paziņojumus", "home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!", "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!", - "home.show_announcements": "Rādīt anonsus", + "home.show_announcements": "Rādīt paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", "interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.", "interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.", @@ -369,7 +369,7 @@ "lightbox.close": "Aizvērt", "lightbox.compress": "Saspiest attēla skata lodziņu", "lightbox.expand": "Izvērst attēla skata lodziņu", - "lightbox.next": "Nākamais", + "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.", @@ -422,8 +422,8 @@ "navigation_bar.search": "Meklēt", "navigation_bar.security": "Drošība", "not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.", - "notification.admin.report": "{name} sūdzējās par {target}", - "notification.admin.sign_up": "{name} pierakstījās", + "notification.admin.report": "{name} ziņoja par {target}", + "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", "notification.follow": "{name} uzsāka tev sekot", "notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu", @@ -435,7 +435,7 @@ "notification.update": "{name} rediģēja ierakstu", "notifications.clear": "Notīrīt paziņojumus", "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", - "notifications.column_settings.admin.report": "Jaunas sūdzības:", + "notifications.column_settings.admin.report": "Jauni ziņojumi:", "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlase:", @@ -445,7 +445,7 @@ "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", "notifications.column_settings.mention": "Pieminējumi:", - "notifications.column_settings.poll": "Aptauju rezultāti:", + "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", "notifications.column_settings.reblog": "Pastiprinātie ieraksti:", "notifications.column_settings.show": "Rādīt kolonnā", @@ -457,13 +457,13 @@ "notifications.filter.all": "Visi", "notifications.filter.boosts": "Pastiprinātie ieraksti", "notifications.filter.favourites": "Izlases", - "notifications.filter.follows": "Sekošana", + "notifications.filter.follows": "Seko", "notifications.filter.mentions": "Pieminējumi", - "notifications.filter.polls": "Aptauju rezultāti", + "notifications.filter.polls": "Aptaujas rezultāti", "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", "notifications.grant_permission": "Piešķirt atļauju.", "notifications.group": "{count} paziņojumi", - "notifications.mark_as_read": "Atzīmēt visus paziņojumus kā izlasītus", + "notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu", "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", @@ -563,25 +563,25 @@ "report.reasons.spam": "Tas ir spams", "report.reasons.spam_description": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes", "report.reasons.violation": "Tas pārkāpj servera noteikumus", - "report.reasons.violation_description": "Tu zini, ka tas pārkāpj konkrētus noteikumus", + "report.reasons.violation_description": "Tu zini, ka tas pārkāpj īpašus noteikumus", "report.rules.subtitle": "Atlasi visus atbilstošos", "report.rules.title": "Kuri noteikumi tiek pārkāpti?", "report.statuses.subtitle": "Atlasi visus atbilstošos", "report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?", "report.submit": "Iesniegt", - "report.target": "Sūdzība par {target}", - "report.thanks.take_action": "Vari veikt šīs darbības, lai kontrolētu Mastodon redzamo saturu:", + "report.target": "Ziņošana par: {target}", + "report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:", "report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:", "report.thanks.title": "Vai nevēlies to redzēt?", "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekot @{name}", "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.", - "report_notification.attached_statuses": "{count, plural, one {Pievienots {count} ieraksts} other {Pievienoti {count} ieraksti}}", + "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", "report_notification.categories.legal": "Tiesisks", "report_notification.categories.other": "Cita", "report_notification.categories.spam": "Spams", "report_notification.categories.violation": "Noteikumu pārkāpums", - "report_notification.open": "Atvērt sūdzību", + "report_notification.open": "Atvērt ziņojumu", "search.no_recent_searches": "Nav nesen veiktu meklējumu", "search.placeholder": "Meklēšana", "search.quick_action.account_search": "Profili atbilst {x}", @@ -628,7 +628,7 @@ "status.direct_indicator": "Pieminēts privāti", "status.edit": "Rediģēt", "status.edited": "Rediģēts {date}", - "status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}", + "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienīts", "status.filter": "Filtrē šo ziņu", @@ -656,8 +656,8 @@ "status.remove_bookmark": "Noņemt grāmatzīmi", "status.replied_to": "Atbildēja {name}", "status.reply": "Atbildēt", - "status.replyAll": "Atbildēt uz pavedienu", - "status.report": "Sūdzēties par @{name}", + "status.replyAll": "Atbildēt uz tematu", + "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", "status.show_filter_reason": "Tomēr rādīt", @@ -668,7 +668,7 @@ "status.show_original": "Rādīt oriģinālu", "status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}", "status.translate": "Tulkot", - "status.translated_from_with": "Tulkots no {lang}, izmantojot {provider}", + "status.translated_from_with": "Tulkots no {lang} izmantojot {provider}", "status.uncached_media_warning": "Priekšskatījums nav pieejams", "status.unmute_conversation": "Noņemt sarunas apklusinājumu", "status.unpin": "Noņemt profila piespraudumu", @@ -681,16 +681,16 @@ "time_remaining.hours": "{number, plural, one {Atlikusi # stunda} other {Atlikušas # stundas}}", "time_remaining.minutes": "{number, plural, one {Atlikusi # minūte} other {Atlikušas # minūtes}}", "time_remaining.moments": "Atlikuši daži mirkļi", - "time_remaining.seconds": "{number, plural, one {Atlikusi # sekunde} other {Atlikušas # sekundes}}", + "time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}", "timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.", "timeline_hint.resources.followers": "Sekotāji", - "timeline_hint.resources.follows": "Sekojošie", + "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecāki ieraksti", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}", "trends.trending_now": "Aktuālās tendences", - "ui.beforeunload": "Ja pametīsiet Mastodon, jūsu melnraksts tiks zaudēts.", + "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}Mjd", - "units.short.million": "{count}Mjn", + "units.short.million": "{count}M", "units.short.thousand": "{count}Tk", "upload_area.title": "Velc un nomet, lai augšupielādētu", "upload_button.label": "Pievienot bildi, video vai audio datni", @@ -707,7 +707,7 @@ "upload_modal.apply": "Pielietot", "upload_modal.applying": "Pielieto…", "upload_modal.choose_image": "Izvēlēties attēlu", - "upload_modal.description_placeholder": "Raibais runcis Rīgā ratu rumbā rūc", + "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", "upload_modal.detect_text": "Noteikt tekstu no attēla", "upload_modal.edit_media": "Rediģēt multividi", "upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ae9cef5938..69db89dc86 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -537,7 +537,7 @@ "relative_time.today": "сегодня", "reply_indicator.cancel": "Отмена", "report.block": "Заблокировать", - "report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.", + "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", "report.categories.legal": "Правовая информация", "report.categories.other": "Другое", "report.categories.spam": "Спам", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 02a34fd856..28a1a33dcb 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -460,7 +460,7 @@ lv: description_html: Tu gatavojies importēt domēna bloku sarakstu. Lūdzu, ļoti rūpīgi pārskati šo sarakstu, it īpaši, ja tu pats neesi to veidojis. existing_relationships_warning: Esošās sekošanas attiecības private_comment_description_html: 'Lai palīdzētu tev izsekot, no kurienes nāk importētie bloki, tiks izveidoti importētie bloki ar šādu privātu komentāru: %{comment}' - private_comment_template: Importēts no %{source} %{date} + private_comment_template: Importēt no %{source} %{date} title: Importēt bloķētos domēnus invalid_domain_block: 'Viens vai vairāki domēna bloķi tika izlaisti šādas kļūdas(-u) dēļ: %{error}' new: @@ -1107,7 +1107,7 @@ lv: new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pastu ar apstiprinājuma saiti! title: Pārbaudi savu iesūtni sign_in: - preamble_html: Pierakstieties ar saviem %{domain} akreditācijas datiem. Ja jūsu konts ir mitināts citā serverī, jūs nevarēsit pieteikties šeit. + preamble_html: Piesakies ar saviem %{domain} akreditācijas datiem. Ja tavs konts ir mitināts citā serverī, tu nevarēsi pieteikties šeit. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. From 8d75f52a1f699be20366fb54a49dd53e4c42007b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:02 +0200 Subject: [PATCH 130/237] Fix some remote posts getting truncated (#27307) --- .../mastodon/components/__tests__/hashtag_bar.tsx | 15 +++++++++++++++ .../mastodon/components/hashtag_bar.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx index 1856b7109e..b7225fc92e 100644 --- a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx @@ -45,6 +45,21 @@ describe('computeHashtagBarForStatus', () => { ); }); + it('does not truncate the contents when the last child is a text node', () => { + const status = createStatus( + 'this is a #test. Some more text', + ['test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"this is a #test. Some more text"`, + ); + }); + it('extract tags from the last line', () => { const status = createStatus( '

Simple text

#hashtag

', diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index d45a6e20eb..91fa922198 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -109,7 +109,7 @@ export function computeHashtagBarForStatus(status: StatusLike): { const lastChild = template.content.lastChild; - if (!lastChild) return defaultResult; + if (!lastChild || lastChild.nodeType === Node.TEXT_NODE) return defaultResult; template.content.removeChild(lastChild); const contentWithoutLastLine = template; From 0f88e3437078743a83798c288d24a090569c45e1 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:16 +0200 Subject: [PATCH 131/237] =?UTF-8?q?Fix=20crash=20when=20filtering=20for=20?= =?UTF-8?q?=E2=80=9Cdormant=E2=80=9D=20relationships=20(#27306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/account.rb | 2 +- app/models/relationship_filter.rb | 2 +- spec/models/relationship_filter_spec.rb | 68 +++++++++++++++++-------- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index bb70b3a7b8..a25ebc4aaf 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -127,7 +127,7 @@ class Account < ApplicationRecord scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } - scope :by_recent_status, -> { order(Arel.sql('account_stats.last_status_at DESC NULLS LAST')) } + scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) } scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) } scope :popular, -> { order('account_stats.followers_count desc') } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 955d7d188a..d686f9ed89 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -114,7 +114,7 @@ class RelationshipFilter def activity_scope(value) case value when 'dormant' - AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) + Account.joins(:account_stat).where(account_stat: { last_status_at: [nil, ...1.month.ago] }) else raise Mastodon::InvalidParameterError, "Unknown activity: #{value}" end diff --git a/spec/models/relationship_filter_spec.rb b/spec/models/relationship_filter_spec.rb index ac31885774..fccd42aaad 100644 --- a/spec/models/relationship_filter_spec.rb +++ b/spec/models/relationship_filter_spec.rb @@ -6,32 +6,60 @@ describe RelationshipFilter do let(:account) { Fabricate(:account) } describe '#results' do - context 'when default params are used' do - subject do - described_class.new(account, 'order' => 'active').results + let(:account_of_7_months) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 7.months.ago).account } + let(:account_of_1_day) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 1.day.ago).account } + let(:account_of_3_days) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 3.days.ago).account } + let(:silent_account) { Fabricate(:account_stat, statuses_count: 0, last_status_at: nil).account } + + before do + account.follow!(account_of_7_months) + account.follow!(account_of_1_day) + account.follow!(account_of_3_days) + account.follow!(silent_account) + end + + context 'when ordering by last activity' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'active').results + end + + it 'returns followings ordered by last activity' do + expect(subject).to eq [account_of_1_day, account_of_3_days, account_of_7_months, silent_account] + end end - before do - add_following_account_with(last_status_at: 7.days.ago) - add_following_account_with(last_status_at: 1.day.ago) - add_following_account_with(last_status_at: 3.days.ago) + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'active', 'activity' => 'dormant').results + end + + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [account_of_7_months, silent_account] + end + end + end + + context 'when ordering by account creation' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'recent').results + end + + it 'returns followings ordered by last account creation' do + expect(subject).to eq [silent_account, account_of_3_days, account_of_1_day, account_of_7_months] + end end - it 'returns followings ordered by last activity' do - expected_result = account.following.eager_load(:account_stat).reorder(nil).by_recent_status + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'recent', 'activity' => 'dormant').results + end - expect(subject).to eq expected_result + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [silent_account, account_of_7_months] + end end end end - - def add_following_account_with(last_status_at:) - following_account = Fabricate(:account) - Fabricate(:account_stat, account: following_account, - last_status_at: last_status_at, - statuses_count: 1, - following_count: 0, - followers_count: 0) - Fabricate(:follow, account: account, target_account: following_account).account - end end From f1ee51c7974e9357eee9d793f03aefe8274443d0 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 11:30:50 +0200 Subject: [PATCH 132/237] Bump version to v4.2.1 --- CHANGELOG.md | 36 ++++++++++++++++++++++++++++++++++++ docker-compose.yml | 6 +++--- lib/mastodon/version.rb | 4 ++-- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fab3104bac..2c58afadc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,42 @@ All notable changes to this project will be documented in this file. +## [4.2.1] - UNRELEASED + +### Added + +- Add redirection on `/deck` URLs for logged-out users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27128)) +- Add support for v4.2.0 migrations to `tootctl maintenance fix-duplicates` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27147)) + +### Changed + +- Change some worker lock TTLs to be shorter-lived ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27246)) +- Change user archive export allowed period from 7 days to 6 days ([suddjian](https://github.com/mastodon/mastodon/pull/27200)) + +### Fixed + +- Fix `Vary` headers not being set on some redirects ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27272)) +- Fix mentions being matched in some URL query strings ([mjankowski](https://github.com/mastodon/mastodon/pull/25656)) +- Fix unexpected linebreak in version string in the Web UI ([vmstan](https://github.com/mastodon/mastodon/pull/26986)) +- Fix double scroll bars in some columns in advanced interface ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27187)) +- Fix boosts of local users being filtered in account timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27204)) +- Fix multiple instances of the trend refresh scheduler sometimes running at once ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27253)) +- Fix importer returning negative row estimates ([jgillich](https://github.com/mastodon/mastodon/pull/27258)) +- Fix incorrectly keeping outdated update notices absent from the API endpoint ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27021)) +- Fix import progress not updating on certain failures ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27247)) +- Fix websocket connections being incorrectly decremented twice on errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/27238)) +- Fix explore prompt appearing because of posts being received out of order ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27211)) +- Fix explore prompt sometimes showing up when the home TL is loading ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27062)) +- Fix link handling of mentions in user profiles when logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27185)) +- Fix filtering audit log for entries about disabling 2FA ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27186)) +- Fix notification toasts not respecting reduce-motion ([c960657](https://github.com/mastodon/mastodon/pull/27178)) +- Fix retention dashboard not displaying correct month ([vmstan](https://github.com/mastodon/mastodon/pull/27180)) +- Fix tIME chunk not being properly removed from PNG uploads ([TheEssem](https://github.com/mastodon/mastodon/pull/27111)) +- Fix division by zero in video in bitrate computation code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27129)) +- Fix inefficient queries in “Follows and followers” as well as several admin pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27116)) +- Fix ActiveRecord using two connection pools when no replica is defined ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27061)) +- Fix the search documentation URL in system checks ([renchap](https://github.com/mastodon/mastodon/pull/27036)) + ## [4.2.0] - 2023-09-21 The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki). diff --git a/docker-compose.yml b/docker-compose.yml index d19f278f75..1a180b0890 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: web: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" @@ -77,7 +77,7 @@ services: streaming: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: node ./streaming @@ -95,7 +95,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 46c07596d1..5e07f508bb 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -13,11 +13,11 @@ module Mastodon end def patch - 0 + 1 end def default_prerelease - '' + 'rc1' end def prerelease From 2e33520c733213139a0a75f432ba315cc6ef71b5 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 13:32:28 +0200 Subject: [PATCH 133/237] fixup! Bump version to v4.2.1 --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c58afadc1..dda3b725af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ All notable changes to this project will be documented in this file. ### Fixed +- Fix some remote posts getting truncated ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27307)) +- Fix some cases of infinite scroll code trying to fetch inaccessible posts in a loop ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27286)) - Fix `Vary` headers not being set on some redirects ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27272)) - Fix mentions being matched in some URL query strings ([mjankowski](https://github.com/mastodon/mastodon/pull/25656)) - Fix unexpected linebreak in version string in the Web UI ([vmstan](https://github.com/mastodon/mastodon/pull/26986)) @@ -34,7 +36,7 @@ All notable changes to this project will be documented in this file. - Fix retention dashboard not displaying correct month ([vmstan](https://github.com/mastodon/mastodon/pull/27180)) - Fix tIME chunk not being properly removed from PNG uploads ([TheEssem](https://github.com/mastodon/mastodon/pull/27111)) - Fix division by zero in video in bitrate computation code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27129)) -- Fix inefficient queries in “Follows and followers” as well as several admin pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27116)) +- Fix inefficient queries in “Follows and followers” as well as several admin pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27116), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27306)) - Fix ActiveRecord using two connection pools when no replica is defined ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27061)) - Fix the search documentation URL in system checks ([renchap](https://github.com/mastodon/mastodon/pull/27036)) From 3171afc36a9472a0a027e3e2c7397c4dd880b703 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Fri, 6 Oct 2023 10:02:55 -0500 Subject: [PATCH 134/237] Add Elasticsearch index size to Admin dashboard (#27301) Co-authored-by: Claire --- .../dimension/space_usage_dimension.rb | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/lib/admin/metrics/dimension/space_usage_dimension.rb b/app/lib/admin/metrics/dimension/space_usage_dimension.rb index cc85608904..f1b6dba040 100644 --- a/app/lib/admin/metrics/dimension/space_usage_dimension.rb +++ b/app/lib/admin/metrics/dimension/space_usage_dimension.rb @@ -11,7 +11,7 @@ class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension protected def perform_query - [postgresql_size, redis_size, media_size] + [postgresql_size, redis_size, media_size, search_size].compact end def postgresql_size @@ -65,4 +65,22 @@ class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension redis.info end end + + def search_size + return unless Chewy.enabled? + + client_info = Chewy.client.info + + value = Chewy.client.indices.stats['indices'].values.sum { |index_data| index_data['primaries']['store']['size_in_bytes'] } + + { + key: 'search', + human_key: client_info.dig('version', 'distribution') == 'opensearch' ? 'OpenSearch' : 'Elasticsearch', + value: value.to_s, + unit: 'bytes', + human_value: number_to_human_size(value), + } + rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error + nil + end end From 3262d1f1b62a984343f0f6c67c1d18921daabb0a Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 17:46:04 +0200 Subject: [PATCH 135/237] Fix incorrect serialization of regional languages in `contentMap` (#27207) --- app/lib/activitypub/case_transform.rb | 2 ++ .../serializers/activitypub/note_serializer_spec.rb | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/case_transform.rb b/app/lib/activitypub/case_transform.rb index da2c5eb8b0..bf5de72210 100644 --- a/app/lib/activitypub/case_transform.rb +++ b/app/lib/activitypub/case_transform.rb @@ -14,6 +14,8 @@ module ActivityPub::CaseTransform when String camel_lower_cache[value] ||= if value.start_with?('_:') "_:#{value.delete_prefix('_:').underscore.camelize(:lower)}" + elsif LanguagesHelper::ISO_639_1_REGIONAL.key?(value.to_sym) + value else value.underscore.camelize(:lower) end diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 4b2b8ec875..31ee31f132 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -7,7 +7,7 @@ describe ActivityPub::NoteSerializer do let!(:account) { Fabricate(:account) } let!(:other) { Fabricate(:account) } - let!(:parent) { Fabricate(:status, account: account, visibility: :public) } + let!(:parent) { Fabricate(:status, account: account, visibility: :public, language: 'zh-TW') } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } @@ -18,8 +18,15 @@ describe ActivityPub::NoteSerializer do @serialization = ActiveModelSerializers::SerializableResource.new(parent, serializer: described_class, adapter: ActivityPub::Adapter) end - it 'has a Note type' do - expect(subject['type']).to eql('Note') + it 'has the expected shape' do + expect(subject).to include({ + '@context' => include('https://www.w3.org/ns/activitystreams'), + 'type' => 'Note', + 'attributedTo' => ActivityPub::TagManager.instance.uri_for(account), + 'contentMap' => include({ + 'zh-TW' => a_kind_of(String), + }), + }) end it 'has a replies collection' do From c783d6786b87171234a57a2c985ce6c860472d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 7 Oct 2023 11:57:38 +0900 Subject: [PATCH 136/237] =?UTF-8?q?=E4=BB=96=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=8B=E3=82=89=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AB=E3=82=88=E3=82=8B=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=83=97=E3=82=92=E5=8F=97=E3=81=91=E5=8F=96?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E6=99=82=E3=81=AB=E3=80=81=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=BB=E3=83=B3=E3=82=B9=E6=83=85=E5=A0=B1=E3=82=92=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=99=E3=82=8B=EF=BC=8B=E3=81=A4=E3=81=84=E3=81=A7?= =?UTF-8?q?=E3=81=AB=E3=83=86=E3=82=B9=E3=83=88=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Wip: スタンプを他サーバーから受信するテスト作成、カスタム絵文字にdomainプロパティを追加 * Wip: ドメインに関するイレギュラーな状況に対応 * Wip: 他のサーバーのカスタム絵文字を送信するときのID変更処理を追加 * Wip: カスタム絵文字のIDを判定する場所を変更 * Wip: カスタム絵文字のURIを返す処理を削除(不要) * Wip: 絵文字リアクション受け入れ処理リファクタリング * Wip: 外部へ送信するカスタム絵文字データにライセンス情報を追加、ライセンス情報の受信をテストに追加 * Wip: ドメインブロックのテストを追加 * Wip: ついでに通常のドメインブロックを追加 --- app/lib/activitypub/activity/like.rb | 58 +++-- .../activitypub/parser/custom_emoji_parser.rb | 2 +- .../activitypub/emoji_serializer.rb | 8 +- spec/lib/activitypub/activity/like_spec.rb | 221 +++++++++++++++++- 4 files changed, 273 insertions(+), 16 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index ebfac9a868..5e34cc9dc5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -7,7 +7,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def perform @original_status = status_from_uri(object_uri) - return if @original_status.nil? || delete_arrived_first?(@json['id']) || reject_favourite? + return if @original_status.nil? || delete_arrived_first?(@json['id']) || block_domain? || reject_favourite? if shortcode.nil? || !Setting.enable_emoji_reaction process_favourite @@ -34,19 +34,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def process_emoji_reaction return if !@original_status.account.local? && !Setting.receive_other_servers_emoji_reaction + # custom emoji + emoji = nil if emoji_tag.present? - return if emoji_tag['id'].blank? || emoji_tag['name'].blank? || emoji_tag['icon'].blank? || emoji_tag['icon']['url'].blank? - - image_url = emoji_tag['icon']['url'] - uri = emoji_tag['id'] - domain = URI.split(uri)[2] - - emoji = CustomEmoji.find_or_create_by!(shortcode: shortcode, domain: domain) do |emoji_data| - emoji_data.uri = uri - emoji_data.image_remote_url = image_url - end - - Trends.statuses.register(@original_status) + emoji = process_emoji(emoji_tag) + return if emoji.nil? end reaction = nil @@ -58,6 +50,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) end + Trends.statuses.register(@original_status) write_stream(reaction) if @original_status.account.local? @@ -95,6 +88,45 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end end + def process_emoji(tag) + custom_emoji_parser = ActivityPub::Parser::CustomEmojiParser.new(tag) + + return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? + + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) + + return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + + domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + + return if domain.present? && skip_download?(domain) + + begin + emoji ||= CustomEmoji.new( + domain: domain, + shortcode: custom_emoji_parser.shortcode, + uri: custom_emoji_parser.uri, + is_sensitive: custom_emoji_parser.is_sensitive, + license: custom_emoji_parser.license + ) + emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.save + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing emoji: #{e}" + end + + emoji + end + + def skip_download?(domain) + DomainBlock.reject_media?(domain) + end + + def block_domain? + DomainBlock.blocked?(@account.domain) + end + def misskey_favourite? misskey_shortcode = @json['_misskey_reaction']&.delete(':') diff --git a/app/lib/activitypub/parser/custom_emoji_parser.rb b/app/lib/activitypub/parser/custom_emoji_parser.rb index 481199c72d..e217b5ec96 100644 --- a/app/lib/activitypub/parser/custom_emoji_parser.rb +++ b/app/lib/activitypub/parser/custom_emoji_parser.rb @@ -30,6 +30,6 @@ class ActivityPub::Parser::CustomEmojiParser end def license - @json['license'] + @json['license'] || @json['licence'] end end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 4dc38f3ea6..98525d3131 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -5,7 +5,9 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer context_extensions :emoji - attributes :id, :type, :name, :updated + attributes :id, :type, :domain, :name, :is_sensitive, :updated + + attribute :license, if: -> { object.license.present? } has_one :icon, serializer: ActivityPub::ImageSerializer @@ -17,6 +19,10 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer 'Emoji' end + def domain + object.domain.presence || Rails.configuration.x.local_domain + end + def icon object.image end diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index 51493f7bc8..bdeda34f12 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -29,6 +29,225 @@ RSpec.describe ActivityPub::Activity::Like do end end + describe '#perform when receive emoji reaction' do + subject do + described_class.new(json, sender).perform + EmojiReaction.where(status: status) + end + + before do + stub_request(:get, 'http://example.com/emoji.png').to_return(body: attachment_fixture('emojo.png')) + end + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: ActivityPub::TagManager.instance.uri_for(status), + content: content, + tag: tag, + }.with_indifferent_access + end + let(:content) { nil } + let(:tag) { nil } + + context 'with unicode emoji' do + let(:content) { '😀' } + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + + it 'custom emoji license is saved' do + expect(subject.first.custom_emoji.license).to eq 'Everyone but Ohagi' + end + end + + context 'with custom emoji and custom domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + domain: 'post.kmycode.net', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'post.kmycode.net' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but invalid id' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but local domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + domain: Rails.configuration.x.local_domain, + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to be_nil + expect(sender.favourited?(status)).to be false + end + end + + context 'with unicode emoji and reject_media enabled' do + let(:content) { '😀' } + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji and reject_media enabled' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction is disabled' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(enable_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be true + end + end + + context 'when emoji reaction between other servers is disabled' do + let(:recipient) { Fabricate(:account, domain: 'narrow.com', uri: 'https://narrow.com/') } + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction between other servers is disabled but that status is local' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + end + describe '#perform when domain_block' do subject { described_class.new(json, sender) } @@ -50,7 +269,7 @@ RSpec.describe ActivityPub::Activity::Like do subject.perform end - it 'does not create a favourite from sender to status', pending: 'considering spec' do + it 'does not create a favourite from sender to status' do expect(sender.favourited?(status)).to be false end end From f0fac9be8f4f0308dbeda8520a35e615da3b3c1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 7 Oct 2023 11:57:38 +0900 Subject: [PATCH 137/237] =?UTF-8?q?=E4=BB=96=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=8B=E3=82=89=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AB=E3=82=88=E3=82=8B=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=83=97=E3=82=92=E5=8F=97=E3=81=91=E5=8F=96?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E6=99=82=E3=81=AB=E3=80=81=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=BB=E3=83=B3=E3=82=B9=E6=83=85=E5=A0=B1=E3=82=92=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=99=E3=82=8B=EF=BC=8B=E3=81=A4=E3=81=84=E3=81=A7?= =?UTF-8?q?=E3=81=AB=E3=83=86=E3=82=B9=E3=83=88=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Wip: スタンプを他サーバーから受信するテスト作成、カスタム絵文字にdomainプロパティを追加 * Wip: ドメインに関するイレギュラーな状況に対応 * Wip: 他のサーバーのカスタム絵文字を送信するときのID変更処理を追加 * Wip: カスタム絵文字のIDを判定する場所を変更 * Wip: カスタム絵文字のURIを返す処理を削除(不要) * Wip: 絵文字リアクション受け入れ処理リファクタリング * Wip: 外部へ送信するカスタム絵文字データにライセンス情報を追加、ライセンス情報の受信をテストに追加 * Wip: ドメインブロックのテストを追加 * Wip: ついでに通常のドメインブロックを追加 --- app/lib/activitypub/activity/like.rb | 58 +++-- .../activitypub/parser/custom_emoji_parser.rb | 2 +- .../activitypub/emoji_serializer.rb | 8 +- spec/lib/activitypub/activity/like_spec.rb | 221 +++++++++++++++++- 4 files changed, 273 insertions(+), 16 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index ebfac9a868..5e34cc9dc5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -7,7 +7,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def perform @original_status = status_from_uri(object_uri) - return if @original_status.nil? || delete_arrived_first?(@json['id']) || reject_favourite? + return if @original_status.nil? || delete_arrived_first?(@json['id']) || block_domain? || reject_favourite? if shortcode.nil? || !Setting.enable_emoji_reaction process_favourite @@ -34,19 +34,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def process_emoji_reaction return if !@original_status.account.local? && !Setting.receive_other_servers_emoji_reaction + # custom emoji + emoji = nil if emoji_tag.present? - return if emoji_tag['id'].blank? || emoji_tag['name'].blank? || emoji_tag['icon'].blank? || emoji_tag['icon']['url'].blank? - - image_url = emoji_tag['icon']['url'] - uri = emoji_tag['id'] - domain = URI.split(uri)[2] - - emoji = CustomEmoji.find_or_create_by!(shortcode: shortcode, domain: domain) do |emoji_data| - emoji_data.uri = uri - emoji_data.image_remote_url = image_url - end - - Trends.statuses.register(@original_status) + emoji = process_emoji(emoji_tag) + return if emoji.nil? end reaction = nil @@ -58,6 +50,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) end + Trends.statuses.register(@original_status) write_stream(reaction) if @original_status.account.local? @@ -95,6 +88,45 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end end + def process_emoji(tag) + custom_emoji_parser = ActivityPub::Parser::CustomEmojiParser.new(tag) + + return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? + + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) + + return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + + domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + + return if domain.present? && skip_download?(domain) + + begin + emoji ||= CustomEmoji.new( + domain: domain, + shortcode: custom_emoji_parser.shortcode, + uri: custom_emoji_parser.uri, + is_sensitive: custom_emoji_parser.is_sensitive, + license: custom_emoji_parser.license + ) + emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.save + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing emoji: #{e}" + end + + emoji + end + + def skip_download?(domain) + DomainBlock.reject_media?(domain) + end + + def block_domain? + DomainBlock.blocked?(@account.domain) + end + def misskey_favourite? misskey_shortcode = @json['_misskey_reaction']&.delete(':') diff --git a/app/lib/activitypub/parser/custom_emoji_parser.rb b/app/lib/activitypub/parser/custom_emoji_parser.rb index 481199c72d..e217b5ec96 100644 --- a/app/lib/activitypub/parser/custom_emoji_parser.rb +++ b/app/lib/activitypub/parser/custom_emoji_parser.rb @@ -30,6 +30,6 @@ class ActivityPub::Parser::CustomEmojiParser end def license - @json['license'] + @json['license'] || @json['licence'] end end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 4dc38f3ea6..98525d3131 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -5,7 +5,9 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer context_extensions :emoji - attributes :id, :type, :name, :updated + attributes :id, :type, :domain, :name, :is_sensitive, :updated + + attribute :license, if: -> { object.license.present? } has_one :icon, serializer: ActivityPub::ImageSerializer @@ -17,6 +19,10 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer 'Emoji' end + def domain + object.domain.presence || Rails.configuration.x.local_domain + end + def icon object.image end diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index 51493f7bc8..bdeda34f12 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -29,6 +29,225 @@ RSpec.describe ActivityPub::Activity::Like do end end + describe '#perform when receive emoji reaction' do + subject do + described_class.new(json, sender).perform + EmojiReaction.where(status: status) + end + + before do + stub_request(:get, 'http://example.com/emoji.png').to_return(body: attachment_fixture('emojo.png')) + end + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: ActivityPub::TagManager.instance.uri_for(status), + content: content, + tag: tag, + }.with_indifferent_access + end + let(:content) { nil } + let(:tag) { nil } + + context 'with unicode emoji' do + let(:content) { '😀' } + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + + it 'custom emoji license is saved' do + expect(subject.first.custom_emoji.license).to eq 'Everyone but Ohagi' + end + end + + context 'with custom emoji and custom domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + domain: 'post.kmycode.net', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'post.kmycode.net' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but invalid id' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but local domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + domain: Rails.configuration.x.local_domain, + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to be_nil + expect(sender.favourited?(status)).to be false + end + end + + context 'with unicode emoji and reject_media enabled' do + let(:content) { '😀' } + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji and reject_media enabled' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction is disabled' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(enable_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be true + end + end + + context 'when emoji reaction between other servers is disabled' do + let(:recipient) { Fabricate(:account, domain: 'narrow.com', uri: 'https://narrow.com/') } + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction between other servers is disabled but that status is local' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + end + describe '#perform when domain_block' do subject { described_class.new(json, sender) } @@ -50,7 +269,7 @@ RSpec.describe ActivityPub::Activity::Like do subject.perform end - it 'does not create a favourite from sender to status', pending: 'considering spec' do + it 'does not create a favourite from sender to status' do expect(sender.favourited?(status)).to be false end end From 09020c6b211dd88c29ebc5cbb7bc5571de836287 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:13:18 +0900 Subject: [PATCH 138/237] =?UTF-8?q?Fix:=20=E3=81=99=E3=81=A7=E3=81=AB?= =?UTF-8?q?=E5=90=8C=E3=81=98=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0=E7=B5=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=80=81=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=82=92=E5=8F=97=E3=81=91=E5=85=A5=E3=82=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 14 ++++++----- spec/lib/activitypub/activity/like_spec.rb | 29 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 5e34cc9dc5..298a81b292 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -93,15 +93,17 @@ class ActivityPub::Activity::Like < ActivityPub::Activity return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? - emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) - - domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain - return if domain.present? && skip_download?(domain) + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: domain) + + return emoji unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license + begin emoji ||= CustomEmoji.new( domain: domain, diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index bdeda34f12..9991ba37dc 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -93,6 +93,35 @@ RSpec.describe ActivityPub::Activity::Like do end end + context 'with custom emoji but that is existing on local server' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + before do + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', image_remote_url: 'http://example.com/emoji.png', shortcode: 'tinking', license: 'Everyone but Ohagi') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + context 'with custom emoji and custom domain' do let(:content) { ':tinking:' } let(:tag) do From 46582b97a7564b98051c9387887ebda5d4d5c838 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:13:18 +0900 Subject: [PATCH 139/237] =?UTF-8?q?Fix:=20=E3=81=99=E3=81=A7=E3=81=AB?= =?UTF-8?q?=E5=90=8C=E3=81=98=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0=E7=B5=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=80=81=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=82=92=E5=8F=97=E3=81=91=E5=85=A5=E3=82=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 14 ++++++----- spec/lib/activitypub/activity/like_spec.rb | 29 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 5e34cc9dc5..298a81b292 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -93,15 +93,17 @@ class ActivityPub::Activity::Like < ActivityPub::Activity return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? - emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) - - domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain - return if domain.present? && skip_download?(domain) + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: domain) + + return emoji unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license + begin emoji ||= CustomEmoji.new( domain: domain, diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index bdeda34f12..9991ba37dc 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -93,6 +93,35 @@ RSpec.describe ActivityPub::Activity::Like do end end + context 'with custom emoji but that is existing on local server' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + before do + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', image_remote_url: 'http://example.com/emoji.png', shortcode: 'tinking', license: 'Everyone but Ohagi') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + context 'with custom emoji and custom domain' do let(:content) { ':tinking:' } let(:tag) do From 9b6a336a198cfbebd56b49b28a3d35188c4d9c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 7 Oct 2023 11:57:38 +0900 Subject: [PATCH 140/237] =?UTF-8?q?=E4=BB=96=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=81=8B=E3=82=89=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AB=E3=82=88=E3=82=8B=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=83=97=E3=82=92=E5=8F=97=E3=81=91=E5=8F=96?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E6=99=82=E3=81=AB=E3=80=81=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=BB=E3=83=B3=E3=82=B9=E6=83=85=E5=A0=B1=E3=82=92=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=99=E3=82=8B=EF=BC=8B=E3=81=A4=E3=81=84=E3=81=A7?= =?UTF-8?q?=E3=81=AB=E3=83=86=E3=82=B9=E3=83=88=20(#65)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Wip: スタンプを他サーバーから受信するテスト作成、カスタム絵文字にdomainプロパティを追加 * Wip: ドメインに関するイレギュラーな状況に対応 * Wip: 他のサーバーのカスタム絵文字を送信するときのID変更処理を追加 * Wip: カスタム絵文字のIDを判定する場所を変更 * Wip: カスタム絵文字のURIを返す処理を削除(不要) * Wip: 絵文字リアクション受け入れ処理リファクタリング * Wip: 外部へ送信するカスタム絵文字データにライセンス情報を追加、ライセンス情報の受信をテストに追加 * Wip: ドメインブロックのテストを追加 * Wip: ついでに通常のドメインブロックを追加 --- app/lib/activitypub/activity/like.rb | 58 +++-- .../activitypub/parser/custom_emoji_parser.rb | 2 +- .../activitypub/emoji_serializer.rb | 8 +- spec/lib/activitypub/activity/like_spec.rb | 221 +++++++++++++++++- 4 files changed, 273 insertions(+), 16 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index ebfac9a868..5e34cc9dc5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -7,7 +7,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def perform @original_status = status_from_uri(object_uri) - return if @original_status.nil? || delete_arrived_first?(@json['id']) || reject_favourite? + return if @original_status.nil? || delete_arrived_first?(@json['id']) || block_domain? || reject_favourite? if shortcode.nil? || !Setting.enable_emoji_reaction process_favourite @@ -34,19 +34,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def process_emoji_reaction return if !@original_status.account.local? && !Setting.receive_other_servers_emoji_reaction + # custom emoji + emoji = nil if emoji_tag.present? - return if emoji_tag['id'].blank? || emoji_tag['name'].blank? || emoji_tag['icon'].blank? || emoji_tag['icon']['url'].blank? - - image_url = emoji_tag['icon']['url'] - uri = emoji_tag['id'] - domain = URI.split(uri)[2] - - emoji = CustomEmoji.find_or_create_by!(shortcode: shortcode, domain: domain) do |emoji_data| - emoji_data.uri = uri - emoji_data.image_remote_url = image_url - end - - Trends.statuses.register(@original_status) + emoji = process_emoji(emoji_tag) + return if emoji.nil? end reaction = nil @@ -58,6 +50,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) end + Trends.statuses.register(@original_status) write_stream(reaction) if @original_status.account.local? @@ -95,6 +88,45 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end end + def process_emoji(tag) + custom_emoji_parser = ActivityPub::Parser::CustomEmojiParser.new(tag) + + return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? + + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) + + return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + + domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + + return if domain.present? && skip_download?(domain) + + begin + emoji ||= CustomEmoji.new( + domain: domain, + shortcode: custom_emoji_parser.shortcode, + uri: custom_emoji_parser.uri, + is_sensitive: custom_emoji_parser.is_sensitive, + license: custom_emoji_parser.license + ) + emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.save + rescue Seahorse::Client::NetworkingError => e + Rails.logger.warn "Error storing emoji: #{e}" + end + + emoji + end + + def skip_download?(domain) + DomainBlock.reject_media?(domain) + end + + def block_domain? + DomainBlock.blocked?(@account.domain) + end + def misskey_favourite? misskey_shortcode = @json['_misskey_reaction']&.delete(':') diff --git a/app/lib/activitypub/parser/custom_emoji_parser.rb b/app/lib/activitypub/parser/custom_emoji_parser.rb index 481199c72d..e217b5ec96 100644 --- a/app/lib/activitypub/parser/custom_emoji_parser.rb +++ b/app/lib/activitypub/parser/custom_emoji_parser.rb @@ -30,6 +30,6 @@ class ActivityPub::Parser::CustomEmojiParser end def license - @json['license'] + @json['license'] || @json['licence'] end end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 4dc38f3ea6..98525d3131 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -5,7 +5,9 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer context_extensions :emoji - attributes :id, :type, :name, :updated + attributes :id, :type, :domain, :name, :is_sensitive, :updated + + attribute :license, if: -> { object.license.present? } has_one :icon, serializer: ActivityPub::ImageSerializer @@ -17,6 +19,10 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer 'Emoji' end + def domain + object.domain.presence || Rails.configuration.x.local_domain + end + def icon object.image end diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index 51493f7bc8..bdeda34f12 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -29,6 +29,225 @@ RSpec.describe ActivityPub::Activity::Like do end end + describe '#perform when receive emoji reaction' do + subject do + described_class.new(json, sender).perform + EmojiReaction.where(status: status) + end + + before do + stub_request(:get, 'http://example.com/emoji.png').to_return(body: attachment_fixture('emojo.png')) + end + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: ActivityPub::TagManager.instance.uri_for(status), + content: content, + tag: tag, + }.with_indifferent_access + end + let(:content) { nil } + let(:tag) { nil } + + context 'with unicode emoji' do + let(:content) { '😀' } + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + + it 'custom emoji license is saved' do + expect(subject.first.custom_emoji.license).to eq 'Everyone but Ohagi' + end + end + + context 'with custom emoji and custom domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + domain: 'post.kmycode.net', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'post.kmycode.net' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but invalid id' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji but local domain' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'aaa', + type: 'Emoji', + domain: Rails.configuration.x.local_domain, + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to be_nil + expect(sender.favourited?(status)).to be false + end + end + + context 'with unicode emoji and reject_media enabled' do + let(:content) { '😀' } + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + + context 'with custom emoji and reject_media enabled' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + } + end + + before do + Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_media: true) + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction is disabled' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(enable_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be true + end + end + + context 'when emoji reaction between other servers is disabled' do + let(:recipient) { Fabricate(:account, domain: 'narrow.com', uri: 'https://narrow.com/') } + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 0 + expect(sender.favourited?(status)).to be false + end + end + + context 'when emoji reaction between other servers is disabled but that status is local' do + let(:content) { '😀' } + + before do + Form::AdminSettings.new(receive_other_servers_emoji_reaction: false).save + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq '😀' + expect(subject.first.account).to eq sender + expect(sender.favourited?(status)).to be false + end + end + end + describe '#perform when domain_block' do subject { described_class.new(json, sender) } @@ -50,7 +269,7 @@ RSpec.describe ActivityPub::Activity::Like do subject.perform end - it 'does not create a favourite from sender to status', pending: 'considering spec' do + it 'does not create a favourite from sender to status' do expect(sender.favourited?(status)).to be false end end From 7c09b83b7aebc8258a071f9d9effb65df409da4d Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:13:18 +0900 Subject: [PATCH 141/237] =?UTF-8?q?Fix:=20=E3=81=99=E3=81=A7=E3=81=AB?= =?UTF-8?q?=E5=90=8C=E3=81=98=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0=E7=B5=B5?= =?UTF-8?q?=E6=96=87=E5=AD=97=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=80=81=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=82=92=E5=8F=97=E3=81=91=E5=85=A5=E3=82=8C=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 14 ++++++----- spec/lib/activitypub/activity/like_spec.rb | 29 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 5e34cc9dc5..298a81b292 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -93,15 +93,17 @@ class ActivityPub::Activity::Like < ActivityPub::Activity return if custom_emoji_parser.shortcode.blank? || custom_emoji_parser.image_remote_url.blank? - emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) - - domain = emoji_tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain + domain = tag['domain'] || URI.split(custom_emoji_parser.uri)[2] || @account.domain domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain - return if domain.present? && skip_download?(domain) + emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: domain) + + return emoji unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license + begin emoji ||= CustomEmoji.new( domain: domain, diff --git a/spec/lib/activitypub/activity/like_spec.rb b/spec/lib/activitypub/activity/like_spec.rb index bdeda34f12..9991ba37dc 100644 --- a/spec/lib/activitypub/activity/like_spec.rb +++ b/spec/lib/activitypub/activity/like_spec.rb @@ -93,6 +93,35 @@ RSpec.describe ActivityPub::Activity::Like do end end + context 'with custom emoji but that is existing on local server' do + let(:content) { ':tinking:' } + let(:tag) do + { + id: 'https://example.com/aaa', + type: 'Emoji', + icon: { + url: 'http://example.com/emoji.png', + }, + name: 'tinking', + license: 'Everyone but Ohagi', + } + end + + before do + Fabricate(:custom_emoji, domain: 'example.com', uri: 'https://example.com/aaa', image_remote_url: 'http://example.com/emoji.png', shortcode: 'tinking', license: 'Everyone but Ohagi') + end + + it 'create emoji reaction' do + expect(subject.count).to eq 1 + expect(subject.first.name).to eq 'tinking' + expect(subject.first.account).to eq sender + expect(subject.first.custom_emoji).to_not be_nil + expect(subject.first.custom_emoji.shortcode).to eq 'tinking' + expect(subject.first.custom_emoji.domain).to eq 'example.com' + expect(sender.favourited?(status)).to be false + end + end + context 'with custom emoji and custom domain' do let(:content) { ':tinking:' } let(:tag) do From f6780a23970a9ae4a0cf409ba5c62b3137fec520 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:22:53 +0900 Subject: [PATCH 142/237] =?UTF-8?q?Fix:=20=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=81=AE=E6=9B=B4=E6=96=B0=E5=87=A6=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 298a81b292..9d2abcccf5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -108,11 +108,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity emoji ||= CustomEmoji.new( domain: domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From 22d03b06dab920839b59eb78baa96939cd127467 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 12:25:29 +0900 Subject: [PATCH 143/237] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AE=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=A4=89=E6=9B=B4=E3=82=92=E4=BB=96=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E6=89=80=E3=81=A7=E3=82=82=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 11 +++++++---- .../activitypub/process_status_update_service.rb | 9 +++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index bebdd70340..48b855f3b9 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -256,17 +256,20 @@ class ActivityPub::Activity::Create < ActivityPub::Activity emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + return unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin emoji ||= CustomEmoji.new( domain: @account.domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 6da0880a93..c7bc93f781 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -239,11 +239,16 @@ class ActivityPub::ProcessStatusUpdateService < BaseService emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - next unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + next unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin - emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri, is_sensitive: custom_emoji_parser.is_sensitive, license: custom_emoji_parser.license) + emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From 41c1aaf54d6b85738ffaad785eb7e4e3fe4ac5bf Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:07:35 +0900 Subject: [PATCH 144/237] =?UTF-8?q?Add:=20=E3=83=97=E3=83=AD=E3=82=AD?= =?UTF-8?q?=E3=82=B7=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=8B=95=E7=9A=84=E3=81=AB=E8=AD=98=E5=88=A5=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=B0=A1=E6=98=93=E7=9A=84=E3=81=AA=E4=BB=95=E7=B5=84=E3=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 22 +++++++- spec/lib/activitypub/activity/follow_spec.rb | 51 ++++++++++++++++++- .../process_account_service_spec.rb | 1 + 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index a586298eec..f19bd1f7c8 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -30,7 +30,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity follow_request = FollowRequest.create!(account: @account, target_account: target_account, uri: @json['id']) - if target_account.locked? || @account.silenced? || block_straight_follow? || (@account.bot? && target_account.user&.setting_lock_follow_from_bot) + if target_account.locked? || @account.silenced? || block_straight_follow? || ((@account.bot? || proxy_account?) && target_account.user&.setting_lock_follow_from_bot) LocalNotificationWorker.perform_async(target_account.id, follow_request.id, 'FollowRequest', 'follow_request') else AuthorizeFollowService.new.call(@account, target_account) @@ -50,4 +50,24 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity def block_new_follow? @block_new_follow ||= DomainBlock.reject_new_follow?(@account.domain) end + + def proxy_account? + (@account.username.downcase.include?('proxy') || + @account.username.downcase.include?('followbot') || + @account.display_name&.downcase&.include?('proxy') || + @account.display_name&.include?('プロキシ') || + @account.note&.downcase&.include?('proxy') || + @account.note&.include?('プロキシ')) && proxyable_software? + end + + def proxyable_software? + info = instance_info + return false if info.nil? + + %w(misskey calckey firefish meisskey cherrypick).include?(info.software) + end + + def instance_info + @instance_info ||= InstanceInfo.find_by(domain: @account.domain) + end end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 890ebe2750..2626c036a4 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -4,7 +4,8 @@ require 'rails_helper' RSpec.describe ActivityPub::Activity::Follow do let(:actor_type) { 'Person' } - let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type) } + let(:note) { '' } + let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, note: note) } let(:recipient) { Fabricate(:account) } let(:json) do @@ -103,6 +104,54 @@ RSpec.describe ActivityPub::Activity::Follow do end end + context 'when unlocked misskey proxy account but locked from bot' do + let(:note) { 'i am proxy.' } + + before do + Fabricate(:instance_info, domain: 'example.com', software: 'misskey') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be false + end + + it 'creates a follow request' do + expect(sender.requested?(recipient)).to be true + expect(sender.follow_requests.find_by(target_account: recipient).uri).to eq 'foo' + end + end + + context 'when unlocked mastodon proxy account but locked from bot' do + let(:note) { 'i am proxy.' } + + before do + Fabricate(:instance_info, domain: 'example.com', software: 'mastodon') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + end + end + + context 'when unlocked misskey normal account but locked from bot' do + before do + Fabricate(:instance_info, domain: 'example.com', software: 'misskey') + recipient.user.settings['lock_follow_from_bot'] = true + recipient.user.save! + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + end + end + context 'when domain block reject_straight_follow' do before do Fabricate(:domain_block, domain: 'example.com', reject_straight_follow: true) diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index b23aa1cea3..fe2c7cda99 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -21,6 +21,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do searchableBy: searchable_by, indexable: indexable, summary: sender_bio, + actor_type: 'Person', }.with_indifferent_access end From d94713594c29aee76124b2cfcaf6f0f00f0226c4 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:17:47 +0900 Subject: [PATCH 145/237] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E3=83=AD=E3=82=B8=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 7 ++++--- spec/lib/activitypub/activity/follow_spec.rb | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index f19bd1f7c8..8d9e37f172 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -52,11 +52,12 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity end def proxy_account? - (@account.username.downcase.include?('proxy') || - @account.username.downcase.include?('followbot') || + (@account.username.downcase.include?('_proxy') || + @account.username.downcase.end_with?('proxy') || + @account.username.downcase.include?('_bot_') || + @account.username.downcase.end_with?('bot') || @account.display_name&.downcase&.include?('proxy') || @account.display_name&.include?('プロキシ') || - @account.note&.downcase&.include?('proxy') || @account.note&.include?('プロキシ')) && proxyable_software? end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 2626c036a4..57f2b07718 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' RSpec.describe ActivityPub::Activity::Follow do let(:actor_type) { 'Person' } - let(:note) { '' } - let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, note: note) } + let(:display_name) { '' } + let(:sender) { Fabricate(:account, domain: 'example.com', inbox_url: 'https://example.com/inbox', actor_type: actor_type, display_name: display_name) } let(:recipient) { Fabricate(:account) } let(:json) do @@ -105,7 +105,7 @@ RSpec.describe ActivityPub::Activity::Follow do end context 'when unlocked misskey proxy account but locked from bot' do - let(:note) { 'i am proxy.' } + let(:display_name) { 'i am proxy.' } before do Fabricate(:instance_info, domain: 'example.com', software: 'misskey') @@ -125,7 +125,7 @@ RSpec.describe ActivityPub::Activity::Follow do end context 'when unlocked mastodon proxy account but locked from bot' do - let(:note) { 'i am proxy.' } + let(:display_name) { 'i am proxy.' } before do Fabricate(:instance_info, domain: 'example.com', software: 'mastodon') From 5a960c3abd896514c3aeb1340a289e97232d4ccc Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 13:24:04 +0900 Subject: [PATCH 146/237] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E6=9D=A1=E4=BB=B6=E3=82=92=E5=BD=A9=E5=BA=A6?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/follow.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index 8d9e37f172..d1297bcfe8 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -58,7 +58,9 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity @account.username.downcase.end_with?('bot') || @account.display_name&.downcase&.include?('proxy') || @account.display_name&.include?('プロキシ') || - @account.note&.include?('プロキシ')) && proxyable_software? + @account.note&.include?('プロキシ')) && + (@account.following_count.zero? || @account.following_count > @account.followers_count) && + proxyable_software? end def proxyable_software? From 7cd6252841bbb33cbbd72161f2fadb3f8b6fce37 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:09:02 +0900 Subject: [PATCH 147/237] =?UTF-8?q?Fix:=20Account=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=8C=E3=81=9F=E3=81=BE=E3=81=AB=E8=90=BD?= =?UTF-8?q?=E3=81=A1=E3=82=8B=E5=95=8F=E9=A1=8C=EF=BC=88Mastodon=E6=9C=AC?= =?UTF-8?q?=E5=AE=B6=E3=81=AE=E5=95=8F=E9=A1=8C=EF=BC=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index fc30b09167..dd1f63ce75 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -854,7 +854,7 @@ RSpec.describe Account do match = Fabricate(:account, username: 'pattern_and_suffix') account = Fabricate(:account, username: 'prefix_and_pattern') - expect(described_class.matches_username('pattern')).to eq [match, account] + expect(described_class.matches_username('pattern')).to contain_exactly(match, account) end end From 76e4ad05ae930676e5c1ac637bb275ce19e392f8 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:09:02 +0900 Subject: [PATCH 148/237] =?UTF-8?q?Fix:=20Account=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=8C=E3=81=9F=E3=81=BE=E3=81=AB=E8=90=BD?= =?UTF-8?q?=E3=81=A1=E3=82=8B=E5=95=8F=E9=A1=8C=EF=BC=88Mastodon=E6=9C=AC?= =?UTF-8?q?=E5=AE=B6=E3=81=AE=E5=95=8F=E9=A1=8C=EF=BC=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index fc30b09167..dd1f63ce75 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -854,7 +854,7 @@ RSpec.describe Account do match = Fabricate(:account, username: 'pattern_and_suffix') account = Fabricate(:account, username: 'prefix_and_pattern') - expect(described_class.matches_username('pattern')).to eq [match, account] + expect(described_class.matches_username('pattern')).to contain_exactly(match, account) end end From b7f0b94c000b346c384edb8eee3bab4f18dcdef0 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:09:02 +0900 Subject: [PATCH 149/237] =?UTF-8?q?Fix:=20Account=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=8C=E3=81=9F=E3=81=BE=E3=81=AB=E8=90=BD?= =?UTF-8?q?=E3=81=A1=E3=82=8B=E5=95=8F=E9=A1=8C=EF=BC=88Mastodon=E6=9C=AC?= =?UTF-8?q?=E5=AE=B6=E3=81=AE=E5=95=8F=E9=A1=8C=EF=BC=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index fc30b09167..dd1f63ce75 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -854,7 +854,7 @@ RSpec.describe Account do match = Fabricate(:account, username: 'pattern_and_suffix') account = Fabricate(:account, username: 'prefix_and_pattern') - expect(described_class.matches_username('pattern')).to eq [match, account] + expect(described_class.matches_username('pattern')).to contain_exactly(match, account) end end From 4a6b0062b28405606b10057506fc8b8e211d51b8 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:10:19 +0900 Subject: [PATCH 150/237] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AE=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=A4=89=E6=9B=B4=E3=82=92=E4=BB=96=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E6=89=80=E3=81=A7=E3=82=82=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 11 +++++++---- app/lib/activitypub/activity/like.rb | 6 +++--- .../activitypub/process_status_update_service.rb | 9 +++++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 6b8a715330..2726df5c3b 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -262,17 +262,20 @@ class ActivityPub::Activity::Create < ActivityPub::Activity emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + return unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin emoji ||= CustomEmoji.new( domain: @account.domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 298a81b292..9d2abcccf5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -108,11 +108,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity emoji ||= CustomEmoji.new( domain: domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index dd6c8bc8a1..92d5788151 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -239,11 +239,16 @@ class ActivityPub::ProcessStatusUpdateService < BaseService emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - next unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + next unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin - emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri, is_sensitive: custom_emoji_parser.is_sensitive, license: custom_emoji_parser.license) + emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From e81c91134938d2d7b679fe8a5d78eaa598fb0430 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 14:10:19 +0900 Subject: [PATCH 151/237] =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AE=E3=83=A9=E3=82=A4=E3=82=BB?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=A4=89=E6=9B=B4=E3=82=92=E4=BB=96=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E6=89=80=E3=81=A7=E3=82=82=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 11 +++++++---- app/lib/activitypub/activity/like.rb | 6 +++--- .../activitypub/process_status_update_service.rb | 9 +++++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index bebdd70340..48b855f3b9 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -256,17 +256,20 @@ class ActivityPub::Activity::Create < ActivityPub::Activity emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - return unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + return unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin emoji ||= CustomEmoji.new( domain: @account.domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 298a81b292..9d2abcccf5 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -108,11 +108,11 @@ class ActivityPub::Activity::Like < ActivityPub::Activity emoji ||= CustomEmoji.new( domain: domain, shortcode: custom_emoji_parser.shortcode, - uri: custom_emoji_parser.uri, - is_sensitive: custom_emoji_parser.is_sensitive, - license: custom_emoji_parser.license + uri: custom_emoji_parser.uri ) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index 6da0880a93..c7bc93f781 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -239,11 +239,16 @@ class ActivityPub::ProcessStatusUpdateService < BaseService emoji = CustomEmoji.find_by(shortcode: custom_emoji_parser.shortcode, domain: @account.domain) - next unless emoji.nil? || custom_emoji_parser.image_remote_url != emoji.image_remote_url || (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) + next unless emoji.nil? || + custom_emoji_parser.image_remote_url != emoji.image_remote_url || + (custom_emoji_parser.updated_at && custom_emoji_parser.updated_at >= emoji.updated_at) || + custom_emoji_parser.license != emoji.license begin - emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri, is_sensitive: custom_emoji_parser.is_sensitive, license: custom_emoji_parser.license) + emoji ||= CustomEmoji.new(domain: @account.domain, shortcode: custom_emoji_parser.shortcode, uri: custom_emoji_parser.uri) emoji.image_remote_url = custom_emoji_parser.image_remote_url + emoji.license = custom_emoji_parser.license + emoji.is_sensitive = custom_emoji_parser.is_sensitive emoji.save rescue Seahorse::Client::NetworkingError => e Rails.logger.warn "Error storing emoji: #{e}" From 583f5fe906d39920c0f336f334f12966c808e4a2 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 15:31:35 +0900 Subject: [PATCH 152/237] =?UTF-8?q?=E4=BB=96=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=82=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index dd1f63ce75..c13d57c761 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -845,7 +845,7 @@ RSpec.describe Account do match = Fabricate(:account, display_name: 'pattern and suffix') account = Fabricate(:account, display_name: 'prefix and pattern') - expect(described_class.matches_display_name('pattern')).to eq [match, account] + expect(described_class.matches_display_name('pattern')).to contain_exactly(match, account) end end From d3de764d7601294205f5abd1bedb1af6a37385e2 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 15:31:35 +0900 Subject: [PATCH 153/237] =?UTF-8?q?=E4=BB=96=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=82=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index dd1f63ce75..c13d57c761 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -845,7 +845,7 @@ RSpec.describe Account do match = Fabricate(:account, display_name: 'pattern and suffix') account = Fabricate(:account, display_name: 'prefix and pattern') - expect(described_class.matches_display_name('pattern')).to eq [match, account] + expect(described_class.matches_display_name('pattern')).to contain_exactly(match, account) end end From 30edfda9e40814183711df3fd0228eaf92f915e9 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 15:31:35 +0900 Subject: [PATCH 154/237] =?UTF-8?q?=E4=BB=96=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=82=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index dd1f63ce75..c13d57c761 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -845,7 +845,7 @@ RSpec.describe Account do match = Fabricate(:account, display_name: 'pattern and suffix') account = Fabricate(:account, display_name: 'prefix and pattern') - expect(described_class.matches_display_name('pattern')).to eq [match, account] + expect(described_class.matches_display_name('pattern')).to contain_exactly(match, account) end end From 22d1f52597e724c154cab44d57c2bbc6724cb099 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 18:47:32 +0900 Subject: [PATCH 155/237] =?UTF-8?q?#66=20=E6=A4=9C=E7=B4=A2=E6=99=82?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A9=E3=83=AD=E3=83=BC=E4=B8=AD=E3=82=A2?= =?UTF-8?q?=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E4=B8=80=E8=A6=A7=E4=BD=9C?= =?UTF-8?q?=E6=88=90=E5=87=A6=E7=90=86=E3=82=92=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/search_query_transformer.rb | 5 +--- app/models/account_stat.rb | 1 + app/models/domain_block.rb | 1 + app/models/status.rb | 18 ++++++++++++ ..._add_searchable_follow_to_account_stats.rb | 20 +++++++++++++ db/schema.rb | 21 +++++++++++++- spec/models/status_spec.rb | 29 +++++++++++++++++++ 7 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index 567b10ade2..572d8fd059 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -199,10 +199,7 @@ class SearchQueryTransformer < Parslet::Transform def following_account_ids return @following_account_ids if defined?(@following_account_ids) - account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql - status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql - following_accounts = Follow.where(account_id: @options[:current_account].id).merge(Account.where("EXISTS (#{account_exists_sql})").or(Account.where("EXISTS (#{status_exists_sql})"))) - @following_account_ids = following_accounts.pluck(:target_account_id) + @following_account_ids = @options[:current_account].following.includes(:account_stat).where(account_stat: { searchable_by_follower: true }).select(:id).pluck(:id) end end diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index 622edb9c22..a680079c92 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -13,6 +13,7 @@ # updated_at :datetime not null # last_status_at :datetime # group_activitypub_count :integer +# searchable_by_follower :boolean default(FALSE), not null # class AccountStat < ApplicationRecord diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index b05fa19476..a8cdcdccf6 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -28,6 +28,7 @@ # hidden_anonymous :boolean default(FALSE), not null # detect_invalid_subscription :boolean default(FALSE), not null # reject_reply_exclude_followers :boolean default(FALSE), not null +# reject_friend :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord diff --git a/app/models/status.rb b/app/models/status.rb index 5a33411aba..4aa490a0a0 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -157,6 +157,9 @@ class Status < ApplicationRecord after_create_commit :store_uri, if: :local? after_create_commit :update_statistics, if: :local? + after_create_commit :set_searchable_follow_on_create + after_destroy_commit :set_searchable_follow_on_destroy + before_validation :prepare_contents, if: :local? before_validation :set_reblog before_validation :set_visibility @@ -670,6 +673,21 @@ class Status < ApplicationRecord ActivityTracker.increment('activity:statuses:local') end + def set_searchable_follow_on_create + return unless public_searchability? || public_unlisted_searchability? || private_searchability? + return if account.account_stat.nil? || account.account_stat.searchable_by_follower + + account.account_stat.update(searchable_by_follower: true) + end + + def set_searchable_follow_on_destroy + return unless public_searchability? || public_unlisted_searchability? || private_searchability? + return if account.account_stat.nil? || !account.account_stat.searchable_by_follower + return if account.statuses.exists?(searchability: %i(public public_unlisted unlisted private)) + + account.account_stat.update(searchable_by_follower: false) + end + def increment_counter_caches return if direct_visibility? diff --git a/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb b/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb new file mode 100644 index 0000000000..ab55a41483 --- /dev/null +++ b/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddSearchableFollowToAccountStats < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + class AccountStat < ApplicationRecord; end + + def change + safety_assured do + add_column_with_default :account_stats, :searchable_by_follower, :boolean, default: false, allow_null: false + + AccountStat.where('EXISTS (SELECT 1 FROM statuses WHERE searchability IN (0, 10, 1) AND account_id = account_stats.account_id)') + .update_all(searchable_by_follower: true) # rubocop:disable Rails/SkipsModelValidations + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8ee0450744..8e0b1a96c4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do +ActiveRecord::Schema[7.0].define(version: 2023_10_07_090807) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,6 +108,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do t.datetime "updated_at", precision: nil, null: false t.datetime "last_status_at", precision: nil t.integer "group_activitypub_count" + t.boolean "searchable_by_follower", default: false, null: false t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true t.index ["last_status_at", "account_id"], name: "index_account_stats_on_last_status_at_and_account_id", order: { last_status_at: "DESC NULLS LAST" } end @@ -584,6 +585,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do t.boolean "hidden_anonymous", default: false, null: false t.boolean "detect_invalid_subscription", default: false, null: false t.boolean "reject_reply_exclude_followers", default: false, null: false + t.boolean "reject_friend", default: false, null: false t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end @@ -676,6 +678,23 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do t.index ["target_account_id"], name: "index_follows_on_target_account_id" end + create_table "friend_domains", force: :cascade do |t| + t.string "domain", default: "", null: false + t.string "inbox_url", default: "", null: false + t.integer "active_state", default: 0, null: false + t.integer "passive_state", default: 0, null: false + t.string "active_follow_activity_id" + t.string "passive_follow_activity_id" + t.boolean "available", default: true, null: false + t.boolean "public_unlisted", default: true, null: false + t.boolean "pseudo_relay", default: false, null: false + t.boolean "unlocked", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["domain"], name: "index_friend_domains_on_domain", unique: true + t.index ["inbox_url"], name: "index_friend_domains_on_inbox_url", unique: true + end + create_table "identities", force: :cascade do |t| t.string "provider", default: "", null: false t.string "uid", default: "", null: false diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 96f6bb56c9..7996a4fea5 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -571,5 +571,34 @@ RSpec.describe Status do status.reload expect(status.uri).to start_with('https://') end + + it 'saves as searchable by followers' do + status = described_class.create(account: alice, text: 'foo', searchability: :public) + expect(status.account.account_stat.searchable_by_follower).to be true + end + end + + describe 'after destroy' do + it 'saves as not searchable by followers' do + status = described_class.create(account: alice, text: 'foo', searchability: :public) + status.destroy + expect(status.account.account_stat.searchable_by_follower).to be false + end + + it 'on multiple posts' do + status1 = described_class.create(account: alice, text: 'foo', searchability: :public) + status2 = described_class.create(account: alice, text: 'foo', searchability: :public) + status3 = described_class.create(account: alice, text: 'foo', searchability: :public) + status4 = described_class.create(account: alice, text: 'foo', searchability: :public) + status5 = described_class.create(account: alice, text: 'foo', searchability: :public) + status1.destroy + status2.destroy + status3.destroy + expect(alice.account_stat.searchable_by_follower).to be true + status4.destroy + expect(alice.account_stat.searchable_by_follower).to be true + status5.destroy + expect(alice.account_stat.searchable_by_follower).to be false + end end end From f94d9e754786fc704291c687f6ec341301cf116d Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 19:21:13 +0900 Subject: [PATCH 156/237] =?UTF-8?q?Remove:=20=E5=AD=98=E5=9C=A8=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E6=A4=9C=E7=B4=A2=E8=A8=B1=E5=8F=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/status.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index 4aa490a0a0..c524cbfdfd 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -683,7 +683,7 @@ class Status < ApplicationRecord def set_searchable_follow_on_destroy return unless public_searchability? || public_unlisted_searchability? || private_searchability? return if account.account_stat.nil? || !account.account_stat.searchable_by_follower - return if account.statuses.exists?(searchability: %i(public public_unlisted unlisted private)) + return if account.statuses.exists?(searchability: %i(public public_unlisted private)) account.account_stat.update(searchable_by_follower: false) end From 9738d80cb4e7d4d2aee9aac272210f0a7388b250 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 21:33:47 +0900 Subject: [PATCH 157/237] =?UTF-8?q?Revert=20"Remove:=20=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84=E6=A4=9C=E7=B4=A2=E8=A8=B1=E5=8F=AF?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit f94d9e754786fc704291c687f6ec341301cf116d. --- app/models/status.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/status.rb b/app/models/status.rb index c524cbfdfd..4aa490a0a0 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -683,7 +683,7 @@ class Status < ApplicationRecord def set_searchable_follow_on_destroy return unless public_searchability? || public_unlisted_searchability? || private_searchability? return if account.account_stat.nil? || !account.account_stat.searchable_by_follower - return if account.statuses.exists?(searchability: %i(public public_unlisted private)) + return if account.statuses.exists?(searchability: %i(public public_unlisted unlisted private)) account.account_stat.update(searchable_by_follower: false) end From 87afb5295aae53a89713d7ed7a324930385696aa Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 21:33:52 +0900 Subject: [PATCH 158/237] =?UTF-8?q?Revert=20"#66=20=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=83=95=E3=82=A9=E3=83=AD=E3=83=BC=E4=B8=AD?= =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E5=87=A6=E7=90=86=E3=82=92=E6=94=B9=E5=96=84?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 22d1f52597e724c154cab44d57c2bbc6724cb099. --- app/lib/search_query_transformer.rb | 5 +++- app/models/account_stat.rb | 1 - app/models/domain_block.rb | 1 - app/models/status.rb | 18 ------------ ..._add_searchable_follow_to_account_stats.rb | 20 ------------- db/schema.rb | 21 +------------- spec/models/status_spec.rb | 29 ------------------- 7 files changed, 5 insertions(+), 90 deletions(-) delete mode 100644 db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index 572d8fd059..567b10ade2 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -199,7 +199,10 @@ class SearchQueryTransformer < Parslet::Transform def following_account_ids return @following_account_ids if defined?(@following_account_ids) - @following_account_ids = @options[:current_account].following.includes(:account_stat).where(account_stat: { searchable_by_follower: true }).select(:id).pluck(:id) + account_exists_sql = Account.where('accounts.id = follows.target_account_id').where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql + status_exists_sql = Status.where('statuses.account_id = follows.target_account_id').where(reblog_of_id: nil).where(searchability: %w(public public_unlisted private)).reorder(nil).select(1).to_sql + following_accounts = Follow.where(account_id: @options[:current_account].id).merge(Account.where("EXISTS (#{account_exists_sql})").or(Account.where("EXISTS (#{status_exists_sql})"))) + @following_account_ids = following_accounts.pluck(:target_account_id) end end diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index a680079c92..622edb9c22 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -13,7 +13,6 @@ # updated_at :datetime not null # last_status_at :datetime # group_activitypub_count :integer -# searchable_by_follower :boolean default(FALSE), not null # class AccountStat < ApplicationRecord diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index a8cdcdccf6..b05fa19476 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -28,7 +28,6 @@ # hidden_anonymous :boolean default(FALSE), not null # detect_invalid_subscription :boolean default(FALSE), not null # reject_reply_exclude_followers :boolean default(FALSE), not null -# reject_friend :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord diff --git a/app/models/status.rb b/app/models/status.rb index 4aa490a0a0..5a33411aba 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -157,9 +157,6 @@ class Status < ApplicationRecord after_create_commit :store_uri, if: :local? after_create_commit :update_statistics, if: :local? - after_create_commit :set_searchable_follow_on_create - after_destroy_commit :set_searchable_follow_on_destroy - before_validation :prepare_contents, if: :local? before_validation :set_reblog before_validation :set_visibility @@ -673,21 +670,6 @@ class Status < ApplicationRecord ActivityTracker.increment('activity:statuses:local') end - def set_searchable_follow_on_create - return unless public_searchability? || public_unlisted_searchability? || private_searchability? - return if account.account_stat.nil? || account.account_stat.searchable_by_follower - - account.account_stat.update(searchable_by_follower: true) - end - - def set_searchable_follow_on_destroy - return unless public_searchability? || public_unlisted_searchability? || private_searchability? - return if account.account_stat.nil? || !account.account_stat.searchable_by_follower - return if account.statuses.exists?(searchability: %i(public public_unlisted unlisted private)) - - account.account_stat.update(searchable_by_follower: false) - end - def increment_counter_caches return if direct_visibility? diff --git a/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb b/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb deleted file mode 100644 index ab55a41483..0000000000 --- a/db/migrate/20231007090807_add_searchable_follow_to_account_stats.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require Rails.root.join('lib', 'mastodon', 'migration_helpers') - -class AddSearchableFollowToAccountStats < ActiveRecord::Migration[7.0] - include Mastodon::MigrationHelpers - - disable_ddl_transaction! - - class AccountStat < ApplicationRecord; end - - def change - safety_assured do - add_column_with_default :account_stats, :searchable_by_follower, :boolean, default: false, allow_null: false - - AccountStat.where('EXISTS (SELECT 1 FROM statuses WHERE searchability IN (0, 10, 1) AND account_id = account_stats.account_id)') - .update_all(searchable_by_follower: true) # rubocop:disable Rails/SkipsModelValidations - end - end -end diff --git a/db/schema.rb b/db/schema.rb index 8e0b1a96c4..8ee0450744 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_07_090807) do +ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -108,7 +108,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090807) do t.datetime "updated_at", precision: nil, null: false t.datetime "last_status_at", precision: nil t.integer "group_activitypub_count" - t.boolean "searchable_by_follower", default: false, null: false t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true t.index ["last_status_at", "account_id"], name: "index_account_stats_on_last_status_at_and_account_id", order: { last_status_at: "DESC NULLS LAST" } end @@ -585,7 +584,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090807) do t.boolean "hidden_anonymous", default: false, null: false t.boolean "detect_invalid_subscription", default: false, null: false t.boolean "reject_reply_exclude_followers", default: false, null: false - t.boolean "reject_friend", default: false, null: false t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end @@ -678,23 +676,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090807) do t.index ["target_account_id"], name: "index_follows_on_target_account_id" end - create_table "friend_domains", force: :cascade do |t| - t.string "domain", default: "", null: false - t.string "inbox_url", default: "", null: false - t.integer "active_state", default: 0, null: false - t.integer "passive_state", default: 0, null: false - t.string "active_follow_activity_id" - t.string "passive_follow_activity_id" - t.boolean "available", default: true, null: false - t.boolean "public_unlisted", default: true, null: false - t.boolean "pseudo_relay", default: false, null: false - t.boolean "unlocked", default: false, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["domain"], name: "index_friend_domains_on_domain", unique: true - t.index ["inbox_url"], name: "index_friend_domains_on_inbox_url", unique: true - end - create_table "identities", force: :cascade do |t| t.string "provider", default: "", null: false t.string "uid", default: "", null: false diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 7996a4fea5..96f6bb56c9 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -571,34 +571,5 @@ RSpec.describe Status do status.reload expect(status.uri).to start_with('https://') end - - it 'saves as searchable by followers' do - status = described_class.create(account: alice, text: 'foo', searchability: :public) - expect(status.account.account_stat.searchable_by_follower).to be true - end - end - - describe 'after destroy' do - it 'saves as not searchable by followers' do - status = described_class.create(account: alice, text: 'foo', searchability: :public) - status.destroy - expect(status.account.account_stat.searchable_by_follower).to be false - end - - it 'on multiple posts' do - status1 = described_class.create(account: alice, text: 'foo', searchability: :public) - status2 = described_class.create(account: alice, text: 'foo', searchability: :public) - status3 = described_class.create(account: alice, text: 'foo', searchability: :public) - status4 = described_class.create(account: alice, text: 'foo', searchability: :public) - status5 = described_class.create(account: alice, text: 'foo', searchability: :public) - status1.destroy - status2.destroy - status3.destroy - expect(alice.account_stat.searchable_by_follower).to be true - status4.destroy - expect(alice.account_stat.searchable_by_follower).to be true - status5.destroy - expect(alice.account_stat.searchable_by_follower).to be false - end end end From a34aa6d902ff32346bbf8103733f7f04e2537928 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 21:45:46 +0900 Subject: [PATCH 159/237] =?UTF-8?q?#66=20=E3=82=A4=E3=83=B3=E3=83=87?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=B9=E3=82=92=E4=BD=9C=E3=82=8B=E6=96=B9?= =?UTF-8?q?=E5=90=91=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7090808_improve_search_for_account_statuses.rb | 15 +++++++++++++++ db/schema.rb | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20231007090808_improve_search_for_account_statuses.rb diff --git a/db/migrate/20231007090808_improve_search_for_account_statuses.rb b/db/migrate/20231007090808_improve_search_for_account_statuses.rb new file mode 100644 index 0000000000..e1817ed95c --- /dev/null +++ b/db/migrate/20231007090808_improve_search_for_account_statuses.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class ImproveSearchForAccountStatuses < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + add_index :statuses, [:account_id, :reblog_of_id, :deleted_at, :searchability], name: 'index_statuses_for_get_following_accounts_to_search', where: 'deleted_at IS NULL AND reblog_of_id IS NULL AND searchability IN (0, 10, 1)' + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8ee0450744..32cf51a16c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do +ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1203,6 +1203,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do t.integer "limited_scope" t.bigint "quote_of_id" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" + t.index ["account_id", "reblog_of_id", "deleted_at", "searchability"], name: "index_statuses_for_get_following_accounts_to_search", where: "((deleted_at IS NULL) AND (reblog_of_id IS NULL) AND (searchability = ANY (ARRAY[0, 10, 1])))" t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)" t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))" From f6b583aca733c5670c30d9171402631e58b94099 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 21:45:46 +0900 Subject: [PATCH 160/237] =?UTF-8?q?#66=20=E6=A4=9C=E7=B4=A2=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7090808_improve_search_for_account_statuses.rb | 15 +++++++++++++++ db/schema.rb | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20231007090808_improve_search_for_account_statuses.rb diff --git a/db/migrate/20231007090808_improve_search_for_account_statuses.rb b/db/migrate/20231007090808_improve_search_for_account_statuses.rb new file mode 100644 index 0000000000..e1817ed95c --- /dev/null +++ b/db/migrate/20231007090808_improve_search_for_account_statuses.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class ImproveSearchForAccountStatuses < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + add_index :statuses, [:account_id, :reblog_of_id, :deleted_at, :searchability], name: 'index_statuses_for_get_following_accounts_to_search', where: 'deleted_at IS NULL AND reblog_of_id IS NULL AND searchability IN (0, 10, 1)' + end + end +end diff --git a/db/schema.rb b/db/schema.rb index c5dcfc6a33..24dc5450e1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_09_19_232836) do +ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1190,6 +1190,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_19_232836) do t.boolean "markdown", default: false t.integer "limited_scope" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" + t.index ["account_id", "reblog_of_id", "deleted_at", "searchability"], name: "index_statuses_for_get_following_accounts_to_search", where: "((deleted_at IS NULL) AND (reblog_of_id IS NULL) AND (searchability = ANY (ARRAY[0, 10, 1])))" t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)" t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))" From 39c1572418c18e2ecbc99132c59465ccbc73e080 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 7 Oct 2023 21:45:46 +0900 Subject: [PATCH 161/237] =?UTF-8?q?#66=20=E6=A4=9C=E7=B4=A2=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7090808_improve_search_for_account_statuses.rb | 15 +++++++++++++++ db/schema.rb | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20231007090808_improve_search_for_account_statuses.rb diff --git a/db/migrate/20231007090808_improve_search_for_account_statuses.rb b/db/migrate/20231007090808_improve_search_for_account_statuses.rb new file mode 100644 index 0000000000..e1817ed95c --- /dev/null +++ b/db/migrate/20231007090808_improve_search_for_account_statuses.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class ImproveSearchForAccountStatuses < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + add_index :statuses, [:account_id, :reblog_of_id, :deleted_at, :searchability], name: 'index_statuses_for_get_following_accounts_to_search', where: 'deleted_at IS NULL AND reblog_of_id IS NULL AND searchability IN (0, 10, 1)' + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8ee0450744..32cf51a16c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do +ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1203,6 +1203,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_01_050733) do t.integer "limited_scope" t.bigint "quote_of_id" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" + t.index ["account_id", "reblog_of_id", "deleted_at", "searchability"], name: "index_statuses_for_get_following_accounts_to_search", where: "((deleted_at IS NULL) AND (reblog_of_id IS NULL) AND (searchability = ANY (ARRAY[0, 10, 1])))" t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)" t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))" From 10066eac4eda8e04f5c84dfecc26569ecd8a4447 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 18:39:20 +0900 Subject: [PATCH 162/237] =?UTF-8?q?Fix:=20=E5=8F=82=E7=85=A7=E3=81=A7?= =?UTF-8?q?=E9=9D=9E=E5=85=AC=E9=96=8B=E6=8A=95=E7=A8=BF=E3=81=8C=E8=A6=8B?= =?UTF-8?q?=E3=81=88=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/statuses_controller.rb | 2 +- app/models/concerns/status_threading_concern.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 1df399405a..065ec07613 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -44,7 +44,7 @@ class Api::V1::StatusesController < Api::BaseController ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account) descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit) - references_results = @status.references + references_results = @status.readable_references(current_account) loaded_ancestors = cache_collection(ancestors_results, Status) loaded_descendants = cache_collection(descendants_results, Status) loaded_references = cache_collection(references_results, Status) diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index 38d0f393b7..52b397b47d 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -11,6 +11,15 @@ module StatusThreadingConcern find_statuses_from_tree_path(descendant_ids(limit, depth), account, promote: true) end + def readable_references(account = nil) + statuses = references.to_a + account_ids = statuses.map(&:account_id).uniq + domains = statuses.filter_map(&:account_domain).uniq + relations = account&.relations_map(account_ids, domains) || {} + statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } + statuses + end + def self_replies(limit) account.statuses.where(in_reply_to_id: id, visibility: [:public, :unlisted, :public_unlisted, :login]).reorder(id: :asc).limit(limit) end From f347df4e4c805342e97998862cebf3d26d5eb703 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 18:39:20 +0900 Subject: [PATCH 163/237] =?UTF-8?q?Fix:=20=E5=8F=82=E7=85=A7=E3=81=A7?= =?UTF-8?q?=E9=9D=9E=E5=85=AC=E9=96=8B=E6=8A=95=E7=A8=BF=E3=81=8C=E8=A6=8B?= =?UTF-8?q?=E3=81=88=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/statuses_controller.rb | 2 +- app/models/concerns/status_threading_concern.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 1df399405a..065ec07613 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -44,7 +44,7 @@ class Api::V1::StatusesController < Api::BaseController ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account) descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit) - references_results = @status.references + references_results = @status.readable_references(current_account) loaded_ancestors = cache_collection(ancestors_results, Status) loaded_descendants = cache_collection(descendants_results, Status) loaded_references = cache_collection(references_results, Status) diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index 38d0f393b7..52b397b47d 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -11,6 +11,15 @@ module StatusThreadingConcern find_statuses_from_tree_path(descendant_ids(limit, depth), account, promote: true) end + def readable_references(account = nil) + statuses = references.to_a + account_ids = statuses.map(&:account_id).uniq + domains = statuses.filter_map(&:account_domain).uniq + relations = account&.relations_map(account_ids, domains) || {} + statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } + statuses + end + def self_replies(limit) account.statuses.where(in_reply_to_id: id, visibility: [:public, :unlisted, :public_unlisted, :login]).reorder(id: :asc).limit(limit) end From b8d2a306463cfe8b312aa1f8173917fe1ef78b65 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 18:44:35 +0900 Subject: [PATCH 164/237] Bump version to 5.3 LTS --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 611f439135..c5cc6d8ce7 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def kmyblue_minor - 2 + 3 end def kmyblue_flag From 36129a698710e17f88db9eed5730fedbbe4a9905 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 18:39:20 +0900 Subject: [PATCH 165/237] =?UTF-8?q?Fix:=20=E5=8F=82=E7=85=A7=E3=81=A7?= =?UTF-8?q?=E9=9D=9E=E5=85=AC=E9=96=8B=E6=8A=95=E7=A8=BF=E3=81=8C=E8=A6=8B?= =?UTF-8?q?=E3=81=88=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/statuses_controller.rb | 2 +- app/models/concerns/status_threading_concern.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 1df399405a..065ec07613 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -44,7 +44,7 @@ class Api::V1::StatusesController < Api::BaseController ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account) descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit) - references_results = @status.references + references_results = @status.readable_references(current_account) loaded_ancestors = cache_collection(ancestors_results, Status) loaded_descendants = cache_collection(descendants_results, Status) loaded_references = cache_collection(references_results, Status) diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index 38d0f393b7..52b397b47d 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -11,6 +11,15 @@ module StatusThreadingConcern find_statuses_from_tree_path(descendant_ids(limit, depth), account, promote: true) end + def readable_references(account = nil) + statuses = references.to_a + account_ids = statuses.map(&:account_id).uniq + domains = statuses.filter_map(&:account_domain).uniq + relations = account&.relations_map(account_ids, domains) || {} + statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? } + statuses + end + def self_replies(limit) account.statuses.where(in_reply_to_id: id, visibility: [:public, :unlisted, :public_unlisted, :login]).reorder(id: :asc).limit(limit) end From b269b5a11b88bc26ae9bf2909758bceffd8755fd Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 18:54:42 +0900 Subject: [PATCH 166/237] Bump version to 6.1 --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 0d68960eb4..183a9ae556 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def kmyblue_minor - 0 + 1 end def kmyblue_flag From acb29e5b114899573a93e098f7c1c9788342b7a5 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 19:14:41 +0900 Subject: [PATCH 167/237] =?UTF-8?q?Test:=20=E5=8F=82=E7=85=A7=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E5=8F=96=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/status_threading_concern_spec.rb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/spec/models/concerns/status_threading_concern_spec.rb b/spec/models/concerns/status_threading_concern_spec.rb index 2eac1ca6e5..d0f5179550 100644 --- a/spec/models/concerns/status_threading_concern_spec.rb +++ b/spec/models/concerns/status_threading_concern_spec.rb @@ -129,4 +129,56 @@ describe StatusThreadingConcern do expect(a.descendants(20)).to eq [c, d, e, f] end end + + describe '#readable_references' do + subject { status.readable_references(account).pluck(:id) } + + let(:visibility) { :public } + let(:alice) { Fabricate(:account) } + let(:referred_account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + let(:referred_status) { Fabricate(:status, account: referred_account, visibility: visibility) } + let(:referred_follower) { Fabricate(:account) } + let(:follower) { Fabricate(:account) } + let(:third_account) { Fabricate(:account) } + let(:account) { third_account } + + before do + referred_follower.follow!(referred_account) + follower.follow!(alice) + Fabricate(:status_reference, status: status, target_status: referred_status) + end + + it 'with a simple case' do + expect(subject).to include referred_status.id + end + + context 'when private post' do + let(:visibility) { :private } + + context 'with referred post follower' do + let(:account) { referred_follower } + + it 'can show' do + expect(subject).to include referred_status.id + end + end + + context 'with original post follower' do + let(:account) { follower } + + it 'can show' do + expect(subject).to_not include referred_status.id + end + end + + context 'with other account' do + let(:account) { third_account } + + it 'can show' do + expect(subject).to_not include referred_status.id + end + end + end + end end From 267e009eaa18b1441daf9673e64bc4ddf4cd9d92 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 19:14:41 +0900 Subject: [PATCH 168/237] =?UTF-8?q?Test:=20=E5=8F=82=E7=85=A7=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E5=8F=96=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/status_threading_concern_spec.rb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/spec/models/concerns/status_threading_concern_spec.rb b/spec/models/concerns/status_threading_concern_spec.rb index 2eac1ca6e5..d0f5179550 100644 --- a/spec/models/concerns/status_threading_concern_spec.rb +++ b/spec/models/concerns/status_threading_concern_spec.rb @@ -129,4 +129,56 @@ describe StatusThreadingConcern do expect(a.descendants(20)).to eq [c, d, e, f] end end + + describe '#readable_references' do + subject { status.readable_references(account).pluck(:id) } + + let(:visibility) { :public } + let(:alice) { Fabricate(:account) } + let(:referred_account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + let(:referred_status) { Fabricate(:status, account: referred_account, visibility: visibility) } + let(:referred_follower) { Fabricate(:account) } + let(:follower) { Fabricate(:account) } + let(:third_account) { Fabricate(:account) } + let(:account) { third_account } + + before do + referred_follower.follow!(referred_account) + follower.follow!(alice) + Fabricate(:status_reference, status: status, target_status: referred_status) + end + + it 'with a simple case' do + expect(subject).to include referred_status.id + end + + context 'when private post' do + let(:visibility) { :private } + + context 'with referred post follower' do + let(:account) { referred_follower } + + it 'can show' do + expect(subject).to include referred_status.id + end + end + + context 'with original post follower' do + let(:account) { follower } + + it 'can show' do + expect(subject).to_not include referred_status.id + end + end + + context 'with other account' do + let(:account) { third_account } + + it 'can show' do + expect(subject).to_not include referred_status.id + end + end + end + end end From 3a1b03e2b4af123fa4a0f1bb70b3edae66969b42 Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 8 Oct 2023 20:18:33 +0900 Subject: [PATCH 169/237] Bump version to 5.4 LTS --- lib/mastodon/version.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index d12507eb08..3e443ad6c2 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def kmyblue_minor - 3 + 4 end def kmyblue_flag @@ -29,7 +29,7 @@ module Mastodon end def default_prerelease - 'rc1' + '' end def prerelease From 87e858a202dbd2d1eb4a96ae3a065a02061b9060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Mon, 9 Oct 2023 11:51:15 +0900 Subject: [PATCH 170/237] =?UTF-8?q?Add:=20=E3=83=95=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=20(#61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix mastodon version * テーブル作成 * Wip: フレンドサーバーフォローの承認を受信 * Wip: フレンド申請拒否を受信 * Wip: フォローリクエストを受理 * Wip: 相手からのフォロー・アンフォローを受理 * 普通のフォローとフレンドサーバーのフォローを区別するテストを追加 * ドメインブロックによるフォロー拒否 * ドメインブロックしたあと、申請中のフォロリクを取り下げる処理 * スタブに条件を追加 * Wip: 相手からのDelete信号に対応 * DB定義が消えていたので修正 * Wip: ローカル公開投稿をフレンドに送信する処理など * Wip: 未収載+誰でもの投稿をフレンドに送る設定 * Wip: ローカル公開をそのまま送信する設定を考慮 * Fix test * Wip: 他サーバーからのローカル公開投稿の受け入れ * Wip: Web画面作成 * Fix test * Wip: ローカル公開を連合TLに流す * Wip: フレンドサーバーの削除ボタン * Wip: メール通知や設定のテストなど * Wip: 翻訳を作成 * Fix: 却下されたあとフォローボタンが表示されない問題 * Wip: 編集できない問題 * 有効にしていないフレンドサーバーをリストで無効表示 --- .../admin/domain_blocks_controller.rb | 6 +- .../admin/friend_servers_controller.rb | 89 ++++++++ .../api/v1/admin/domain_blocks_controller.rb | 4 +- app/lib/activitypub/activity/accept.rb | 13 ++ app/lib/activitypub/activity/create.rb | 6 +- app/lib/activitypub/activity/delete.rb | 7 + app/lib/activitypub/activity/follow.rb | 40 ++++ app/lib/activitypub/activity/reject.rb | 13 ++ app/lib/activitypub/activity/undo.rb | 14 ++ app/lib/activitypub/parser/status_parser.rb | 4 + app/lib/activitypub/tag_manager.rb | 14 +- app/lib/status_reach_finder.rb | 51 ++++- app/mailers/admin_mailer.rb | 8 + app/models/concerns/has_user_settings.rb | 4 + app/models/domain_block.rb | 17 +- app/models/form/admin_settings.rb | 2 + app/models/friend_domain.rb | 163 +++++++++++++++ app/models/instance.rb | 1 + app/models/public_feed.rb | 6 +- app/models/status.rb | 1 - app/models/user_settings.rb | 1 + app/policies/friend_server_policy.rb | 7 + .../activitypub/activity_presenter.rb | 4 +- .../activity_for_friend_serializer.rb | 22 ++ .../activitypub/note_for_friend_serializer.rb | 11 + app/services/block_domain_service.rb | 11 + app/services/fan_out_on_write_service.rb | 24 +-- app/views/admin/domain_blocks/edit.html.haml | 3 + app/views/admin/domain_blocks/new.html.haml | 3 + .../friend_servers/_friend_domain.html.haml | 41 ++++ .../friend_servers/_friend_fields.html.haml | 20 ++ app/views/admin/friend_servers/edit.html.haml | 52 +++++ .../admin/friend_servers/index.html.haml | 21 ++ app/views/admin/friend_servers/new.html.haml | 9 + .../admin/settings/discovery/show.html.haml | 5 + .../new_pending_friend_server.text.erb | 5 + .../preferences/notifications/show.html.haml | 3 +- .../activitypub/distribution_worker.rb | 12 ++ .../activitypub/raw_distribution_worker.rb | 14 ++ config/locales/en.yml | 36 ++++ config/locales/ja.yml | 36 ++++ config/locales/simple_form.en.yml | 2 + config/locales/simple_form.ja.yml | 2 + config/navigation.rb | 1 + config/routes/admin.rb | 9 + config/settings.yml | 1 + .../20231005074832_create_friend_domains.rb | 26 +++ ...0102_add_reject_friend_to_domain_blocks.rb | 15 ++ db/schema.rb | 18 ++ lib/tasks/tests.rake | 2 +- spec/fabricators/friend_domain_fabricator.rb | 10 + spec/lib/activitypub/activity/accept_spec.rb | 51 +++++ spec/lib/activitypub/activity/create_spec.rb | 54 +++++ spec/lib/activitypub/activity/delete_spec.rb | 26 +++ spec/lib/activitypub/activity/follow_spec.rb | 161 +++++++++++++++ spec/lib/activitypub/activity/reject_spec.rb | 46 +++++ spec/lib/activitypub/activity/undo_spec.rb | 26 +++ spec/lib/activitypub/tag_manager_spec.rb | 95 +++++++++ spec/lib/status_reach_finder_spec.rb | 194 ++++++++++++++++++ spec/mailers/admin_mailer_spec.rb | 20 ++ spec/mailers/previews/admin_mailer_preview.rb | 5 + spec/models/friend_domain_spec.rb | 83 ++++++++ spec/models/public_feed_spec.rb | 4 +- spec/models/status_spec.rb | 14 +- spec/services/block_domain_service_spec.rb | 19 ++ .../services/fan_out_on_write_service_spec.rb | 2 +- 66 files changed, 1638 insertions(+), 51 deletions(-) create mode 100644 app/controllers/admin/friend_servers_controller.rb create mode 100644 app/models/friend_domain.rb create mode 100644 app/policies/friend_server_policy.rb create mode 100644 app/serializers/activitypub/activity_for_friend_serializer.rb create mode 100644 app/serializers/activitypub/note_for_friend_serializer.rb create mode 100644 app/views/admin/friend_servers/_friend_domain.html.haml create mode 100644 app/views/admin/friend_servers/_friend_fields.html.haml create mode 100644 app/views/admin/friend_servers/edit.html.haml create mode 100644 app/views/admin/friend_servers/index.html.haml create mode 100644 app/views/admin/friend_servers/new.html.haml create mode 100644 app/views/admin_mailer/new_pending_friend_server.text.erb create mode 100644 db/migrate/20231005074832_create_friend_domains.rb create mode 100644 db/migrate/20231006030102_add_reject_friend_to_domain_blocks.rb create mode 100644 spec/fabricators/friend_domain_fabricator.rb create mode 100644 spec/models/friend_domain_spec.rb diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index c91b9b7163..edacbd5adc 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -89,17 +89,17 @@ module Admin def update_params params.require(:domain_block).permit(:severity, :reject_media, :reject_favourite, :reject_reply, :reject_reply_exclude_followers, :reject_send_not_public_searchability, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, :reject_send_sensitive, :reject_hashtag, - :reject_straight_follow, :reject_new_follow, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) + :reject_straight_follow, :reject_new_follow, :reject_friend, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) end def resource_params params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_favourite, :reject_reply, :reject_reply_exclude_followers, :reject_send_not_public_searchability, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, :reject_send_sensitive, :reject_hashtag, - :reject_straight_follow, :reject_new_follow, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) + :reject_straight_follow, :reject_new_follow, :reject_friend, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) end def form_domain_block_batch_params params.require(:form_domain_block_batch).permit(domain_blocks_attributes: [:enabled, :domain, :severity, :reject_media, :reject_favourite, :reject_reply, :reject_reply_exclude_followers, :reject_send_not_public_searchability, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, - :reject_send_sensitive, :reject_hashtag, :reject_straight_follow, :reject_new_follow, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous]) + :reject_send_sensitive, :reject_hashtag, :reject_straight_follow, :reject_new_follow, :reject_friend, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous]) end def action_from_button diff --git a/app/controllers/admin/friend_servers_controller.rb b/app/controllers/admin/friend_servers_controller.rb new file mode 100644 index 0000000000..aeec82429c --- /dev/null +++ b/app/controllers/admin/friend_servers_controller.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +module Admin + class FriendServersController < BaseController + before_action :set_friend, except: [:index, :new, :create] + before_action :warn_signatures_not_enabled!, only: [:new, :edit, :create, :follow, :unfollow, :accept, :reject] + + def index + authorize :friend_server, :update? + @friends = FriendDomain.all + end + + def new + authorize :friend_server, :update? + @friend = FriendDomain.new + end + + def edit + authorize :friend_server, :update? + end + + def create + authorize :friend_server, :update? + + @friend = FriendDomain.new(resource_params) + + if @friend.save + @friend.follow! + redirect_to admin_friend_servers_path + else + render action: :new + end + end + + def update + authorize :friend_server, :update? + + if @friend.update(resource_params) + redirect_to admin_friend_servers_path + else + render action: :edit + end + end + + def destroy + authorize :friend_server, :update? + @friend.destroy + redirect_to admin_friend_servers_path + end + + def follow + authorize :friend_server, :update? + @friend.follow! + render action: :edit + end + + def unfollow + authorize :friend_server, :update? + @friend.unfollow! + render action: :edit + end + + def accept + authorize :friend_server, :update? + @friend.accept! + render action: :edit + end + + def reject + authorize :friend_server, :update? + @friend.reject! + render action: :edit + end + + private + + def set_friend + @friend = FriendDomain.find(params[:id]) + end + + def resource_params + params.require(:friend_domain).permit(:domain, :inbox_url, :available, :pseudo_relay, :unlocked, :allow_all_posts) + end + + def warn_signatures_not_enabled! + flash.now[:error] = I18n.t('admin.relays.signatures_not_enabled') if authorized_fetch_mode? + end + end +end diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb index bd0660dbaa..e157ed1e1f 100644 --- a/app/controllers/api/v1/admin/domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb @@ -70,7 +70,7 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController def domain_block_params params.permit(:severity, :reject_media, :reject_favourite, :reject_reply, :reject_reply_exclude_followers, :reject_reports, :reject_send_not_public_searchability, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, :reject_send_sensitive, :reject_hashtag, :reject_straight_follow, - :reject_new_follow, :detect_invalid_subscription, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) + :reject_new_follow, :reject_friend, :detect_invalid_subscription, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) end def insert_pagination_headers @@ -103,6 +103,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController def resource_params params.permit(:domain, :severity, :reject_media, :reject_favourite, :reject_reply, :reject_reply_exclude_followers, :reject_send_not_public_searchability, :reject_send_public_unlisted, :reject_send_dissubscribable, :reject_send_media, :reject_send_sensitive, :reject_hashtag, :reject_straight_follow, - :reject_new_follow, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) + :reject_new_follow, :reject_friend, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden, :hidden_anonymous) end end diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb index 5126e23c6a..494400bffd 100644 --- a/app/lib/activitypub/activity/accept.rb +++ b/app/lib/activitypub/activity/accept.rb @@ -3,6 +3,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity def perform return accept_follow_for_relay if relay_follow? + return accept_follow_for_friend if friend_follow? return accept_follow!(follow_request_from_object) unless follow_request_from_object.nil? case @object['type'] @@ -43,6 +44,18 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity relay.present? end + def accept_follow_for_friend + friend.update!(active_state: :accepted) + end + + def friend + @friend ||= FriendDomain.find_by(domain: @account.domain, active_follow_activity_id: object_uri, active_state: [:pending, :accepted]) if @account.domain.present? + end + + def friend_follow? + friend.present? + end + def target_uri @target_uri ||= value_or_id(@object['actor']) end diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 48b855f3b9..be474a0519 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -447,7 +447,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def related_to_local_activity? fetch? || followed_by_local_accounts? || requested_through_relay? || - responds_to_followed_account? || addresses_local_accounts? || quote_local? + responds_to_followed_account? || addresses_local_accounts? || quote_local? || free_friend_domain? end def responds_to_followed_account? @@ -502,6 +502,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end end + def free_friend_domain? + FriendDomain.free_receivings.exists?(domain: @account.domain) + end + def quote @quote ||= @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote'] end diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb index 61f6ca6997..f401714430 100644 --- a/app/lib/activitypub/activity/delete.rb +++ b/app/lib/activitypub/activity/delete.rb @@ -4,6 +4,8 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity def perform if @account.uri == object_uri delete_person + elsif object_uri == ActivityPub::TagManager::COLLECTIONS[:public] + delete_friend else delete_note end @@ -42,6 +44,11 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity end end + def delete_friend + friend = FriendDomain.find_by(domain: @account.domain) + friend&.destroy + end + def forwarder @forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status) end diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index d1297bcfe8..d02e9c01c6 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -4,6 +4,8 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity include Payloadable def perform + return request_follow_for_friend if friend_follow? + target_account = account_from_uri(object_uri) return if target_account.nil? || !target_account.local? || delete_arrived_first?(@json['id']) @@ -43,6 +45,36 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity ActivityPub::DeliveryWorker.perform_async(json, target_account.id, @account.inbox_url) end + def request_follow_for_friend + already_accepted = false + + if friend.present? + already_accepted = friend.they_are_accepted? + friend.update!(passive_state: :pending, passive_follow_activity_id: @json['id']) + else + @friend = FriendDomain.create!(domain: @account.domain, passive_state: :pending, passive_follow_activity_id: @json['id']) + end + + if already_accepted || friend.unlocked || Setting.unlocked_friend + friend.accept! + else + # Notify for admin even if unlocked + notify_staff_about_pending_friend_server! + end + end + + def friend + @friend ||= FriendDomain.find_by(domain: @account.domain) if @account.domain.present? + end + + def friend_follow? + @json['object'] == ActivityPub::TagManager::COLLECTIONS[:public] && !block_friend? + end + + def block_friend? + @block_friend ||= DomainBlock.reject_friend?(@account.domain) || DomainBlock.blocked?(@account.domain) + end + def block_straight_follow? @block_straight_follow ||= DomainBlock.reject_straight_follow?(@account.domain) end @@ -73,4 +105,12 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity def instance_info @instance_info ||= InstanceInfo.find_by(domain: @account.domain) end + + def notify_staff_about_pending_friend_server! + User.those_who_can(:manage_federation).includes(:account).find_each do |u| + next unless u.allows_pending_friend_server_emails? + + AdminMailer.with(recipient: u.account).new_pending_friend_server(friend).deliver_later + end + end end diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb index 886dddb235..0493400f86 100644 --- a/app/lib/activitypub/activity/reject.rb +++ b/app/lib/activitypub/activity/reject.rb @@ -3,6 +3,7 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity def perform return reject_follow_for_relay if relay_follow? + return reject_follow_for_friend if friend_follow? return follow_request_from_object.reject! unless follow_request_from_object.nil? return UnfollowService.new.call(follow_from_object.account, @account) unless follow_from_object.nil? @@ -37,6 +38,18 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity relay.present? end + def reject_follow_for_friend + friend.update!(active_state: :rejected) + end + + def friend + @friend ||= FriendDomain.find_by(domain: @account.domain, active_follow_activity_id: object_uri, active_state: [:pending, :accepted]) if @account.domain.present? + end + + def friend_follow? + friend.present? + end + def target_uri @target_uri ||= value_or_id(@object['actor']) end diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index f070043d15..2fc6bd2562 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -87,6 +87,8 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity end def undo_follow + return remove_follow_from_friend if friend_follow? + target_account = account_from_uri(target_uri) return if target_account.nil? || !target_account.local? @@ -100,6 +102,18 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity end end + def remove_follow_from_friend + friend.update!(passive_state: :idle, passive_follow_activity_id: nil) + end + + def friend + @friend ||= FriendDomain.find_by(domain: @account.domain) if @account.domain.present? && @object['object'] == ActivityPub::TagManager::COLLECTIONS[:public] + end + + def friend_follow? + friend.present? + end + def undo_like_original status = status_from_uri(target_uri) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index e0a234e110..ae37ba2cf2 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -76,6 +76,8 @@ class ActivityPub::Parser::StatusParser def visibility if audience_to.any? { |to| ActivityPub::TagManager.instance.public_collection?(to) } :public + elsif audience_to.include?('LocalPublic') + :public_unlisted elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') @@ -198,6 +200,8 @@ class ActivityPub::Parser::StatusParser :public elsif audience_searchable_by.include?('as:Limited') :limited + elsif audience_searchable_by.include?('LocalPublic') + :public_unlisted elsif audience_searchable_by.include?(@account.followers_url) :private else diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index d4badeb461..0b608a0adb 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -126,6 +126,12 @@ class ActivityPub::TagManager end end + def to_for_friend(status) + to = to(status) + to << 'LocalPublic' if status.public_unlisted_visibility? + to + end + # Secondary audience of a status # Public statuses go out to followers as well # Unlisted statuses go to the public as well @@ -147,7 +153,7 @@ class ActivityPub::TagManager end def cc_for_misskey(status) - if (status.account.user&.setting_reject_unlisted_subscription && status.visibility == 'unlisted') || (status.account.user&.setting_reject_public_unlisted_subscription && status.visibility == 'public_unlisted') + if (status.account.user&.setting_reject_unlisted_subscription && status.unlisted_visibility?) || (status.account.user&.setting_reject_public_unlisted_subscription && status.public_unlisted_visibility?) cc = cc_private_visibility(status) cc << uri_for(status.reblog.account) if status.reblog? return cc @@ -251,6 +257,12 @@ class ActivityPub::TagManager searchable_by.concat(mentions_uris(status)).compact end + def searchable_by_for_friend(status) + searchable = searchable_by(status) + searchable << 'LocalPublic' if status.compute_searchability_local == 'public_unlisted' + searchable + end + def account_searchable_by(account) case account.compute_searchability_activitypub when 'public' diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 6ce0143953..169754e134 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -21,6 +21,10 @@ class StatusReachFinder end end + def inboxes_for_friend + (reached_account_inboxes_for_friend + followers_inboxes_for_friend + friend_inboxes).uniq + end + private def reached_account_inboxes @@ -32,7 +36,7 @@ class StatusReachFinder elsif @status.limited_visibility? Account.where(id: mentioned_account_ids).where.not(domain: banned_domains).inboxes else - Account.where(id: reached_account_ids).where.not(domain: banned_domains).inboxes + Account.where(id: reached_account_ids).where.not(domain: banned_domains + friend_domains).inboxes end end @@ -42,7 +46,17 @@ class StatusReachFinder elsif @status.limited_visibility? Account.where(id: mentioned_account_ids).where(domain: banned_domains_for_misskey).inboxes else - Account.where(id: reached_account_ids).where(domain: banned_domains_for_misskey).inboxes + Account.where(id: reached_account_ids).where(domain: banned_domains_for_misskey - friend_domains).inboxes + end + end + + def reached_account_inboxes_for_friend + if @status.reblog? + [] + elsif @status.limited_visibility? + Account.where(id: mentioned_account_ids).where.not(domain: banned_domains).inboxes + else + Account.where(id: reached_account_ids, domain: friend_domains).where.not(domain: banned_domains - friend_domains).inboxes end end @@ -95,21 +109,31 @@ class StatusReachFinder def followers_inboxes if @status.in_reply_to_local_account? && distributable? - @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where.not(domain: banned_domains).inboxes + @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where.not(domain: banned_domains + friend_domains).inboxes elsif @status.direct_visibility? || @status.limited_visibility? [] else - @status.account.followers.where.not(domain: banned_domains).inboxes + @status.account.followers.where.not(domain: banned_domains + friend_domains).inboxes end end def followers_inboxes_for_misskey if @status.in_reply_to_local_account? && distributable? - @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where(domain: banned_domains_for_misskey).inboxes + @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where(domain: banned_domains_for_misskey - friend_domains).inboxes elsif @status.direct_visibility? || @status.limited_visibility? [] else - @status.account.followers.where(domain: banned_domains_for_misskey).inboxes + @status.account.followers.where(domain: banned_domains_for_misskey - friend_domains).inboxes + end + end + + def followers_inboxes_for_friend + if @status.in_reply_to_local_account? && distributable? + @status.account.followers.or(@status.thread.account.followers.not_domain_blocked_by_account(@status.account)).where(domain: friend_domains).inboxes + elsif @status.direct_visibility? || @status.limited_visibility? + [] + else + @status.account.followers.where(domain: friend_domains).inboxes end end @@ -121,6 +145,14 @@ class StatusReachFinder end end + def friend_inboxes + if @status.public_visibility? || @status.public_unlisted_visibility? || (@status.unlisted_visibility? && (@status.public_searchability? || @status.public_unlisted_searchability?)) + DeliveryFailureTracker.without_unavailable(FriendDomain.distributables.pluck(:inbox_url)) + else + [] + end + end + def distributable? @status.public_visibility? || @status.unlisted_visibility? || @status.public_unlisted_visibility? end @@ -129,6 +161,13 @@ class StatusReachFinder @options[:unsafe] end + def friend_domains + return @friend_domains if defined?(@friend_domains) + + @friend_domains = FriendDomain.deliver_locals.pluck(:domain) + @friend_domains -= UnavailableDomain.where(domain: @friend_domains).pluck(:domain) + end + def banned_domains return @banned_domains if @banned_domains diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 990b92c337..11262144be 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -35,6 +35,14 @@ class AdminMailer < ApplicationMailer end end + def new_pending_friend_server(friend_server) + @friend = friend_server + + locale_for_account(@me) do + mail subject: default_i18n_subject(instance: @instance, domain: @friend.domain) + end + end + def new_trends(links, tags, statuses) @links = links @tags = tags diff --git a/app/models/concerns/has_user_settings.rb b/app/models/concerns/has_user_settings.rb index ed5a5f429f..820c41360d 100644 --- a/app/models/concerns/has_user_settings.rb +++ b/app/models/concerns/has_user_settings.rb @@ -263,6 +263,10 @@ module HasUserSettings settings['notification_emails.pending_account'] end + def allows_pending_friend_server_emails? + settings['notification_emails.pending_friend_server'] + end + def allows_appeal_emails? settings['notification_emails.appeal'] end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index b05fa19476..16d7ac2128 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -28,6 +28,7 @@ # hidden_anonymous :boolean default(FALSE), not null # detect_invalid_subscription :boolean default(FALSE), not null # reject_reply_exclude_followers :boolean default(FALSE), not null +# reject_friend :boolean default(FALSE), not null # class DomainBlock < ApplicationRecord @@ -44,7 +45,16 @@ class DomainBlock < ApplicationRecord scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } scope :with_user_facing_limitations, -> { where(hidden: false) } - scope :with_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)).or(where(reject_favourite: true)).or(where(reject_reply: true)).or(where(reject_reply_exclude_followers: true)).or(where(reject_new_follow: true)).or(where(reject_straight_follow: true)) } + scope :with_limitations, lambda { + where(severity: [:silence, :suspend]) + .or(where(reject_media: true)) + .or(where(reject_favourite: true)) + .or(where(reject_reply: true)) + .or(where(reject_reply_exclude_followers: true)) + .or(where(reject_new_follow: true)) + .or(where(reject_straight_follow: true)) + .or(where(reject_friend: true)) + } scope :by_severity, -> { order(Arel.sql('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), domain')) } def to_log_human_identifier @@ -68,6 +78,7 @@ class DomainBlock < ApplicationRecord reject_hashtag? ? :reject_hashtag : nil, reject_straight_follow? ? :reject_straight_follow : nil, reject_new_follow? ? :reject_new_follow : nil, + reject_friend? ? :reject_friend : nil, detect_invalid_subscription? ? :detect_invalid_subscription : nil, reject_reports? ? :reject_reports : nil].reject { |policy| policy == :noop || policy.nil? } end @@ -110,6 +121,10 @@ class DomainBlock < ApplicationRecord !!rule_for(domain)&.reject_new_follow? end + def reject_friend?(domain) + !!rule_for(domain)&.reject_friend? + end + def detect_invalid_subscription?(domain) !!rule_for(domain)&.detect_invalid_subscription? end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index a2de73bd14..681b13814a 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -48,6 +48,7 @@ class Form::AdminSettings enable_emoji_reaction check_lts_version_only enable_public_unlisted_visibility + unlocked_friend ).freeze INTEGER_KEYS = %i( @@ -76,6 +77,7 @@ class Form::AdminSettings enable_emoji_reaction check_lts_version_only enable_public_unlisted_visibility + unlocked_friend ).freeze UPLOAD_KEYS = %i( diff --git a/app/models/friend_domain.rb b/app/models/friend_domain.rb new file mode 100644 index 0000000000..a3beb9b357 --- /dev/null +++ b/app/models/friend_domain.rb @@ -0,0 +1,163 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: friend_domains +# +# id :bigint(8) not null, primary key +# domain :string default(""), not null +# inbox_url :string default(""), not null +# active_state :integer default("idle"), not null +# passive_state :integer default("idle"), not null +# active_follow_activity_id :string +# passive_follow_activity_id :string +# available :boolean default(TRUE), not null +# pseudo_relay :boolean default(FALSE), not null +# unlocked :boolean default(FALSE), not null +# allow_all_posts :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class FriendDomain < ApplicationRecord + validates :domain, presence: true, uniqueness: true, if: :will_save_change_to_domain? + validates :inbox_url, presence: true, uniqueness: true, if: :will_save_change_to_inbox_url? + + enum active_state: { idle: 0, pending: 1, accepted: 2, rejected: 3 }, _prefix: :i_am + enum passive_state: { idle: 0, pending: 1, accepted: 2, rejected: 3 }, _prefix: :they_are + + scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } + scope :enabled, -> { where(available: true) } + scope :mutuals, -> { enabled.where(active_state: :accepted, passive_state: :accepted) } + scope :distributables, -> { mutuals.where(pseudo_relay: true) } + scope :deliver_locals, -> { enabled.where(active_state: :accepted) } + scope :free_receivings, -> { mutuals.where(allow_all_posts: true) } + + before_destroy :ensure_disabled + after_commit :set_default_inbox_url + + def mutual? + i_am_accepted? && they_are_accepted? + end + + def follow! + activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) + payload = Oj.dump(follow_activity(activity_id)) + + update!(active_state: :pending, active_follow_activity_id: activity_id) + DeliveryFailureTracker.reset!(inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) + end + + def unfollow! + activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) + payload = Oj.dump(unfollow_activity(activity_id)) + + update!(active_state: :idle, active_follow_activity_id: nil) + DeliveryFailureTracker.reset!(inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) + end + + def accept! + return if they_are_idle? + + activity_id = passive_follow_activity_id + payload = Oj.dump(accept_follow_activity(activity_id)) + + update!(passive_state: :accepted) + DeliveryFailureTracker.reset!(inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) + end + + def reject! + return if they_are_idle? + + activity_id = passive_follow_activity_id + payload = Oj.dump(reject_follow_activity(activity_id)) + + update!(passive_state: :rejected, passive_follow_activity_id: nil) + DeliveryFailureTracker.reset!(inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) + end + + private + + def default_inbox_url + "https://#{domain}/inbox" + end + + def delete_for_friend! + activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) + payload = Oj.dump(delete_follow_activity(activity_id)) + + DeliveryFailureTracker.reset!(inbox_url) + ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) + end + + def follow_activity(activity_id) + { + '@context': ActivityPub::TagManager::CONTEXT, + id: activity_id, + type: 'Follow', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: ActivityPub::TagManager::COLLECTIONS[:public], + } + end + + def unfollow_activity(activity_id) + { + '@context': ActivityPub::TagManager::CONTEXT, + id: activity_id, + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: { + id: active_follow_activity_id, + type: 'Follow', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: ActivityPub::TagManager::COLLECTIONS[:public], + }, + } + end + + def accept_follow_activity(activity_id) + { + '@context': ActivityPub::TagManager::CONTEXT, + id: "#{activity_id}#accepts/friends", + type: 'Accept', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: activity_id, + } + end + + def reject_follow_activity(activity_id) + { + '@context': ActivityPub::TagManager::CONTEXT, + id: "#{activity_id}#rejects/friends", + type: 'Reject', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: activity_id, + } + end + + def delete_follow_activity(activity_id) + { + '@context': ActivityPub::TagManager::CONTEXT, + id: "#{activity_id}#delete/friends", + type: 'Delete', + actor: ActivityPub::TagManager.instance.uri_for(some_local_account), + object: ActivityPub::TagManager::COLLECTIONS[:public], + } + end + + def some_local_account + @some_local_account ||= Account.representative + end + + def ensure_disabled + delete_for_friend! unless i_am_idle? && they_are_idle? + end + + def set_default_inbox_url + self.inbox_url = default_inbox_url if inbox_url.blank? + end +end diff --git a/app/models/instance.rb b/app/models/instance.rb index 0fb1d3e96a..09e823bfbb 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -20,6 +20,7 @@ class Instance < ApplicationRecord belongs_to :domain_allow belongs_to :unavailable_domain # skipcq: RB-RL1031 belongs_to :instance_info + belongs_to :friend_domain end scope :searchable, -> { where.not(domain: DomainBlock.select(:domain)) } diff --git a/app/models/public_feed.rb b/app/models/public_feed.rb index a641e77039..0ca7621060 100644 --- a/app/models/public_feed.rb +++ b/app/models/public_feed.rb @@ -19,7 +19,7 @@ class PublicFeed # @param [Integer] min_id # @return [Array] def get(limit, max_id = nil, since_id = nil, min_id = nil) - scope = local_only? ? public_scope : global_timeline_only_scope + scope = public_scope scope.merge!(without_replies_scope) unless with_replies? scope.merge!(without_reblogs_scope) unless with_reblogs? @@ -70,10 +70,6 @@ class PublicFeed Status.with_public_visibility.joins(:account).merge(Account.without_suspended.without_silenced) end - def global_timeline_only_scope - Status.with_global_timeline_visibility.joins(:account).merge(Account.without_suspended.without_silenced) - end - def public_search_scope Status.with_public_search_visibility.joins(:account).merge(Account.without_suspended.without_silenced) end diff --git a/app/models/status.rb b/app/models/status.rb index 5a33411aba..26baac1b68 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -130,7 +130,6 @@ class Status < ApplicationRecord scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) } scope :with_public_visibility, -> { where(visibility: [:public, :public_unlisted, :login]) } scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: [:public, :public_unlisted]))) } - scope :with_global_timeline_visibility, -> { where(visibility: [:public, :login]) } scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) } scope :excluding_silenced_accounts, -> { left_outer_joins(:account).where(accounts: { silenced_at: nil }) } scope :including_silenced_accounts, -> { left_outer_joins(:account).where.not(accounts: { silenced_at: nil }) } diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 8518e2abf2..4bf64e338b 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -80,6 +80,7 @@ class UserSettings setting :follow_request, default: true setting :report, default: true setting :pending_account, default: true + setting :pending_friend_server, default: true setting :trends, default: true setting :appeal, default: true setting :software_updates, default: 'critical', in: %w(none critical patch all) diff --git a/app/policies/friend_server_policy.rb b/app/policies/friend_server_policy.rb new file mode 100644 index 0000000000..c84b2b825a --- /dev/null +++ b/app/policies/friend_server_policy.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class FriendServerPolicy < ApplicationPolicy + def update? + role.can?(:manage_federation) + end +end diff --git a/app/presenters/activitypub/activity_presenter.rb b/app/presenters/activitypub/activity_presenter.rb index 5066a57f8c..46105df073 100644 --- a/app/presenters/activitypub/activity_presenter.rb +++ b/app/presenters/activitypub/activity_presenter.rb @@ -4,13 +4,13 @@ class ActivityPub::ActivityPresenter < ActiveModelSerializers::Model attributes :id, :type, :actor, :published, :to, :cc, :virtual_object class << self - def from_status(status, use_bearcap: true, allow_inlining: true, for_misskey: false) + def from_status(status, use_bearcap: true, allow_inlining: true, for_misskey: false, for_friend: false) new.tap do |presenter| presenter.id = ActivityPub::TagManager.instance.activity_uri_for(status) presenter.type = status.reblog? ? 'Announce' : 'Create' presenter.actor = ActivityPub::TagManager.instance.uri_for(status.account) presenter.published = status.created_at - presenter.to = ActivityPub::TagManager.instance.to(status) + presenter.to = for_friend ? ActivityPub::TagManager.instance.to_for_friend(status) : ActivityPub::TagManager.instance.to(status) presenter.cc = for_misskey ? ActivityPub::TagManager.instance.cc_for_misskey(status) : ActivityPub::TagManager.instance.cc(status) presenter.virtual_object = begin diff --git a/app/serializers/activitypub/activity_for_friend_serializer.rb b/app/serializers/activitypub/activity_for_friend_serializer.rb new file mode 100644 index 0000000000..b968e00fa6 --- /dev/null +++ b/app/serializers/activitypub/activity_for_friend_serializer.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class ActivityPub::ActivityForFriendSerializer < ActivityPub::Serializer + def self.serializer_for(model, options) + case model.class.name + when 'Status' + ActivityPub::NoteForFriendSerializer + when 'DeliverToDeviceService::EncryptedMessage' + ActivityPub::EncryptedMessageSerializer + else + super + end + end + + attributes :id, :type, :actor, :published, :to, :cc + + has_one :virtual_object, key: :object + + def published + object.published.iso8601 + end +end diff --git a/app/serializers/activitypub/note_for_friend_serializer.rb b/app/serializers/activitypub/note_for_friend_serializer.rb new file mode 100644 index 0000000000..fdceaf421c --- /dev/null +++ b/app/serializers/activitypub/note_for_friend_serializer.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class ActivityPub::NoteForFriendSerializer < ActivityPub::NoteSerializer + def to + ActivityPub::TagManager.instance.to_for_friend(object) + end + + def searchable_by + ActivityPub::TagManager.instance.searchable_by_for_friend(object) + end +end diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 76cc36ff6b..511068bdf9 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -24,6 +24,9 @@ class BlockDomainService < BaseService silence_accounts! elsif domain_block.suspend? suspend_accounts! + remove_friends! + elsif domain_block.reject_friend? + remove_friends! end DomainClearMediaWorker.perform_async(domain_block.id) if domain_block.reject_media? @@ -41,6 +44,10 @@ class BlockDomainService < BaseService end end + def remove_friends! + blocked_friends.find_each(&:destroy) + end + def blocked_domain domain_block.domain end @@ -48,4 +55,8 @@ class BlockDomainService < BaseService def blocked_domain_accounts Account.by_domain_and_subdomains(blocked_domain) end + + def blocked_friends + @blocked_friends ||= FriendDomain.by_domain_and_subdomains(blocked_domain) + end end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index b56474ddf6..89e1b6c9c5 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -21,9 +21,6 @@ class FanOutOnWriteService < BaseService if broadcastable? fan_out_to_public_recipients! fan_out_to_public_streams! - elsif broadcastable_unlisted? - fan_out_to_public_recipients! - fan_out_to_public_unlisted_streams! elsif broadcastable_unlisted2? fan_out_to_unlisted_streams! end @@ -75,11 +72,6 @@ class FanOutOnWriteService < BaseService broadcast_to_public_streams! end - def fan_out_to_public_unlisted_streams! - broadcast_to_hashtag_streams! - broadcast_to_public_unlisted_streams! - end - def fan_out_to_unlisted_streams! broadcast_to_hashtag_streams! end @@ -176,16 +168,6 @@ class FanOutOnWriteService < BaseService end end - def broadcast_to_public_unlisted_streams! - return if @status.reply? && @status.in_reply_to_account_id != @account.id - - redis.publish(@status.local? ? 'timeline:public:local' : 'timeline:public:remote', anonymous_payload) - - if @status.with_media? - redis.publish(@status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', anonymous_payload) - end - end - def deliver_to_conversation! AccountConversation.add_status(@account, @status) unless update? end @@ -210,11 +192,7 @@ class FanOutOnWriteService < BaseService end def broadcastable? - (@status.public_visibility? || @status.login_visibility?) && !@status.reblog? && !@account.silenced? - end - - def broadcastable_unlisted? - @status.public_unlisted_visibility? && !@status.reblog? && !@account.silenced? + (@status.public_visibility? || @status.public_unlisted_visibility? || @status.login_visibility?) && !@status.reblog? && !@account.silenced? end def broadcastable_unlisted2? diff --git a/app/views/admin/domain_blocks/edit.html.haml b/app/views/admin/domain_blocks/edit.html.haml index 8a06441508..cf83d383e9 100644 --- a/app/views/admin/domain_blocks/edit.html.haml +++ b/app/views/admin/domain_blocks/edit.html.haml @@ -47,6 +47,9 @@ .fields-group = f.input :reject_new_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_new_follow'), hint: I18n.t('admin.domain_blocks.reject_new_follow_hint') + .fields-group + = f.input :reject_friend, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_friend'), hint: I18n.t('admin.domain_blocks.reject_friend_hint') + .fields-group = f.input :detect_invalid_subscription, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.detect_invalid_subscription'), hint: I18n.t('admin.domain_blocks.detect_invalid_subscription_hint') diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml index 606a784e12..ed5142934f 100644 --- a/app/views/admin/domain_blocks/new.html.haml +++ b/app/views/admin/domain_blocks/new.html.haml @@ -47,6 +47,9 @@ .fields-group = f.input :reject_new_follow, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_new_follow'), hint: I18n.t('admin.domain_blocks.reject_new_follow_hint') + .fields-group + = f.input :reject_friend, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_friend'), hint: I18n.t('admin.domain_blocks.reject_friend_hint') + .fields-group = f.input :detect_invalid_subscription, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.detect_invalid_subscription'), hint: I18n.t('admin.domain_blocks.detect_invalid_subscription_hint') diff --git a/app/views/admin/friend_servers/_friend_domain.html.haml b/app/views/admin/friend_servers/_friend_domain.html.haml new file mode 100644 index 0000000000..a24ae0516a --- /dev/null +++ b/app/views/admin/friend_servers/_friend_domain.html.haml @@ -0,0 +1,41 @@ +%tr + %td + - unless friend.available + %span.negative-hint + = fa_icon('times') + = ' ' + = t 'admin.friend_servers.disabled' + %samp= friend.domain + %td + - if friend.i_am_accepted? + %span.positive-hint + = fa_icon('check') + = ' ' + = t 'admin.friend_servers.enabled' + - elsif friend.i_am_pending? + = fa_icon('hourglass') + = ' ' + = t 'admin.friend_servers.pending' + - else + %span.negative-hint + = fa_icon('times') + = ' ' + = t 'admin.friend_servers.disabled' + %td + - if friend.they_are_accepted? + %span.positive-hint + = fa_icon('check') + = ' ' + = t 'admin.friend_servers.enabled' + - elsif friend.they_are_pending? + = fa_icon('hourglass') + = ' ' + = t 'admin.friend_servers.pending' + - else + %span.negative-hint + = fa_icon('times') + = ' ' + = t 'admin.friend_servers.disabled' + %td + = table_link_to 'pencil', t('admin.friend_servers.edit_friend'), edit_admin_friend_server_path(friend) + = table_link_to 'times', t('admin.friend_servers.delete'), admin_friend_server_path(friend), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } diff --git a/app/views/admin/friend_servers/_friend_fields.html.haml b/app/views/admin/friend_servers/_friend_fields.html.haml new file mode 100644 index 0000000000..b3e56f75c2 --- /dev/null +++ b/app/views/admin/friend_servers/_friend_fields.html.haml @@ -0,0 +1,20 @@ +%p= t 'admin.friend_servers.edit.description' +%hr.spacer/ + +.fields-group + = f.input :domain, as: :string, wrapper: :with_label, required: true, disabled: !friend.id.nil?, label: t('admin.friend_servers.edit.domain') + +.fields-group + = f.input :inbox_url, as: :string, wrapper: :with_label, label: t('admin.friend_servers.edit.inbox_url'), hint: t('admin.friend_servers.edit.inbox_url_hint') + +.fields-group + = f.input :available, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.available') + +.fields-group + = f.input :pseudo_relay, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.pseudo_relay') + +.fields-group + = f.input :unlocked, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.unlocked') + +.fields-group + = f.input :allow_all_posts, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.allow_all_posts') diff --git a/app/views/admin/friend_servers/edit.html.haml b/app/views/admin/friend_servers/edit.html.haml new file mode 100644 index 0000000000..ae057c2963 --- /dev/null +++ b/app/views/admin/friend_servers/edit.html.haml @@ -0,0 +1,52 @@ +- content_for :page_title do + = t('admin.friend_servers.edit_friend') + += simple_form_for @friend, url: admin_friend_server_path(@friend), method: :put do |f| + = render 'shared/error_messages', object: @friend + = render 'friend_fields', f: f, friend: @friend + + .fields-group + %h4= t('admin.friend_servers.active_status') + .fields-group + - if @friend.i_am_accepted? + %span.positive-hint + = fa_icon('check') + = ' ' + = t 'admin.friend_servers.enabled' + - elsif @friend.i_am_pending? + = fa_icon('hourglass') + = ' ' + = t 'admin.friend_servers.pending' + - else + %span.negative-hint + = fa_icon('times') + = ' ' + = t 'admin.friend_servers.disabled' + .action-buttons + %div + = link_to t('admin.friend_servers.follow'), follow_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.i_am_idle? || @friend.i_am_rejected? + = link_to t('admin.friend_servers.unfollow'), unfollow_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.i_am_pending? || @friend.i_am_accepted? + + %h4= t('admin.friend_servers.passive_status') + .fields-gtoup + - if @friend.they_are_accepted? + %span.positive-hint + = fa_icon('check') + = ' ' + = t 'admin.friend_servers.enabled' + - elsif @friend.they_are_pending? + = fa_icon('hourglass') + = ' ' + = t 'admin.friend_servers.pending' + - else + %span.negative-hint + = fa_icon('times') + = ' ' + = t 'admin.friend_servers.disabled' + .action-buttons + %div + = link_to t('admin.friend_servers.accept'), accept_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.they_are_pending? + = link_to t('admin.friend_servers.reject'), reject_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.they_are_pending? + + .actions + = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/friend_servers/index.html.haml b/app/views/admin/friend_servers/index.html.haml new file mode 100644 index 0000000000..6dd16e397e --- /dev/null +++ b/app/views/admin/friend_servers/index.html.haml @@ -0,0 +1,21 @@ +- content_for :page_title do + = t('admin.friend_servers.title') + +.simple_form + %p.hint= t('admin.friend_servers.description_html') + = link_to @friends.empty? ? t('admin.friend_servers.setup') : t('admin.friend_servers.add_new'), new_admin_friend_server_path, class: 'block-button' + +- unless @friends.empty? + %hr.spacer + + .table-wrapper + %table.table + %thead + %tr + %th= t('admin.friend_servers.domain') + %th= t('admin.friend_servers.active_status') + %th= t('admin.friend_servers.passive_status') + %th + %tbody + - @friends.each do |friend| + = render 'friend_domain', friend: friend diff --git a/app/views/admin/friend_servers/new.html.haml b/app/views/admin/friend_servers/new.html.haml new file mode 100644 index 0000000000..1cb5b06b6f --- /dev/null +++ b/app/views/admin/friend_servers/new.html.haml @@ -0,0 +1,9 @@ +- content_for :page_title do + = t('admin.friend_servers.add_new') + += simple_form_for @friend, url: admin_friend_servers_path do |f| + = render 'shared/error_messages', object: @friend + = render 'friend_fields', f: f, friend: @friend + + .actions + = f.button :button, t('admin.friend_servers.save_and_enable'), type: :submit diff --git a/app/views/admin/settings/discovery/show.html.haml b/app/views/admin/settings/discovery/show.html.haml index ee7d72ad32..bedafdb499 100644 --- a/app/views/admin/settings/discovery/show.html.haml +++ b/app/views/admin/settings/discovery/show.html.haml @@ -45,6 +45,11 @@ .fields-group = f.input :enable_public_unlisted_visibility, as: :boolean, wrapper: :with_label, kmyblue: true, hint: false + %h4= t('admin.settings.discovery.friend_servers') + + .fields-group + = f.input :unlocked_friend, as: :boolean, wrapper: :with_label, kmyblue: true, hint: false + %h4= t('admin.settings.discovery.publish_statistics') .fields-group diff --git a/app/views/admin_mailer/new_pending_friend_server.text.erb b/app/views/admin_mailer/new_pending_friend_server.text.erb new file mode 100644 index 0000000000..89c9ec1b09 --- /dev/null +++ b/app/views/admin_mailer/new_pending_friend_server.text.erb @@ -0,0 +1,5 @@ +<%= raw t('application_mailer.salutation', name: display_name(@me)) %> + +<%= raw t('admin_mailer.new_pending_friend_server.body', domain: @friend.domain) %> + +<%= raw t('application_mailer.view')%> <%= admin_friend_servers_url %> diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index 06af9c1360..0f29221ede 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -22,13 +22,14 @@ .fields-group = ff.input :always_send_emails, wrapper: :with_label, label: I18n.t('simple_form.labels.defaults.setting_always_send_emails'), hint: I18n.t('simple_form.hints.defaults.setting_always_send_emails') - - if current_user.can?(:manage_reports, :manage_appeals, :manage_users, :manage_taxonomies) || (SoftwareUpdate.check_enabled? && current_user.can?(:view_devops)) + - if current_user.can?(:manage_reports, :manage_appeals, :manage_users, :manage_taxonomies, :manage_federation) || (SoftwareUpdate.check_enabled? && current_user.can?(:view_devops)) %h4= t 'notifications.administration_emails' .fields-group = ff.input :'notification_emails.report', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.report') if current_user.can?(:manage_reports) = ff.input :'notification_emails.appeal', as: :boolean, wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.appeal') if current_user.can?(:manage_appeals) = ff.input :'notification_emails.pending_account', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.pending_account') if current_user.can?(:manage_users) + = ff.input :'notification_emails.pending_friend_server', as: :boolean, wrapper: :with_label, kmyblue: true, label: I18n.t('simple_form.labels.notification_emails.pending_friend_server') if current_user.can?(:manage_federation) = ff.input :'notification_emails.trends', wrapper: :with_label, label: I18n.t('simple_form.labels.notification_emails.trending_tag') if current_user.can?(:manage_taxonomies) - if SoftwareUpdate.check_enabled? && current_user.can?(:view_devops) diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb index 34b6f6e32f..12cb66aeb4 100644 --- a/app/workers/activitypub/distribution_worker.rb +++ b/app/workers/activitypub/distribution_worker.rb @@ -22,6 +22,10 @@ class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker @inboxes_for_misskey ||= status_reach_finder.inboxes_for_misskey end + def inboxes_for_friend + @inboxes_for_friend ||= status_reach_finder.inboxes_for_friend + end + def status_reach_finder @status_reach_finder ||= StatusReachFinder.new(@status) end @@ -34,6 +38,10 @@ class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker @payload_for_misskey ||= Oj.dump(serialize_payload(activity_for_misskey, ActivityPub::ActivityForMisskeySerializer, signer: @account)) end + def payload_for_friend + @payload_for_friend ||= Oj.dump(serialize_payload(activity_for_friend, ActivityPub::ActivityForFriendSerializer, signer: @account)) + end + def activity ActivityPub::ActivityPresenter.from_status(@status) end @@ -42,6 +50,10 @@ class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker ActivityPub::ActivityPresenter.from_status(@status, for_misskey: true) end + def activity_for_friend + ActivityPub::ActivityPresenter.from_status(@status, for_friend: true) + end + def options { 'synchronize_followers' => @status.private_visibility? } end diff --git a/app/workers/activitypub/raw_distribution_worker.rb b/app/workers/activitypub/raw_distribution_worker.rb index 611b5210d8..a1fc778559 100644 --- a/app/workers/activitypub/raw_distribution_worker.rb +++ b/app/workers/activitypub/raw_distribution_worker.rb @@ -29,6 +29,12 @@ class ActivityPub::RawDistributionWorker end end + unless inboxes_for_friend.empty? + ActivityPub::DeliveryWorker.push_bulk(inboxes_for_friend, limit: 1_000) do |inbox_url| + [payload_for_friend, source_account_id, inbox_url, options] + end + end + return if inboxes.empty? ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url| @@ -44,6 +50,10 @@ class ActivityPub::RawDistributionWorker payload end + def payload_for_friend + payload + end + def source_account_id @account.id end @@ -56,6 +66,10 @@ class ActivityPub::RawDistributionWorker [] end + def inboxes_for_friend + [] + end + def options {} end diff --git a/config/locales/en.yml b/config/locales/en.yml index 8633f4dfc0..c86c0a89b8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -426,6 +426,8 @@ en: public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled. reject_favourite: Reject favorites reject_favourite_hint: Reject favorites or emoji-reaction in the future + reject_friend: Reject friend server applications + reject_friend_hint: Reject friend server application in the future reject_hashtag: Reject hashtags reject_hashtag_hint: Reject hashtags in the future reject_media: Reject media files @@ -497,6 +499,35 @@ en: suppressed: Suppressed title: Follow recommendations unsuppress: Restore follow recommendation + friend_servers: + accept: Accept + active_status: My status + add_new: Add and make a new application + delete: Delete + description_html: フレンドサーバーとは、お互いのローカル公開・ローカル検索許可の投稿をそのまま交換するシステムです。 + disabled: Disabled + domain: Domain + edit: + allow_all_posts: Receive all posts + available: Available + description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 + domain: Domain + inbox_url: Friend server inbox URL + inbox_url_hint: Default value is https://domain/inbox if you input empty (For example, https://example.com/inbox) + pseudo_relay: Send all public or searchable posts + unlocked: Approve automatically receiving new request + edit_friend: Edit + enabled: Enabled + follow: Request + passive_status: Partner status + pending: Pending + reject: Reject + save_and_enable: Save and enable + setup: Add and make a new application + signatures_not_enabled: セキュアモードまたは連合制限モードが有効の場合、フレンドサーバーの動作を確認していないため正常に動作しない可能性があります + status: Status + title: Friend server + unfollow: Cancel request instances: availability: description_html: @@ -520,6 +551,7 @@ en: limited_federation_mode_description_html: You can chose whether to allow federation with this domain. policies: reject_favourite: Reject favorite + reject_friend: Reject friend server application reject_hashtag: Reject hashtags reject_media: Reject media reject_new_follow: Reject follows @@ -810,6 +842,7 @@ en: discovery: emoji_reactions: Stamp follow_recommendations: Follow recommendations + friend_servers: Friend servers preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone Mastodon. Control how various discovery features work on your server. profile_directory: Profile directory public_timelines: Public timelines @@ -1050,6 +1083,9 @@ en: new_pending_account: body: The details of the new account are below. You can approve or reject this application. subject: New account up for review on %{instance} (%{username}) + new_pending_friend_server: + body: The new friend server %{domain} is waiting for your review. You can approve or reject this application. + subject: New friend server up for review on %{instance} (%{domain}) new_report: body: "%{reporter} has reported %{target}" body_remote: Someone from %{domain} has reported %{target} diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 87de99e515..f1a32ede38 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -422,6 +422,8 @@ ja: public_comment_hint: ドメインブロックの公開を有効にしている場合、このコメントも公開されます。 reject_favourite: お気に入り、スタンプを拒否 reject_favourite_hint: 今後のお気に入り、スタンプを拒否します。停止とは無関係です + reject_friend: フレンドサーバー申請を拒否 + reject_friend_hint: 今後のフレンドサーバー申請を全て拒否します。停止とは無関係です reject_hashtag: ハッシュタグを拒否 reject_hashtag_hint: ハッシュタグで検索できなくなり、トレンドにも影響しなくなります。停止とは無関係です reject_media: メディアファイルを拒否 @@ -492,6 +494,35 @@ ja: suppressed: 非表示 title: おすすめフォロー unsuppress: おすすめフォローを復元 + friend_servers: + accept: 相手の申請を承認する + active_status: 自分の状態 + add_new: フレンドサーバーを追加・申請 + delete: 削除 + description_html: フレンドサーバーとは、お互いのローカル公開・ローカル検索許可の投稿をそのまま交換するシステムです。 + disabled: 無効 + domain: ドメイン + edit: + allow_all_posts: このサーバーからの全ての投稿を受け入れる + available: 有効にする + description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 + domain: ドメイン + inbox_url: フレンドサーバーの inbox URL + inbox_url_hint: 空欄にした場合、自動で「https://ドメイン名/inbox」に設定されます。(例:https://example.com/inbox)相手のサーバーがinbox URLを特別に指定している場合、入力してください。 + pseudo_relay: 全ての公開・ローカル公開・非収載かつ検索可能な投稿を送信する + unlocked: このサーバーからの申請を自動で承認する + edit_friend: 編集 + enabled: 有効 + follow: こちらから申請する + passive_status: 相手の状態 + pending: 承認待ち + reject: 相手からの申請を却下する + save_and_enable: 保存して有効にする + setup: フレンドサーバーを追加・申請 + signatures_not_enabled: セキュアモードまたは連合制限モードが有効の場合、フレンドサーバーの動作を確認していないため正常に動作しない可能性があります + status: ステータス + title: フレンドサーバー + unfollow: こちらの申請を取り消す instances: availability: description_html: @@ -514,6 +545,7 @@ ja: policies: detect_invalid_subscription: 購読のプライバシーなし reject_favourite: お気に入りを拒否 + reject_friend: フレンドサーバー申請を拒否 reject_hashtag: ハッシュタグを拒否 reject_media: メディアを拒否する reject_new_follow: 新規フォローを拒否 @@ -807,6 +839,7 @@ ja: discovery: emoji_reactions: スタンプ follow_recommendations: おすすめフォロー + friend_servers: フレンドサーバー preamble: Mastodon を知らないユーザーを取り込むには、興味深いコンテンツを浮上させることが重要です。サーバー上で様々なディスカバリー機能がどのように機能するかを制御します。 profile_directory: ディレクトリ public_timelines: 公開タイムライン @@ -1043,6 +1076,9 @@ ja: new_pending_account: body: 新しいアカウントの詳細は以下の通りです。この申請を承認または却下することができます。 subject: '%{instance}で新しいアカウント (%{username}) が承認待ちです' + new_pending_friend_server: + body: 新しいフレンドサーバー %{domain} の申請が届いています。この申請を承認または却下することができます。 + subject: '%{instance}で新しいフレンドサーバー (%{domain}) が承認待ちです' new_report: body: "%{reporter}さんが%{target}さんを通報しました" body_remote: "%{domain}の誰かが%{target}さんを通報しました" diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index c37a6de56a..2b777aaa2b 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -354,6 +354,7 @@ en: trendable_by_default: Allow trends without prior review trends: Enable trends trends_as_landing_page: Use trends as the landing page + unlocked_friend: Accept all friend server follows automatically interactions: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow @@ -378,6 +379,7 @@ en: follow_request: Someone requested to follow you mention: Someone mentioned you pending_account: New account needs review + pending_friend_server: New friend server needs review reblog: Someone boosted your post report: New report is submitted software_updates: diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 3904f75751..41057cbed1 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -369,6 +369,7 @@ ja: trendable_by_default: 審査前のトレンドの掲載を許可する trends: トレンドを有効にする trends_as_landing_page: 新規登録画面にトレンドを表示する + unlocked_friend: 全てのフレンドサーバー申請を自動承認する interactions: must_be_follower: フォロワー以外からの通知をブロック must_be_following: フォローしていないユーザーからの通知をブロック @@ -393,6 +394,7 @@ ja: follow_request: フォローリクエストを受けた時 mention: 返信が来た時 pending_account: 新しいアカウントの承認が必要な時 + pending_friend_server: 新しいフレンドサーバーの承認が必要な時 reblog: 投稿がブーストされた時 report: 新しい通報が送信された時 software_updates: diff --git a/config/navigation.rb b/config/navigation.rb index e9552f4f7a..25bc5ecd43 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -66,6 +66,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_path, highlights_on: %r{/admin/custom_emojis}, if: -> { current_user.can?(:manage_custom_emojis) } s.item :webhooks, safe_join([fa_icon('inbox fw'), t('admin.webhooks.title')]), admin_webhooks_path, highlights_on: %r{/admin/webhooks}, if: -> { current_user.can?(:manage_webhooks) } s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_path, highlights_on: %r{/admin/relays}, if: -> { !limited_federation_mode? && current_user.can?(:manage_federation) } + s.item :friend_servers, safe_join([fa_icon('users fw'), t('admin.friend_servers.title')]), admin_friend_servers_path, highlights_on: %r{/admin/friend_servers}, if: -> { current_user.can?(:manage_federation) } end n.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_path, link_html: { target: 'sidekiq' }, if: -> { current_user.can?(:view_devops) } diff --git a/config/routes/admin.rb b/config/routes/admin.rb index c3ae2efa93..8c10f5935b 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -69,6 +69,15 @@ namespace :admin do end end + resources :friend_servers, only: [:index, :new, :edit, :create, :update, :destroy] do + member do + post :follow + post :unfollow + post :accept + post :reject + end + end + resources :instances, only: [:index, :show, :destroy], constraints: { id: %r{[^/]+} }, format: 'html' do member do post :clear_delivery_errors diff --git a/config/settings.yml b/config/settings.yml index c0b5f4109b..1fb106e680 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -43,6 +43,7 @@ defaults: &defaults enable_emoji_reaction: true check_lts_version_only: true enable_public_unlisted_visibility: true + unlocked_friend: false development: <<: *defaults diff --git a/db/migrate/20231005074832_create_friend_domains.rb b/db/migrate/20231005074832_create_friend_domains.rb new file mode 100644 index 0000000000..95eaf8a74c --- /dev/null +++ b/db/migrate/20231005074832_create_friend_domains.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class CreateFriendDomains < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + create_table :friend_domains do |t| + t.string :domain, null: false, default: '', index: { unique: true } + t.string :inbox_url, null: false, default: '', index: { unique: true } + t.integer :active_state, null: false, default: 0 + t.integer :passive_state, null: false, default: 0 + t.string :active_follow_activity_id, null: true + t.string :passive_follow_activity_id, null: true + t.boolean :available, null: false, default: true + t.boolean :pseudo_relay, null: false, default: false + t.boolean :unlocked, null: false, default: false + t.boolean :allow_all_posts, null: false, default: true + t.datetime :created_at, null: false + t.datetime :updated_at, null: false + end + end +end diff --git a/db/migrate/20231006030102_add_reject_friend_to_domain_blocks.rb b/db/migrate/20231006030102_add_reject_friend_to_domain_blocks.rb new file mode 100644 index 0000000000..01204db5f1 --- /dev/null +++ b/db/migrate/20231006030102_add_reject_friend_to_domain_blocks.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddRejectFriendToDomainBlocks < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def change + safety_assured do + add_column_with_default :domain_blocks, :reject_friend, :boolean, default: false, allow_null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 32cf51a16c..4a1401efbc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -584,6 +584,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do t.boolean "hidden_anonymous", default: false, null: false t.boolean "detect_invalid_subscription", default: false, null: false t.boolean "reject_reply_exclude_followers", default: false, null: false + t.boolean "reject_friend", default: false, null: false t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end @@ -676,6 +677,23 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do t.index ["target_account_id"], name: "index_follows_on_target_account_id" end + create_table "friend_domains", force: :cascade do |t| + t.string "domain", default: "", null: false + t.string "inbox_url", default: "", null: false + t.integer "active_state", default: 0, null: false + t.integer "passive_state", default: 0, null: false + t.string "active_follow_activity_id" + t.string "passive_follow_activity_id" + t.boolean "available", default: true, null: false + t.boolean "pseudo_relay", default: false, null: false + t.boolean "unlocked", default: false, null: false + t.boolean "allow_all_posts", default: true, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["domain"], name: "index_friend_domains_on_domain", unique: true + t.index ["inbox_url"], name: "index_friend_domains_on_inbox_url", unique: true + end + create_table "identities", force: :cascade do |t| t.string "provider", default: "", null: false t.string "uid", default: "", null: false diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake index 7f8e72dd8f..980823731e 100644 --- a/lib/tasks/tests.rake +++ b/lib/tasks/tests.rake @@ -136,7 +136,7 @@ namespace :tests do INSERT INTO "settings" (id, thing_type, thing_id, var, value, created_at, updated_at) VALUES - (3, 'User', 1, 'notification_emails', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nfollow: false\nreblog: true\nfavourite: true\nmention: false\nfollow_request: true\ndigest: true\nreport: true\npending_account: false\ntrending_tag: true\nappeal: true\n', now(), now()), + (3, 'User', 1, 'notification_emails', E'--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nfollow: false\nreblog: true\nfavourite: true\nmention: false\nfollow_request: true\ndigest: true\nreport: true\npending_account: false\npending_friend_server: true\ntrending_tag: true\nappeal: true\n', now(), now()), (4, 'User', 1, 'trends', E'--- false\n', now(), now()); INSERT INTO "accounts" diff --git a/spec/fabricators/friend_domain_fabricator.rb b/spec/fabricators/friend_domain_fabricator.rb new file mode 100644 index 0000000000..840f79ea3e --- /dev/null +++ b/spec/fabricators/friend_domain_fabricator.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +Fabricator(:friend_domain) do + domain 'example.com' + inbox_url 'https://example.com/inbox' + active_state :idle + passive_state :idle + available true + before_create { |friend_domain, _| friend_domain.inbox_url = "https://#{friend_domain.domain}/inbox" if friend_domain.inbox_url.blank? } +end diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb index d6b6071279..6027557092 100644 --- a/spec/lib/activitypub/activity/accept_spec.rb +++ b/spec/lib/activitypub/activity/accept_spec.rb @@ -43,6 +43,35 @@ RSpec.describe ActivityPub::Activity::Accept do end end + context 'when sender is from friend server' do + subject { described_class.new(json, sender) } + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', active_state: :pending, active_follow_activity_id: 'https://abc-123/456') } + + before do + allow(RemoteAccountRefreshWorker).to receive(:perform_async) + Fabricate(:follow_request, account: recipient, target_account: sender) + subject.perform + end + + it 'creates a follow relationship' do + expect(recipient.following?(sender)).to be true + end + + it 'removes the follow request' do + expect(recipient.requested?(sender)).to be false + end + + it 'queues a refresh' do + expect(RemoteAccountRefreshWorker).to have_received(:perform_async).with(sender.id) + end + + it 'friend server is not changed' do + expect(friend.reload.i_am_pending?).to be true + end + end + context 'when given a relay' do subject { described_class.new(json, sender) } @@ -68,4 +97,26 @@ RSpec.describe ActivityPub::Activity::Accept do expect(relay.reload.accepted?).to be true end end + + context 'when given a friend server' do + subject { described_class.new(json, sender) } + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', active_state: :pending, active_follow_activity_id: 'https://abc-123/456') } + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Accept', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: 'https://abc-123/456', + }.with_indifferent_access + end + + it 'marks the friend as accepted' do + subject.perform + expect(friend.reload.i_am_accepted?).to be true + end + end end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 24a404d726..58aca07573 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -234,6 +234,25 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'when public_unlisted with LocalPublic' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + to: ['http://example.com/followers', 'LocalPublic'], + cc: 'https://www.w3.org/ns/activitystreams#Public', + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.visibility).to eq 'public_unlisted' + end + end + context 'when private' do let(:object_json) do { @@ -411,6 +430,17 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'with public_unlisted with LocalPublic' do + let(:searchable_by) { ['http://example.com/followers', 'LocalPublic'] } + + it 'create status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.searchability).to eq 'public_unlisted' + end + end + context 'with private' do let(:searchable_by) { 'http://example.com/followers' } @@ -1462,6 +1492,30 @@ RSpec.describe ActivityPub::Activity::Create do end end + context 'when sender is in friend server' do + subject { described_class.new(json, sender, delivery: true) } + + before do + Fabricate(:friend_domain, domain: sender.domain, active_state: :accepted, passive_state: :accepted) + subject.perform + end + + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.text).to eq 'Lorem ipsum' + end + end + context 'when the sender has no relevance to local activity' do subject { described_class.new(json, sender, delivery: true) } diff --git a/spec/lib/activitypub/activity/delete_spec.rb b/spec/lib/activitypub/activity/delete_spec.rb index 3a73b3726c..f0c957c8a1 100644 --- a/spec/lib/activitypub/activity/delete_spec.rb +++ b/spec/lib/activitypub/activity/delete_spec.rb @@ -73,4 +73,30 @@ RSpec.describe ActivityPub::Activity::Delete do end end end + + context 'when given a friend server' do + subject { described_class.new(json, sender) } + + before do + Fabricate(:friend_domain, domain: 'abc.com', inbox_url: 'https://abc.com/inbox', passive_state: :accepted) + stub_request(:post, 'https://abc.com/inbox') + end + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Delete', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: 'https://www.w3.org/ns/activitystreams#Public', + }.with_indifferent_access + end + + it 'marks the friend as deleted' do + subject.perform + expect(FriendDomain.find_by(domain: 'abc.com')).to be_nil + end + end end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 57f2b07718..a69fa9b563 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -37,6 +37,23 @@ RSpec.describe ActivityPub::Activity::Follow do end end + context 'with an unlocked account from friend server' do + let!(:friend) { Fabricate(:friend_domain, domain: sender.domain, passive_state: :idle) } + + before do + subject.perform + end + + it 'creates a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + expect(sender.active_relationships.find_by(target_account: recipient).uri).to eq 'foo' + end + + it 'does not change friend server passive status' do + expect(friend.they_are_idle?).to be true + end + end + context 'when silenced account following an unlocked account' do before do sender.touch(:silenced_at) @@ -285,4 +302,148 @@ RSpec.describe ActivityPub::Activity::Follow do end end end + + context 'when given a friend server' do + subject { described_class.new(json, sender) } + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', passive_state: :idle) } + let!(:owner_user) { Fabricate(:user, role: UserRole.find_by(name: 'Owner')) } + let!(:patch_user) { Fabricate(:user, role: Fabricate(:user_role, name: 'OhagiOps', permissions: UserRole::FLAGS[:manage_federation])) } + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Follow', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: 'https://www.w3.org/ns/activitystreams#Public', + }.with_indifferent_access + end + + it 'marks the friend as pending' do + subject.perform + expect(friend.reload.they_are_pending?).to be true + expect(friend.passive_follow_activity_id).to eq 'foo' + end + + context 'when no record' do + before do + friend.update(domain: 'def.com') + end + + it 'marks the friend as pending' do + subject.perform + + friend = FriendDomain.find_by(domain: 'abc.com') + expect(friend).to_not be_nil + expect(friend.they_are_pending?).to be true + expect(friend.passive_follow_activity_id).to eq 'foo' + end + end + + context 'with sending email' do + around do |example| + queue_adapter = ActiveJob::Base.queue_adapter + ActiveJob::Base.queue_adapter = :test + + example.run + + ActiveJob::Base.queue_adapter = queue_adapter + end + + it 'perform' do + expect { subject.perform }.to have_enqueued_mail(AdminMailer, :new_pending_friend_server) + .with(hash_including(params: { recipient: owner_user.account })).once + .and(have_enqueued_mail(AdminMailer, :new_pending_friend_server).with(hash_including(params: { recipient: patch_user.account })).once) + .and(have_enqueued_mail.at_most(2)) + end + end + + context 'when after rejected' do + before do + friend.update(passive_state: :rejected) + end + + it 'marks the friend as pending' do + subject.perform + expect(friend.reload.they_are_pending?).to be true + expect(friend.passive_follow_activity_id).to eq 'foo' + end + end + + context 'when unlocked' do + before do + friend.update(unlocked: true) + stub_request(:post, 'https://example.com/inbox') + end + + it 'marks the friend as accepted' do + subject.perform + + friend = FriendDomain.find_by(domain: 'abc.com') + expect(friend).to_not be_nil + expect(friend.they_are_accepted?).to be true + expect(a_request(:post, 'https://example.com/inbox').with(body: hash_including({ + id: 'foo#accepts/friends', + type: 'Accept', + object: 'foo', + }))).to have_been_made.once + end + end + + context 'when unlocked on admin settings' do + before do + Form::AdminSettings.new(unlocked_friend: '1').save + stub_request(:post, 'https://example.com/inbox') + end + + it 'marks the friend as accepted' do + subject.perform + + friend = FriendDomain.find_by(domain: 'abc.com') + expect(friend).to_not be_nil + expect(friend.they_are_accepted?).to be true + expect(a_request(:post, 'https://example.com/inbox').with(body: hash_including({ + id: 'foo#accepts/friends', + type: 'Accept', + object: 'foo', + }))).to have_been_made.once + end + end + + context 'when already accepted' do + before do + friend.update(passive_state: :accepted) + stub_request(:post, 'https://example.com/inbox') + end + + it 'marks the friend as accepted' do + subject.perform + + friend = FriendDomain.find_by(domain: 'abc.com') + expect(friend).to_not be_nil + expect(friend.they_are_accepted?).to be true + expect(a_request(:post, 'https://example.com/inbox').with(body: hash_including({ + id: 'foo#accepts/friends', + type: 'Accept', + object: 'foo', + }))).to have_been_made.once + end + end + + context 'when domain blocked' do + before do + friend.update(domain: 'def.com') + end + + it 'marks the friend rejected' do + Fabricate(:domain_block, domain: 'abc.com', reject_friend: true) + subject.perform + + friend = FriendDomain.find_by(domain: 'abc.com') + expect(friend).to be_nil + end + end + end end diff --git a/spec/lib/activitypub/activity/reject_spec.rb b/spec/lib/activitypub/activity/reject_spec.rb index 0a4243cd16..1eee37db35 100644 --- a/spec/lib/activitypub/activity/reject_spec.rb +++ b/spec/lib/activitypub/activity/reject_spec.rb @@ -122,6 +122,30 @@ RSpec.describe ActivityPub::Activity::Reject do end end + context 'when sender is from friend server' do + subject { described_class.new(json, sender) } + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', active_state: :pending, active_follow_activity_id: 'https://abc-123/456') } + + before do + Fabricate(:follow_request, account: recipient, target_account: sender) + subject.perform + end + + it 'does not create a follow relationship' do + expect(recipient.following?(sender)).to be false + end + + it 'removes the follow request' do + expect(recipient.requested?(sender)).to be false + end + + it 'friend server is not changed' do + expect(friend.reload.i_am_pending?).to be true + end + end + context 'when given a relay' do subject { described_class.new(json, sender) } @@ -147,4 +171,26 @@ RSpec.describe ActivityPub::Activity::Reject do expect(relay.reload.rejected?).to be true end end + + context 'when given a friend' do + subject { described_class.new(json, sender) } + + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', active_state: :pending, active_follow_activity_id: 'https://abc-123/456') } + + let(:json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Reject', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: 'https://abc-123/456', + }.with_indifferent_access + end + + it 'marks the friend as rejected' do + subject.perform + expect(friend.reload.i_am_rejected?).to be true + end + end end diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb index 58e71fc4e8..1671f04b4b 100644 --- a/spec/lib/activitypub/activity/undo_spec.rb +++ b/spec/lib/activitypub/activity/undo_spec.rb @@ -145,6 +145,13 @@ RSpec.describe ActivityPub::Activity::Undo do expect(sender.following?(recipient)).to be false end + it 'deletes follow from sender to recipient when has friend' do + friend = Fabricate(:friend_domain, domain: sender.domain, passive_state: :accepted) + subject.perform + expect(sender.following?(recipient)).to be false + expect(friend.they_are_accepted?).to be true + end + context 'with only object uri' do let(:object_json) { 'bar' } @@ -153,6 +160,25 @@ RSpec.describe ActivityPub::Activity::Undo do expect(sender.following?(recipient)).to be false end end + + context 'when for a friend' do + let(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor') } + let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', passive_state: :accepted, passive_follow_activity_id: 'bar') } + let(:object_json) do + { + id: 'bar', + type: 'Follow', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: 'https://www.w3.org/ns/activitystreams#Public', + } + end + + it 'deletes follow from this server to friend' do + subject.perform + expect(friend.reload.they_are_idle?).to be true + expect(friend.passive_follow_activity_id).to be_nil + end + end end context 'with Like' do diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index 2bff125a6a..bec6233fd5 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -27,6 +27,11 @@ RSpec.describe ActivityPub::TagManager do expect(subject.to(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] end + it 'returns followers collection for public_unlisted status' do + status = Fabricate(:status, visibility: :public_unlisted) + expect(subject.to(status)).to eq [account_followers_url(status.account)] + end + it 'returns followers collection for unlisted status' do status = Fabricate(:status, visibility: :unlisted) expect(subject.to(status)).to eq [account_followers_url(status.account)] @@ -69,12 +74,34 @@ RSpec.describe ActivityPub::TagManager do end end + describe '#to_for_friend' do + it 'returns followers collection for public_unlisted status' do + status = Fabricate(:status, visibility: :public_unlisted) + expect(subject.to_for_friend(status)).to eq [account_followers_url(status.account), 'LocalPublic'] + end + + it 'returns followers collection for unlisted status' do + status = Fabricate(:status, visibility: :unlisted) + expect(subject.to_for_friend(status)).to eq [account_followers_url(status.account)] + end + + it 'returns followers collection for private status' do + status = Fabricate(:status, visibility: :private) + expect(subject.to_for_friend(status)).to eq [account_followers_url(status.account)] + end + end + describe '#cc' do it 'returns followers collection for public status' do status = Fabricate(:status, visibility: :public) expect(subject.cc(status)).to eq [account_followers_url(status.account)] end + it 'returns public collection for public_unlisted status' do + status = Fabricate(:status, visibility: :public_unlisted) + expect(subject.cc(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] + end + it 'returns public collection for unlisted status' do status = Fabricate(:status, visibility: :unlisted) expect(subject.cc(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] @@ -114,6 +141,74 @@ RSpec.describe ActivityPub::TagManager do end end + describe '#cc_for_misskey' do + let(:user) { Fabricate(:user) } + + before do + user.settings.update(reject_unlisted_subscription: true, reject_public_unlisted_subscription: true) + user.save + end + + it 'returns public collection for public status' do + status = Fabricate(:status, visibility: :public) + expect(subject.cc_for_misskey(status)).to eq [account_followers_url(status.account)] + end + + it 'returns empty array for public_unlisted status' do + status = Fabricate(:status, account: user.account, visibility: :public_unlisted) + expect(subject.cc_for_misskey(status)).to eq [] + end + + it 'returns empty array for unlisted status' do + status = Fabricate(:status, account: user.account, visibility: :unlisted) + expect(subject.cc_for_misskey(status)).to eq [] + end + end + + describe '#searchable_by' do + it 'returns public collection for public status' do + status = Fabricate(:status, searchability: :public) + expect(subject.searchable_by(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] + end + + it 'returns followers collection for public_unlisted status' do + status = Fabricate(:status, searchability: :public_unlisted) + expect(subject.searchable_by(status)).to eq [account_followers_url(status.account)] + end + + it 'returns followers collection for private status' do + status = Fabricate(:status, searchability: :private) + expect(subject.searchable_by(status)).to eq [account_followers_url(status.account)] + end + + it 'returns empty array for direct status' do + status = Fabricate(:status, searchability: :direct) + expect(subject.searchable_by(status)).to eq [] + end + + it 'returns as:Limited array for limited status' do + status = Fabricate(:status, searchability: :limited) + expect(subject.searchable_by(status)).to eq ['as:Limited'] + end + end + + describe '#searchable_by_for_friend' do + it 'returns public collection for public status' do + status = Fabricate(:status, account: Fabricate(:account, searchability: :public), searchability: :public) + expect(subject.searchable_by_for_friend(status)).to eq ['https://www.w3.org/ns/activitystreams#Public'] + end + + it 'returns public collection for public_unlisted status' do + status = Fabricate(:status, account: Fabricate(:account, searchability: :public), searchability: :public_unlisted) + expect(subject.searchable_by_for_friend(status)).to eq [account_followers_url(status.account), 'LocalPublic'] + end + + it 'returns followers collection for private status' do + status = Fabricate(:status, account: Fabricate(:account, searchability: :public), searchability: :private) + expect(subject.searchable_by_for_friend(status)).to eq [account_followers_url(status.account)] + end + end + describe '#local_uri?' do it 'returns false for non-local URI' do expect(subject.local_uri?('http://example.com/123')).to be false diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index 3d51fedb14..44b5bb39e8 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -24,12 +24,14 @@ describe StatusReachFinder do it 'send status' do expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' end end context 'with non-follower' do it 'send status' do expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' end end end @@ -92,6 +94,103 @@ describe StatusReachFinder do expect(subject.inboxes_for_misskey).to_not include 'https://foo.bar/inbox' end end + + context 'when has distributable friend server' do + let(:sender_software) { 'misskey' } + let(:searchability) { :public } + + before { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', available: true, active_state: :accepted, passive_state: :accepted, pseudo_relay: true) } + + it 'send status without friend server' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end + end + end + + context 'when this server has a friend' do + let(:bob) { Fabricate(:account, username: 'bob', domain: 'foo.bar', protocol: :activitypub, inbox_url: 'https://foo.bar/inbox') } + + context 'with follower' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end + end + + context 'with non-follower' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted) + end + + it 'send status' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + + context 'with pending' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :pending) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + + context 'when unavailable' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted, available: false) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + + context 'when distributable' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted, passive_state: :accepted, pseudo_relay: true) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end + end + + context 'when distributable and not following' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true) + end + + it 'send status' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end + end + end + + context 'when it contains distributable friend server' do + before { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', available: true, active_state: :accepted, passive_state: :accepted, pseudo_relay: true) } + + it 'includes the inbox of the mentioned account' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_misskey).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end end context 'when it contains mentions of remote accounts' do @@ -255,4 +354,99 @@ describe StatusReachFinder do end end end + + describe '#inboxes_for_friend and distributables' do + subject { described_class.new(status).inboxes_for_friend } + + let(:visibility) { :public } + let(:searchability) { :public } + let(:alice) { Fabricate(:account, username: 'alice') } + let(:status) { Fabricate(:status, account: alice, visibility: visibility, searchability: searchability) } + + context 'when a simple case' do + before do + Fabricate(:friend_domain, domain: 'abc.com', inbox_url: 'https://abc.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: true) + Fabricate(:friend_domain, domain: 'def.com', inbox_url: 'https://def.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: true) + Fabricate(:friend_domain, domain: 'ghi.com', inbox_url: 'https://ghi.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: false) + Fabricate(:friend_domain, domain: 'jkl.com', inbox_url: 'https://jkl.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: false, available: true) + Fabricate(:friend_domain, domain: 'mno.com', inbox_url: 'https://mno.com/inbox', active_state: :accepted, passive_state: :pending, pseudo_relay: true, available: true) + Fabricate(:friend_domain, domain: 'pqr.com', inbox_url: 'https://pqr.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: true) + Fabricate(:unavailable_domain, domain: 'pqr.com') + end + + it 'returns friend servers' do + expect(subject).to include 'https://abc.com/inbox' + expect(subject).to include 'https://def.com/inbox' + end + + it 'not contains unavailable friends' do + expect(subject).to_not include 'https://ghi.com/inbox' + end + + it 'not contains no-relay friends' do + expect(subject).to_not include 'https://jkl.com/inbox' + end + + it 'not contains no-mutual friends' do + expect(subject).to_not include 'https://mno.com/inbox' + end + + it 'not contains unavailable domain friends' do + expect(subject).to_not include 'https://pqr.com/inbox' + end + + context 'when public visibility' do + let(:visibility) { :public } + let(:searchability) { :direct } + + it 'returns friend servers' do + expect(subject).to_not eq [] + end + end + + context 'when public_unlsited visibility' do + let(:visibility) { :public_unlisted } + let(:searchability) { :direct } + + it 'returns friend servers' do + expect(subject).to_not eq [] + end + end + + context 'when unlsited visibility with public searchability' do + let(:visibility) { :unlisted } + let(:searchability) { :public } + + it 'returns friend servers' do + expect(subject).to_not eq [] + end + end + + context 'when unlsited visibility with public_unlisted searchability' do + let(:visibility) { :unlisted } + let(:searchability) { :public_unlisted } + + it 'returns friend servers' do + expect(subject).to_not eq [] + end + end + + context 'when unlsited visibility with private searchability' do + let(:visibility) { :unlisted } + let(:searchability) { :private } + + it 'returns empty servers' do + expect(subject).to eq [] + end + end + + context 'when private visibility' do + let(:visibility) { :private } + + it 'returns friend servers' do + expect(subject).to eq [] + end + end + end + end end diff --git a/spec/mailers/admin_mailer_spec.rb b/spec/mailers/admin_mailer_spec.rb index 423dce88ab..23b99a68cc 100644 --- a/spec/mailers/admin_mailer_spec.rb +++ b/spec/mailers/admin_mailer_spec.rb @@ -64,6 +64,26 @@ RSpec.describe AdminMailer do end end + describe '.new_pending_friend_server' do + let(:recipient) { Fabricate(:account, username: 'Barklums') } + let(:friend) { Fabricate(:friend_domain, passive_state: :pending, domain: 'abc.com') } + let(:mail) { described_class.with(recipient: recipient).new_pending_friend_server(friend) } + + before do + recipient.user.update(locale: :en) + end + + it 'renders the headers' do + expect(mail.subject).to eq('New friend server up for review on cb6e6126.ngrok.io (abc.com)') + expect(mail.to).to eq [recipient.user_email] + expect(mail.from).to eq ['notifications@localhost'] + end + + it 'renders the body' do + expect(mail.body.encoded).to match 'The new friend server abc.com is waiting for your review. You can approve or reject this application.' + end + end + describe '.new_trends' do let(:recipient) { Fabricate(:account, username: 'Snurf') } let(:links) { [] } diff --git a/spec/mailers/previews/admin_mailer_preview.rb b/spec/mailers/previews/admin_mailer_preview.rb index bc8f0193b9..7ba6f08239 100644 --- a/spec/mailers/previews/admin_mailer_preview.rb +++ b/spec/mailers/previews/admin_mailer_preview.rb @@ -8,6 +8,11 @@ class AdminMailerPreview < ActionMailer::Preview AdminMailer.with(recipient: Account.first).new_pending_account(User.pending.first) end + # Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_pending_friend_server + def new_pending_friend_server + AdminMailer.with(recipient: Account.first).new_pending_friend_server(User.pending.first) + end + # Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_trends def new_trends AdminMailer.with(recipient: Account.first).new_trends(PreviewCard.joins(:trend).limit(3), Tag.limit(3), Status.joins(:trend).where(reblog_of_id: nil).limit(3)) diff --git a/spec/models/friend_domain_spec.rb b/spec/models/friend_domain_spec.rb new file mode 100644 index 0000000000..c3fa128b16 --- /dev/null +++ b/spec/models/friend_domain_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe FriendDomain do + let(:friend) { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox') } + + before do + stub_request(:post, 'https://foo.bar/inbox') + end + + describe '#follow!' do + it 'call inbox' do + friend.follow! + expect(friend.active_follow_activity_id).to_not be_nil + expect(friend.i_am_pending?).to be true + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + id: friend.active_follow_activity_id, + type: 'Follow', + actor: 'https://cb6e6126.ngrok.io/actor', + object: 'https://www.w3.org/ns/activitystreams#Public', + }))).to have_been_made.once + end + end + + describe '#unfollow!' do + it 'call inbox' do + friend.update(active_follow_activity_id: 'ohagi') + friend.unfollow! + expect(friend.active_follow_activity_id).to be_nil + expect(friend.i_am_idle?).to be true + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Undo', + object: { + id: 'ohagi', + type: 'Follow', + actor: 'https://cb6e6126.ngrok.io/actor', + object: 'https://www.w3.org/ns/activitystreams#Public', + }, + }))).to have_been_made.once + end + end + + describe '#accept!' do + it 'call inbox' do + friend.update(passive_follow_activity_id: 'ohagi', passive_state: :pending) + friend.accept! + expect(friend.they_are_accepted?).to be true + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + id: 'ohagi#accepts/friends', + type: 'Accept', + actor: 'https://cb6e6126.ngrok.io/actor', + object: 'ohagi', + }))).to have_been_made.once + end + end + + describe '#reject!' do + it 'call inbox' do + friend.update(passive_follow_activity_id: 'ohagi', passive_state: :pending) + friend.reject! + expect(friend.they_are_rejected?).to be true + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + id: 'ohagi#rejects/friends', + type: 'Reject', + actor: 'https://cb6e6126.ngrok.io/actor', + object: 'ohagi', + }))).to have_been_made.once + end + end + + describe '#delete!' do + it 'call inbox' do + friend.update(active_state: :pending) + friend.destroy + expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ + type: 'Delete', + actor: 'https://cb6e6126.ngrok.io/actor', + object: 'https://www.w3.org/ns/activitystreams#Public', + }))).to have_been_made.once + end + end +end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 965e293c5e..3d13783a50 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -89,7 +89,7 @@ RSpec.describe PublicFeed do end it 'excludes public_unlisted statuses' do - expect(subject).to_not include(public_unlisted_status.id) + expect(subject).to include(public_unlisted_status.id) end end @@ -105,7 +105,7 @@ RSpec.describe PublicFeed do end it 'excludes public_unlisted statuses' do - expect(subject).to_not include(public_unlisted_status.id) + expect(subject).to include(public_unlisted_status.id) end end end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 96f6bb56c9..136b301933 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -114,7 +114,7 @@ RSpec.describe Status do end end - describe '#searchability' do + describe '#compute_searchability' do subject { Fabricate(:status, account: account, searchability: status_searchability) } let(:account_searchability) { :public } @@ -146,6 +146,18 @@ RSpec.describe Status do end end + context 'when public-public_unlisted' do + let(:status_searchability) { :public_unlisted } + + it 'returns public' do + expect(subject.compute_searchability).to eq 'public' + end + + it 'returns public_unlisted for local' do + expect(subject.compute_searchability_local).to eq 'public_unlisted' + end + end + context 'when public-private' do let(:status_searchability) { :private } diff --git a/spec/services/block_domain_service_spec.rb b/spec/services/block_domain_service_spec.rb index 36dce9d196..30fb760487 100644 --- a/spec/services/block_domain_service_spec.rb +++ b/spec/services/block_domain_service_spec.rb @@ -10,9 +10,13 @@ RSpec.describe BlockDomainService, type: :service do let!(:bad_status_with_attachment) { Fabricate(:status, account: bad_account, text: 'Hahaha') } let!(:bad_attachment) { Fabricate(:media_attachment, account: bad_account, status: bad_status_with_attachment, file: attachment_fixture('attachment.jpg')) } let!(:already_banned_account) { Fabricate(:account, username: 'badguy', domain: 'evil.org', suspended: true, silenced: true) } + let!(:bad_friend) { Fabricate(:friend_domain, domain: 'evil.org', inbox_url: 'https://evil.org/inbox', active_state: :accepted, passive_state: :accepted) } describe 'for a suspension' do before do + stub_request(:post, 'https://evil.org/inbox').with(body: hash_including({ + type: 'Delete', + })) subject.call(DomainBlock.create!(domain: 'evil.org', severity: :suspend)) end @@ -41,6 +45,21 @@ RSpec.describe BlockDomainService, type: :service do expect { bad_status_with_attachment.reload }.to raise_exception ActiveRecord::RecordNotFound expect { bad_attachment.reload }.to raise_exception ActiveRecord::RecordNotFound end + + it 'removes remote friend from that domain' do + expect(FriendDomain.find_by(domain: 'evil.org')).to be_nil + end + end + + describe 'for rejecting friend only' do + before do + stub_request(:post, 'https://evil.org/inbox') + subject.call(DomainBlock.create!(domain: 'evil.org', severity: :noop, reject_friend: true)) + end + + it 'removes remote friend from that domain' do + expect(FriendDomain.find_by(domain: 'evil.org')).to be_nil + end end describe 'for a silence with reject media' do diff --git a/spec/services/fan_out_on_write_service_spec.rb b/spec/services/fan_out_on_write_service_spec.rb index 34169fcb71..17d9f91252 100644 --- a/spec/services/fan_out_on_write_service_spec.rb +++ b/spec/services/fan_out_on_write_service_spec.rb @@ -278,7 +278,7 @@ RSpec.describe FanOutOnWriteService, type: :service do it 'is broadcast publicly' do expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything) expect(redis).to have_received(:publish).with('timeline:public:local', anything) - expect(redis).to_not have_received(:publish).with('timeline:public', anything) + expect(redis).to have_received(:publish).with('timeline:public', anything) end context 'with list' do From a220e5b46d6a3a31e3b5bfe57989282227941d01 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 9 Oct 2023 12:17:17 +0900 Subject: [PATCH 171/237] =?UTF-8?q?Add:=20=E3=83=95=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=81=AE=E4=B8=80=E9=83=A8=E6=B3=A8=E9=87=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/friend_servers/_friend_fields.html.haml | 4 ++-- config/locales/en.yml | 2 ++ config/locales/ja.yml | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/views/admin/friend_servers/_friend_fields.html.haml b/app/views/admin/friend_servers/_friend_fields.html.haml index b3e56f75c2..f2de4a1f60 100644 --- a/app/views/admin/friend_servers/_friend_fields.html.haml +++ b/app/views/admin/friend_servers/_friend_fields.html.haml @@ -11,10 +11,10 @@ = f.input :available, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.available') .fields-group - = f.input :pseudo_relay, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.pseudo_relay') + = f.input :pseudo_relay, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.pseudo_relay'), hint: t('admin.friend_servers.edit.pseudo_relay_hint') .fields-group = f.input :unlocked, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.unlocked') .fields-group - = f.input :allow_all_posts, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.allow_all_posts') + = f.input :allow_all_posts, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.allow_all_posts'), hint: t('admin.friend_servers.edit.allow_all_posts_hint') diff --git a/config/locales/en.yml b/config/locales/en.yml index c86c0a89b8..2185f933cb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -509,12 +509,14 @@ en: domain: Domain edit: allow_all_posts: Receive all posts + allow_all_posts_hint: 通常は自分のサーバーの誰もフォローしていないアカウントの投稿は例外を除き受け入れがブロックされます。そのブロックを解除します。スパムが発生した場合など、いつでもブロックを再開できます。 available: Available description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 domain: Domain inbox_url: Friend server inbox URL inbox_url_hint: Default value is https://domain/inbox if you input empty (For example, https://example.com/inbox) pseudo_relay: Send all public or searchable posts + pseudo_relay_hint: お互いに有効で、かつ相手側で「このサーバーからの投稿を無条件で受け入れる」が有効になっている必要があります unlocked: Approve automatically receiving new request edit_friend: Edit enabled: Enabled diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f1a32ede38..61189de940 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -503,13 +503,15 @@ ja: disabled: 無効 domain: ドメイン edit: - allow_all_posts: このサーバーからの全ての投稿を受け入れる + allow_all_posts: このサーバーからの投稿を無条件で受け入れる + allow_all_posts_hint: 通常は自分のサーバーの誰もフォローしていないアカウントの投稿は例外を除き受け入れがブロックされます。そのブロックを解除します。スパムが発生した場合など、いつでもブロックを再開できます。 available: 有効にする description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 domain: ドメイン inbox_url: フレンドサーバーの inbox URL inbox_url_hint: 空欄にした場合、自動で「https://ドメイン名/inbox」に設定されます。(例:https://example.com/inbox)相手のサーバーがinbox URLを特別に指定している場合、入力してください。 pseudo_relay: 全ての公開・ローカル公開・非収載かつ検索可能な投稿を送信する + pseudo_relay_hint: お互いに有効で、かつ相手側で「このサーバーからの投稿を無条件で受け入れる」が有効になっている必要があります unlocked: このサーバーからの申請を自動で承認する edit_friend: 編集 enabled: 有効 From a35c01331cd308afcc0772a454f164f56207a4c9 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 9 Oct 2023 12:28:16 +0900 Subject: [PATCH 172/237] Bump version to 7.0 --- lib/mastodon/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index fcd9b7610e..8ae24286ba 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,7 +9,7 @@ module Mastodon end def kmyblue_minor - 1 + 0 end def kmyblue_flag From 63a067e2f21cc622858f933c55fa4233fdac460b Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 9 Oct 2023 12:47:45 +0900 Subject: [PATCH 173/237] =?UTF-8?q?Fix:=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E6=A4=9C=E7=B4=A2=E8=A8=B1=E5=8F=AF=E3=81=8C=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user_settings.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user_settings.rb b/app/models/user_settings.rb index 4bf64e338b..e353ec7b2a 100644 --- a/app/models/user_settings.rb +++ b/app/models/user_settings.rb @@ -25,7 +25,7 @@ class UserSettings setting :default_privacy, default: nil, in: %w(public public_unlisted login unlisted private) setting :stay_privacy, default: false setting :default_reblog_privacy, default: nil - setting :default_searchability, default: :direct, in: %w(public private direct limited) + setting :default_searchability, default: :direct, in: %w(public private direct limited public_unlisted) setting :default_searchability_of_search, default: :public, in: %w(public private direct limited) setting :use_public_index, default: true setting :disallow_unlisted_public_searchability, default: false From 4549422a650f1a357f07b4b3cfaddfdb61b83e81 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 9 Oct 2023 15:40:52 +0900 Subject: [PATCH 174/237] =?UTF-8?q?Tes:=20=E7=94=B3=E8=AB=8B=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=83=95=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=E3=81=AB=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A6=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/lib/status_reach_finder_spec.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index 44b5bb39e8..8aefc85210 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -147,6 +147,18 @@ describe StatusReachFinder do end end + context 'with idle' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', active_state: :idle, passive_state: :accepted) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + context 'when unavailable' do before do Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted, available: false) From 59879bcc2f543607ecc70f68d4a541d1001f78b5 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 9 Oct 2023 15:46:40 +0900 Subject: [PATCH 175/237] =?UTF-8?q?Fix:=20=E3=83=95=E3=82=A3=E3=83=AB?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=20`half=5Fwarn`=20=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/components/status.jsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 4f1e0f47a1..644d44fd4f 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -475,9 +475,6 @@ class Status extends ImmutablePureComponent { {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}
- {withReference} - {withExpiration} - {withLimited} {status.get('edited_at') && *} From e16d8a00f3220938f62696322cd41421ff6221ba Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 11:42:23 +0900 Subject: [PATCH 176/237] =?UTF-8?q?Test:=20=E6=9C=AA=E5=8F=8E=E8=BC=89?= =?UTF-8?q?=E3=81=8B=E3=81=A4=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=E8=A8=B1=E5=8F=AF=E3=81=AE=E3=82=A2=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=83=8A=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/delivery_antenna_service_spec.rb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spec/services/delivery_antenna_service_spec.rb b/spec/services/delivery_antenna_service_spec.rb index 224d448b1a..684a5da9dd 100644 --- a/spec/services/delivery_antenna_service_spec.rb +++ b/spec/services/delivery_antenna_service_spec.rb @@ -295,6 +295,18 @@ RSpec.describe DeliveryAntennaService, type: :service do end end + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + + it 'detecting antenna' do + expect(antenna_feed_of(antenna)).to include status.id + end + + it 'not detecting antenna' do + expect(antenna_feed_of(empty_antenna)).to_not include status.id + end + end + context 'when private searchability' do let(:searchability) { :private } @@ -317,6 +329,15 @@ RSpec.describe DeliveryAntennaService, type: :service do end end + context 'when public_unlisted searchability' do + let(:searchability) { :public_unlisted } + + it 'detecting antenna' do + expect(antenna_feed_of(antenna)).to include status.id + expect(antenna_feed_of(empty_antenna)).to include status.id + end + end + context 'when private searchability' do let(:searchability) { :private } From db98ef8a44def4c40b52af0deb332838accac103 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 19:52:36 +0900 Subject: [PATCH 177/237] =?UTF-8?q?#71=20=E3=83=95=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=E3=81=AB=E3=82=B9?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=83=97=E3=82=92=E9=80=81=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 9d2abcccf5..1087a6c8b0 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -57,6 +57,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity NotifyService.new.call(@original_status.account, :emoji_reaction, reaction) forward_for_emoji_reaction relay_for_emoji_reaction + relay_friend_for_emoji_reaction end rescue Seahorse::Client::NetworkingError nil @@ -76,6 +77,14 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end end + def relay_friend_for_emoji_reaction + return unless @json['signature'].present? && @original_status.public_visibility? + + ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| + [Oj.dump(@json), @original_status.account.id, inbox_url] + end + end + def shortcode return @shortcode if defined?(@shortcode) From 238a17b1450082210cea80cc4a183727d59f5463 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Fri, 22 Sep 2023 10:13:53 +0200 Subject: [PATCH 178/237] Fix the search documentation URL in system checks (#27036) --- app/lib/admin/system_check/elasticsearch_check.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/admin/system_check/elasticsearch_check.rb b/app/lib/admin/system_check/elasticsearch_check.rb index c0a1a21e86..406bb5bcb9 100644 --- a/app/lib/admin/system_check/elasticsearch_check.rb +++ b/app/lib/admin/system_check/elasticsearch_check.rb @@ -41,13 +41,13 @@ class Admin::SystemCheck::ElasticsearchCheck < Admin::SystemCheck::BaseCheck elsif cluster_health['status'] == 'red' Admin::SystemCheck::Message.new(:elasticsearch_health_red) elsif cluster_health['number_of_nodes'] < 2 && es_preset != 'single_node_cluster' - Admin::SystemCheck::Message.new(:elasticsearch_preset_single_node, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') + Admin::SystemCheck::Message.new(:elasticsearch_preset_single_node, nil, 'https://docs.joinmastodon.org/admin/elasticsearch/#scaling') elsif Chewy.client.indices.get_settings[Chewy::Stash::Specification.index_name]&.dig('settings', 'index', 'number_of_replicas')&.to_i&.positive? && es_preset == 'single_node_cluster' Admin::SystemCheck::Message.new(:elasticsearch_reset_chewy) elsif cluster_health['status'] == 'yellow' Admin::SystemCheck::Message.new(:elasticsearch_health_yellow) else - Admin::SystemCheck::Message.new(:elasticsearch_preset, nil, 'https://docs.joinmastodon.org/admin/optional/elasticsearch/#scaling') + Admin::SystemCheck::Message.new(:elasticsearch_preset, nil, 'https://docs.joinmastodon.org/admin/elasticsearch/#scaling') end rescue Faraday::ConnectionFailed, Elasticsearch::Transport::Transport::Error Admin::SystemCheck::Message.new(:elasticsearch_running_check) From 40702a81fa24532268b341d6ffb2779bbaed2341 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 11:06:48 +0200 Subject: [PATCH 179/237] New Crowdin Translations (automated) (#27052) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 4 ++-- app/javascript/mastodon/locales/en-GB.json | 1 + app/javascript/mastodon/locales/es-AR.json | 4 ++-- app/javascript/mastodon/locales/ko.json | 10 +++++----- app/javascript/mastodon/locales/no.json | 2 ++ app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/vi.json | 2 +- config/locales/ja.yml | 2 +- config/locales/ko.yml | 2 +- config/locales/sr-Latn.yml | 1 + config/locales/sr.yml | 1 + config/locales/vi.yml | 2 +- 13 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index d17bfdde7d..83bffd946d 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -26,7 +26,7 @@ "account.domain_blocked": "Блокиран домейн", "account.edit_profile": "Редактиране на профила", "account.enable_notifications": "Известяване при публикуване от @{name}", - "account.endorse": "Характеристика на профила", + "account.endorse": "Представи в профила", "account.featured_tags.last_status_at": "Последна публикация на {date}", "account.featured_tags.last_status_never": "Няма публикации", "account.featured_tags.title": "Главни хаштагове на {name}", @@ -393,7 +393,7 @@ "media_gallery.toggle_visible": "Скриване на {number, plural, one {изображение} other {изображения}}", "moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.", "mute_modal.duration": "Времетраене", - "mute_modal.hide_notifications": "Скривате ли известията от потребителя?", + "mute_modal.hide_notifications": "Скриване на известия от този потребител?", "mute_modal.indefinite": "Неопределено", "navigation_bar.about": "Относно", "navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 8d3535e326..20ed8937bc 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Open URL in Mastodon", "search.quick_action.status_search": "Posts matching {x}", "search.search_or_paste": "Search or paste URL", + "search_popout.full_text_search_disabled_message": "Unavailable on {domain}.", "search_popout.language_code": "ISO language code", "search_popout.options": "Search options", "search_popout.quick_actions": "Quick actions", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 1277264a99..7aeb66b546 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -302,8 +302,8 @@ "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", - "home.actions.go_to_explore": "Mirá qué está en tendencia", - "home.actions.go_to_suggestions": "Encontrá cuentas para seguir", + "home.actions.go_to_explore": "Ver qué está en tendencia", + "home.actions.go_to_suggestions": "Encontrar cuentas para seguir", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index e1361f6537..37c3990e49 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -137,7 +137,7 @@ "compose.language.search": "언어 검색...", "compose.published.body": "게시하였습니다.", "compose.published.open": "열기", - "compose.saved.body": "게시물을 저장했어요.", + "compose.saved.body": "게시물이 저장되었습니다.", "compose_form.direct_message_warning_learn_more": "더 알아보기", "compose_form.encryption_warning": "마스토돈의 게시물들은 종단간 암호화가 되지 않습니다. 민감한 정보를 마스토돈을 통해 전달하지 마세요.", "compose_form.hashtag_warning": "이 게시물은 전체공개가 아니기 때문에 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색될 수 있습니다.", @@ -307,12 +307,12 @@ "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", - "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타나요. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있어요:", + "home.explore_prompt.body": "홈 피드에는 내가 팔로우한 해시태그 그리고 팔로우한 사람과 부스트가 함께 나타납니다. 너무 고요하게 느껴진다면, 다음 것들을 살펴볼 수 있습니다.", "home.explore_prompt.title": "이곳은 마스토돈의 내 본거지입니다.", "home.hide_announcements": "공지사항 숨기기", "home.pending_critical_update.body": "서둘러 마스토돈 서버를 업데이트 하세요!", "home.pending_critical_update.link": "업데이트 보기", - "home.pending_critical_update.title": "긴급 보안 업데이트가 있어요!", + "home.pending_critical_update.title": "긴급 보안 업데이트가 있습니다!", "home.show_announcements": "공지사항 보기", "interaction_modal.description.favourite": "마스토돈 계정을 통해, 게시물을 좋아하는 것으로 작성자에게 호의를 표하고 나중에 보기 위해 저장할 수 있습니다.", "interaction_modal.description.follow": "마스토돈 계정을 통해, {name} 님을 팔로우 하고 그의 게시물을 홈 피드에서 받아 볼 수 있습니다.", @@ -554,7 +554,7 @@ "report.mute_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 해당 계정은 자신이 뮤트 되었는지 알지 못합니다.", "report.next": "다음", "report.placeholder": "코멘트", - "report.reasons.dislike": "마음에 안듭니다", + "report.reasons.dislike": "마음에 안 듭니다", "report.reasons.dislike_description": "내가 보기 싫은 종류에 속합니다", "report.reasons.legal": "불법입니다", "report.reasons.legal_description": "내 서버가 속한 국가의 법률을 위반한다고 생각합니다", @@ -695,7 +695,7 @@ "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", - "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없어요.", + "upload_error.poll": "파일 업로드는 투표와 함께 쓸 수 없습니다.", "upload_form.audio_description": "청각 장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명", "upload_form.description_missing": "설명이 추가되지 않음", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 08949e9f7c..a670fd2e4f 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -310,6 +310,8 @@ "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", + "home.pending_critical_update.link": "Se oppdateringer", + "home.pending_critical_update.title": "Kritisk sikkerhetsoppdatering er tilgjengelig!", "home.show_announcements": "Vis kunngjøring", "interaction_modal.description.favourite": "Med en konto på Mastodon, kan du favorittmarkere dette innlegget for å la forfatteren vite at du satte pris på det, og lagre innlegget til senere.", "interaction_modal.description.follow": "Med en konto på Mastodon, kan du følge {name} for å få innleggene deres i tidslinjen din.", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 49755e90ed..6fe5603f40 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Otvori URL adresu u Mastodon-u", "search.quick_action.status_search": "Podudaranje objava {x}", "search.search_or_paste": "Pretražite ili unesite adresu", + "search_popout.full_text_search_disabled_message": "Nije dostupno na {domain}.", "search_popout.language_code": "ISO kod jezika", "search_popout.options": "Opcije pretrage", "search_popout.quick_actions": "Brze radnje", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 0beabb5187..f3c077cf31 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -590,6 +590,7 @@ "search.quick_action.open_url": "Отвори URL адресу у Mastodon-у", "search.quick_action.status_search": "Подударање објава {x}", "search.search_or_paste": "Претражите или унесите адресу", + "search_popout.full_text_search_disabled_message": "Није доступно на {domain}.", "search_popout.language_code": "ISO код језика", "search_popout.options": "Опције претраге", "search_popout.quick_actions": "Брзе радње", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 01d301d5e8..5c2417274a 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -592,7 +592,7 @@ "search.search_or_paste": "Tìm kiếm hoặc nhập URL", "search_popout.full_text_search_disabled_message": "Không khả dụng trên {domain}.", "search_popout.language_code": "Mã ngôn ngữ ISO", - "search_popout.options": "Tuỳ chọn tìm kiếm", + "search_popout.options": "Tùy chọn tìm kiếm", "search_popout.quick_actions": "Thao tác nhanh", "search_popout.recent": "Tìm kiếm gần đây", "search_popout.specific_date": "ngày cụ thể", diff --git a/config/locales/ja.yml b/config/locales/ja.yml index abcb3ccf90..8da2695fdc 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -378,7 +378,7 @@ ja: add_new: ドメインブロックを追加 confirm_suspension: cancel: キャンセル - confirm: ブロック + confirm: 停止 permanent_action: 失われたデータやフォロー関係は、ブロックを解除しても元に戻せません。 preamble_html: "%{domain} と、そのサブドメインをブロックします。" remove_all_data: この操作により、対象のドメインにあるアカウントからのコンテンツやメディア、プロフィール情報はすべて削除されます。 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 128667834d..a6a85464e6 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -833,7 +833,7 @@ ko: action: 문서 참조 message_html: Elasticsearch 클러스터가 한 대의 노드만 사용하고 있습니다. ES_PRESETsingle_node_cluster로 설정되어야 합니다. elasticsearch_reset_chewy: - message_html: 설정 변경으로 인해Elasticsearch 시스템 인덱스가 최신상태가 아닙니다. tootctl search deploy --reset-chewy 명령으로 업데이트 하세요. + message_html: 설정 변경으로 인해 Elasticsearch 시스템 인덱스가 최신상태가 아닙니다. tootctl search deploy --reset-chewy 명령으로 업데이트 하세요. elasticsearch_running_check: message_html: Elasticsearch에 연결할 수 없습니다. 실행중인지 확인하거나, 전문검색을 비활성화하세요 elasticsearch_version_check: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 84178ef041..5d6849091a 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1770,6 +1770,7 @@ sr-Latn: default: "%d %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d. %b %Y, %H:%M %Z" translation: errors: quota_exceeded: Prekoračena je kvota korišćenja usluge prevođenja na celom serveru. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 012afecb47..379b9cb9d6 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1770,6 +1770,7 @@ sr: default: "%d %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d. %b %Y, %H:%M %Z" translation: errors: quota_exceeded: Прекорачена је квота коришћења услуге превођења на целом серверу. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 093b0bca9e..73222a6047 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1513,7 +1513,7 @@ vi: activity: Tương tác confirm_follow_selected_followers: Bạn có chắc muốn theo dõi những người đã chọn? confirm_remove_selected_followers: Bạn có chắc muốn bỏ theo dõi những người đã chọn? - confirm_remove_selected_follows: Bạn có chắc muốn xoá những người theo dõi bạn đã chọn không? + confirm_remove_selected_follows: Bạn có chắc muốn xóa những người theo dõi bạn đã chọn không? dormant: Chưa follow_failure: Không thể theo dõi một số tài khoản đã chọn. follow_selected_followers: Theo dõi những người đã chọn From 8b382b8df743840ba8d93b54e1ee11dc8cc6260b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 22 Sep 2023 16:01:59 +0200 Subject: [PATCH 180/237] Fix ActiveRecord using two connection pools when no replica is defined (#27061) --- app/helpers/database_helper.rb | 17 +++++++++++++++-- app/models/application_record.rb | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/helpers/database_helper.rb b/app/helpers/database_helper.rb index 79227bb109..62a26a0c2a 100644 --- a/app/helpers/database_helper.rb +++ b/app/helpers/database_helper.rb @@ -1,11 +1,24 @@ # frozen_string_literal: true module DatabaseHelper + def replica_enabled? + ENV['REPLICA_DB_NAME'] || ENV.fetch('REPLICA_DATABASE_URL', nil) + end + module_function :replica_enabled? + def with_read_replica(&block) - ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block) + if replica_enabled? + ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block) + else + yield + end end def with_primary(&block) - ApplicationRecord.connected_to(role: :writing, &block) + if replica_enabled? + ApplicationRecord.connected_to(role: :writing, &block) + else + yield + end end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 567542f91d..014a73997d 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -5,7 +5,7 @@ class ApplicationRecord < ActiveRecord::Base include Remotable - connects_to database: { writing: :primary, reading: ENV['REPLICA_DB_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary } + connects_to database: { writing: :primary, reading: :replica } if DatabaseHelper.replica_enabled? class << self def update_index(_type_name, *_args, &_block) From 9cb7fa57f62635c949b94deafbab62ad84af050e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:50:09 +0200 Subject: [PATCH 181/237] New Crowdin Translations (automated) (#27080) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 28 ++++---- app/javascript/mastodon/locales/cs.json | 3 +- app/javascript/mastodon/locales/de.json | 6 +- app/javascript/mastodon/locales/eo.json | 4 ++ app/javascript/mastodon/locales/es.json | 2 +- app/javascript/mastodon/locales/fa.json | 74 ++++++++++++-------- app/javascript/mastodon/locales/fr.json | 10 +-- app/javascript/mastodon/locales/gd.json | 6 +- app/javascript/mastodon/locales/gl.json | 2 +- app/javascript/mastodon/locales/ko.json | 4 +- app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/no.json | 4 ++ app/javascript/mastodon/locales/sk.json | 3 +- app/javascript/mastodon/locales/vi.json | 6 +- app/javascript/mastodon/locales/zh-CN.json | 12 ++-- app/javascript/mastodon/locales/zh-HK.json | 1 + config/locales/ca.yml | 4 +- config/locales/cs.yml | 80 ++++++++++++++++++++++ config/locales/cy.yml | 1 + config/locales/de.yml | 2 +- config/locales/doorkeeper.fa.yml | 8 ++- config/locales/fa.yml | 72 +++++++++++++++++-- config/locales/gd.yml | 2 +- config/locales/gl.yml | 2 +- config/locales/ja.yml | 8 +-- config/locales/ko.yml | 2 +- config/locales/no.yml | 26 +++++++ config/locales/simple_form.ca.yml | 2 +- config/locales/simple_form.cy.yml | 2 + config/locales/simple_form.fa.yml | 35 ++++++++++ config/locales/simple_form.no.yml | 8 ++- config/locales/simple_form.zh-CN.yml | 10 +-- config/locales/sk.yml | 9 +++ config/locales/sl.yml | 1 + config/locales/zh-CN.yml | 12 ++-- 35 files changed, 356 insertions(+), 97 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 99640953af..433b9b47b7 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -321,7 +321,7 @@ "interaction_modal.login.action": "Torna a l'inici", "interaction_modal.login.prompt": "Domini del teu servidor domèstic, p.ex. mastodon.social", "interaction_modal.no_account_yet": "No a Mastodon?", - "interaction_modal.on_another_server": "En un servidor diferent", + "interaction_modal.on_another_server": "A un altre servidor", "interaction_modal.on_this_server": "En aquest servidor", "interaction_modal.sign_in": "No has iniciat sessió en aquest servidor. On tens el teu compte?", "interaction_modal.sign_in_hint": "Ajuda: Aquesta és la web on vas registrar-te. Si no ho recordes, mira el correu electrònic de benvinguda en la teva safata d'entrada. També pots introduïr el teu nom d'usuari complet! (per ex. @Mastodon@mastodon.social)", @@ -391,7 +391,7 @@ "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", "loading_indicator.label": "Es carrega...", "media_gallery.toggle_visible": "{number, plural, one {Amaga la imatge} other {Amaga les imatges}}", - "moved_to_account_banner.text": "El teu compte {disabledAccount} està actualment desactivat perquè l'has traslladat a {movedToAccount}.", + "moved_to_account_banner.text": "El teu compte {disabledAccount} està desactivat perquè l'has mogut a {movedToAccount}.", "mute_modal.duration": "Durada", "mute_modal.hide_notifications": "Amagar les notificacions d'aquest usuari?", "mute_modal.indefinite": "Indefinit", @@ -426,8 +426,8 @@ "notification.admin.sign_up": "{name} s'ha registrat", "notification.favourite": "{name} ha afavorit el teu tut", "notification.follow": "{name} et segueix", - "notification.follow_request": "{name} ha sol·licitat seguir-te", - "notification.mention": "{name} t'ha mencionat", + "notification.follow_request": "{name} ha sol·licitat de seguir-te", + "notification.mention": "{name} t'ha esmentat", "notification.own_poll": "La teva enquesta ha finalitzat", "notification.poll": "Ha finalitzat una enquesta en què has votat", "notification.reblog": "{name} t'ha impulsat", @@ -451,7 +451,7 @@ "notifications.column_settings.show": "Mostra a la columna", "notifications.column_settings.sound": "Reprodueix so", "notifications.column_settings.status": "Nous tuts:", - "notifications.column_settings.unread_notifications.category": "Notificacions no llegides", + "notifications.column_settings.unread_notifications.category": "Notificacions pendents de llegir", "notifications.column_settings.unread_notifications.highlight": "Destaca les notificacions no llegides", "notifications.column_settings.update": "Edicions:", "notifications.filter.all": "Totes", @@ -473,25 +473,25 @@ "onboarding.action.back": "Porta'm enrere", "onboarding.actions.back": "Porta'm enrere", "onboarding.actions.go_to_explore": "Mira què és tendència", - "onboarding.actions.go_to_home": "Vés a la teva línia de temps inici", + "onboarding.actions.go_to_home": "Ves a la teva línia de temps", "onboarding.compose.template": "Hola Mastodon!", "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.", - "onboarding.follows.lead": "Tu tens cura de la teva línia de temps inici. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant-los de seguir!", - "onboarding.follows.title": "Popular a Mastodon", + "onboarding.follows.lead": "La teva línia de temps inici només està a les teves mans. Com més gent segueixis, més activa i interessant serà. Aquests perfils poden ser un bon punt d'inici—sempre pots acabar deixant de seguir-los!:", + "onboarding.follows.title": "Personalitza la pantalla d'inci", "onboarding.share.lead": "Permet que la gent sàpiga com trobar-te a Mastodon!", "onboarding.share.message": "Sóc {username} a #Mastodon! Vine i segueix-me a {url}", "onboarding.share.next_steps": "Possibles passes següents:", "onboarding.share.title": "Comparteix el teu perfil", - "onboarding.start.lead": "El teu nou compte a Mastodon ja està preparat. Aquí tens com en pots treure tot el suc:", + "onboarding.start.lead": "El teu nou compte ja està preparat a Mastodon, la xarxa social on tu—no un algorisme—té tot el control. Aquí tens com en pots treure tot el suc:", "onboarding.start.skip": "Vols saltar-te tota la resta?", "onboarding.start.title": "Llestos!", - "onboarding.steps.follow_people.body": "Tu tens cura de la teva línia de temps. Omple-la de gent interessant.", - "onboarding.steps.follow_people.title": "{count, plural, zero {No segueixes cap persona} one {Segeueixes ona persona} other {Segueixes # persones}}", - "onboarding.steps.publish_status.body": "Saluda el món.", + "onboarding.steps.follow_people.body": "Mastodon va de seguir a gent interessant.", + "onboarding.steps.follow_people.title": "Personalitza la pantalla d'inci", + "onboarding.steps.publish_status.body": "Saluda al món amb text, fotos, vídeos o enquestes {emoji}", "onboarding.steps.publish_status.title": "Fes el teu primer tut", - "onboarding.steps.setup_profile.body": "És més fàcil que altres interaccionin amb tu si tens un perfil complet.", + "onboarding.steps.setup_profile.body": "És més fàcil que altres interactuïn amb tu si tens un perfil complet.", "onboarding.steps.setup_profile.title": "Personalitza el perfil", - "onboarding.steps.share_profile.body": "Permet als teus amics de saber com trobar-te a Mastodon!", + "onboarding.steps.share_profile.body": "Fer saber als teus amics com trobar-te a Mastodon", "onboarding.steps.share_profile.title": "Comparteix el teu perfil", "onboarding.tips.2fa": "Ho sabies? Pots securitzar el teu compte activant l'autenticació de doble factor en la configuració del teu perfil. Funciona amb qualsevol aplicació TOTP de la teva elecció, no cal número de telèfon!", "onboarding.tips.accounts_from_other_servers": "Ho sabies? Com Mastodon és descentralitzat, et pots trobar amb perfils que són a servidors diferents del teu. I, tanmateix, també hi pots interactuar sense cap problema! El servidor és la segona part del seu nom d'usuari!", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 94fc3ed2d0..94d62a4889 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -114,7 +114,7 @@ "column.directory": "Prozkoumat profily", "column.domain_blocks": "Blokované domény", "column.favourites": "Oblíbené", - "column.firehose": "Živé kanály l", + "column.firehose": "Živé kanály", "column.follow_requests": "Žádosti o sledování", "column.home": "Domů", "column.lists": "Seznamy", @@ -585,6 +585,7 @@ "search.quick_action.open_url": "Otevřít URL v Mastodonu", "search.quick_action.status_search": "Příspěvky odpovídající {x}", "search.search_or_paste": "Hledat nebo vložit URL", + "search_popout.full_text_search_disabled_message": "Nedostupné na {domain}.", "search_popout.language_code": "Kód jazyka podle ISO", "search_popout.options": "Možnosti hledání", "search_popout.quick_actions": "Rychlé akce", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 7f8ffbb0db..acd53c28a7 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -143,7 +143,7 @@ "compose_form.hashtag_warning": "Dieser Beitrag wird unter keinem Hashtag sichtbar sein, weil er nicht öffentlich ist. Nur öffentliche Beiträge können nach Hashtags durchsucht werden.", "compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Andere können dir folgen und deine Beiträge sehen, die nur für Follower bestimmt sind.", "compose_form.lock_disclaimer.lock": "geschützt", - "compose_form.placeholder": "Was gibt's Neues?", + "compose_form.placeholder": "Was gibt’s Neues?", "compose_form.poll.add_option": "Auswahl", "compose_form.poll.duration": "Umfragedauer", "compose_form.poll.option_placeholder": "{number}. Auswahl", @@ -286,7 +286,7 @@ "footer.source_code": "Quellcode anzeigen", "footer.status": "Status", "generic.saved": "Gespeichert", - "getting_started.heading": "Auf geht's!", + "getting_started.heading": "Auf geht’s!", "hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.none": "ohne {additional}", @@ -360,7 +360,7 @@ "keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen", "keyboard_shortcuts.search": "Suchleiste fokussieren", "keyboard_shortcuts.spoilers": "Feld für Inhaltswarnung anzeigen/ausblenden", - "keyboard_shortcuts.start": "„Auf geht's!“ öffnen", + "keyboard_shortcuts.start": "„Auf geht’s!“ öffnen", "keyboard_shortcuts.toggle_hidden": "Beitragstext hinter der Inhaltswarnung anzeigen/ausblenden", "keyboard_shortcuts.toggle_sensitivity": "Medien anzeigen/ausblenden", "keyboard_shortcuts.toot": "Neuen Beitrag erstellen", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 2eace137c1..6b4258a6bc 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -113,6 +113,7 @@ "column.direct": "Privataj mencioj", "column.directory": "Foliumi la profilojn", "column.domain_blocks": "Blokitaj domajnoj", + "column.favourites": "Stelumoj", "column.firehose": "Vivantaj fluoj", "column.follow_requests": "Petoj de sekvado", "column.home": "Hejmo", @@ -136,6 +137,7 @@ "compose.language.search": "Serĉi lingvojn...", "compose.published.body": "Afiŝo publikigita.", "compose.published.open": "Malfermi", + "compose.saved.body": "Afiŝo konservita.", "compose_form.direct_message_warning_learn_more": "Lerni pli", "compose_form.encryption_warning": "La afiŝoj en Mastodon ne estas tutvoje ĉifritaj. Ne kunhavigu tiklajn informojn ĉe Mastodon.", "compose_form.hashtag_warning": "Ĉi tiu afiŝo ne estos listigita en neniu kradvorto ĉar ĝi ne estas publika. Nur publikaj afiŝoj povas esti serĉitaj per kradvortoj.", @@ -180,6 +182,7 @@ "confirmations.mute.explanation": "Tio kaŝos la mesaĝojn de la uzanto kaj la mesaĝojn kiuj mencias rin, sed ri ankoraŭ rajtos vidi viajn mesaĝojn kaj sekvi vin.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", + "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun afiŝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.", "confirmations.reply.confirm": "Respondi", "confirmations.reply.message": "Respondi nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", @@ -548,6 +551,7 @@ "search.search_or_paste": "Serĉu aŭ algluu URL-on", "search_popout.quick_actions": "Rapidaj agoj", "search_popout.recent": "Lastaj serĉoj", + "search_popout.user": "uzanto", "search_results.accounts": "Profiloj", "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 5d32464ba1..5684ec4873 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -379,7 +379,7 @@ "lists.delete": "Borrar lista", "lists.edit": "Editar lista", "lists.edit.submit": "Cambiar título", - "lists.exclusive": "Ocultar estas publicaciones en inicio", + "lists.exclusive": "Ocultar estas publicaciones de inicio", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", "lists.replies_policy.followed": "Cualquier usuario seguido", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 4e8cd70938..c1b067cff8 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -15,13 +15,13 @@ "account.add_or_remove_from_list": "افزودن یا برداشتن از سیاهه‌ها", "account.badges.bot": "روبات", "account.badges.group": "گروه", - "account.block": "مسدود کردن ‎@{name}", - "account.block_domain": "مسدود کردن دامنهٔ {domain}", + "account.block": "انسداد ‎@{name}", + "account.block_domain": "انسداد دامنهٔ {domain}", "account.block_short": "انسداد", - "account.blocked": "مسدود شده", + "account.blocked": "مسدود", "account.browse_more_on_origin_server": "مرور بیش‌تر روی نمایهٔ اصلی", "account.cancel_follow_request": "رد کردن درخواست پی‌گیری", - "account.direct": "خصوصی از @{name} نام ببرید", + "account.direct": "اشارهٔ خصوصی به ‪@{name}‬", "account.disable_notifications": "آگاه کردن من هنگام فرسته‌های ‎@{name} را متوقّف کن", "account.domain_blocked": "دامنه مسدود شد", "account.edit_profile": "ویرایش نمایه", @@ -46,7 +46,7 @@ "account.link_verified_on": "مالکیت این پیوند در {date} بررسی شد", "account.locked_info": "این حساب خصوصی است. صاحبش تصمیم می‌گیرد که چه کسی پی‌گیرش باشد.", "account.media": "رسانه", - "account.mention": "نام‌بردن از ‎@{name}", + "account.mention": "اشاره به ‎@{name}", "account.moved_to": "{name} نشان داده که حساب جدیدش این است:", "account.mute": "خموشاندن ‎@{name}", "account.mute_notifications_short": "خموشی آگاهی‌ها", @@ -110,7 +110,7 @@ "column.blocks": "کاربران مسدود شده", "column.bookmarks": "نشانک‌ها", "column.community": "خط زمانی محلّی", - "column.direct": "خصوصی نام ببرید", + "column.direct": "اشاره‌های خصوصی", "column.directory": "مرور نمایه‌ها", "column.domain_blocks": "دامنه‌های مسدود شده", "column.favourites": "برگزیده‌ها", @@ -137,6 +137,7 @@ "compose.language.search": "جست‌وجوی زبان‌ها…", "compose.published.body": "فرسته منتشر شد.", "compose.published.open": "گشودن", + "compose.saved.body": "فرسته ذخیره شد.", "compose_form.direct_message_warning_learn_more": "بیشتر بدانید", "compose_form.encryption_warning": "فرسته‌های ماستودون رمزگذاری سرتاسری نشده‌اند. هیچ اطّلاعات حساسی را روی ماستودون هم‌رسانی نکنید.", "compose_form.hashtag_warning": "از آن‌جا که این فرسته عمومی نیست زیر هیچ برچسبی سیاهه نخواهد شد. تنها فرسته‌های عمومی می‌توانند با برچسب جست‌وجو شوند.", @@ -147,7 +148,7 @@ "compose_form.poll.duration": "مدت نظرسنجی", "compose_form.poll.option_placeholder": "گزینهٔ {number}", "compose_form.poll.remove_option": "برداشتن این گزینه", - "compose_form.poll.switch_to_multiple": "تبدیل به نظرسنجی چندگزینه‌ای", + "compose_form.poll.switch_to_multiple": "تغییر نظرسنجی برای اجازه به چندین گزینه", "compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تک‌گزینه‌ای", "compose_form.publish": "انتشار", "compose_form.publish_form": "انتشار", @@ -160,8 +161,8 @@ "compose_form.spoiler.unmarked": "افزودن هشدار محتوا", "compose_form.spoiler_placeholder": "هشدارتان را این‌جا بنویسید", "confirmation_modal.cancel": "لغو", - "confirmations.block.block_and_report": "مسدود کردن و گزارش", - "confirmations.block.confirm": "مسدود کردن", + "confirmations.block.block_and_report": "انسداد و گزارش", + "confirmations.block.confirm": "انسداد", "confirmations.block.message": "مطمئنید که می‌خواهید {name} را مسدود کنید؟", "confirmations.cancel_follow_request.confirm": "رد کردن درخواست", "confirmations.cancel_follow_request.message": "مطمئنید که می خواهید درخواست پی‌گیری {name} را لغو کنید؟", @@ -171,7 +172,7 @@ "confirmations.delete_list.message": "مطمئنید می‌خواهید این سیاهه را برای همیشه حذف کنید؟", "confirmations.discard_edit_media.confirm": "دور انداختن", "confirmations.discard_edit_media.message": "تغییرات ذخیره نشده‌ای در توضیحات یا پیش‌نمایش رسانه دارید. همگی نادیده گرفته شوند؟", - "confirmations.domain_block.confirm": "مسدود کردن تمام دامنه", + "confirmations.domain_block.confirm": "انسداد تمام دامنه", "confirmations.domain_block.message": "آیا جدی جدی می‌خواهید تمام دامنهٔ {domain} را مسدود کنید؟ در بیشتر موارد مسدود کردن یا خموشاندن چند حساب خاص کافی است و توصیه می‌شود. پس از این کار شما هیچ محتوایی را از این دامنه در خط زمانی عمومی یا آگاهی‌هایتان نخواهید دید. پی‌گیرانتان از این دامنه هم برداشته خواهند شد.", "confirmations.edit.confirm": "ویرایش", "confirmations.edit.message": "در صورت ویرایش، پیامی که در حال نوشتنش بودید از بین خواهد رفت. می‌خواهید ادامه دهید؟", @@ -181,6 +182,7 @@ "confirmations.mute.explanation": "این کار فرسته‌های آن‌ها و فرسته‌هایی را که از آن‌ها نام برده پنهان می‌کند، ولی آن‌ها همچنان اجازه دارند فرسته‌های شما را ببینند و شما را پی‌گیری کنند.", "confirmations.mute.message": "مطمئنید می‌خواهید {name} را بخموشانید؟", "confirmations.redraft.confirm": "حذف و بازنویسی", + "confirmations.redraft.message": "مطمئنید که می‌خواهید این فرسته را حذف کنید و از نو بنویسید؟ با این کار تقویت‌ها و پسندهایش از دست رفته و پاسخ‌ها به آن بی‌مرجع می‌شود.", "confirmations.reply.confirm": "پاسخ", "confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. می‌خواهید ادامه دهید؟", "confirmations.unfollow.confirm": "پی‌نگرفتن", @@ -294,16 +296,23 @@ "hashtag.column_settings.tag_mode.any": "هرکدام از این‌ها", "hashtag.column_settings.tag_mode.none": "هیچ‌کدام از این‌ها", "hashtag.column_settings.tag_toggle": "افزودن برچسب‌هایی بیشتر به این ستون", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} مشارکت کننده} other {{counter} مشارکت کننده}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}} امروز", "hashtag.follow": "پی‌گرفتن برچسب", "hashtag.unfollow": "پی‌نگرفتن برچسب", + "hashtags.and_other": "…و {count, plural, other {# بیش‌تر}}", "home.actions.go_to_explore": "ببینید چه داغ است", "home.actions.go_to_suggestions": "یافتن افراد برای پی‌گیری", "home.column_settings.basic": "پایه‌ای", "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", + "home.explore_prompt.body": "خوراک خانگیتان ترکیبی از فرسته‌ها از برچسب‌هایی که برای پی‌گیری گزیده‌اید، افرادی که پی می‌گیرید و فرسته‌هایی که تقویت می‌کنند را خواهد داشت. اگر خیلی خلوت به نظر می‌رسد،‌ شاید بخواهید:", "home.explore_prompt.title": "این پایگاه خانگیتان در ماستودون است.", "home.hide_announcements": "نهفتن اعلامیه‌ها", + "home.pending_critical_update.body": "لطفاً کارساز ماستودونتان را در نخستین فرصت به‌روز کنید!", + "home.pending_critical_update.link": "دیدن به‌روز رسانی‌ها", + "home.pending_critical_update.title": "به‌روز رسانی امنیتی بحرانی موجود است!", "home.show_announcements": "نمایش اعلامیه‌ها", "interaction_modal.description.favourite": "با حسابی روی ماستودون می‌توانید این فرسته را برگزیده تا نگارنده بداند قدردانش هستید و برای آینده ذخیره‌اش می‌کنید.", "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", @@ -314,6 +323,8 @@ "interaction_modal.no_account_yet": "در ماستودون نیست؟", "interaction_modal.on_another_server": "روی کارسازی دیگر", "interaction_modal.on_this_server": "روی این کارساز", + "interaction_modal.sign_in": "شما در این کارساز وارد نشده‌اید. حسابتان کجا میزبانی شده؟", + "interaction_modal.sign_in_hint": "نکته: میزبانتان، پایگاه وبیست که رویش ثبت‌نام کرده‌اید. اگر به خاطر نمی‌آورید، به رایانامهٔ خوش‌آمد در صندوق ورودیتان بنگرید. همچنین می‌توانید نام کاربری کاملتان (چون ‪@Mastodon@mastodon.social‬) را وارد کنید!", "interaction_modal.title.favourite": "فرسته‌های برگزیدهٔ {name}", "interaction_modal.title.follow": "پیگیری {name}", "interaction_modal.title.reblog": "تقویت فرستهٔ {name}", @@ -330,6 +341,7 @@ "keyboard_shortcuts.direct": "باز کردن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", + "keyboard_shortcuts.favourite": "پسندیدن فرسته", "keyboard_shortcuts.favourites": "گشودن فهرست برگزیده‌ها", "keyboard_shortcuts.federated": "گشودن خط زمانی همگانی", "keyboard_shortcuts.heading": "میان‌برهای صفحه‌کلید", @@ -337,7 +349,7 @@ "keyboard_shortcuts.hotkey": "میان‌بر", "keyboard_shortcuts.legend": "نمایش این نشانه", "keyboard_shortcuts.local": "گشودن خط زمانی محلّی", - "keyboard_shortcuts.mention": "نام‌بردن نویسنده", + "keyboard_shortcuts.mention": "اشاره به نویسنده", "keyboard_shortcuts.muted": "گشودن فهرست کاربران خموش", "keyboard_shortcuts.my_profile": "گشودن نمایه‌تان", "keyboard_shortcuts.notifications": "گشودن ستون آگاهی‌ها", @@ -361,7 +373,7 @@ "lightbox.previous": "قبلی", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", "limited_account_hint.title": "این نمایه از سوی ناظم‌های {domain} پنهان شده.", - "link_preview.author": "بر اساس {name}", + "link_preview.author": "از {name}", "lists.account.add": "افزودن به سیاهه", "lists.account.remove": "برداشتن از سیاهه", "lists.delete": "حذف سیاهه", @@ -402,6 +414,7 @@ "navigation_bar.lists": "سیاهه‌ها", "navigation_bar.logout": "خروج", "navigation_bar.mutes": "کاربران خموشانده", + "navigation_bar.opened_in_classic_interface": "فرسته‌ها، حساب‌ها و دیگر صفحه‌های خاص به طور پیش‌گزیده در میانای وب کلاسیک گشوده می‌شوند.", "navigation_bar.personal": "شخصی", "navigation_bar.pins": "فرسته‌های سنجاق شده", "navigation_bar.preferences": "ترجیحات", @@ -411,11 +424,11 @@ "not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.", "notification.admin.report": "{name}، {target} را گزارش داد", "notification.admin.sign_up": "{name} ثبت نام کرد", - "notification.favourite": "{name} نوشتهٔ شما را پسندید", + "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.follow": "‫{name}‬ پی‌گیرتان شد", - "notification.follow_request": "{name} می‌خواهد پی‌گیر شما باشد", - "notification.mention": "‫{name}‬ از شما نام برد", - "notification.own_poll": "نظرسنجی شما به پایان رسید", + "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", + "notification.mention": "‫{name}‬ به شما اشاره کرد", + "notification.own_poll": "نظرسنجیتان پایان یافت", "notification.poll": "نظرسنجی‌ای که در آن رأی دادید به پایان رسیده است", "notification.reblog": "‫{name}‬ فرسته‌تان را تقویت کرد", "notification.status": "{name} چیزی فرستاد", @@ -431,7 +444,7 @@ "notifications.column_settings.filter_bar.show_bar": "نمایش نوار پالایه", "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", - "notifications.column_settings.mention": "نام‌بردن‌ها:", + "notifications.column_settings.mention": "اشاره‌ها:", "notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.push": "آگاهی‌های ارسالی", "notifications.column_settings.reblog": "تقویت‌ها:", @@ -445,7 +458,7 @@ "notifications.filter.boosts": "تقویت‌ها", "notifications.filter.favourites": "برگزیده‌ها", "notifications.filter.follows": "پی‌گرفتگان", - "notifications.filter.mentions": "نام‌بردن‌ها", + "notifications.filter.mentions": "اشاره‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", "notifications.grant_permission": "اعطای مجوز.", @@ -480,10 +493,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "onboarding.tips.2fa": "آیا میدانستید؟ شما می‌توانید با رفتن به تنظیمات حساب و فعال کردن احراز هویت دوعاملی، حساب خود را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه شما کار مي‌کند و نیازی به شماره تلفن ندارد!", - "onboarding.tips.accounts_from_other_servers": "آیا می‌دانستید؟ چون ماستودون نامتمرکز است، بعضی از پروفایل‌هایی که با آنها برخورد می‌کنید درواقع روی کارساز هایی متفاوت از کارساز شما میزبانی می‌شوند. و شما همچنان می‌توانید با آنها به شکل راحت و روان تعامل کنید! کارساز آن‌ها در نیمه دوم نام کاربری‌شان است!", - "onboarding.tips.migration": "آیا می‌دانستید؟ اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به یک کارساز ماستودون دیگر مهاجرت کنید. شما حتی می‌توانید کارساز خودتان را میزبانی کنید!", - "onboarding.tips.verification": "آیا می‌دانستید؟ شما می‌توانید حساب خود را با قراردادن پیوندی به نمایه ماستودون‌تان روی وبسایت خود، و اضافه کردن وبسایت‌تان به نمایه خود تایید کنید. بدون نیاز به هیچ کارمزد یا سندی!", + "onboarding.tips.2fa": "آیا می‌دانستید؟ می‌توانید با پریایی هویت‌سنجی دو عاملی در تنظیمات حساب، حسابتان را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه کار کرده و نیازی به شماره تلفن ندارد!", + "onboarding.tips.accounts_from_other_servers": "آیا می‌دانستید؟ از آن‌جا که ماستودون نامتمرکز است، برخی نمایه‌ها که به آن‌ها برمی‌خورید روی کارسازهایی متفاوت از شما میزبانی می‌شوند و باز هم می‌توانید بدون مشکل با آن‌ها تعامل داشته باشید! کارسازشان در نیمه دوم نام کاربریشان است!", + "onboarding.tips.migration": "آیا می‌دانستید؟ اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به کارساز ماستودون دیگری مهاجرت کنید. حتا می‌توانید کارساز خودتان را میزبانی کنید!", + "onboarding.tips.verification": "آیا می‌دانستید؟ می‌توانید حسابتان را با گذاشتن پیوندی به نمایهٔ ماستودونتان روی پایگاه وب خود و افزودن پایگاه وبتان به نمایه‌تان تأیید کنید. بدون نیاز به هیچ کارمزد یا سندی!", "password_confirmation.exceeds_maxlength": "تأییدیه گذرواژه از حداکثر طول گذرواژه بیشتر است", "password_confirmation.mismatching": "تایید گذرواژه با گذرواژه مطابقت ندارد", "picture_in_picture.restore": "برگرداندن", @@ -523,8 +536,9 @@ "relative_time.seconds": "{number} ثانیه", "relative_time.today": "امروز", "reply_indicator.cancel": "لغو", - "report.block": "مسدود کردن", + "report.block": "انسداد", "report.block_explanation": "شما فرسته‌هایشان را نخواهید دید. آن‌ها نمی‌توانند فرسته‌هایتان را ببینند یا شما را پی‌بگیرند. آنها می‌توانند بگویند که مسدود شده‌اند.", + "report.categories.legal": "حقوقی", "report.categories.other": "غیره", "report.categories.spam": "هرزنامه", "report.categories.violation": "محتوا یک یا چند قانون کارساز را نقض می‌کند", @@ -576,12 +590,18 @@ "search.quick_action.open_url": "باز کردن پیوند در ماستودون", "search.quick_action.status_search": "فرسته‌های جور با {x}", "search.search_or_paste": "جست‌وجو یا جایگذاری نشانی", + "search_popout.full_text_search_disabled_message": "روی {domain} موجود نیست.", + "search_popout.language_code": "کد زبان ایزو", + "search_popout.options": "گزینه‌های جست‌وجو", "search_popout.quick_actions": "کنش‌های سریع", "search_popout.recent": "جست‌وجوهای اخیر", + "search_popout.specific_date": "تاریخ مشخص", + "search_popout.user": "کاربر", "search_results.accounts": "نمایه‌ها", "search_results.all": "همه", "search_results.hashtags": "برچسب‌ها", "search_results.nothing_found": "چیزی برای این عبارت جست‌وجو یافت نشد", + "search_results.see_all": "دیدن همه", "search_results.statuses": "فرسته‌ها", "search_results.title": "جست‌وجو برای {q}", "server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کرده‌اند (کاربران فعّال ماهانه)", @@ -597,15 +617,15 @@ "status.admin_account": "گشودن واسط مدیریت برای ‎@{name}", "status.admin_domain": "گشودن واسط مدیریت برای ‎{domain}", "status.admin_status": "گشودن این فرسته در واسط مدیریت", - "status.block": "مسدود کردن ‎@{name}", + "status.block": "انسداد ‎@{name}", "status.bookmark": "نشانک", "status.cancel_reblog_private": "ناتقویت", "status.cannot_reblog": "این فرسته قابل تقویت نیست", "status.copy": "رونوشت از پیوند فرسته", "status.delete": "حذف", "status.detailed_status": "نمایش کامل گفتگو", - "status.direct": "خصوصی به @{name} اشاره کنید", - "status.direct_indicator": "اشاره خصوصی", + "status.direct": "اشارهٔ خصوصی به ‪@{name}‬", + "status.direct_indicator": "اشارهٔ خصوصی", "status.edit": "ویرایش", "status.edited": "ویرایش شده در {date}", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", @@ -620,7 +640,7 @@ "status.media.open": "کلیک برای گشودن", "status.media.show": "کلیک برای نمایش", "status.media_hidden": "رسانهٔ نهفته", - "status.mention": "نام‌بردن از ‎@{name}", + "status.mention": "اشاره به ‎@{name}", "status.more": "بیشتر", "status.mute": "خموشاندن ‎@{name}", "status.mute_conversation": "خموشاندن گفت‌وگو", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 16fca0a288..9471918543 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -20,7 +20,7 @@ "account.block_short": "Bloquer", "account.blocked": "Bloqué·e", "account.browse_more_on_origin_server": "Parcourir davantage sur le profil original", - "account.cancel_follow_request": "Retirer la demande d’abonnement", + "account.cancel_follow_request": "Annuler le suivi", "account.direct": "Mention privée @{name}", "account.disable_notifications": "Ne plus me notifier quand @{name} publie quelque chose", "account.domain_blocked": "Domaine bloqué", @@ -50,7 +50,7 @@ "account.moved_to": "{name} a indiqué que son nouveau compte est maintenant :", "account.mute": "Masquer @{name}", "account.mute_notifications_short": "Désactiver les alertes", - "account.mute_short": "Masquer", + "account.mute_short": "Mettre en sourdine", "account.muted": "Masqué·e", "account.no_bio": "Aucune description fournie.", "account.open_original_page": "Ouvrir la page d'origine", @@ -108,7 +108,7 @@ "closed_registrations_modal.title": "Inscription sur Mastodon", "column.about": "À propos", "column.blocks": "Comptes bloqués", - "column.bookmarks": "Signets", + "column.bookmarks": "Marque-pages", "column.community": "Fil public local", "column.direct": "Mentions privées", "column.directory": "Parcourir les profils", @@ -149,9 +149,9 @@ "compose_form.poll.option_placeholder": "Choix {number}", "compose_form.poll.remove_option": "Supprimer ce choix", "compose_form.poll.switch_to_multiple": "Changer le sondage pour autoriser plusieurs choix", - "compose_form.poll.switch_to_single": "Changer le sondage pour autoriser qu'un seul choix", + "compose_form.poll.switch_to_single": "Modifier le sondage pour autoriser qu'un seul choix", "compose_form.publish": "Publier", - "compose_form.publish_form": "Publier", + "compose_form.publish_form": "Nouvelle publication", "compose_form.publish_loud": "{publish} !", "compose_form.save_changes": "Enregistrer les modifications", "compose_form.sensitive.hide": "{count, plural, one {Marquer le média comme sensible} other {Marquer les médias comme sensibles}}", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index fa202a5e86..ea1ce59e84 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -683,9 +683,9 @@ "time_remaining.moments": "Cha doir e ach greiseag", "time_remaining.seconds": "{number, plural, one {# diog} two {# dhiog} few {# diogan} other {# diog}} air fhàgail", "timeline_hint.remote_resource_not_displayed": "Cha dèid {resource} o fhrithealaichean eile a shealltainn.", - "timeline_hint.resources.followers": "Luchd-leantainn", - "timeline_hint.resources.follows": "A’ leantainn", - "timeline_hint.resources.statuses": "Postaichean nas sine", + "timeline_hint.resources.followers": "luchd-leantainn", + "timeline_hint.resources.follows": "an fheadhainn gan leantainn", + "timeline_hint.resources.statuses": "postaichean nas sine", "trends.counter_by_accounts": "{count, plural, one {{counter} neach} two {{counter} neach} few {{counter} daoine} other {{counter} duine}} {days, plural, one {san {days} latha} two {san {days} latha} few {sna {days} làithean} other {sna {days} latha}} seo chaidh", "trends.trending_now": "A’ treandadh an-dràsta", "ui.beforeunload": "Caillidh tu an dreachd agad ma dh’fhàgas tu Mastodon an-dràsta.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 2919c74b48..b5d9e50f65 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -135,7 +135,7 @@ "community.column_settings.remote_only": "Só remoto", "compose.language.change": "Elixe o idioma", "compose.language.search": "Buscar idiomas...", - "compose.published.body": "Publicación publicada.", + "compose.published.body": "Mensaxe publicada.", "compose.published.open": "Abrir", "compose.saved.body": "Publicación gardada.", "compose_form.direct_message_warning_learn_more": "Saber máis", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 37c3990e49..5b37324f7d 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -487,7 +487,7 @@ "onboarding.start.title": "해내셨군요!", "onboarding.steps.follow_people.body": "흥미로운 사람들을 팔로우하는 것은 마스토돈의 전부입니다.", "onboarding.steps.follow_people.title": "내게 맞는 홈 피드 꾸미기", - "onboarding.steps.publish_status.body": "글, 사진, 영상, 투표 또는 {emoji}와 함께 세상에 인사해보세요.", + "onboarding.steps.publish_status.body": "글, 사진, 영상, 설문 또는 {emoji}와 함께 세상에 인사해보세요.", "onboarding.steps.publish_status.title": "첫번째 게시물 쓰기", "onboarding.steps.setup_profile.body": "의미있는 프로필을 작성해 상호작용을 늘려보세요.", "onboarding.steps.setup_profile.title": "프로필 꾸미기", @@ -695,7 +695,7 @@ "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "이미지, 영상, 오디오 파일 추가", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", - "upload_error.poll": "파일 업로드는 투표와 함께 쓸 수 없습니다.", + "upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없어요.", "upload_form.audio_description": "청각 장애인을 위한 설명", "upload_form.description": "시각장애인을 위한 설명", "upload_form.description_missing": "설명이 추가되지 않음", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 4bf1979b9d..87a2af4f20 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -379,7 +379,7 @@ "lists.delete": "Lijst verwijderen", "lists.edit": "Lijst bewerken", "lists.edit.submit": "Titel veranderen", - "lists.exclusive": "Verberg deze berichten op je startpagina", + "lists.exclusive": "Verberg deze berichten op je starttijdlijn", "lists.new.create": "Lijst toevoegen", "lists.new.title_placeholder": "Naam nieuwe lijst", "lists.replies_policy.followed": "Elke gevolgde gebruiker", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a670fd2e4f..449fdfb1a1 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -310,6 +310,7 @@ "home.explore_prompt.body": "Tidslinjen din inneholder en blanding av innlegg fra emneknagger du har valgt å følge, personene du har valgt å følge, og innleggene de fremhever. Hvis det føles for stille, kan det være lurt å:", "home.explore_prompt.title": "Dette er hjemmet ditt i Mastodon.", "home.hide_announcements": "Skjul kunngjøring", + "home.pending_critical_update.body": "Vennligst oppdater Mastodon-serveren din så snart som mulig!", "home.pending_critical_update.link": "Se oppdateringer", "home.pending_critical_update.title": "Kritisk sikkerhetsoppdatering er tilgjengelig!", "home.show_announcements": "Vis kunngjøring", @@ -413,6 +414,7 @@ "navigation_bar.lists": "Lister", "navigation_bar.logout": "Logg ut", "navigation_bar.mutes": "Dempede brukere", + "navigation_bar.opened_in_classic_interface": "Innlegg, kontoer og andre spesifikke sider åpnes som standard i det klassiske webgrensesnittet.", "navigation_bar.personal": "Personlig", "navigation_bar.pins": "Festede innlegg", "navigation_bar.preferences": "Innstillinger", @@ -588,6 +590,7 @@ "search.quick_action.open_url": "Åpne URL i Mastodon", "search.quick_action.status_search": "Innlegg som samsvarer med {x}", "search.search_or_paste": "Søk eller lim inn URL", + "search_popout.full_text_search_disabled_message": "Ikke tilgjengelig på {domain}.", "search_popout.language_code": "ISO språkkode", "search_popout.options": "Alternativer for søk", "search_popout.quick_actions": "Hurtighandlinger", @@ -598,6 +601,7 @@ "search_results.all": "Alle", "search_results.hashtags": "Emneknagger", "search_results.nothing_found": "Fant ikke noe for disse søkeordene", + "search_results.see_all": "Se alle", "search_results.statuses": "Innlegg", "search_results.title": "Søk etter {q}", "server_banner.about_active_users": "Personer som har brukt denne serveren i løpet av de siste 30 dagene (aktive brukere månedlig)", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 6c08f899a4..bd1252b47f 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -47,7 +47,7 @@ "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", - "account.moved_to": "{name} uvádza, že jeho/jej nový účet je:", + "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", "account.mute": "Nevšímaj si @{name}", "account.mute_notifications_short": "Stíš oboznámenia", "account.mute_short": "Nevšímaj si", @@ -303,6 +303,7 @@ "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", + "home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.", "home.hide_announcements": "Skry oboznámenia", "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", "home.pending_critical_update.link": "Pozri aktualizácie", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 5c2417274a..3a7e75b912 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -341,8 +341,8 @@ "keyboard_shortcuts.direct": "mở mục nhắn riêng", "keyboard_shortcuts.down": "di chuyển xuống dưới danh sách", "keyboard_shortcuts.enter": "viết tút mới", - "keyboard_shortcuts.favourite": "Thích tút", - "keyboard_shortcuts.favourites": "Mở lượt thích", + "keyboard_shortcuts.favourite": "thích tút", + "keyboard_shortcuts.favourites": "mở lượt thích", "keyboard_shortcuts.federated": "mở mạng liên hợp", "keyboard_shortcuts.heading": "Danh sách phím tắt", "keyboard_shortcuts.home": "mở trang chính", @@ -557,7 +557,7 @@ "report.reasons.dislike": "Tôi không thích nó", "report.reasons.dislike_description": "Đó không phải là thứ gì mà bạn muốn thấy", "report.reasons.legal": "Vi phạm pháp luật", - "report.reasons.legal_description": "Bạn tin rằng nó vi phạm pháp luật ở nơi đặt máy chủ hoặc nước bạn", + "report.reasons.legal_description": "Vi phạm pháp luật ở nơi đặt máy chủ hoặc nước bạn", "report.reasons.other": "Một lý do khác", "report.reasons.other_description": "Vấn đề không nằm trong những mục trên", "report.reasons.spam": "Đây là spam", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 51c8e3f374..c311b5ae33 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -137,7 +137,7 @@ "compose.language.search": "搜索语言...", "compose.published.body": "嘟文已发布。", "compose.published.open": "打开", - "compose.saved.body": "帖子已保存。", + "compose.saved.body": "嘟文已保存。", "compose_form.direct_message_warning_learn_more": "详细了解", "compose_form.encryption_warning": "Mastodon 上的嘟文未经端到端加密。请勿在 Mastodon 上分享敏感信息。", "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。", @@ -199,7 +199,7 @@ "directory.recently_active": "最近活跃", "disabled_account_banner.account_settings": "账号设置", "disabled_account_banner.text": "您的账号 {disabledAccount} 目前已被禁用。", - "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公共嘟文。", + "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公开嘟文。", "dismissable_banner.dismiss": "忽略", "dismissable_banner.explore_links": "这些新闻故事正被本站和分布式网络上其他站点的用户谈论。", "dismissable_banner.explore_statuses": "这些是目前在社交网络上引起关注的嘟文。嘟文的喜欢和转嘟次数越多,排名越高。", @@ -414,7 +414,7 @@ "navigation_bar.lists": "列表", "navigation_bar.logout": "退出登录", "navigation_bar.mutes": "已隐藏的用户", - "navigation_bar.opened_in_classic_interface": "帖子、账户和其他特定页面默认在经典网页界面中打开。", + "navigation_bar.opened_in_classic_interface": "嘟文、账户和其他特定页面默认在经典网页界面中打开。", "navigation_bar.personal": "个人", "navigation_bar.pins": "置顶嘟文", "navigation_bar.preferences": "首选项", @@ -473,7 +473,7 @@ "onboarding.action.back": "带我返回", "onboarding.actions.back": "带我返回", "onboarding.actions.go_to_explore": "看看有什么新鲜事", - "onboarding.actions.go_to_home": "转到主页订阅流", + "onboarding.actions.go_to_home": "转到主页动态", "onboarding.compose.template": "你好 #Mastodon!", "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。您可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!", @@ -575,7 +575,7 @@ "report.thanks.title": "不想看到这个内容?", "report.thanks.title_actionable": "感谢提交举报,我们将会进行处理。", "report.unfollow": "取消关注 @{name}", - "report.unfollow_explanation": "你正在关注此账户。如果要想在你的主页上不再看到他们的帖子,取消对他们的关注即可。", + "report.unfollow_explanation": "你正在关注此账户。如果不想继续在主页看到他们的嘟文,取消对他们的关注即可。", "report_notification.attached_statuses": "附上 {count} 条嘟文", "report_notification.categories.legal": "法律义务", "report_notification.categories.other": "其他", @@ -588,7 +588,7 @@ "search.quick_action.go_to_account": "前往 {x} 个人资料", "search.quick_action.go_to_hashtag": "前往标签 {x}", "search.quick_action.open_url": "在 Mastodon 中打开网址", - "search.quick_action.status_search": "匹配 {x} 的帖子", + "search.quick_action.status_search": "匹配 {x} 的嘟文", "search.search_or_paste": "搜索或输入网址", "search_popout.full_text_search_disabled_message": "在 {domain} 不可用", "search_popout.language_code": "ISO语言代码", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 8725c35e89..e5de8daa9d 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -600,6 +600,7 @@ "search_results.all": "全部", "search_results.hashtags": "標籤", "search_results.nothing_found": "找不到與搜尋字詞相關的內容", + "search_results.see_all": "顯示全部", "search_results.statuses": "文章", "search_results.title": "搜尋 {q}", "server_banner.about_active_users": "在最近 30 天內內使用此伺服器的人 (月活躍用戶)", diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 694bdcc9c5..2cdf87d8fd 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -14,7 +14,7 @@ ca: following: Seguint instance_actor_flash: Aquest compte és un actor virtual usat per a representar el mateix servidor i no cap usuari individual. Es fa servir per a federar i no s'hauria d'esborrar. last_active: última activitat - link_verified_on: La propietat d'aquest enllaç s'ha verificat el %{date} + link_verified_on: La propietat d'aquest enllaç va quedar verificada el %{date} nothing_here: No hi ha res aquí! pin_errors: following: Has d'estar seguint la persona que vulguis avalar @@ -1464,7 +1464,7 @@ ca: action: Respon body: "%{name} t'ha mencionat en:" subject: "%{name} t'ha mencionat" - title: Menció nova + title: Nova menció poll: subject: Ha finalitzat l'enquesta de %{name} reblog: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 95c980a6d4..03ec9708d5 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -315,6 +315,7 @@ cs: unpublish: Skrýt unpublished_msg: Zveřejněné oznámení bylo úspěšně skryto! updated_msg: Oznámení bylo úspěšně aktualizováno! + critical_update_pending: Čeká se na kritickou aktualizaci custom_emojis: assign_category: Přiřadit kategorii by_domain: Doména @@ -396,6 +397,15 @@ cs: undo: Zakázat federaci s doménou domain_blocks: add_new: Přidat novou blokaci domény + confirm_suspension: + cancel: Zrušit + confirm: Pozastavit + permanent_action: Zrušení pozastavení neobnoví žádná data ani vztah. + preamble_html: Chystáte se pozastavit %{domain} a jeho poddomény. + remove_all_data: Tímto odstraníte z vašeho serveru všechen obsah, média a profilové údaje účtů této domény. + stop_communication: Váš server přestane komunikovat s těmito servery. + title: Potvrďte blokování domény %{domain} + undo_relationships: Toto vrátí jakýkoliv vztah sledování mezi účty na těchto serverech a vaším. created_msg: Blokace domény se právě vyřizuje destroyed_msg: Blokace domény byla odvolána domain: Doména @@ -759,6 +769,9 @@ cs: branding: preamble: Značka vašeho serveru jej odlišuje od ostatních serverů v síti. Tyto informace se mohou zobrazovat v různých prostředích, například ve webovém rozhraní Mastodonu, v nativních aplikacích, v náhledech odkazů na jiných webových stránkách a v aplikacích pro zasílání zpráv atd. Z tohoto důvodu je nejlepší, aby tyto informace byly jasné, krátké a stručné. title: Značka + captcha_enabled: + desc_html: Toto spoléhá na externí skripty z hCaptcha, což může být budit obavy o bezpečnost a soukromí. Navíc to může způsobit, že proces registrace bude pro některé osoby (zejména se zdravotním postižením) hůře přístupný. Z těchto důvodů zvažte alternativní přístup, jako je schvalování registrace nebo pozvánky. + title: Vyžadovat po nových uživatelích, aby vyřešili CAPTCHU pro potvrzení jejich účtu content_retention: preamble: Určuje, jak je obsah generovaný uživatelem uložen v Mastodonu. title: Uchovávání obsahu @@ -786,9 +799,24 @@ cs: approved: Pro registraci je vyžadováno schválení none: Nikdo se nemůže registrovat open: Kdokoliv se může registrovat + security: + authorized_fetch: Vyžadovat autentizaci od federovaných serverů + authorized_fetch_overridden_hint: Momentálně nemůžete změnit toto nastavení, protože je přepsáno proměnnou prostředí. + title: Nastavení serveru site_uploads: delete: Odstranit nahraný soubor destroyed_msg: Upload stránky byl úspěšně smazán! + software_updates: + critical_update: Kritické — aktualizujte, prosím, co nejdříve + documentation_link: Zjistit více + release_notes: Poznámky k vydání + title: Dostupné aktualizace + type: Typ + types: + major: Hlavní vydání + minor: Menší vydání + patch: Záplatové vydání — opravy chyb a rychle aplikovatelné změny + version: Verze statuses: account: Autor application: Aplikace @@ -829,6 +857,20 @@ cs: system_checks: database_schema_check: message_html: Na spuštění čekají databázové migrace. Nechte je prosím proběhnout pro zajištění očekávaného chování aplikace + elasticsearch_health_red: + message_html: Elasticsearch cluster je nezdravý (červený stav), vyhledávací funkce jsou nedostupné + elasticsearch_health_yellow: + message_html: Elasticsearch cluster je nezdravý (žlutý stav), možná budete chtít prozkoumat důvod + elasticsearch_index_mismatch: + message_html: Mapování indexu Elasticsearch jsou zastaralá. Prosím spusťte tootctl search deploy --only=%{value} + elasticsearch_preset: + action: Prohlédnout dokumentaci + message_html: Váš Elasticsearch cluster má více než jeden node, ale Mastodon není nakonfigurován pro jejich používání. + elasticsearch_preset_single_node: + action: Zobrazit dokumentaci + message_html: Váš Elasticsearch cluster má pouze jeden uzel, ES_PRESET by měl být nastaven na single_node_cluster. + elasticsearch_reset_chewy: + message_html: Váš system index v Elasticsearch je kvůli změně nastavení zastaralý. Pro aktualizaci prosím spusťte tootctl search deploy --reset-chewy. elasticsearch_running_check: message_html: Nelze se připojit k Elasticsearch. Prosím zkontrolujte, že běží, nebo vypněte fulltextové vyhledávání elasticsearch_version_check: @@ -839,6 +881,12 @@ cs: message_html: Nedefinovali jste žádná pravidla serveru. sidekiq_process_check: message_html: Pro %{value} frontu/fronty neběží žádný Sidekiq proces. Zkontrolujte prosím svou Sidekiq konfiguraci + software_version_critical_check: + action: Zobrazit dostupné aktualizace + message_html: K dispozici je kritická aktualizace Mastodonu, prosím aktualizujte co nejrychleji. + software_version_patch_check: + action: Zobrazit dostupné aktualizace + message_html: Je dostupná opravná aktualizace Mastodonu. upload_check_privacy_error: action: Pro více informací se podívejte zde message_html: "Váš webový server je špatně nakonfigurován. Soukromí vašich uživatelů je ohroženo." @@ -960,6 +1008,9 @@ cs: body: 'Uživatel %{target} se odvolává proti rozhodnutí moderátora %{action_taken_by} z %{date}, kterým bylo %{type}. Napsal:' next_steps: Můžete schválit odvolání pro vrácení rozhodnutí moderátora, nebo to ignorovat. subject: Uživatel %{username} se odvolává proti rozhodnutí moderátora na %{instance} + new_critical_software_updates: + body: Byly vydány nové kritické verze Mastodonu, možná budete chtít aktualizovat co nejdříve! + subject: Pro %{instance} jsou dostupné kritické aktualizace Mastodonu! new_pending_account: body: Detaily nového účtu jsou uvedeny níže. Tuto žádost můžete schválit nebo zamítnout. subject: Nový účet na serveru %{instance} čekající na posouzení (%{username}) @@ -967,6 +1018,9 @@ cs: body: Uživatel %{reporter} nahlásil uživatele %{target} body_remote: Někdo z domény %{domain} nahlásil uživatele %{target} subject: Nové hlášení pro %{instance} (#%{id}) + new_software_updates: + body: Byly vydány nové verze Mastodonu, možná budete chtít aktualizovat! + subject: Pro %{instance} jsou dostupné nové verze Mastodonu! new_trends: body: 'Následující položky vyžadují posouzení, než mohou být zobrazeny veřejně:' new_trending_links: @@ -1000,6 +1054,7 @@ cs: notification_preferences: Změnit předvolby e-mailů salutation: "%{name}," settings: 'Změnit předvolby e-mailů: %{link}' + unsubscribe: Přestat odebírat view: 'Zobrazit:' view_profile: Zobrazit profil view_status: Zobrazit příspěvek @@ -1013,6 +1068,10 @@ cs: your_token: Váš přístupový token auth: apply_for_account: Požádat o účet + captcha_confirmation: + help_html: Pokud máte problémy s řešením CAPTCHA, můžete se s námi spojit prostřednictvím %{email} a můžeme vám pomoci. + hint_html: Ještě jedna věc! Musíme potvrdit, že jste člověk (to proto, abychom drželi stranou spam!). Vyřešte CAPTCHA níže a klikněte na "Pokračovat". + title: Bezpečnostní kontrola confirmations: wrong_email_hint: Pokud není e-mail správný, můžete si ho změnit v nastavení účtu. delete_account: Odstranit účet @@ -1049,8 +1108,11 @@ cs: rules: accept: Přijmout back: Zpět + invited_by: 'Můžete se připojit k %{domain} díky pozvánce, kterou jste obdrželi od:' preamble: Tohle nastavují a prosazují moderátoři %{domain}. + preamble_invited: Než budete pokračovat, vezměte prosím v úvahu základní pravidla stanovená moderátory %{domain}. title: Některá základní pravidla. + title_invited: Byl/a jsi pozván/a. security: Zabezpečení set_new_password: Nastavit nové heslo setup: @@ -1151,6 +1213,10 @@ cs: your_appeal_rejected: Vaše odvolání bylo zamítnuto domain_validator: invalid_domain: není platné doménové jméno + edit_profile: + basic_information: Základní informace + hint_html: "Nastavte si, co lidé uvidí na vašem veřejném profilu a vedle vašich příspěvků. Ostatní lidé vás budou spíše sledovat a komunikovat s vámi, když budete mít vyplněný profil a profilový obrázek." + other: Další errors: '400': Žádost, kterou jste odeslali, byla neplatná nebo poškozená. '403': Nejste oprávněni tuto stránku zobrazit. @@ -1306,6 +1372,7 @@ cs: bookmarks: Záložky domain_blocking: Seznam blokovaných domén following: Seznam sledovaných + lists: Seznamy muting: Seznam ignorovaných upload: Nahrát invites: @@ -1461,12 +1528,22 @@ cs: expired: Anketa již skončila invalid_choice: Zvolená možnost hlasování neexistuje over_character_limit: nesmí být žádná delší než %{max} znaků + self_vote: Nemůžete hlasovat ve svých vlastních anketách too_few_options: musí mít více než jednu položku too_many_options: nesmí obsahovat více než %{max} položek preferences: other: Ostatní posting_defaults: Výchozí možnosti psaní public_timelines: Veřejné časové osy + privacy: + hint_html: "Nastavte si, jak chcete, aby šlo váš profil a vaše příspěvky nalézt. Řada funkcí v Mastodonu vám může po zapnutí pomoci získat širší publikum. Věnujte chvíli kontrole těchto nastavení, aby vyhovovala vašim potřebám." + privacy: Soukromí + privacy_hint_html: Nastavte si, kolik toho chcete zveřejnit ve prospěch ostatních. Lidé objevují zajímavé profily a skvělé aplikace procházením sledovaných ostatních lidí i tím, že vidí, z jakých aplikací ostatní posílají příspěvky, vy se však můžete rozhodnout tyto údaje skrýt. + reach: Dosah + reach_hint_html: Nastavte si, zda chcete být objeveni a sledováni novými lidmi. Chcete, aby se vaše příspěvky objevovaly na obrazovce Objevit? Chcete, aby vás další lidé viděli ve svých doporučeních ke sledování? Chcete přijímat všechny nové sledující automaticky nebo mít podrobnou kontrolu nad každým z nich? + search: Vyhledávání + search_hint_html: Mějte pod kontrolou, jak chcete být nalezeni. Chcete, aby vás lidé našli podle toho, o čem jste veřejně psali? Chcete, aby lidé mimo Mastodon mohli nalézt váš profil při prohledávání webu? Mějte na vědomí, že úplné vyřazení ze všech vyhledávačů nelze u veřejných informací garantovat. + title: Soukromí a dosah privacy_policy: title: Zásady ochrany osobních údajů reactions: @@ -1773,7 +1850,10 @@ cs: seamless_external_login: Jste přihlášeni přes externí službu, nastavení hesla a e-mailu proto nejsou dostupná. signed_in_as: 'Přihlášeni jako:' verification: + here_is_how: Jak na to + instructions_html: Zkopírujte a vložte níže uvedený kód do HTML vašeho webu. Poté přidejte adresu vašeho webu do jednoho z extra políček na vašem profilu na záložce "Upravit profil" a uložte změny. verification: Ověření + verified_links: Vaše ověřené odkazy webauthn_credentials: add: Přidat nový bezpečnostní klíč create: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index ec6dc75396..a975457cf9 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1866,6 +1866,7 @@ cy: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" translation: errors: quota_exceeded: Aethpwyd y tu hwnt i gwota defnydd y gweinydd cyfan ar gyfer y gwasanaeth cyfieithu. diff --git a/config/locales/de.yml b/config/locales/de.yml index da92f8fa27..69151b2e70 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1829,7 +1829,7 @@ de: signed_in_as: 'Angemeldet als:' verification: extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me", wodurch das Nachahmen von Personen auf Websites mit nutzergenerierten Inhalten verhindert wird. Du kannst auch ein link-Tag statt a im Header auf der Seite verwenden, jedoch muss der HTML-Code ohne das Ausführen von JavaScript zugänglich sein. - here_is_how: So funktioniert's + here_is_how: So funktioniert’s hint_html: "Alle können ihre Identität auf Mastodon verifizieren. Basierend auf offenen Standards – jetzt und für immer kostenlos. Alles, was du brauchst, ist eine eigene Website. Wenn du von deinem Profil auf diese Website verlinkst, überprüfen wir, ob die Website zu deinem Profil zurückverlinkt, und zeigen einen visuellen Hinweis an." instructions_html: Kopiere den unten stehenden Code und füge ihn in das HTML deiner Website ein. Trage anschließend die Adresse deiner Website in ein Zusatzfeld auf deinem Profil ein und speichere die Änderungen. Die Zusatzfelder befinden sich im Reiter „Profil bearbeiten“. verification: Verifizierung diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 0eb1479aa1..085507f8bf 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -64,7 +64,7 @@ fa: review_permissions: بازبینی اجازه‌ها title: نیاز به اجازه دادن show: - title: این کد مجوز را کپی کرده و در برنامه وارد کنید. + title: این کد تأیید را رونوشت کرده و در برنامه بگذارید. authorized_applications: buttons: revoke: فسخ @@ -127,6 +127,7 @@ fa: bookmarks: نشانک‌ها conversations: گفت‌وگوها crypto: رمزگذاری سرتاسری + favourites: برگزیده‌ها filters: پالایه‌ها follow: پی‌گیری، خموشی و مسدودی‌ها follows: پی‌گرفتگان @@ -155,6 +156,9 @@ fa: admin:read:reports: خواندن اطّلاعات حساس از همهٔ گزارش‌ها و حساب‌های گزارش‌شده admin:write: تغییر تمام داده‌ها روی کارساز admin:write:accounts: انجام کنش مدیریتی روی حساب‌ها + admin:write:domain_allows: انجام کنش مدیریتی روی اجازه‌های دامنه + admin:write:domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنه + admin:write:email_domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنهٔ رایانامه admin:write:ip_blocks: انجام کنش مدیریتی روی مسدودسازی های IP admin:write:reports: انجام کنش مدیریتی روی گزارش‌ها crypto: از رمزگذاری سرتاسر استفاده کنید @@ -164,6 +168,7 @@ fa: read:accounts: دیدن اطّلاعات حساب read:blocks: دیدن مسدودهایتان read:bookmarks: دیدن نشانک‌هایتان + read:favourites: دیدن برگزیده‌هایتان read:filters: دیدن پالایه‌هایتان read:follows: دیدن پی‌گیری‌هایتان read:lists: دیدن سیاهه‌هایتان @@ -177,6 +182,7 @@ fa: write:blocks: انسداد حساب‌ها و دامنه‌ها write:bookmarks: نشانک‌گذاری وضعیت‌ها write:conversations: مکالمات را بی‌صدا و حذف کنید + write:favourites: فرسته‌های برگزیده write:filters: ایحاد پالایش‌ها write:follows: پی‌گیری افراد write:lists: ایجاد سیاهه‌ها diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f5ba91e1f9..e2138e0aeb 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -31,7 +31,7 @@ fa: created_msg: یادداشت مدیر با موفقیت ساخته شد! destroyed_msg: یادداشت نظارتی با موفقیت نابود شد! accounts: - add_email_domain_block: مسدود کردن دامنهٔ رایانامه + add_email_domain_block: انسداد دامنهٔ رایانامه approve: پذیرفتن approved_msg: کارهٔ ثبت‌نام %{username} با موفقیت تأیید شد are_you_sure: مطمئنید؟ @@ -309,6 +309,7 @@ fa: unpublish: عدم انتشار unpublished_msg: انتشار اعلامیه با موفقیت لغو شد! updated_msg: اعلامیه با موفقیت به‌روز شد! + critical_update_pending: به‌روز رسانی‌های بحرانی منتظرند custom_emojis: assign_category: تعیین دسته by_domain: دامنه @@ -387,7 +388,7 @@ fa: confirm: تعلیق title: تأیید انسداد دامنه برای %{domain} created_msg: مسدودسازی دامنه در حال پردازش است - destroyed_msg: مسدودکردن دامنه واگردانده شد + destroyed_msg: انسداد دامنه واگردانده شد domain: دامنه edit: ویرایش مسدودسازی دامنه existing_domain_block_html: شما پیش‌تر محدودیت‌های سخت‌تری روی %{name} اعمال کرده‌اید، و باید نخست مسدودسازی را لغو کنید. @@ -432,8 +433,16 @@ fa: not_permitted: مجاز نیست title: دامنه‌های رایانامهٔ مسدود شده export_domain_allows: + new: + title: درون‌ریزی اجازه‌های دامنه no_file: هیچ پرونده‌ای گزیده نشده export_domain_blocks: + import: + existing_relationships_warning: رابطه‌های پی‌گیری موجود + private_comment_template: درون‌ریخته از %{source} در %{date} + title: درون‌ریزی انسدادهای دامنه + new: + title: درون‌ریزی انسدادهای دامنه no_file: هیچ پرونده‌ای گزیده نشده follow_recommendations: description_html: "پیشنهادات پیگیری به کاربران جدید کک می‌کند تا سریع‌تر محتوای جالب را پیدا کنند. زمانی که کاربری هنوز به اندازه کافی با دیگران تعامل نداشته است تا پیشنهادات پیگیری شخصی‌سازی‌شده دریافت کند، این حساب‌ها را به جای آن فهرست مشاهده خواهد کرد. این حساب‌ها به صورت روزانه و در ترکیب با بیشتری تعاملات و بالاترین دنبال‌کنندگان محلی برای یک زبان مشخص بازمحاسبه می‌شوند." @@ -445,6 +454,7 @@ fa: unsuppress: بازگردانی پیشنهادهای پی‌گیری instances: availability: + failure_threshold_reached: در %{date} به آستانهٔ شکست رسید. no_failures_recorded: هیچ شکستی در سابقه نیست. title: موجود بودن back_to_all: همه @@ -473,6 +483,7 @@ fa: delivery: all: همه clear: پاک کردن خطاهای تحول محتوا + failing: شکست خوردن restart: بازراه‌اندازی تحویل محتوا stop: متوقف‌کردن تحویل محتوا unavailable: ناموجود @@ -618,8 +629,10 @@ fa: delete_user_data: حذف داده‌های کاربر invite_users: دعوت کاربران manage_announcements: مدیریت اعلامیه‌ها + manage_appeals: مدیریت درخواست‌های بازنگری manage_blocks: مدیریت مسدودی‌ها manage_custom_emojis: مدیریت ایموجی‌های سفارشی + manage_federation: مدیریت خودگردانی manage_invites: مدیریت دعوت‌ها manage_reports: مدیریت گزارش‌ها manage_roles: مدیریت نقش‌ها @@ -648,6 +661,8 @@ fa: appearance: preamble: سفارشی‌سازی رابطس وب ماستودون. title: ظاهر + default_noindex: + title: درخواست خروج از اندیس‌گذاری پیش‌گزیدهٔ موتور جست‌وجو discovery: follow_recommendations: پیروی از پیشنهادها profile_directory: شاخهٔ نمایه @@ -667,9 +682,20 @@ fa: approved: ثبت نام نیازمند تأیید مدیران است none: کسی نمی‌تواند ثبت نام کند open: همه می‌توانند ثبت نام کنند + title: تنظیمات کارساز site_uploads: delete: پرونده بارگذاری شده را پاک کنید destroyed_msg: بارگذاری پایگاه با موفقیت حذف شد! + software_updates: + critical_update: بحرانی — لطفاً به سرعت به‌روز کنید + documentation_link: بیش‌تر بیاموزید + release_notes: یادداشت‌های انتشار + title: به‌روز رسانی‌های موجود + type: گونه + types: + major: ارائه بزرگ + minor: ارائه کوچک + version: نگارش statuses: account: نگارنده application: برنامه @@ -710,11 +736,24 @@ fa: system_checks: database_schema_check: message_html: تعداد مهاجرت پایگاه داده در انتظار انجام هستند. لطفا آن‌ها را اجرا کنید تا اطمینان یابید که برنامه مطابق انتظار رفتار خواهد کرد + elasticsearch_preset: + action: دیدن مستندات + elasticsearch_preset_single_node: + action: دیدن مستندات + elasticsearch_version_check: + message_html: 'نگارش الستیک‌سرچ ناسازگار: %{value}' + version_comparison: الستیک‌سرچ %{running_version} در حال اجراست، حال که %{required_version} لازم است rules_check: action: مدیریت قانون‌های کارساز message_html: هیچ قانون کارسازی تعریف نکرده‌اید. sidekiq_process_check: message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید + upload_check_privacy_error: + action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید + message_html: "کارساز وبتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است." + upload_check_privacy_error_object_storage: + action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید + message_html: "ذخیره‌سازتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است." tags: review: وضعیت بازبینی updated_msg: تنظیمات برچسب‌ها با موفقیت به‌روز شد @@ -858,6 +897,7 @@ fa: migrate_account: نقل مکان به یک حساب دیگر migrate_account_html: اگر می‌خواهید این حساب را به حساب دیگری منتقل کنید، این‌جا را کلیک کنید. or_log_in_with: یا ورود به وسیلهٔ + privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفته‌ام progress: confirm: تأیید رایانامه details: جزئیات شما @@ -967,6 +1007,7 @@ fa: invalid_domain: نام دامین معتبر نیست edit_profile: basic_information: اطلاعات پایه + hint_html: "شخصی‌سازی آن چه مردم روی نمایهٔ عمومیتان و کنار فرسته‌هایتان می‌بینند. هنگامی که نمایه‌ای کامل و یک تصویر نمایه داشته باشید،‌ احتمال پی‌گیری متقابل و تعامل با شما بیش‌تر است." other: سایر errors: '400': درخواستی که فرستادید نامعتبر یا اشتباه بود. @@ -1019,6 +1060,7 @@ fa: statuses: فرسته‌های جدا title: ویرایش پالایه errors: + deprecated_api_multiple_keywords: این پارامترها نمی‌توانند از این برنامه تغییر یابند؛ چرا که به بیش از یک کلیدواژهٔ پالایه اعمال می‌شود. از برنامه‌ای جدیدتر یا میانای وب استفاده کنید. invalid_context: زمینه‌ای موجود نیست یا نامعتبر است index: delete: پاک‌کردن @@ -1045,6 +1087,9 @@ fa: title: فرسته‌های پالوده generic: all: همه + all_matching_items_selected_html: + one: "%{count} مورد مطابق با جست‌وجویتان گزیده شده." + other: "%{count} مورد مطابق با جست‌وجویتان گزیده شدند." cancel: لغو changes_saved_msg: تغییرات با موفقیت ذخیره شدند! confirm: تأیید @@ -1107,6 +1152,9 @@ fa: expires_at: تاریخ انقضا uses: استفاده‌ها title: دعوت دیگران + lists: + errors: + limit: به بیشینهٔ تعداد سیاهه‌ها رسیدید login_activities: authentication_methods: otp: کارهٔ تأیید هویت دوعاملی @@ -1121,6 +1169,9 @@ fa: mail_subscriptions: unsubscribe: complete: لغو اشتراک شد + emails: + notification_emails: + mention: رایانامه‌های آگاهی اشاره title: لغو اشتراک media_attachments: validations: @@ -1187,9 +1238,9 @@ fa: title: درخواست پیگیری تازه mention: action: پاسخ - body: "%{name} در این‌جا از شما نام برد:" - subject: "%{name} از شما نام برد" - title: نام‌برده‌شدن تازه + body: "%{name} در این‌جا به شما اشاره کرد:" + subject: "%{name} به شما اشاره کرد" + title: اشارهٔ جدید poll: subject: نظرسنجی‌ای از %{name} پایان یافت reblog: @@ -1244,6 +1295,14 @@ fa: other: سایر تنظیمات posting_defaults: تنظیمات پیش‌فرض انتشار public_timelines: خط زمانی‌های عمومی + privacy: + hint_html: "شخصی‌سازی چگونگی پیدا شدن فرسته‌ها و نمایه‌تان. ویژگی‌های متعدّدی در ماستودون می‌توانند هنگام به کار افتادن در رسیدن به مخاطبینی گسترده‌تر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند." + privacy: محرمانگی + reach: دسترسی + reach_hint_html: واپایش این که می‌خواهید به دست افراد جدید قابل کشف و پی‌گیری باشید یا نه. می‌خواهید فرسته‌هایتان روی صفحهٔ کشف ظاهر شوند؟ می‌خواهید دیگر افراد در پیشنهادهای پی‌گیریشان ببینندتان؟ می‌خواهید پی‌گیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟ + search: جست‌وجو + search_hint_html: واپایش این که چگونه می‌خواهید پیدا شوید. می‌خواهید افراد با آن‌چه به صورت عمومی درباره‌اش فرستاده‌اید پیدایتان کنند؟ می‌خواهید افراد خارج از ماستودون هنگام جست‌وجوی وب نمایه‌تان را بیابند؟ لطفاً‌به خاطر داشته باشید که خروج کامل از تمامی موتورهای جست‌وجو برای اطّلاعات عمومی قابل تضمین نیست. + title: محرمانگی و دسترسی privacy_policy: title: سیاست محرمانگی reactions: @@ -1519,7 +1578,10 @@ fa: seamless_external_login: شما با یک سرویس خارج از مجموعه وارد شده‌اید، به همین دلیل تنظیمات ایمیل و گذرواژه برای شما در دسترس نیست. signed_in_as: 'واردشده به نام:' verification: + extra_instructions_html: نکته: پیوند روی پایگاه وبتان می‌تواند نامرئی باشد. بخش مهم rel="me" است که از جعل هویت روی پایگاه‌هایی با محتوای تولید شده به دست کاربر جلوگیری می‌کند. حتا می‌توانید به جای برچسب a از برچسب link در سرایند صفحه استفاده کنید؛ ولی HTML باید بدون اجرای جاوااسکریپت در دسترس باشد. here_is_how: به اینصورت + hint_html: "تأیید هویتتان روی ماستودون برای همه است. برپایهٔ استانداردهای وب و رایگان برای همیشه. تمام آن چه نیاز دارید پایگاه وب شخصیست که افراد شما را با آن بشناسند. هنگام پیوند دادن به این پایگاه از نمایه‌تان، بررسی می‌کنیم که پیوندهای پایگاه وب نیز به نمایه‌تان پیوند داده باشد و نشانگری تصویری رویش نشان می‌دهیم." + instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینه‌های اضافی روی نمایه‌تان افزوده و تغییرات را ذخیره کنید. verification: تأیید verified_links: "‏پیوندهای تأییدشده‌ شما" webauthn_credentials: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index dbc962d250..e620db3a78 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -458,7 +458,7 @@ gd: not_permitted: Chan eil seo ceadaichte resolved_dns_records_hint_html: Thèid ainm na h-àrainne fhuasgladh nan àrainnean MX a leanas agus an urra riutha-san gun gabh iad ri post-d. Ma bhacas tu àrainn MX, bacaidh seo an clàradh o sheòladh puist-d sam bith a chleachdas an aon àrainn MX fiù ’s ma bhios ainm àrainne eadar-dhealaichte ’ga sealltainn. Thoir an aire nach bac thu solaraichean puist-d mòra. resolved_through_html: Chaidh fuasgladh slighe %{domain} - title: Àrainnean puist-d ’gam bacadh + title: Bacadh àrainnean puist-d export_domain_allows: new: title: Ion-phortaich àrainnean ceadaichte diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 1dfbaf03d2..14f78e4615 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -71,7 +71,7 @@ gl: enabled: Activado enabled_msg: Desbloqueada a conta de %{username} followers: Seguidoras - follows: Segue + follows: Seguimentos header: Cabeceira inbox_url: URL da caixa de entrada invite_request_text: Razóns para unirte diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 8da2695fdc..b18405fb65 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -379,11 +379,11 @@ ja: confirm_suspension: cancel: キャンセル confirm: 停止 - permanent_action: 失われたデータやフォロー関係は、ブロックを解除しても元に戻せません。 - preamble_html: "%{domain} と、そのサブドメインをブロックします。" + permanent_action: 失われたデータやフォロー関係は、停止を解除しても元に戻せません。 + preamble_html: "%{domain} と、そのサブドメインに「停止」の処置を行います。" remove_all_data: この操作により、対象のドメインにあるアカウントからのコンテンツやメディア、プロフィール情報はすべて削除されます。 - stop_communication: ブロックしたサーバーとは通信を行わなくなります。 - title: "%{domain} をブロック" + stop_communication: 対象のサーバーとは通信を行わなくなります。 + title: "「%{domain}」ドメインブロックの確認" undo_relationships: この操作により、このサーバーと対象サーバーのアカウント間のフォロー関係はすべて解除されます。 created_msg: ドメインブロック処理を完了しました destroyed_msg: ドメインブロックを外しました diff --git a/config/locales/ko.yml b/config/locales/ko.yml index a6a85464e6..da6d8596e0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1303,7 +1303,7 @@ ko: unconfirmed: 미확인 status: 상태 success: 파일이 정상적으로 업로드되었으며, 현재 처리 중입니다 - time_started: 시작 시간 + time_started: 시작 시각 titles: blocking: 차단한 계정 가져오는 중 bookmarks: 북마크 가져오는 중 diff --git a/config/locales/no.yml b/config/locales/no.yml index 8bb36e76f8..dc8151d552 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -309,6 +309,7 @@ unpublish: Avpubliser unpublished_msg: Kunngjøring upublisert! updated_msg: Kunngjøringen er oppdatert! + critical_update_pending: Kritisk oppdatering avventer custom_emojis: assign_category: Tilegn kategori by_domain: Domene @@ -774,6 +775,18 @@ site_uploads: delete: Slett den opplastede filen destroyed_msg: Vellykket sletting av sideopplasting! + software_updates: + critical_update: Kritisk — vennligst oppdater raskt + description: "Det anbefales å holde Mastodon-installasjonen oppdatert for å dra nytte av nye rettelser og funksjoner. Dessuten er det av og til viktig å oppdatere Mastodon raskt for å unngå sikkerhetsproblemer. Derfor sjekker Mastodon om det finnes oppdateringer \nhvert 30. minutt, og varsler deg i henhold til dine valg for e-postvarsling." + documentation_link: Finn ut mer + release_notes: Informasjon om utgivelsen + title: Tilgjengelige oppdateringer + type: Type + types: + major: Stor oppdatering + minor: Mindre oppdatering + patch: Liten oppdatering – feilrettinger og endringer som er lette å legge til + version: Versjon statuses: account: Forfatter application: Applikasjon @@ -838,6 +851,12 @@ message_html: Du har ikke definert noen serverregler. sidekiq_process_check: message_html: Ingen Sidekiq-prosess kjører for %{value} køen(e). Vennligst se gjennom Sidekiq-konfigurasjonen din + software_version_critical_check: + action: Se tilgjengelige oppdateringer + message_html: En kritisk oppdatering av Mastodon er tilgjengelig. Vennligst oppdater så raskt som mulig. + software_version_patch_check: + action: Se tilgjengelige oppdateringer + message_html: En oppdatering av Mastodon som inneholder feilrettinger er tilgjengelig. upload_check_privacy_error: action: Sjekk her for mer informasjon message_html: "Webserveren din er feilkonfigurert. Personvernet til brukerne dine er i fare." @@ -951,6 +970,9 @@ body: "%{target} klager på en moderasjonsbeslutning av %{action_taken_by} fra %{date}, noe som var %{type}. De skrev:" next_steps: Du kan godkjenne klagen for å angre på moderasjonsvedtaket eller ignorere det. subject: "%{username} klager på en moderasjonsbeslutning for %{instance}" + new_critical_software_updates: + body: Nye kritiske versjoner av Mastodon har blitt utgitt, det kan være fordelaktig å oppdatere så snart som mulig! + subject: Kritiske Mastodon-oppdateringer er tilgjengelige for %{instance}! new_pending_account: body: Detaljer om den nye kontoen er nedenfor. Du kan godkjenne eller avvise denne søknaden. subject: Ny konto opp til vurdering på %{instance} (%{username}) @@ -958,6 +980,9 @@ body: "%{reporter} har rapportert %{target}" body_remote: Noen fra %{domain} har rapportert %{target} subject: Ny rapport for %{instance} (#%{id}) + new_software_updates: + body: Nye versjoner av Mastodoner har blitt utgitt, du ønsker kanskje å oppdatere! + subject: Nye versjoner av Mastodon er tilgjengelige for %{instance}! new_trends: body: 'Følgende elementer trenger en gjennomgang før de kan vises offentlig:' new_trending_links: @@ -1708,6 +1733,7 @@ default: "%-d. %b %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%-d. %b %Y, %H:%M %Z" two_factor_authentication: add: Legg til disable: Skru av diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 15e1d0de24..12a6ac1fe8 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -15,7 +15,7 @@ ca: account_migration: acct: Especifica l'usuari@domini del compte al qual et vols traslladar account_warning_preset: - text: Pots usar totes les sintaxis, com ara URL, etiquetes i mencions + text: Pots usar tota mena de sintaxi, com ara URL, etiquetes i mencions title: Opcional. No és visible per al destinatari admin_account_action: include_statuses: L'usuari veurà quins tuts han causat l'acció de moderació o avís diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 8079fd03c0..70194a1e0c 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -291,6 +291,8 @@ cy: pending_account: Mae cyfrif newydd angen adolygiad reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd + software_updates: + label: Mae fersiwn Mastodon newydd ar gael trending_tag: Mae pwnc llosg newydd angen adolygiad rule: text: Rheol diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index ca382f387e..676eb192ee 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -2,6 +2,14 @@ fa: simple_form: hints: + account: + discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. + display_name: نام کامل یا باحالتان. + fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. + indexable: ممکن است فرسته‌های عمومیتان در نتیجه‌های جست‌وجوی ماستودون ظاهر شود. افرادی که با فرسته‌هایتان تعامل داشتند در هر صورت می‌توانند جست‌وجویشان کنند. + note: 'می‌توانید افراد دیگر را @نام برده یا #برچسب بزنید.' + show_collections: افراد خواهند توانست پی‌گیران و پی‌گرفته شده‌هایتان را مرور کنند. افرادی که پی‌می‌گیریدشان در هر صورت خواهند دید که پی‌می‌گیریدشان. + unlocked: افراد خواهند توانست بدون درخواست تأیید پی‌بگیرندتان. اگر می‌خواهید درخواست‌های پی‌گیری را بازبینی کرده و بگزینید که پی‌گیران جدید را بپذیرید یا رد کنید، علامت را بردارید. account_alias: acct: مشخّص کردن username@domain حسابی که می‌خواهید از آن منتقل شوید account_migration: @@ -72,7 +80,17 @@ fa: backups_retention_period: نگه داشتن بایگانی‌های کاربری برای روزهای مشخّص شده. bootstrap_timeline_accounts: سنجاق کردنThese accounts will be pinned to the top of new users' follow recommendations. closed_registrations_message: نمایش داده هنگام بسته بودن ثبت‌نام‌ها + content_cache_retention_period: همهٔ فرسته‌ها و تقویت‌ها از دیگر کارسازها پس از روزهای نشخّص حذف خواهند شد. ممکن است برخی فرسته‌ها قابل بازیابی نباشند. همهٔ نشانک‌ها، پسندها و تقویت‌ها نیز از دست خواهند رفت و قابل بازگشت نخواهند بود. + custom_css: می‌توانیدروی نگارش وب ماستودون سبک‌های سفارشی اعمال کنید. + mascot: نقش میانای وب پیش‌رفته را پایمال می‌کند. + media_cache_retention_period: اگر به مقدار مثبتی تنظیم شود، پرونده‌های رسانهٔ بارگرفته پس از روزهای مشخّص شده حذف خواهند شد و هنگام درخواست دوباره بارگرفته می‌شوند. + profile_directory: شاخهٔ نمایه، همهٔ کاربرانی که کشف‌پذیری را برگزیده‌اند سیاهه می‌کند. require_invite_text: زمانی که نام‌نویسی ها نیازمند تایید دستی است، متن «چرا می‌خواهید بپیوندید؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید + site_contact_email: چگونگی دسترسی افراد به شما برای مقاصد قانونی یا پشتیبانی. + site_contact_username: چکونگی رسیدن افراد به شما روی ماستودون. + site_extended_description: هر اطّلاعات بیش‌تری که ممکن است برای بازدیدکنندگان و کاربرانتان مفید باشد. می‌تواند به شکل مارک‌دون باشد. + site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چه‌کسی می‌گرداندش و برای چه کسیست؟ + site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیش‌گزیده خالی بگذارید. می‌تواند در قالب مارک‌دون باشد. form_challenge: current_password: شما در حال ورود به یک منطقهٔ‌ حفاظت‌شده هستید imports: @@ -93,6 +111,9 @@ fa: sessions: otp: 'کد تأیید دومرحله‌ای که کاره روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' webauthn: اگر کلید USB باشد ، از اتصاڵ آن مطمئن شوید و، اگر لازم باشد، به آن ضربه‌ایی بزنید. + settings: + indexable: صفحهٔ نمایه‌تان ممکن است در نتیجه‌های جست‌وجو روی گوگل، بینگ و جاهای دیگر ظاهر شود. + show_application: خودتان همواره خواهید توانست ببینید که کدام کاره فرسته‌تان را منتشر کرده. tag: name: شما تنها می‌توانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید user: @@ -102,9 +123,13 @@ fa: url: جایی که رویدادها فرستاده می‌شوند labels: account: + discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف fields: name: برچسب value: محتوا + indexable: بودن فرسته‌های عمومی در نتیجه‌های جست‌وجو + show_collections: نمایش پی‌گیران و پی‌گرفته شده‌ها روی نمایه + unlocked: پذیرش خودکار پی‌گیران جدید account_alias: acct: نشانی حساب قدیمی account_migration: @@ -249,9 +274,18 @@ fa: pending_account: وقتی حساب تازه‌ای نیاز به بازبینی داشت ایمیل بفرست reblog: وقتی کسی فرستهٔ شما را تقویت کرد ایمیل بفرست report: گزارش جدیدی فرستاده شد + software_updates: + all: آگاهی برای همهٔ به‌روز رسانی‌ها + critical: آگاهی فقط برای به‌روز رسانی‌های بحرانی + label: نگارشی جدید از ماستادون موجود است + none: هرگز برای به‌روز رسانی‌ها آگاهی داده نشود (توصیه نمی‌شود) + patch: آگاهی برای به‌روز رسانی‌های رفع اشکال trending_tag: روند جدیدی نیازمند بازبینی است rule: text: قانون + settings: + indexable: بودن صفحهٔ نمایه در نتیجه‌های جست‌وجو + show_application: نمایش این که فرسته را از کدام کاره فرستاده‌اید tag: listable: اجازه به این برچسب برای ظاهر شدن در جست‌وجوها و پیشنهادها name: برچسب @@ -271,6 +305,7 @@ fa: url: نشانی نقطهٔ پایانی 'no': خیر not_recommended: پیشنهاد نشده + overridden: پایمال recommended: توصیه می‌شود required: mark: "*" diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 1a32a5fadb..a9d5465f36 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -200,7 +200,7 @@ password: Passord phrase: Nøkkelord eller frase setting_advanced_layout: Skru på det avanserte nettgrensesnittet - setting_aggregate_reblogs: Gruppefremhevinger i tidslinjer + setting_aggregate_reblogs: Samle fremhevinger i tidslinjer setting_always_send_emails: Alltid send e-postvarslinger setting_auto_play_gif: Autoavspill animert GIF-filer setting_boost_modal: Vis bekreftelse før fremheving @@ -291,6 +291,12 @@ pending_account: Ny bruker avventer gjennomgang reblog: Send e-post når noen fremhever din status report: Ny rapport er sendt + software_updates: + all: Varsle om alle oppdateringer + critical: Varsle kun om kritiske oppdateringer + label: En ny versjon av Mastodon er tilgjengelig + none: Aldri varsle om oppdateringer (anbefales ikke) + patch: Varsle om oppdateringer med feilrettinger trending_tag: Ny trend krever gjennomgang rule: text: Regler diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 04266d2719..7a56fa2559 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -3,10 +3,10 @@ zh-CN: simple_form: hints: account: - discoverable: 您的公开帖子和个人资料可能会在Mastodon的各个领域中被推荐,您的个人资料可能会被推荐给其他用户。 + discoverable: 您的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,您的个人资料可能会被推荐给其他用户。 display_name: 您的全名或昵称。 fields: 你的主页、人称代词、年龄,以及任何你想要添加的内容。 - indexable: 您的公开嘟文可能会出现在Mastodon的搜索结果中。与您的嘟文互动过的人可能能够进行搜索并找到它们。 + indexable: 您的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与您的嘟文有过交互的人都可能通过搜索找到它们。 note: '您可以提及 @其他人 或 #标签 。' show_collections: 人们将能够浏览您的关注和追随者。您关注的人会看到您关注他们。 unlocked: 人们将能够在不请求批准的情况下关注您。如果您希望审核关注请求并选择接受或拒绝新的粉丝,请取消勾选此项。 @@ -71,12 +71,12 @@ zh-CN: featured_tag: name: 以下是你最近使用过的标签: filters: - action: 选择在帖子匹配过滤器时要执行的操作 + action: 选择在嘟文命中过滤器时要执行的操作 actions: hide: 彻底屏蔽过滤内容,犹如它不曾存在过一般 warn: 在警告中提及过滤器标题后,隐藏过滤内容 form_admin_settings: - activity_api_enabled: 本地发布的帖子、 活跃用户和每周的注册数 + activity_api_enabled: 本站每周的嘟文数、活跃用户数和新注册用户数 backups_retention_period: 将在指定天数内保留生成的用户存档。 bootstrap_timeline_accounts: 这些账号将在新用户关注推荐中置顶。 closed_registrations_message: 在关闭注册时显示 @@ -144,7 +144,7 @@ zh-CN: fields: name: 标签 value: 内容 - indexable: 在搜索结果中包含公共嘟文 + indexable: 将公开嘟文纳入搜索范围 show_collections: 在个人资料中显示关注和关注者 unlocked: 自动接受新关注者 account_alias: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 11e8de056a..e08d1101ef 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -425,6 +425,7 @@ sk: failing: Zlyhávajúce unavailable: Nedostupné delivery_available: Je v dosahu doručovania + empty: Nenájdené žiadne domény. moderation: all: Všetky limited: Obmedzené @@ -482,6 +483,12 @@ sk: created_msg: Poznámka o nahlásení úspešne vytvorená! destroyed_msg: Poznámka o nahlásení úspešne vymazaná! reports: + account: + notes: + few: "%{count} poznámok" + many: "%{count} poznámok" + one: "%{count} poznámka" + other: "%{count} poznámky" action_taken_by: Zákrok vykonal/a actions: suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu. @@ -1015,6 +1022,8 @@ sk: other: Ostatné posting_defaults: Východiskové nastavenia príspevkov public_timelines: Verejné časové osi + privacy: + title: Súkromie a dosah reactions: errors: limit_reached: Maximálny počet rôznorodých reakcií bol dosiahnutý diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 576833b043..35230ceddb 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -869,6 +869,7 @@ sl: action: Glejte razpoložljive posodobitve software_version_patch_check: action: Glejte razpoložljive posodobitve + message_html: Na voljo je posodobitev Mastodona s popravki hroščev. upload_check_privacy_error: action: Preverite tukaj za več informacij message_html: "Vaš spletni strežnik je napačno nastavljen. Zasebnost vaših uporabnikov je izpostavljena tveganjem." diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index db3902b704..51baaf7a4e 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -626,13 +626,13 @@ zh-CN: statuses_description_html: 在与该账号的通信中将引用违规内容 summary: action_preambles: - delete_html: 您即将删除 @%{acct} 的一些帖子。 这将: + delete_html: 您即将删除 @%{acct} 的一些嘟文。 这将: mark_as_sensitive_html: 您即将 标记 @%{acct} 的帖一些子为 敏感。这将: silence_html: 您即将限制 @%{acct} 的帐户。 这将: suspend_html: 您即将暂停 @%{acct} 的帐户。 这将: actions: - delete_html: 删除违规帖子 - mark_as_sensitive_html: 将违规帖子的媒体标记为敏感 + delete_html: 删除违规嘟文 + mark_as_sensitive_html: 将违规嘟文的媒体标记为敏感 silence_html: 严格限制 @%{acct} 的影响力,方法是让他们的个人资料和内容仅对已经关注他们的人可见,或手动查找其个人资料时 suspend_html: 暂停 @%{acct},使他们的个人资料和内容无法访问,也无法与之互动 close_report: '将报告 #%{id} 标记为已解决' @@ -759,7 +759,7 @@ zh-CN: open: 开放注册 security: authorized_fetch: 需要跨站认证 - authorized_fetch_hint: 要求跨站验证可以更严格地执行用户级和服务器级的封锁。然而,这会产生性能上的代价,减少你的回复触达范围,并可能导致与一些联邦服务的兼容问题。此外,这并不能阻止专门的参与者获取你的公共帖子和账户。 + authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账户。 authorized_fetch_overridden_hint: 由于此设置被环境变量覆盖,目前无法更改。 federation_authentication: 强制跨站认证 title: 服务器设置 @@ -1164,7 +1164,7 @@ zh-CN: invalid_domain: 不是一个有效的域名 edit_profile: basic_information: 基本信息 - hint_html: "自定义公开资料和帖子旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" + hint_html: "自定义公开资料和嘟文旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" other: 其他 errors: '400': 你提交的请求无效或格式不正确。 @@ -1499,7 +1499,7 @@ zh-CN: privacy: 隐私 privacy_hint_html: 控制你愿意向他人透露多少信息。通过浏览他人的关注列表和查看他们发嘟所用的应用,人们可以发现有趣的用户和酷炫的应用,但你可能更喜欢将其隐藏起来。 reach: 范围 - reach_hint_html: 控制您是否希望被新人发现和关注。您是否希望您的帖子出现在“探索”屏幕上?您是否希望其他人在关注推荐中看到您?您是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? + reach_hint_html: 控制您是否希望被新人发现和关注。您是否希望您的嘟文出现在“探索”页面上?您是否希望其他人在关注推荐中看到您?您是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? search: 搜索 search_hint_html: 控制你希望被找到的方式。你想让人们通过你公开发布的内容来找到你吗?当在网络上搜索时,你是否希望Mastodon之外的人能够找到你的个人资料?请注意,我们无法保证完全排除所有搜索引擎对公开信息的索引。 title: 隐私与可达性 From 58477a6163dabc6afe04723885266a3615076c49 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 15:06:43 +0200 Subject: [PATCH 182/237] =?UTF-8?q?Fix=20inefficient=20queries=20in=20?= =?UTF-8?q?=E2=80=9CFollows=20and=20followers=E2=80=9D=20as=20well=20as=20?= =?UTF-8?q?several=20admin=20pages=20(#27116)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/relationship_filter.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 3d75dce05e..955d7d188a 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -62,13 +62,13 @@ class RelationshipFilter def relationship_scope(value) case value when 'following' - account.following.eager_load(:account_stat).reorder(nil) + account.following.includes(:account_stat).reorder(nil) when 'followed_by' - account.followers.eager_load(:account_stat).reorder(nil) + account.followers.includes(:account_stat).reorder(nil) when 'mutual' - account.followers.eager_load(:account_stat).reorder(nil).merge(Account.where(id: account.following)) + account.followers.includes(:account_stat).reorder(nil).merge(Account.where(id: account.following)) when 'invited' - Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil) + Account.joins(user: :invite).merge(Invite.where(user: account.user)).includes(:account_stat).reorder(nil) else raise Mastodon::InvalidParameterError, "Unknown relationship: #{value}" end From fa98c9b077c6b9239d5b531f7eafc7960d59c4f8 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:16 +0200 Subject: [PATCH 183/237] =?UTF-8?q?Fix=20crash=20when=20filtering=20for=20?= =?UTF-8?q?=E2=80=9Cdormant=E2=80=9D=20relationships=20(#27306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/account.rb | 2 +- app/models/relationship_filter.rb | 2 +- spec/models/relationship_filter_spec.rb | 68 +++++++++++++++++-------- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index 679093a59f..cdb701edbc 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -127,7 +127,7 @@ class Account < ApplicationRecord scope :searchable, -> { without_unapproved.without_suspended.where(moved_to_account_id: nil) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } scope :followable_by, ->(account) { joins(arel_table.join(Follow.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(Follow.arel_table[:target_account_id]).and(Follow.arel_table[:account_id].eq(account.id))).join_sources).where(Follow.arel_table[:id].eq(nil)).joins(arel_table.join(FollowRequest.arel_table, Arel::Nodes::OuterJoin).on(arel_table[:id].eq(FollowRequest.arel_table[:target_account_id]).and(FollowRequest.arel_table[:account_id].eq(account.id))).join_sources).where(FollowRequest.arel_table[:id].eq(nil)) } - scope :by_recent_status, -> { order(Arel.sql('account_stats.last_status_at DESC NULLS LAST')) } + scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.order('last_status_at DESC NULLS LAST')).references(:account_stat) } scope :by_recent_sign_in, -> { order(Arel.sql('users.current_sign_in_at DESC NULLS LAST')) } scope :popular, -> { order('account_stats.followers_count desc') } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb index 955d7d188a..d686f9ed89 100644 --- a/app/models/relationship_filter.rb +++ b/app/models/relationship_filter.rb @@ -114,7 +114,7 @@ class RelationshipFilter def activity_scope(value) case value when 'dormant' - AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) + Account.joins(:account_stat).where(account_stat: { last_status_at: [nil, ...1.month.ago] }) else raise Mastodon::InvalidParameterError, "Unknown activity: #{value}" end diff --git a/spec/models/relationship_filter_spec.rb b/spec/models/relationship_filter_spec.rb index ac31885774..fccd42aaad 100644 --- a/spec/models/relationship_filter_spec.rb +++ b/spec/models/relationship_filter_spec.rb @@ -6,32 +6,60 @@ describe RelationshipFilter do let(:account) { Fabricate(:account) } describe '#results' do - context 'when default params are used' do - subject do - described_class.new(account, 'order' => 'active').results + let(:account_of_7_months) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 7.months.ago).account } + let(:account_of_1_day) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 1.day.ago).account } + let(:account_of_3_days) { Fabricate(:account_stat, statuses_count: 1, last_status_at: 3.days.ago).account } + let(:silent_account) { Fabricate(:account_stat, statuses_count: 0, last_status_at: nil).account } + + before do + account.follow!(account_of_7_months) + account.follow!(account_of_1_day) + account.follow!(account_of_3_days) + account.follow!(silent_account) + end + + context 'when ordering by last activity' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'active').results + end + + it 'returns followings ordered by last activity' do + expect(subject).to eq [account_of_1_day, account_of_3_days, account_of_7_months, silent_account] + end end - before do - add_following_account_with(last_status_at: 7.days.ago) - add_following_account_with(last_status_at: 1.day.ago) - add_following_account_with(last_status_at: 3.days.ago) + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'active', 'activity' => 'dormant').results + end + + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [account_of_7_months, silent_account] + end + end + end + + context 'when ordering by account creation' do + context 'when not filtering' do + subject do + described_class.new(account, 'order' => 'recent').results + end + + it 'returns followings ordered by last account creation' do + expect(subject).to eq [silent_account, account_of_3_days, account_of_1_day, account_of_7_months] + end end - it 'returns followings ordered by last activity' do - expected_result = account.following.eager_load(:account_stat).reorder(nil).by_recent_status + context 'when filtering for dormant accounts' do + subject do + described_class.new(account, 'order' => 'recent', 'activity' => 'dormant').results + end - expect(subject).to eq expected_result + it 'returns dormant followings ordered by last activity' do + expect(subject).to eq [silent_account, account_of_7_months] + end end end end - - def add_following_account_with(last_status_at:) - following_account = Fabricate(:account) - Fabricate(:account_stat, account: following_account, - last_status_at: last_status_at, - statuses_count: 1, - following_count: 0, - followers_count: 0) - Fabricate(:follow, account: account, target_account: following_account).account - end end From 6c257300246230dabb3cc7737ff2b83f21b79363 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 15:07:10 +0200 Subject: [PATCH 184/237] Add redirection on `/deck` URLs for logged-out users (#27128) --- app/lib/permalink_redirector.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/permalink_redirector.rb b/app/lib/permalink_redirector.rb index 0fcec683d9..0dd37483e2 100644 --- a/app/lib/permalink_redirector.rb +++ b/app/lib/permalink_redirector.rb @@ -14,6 +14,8 @@ class PermalinkRedirector find_account_url_by_name(first_segment) elsif accounts_request? && record_integer_id_request? find_account_url_by_id(second_segment) + elsif @path.start_with?('/deck') + @path.delete_prefix('/deck') end end @@ -52,7 +54,7 @@ class PermalinkRedirector end def path_segments - @path_segments ||= @path.delete_prefix('/').split('/') + @path_segments ||= @path.delete_prefix('/deck').delete_prefix('/').split('/') end def find_status_url_by_id(id) From 12bbccbe82e9209b2e40987f7b721af4b075898e Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 17:07:01 +0200 Subject: [PATCH 185/237] Fix explore prompt sometimes showing up when the home TL is loading (#27062) --- app/javascript/mastodon/features/home_timeline/index.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 8ff0377946..63d373b9a9 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -55,8 +55,10 @@ const homeTooSlow = createSelector([ getHomeFeedSpeed, ], (isLoading, isPartial, speed) => !isLoading && !isPartial // Only if the home feed has finished loading - && (speed.gap > (30 * 60) // If the average gap between posts is more than 20 minutes - || (Date.now() - speed.newest) > (1000 * 3600)) // If the most recent post is from over an hour ago + && ( + (speed.gap > (30 * 60) // If the average gap between posts is more than 30 minutes + || (Date.now() - speed.newest) > (1000 * 3600)) // If the most recent post is from over an hour ago + ) ); const mapStateToProps = state => ({ From 916b5bd4adec8af8b0f0f7dc56925aa70823a1cc Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 25 Sep 2023 17:07:52 +0200 Subject: [PATCH 186/237] Fix division by zero in video in bitrate computation code (#27129) --- lib/paperclip/transcoder.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/paperclip/transcoder.rb b/lib/paperclip/transcoder.rb index ed5425a3b8..d2d946d3ad 100644 --- a/lib/paperclip/transcoder.rb +++ b/lib/paperclip/transcoder.rb @@ -43,7 +43,8 @@ module Paperclip unless eligible_to_passthrough?(metadata) size_limit_in_bits = MediaAttachment::VIDEO_LIMIT * 8 desired_bitrate = (metadata.width * metadata.height * 30 * BITS_PER_PIXEL).floor - maximum_bitrate = (size_limit_in_bits / metadata.duration).floor - 192_000 # Leave some space for the audio stream + duration = [metadata.duration, 1].max + maximum_bitrate = (size_limit_in_bits / duration).floor - 192_000 # Leave some space for the audio stream bitrate = [desired_bitrate, maximum_bitrate].min @output_options['b:v'] = bitrate From 2191858cff6b05938adf628a2d5c19723e130d05 Mon Sep 17 00:00:00 2001 From: Essem Date: Mon, 25 Sep 2023 12:21:07 -0500 Subject: [PATCH 187/237] Properly remove tIME chunk from PNG uploads (#27111) --- app/models/concerns/account_avatar.rb | 2 +- app/models/concerns/account_header.rb | 2 +- app/models/custom_emoji.rb | 2 +- app/models/media_attachment.rb | 2 +- app/models/preview_card.rb | 2 +- app/models/preview_card_provider.rb | 2 +- app/models/site_upload.rb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/models/concerns/account_avatar.rb b/app/models/concerns/account_avatar.rb index e9b8b4adba..b5919a9a23 100644 --- a/app/models/concerns/account_avatar.rb +++ b/app/models/concerns/account_avatar.rb @@ -18,7 +18,7 @@ module AccountAvatar included do # Avatar upload - has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '+profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail] + has_attached_file :avatar, styles: ->(f) { avatar_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail] validates_attachment_content_type :avatar, content_type: IMAGE_MIME_TYPES validates_attachment_size :avatar, less_than: LIMIT remotable_attachment :avatar, LIMIT, suppress_errors: false diff --git a/app/models/concerns/account_header.rb b/app/models/concerns/account_header.rb index 0d197abfcd..e184880f93 100644 --- a/app/models/concerns/account_header.rb +++ b/app/models/concerns/account_header.rb @@ -19,7 +19,7 @@ module AccountHeader included do # Header upload - has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '+profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail] + has_attached_file :header, styles: ->(f) { header_styles(f) }, convert_options: { all: '+profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail] validates_attachment_content_type :header, content_type: IMAGE_MIME_TYPES validates_attachment_size :header, less_than: LIMIT remotable_attachment :header, LIMIT, suppress_errors: false diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index f66353fadd..717de27723 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -39,7 +39,7 @@ class CustomEmoji < ApplicationRecord has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode, inverse_of: false - has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false + has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false before_validation :downcase_domain diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 2d1b70661b..b567003fb9 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -171,7 +171,7 @@ class MediaAttachment < ApplicationRecord DEFAULT_STYLES = [:original].freeze GLOBAL_CONVERT_OPTIONS = { - all: '-quality 90 +profile "!icc,*" +set modify-date -define jpeg:dct-method=float +set create-date', + all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp -define jpeg:dct-method=float', }.freeze belongs_to :account, inverse_of: :media_attachments, optional: true diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 3e2b5bf992..4e24fab240 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -53,7 +53,7 @@ class PreviewCard < ApplicationRecord has_and_belongs_to_many :statuses has_one :trend, class_name: 'PreviewCardTrend', inverse_of: :preview_card, dependent: :destroy - has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 90 +profile "!icc,*" +set modify-date +set create-date' }, validate_media_type: false + has_attached_file :image, processors: [:thumbnail, :blurhash_transcoder], styles: ->(f) { image_styles(f) }, convert_options: { all: '-quality 90 +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, validate_media_type: false validates :url, presence: true, uniqueness: true validates_attachment_content_type :image, content_type: IMAGE_MIME_TYPES diff --git a/app/models/preview_card_provider.rb b/app/models/preview_card_provider.rb index f3e4b49013..8ba24331bb 100644 --- a/app/models/preview_card_provider.rb +++ b/app/models/preview_card_provider.rb @@ -27,7 +27,7 @@ class PreviewCardProvider < ApplicationRecord validates :domain, presence: true, uniqueness: true, domain: true - has_attached_file :icon, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false + has_attached_file :icon, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false validates_attachment :icon, content_type: { content_type: ICON_MIME_TYPES }, size: { less_than: LIMIT } remotable_attachment :icon, LIMIT diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 2335ffac53..03d472cdb2 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -41,7 +41,7 @@ class SiteUpload < ApplicationRecord mascot: {}.freeze, }.freeze - has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector] + has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector] validates_attachment_content_type :file, content_type: %r{\Aimage/.*\z} validates :file, presence: true From aed930b629762a5b40af86a6e7569036e3edf688 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 10:47:16 +0200 Subject: [PATCH 188/237] New Crowdin Translations (automated) (#27144) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/sr-Latn.json | 4 ++-- app/javascript/mastodon/locales/sr.json | 4 ++-- config/locales/devise.sr-Latn.yml | 8 ++++---- config/locales/devise.sr.yml | 8 ++++---- config/locales/simple_form.lv.yml | 2 +- config/locales/sk.yml | 3 +++ config/locales/sr-Latn.yml | 10 +++++----- config/locales/sr.yml | 10 +++++----- 8 files changed, 26 insertions(+), 23 deletions(-) diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 6fe5603f40..9750784bbc 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -302,8 +302,8 @@ "hashtag.follow": "Zaprati heš oznaku", "hashtag.unfollow": "Otprati heš oznaku", "hashtags.and_other": "…i {count, plural, one {još #} few {još #}other {još #}}", - "home.actions.go_to_explore": "Pogledaj šta je u trendu", - "home.actions.go_to_suggestions": "Pronađite ljude za praćenje", + "home.actions.go_to_explore": "Pogledate šta je u trendu", + "home.actions.go_to_suggestions": "Pronađete ljude koje biste pratili", "home.column_settings.basic": "Osnovna", "home.column_settings.show_reblogs": "Prikaži podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index f3c077cf31..bb4739cbcc 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -302,8 +302,8 @@ "hashtag.follow": "Запрати хеш ознаку", "hashtag.unfollow": "Отпрати хеш ознаку", "hashtags.and_other": "…и {count, plural, one {још #} few {још #}other {још #}}", - "home.actions.go_to_explore": "Погледај шта је у тренду", - "home.actions.go_to_suggestions": "Пронађите људе за праћење", + "home.actions.go_to_explore": "Погледате шта је у тренду", + "home.actions.go_to_suggestions": "Пронађeте људе које бисте пратили", "home.column_settings.basic": "Основна", "home.column_settings.show_reblogs": "Прикажи подржавања", "home.column_settings.show_replies": "Прикажи одговоре", diff --git a/config/locales/devise.sr-Latn.yml b/config/locales/devise.sr-Latn.yml index 836f83a9a5..6b4a5801c6 100644 --- a/config/locales/devise.sr-Latn.yml +++ b/config/locales/devise.sr-Latn.yml @@ -18,13 +18,13 @@ sr-Latn: unconfirmed: Pre nastavka morate potvrditi svoj nalog. mailer: confirmation_instructions: - action: Potvrdite adresu e-pošte + action: Verifikujte adresu e-pošte action_with_app: Potvrdi i vrati se na %{app} explanation: Napravili ste nalog na %{host} sa adresom ove e-pošte. Na jedan klik ste udaljeni od aktiviranja. Ako ovo niste vi, molimo ignorišite ovu e-poštu. explanation_when_pending: Prijavili ste se za poziv %{host} sa ovim imejlom. Kada potvrdite svoj imejl, pregledaćemo vašu prijavu. Možete se prijaviti da biste promenili detalje ili izbrisali nalog, ali ne možete pristupiti većini funkcija dok vam nalog ne bude odobren. Ako vaša prijava bude odbijena, vaši podaci će biti uklonjeni, tako da od vas neće biti potrebne dalje radnje. Ako ovo niste bili vi, zanemarite ovaj imejl. extra_html: Molimo da takođe proverite pravila ove instance i naše uslove korišćenja. subject: 'Mastodont: Uputstvo za potvrdu korisničkog naloga na instanci %{instance}' - title: Potvrdite adresu e-pošte + title: Verifikujte adresu e-pošte email_changed: explanation: 'Adresa ove e-pošte za vaš nalog će biti promenjena u:' extra: Ako niste promenili vašu e-poštu, sasvim je moguće da je neko drugi dobio pristup vašem nalogu. Molimo promenite lozinku odmah ili kontaktirajte administratora instance ako ste zaključani izvan vašeg naloga. @@ -39,7 +39,7 @@ sr-Latn: explanation: Potvrdite novu adresu da biste promenili e-poštu. extra: Ako ova promena nije inicirana sa vaše strane, molimo ignorišite ovu e-poštu. Adresa e-pošta za ovaj Mastodon nalog neće biti promenjena dok ne pristupite poveznici/linku iznad. subject: 'Mastodon: Potvrdite e-poštu za %{instance}' - title: Potvrdite adresu e-pošte + title: Verifikujte adresu e-pošte reset_password_instructions: action: Lozinka promenjena explanation: Zatražili ste novu lozinku za vaš nalog. @@ -93,7 +93,7 @@ sr-Latn: signed_up_but_locked: Uspešno ste se registrovali. Nažalost ne možete se prijaviti zato što je Vaš nalog zaključan. signed_up_but_pending: Na vaš imejl poslata je poruka sa vezom za potvrdu. Nakon što kliknete na vezu, pregledaćemo vašu prijavu. Bićete obavešteni ako bude odobreno. signed_up_but_unconfirmed: Poruka za potvrdu Vašeg naloga je poslata na Vašu imejl adresu. Kliknite na vezu u imejlu da potvrdite svoj nalog. Molimo proverite i spam fasciklu ako niste primili poruku. - update_needs_confirmation: Uspešno ste ažurirali svoj nalog, ali treba da potvrdimo novu adresu Vaše e-pošte. Molimo Vas da proverite e-poštu i pratite link za potvrdu nove adrese Vaše e-pošte. + update_needs_confirmation: Uspešno ste ažurirali svoj nalog, ali moramo da verifikujemo vašu novu adresu e-pošte. Proverite svoju e-poštu i pratite vezu za potvrdu da biste potvrdili novu adresu e-pošte. Proverite svoju fasciklu neželjene pošte ako niste primili ovu e-poštu. updated: Vaš nalog je uspešno ažuriran. sessions: already_signed_out: Uspešno ste se odjavili. diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml index b1be1eebfa..d55cf7a268 100644 --- a/config/locales/devise.sr.yml +++ b/config/locales/devise.sr.yml @@ -18,13 +18,13 @@ sr: unconfirmed: Пре наставка морате потврдити свој налог. mailer: confirmation_instructions: - action: Потврдите адресу е-поште + action: Верификујте адресу е-поште action_with_app: Потврди и врати се на %{app} explanation: Направили сте налог на %{host} са адресом ове е-поште. На један клик сте удаљени од активирања. Ако ово нисте ви, молимо игноришите ову е-пошту. explanation_when_pending: Пријавили сте се за позив %{host} са овим имејлом. Када потврдите свој имејл, прегледаћемо вашу пријаву. Можете се пријавити да бисте променили детаље или избрисали налог, али не можете приступити већини функција док вам налог не буде одобрен. Ако ваша пријава буде одбијена, ваши подаци ће бити уклоњени, тако да од вас неће бити потребне даље радње. Ако ово нисте били ви, занемарите овај имејл. extra_html: Молимо да такође проверите правила ове инстанце и наше услове коришћења. subject: 'Mastodon: Упутство за потврду корисничког налога на инстанци %{instance}' - title: Потврдите адресу е-поште + title: Верификујте адресу е-поште email_changed: explanation: 'Адреса ове е-поште за ваш налог ће бити промењена у:' extra: Ако нисте променили вашу е-пошту, сасвим је могуће да је неко други добио приступ вашем налогу. Молимо промените лозинку одмах или контактирајте администратора инстанце ако сте закључани изван вашег налога. @@ -39,7 +39,7 @@ sr: explanation: Потврдите нову адресу да бисте променили е-пошту. extra: Ако ова промена није иницирана са ваше стране, молимо игноришите ову е-пошту. Адреса е-поште за овај Mastodon налог неће бити промењена док не приступите вези изнад. subject: 'Mastodon: Потврдите е-пошту за %{instance}' - title: Потврдите адресу е-поште + title: Верификујте адресу е-поште reset_password_instructions: action: Лозинка промењена explanation: Затражили сте нову лозинку за ваш налог. @@ -93,7 +93,7 @@ sr: signed_up_but_locked: Успешно сте се регистровали. Нажалост не можете се пријавити зато што је Ваш налог закључан. signed_up_but_pending: На ваш имејл послата је порука са везом за потврду. Након што кликнете на везу, прегледаћемо вашу пријаву. Бићете обавештени ако буде одобрено. signed_up_but_unconfirmed: Порука за потврду Вашег налога је послата на Вашу имејл адресу. Кликните на везу у имејлу да потврдите свој налог. Молимо проверите и спам фасциклу ако нисте примили поруку. - update_needs_confirmation: Uспешно сте ажурирали свој налог, али треба да потврдимо нову адресу Ваше е-поште. Молимо Вас да проверите е-пошту и пратите линк за потврду нове адресе Ваше е-поште. + update_needs_confirmation: Успешно сте ажурирали свој налог, али морамо да верификујемо вашу нову адресу е-поште. Проверите своју е-пошту и пратите везу за потврду да бисте потврдили нову адресу е-поште. Проверите своју фасциклу нежељене поште ако нисте примили ову е-пошту. updated: Ваш налог је успешно ажуриран. sessions: already_signed_out: Успешно сте се одјавили. diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index beff4ee64a..bf831c946f 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -301,7 +301,7 @@ lv: rule: text: Noteikumi settings: - indexable: Ietvert profila lapu muklēšanas dzinējos + indexable: Ietvert profila lapu meklēšanas dzinējos show_application: Parādi, no kuras lietotnes nosūtīji ziņu tag: listable: Atļaut šim tēmturim parādīties meklējumos un ieteikumos diff --git a/config/locales/sk.yml b/config/locales/sk.yml index e08d1101ef..78b9b87db3 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -273,6 +273,7 @@ sk: title: Oboznámenia unpublish: Zruš zverejnenie updated_msg: Oboznámenie úspešne aktualizované! + critical_update_pending: Čaká kritická aktualizácia custom_emojis: assign_category: Priraď kategóriu by_domain: Doména @@ -418,6 +419,8 @@ sk: instance_accounts_dimension: Najsledovanejšie účty instance_accounts_measure: uložené účty instance_follows_measure: ich sledovatelia tu + instance_languages_dimension: Najpopulárnejšie jazyky + instance_media_attachments_measure: uložené mediálne prílohy instance_reports_measure: hlásenia o nich instance_statuses_measure: uložené príspevky delivery: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 5d6849091a..82fbbff49e 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1151,7 +1151,7 @@ sr-Latn: x_seconds: "%{count} sek." deletes: challenge_not_passed: Lozinka koju ste uneli nije bila ispravna - confirm_password: Unesite trenutnu lozinku da bismo proverili Vaš identitet + confirm_password: Unesite trenutnu lozinku za verifikaciju vašeg identiteta confirm_username: Unesite svoje korisničko ime da biste potvrdili proceduru proceed: Obriši nalog success_msg: Vaš nalog je uspešno obrisan @@ -1209,8 +1209,8 @@ sr-Latn: '406': Ova stranica nije dostupna u izabranom formatu. '410': Strana koju ste tražili više ne postoji. '422': - content: Bezbedonosna provera nije uspela. Da ne blokirate kolačiće? - title: Bezbedonosna provera nije uspela + content: Bezbedonosna verifikacija nije uspela. Da li blokirate kolačiće? + title: Bezbedonosna verifikacija nije uspela '429': Uspored '500': content: Izvinjavamo se, nešto je pošlo po zlu sa ove strane. @@ -1296,7 +1296,7 @@ sr-Latn: one: "%{count} stavka koja se poklapa sa Vašom pretragom je izabrana." other: Svih %{count} stavki koje se poklapaju sa Vašom pretragom su izabrane. cancel: Otkaži - changes_saved_msg: Izmene uspešno sačuvane! + changes_saved_msg: Promene su uspešno sačuvane! confirm: Potvrdi copy: Kopiraj delete: Izbriši @@ -1864,7 +1864,7 @@ sr-Latn: here_is_how: Evo kako hint_html: "Verifikacija vašeg identiteta na Mastodon-u je za svakoga. Zasnovano na otvorenim veb standardima, sada i zauvek besplatno. Sve što vam treba je lični veb sajt po kome vas ljudi prepoznaju. Kada se povežete sa ovim veb sajtom sa svog profila, proverićemo da li je veb sajt povezan sa vašim profilom i na njemu ćemo prikazati vizuelni indikator." instructions_html: Kopirajte i nalepite kod ispod u HTML svog veb sajta. Zatim dodajte adresu svog veb sajta u jedno od dodatnih polja na svom profilu sa kartice „Uredi profil” i sačuvajte promene. - verification: Provera + verification: Verifikacija verified_links: Vaše verifikovane veze webauthn_credentials: add: Dodajte novi sigurnosni ključ diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 379b9cb9d6..ffddab8697 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1151,7 +1151,7 @@ sr: x_seconds: "%{count} сек." deletes: challenge_not_passed: Лозинка коју сте унели није била исправна - confirm_password: Унесите тренутну лозинку да бисмо проверили Ваш идентитет + confirm_password: Унесите тренутну лозинку за верификацију вашег идентитета confirm_username: Унесите своје корисничко име да бисте потврдили процедуру proceed: Обриши налог success_msg: Ваш налог је успешно обрисан @@ -1209,8 +1209,8 @@ sr: '406': Ова страница није доступна у изабраном формату. '410': Страна коју сте тражили више не постоји. '422': - content: Безбедоносна провера није успела. Да не блокирате колачиће? - title: Безбедоносна провера није успела + content: Безбедоносна верификација није успела. Да ли блокирате колачиће? + title: Безбедоносна верификација није успела '429': Успоред '500': content: Извињавамо се, нешто је пошло по злу са ове стране. @@ -1296,7 +1296,7 @@ sr: one: "%{count} ставка која се поклапа са Вашом претрагом је изабрана." other: Свих %{count} ставки које се поклапају са Вашом претрагом су изабране. cancel: Откажи - changes_saved_msg: Измене успешно сачуване! + changes_saved_msg: Промене су успешно сачуване! confirm: Потврди copy: Копирај delete: Избриши @@ -1864,7 +1864,7 @@ sr: here_is_how: Ево како hint_html: "Верификација вашег идентитета на Mastodon-у је за свакога. Засновано на отвореним веб стандардима, сада и заувек бесплатно. Све што вам треба је лични веб сајт по коме вас људи препознају. Када се повежете са овим веб сајтом са свог профила, проверићемо да ли је веб сајт повезан са вашим профилом и на њему ћемо приказати визуелни индикатор." instructions_html: Копирајте и налепите код испод у HTML свог веб сајта. Затим додајте адресу свог веб сајта у једно од додатних поља на свом профилу са картице „Уреди профил” и сачувајте промене. - verification: Провера + verification: Верификација verified_links: Ваше верификоване везе webauthn_credentials: add: Додајте нови сигурносни кључ From 6a3d09dde2a06bc532ac3ab61a80e847a70347fc Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 26 Sep 2023 11:11:52 +0200 Subject: [PATCH 189/237] Update `tootctl maintenance fix-duplicates` to Mastodon v4.2.0 (#27147) --- lib/mastodon/cli/maintenance.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index e9badfb8d1..e73bcbf86a 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -5,7 +5,7 @@ require_relative 'base' module Mastodon::CLI class Maintenance < Base MIN_SUPPORTED_VERSION = 2019_10_01_213028 - MAX_SUPPORTED_VERSION = 2022_11_04_133904 + MAX_SUPPORTED_VERSION = 2023_09_07_150100 # Stubs to enjoy ActiveRecord queries while not depending on a particular # version of the code/database @@ -37,6 +37,8 @@ module Mastodon::CLI class CanonicalEmailBlock < ApplicationRecord; end class Appeal < ApplicationRecord; end class Webhook < ApplicationRecord; end + class BulkImport < ApplicationRecord; end + class SoftwareUpdate < ApplicationRecord; end class PreviewCard < ApplicationRecord self.inheritance_column = false @@ -86,6 +88,7 @@ module Mastodon::CLI owned_classes << FollowRecommendationSuppression if ActiveRecord::Base.connection.table_exists?(:follow_recommendation_suppressions) owned_classes << AccountIdentityProof if ActiveRecord::Base.connection.table_exists?(:account_identity_proofs) owned_classes << Appeal if ActiveRecord::Base.connection.table_exists?(:appeals) + owned_classes << BulkImport if ActiveRecord::Base.connection.table_exists?(:bulk_imports) owned_classes.each do |klass| klass.where(account_id: other_account.id).find_each do |record| @@ -169,6 +172,7 @@ module Mastodon::CLI deduplicate_tags! deduplicate_webauthn_credentials! deduplicate_webhooks! + deduplicate_software_updates! Scenic.database.refresh_materialized_view('instances', concurrently: true, cascade: false) if ActiveRecord::Migrator.current_version >= 2020_12_06_004238 Rails.cache.clear @@ -204,6 +208,7 @@ module Mastodon::CLI ActiveRecord::Base.connection.execute('REINDEX INDEX search_index;') ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_uri;') ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_url;') + ActiveRecord::Base.connection.execute('REINDEX INDEX index_accounts_on_domain_and_id;') if ActiveRecord::Migrator.current_version >= 2023_05_24_190515 end def deduplicate_users! @@ -241,6 +246,8 @@ module Mastodon::CLI else ActiveRecord::Base.connection.add_index :users, ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true, where: 'reset_password_token IS NOT NULL', opclass: :text_pattern_ops end + + ActiveRecord::Base.connection.execute('REINDEX INDEX index_users_on_unconfirmed_email;') if ActiveRecord::Migrator.current_version >= 2023_07_02_151753 end def deduplicate_users_process_confirmation_token @@ -541,6 +548,11 @@ module Mastodon::CLI ActiveRecord::Base.connection.add_index :webhooks, ['url'], name: 'index_webhooks_on_url', unique: true end + def deduplicate_software_updates! + # Not bothering with this, it's data that will be recovered with the scheduler + SoftwareUpdate.delete_all + end + def deduplicate_local_accounts!(accounts) accounts = accounts.sort_by(&:id).reverse From 91047c36b5cf6f632dac9eff12133beae0021942 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Thu, 28 Sep 2023 03:16:15 -0500 Subject: [PATCH 190/237] Fix retention dashboard not displaying correct month (#27180) --- app/javascript/mastodon/components/admin/Retention.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/admin/Retention.jsx b/app/javascript/mastodon/components/admin/Retention.jsx index 7bef96d8c4..2f56710682 100644 --- a/app/javascript/mastodon/components/admin/Retention.jsx +++ b/app/javascript/mastodon/components/admin/Retention.jsx @@ -9,11 +9,12 @@ import api from 'mastodon/api'; import { roundTo10 } from 'mastodon/utils/numbers'; const dateForCohort = cohort => { + const timeZone = 'UTC'; switch(cohort.frequency) { case 'day': - return ; + return ; default: - return ; + return ; } }; From 11f0b6bc7e83ecc8191179849732fcb4e009262d Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 28 Sep 2023 10:39:38 +0200 Subject: [PATCH 191/237] Make notification respect reduce-motion (#27178) --- app/javascript/styles/mastodon/components.scss | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 418a9cfeae..58bc430ce2 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9283,14 +9283,17 @@ noscript { 0 10px 15px -3px rgba($base-shadow-color, 0.25), 0 4px 6px -4px rgba($base-shadow-color, 0.25); cursor: default; - transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); - transform: translateZ(0); font-size: 15px; line-height: 21px; &.notification-bar-active { inset-inline-start: 1rem; } + + .no-reduce-motion & { + transition: 0.5s cubic-bezier(0.89, 0.01, 0.5, 1.1); + transform: translateZ(0); + } } .notification-bar-title { From 4e5791bba1dd49a337fa611692479788e27da23c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 10:44:16 +0200 Subject: [PATCH 192/237] New Crowdin Translations (automated) (#27168) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/fi.json | 230 +++++----- app/javascript/mastodon/locales/hy.json | 15 + app/javascript/mastodon/locales/lv.json | 2 +- config/locales/de.yml | 2 +- config/locales/devise.en-GB.yml | 24 +- config/locales/doorkeeper.fi.yml | 86 ++-- config/locales/en-GB.yml | 22 +- config/locales/fi.yml | 572 ++++++++++++------------ config/locales/hy.yml | 22 + config/locales/ko.yml | 2 +- config/locales/simple_form.en-GB.yml | 2 +- config/locales/simple_form.fi.yml | 68 +-- config/locales/simple_form.hy.yml | 1 + 14 files changed, 544 insertions(+), 506 deletions(-) diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index acd53c28a7..76b37ef44b 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -383,7 +383,7 @@ "lists.new.create": "Neue Liste erstellen", "lists.new.title_placeholder": "Titel der neuen Liste", "lists.replies_policy.followed": "Alle folgenden Profile", - "lists.replies_policy.list": "Mitglieder*innen der Liste", + "lists.replies_policy.list": "Mitglieder der Liste", "lists.replies_policy.none": "Niemanden", "lists.replies_policy.title": "Antworten anzeigen für:", "lists.search": "Suche nach Leuten, denen du folgst", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2454bdf980..4aa46ec0fc 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -1,9 +1,9 @@ { - "about.blocks": "Moderoidut palvelimet", - "about.contact": "Yhteystiedot:", + "about.blocks": "Valvotut palvelimet", + "about.contact": "Yhteydenotto:", "about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.", "about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu", - "about.domain_blocks.preamble": "Yleisesti Mastodonin avulla voidaan tarkastella minkä tahansa muun fediverse-palvelinten sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", + "about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.", "about.domain_blocks.silenced.explanation": "Et yleensä näe tämän palvelimen profiileja ja sisältöä, jollet erityisesti etsi juuri sitä tai liity siihen seuraamalla.", "about.domain_blocks.silenced.title": "Rajoitettu", "about.domain_blocks.suspended.explanation": "Mitään tämän palvelimen tietoja ei käsitellä, tallenneta tai vaihdeta, mikä tekee vuorovaikutuksesta ja viestinnästä sen käyttäjien kanssa mahdotonta.", @@ -16,7 +16,7 @@ "account.badges.bot": "Botti", "account.badges.group": "Ryhmä", "account.block": "Estä @{name}", - "account.block_domain": "Estä palvelu {domain}", + "account.block_domain": "Estä verkkotunnus {domain}", "account.block_short": "Estä", "account.blocked": "Estetty", "account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella", @@ -25,11 +25,11 @@ "account.disable_notifications": "Lopeta ilmoittamasta minulle, kun @{name} julkaisee", "account.domain_blocked": "Verkkotunnus estetty", "account.edit_profile": "Muokkaa profiilia", - "account.enable_notifications": "Ilmoita kun käyttäjä @{name} julkaisee viestin", + "account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee", "account.endorse": "Suosittele profiilissasi", - "account.featured_tags.last_status_at": "Viimeisin viesti {date}", - "account.featured_tags.last_status_never": "Ei viestejä", - "account.featured_tags.title": "Käyttäjän {name} esillä olevat aihetunnisteet", + "account.featured_tags.last_status_at": "Viimeisin julkaisu {date}", + "account.featured_tags.last_status_never": "Ei julkaisuja", + "account.featured_tags.title": "Käyttäjän {name} esille nostetut aihetunnisteet", "account.follow": "Seuraa", "account.followers": "seuraaja(t)", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", @@ -54,21 +54,21 @@ "account.muted": "Mykistetty", "account.no_bio": "Kuvausta ei ole annettu.", "account.open_original_page": "Avaa alkuperäinen sivu", - "account.posts": "viesti(t)", - "account.posts_with_replies": "Viestit ja vastaukset", + "account.posts": "Julkaisut", + "account.posts_with_replies": "Julkaisut ja vastaukset", "account.report": "Raportoi @{name}", - "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö klikkaamalla", + "account.requested": "Odottaa hyväksyntää. Peruuta seuraamispyyntö napsauttamalla", "account.requested_follow": "{name} on pyytänyt lupaa seurata sinua", "account.share": "Jaa käyttäjän @{name} profiili", - "account.show_reblogs": "Näytä tehostukset käyttäjältä @{name}", - "account.statuses_counter": "{count, plural, one {{counter} viesti} other {{counter} viestiä}}", + "account.show_reblogs": "Näytä käyttäjän @{name} tehostukset", + "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", "account.unblock": "Poista esto: @{name}", "account.unblock_domain": "Salli palvelu {domain}", "account.unblock_short": "Poista esto", "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lopeta seuraaminen", "account.unmute": "Poista käyttäjän @{name} mykistys", - "account.unmute_notifications_short": "Kumoa ilmoitusten mykistys", + "account.unmute_notifications_short": "Poista ilmoitusten mykistys", "account.unmute_short": "Poista mykistys", "account_note.placeholder": "Lisää muistiinpano napsauttamalla", "admin.dashboard.daily_retention": "Käyttäjän säilyminen rekisteröitymisen jälkeiseen päivään mennessä", @@ -112,7 +112,7 @@ "column.community": "Paikallinen aikajana", "column.direct": "Yksityiset maininnat", "column.directory": "Selaa profiileja", - "column.domain_blocks": "Estetyt palvelut", + "column.domain_blocks": "Estetyt verkkotunnukset", "column.favourites": "Suosikit", "column.firehose": "Live-syötteet", "column.follow_requests": "Seuraamispyynnöt", @@ -120,7 +120,7 @@ "column.lists": "Listat", "column.mutes": "Mykistetyt käyttäjät", "column.notifications": "Ilmoitukset", - "column.pins": "Kiinnitetyt viestit", + "column.pins": "Kiinnitetyt julkaisut", "column.public": "Yleinen aikajana", "column_back_button.label": "Takaisin", "column_header.hide_settings": "Piilota asetukset", @@ -128,7 +128,7 @@ "column_header.moveRight_settings": "Siirrä saraketta oikealle", "column_header.pin": "Kiinnitä", "column_header.show_settings": "Näytä asetukset", - "column_header.unpin": "Poista kiinnitys", + "column_header.unpin": "Irrota", "column_subheading.settings": "Asetukset", "community.column_settings.local_only": "Vain paikalliset", "community.column_settings.media_only": "Vain media", @@ -137,13 +137,13 @@ "compose.language.search": "Hae kieliä...", "compose.published.body": "Julkaisusi julkaistiin.", "compose.published.open": "Avaa", - "compose.saved.body": "Viesti tallennettu.", + "compose.saved.body": "Julkaisu tallennettu.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", - "compose_form.encryption_warning": "Mastodonin viestit eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", + "compose_form.encryption_warning": "Mastodonin julkaisut eivät ole päästä päähän salattuja. Älä jaa arkaluonteisia tietoja Mastodonissa.", "compose_form.hashtag_warning": "Tätä julkaisua ei voi liittää aihetunnisteisiin, koska se ei ole julkinen. Vain näkyvyydeltään julkisiksi määritettyjä julkaisuja voidaan hakea aihetunnisteiden avulla.", "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", - "compose_form.placeholder": "Mitä sinulla on mielessäsi?", + "compose_form.placeholder": "Mitä mietit?", "compose_form.poll.add_option": "Lisää valinta", "compose_form.poll.duration": "Äänestyksen kesto", "compose_form.poll.option_placeholder": "Valinta {number}", @@ -167,24 +167,24 @@ "confirmations.cancel_follow_request.confirm": "Peruuta pyyntö", "confirmations.cancel_follow_request.message": "Haluatko varmasti peruuttaa pyyntösi seurata profiilia {name}?", "confirmations.delete.confirm": "Poista", - "confirmations.delete.message": "Haluatko varmasti poistaa tämän viestin?", + "confirmations.delete.message": "Haluatko varmasti poistaa tämän julkaisun?", "confirmations.delete_list.confirm": "Poista", - "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?", + "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan pysyvästi?", "confirmations.discard_edit_media.confirm": "Hylkää", "confirmations.discard_edit_media.message": "Sinulla on tallentamattomia muutoksia median kuvaukseen tai esikatseluun, hylätäänkö ne silti?", "confirmations.domain_block.confirm": "Estä koko verkkotunnus", - "confirmations.domain_block.message": "Haluatko aivan varmasti estää palvelun {domain} täysin? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimenpide. Et näe kyseisen sisältöä kyseiseltä verkkoalueelta missään julkisissa aikajanoissa tai ilmoituksissa. Tälle verkkoalueelle kuuluvat seuraajasi poistetaan.", + "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkkotunnuksen {domain}? Useimmiten muutama kohdistettu esto tai mykistys on riittävä ja suositeltava toimi. Et näe sisältöä tästä verkkotunnuksesta millään julkisilla aikajanoilla tai ilmoituksissa. Tähän verkkotunnukseen kuuluvat seuraajasi poistetaan.", "confirmations.edit.confirm": "Muokkaa", - "confirmations.edit.message": "Muokkaaminen nyt korvaa viestin, jota paraikaa työstät. Haluatko varmasti jatkaa?", + "confirmations.edit.message": "Jos muokkaat viestiä nyt, se korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.logout.confirm": "Kirjaudu ulos", "confirmations.logout.message": "Haluatko varmasti kirjautua ulos?", "confirmations.mute.confirm": "Mykistä", "confirmations.mute.explanation": "Tämä toiminto piilottaa heidän julkaisunsa sinulta – mukaan lukien ne, joissa heidät mainitaan – sallien heidän yhä nähdä julkaisusi ja seurata sinua.", - "confirmations.mute.message": "Haluatko varmasti mykistää profiilin {name}?", + "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", - "confirmations.redraft.message": "Haluatko varmasti poistaa viestin ja tehdä siitä luonnoksen? Suosikiksi lisäykset sekä tehostukset menetään, ja vastaukset alkuperäisviestiisi jäävät orvoiksi.", + "confirmations.redraft.message": "Haluatko varmasti poistaa julkaisun ja tehdä siitä luonnoksen? Suosikit ja tehostukset menetetään, ja alkuperäisen julkaisun vastaukset jäävät orvoiksi.", "confirmations.reply.confirm": "Vastaa", - "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", + "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa parhaillaan työstämäsi viestin. Haluatko varmasti jatkaa?", "confirmations.unfollow.confirm": "Lopeta seuraaminen", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta profiilia {name}?", "conversation.delete": "Poista keskustelu", @@ -193,18 +193,18 @@ "conversation.with": "{names} kanssa", "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", - "directory.federated": "Koko tunnettu fediverse", + "directory.federated": "Koko tunnettu fediversumi", "directory.local": "Vain palvelusta {domain}", "directory.new_arrivals": "Äskettäin saapuneet", "directory.recently_active": "Hiljattain aktiiviset", "disabled_account_banner.account_settings": "Tilin asetukset", "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", - "dismissable_banner.community_timeline": "Nämä ovat uusimmat julkiset julkaisut käyttäjiltä, joiden tilejä isännöi {domain}.", + "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Tuoreimmat, tehostetuimmat sekä suosikeiksi merkityimmät sijoitetaan listauksessa korkeammalle.", + "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", - "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelussa {domain}.", + "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", @@ -218,7 +218,7 @@ "emoji_button.objects": "Esineet", "emoji_button.people": "Ihmiset", "emoji_button.recent": "Usein käytetyt", - "emoji_button.search": "Etsi...", + "emoji_button.search": "Hae...", "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu ja paikat", @@ -231,20 +231,20 @@ "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", "empty_column.explore_statuses": "Mikään ei trendaa nyt. Tarkista myöhemmin uudelleen!", - "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkiviestiä. Kun lisäät yhden, näkyy se tässä.", - "empty_column.favourites": "Kukaan ei ole vielä merkinnyt tätä viestiä suosikiksi. Kun joku tekee niin, näkyy asia täällä.", - "empty_column.follow_requests": "Et ole vielä vastaanottanut seurauspyyntöjä. Saamasi pyynnöt näytetään täällä.", - "empty_column.followed_tags": "Et ole vielä ottanut yhtään aihetunnistetta seurattavaksesi. Jos tai kun sitten teet niin, ne listautuvat tänne.", + "empty_column.favourited_statuses": "Sinulla ei ole vielä yhtään suosikkijulkaisua. Kun lisäät sellaisen, näkyy se tässä.", + "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä julkaisua suosikkeihinsa. Kun joku tekee niin, tulee hän tähän näkyviin.", + "empty_column.follow_requests": "Et ole vielä vastaanottanut seuraamispyyntöjä. Saamasi pyynnöt näkyvät täällä.", + "empty_column.followed_tags": "Et seuraa vielä yhtäkään aihetunnistetta. Kun alat seurata, ne tulevat tähän näkyviin.", "empty_column.hashtag": "Tällä aihetunnisteella ei ole vielä mitään.", "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia henkilöjä, niin näet enemmän sisältöä.", - "empty_column.list": "Tässä luettelossa ei ole vielä mitään. Kun tämän luettelon jäsenet julkaisevat uusia viestejä, ne näkyvät täällä.", + "empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.", "empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.", "empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä", "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", "error.unexpected_crash.explanation_addons": "Sivua ei voitu näyttää oikein. Tämä virhe johtuu todennäköisesti selaimen lisäosasta tai automaattisista käännöstyökaluista.", - "error.unexpected_crash.next_steps": "Kokeile sivun päivitystä. Jos se ei auta, voi Mastodonin käyttö silti olla mahdollista eri selaimella tai natiivilla sovelluksella.", + "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos se ei auta, voi Mastodonin käyttö ehkä onnistua eri selaimella tai natiivisovelluksella.", "error.unexpected_crash.next_steps_addons": "Yritä poistaa ne käytöstä ja päivittää sivu. Jos se ei auta, voit silti käyttää Mastodonia eri selaimen tai sovelluksen kautta.", "errors.unexpected_crash.copy_stacktrace": "Kopioi pinon jäljitys leikepöydälle", "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", @@ -254,28 +254,28 @@ "explore.trending_links": "Uutiset", "explore.trending_statuses": "Julkaisut", "explore.trending_tags": "Aihetunnisteet", - "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske asiayhteyttä, jossa olet käyttänyt tätä viestiä. Jos haluat, että viesti suodatetaan myös tässä yhteydessä, sinun on muokattava suodatinta.", - "filter_modal.added.context_mismatch_title": "Asiayhteys ei täsmää!", - "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut ja sinun on muutettava viimeistä voimassaolon päivää, jotta sitä voidaan käyttää.", + "filter_modal.added.context_mismatch_explanation": "Tämä suodatinluokka ei koske kontekstia, jossa olet tarkastellut tätä julkaisua. Jos haluat, että julkaisu suodatetaan myös tässä kontekstissa, sinun pitää muokata suodatinta.", + "filter_modal.added.context_mismatch_title": "Konteksti ei täsmää!", + "filter_modal.added.expired_explanation": "Tämä suodatinluokka on vanhentunut, joten sinun on muutettava viimeistä voimassaolopäivää, jotta suodatin on voimassa.", "filter_modal.added.expired_title": "Vanhentunut suodatin!", - "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin siirtymällä {settings_link}.", + "filter_modal.added.review_and_configure": "Voit tarkastella tätä suodatinluokkaa ja määrittää sen tarkemmin kohdassa {settings_link}.", "filter_modal.added.review_and_configure_title": "Suodattimen asetukset", "filter_modal.added.settings_link": "asetukset-sivulle", - "filter_modal.added.short_explanation": "Tämä viesti on lisätty seuraavaan suodatinluokkaan: {title}.", + "filter_modal.added.short_explanation": "Tämä julkaisu on lisätty seuraavaan suodatinluokkaan: {title}.", "filter_modal.added.title": "Suodatin lisätty!", - "filter_modal.select_filter.context_mismatch": "ei sovellu tähän asiayhteyteen", + "filter_modal.select_filter.context_mismatch": "ei sovellu tähän kontekstiin", "filter_modal.select_filter.expired": "vanhentunut", "filter_modal.select_filter.prompt_new": "Uusi luokka: {name}", "filter_modal.select_filter.search": "Etsi tai luo", - "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi luokka", - "filter_modal.select_filter.title": "Suodata tämä viesti", - "filter_modal.title.status": "Suodata viesti", + "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", + "filter_modal.select_filter.title": "Suodata tämä julkaisu", + "filter_modal.title.status": "Suodata julkaisu", "firehose.all": "Kaikki", "firehose.local": "Tämä palvelin", "firehose.remote": "Muut palvelimet", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", - "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, on palvelun {domain} ylläpito arvioinut, että saatat olla halukas tarkistamaan nämä seurauspyynnöt erikseen.", + "follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.", "followed_tags": "Seuratut aihetunnisteet", "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", @@ -307,17 +307,17 @@ "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä tehostukset", "home.column_settings.show_replies": "Näytä vastaukset", - "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamistasi aihetunnisteista ja käyttäjistä sekä heidän tehostamistaan viesteistä. Jos se näyttää tällä hetkellä turhan hiljaiselta, saatat haluta:", + "home.explore_prompt.body": "Kotisyötteesi on sekoitus seuraamiasi aihetunnisteita ja käyttäjiä sekä heidän tehostamiaan julkaisuja. Jos se tuntuu liian hiljaiselta, saatat haluta:", "home.explore_prompt.title": "Tämä on tukikohtasi Mastodonissa.", - "home.hide_announcements": "Piilota ilmoitukset", + "home.hide_announcements": "Piilota tiedotteet", "home.pending_critical_update.body": "Päivitäthän Mastodon-palvelimen mahdollisimman pian!", "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", - "home.show_announcements": "Näytä ilmoitukset", - "interaction_modal.description.favourite": "Mastodon-tilisi myötä voit merkitä julkaisuja suosikeiksi, jolloin osoitat julkaisijoille arvostavasi sisältöä, ja tallennat sitä myös helpommin saatavillesi jatkossa.", - "interaction_modal.description.follow": "Kun sinulla on Mastodon-tili, voit seurata käyttäjää {name} nähdäksesi hänen viestinsä kotisyötteessäsi.", - "interaction_modal.description.reblog": "Kun sinulla on tili Mastodonissa, voit tehostaa viestiä ja jakaa sen omien seuraajiesi kanssa.", - "interaction_modal.description.reply": "Kun sinulla on tili Mastodonissa, voit vastata tähän viestiin.", + "home.show_announcements": "Näytä tiedotteet", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", + "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", + "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", "interaction_modal.login.action": "Palaa aloitussivulle", "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", @@ -326,15 +326,15 @@ "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", - "interaction_modal.title.follow": "Seuraa {name}", - "interaction_modal.title.reblog": "Tehosta käyttäjän {name} viestiä", - "interaction_modal.title.reply": "Vastaa käyttäjän {name} viestiin", + "interaction_modal.title.follow": "Seuraa käyttäjää {name}", + "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", + "interaction_modal.title.reply": "Vastaa käyttäjän {name} julkaisuun", "intervals.full.days": "{number, plural, one {# päivä} other {# päivää}}", "intervals.full.hours": "{number, plural, one {# tunti} other {# tuntia}}", "intervals.full.minutes": "{number, plural, one {# minuutti} other {# minuuttia}}", "keyboard_shortcuts.back": "Siirry takaisin", "keyboard_shortcuts.blocked": "Avaa estettyjen käyttäjien luettelo", - "keyboard_shortcuts.boost": "Tehosta viestiä", + "keyboard_shortcuts.boost": "Tehosta julkaisua", "keyboard_shortcuts.column": "Kohdista sarakkeeseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", @@ -342,7 +342,7 @@ "keyboard_shortcuts.down": "Siirry listassa alaspäin", "keyboard_shortcuts.enter": "Avaa julkaisu", "keyboard_shortcuts.favourite": "Lisää julkaisu suosikkeihin", - "keyboard_shortcuts.favourites": "Avaa suosikkilista", + "keyboard_shortcuts.favourites": "Avaa suosikkiluettelo", "keyboard_shortcuts.federated": "Avaa yleinen aikajana", "keyboard_shortcuts.heading": "Pikanäppäimet", "keyboard_shortcuts.home": "Avaa kotiaikajana", @@ -354,16 +354,16 @@ "keyboard_shortcuts.my_profile": "Avaa profiilisi", "keyboard_shortcuts.notifications": "Avaa ilmoitukset-valikko", "keyboard_shortcuts.open_media": "Avaa media", - "keyboard_shortcuts.pinned": "Avaa lista kiinnitetyistä viesteistä", + "keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo", "keyboard_shortcuts.profile": "Avaa kirjoittajan profiili", - "keyboard_shortcuts.reply": "Vastaa viestiin", - "keyboard_shortcuts.requests": "Avaa lista seurauspyynnöistä", + "keyboard_shortcuts.reply": "Vastaa julkaisuun", + "keyboard_shortcuts.requests": "Avaa seuraamispyyntöjen luettelo", "keyboard_shortcuts.search": "siirry hakukenttään", "keyboard_shortcuts.spoilers": "Näytä/piilota sisältövaroituskenttä", "keyboard_shortcuts.start": "avaa \"Aloitus\"", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", - "keyboard_shortcuts.toot": "Luo uusi viesti", + "keyboard_shortcuts.toot": "Luo uusi julkaisu", "keyboard_shortcuts.unfocus": "Poistu teksti-/hakukentästä", "keyboard_shortcuts.up": "Siirry listassa ylöspäin", "lightbox.close": "Sulje", @@ -372,19 +372,19 @@ "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", "limited_account_hint.action": "Näytä profiili joka tapauksessa", - "limited_account_hint.title": "Palvelun {domain} ylläpito on piilottanut tämän profiilin.", + "limited_account_hint.title": "Palvelun {domain} valvojat ovat piilottaneet tämän profiilin.", "link_preview.author": "Julkaissut {name}", - "lists.account.add": "Lisää listaan", - "lists.account.remove": "Poista listasta", + "lists.account.add": "Lisää listalle", + "lists.account.remove": "Poista listalta", "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", - "lists.edit.submit": "Vaihda otsikko", - "lists.exclusive": "Piilota nämä julkaisut kotiaikajanaltasi", + "lists.edit.submit": "Vaihda nimi", + "lists.exclusive": "Piilota nämä julkaisut kotisyötteestä", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", - "lists.replies_policy.followed": "Jokainen seurattu käyttäjä", - "lists.replies_policy.list": "Listan jäsenet", - "lists.replies_policy.none": "Ei kukaan", + "lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle", + "lists.replies_policy.list": "Listan jäsenille", + "lists.replies_policy.none": "Ei kellekään", "lists.replies_policy.title": "Näytä vastaukset:", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listasi", @@ -400,23 +400,23 @@ "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.bookmarks": "Kirjanmerkit", "navigation_bar.community_timeline": "Paikallinen aikajana", - "navigation_bar.compose": "Julkaise", + "navigation_bar.compose": "Kirjoita uusi julkaisu", "navigation_bar.direct": "Yksityiset maininnat", "navigation_bar.discover": "Löydä uutta", - "navigation_bar.domain_blocks": "Estetyt palvelut", + "navigation_bar.domain_blocks": "Estetyt verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.explore": "Selaa", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", "navigation_bar.followed_tags": "Seuratut aihetunnisteet", - "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", + "navigation_bar.follows_and_followers": "Seuratut ja seuraajat", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit sekä tietyt muut sivut avataan oletuksena perinteisessä käyttöliittymässä.", + "navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen web-käyttöliittymään.", "navigation_bar.personal": "Henkilökohtainen", - "navigation_bar.pins": "Kiinnitetyt viestit", + "navigation_bar.pins": "Kiinnitetyt julkaisut", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.search": "Haku", @@ -430,9 +430,9 @@ "notification.mention": "{name} mainitsi sinut", "notification.own_poll": "Äänestyksesi on päättynyt", "notification.poll": "Äänestys, johon osallistuit, on päättynyt", - "notification.reblog": "{name} tehosti viestiäsi", - "notification.status": "{name} julkaisi juuri viestin", - "notification.update": "{name} muokkasi viestiä", + "notification.reblog": "{name} tehosti julkaisuasi", + "notification.status": "{name} julkaisi juuri", + "notification.update": "{name} muokkasi julkaisua", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.admin.report": "Uudet ilmoitukset:", @@ -446,7 +446,7 @@ "notifications.column_settings.follow_request": "Uudet seuraamispyynnöt:", "notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.poll": "Äänestyksen tulokset:", - "notifications.column_settings.push": "Push-ilmoitukset", + "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", @@ -477,7 +477,7 @@ "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", - "onboarding.follows.title": "Suosittua Mastodonissa", + "onboarding.follows.title": "Mukauta kotisyötettäsi", "onboarding.share.lead": "Kerro ihmisille, kuinka he voivat löytää sinut Mastodonista!", "onboarding.share.message": "Olen {username} #Mastodon'issa! Seuraa minua osoitteessa {url}", "onboarding.share.next_steps": "Mahdolliset seuraavat vaiheet:", @@ -494,7 +494,7 @@ "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", - "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon kuuluu hajautettuun verkkoon, osa kohtaamistasi profiileista sijaitsee muilla palvelimilla kuin sinun. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa ilmaistaan käyttäjänimen perässä!", + "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", @@ -510,15 +510,15 @@ "poll.votes": "{votes, plural, one {# ääni} other {# ääntä}}", "poll_button.add_poll": "Lisää äänestys", "poll_button.remove_poll": "Poista äänestys", - "privacy.change": "Muuta viestin näkyvyyttä", - "privacy.direct.long": "Näkyvissä vain mainituille käyttäjille", - "privacy.direct.short": "Vain mainitut henkilöt", - "privacy.private.long": "Näkyvissä vain seuraajille", + "privacy.change": "Muuta julkaisun näkyvyyttä", + "privacy.direct.long": "Näkyy vain mainituille käyttäjille", + "privacy.direct.short": "Vain mainitut käyttäjät", + "privacy.private.long": "Näkyy vain seuraajille", "privacy.private.short": "Vain seuraajat", - "privacy.public.long": "Näkyvissä kaikille", + "privacy.public.long": "Näkyy kaikille", "privacy.public.short": "Julkinen", - "privacy.unlisted.long": "Näkyvissä kaikille, mutta jättäen pois hakemisen mahdollisuus", - "privacy.unlisted.short": "Listaamaton julkinen", + "privacy.unlisted.long": "Näkyy kaikille, mutta jää pois löytämisominaisuuksista", + "privacy.unlisted.short": "Listaamaton", "privacy_policy.last_updated": "Viimeksi päivitetty {date}", "privacy_policy.title": "Tietosuojakäytäntö", "refresh": "Päivitä", @@ -539,11 +539,11 @@ "report.block": "Estä", "report.block_explanation": "Et näe hänen viestejään, eikä hän voi nähdä viestejäsi tai seurata sinua. Hän näkevät, että olet estänyt hänet.", "report.categories.legal": "Lakiasiat", - "report.categories.other": "muu", + "report.categories.other": "Muu", "report.categories.spam": "Roskaposti", "report.categories.violation": "Sisältö rikkoo yhtä tai useampaa palvelimen sääntöä", - "report.category.subtitle": "Valitse se, mikä sopii parhaiten", - "report.category.title": "Kerro meille miksi tämä {type} pitää raportoida", + "report.category.subtitle": "Valitse sopivin", + "report.category.title": "Kerro meille, miksi tämä {type} pitää raportoida", "report.category.title_account": "profiili", "report.category.title_status": "julkaisu", "report.close": "Valmis", @@ -551,7 +551,7 @@ "report.forward": "Välitä kohteeseen {target}", "report.forward_hint": "Tämä tili on toisella palvelimella. Haluatko lähettää nimettömän raportin myös sinne?", "report.mute": "Mykistä", - "report.mute_explanation": "Et näe hänen viestejään. Hän voi silti seurata sinua ja nähdä viestisi. Hän ei tiedä, että on mykistetty.", + "report.mute_explanation": "Et näe hänen julkaisujaan. Hän voi silti seurata sinua ja nähdä julkaisusi. Hän ei tiedä, että hänet on mykistetty.", "report.next": "Seuraava", "report.placeholder": "Lisäkommentit", "report.reasons.dislike": "En pidä siitä", @@ -564,10 +564,10 @@ "report.reasons.spam_description": "Haitalliset linkit, väärennetyt sitoutumiset tai toistuvat vastaukset", "report.reasons.violation": "Se rikkoo palvelimen sääntöjä", "report.reasons.violation_description": "Tiedät, että se rikkoo tiettyjä sääntöjä", - "report.rules.subtitle": "Valitse kaikki jotka sopivat", + "report.rules.subtitle": "Valitse kaikki sopivat", "report.rules.title": "Mitä sääntöjä rikotaan?", "report.statuses.subtitle": "Valitse kaikki sopivat", - "report.statuses.title": "Onko olemassa yhtään viestiä, jotka tukevat tätä raporttia?", + "report.statuses.title": "Onko julkaisuja, jotka tukevat tätä raporttia?", "report.submit": "Lähetä", "report.target": "Raportoidaan {target}", "report.thanks.take_action": "Tässä on vaihtoehtosi hallita näkemääsi Mastodonissa:", @@ -576,7 +576,7 @@ "report.thanks.title_actionable": "Kiitos raportista, tutkimme asiaa.", "report.unfollow": "Lopeta käyttäjän @{name} seuraaminen", "report.unfollow_explanation": "Seuraat tätä tiliä. Estääksesi tilin viestejä näykymästä kotisyötteessäsi, lopeta sen seuraaminen.", - "report_notification.attached_statuses": "{count, plural, one {{count} viesti} other {{count} viestiä}} liitteenä", + "report_notification.attached_statuses": "{count, plural, one {{count} julkaisu} other {{count} julkaisua}} liitteenä", "report_notification.categories.legal": "Laillinen", "report_notification.categories.other": "Muu", "report_notification.categories.spam": "Roskaposti", @@ -588,7 +588,7 @@ "search.quick_action.go_to_account": "Avaa profiili {x}", "search.quick_action.go_to_hashtag": "Siirry aihetunnisteeseen {x}", "search.quick_action.open_url": "Avaa URL-osoite Mastodonissa", - "search.quick_action.status_search": "Julkaisut, jotka vastaavat hakua {x}", + "search.quick_action.status_search": "Julkaisut haulla {x}", "search.search_or_paste": "Etsi tai kirjoita URL-osoite", "search_popout.full_text_search_disabled_message": "Ei saatavilla palvelimella {domain}.", "search_popout.language_code": "ISO-kielikoodi", @@ -602,8 +602,8 @@ "search_results.hashtags": "Aihetunnisteet", "search_results.nothing_found": "Näille hakusanoille ei löytynyt mitään", "search_results.see_all": "Näytä kaikki", - "search_results.statuses": "Viestit", - "search_results.title": "Etsi {q}", + "search_results.statuses": "Julkaisut", + "search_results.title": "Hae {q}", "server_banner.about_active_users": "Palvelinta käyttäneet ihmiset viimeisen 30 päivän aikana (kuukauden aktiiviset käyttäjät)", "server_banner.active_users": "aktiivista käyttäjää", "server_banner.administered_by": "Ylläpitäjä:", @@ -613,15 +613,15 @@ "sign_in_banner.create_account": "Luo tili", "sign_in_banner.sign_in": "Kirjaudu", "sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy", - "sign_in_banner.text": "Kirjaudu sisään seurataksesi profiileja tai aihetunnisteita, merkitäksesi julkaisuja suosikeiksi, julkaistaksesi sekä vastataksesi julkaisuihin. Voit vuorovaikuttaa myös eri palvelimella sijaitsevalta tililtäsi.", - "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", - "status.admin_domain": "Avaa palvelimen {domain} moderointitoiminnot", - "status.admin_status": "Avaa viesti moderointinäkymässä", + "sign_in_banner.text": "Kirjaudu sisään, niin voit seurata profiileja tai aihetunnisteita, lisätä julkaisuja suosikkeihin, jakaa julkaisuja ja vastata niihin. Voit olla vuorovaikutuksessa myös eri palvelimella olevalta tililtäsi.", + "status.admin_account": "Avaa tilin @{name} valvontanäkymä", + "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", + "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", "status.bookmark": "Tallenna kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", - "status.cannot_reblog": "Tätä viestiä ei voi tehostaa", - "status.copy": "Kopioi linkki viestiin", + "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", + "status.copy": "Kopioi linkki julkaisuun", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -630,8 +630,8 @@ "status.edited": "Muokattu {date}", "status.edited_x_times": "Muokattu {count, plural, one {{count} kerran} other {{count} kertaa}}", "status.embed": "Upota", - "status.favourite": "Merkitse suosikiksi", - "status.filter": "Suodata tämä viesti", + "status.favourite": "Suosikki", + "status.filter": "Suodata tämä julkaisu", "status.filtered": "Suodatettu", "status.hide": "Piilota julkaisu", "status.history.created": "{name} luotu {date}", @@ -644,21 +644,21 @@ "status.more": "Lisää", "status.mute": "Mykistä @{name}", "status.mute_conversation": "Mykistä keskustelu", - "status.open": "Laajenna viesti", + "status.open": "Laajenna julkaisu", "status.pin": "Kiinnitä profiiliin", "status.pinned": "Kiinnitetty julkaisu", "status.read_more": "Näytä enemmän", "status.reblog": "Tehosta", "status.reblog_private": "Tehosta alkuperäiselle yleisölle", "status.reblogged_by": "{name} tehosti", - "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä viestiä. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.", "status.redraft": "Poista ja palauta muokattavaksi", "status.remove_bookmark": "Poista kirjanmerkki", "status.replied_to": "Vastattu {name}", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", "status.report": "Raportoi @{name}", - "status.sensitive_warning": "Arkaluontoista sisältöä", + "status.sensitive_warning": "Arkaluonteista sisältöä", "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", @@ -672,7 +672,7 @@ "status.uncached_media_warning": "Esikatselu ei ole käytettävissä", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", - "subscribed_languages.lead": "Vain valituilla kielillä julkaistut viestit näkyvät etusivullasi ja aikajanalla muutoksen jälkeen. Valitse ei mitään, jos haluat vastaanottaa viestejä kaikilla kielillä.", + "subscribed_languages.lead": "Vain valituilla kielillä kirjoitetut julkaisut näkyvät koti- ja lista-aikajanoillasi muutoksen jälkeen. Älä valitse mitään, jos haluat nähdä julkaisuja kaikilla kielillä.", "subscribed_languages.save": "Tallenna muutokset", "subscribed_languages.target": "Vaihda tilatut kielet {target}", "tabs_bar.home": "Koti", @@ -685,7 +685,7 @@ "timeline_hint.remote_resource_not_displayed": "{resource} muilta palvelimilta ei näytetä.", "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", - "timeline_hint.resources.statuses": "Vanhemmat viestit", + "timeline_hint.resources.statuses": "Vanhemmat julkaisut", "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", @@ -711,7 +711,7 @@ "upload_modal.detect_text": "Tunnista teksti kuvasta", "upload_modal.edit_media": "Muokkaa mediaa", "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", - "upload_modal.preparing_ocr": "Valmistellaan OCR…", + "upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…", "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", @@ -725,5 +725,5 @@ "video.mute": "Mykistä ääni", "video.pause": "Keskeytä", "video.play": "Toista", - "video.unmute": "Poista äänen mykistys" + "video.unmute": "Palauta ääni" } diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index e61aa773dc..776991b014 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -17,6 +17,7 @@ "account.blocked": "Արգելափակուած է", "account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում", "account.cancel_follow_request": "Withdraw follow request", + "account.direct": "Մասնաւոր յիշատակում @{name}", "account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար", "account.domain_blocked": "Տիրոյթը արգելափակուած է", "account.edit_profile": "Խմբագրել հաշիւը", @@ -85,9 +86,11 @@ "column.blocks": "Արգելափակուած օգտատէրեր", "column.bookmarks": "Էջանիշեր", "column.community": "Տեղական հոսք", + "column.direct": "Մասնաւոր յիշատակումներ", "column.directory": "Զննել անձնական էջերը", "column.domain_blocks": "Թաքցուած տիրոյթները", "column.favourites": "Հաւանածներ", + "column.firehose": "Հոսքեր", "column.follow_requests": "Հետեւելու հայցեր", "column.home": "Հիմնական", "column.lists": "Ցանկեր", @@ -135,6 +138,7 @@ "confirmations.block.block_and_report": "Արգելափակել եւ բողոքել", "confirmations.block.confirm": "Արգելափակել", "confirmations.block.message": "Վստա՞հ ես, որ ուզում ես արգելափակել {name}֊ին։", + "confirmations.cancel_follow_request.confirm": "Կասեցնել հայցը", "confirmations.delete.confirm": "Ջնջել", "confirmations.delete.message": "Վստա՞հ ես, որ ուզում ես ջնջել այս գրառումը։", "confirmations.delete_list.confirm": "Ջնջել", @@ -216,6 +220,8 @@ "filter_modal.select_filter.search": "Որոնել կամ ստեղծել", "filter_modal.select_filter.title": "Զտել այս գրառումը", "firehose.all": "Բոլորը", + "firehose.local": "Այս հանգոյցը", + "firehose.remote": "Այլ հանգոյցներ", "follow_request.authorize": "Վաւերացնել", "follow_request.reject": "Մերժել", "follow_requests.unlocked_explanation": "Այս հարցումը ուղարկուած է հաշուից, որի համար {domain}-ի անձնակազմը միացրել է ձեռքով ստուգում։", @@ -246,6 +252,8 @@ "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", "home.show_announcements": "Ցուցադրել յայտարարութիւնները", + "interaction_modal.on_another_server": "Այլ հանգոյցում", + "interaction_modal.on_this_server": "Այս հանգոյցում", "interaction_modal.title.favourite": "Հաւանել {name}-ի գրառումը", "interaction_modal.title.follow": "Հետեւել {name}-ին", "interaction_modal.title.reblog": "Տարածել {name}-ի գրառումը", @@ -316,6 +324,7 @@ "navigation_bar.bookmarks": "Էջանիշեր", "navigation_bar.community_timeline": "Տեղական հոսք", "navigation_bar.compose": "Ստեղծել նոր գրառում", + "navigation_bar.direct": "Մասնաւոր յիշատակումներ", "navigation_bar.discover": "Բացայայտել", "navigation_bar.domain_blocks": "Թաքցուած տիրոյթներ", "navigation_bar.edit_profile": "Խմբագրել հաշիւը", @@ -451,11 +460,15 @@ "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "Այլ", "report_notification.categories.spam": "Սպամ", + "search.no_recent_searches": "Որոնման պատմութիւն չկայ", "search.placeholder": "Փնտրել", "search.search_or_paste": "Որոնել կամ դնել URL", + "search_popout.options": "Որոնման տեսակները", + "search_popout.recent": "Վերջին որոնումները", "search_results.accounts": "Հաշիւներ", "search_results.all": "Բոլորը", "search_results.hashtags": "Պիտակներ", + "search_results.see_all": "Տեսնել բոլորը", "search_results.statuses": "Գրառումներ", "search_results.title": "Որոնել {q}-ն", "server_banner.active_users": "ակտիւ մարդիկ", @@ -475,6 +488,8 @@ "status.copy": "Պատճէնել գրառման յղումը", "status.delete": "Ջնջել", "status.detailed_status": "Շղթայի ընդլայնուած դիտում", + "status.direct": "Մասնաւոր յիշատակում @{name}", + "status.direct_indicator": "Մասնաւոր յիշատակում", "status.edit": "Խմբագրել", "status.edited": "Խմբագրուել է՝ {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 2480f879ca..d35418e185 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -202,7 +202,7 @@ "dismissable_banner.community_timeline": "Šīs ir jaunākās publiskās ziņas no personām, kuru kontus mitina {domain}.", "dismissable_banner.dismiss": "Atcelt", "dismissable_banner.explore_links": "Par šiem jaunumiem šobrīd runā cilvēki šajā un citos decentralizētā tīkla serveros.", - "dismissable_banner.explore_statuses": "Šīs ir ziņas no visa sociālā tīkla, kas šodien kļūst arvien populārākas. Jaunākas ziņas ar vairāk uzlabojumiem un iecienītākajām ziņām tiek novērtētas augstāk.", + "dismissable_banner.explore_statuses": "Ieraksti, kas šobrīd gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti neseni ieraksti, kas pastiprināti un pievienoti izlasēm.", "dismissable_banner.explore_tags": "Šie tēmturi šobrīd kļūst arvien populārāki cilvēku vidū šajā un citos decentralizētā tīkla serveros.", "dismissable_banner.public_timeline": "Šīs ir jaunākās publiskās ziņas no lietotājiem sociālajā tīmeklī, kurām seko lietotāji domēnā {domain}.", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", diff --git a/config/locales/de.yml b/config/locales/de.yml index 69151b2e70..d72b0a608f 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1069,7 +1069,7 @@ de: cas: CAS saml: SAML register: Registrieren - registration_closed: "%{instance} akzeptiert keine neuen Mitglieder*innen" + registration_closed: "%{instance} akzeptiert keine neuen Mitglieder" resend_confirmation: Bestätigungslink erneut zusenden reset_password: Passwort zurücksetzen rules: diff --git a/config/locales/devise.en-GB.yml b/config/locales/devise.en-GB.yml index 9a51d07576..e7ab9462dc 100644 --- a/config/locales/devise.en-GB.yml +++ b/config/locales/devise.en-GB.yml @@ -6,22 +6,22 @@ en-GB: send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. Please check your spam folder if you didn't receive this email. failure: - already_authenticated: You are already signed in. + already_authenticated: You are already logged in. inactive: Your account is not activated yet. invalid: Invalid %{authentication_keys} or password. last_attempt: You have one more attempt before your account is locked. locked: Your account is locked. not_found_in_database: Invalid %{authentication_keys} or password. pending: Your account is still under review. - timeout: Your session expired. Please sign in again to continue. - unauthenticated: You need to sign in or sign up before continuing. + timeout: Your session expired. Please log in again to continue. + unauthenticated: You need to log in or sign up before continuing. unconfirmed: You have to confirm your email address before continuing. mailer: confirmation_instructions: action: Verify email address action_with_app: Confirm and return to %{app} explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. - explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can login to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can log in to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. extra_html: Please also check out the rules of the server and our terms of service. subject: 'Mastodon: Confirmation instructions for %{instance}' title: Verify email address @@ -84,28 +84,28 @@ en-GB: no_token: You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided. send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. Please check your spam folder if you didn't receive this email. - updated: Your password has been changed successfully. You are now signed in. + updated: Your password has been changed successfully. You are now logged in. updated_not_active: Your password has been changed successfully. registrations: destroyed: Bye! Your account has been successfully cancelled. We hope to see you again soon. signed_up: Welcome! You have signed up successfully. - signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated. - signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked. + signed_up_but_inactive: You have signed up successfully. However, we could not log you in because your account is not yet activated. + signed_up_but_locked: You have signed up successfully. However, we could not log you in because your account is locked. signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved. signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email. update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email. updated: Your account has been updated successfully. sessions: - already_signed_out: Signed out successfully. - signed_in: Signed in successfully. - signed_out: Signed out successfully. + already_signed_out: Logged out successfully. + signed_in: Logged in successfully. + signed_out: Logged out successfully. unlocks: send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. Please check your spam folder if you didn't receive this email. send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. Please check your spam folder if you didn't receive this email. - unlocked: Your account has been unlocked successfully. Please sign in to continue. + unlocked: Your account has been unlocked successfully. Please log in to continue. errors: messages: - already_confirmed: was already confirmed, please try signing in + already_confirmed: was already confirmed, please try logging in confirmation_period_expired: needs to be confirmed within %{period}, please request a new one expired: has expired, please request a new one not_found: not found diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 71958c5b3d..81b248ef2e 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -6,7 +6,7 @@ fi: name: Sovelluksen nimi redirect_uri: Uudelleenohjauksen URI scopes: Oikeudet - website: Sovelluksen verkkosivu + website: Sovelluksen verkkosivusto errors: models: doorkeeper/application: @@ -135,7 +135,7 @@ fi: media: Medialiitteet mutes: Mykistykset notifications: Ilmoitukset - push: Push-ilmoitukset + push: Puskuilmoitukset reports: Raportit search: Hae statuses: Viestit @@ -147,49 +147,49 @@ fi: application: title: OAuth-valtuutus tarvitaan scopes: - admin:read: lukea kaikkia tietoja palvelimelta - admin:read:accounts: lue arkaluontoinen sisältö kaikilta tileiltä - admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista kanonisesti sallituista sähköpostiosoitteista + admin:read: lue kaikkia palvelimen tietoja + admin:read:accounts: lue arkaluonteisia tietoja kaikista tileistä + admin:read:canonical_email_blocks: lue arkaluonteisia tietoja kaikista estetyistä kanonisista sähköpostiosoitteista admin:read:domain_allows: lue arkaluonteisia tietoja kaikista sallituista verkkotunnuksista admin:read:domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä verkkotunnuksista admin:read:email_domain_blocks: lue arkaluonteisia tietoja kaikista estetyistä sähköpostiverkkotunnuksista admin:read:ip_blocks: lue arkaluonteisia tietoja kaikista estetyistä IP-osoitteista - admin:read:reports: lue arkaluonteiset tiedot kaikista raporteista ja raportoiduista tileistä - admin:write: muokata kaikkia tietoja palvelimella - admin:write:accounts: suorita moderointitoiminnot tileillä - admin:write:canonical_email_blocks: toteuta moderointitoimenpiteitä kanonisille sähköpostiosoite-estoille - admin:write:domain_allows: toteuta moderointitoimenpiteitä sallituille verkkotunnuksille - admin:write:domain_blocks: toteuta moderointitoimenpiteitä estetyille verkkotunnuksille - admin:write:email_domain_blocks: toteuta moderointitoimenpiteitä estetyille sähköpostiverkkotunnuksille - admin:write:ip_blocks: toteuta moderointitoimenpiteitä estetyille IP-osoitteille - admin:write:reports: suorita moderointitoiminnot raporteissa - crypto: käytä päästä päähän salausta - follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen - push: vastaanottaa push-ilmoituksesi - read: lukea tilin tietoja - read:accounts: nähdä tilin tiedot - read:blocks: katso lohkosi - read:bookmarks: katso kirjanmerkkisi - read:favourites: näytä suosikkisi - read:filters: katso suodattimesi - read:follows: katso ketä seuraat - read:lists: katso listasi - read:mutes: katso mykistyksesi - read:notifications: katso ilmoitukset - read:reports: katso raporttisi - read:search: haku sinun puolesta - read:statuses: katso kaikki viestit - write: julkaista puolestasi - write:accounts: muokata profiiliasi - write:blocks: estää tilit ja palvelimet - write:bookmarks: kirjanmerkki viestit - write:conversations: mykistä ja poistaa keskustelut + admin:read:reports: lue arkaluonteisia tietoja kaikista raporteista ja raportoiduista tileistä + admin:write: muokkaa kaikkia palvelimen tietoja + admin:write:accounts: suorita valvontatoimia tileille + admin:write:canonical_email_blocks: suorita valvontatoimia estetyille kanonisille sähköpostiosoitteille + admin:write:domain_allows: suorita valvontatoimia sallituille verkkotunnuksille + admin:write:domain_blocks: suorita valvontatoimia estetyille verkkotunnuksille + admin:write:email_domain_blocks: suorita valvontatoimia estetyille sähköpostiverkkotunnuksille + admin:write:ip_blocks: suorita valvontatoimia estetyille IP-osoitteille + admin:write:reports: suorita valvontatoimia raporteille + crypto: käytä päästä päähän -salausta + follow: muokkaa tilin suhteita + push: vastaanota puskuilmoituksiasi + read: lue kaikkia tilin tietoja + read:accounts: katso tilien tietoja + read:blocks: katso estojasi + read:bookmarks: katso kirjanmerkkejäsi + read:favourites: katso suosikkejasi + read:filters: katso suodattimiasi + read:follows: katso seurattujasi + read:lists: katso listojasi + read:mutes: katso mykistyksiäsi + read:notifications: katso ilmoituksiasi + read:reports: katso raporttejasi + read:search: hae puolestasi + read:statuses: katso kaikkia julkaisujasi + write: muokkaa kaikkia tilisi tietoja + write:accounts: muokkaa profiiliasi + write:blocks: estä tilejä ja verkkotunnuksia + write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut - write:filters: luoda suodattimia - write:follows: seurata ihmisiä - write:lists: luoda listoja - write:media: lähettää mediatiedostoja - write:mutes: mykistää ihmisiä ja keskusteluja - write:notifications: tyhjentää ilmoituksesi - write:reports: raportoi muille ihmisille - write:statuses: julkaise viestejä + write:filters: luo suodattimia + write:follows: seuraa käyttäjiä + write:lists: luo listoja + write:media: lähetä mediatiedostoja + write:mutes: mykistä käyttäjiä ja keskusteluja + write:notifications: tyhjennä ilmoituksesi + write:reports: raportoi muita käyttäjiä + write:statuses: julkaise julkaisuja diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index ca61644632..98a40c45cf 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1028,7 +1028,7 @@ en-GB: applications: created: Application successfully created destroyed: Application successfully deleted - logout: Logout + logout: Log out regenerate_token: Regenerate access token token_regenerated: Access token successfully regenerated warning: Be very careful with this data. Never share it with anyone! @@ -1055,7 +1055,7 @@ en-GB: link_to_webauth: Use your security key device log_in_with: Log in with login: Log in - logout: Logout + logout: Log out migrate_account: Move to a different account migrate_account_html: If you wish to redirect this account to a different one, you can configure it here. or_log_in_with: Or log in with @@ -1089,8 +1089,8 @@ en-GB: new_confirmation_instructions_sent: You will receive a new e-mail with the confirmation link in a few minutes! title: Check your inbox sign_in: - preamble_html: Sign in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. - title: Sign in to %{domain} + preamble_html: Log in with your %{domain} credentials. If your account is hosted on a different server, you will not be able to log in here. + title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. preamble: With an account on this Mastodon server, you'll be able to follow any other person on the network, regardless of where their account is hosted. @@ -1379,8 +1379,8 @@ en-GB: webauthn: security keys description_html: If you see activity that you don't recognise, consider changing your password and enabling two-factor authentication. empty: No authentication history available - failed_sign_in_html: Failed sign-in attempt with %{method} from %{ip} (%{browser}) - successful_sign_in_html: Successful sign-in with %{method} from %{ip} (%{browser}) + failed_sign_in_html: Failed login attempt with %{method} from %{ip} (%{browser}) + successful_sign_in_html: Successful login with %{method} from %{ip} (%{browser}) title: Authentication history mail_subscriptions: unsubscribe: @@ -1773,11 +1773,11 @@ en-GB: title: Archive takeout suspicious_sign_in: change_password: change your password - details: 'Here are details of the sign-in:' - explanation: We've detected a sign-in to your account from a new IP address. + details: 'Here are details of the login:' + explanation: We've detected a login to your account from a new IP address. further_actions_html: If this wasn't you, we recommend that you %{action} immediately and enable two-factor authentication to keep your account secure. subject: Your account has been accessed from a new IP address - title: A new sign-in + title: A new login warning: appeal: Submit an appeal appeal_description: If you believe this is an error, you can submit an appeal to the staff of %{instance}. @@ -1790,7 +1790,7 @@ en-GB: mark_statuses_as_sensitive: Some of your posts have been marked as sensitive by the moderators of %{instance}. This means that people will need to tap the media in the posts before a preview is displayed. You can mark media as sensitive yourself when posting in the future. sensitive: From now on, all your uploaded media files will be marked as sensitive and hidden behind a click-through warning. silence: You can still use your account but only people who are already following you will see your posts on this server, and you may be excluded from various discovery features. However, others may still manually follow you. - suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still login to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. + suspend: You can no longer use your account, and your profile and other data are no longer accessible. You can still log in to request a backup of your data until the data is fully removed in about 30 days, but we will retain some basic data to prevent you from evading the suspension. reason: 'Reason:' statuses: 'Posts cited:' subject: @@ -1825,7 +1825,7 @@ en-GB: invalid_otp_token: Invalid two-factor code otp_lost_help_html: If you lost access to both, you may get in touch with %{email} seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available. - signed_in_as: 'Signed in as:' + signed_in_as: 'Logged in as:' verification: extra_instructions_html: Tip: The link on your website can be invisible. The important part is rel="me" which prevents impersonation on websites with user-generated content. You can even use a link tag in the header of the page instead of a, but the HTML must be accessible without executing JavaScript. here_is_how: Here's how diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5403f22473..8a5d72a661 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -12,24 +12,24 @@ fi: one: seuraaja other: seuraajaa following: seurattu(a) - instance_actor_flash: Tämä on virtuaalitili, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään yhdistämistarkoituksiin, eikä sitä tule jäädyttää. + 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} nothing_here: Täällä ei ole mitään! pin_errors: following: Sinun täytyy seurata henkilöä jota haluat tukea posts: - one: viesti + one: Julkaisu other: viestiä - posts_tab_heading: Viestit + posts_tab_heading: Julkaisut admin: account_actions: action: Suorita toimenpide - title: Suorita moderointitoiminto %{acct} + title: Suorita valvontatoimi käyttäjälle %{acct} account_moderation_notes: create: Jätä muistiinpano - created_msg: Moderointimerkinnän luonti onnistui! - destroyed_msg: Moderointimerkinnän poisto onnistui! + created_msg: Valvontamerkinnän luonti onnistui! + destroyed_msg: Valvontamerkinnän poisto onnistui! accounts: add_email_domain_block: Estä sähköpostidomain approve: Hyväksy @@ -48,7 +48,7 @@ fi: changed_msg: Rooli vaihdettu onnistuneesti! label: Vaihda roolia no_role: Ei roolia - title: Vaihda roolia käyttäjälle %{username} + title: Vaihda käyttäjän %{username} roolia confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan @@ -61,7 +61,7 @@ fi: disable_sign_in_token_auth: Poista sähköpostitunnuksen todennus käytöstä disable_two_factor_authentication: Poista 2FA käytöstä disabled: Poistettu käytöstä - display_name: Nimimerkki + display_name: Näyttönimi domain: Verkkotunnus edit: Muokkaa email: Sähköposti @@ -71,7 +71,7 @@ fi: enabled: Käytössä enabled_msg: Käyttäjän %{username} tili palautettu onnistuneesti käyttöön followers: Seuraajat - follows: Seuraa + follows: Seuratut header: Otsakekuva inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen @@ -94,9 +94,9 @@ fi: disabled: Ei käytössä pending: Odottavat silenced: Rajoitettu - suspended: Jäähyllä - title: Moderointi - moderation_notes: Moderointimerkinnät + suspended: Jäädytetty + title: Valvonta + moderation_notes: Valvontamerkinnät most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP no_account_selected: Yhtään tiliä ei muutettu, koska mitään ei valittu @@ -104,7 +104,7 @@ fi: no_role_assigned: Roolia ei ole määritetty not_subscribed: Ei tilaaja pending: Odottaa tarkistusta - perform_full_suspension: Siirrä kokonaan jäähylle + perform_full_suspension: Jäädytä previous_strikes: Aiemmat varoitukset previous_strikes_description_html: one: Tällä tilillä on yksi varoitus. @@ -118,7 +118,7 @@ fi: reject: Hylkää rejected_msg: Käyttäjän %{username} rekisteröitymishakemus hylättiin remote_suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. - remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja tilin kaikki tiedot poistetaan %{date}. Ennen tätä ajankohtaa on kyseessä olevan palvelimen ylläpidolla mahdollisuus palauttaa tili ongelmitta. Jos puolestaan haluat poistaa tilin tietoineen heti, onnistuu se alta. + remote_suspension_reversible_hint_html: Tili on jäädytetty heidän palvelimellaan, ja kaikki tiedot poistetaan %{date}. Sitä ennen etäpalvelin voi palauttaa tilin ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. remove_avatar: Poista profiilikuva remove_header: Poista otsakekuva removed_avatar_msg: Käyttäjän %{username} avatar-kuva poistettu onnistuneesti @@ -144,21 +144,21 @@ fi: show: created_reports: Tämän tilin luomat raportit targeted_reports: Tästä tilistä tehdyt raportit - silence: Hiljennä - silenced: Mykistetty - statuses: Viestit + silence: Rajoita + silenced: Rajoitettu + statuses: Julkaisut strikes: Aiemmat varoitukset subscribe: Tilaa suspend: Jäädytä - suspended: Jäähyllä - suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit peruuttaa tilin jäädyttämisen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. - suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ilman haitallisia vaikutuksia. Jos haluat poistaa kaikki tilin tiedot välittömästi, voit tehdä sen alla. + suspended: Jäädytetty + suspension_irreversible: Tämän tilin tiedot on poistettu peruuttamattomasti. Voit kumota tilin jäädytyksen, jolloin siitä tulee käyttökelpoinen, mutta toiminto ei palauta sillä aiemmin olleita tietoja. + suspension_reversible_hint_html: Tili on jäädytetty, ja tiedot poistetaan kokonaan %{date}. Siihen asti tili voidaan palauttaa ongelmitta. Jos haluat poistaa kaikki tilin tiedot heti, onnistuu se alta. title: Tilit unblock_email: Poista sähköpostiosoitteen esto unblocked_email_msg: Käyttäjän %{username} sähköpostiosoitteen esto kumottiin unconfirmed_email: Sähköpostia ei vahvistettu undo_sensitized: Kumoa pakotus arkaluonteiseksi tiliksi - undo_silenced: Peru hiljennys + undo_silenced: Kumoa rajoitus undo_suspension: Peru jäähy unsilenced_msg: Tilin %{username} rajoituksen kumoaminen onnistui unsubscribe: Lopeta tilaus @@ -167,7 +167,7 @@ fi: view_domain: Näytä verkkotunnuksen yhteenveto warn: Varoita web: Verkko - whitelisted: Sallittu federaatioon + whitelisted: Sallittu federoimaan action_logs: action_types: approve_appeal: Hyväksy valitus @@ -177,7 +177,7 @@ fi: change_role_user: Muuta käyttäjän roolia confirm_user: Vahvista käyttäjä create_account_warning: Luo varoitus - create_announcement: Luo ilmoitus + create_announcement: Luo tiedote create_canonical_email_block: Luo sähköpostin esto create_custom_emoji: Luo mukautettu emoji create_domain_allow: Luo verkkotunnuksen salliminen @@ -187,7 +187,7 @@ fi: create_unavailable_domain: Luo ei-saatavilla oleva verkkotunnus create_user_role: Luo rooli demote_user: Alenna käyttäjä - destroy_announcement: Poista ilmoitus + destroy_announcement: Poista tiedote destroy_canonical_email_block: Poista sähköpostin esto destroy_custom_emoji: Poista mukautettu emoji destroy_domain_allow: Poista verkkotunnuksen salliminen @@ -195,7 +195,7 @@ fi: destroy_email_domain_block: Poista sähköpostin verkkotunnuksen esto destroy_instance: Tyhjennä verkkotunnus destroy_ip_block: Poista IP-sääntö - destroy_status: Poista viesti + destroy_status: Poista julkaisu destroy_unavailable_domain: Poista ei-saatavilla oleva verkkotunnus destroy_user_role: Hävitä rooli disable_2fa_user: Poista kaksivaiheinen tunnistautuminen käytöstä @@ -215,77 +215,77 @@ fi: reset_password_user: Nollaa salasana resolve_report: Selvitä raportti sensitive_account: Pakotus arkaluontoiseksi tiliksi - silence_account: Hiljennä tili + silence_account: Rajoita tiliä suspend_account: Jäädytä tili unassigned_report: Peruuta raportin määritys unblock_email_account: Poista sähköpostiosoitteen esto unsensitive_account: Kumoa pakotus arkaluontoiseksi tiliksi - unsilence_account: Peruuta tilin rajoitus - unsuspend_account: Peruuta tilin jäädytys - update_announcement: Päivitä ilmoitus - update_custom_emoji: Päivitä muokattu emoji + unsilence_account: Kumoa tilin rajoitus + unsuspend_account: Kumoa tilin jäädytys + update_announcement: Päivitä tiedote + update_custom_emoji: Päivitä mukautettu emoji update_domain_block: Päivitä verkkotunnuksen esto update_ip_block: Päivitä IP-sääntö - update_status: Päivitä viesti + update_status: Päivitä julkaisu update_user_role: Päivitä rooli actions: - approve_appeal_html: "%{name} hyväksyi moderointipäätöksen muutoksenhaun lähettäjältä %{target}" + approve_appeal_html: "%{name} hyväksyi valvontapäätöksen valituksen käyttäjältä %{target}" approve_user_html: "%{name} hyväksyi käyttäjän rekisteröitymisen kohteesta %{target}" assigned_to_self_report_html: "%{name} otti raportin %{target} tehtäväkseen" change_email_user_html: "%{name} vaihtoi käyttäjän %{target} sähköpostiosoitteen" change_role_user_html: "%{name} muutti käyttäjän %{target} roolia" confirm_user_html: "%{name} vahvisti käyttäjän %{target} sähköpostiosoitteen" create_account_warning_html: "%{name} lähetti varoituksen käyttäjälle %{target}" - create_announcement_html: "%{name} loi uuden ilmoituksen %{target}" + create_announcement_html: "%{name} loi uuden tiedotteen %{target}" create_canonical_email_block_html: "%{name} esti sähköpostin hashilla %{target}" create_custom_emoji_html: "%{name} lähetti uuden emojin %{target}" - create_domain_allow_html: "%{name} salli federaation verkkotunnuksella %{target}" + create_domain_allow_html: "%{name} salli federoinnin verkkotunnuksen %{target} kanssa" create_domain_block_html: "%{name} esti verkkotunnuksen %{target}" create_email_domain_block_html: "%{name} esti sähköpostin %{target}" create_ip_block_html: "%{name} loi IP-säännön %{target}" create_unavailable_domain_html: "%{name} pysäytti toimituksen verkkotunnukseen %{target}" create_user_role_html: "%{name} loi roolin %{target}" demote_user_html: "%{name} alensi käyttäjän %{target}" - destroy_announcement_html: "%{name} poisti ilmoituksen %{target}" + destroy_announcement_html: "%{name} poisti tiedotteen %{target}" destroy_canonical_email_block_html: "%{name} poisti sähköpostieston hashilla %{target}" destroy_custom_emoji_html: "%{name} poisti emojin %{target}" - destroy_domain_allow_html: "%{name} esti federaation verkkotunnuksella %{target}" + destroy_domain_allow_html: "%{name} kielsi federoinnin verkkotunnuksen %{target} kanssa" destroy_domain_block_html: "%{name} poisti verkkotunnuksen %{target} eston" destroy_email_domain_block_html: "%{name} poisti sähköpostin verkkotunnuksen %{target} eston" destroy_instance_html: "%{name} tyhjensi verkkotunnuksen %{target}" destroy_ip_block_html: "%{name} poisti IP-säännön %{target}" - destroy_status_html: "%{name} poisti käyttäjän %{target} viestin" + destroy_status_html: "%{name} poisti käyttäjän %{target} julkaisun" destroy_unavailable_domain_html: "%{name} jatkoi toimitusta verkkotunnukseen %{target}" destroy_user_role_html: "%{name} poisti roolin %{target}" disable_2fa_user_html: "%{name} poisti käyttäjältä %{target} vaatimuksen kaksivaiheisen todentamiseen" disable_custom_emoji_html: "%{name} poisti käytöstä emojin %{target}" disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" - enable_custom_emoji_html: "%{name} salli emojin %{target}" + enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" - reject_appeal_html: "%{name} hylkäsi moderointipäätöksen muutoksenhaun %{target}" + reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" reject_user_html: "%{name} hylkäsi käyttäjän rekisteröitymisen kohteesta %{target}" remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" reopen_report_html: "%{name} avasi uudelleen raportin %{target}" - resend_user_html: "%{name} lähetti vahvistusviestin sähköpostitse käyttäjälle %{target}" + resend_user_html: "%{name} lähetti vahvistussähköpostiviestin uudelleen käyttäjälle %{target}" reset_password_user_html: "%{name} palautti käyttäjän %{target} salasanan" resolve_report_html: "%{name} ratkaisi raportin %{target}" sensitive_account_html: "%{name} merkitsi käyttäjän %{target} median arkaluonteiseksi" - silence_account_html: "%{name} rajoitti käyttäjän %{target} tilin" - suspend_account_html: "%{name} siirsi käyttäjän %{target} jäähylle" + silence_account_html: "%{name} rajoitti käyttäjän %{target} tiliä" + suspend_account_html: "%{name} jäädytti käyttäjän %{target} tilin" unassigned_report_html: "%{name} peruutti raportin määrityksen %{target}" unblock_email_account_html: "%{name} poisti käyttäjän %{target} sähköpostiosoitteen eston" unsensitive_account_html: "%{name} poisti käyttäjän %{target} median arkaluonteisen merkinnän" - unsilence_account_html: "%{name} ei tehnyt rajoitusta %{target} tilille" - unsuspend_account_html: "%{name} perui käyttäjän %{target} jäähyn" - update_announcement_html: "%{name} päivitti ilmoituksen %{target}" + unsilence_account_html: "%{name} kumosi käyttäjän %{target} rajoituksen" + unsuspend_account_html: "%{name} kumosi käyttäjän %{target} tilin jäädytyksen" + update_announcement_html: "%{name} päivitti tiedotteen %{target}" update_custom_emoji_html: "%{name} päivitti emojin %{target}" update_domain_block_html: "%{name} päivitti verkkotunnuksen %{target} eston" update_ip_block_html: "%{name} muutti sääntöä IP-osoitteelle %{target}" - update_status_html: "%{name} päivitti viestin %{target}" + update_status_html: "%{name} päivitti käyttäjän %{target} julkaisun" update_user_role_html: "%{name} muutti roolia %{target}" deleted_account: poisti tilin empty: Lokeja ei löytynyt. @@ -293,43 +293,43 @@ fi: filter_by_user: Suodata käyttäjän mukaan title: Auditointiloki announcements: - destroyed_msg: Ilmoitus poistettu onnistuneesti! + destroyed_msg: Tiedote poistettu onnistuneesti! edit: - title: Muokkaa ilmoitusta - empty: Yhtään ilmoitusta ei löytynyt. - live: Suora + title: Muokkaa tiedotetta + empty: Tiedotteita ei löytynyt. + live: Julki new: - create: Luo ilmoitus - title: Uusi ilmoitus + create: Luo tiedote + title: Uusi tiedote publish: Julkaise - published_msg: Ilmoitus julkaistu onnistuneesti! - scheduled_for: Ajastettu %{time} - scheduled_msg: Ilmoitus on ajastettu julkaisua varten! - title: Ilmoitukset + published_msg: Tiedote julkaistu onnistuneesti! + scheduled_for: Ajoitettu %{time} + scheduled_msg: Tiedotteen julkaisu ajoitettu! + title: Tiedotteet unpublish: Lopeta julkaisu - unpublished_msg: Ilmoituksen julkaisu lopetettu! - updated_msg: Ilmoitus päivitetty onnistuneesti! + unpublished_msg: Tiedotteen julkaisu lopetettu onnistuneesti! + updated_msg: Tiedote päivitetty onnistuneesti! critical_update_pending: Kriittinen päivitys odottaa custom_emojis: - assign_category: Aseta kategoria + assign_category: Aseta luokka by_domain: Verkkotunnus copied_msg: Emojin paikallisen kopion luonti onnistui copy: Kopioi copy_failed_msg: Emojista ei voitu tehdä paikallista kopiota - create_new_category: Luo uusi kategoria - created_msg: Emojin luotu! + create_new_category: Luo uusi luokka + created_msg: Emojin luonti onnistui! delete: Poista - destroyed_msg: Emojo poistettu! + destroyed_msg: Emojon poisto onnistui! disable: Poista käytöstä disabled: Ei käytössä - disabled_msg: Emojin poisto käytöstä onnistui + disabled_msg: Emojin käytöstäpoisto onnistui emoji: Emoji enable: Ota käyttöön enabled: Käytössä enabled_msg: Emojin käyttöönotto onnistui image_hint: PNG tai GIF, enintään %{size} - list: Listaa - listed: Listassa + list: Lisää listalle + listed: Listalla new: title: Lisää uusi mukautettu emoji no_emoji_selected: Emojeita ei muutettu, koska yhtään ei valittu @@ -340,7 +340,7 @@ fi: title: Mukautetut emojit uncategorized: Luokittelemattomat unlist: Poista listalta - unlisted: Ei listassa + unlisted: Ei listalla update_failed_msg: Emojin päivitys epäonnistui updated_msg: Emojin päivitys onnistui! upload: Lähetä @@ -349,26 +349,26 @@ fi: interactions: vuorovaikutukset media_storage: Median tallennustila new_users: uudet käyttäjät - opened_reports: raportit avattu + opened_reports: avatut raportit pending_appeals_html: one: "%{count} vireillä oleva valitus" - other: "%{count} vireillä olevat valitukset" + other: "%{count} vireillä olevaa valitusta" pending_reports_html: one: "%{count} odottava raportti" - other: "%{count} odottavat raportit" + other: "%{count} odottavaa raporttia" pending_tags_html: - one: "%{count} odottava hashtagi" + one: "%{count} odottava aihetunniste" other: "%{count} odottavaa aihetunnistetta" pending_users_html: one: "%{count} odottava käyttäjä" - other: "%{count} odottavat käyttäjät" - resolved_reports: raportit ratkaistu + other: "%{count} odottavaa käyttäjää" + resolved_reports: ratkaistut raportit software: Ohjelmisto sources: Rekisteröitymisen lähteet space: Tilankäyttö title: Hallintapaneeli - top_languages: Aktiiviset kielet - top_servers: Aktiiviset palvelimet + top_languages: Aktiivisimmat kielet + top_servers: Aktiivisimmat palvelimet website: Sivusto disputes: appeals: @@ -376,8 +376,8 @@ fi: title: Valitukset domain_allows: add_new: Salli liitto verkkotunnuksella - created_msg: Verkkotunnus on onnistuneesti sallittu federaatiolle - destroyed_msg: Verkkotunnus on estetty federaatiossa + created_msg: Verkkotunnus on onnistuneesti sallittu federoinnille + destroyed_msg: Verkkotunnusta on kielletty federoimasta export: Vie import: Tuo undo: Estä liitto verkkotunnukselle @@ -389,34 +389,34 @@ fi: permanent_action: Jäädytyksen kumoaminen ei palauta mitään tietoja tai suhteita. preamble_html: Olet jäädyttämässä verkkotunnuksen %{domain} ja sen aliverkkotunnukset. remove_all_data: Tämä toiminto poistaa palvelimeltasi kaiken sisällön, median ja profiilitiedot tämän palvelun tileiltä. - stop_communication: Palvelimesi lopettaa näiden palvelinten viestinnän. + stop_communication: Palvelimesi lopettaa viestinnän näiden palvelinten kanssa. title: Vahvista verkkotunnuksen %{domain} esto undo_relationships: Tämä kumoaa näiden palvelimien ja sinun tilien välisen seurannan. created_msg: Verkkotunnuksen estoa käsitellään destroyed_msg: Verkkotunnuksen esto on peruttu domain: Verkkotunnus edit: Muokkaa verkkotunnuksen estoa - existing_domain_block: Olet jo asettanut tiukemmat rajoitukset %{name}. - existing_domain_block_html: Olet jo asettanut %{name} tiukemmat rajat ja sinun täytyy poistaa se ensin. + existing_domain_block: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}. + existing_domain_block_html: Olet jo asettanut tiukemmat rajoitukset käyttäjälle %{name}, joten sinun täytyy poistaa sen esto ensin. export: Vie import: Tuo new: create: Luo esto - hint: Verkkotunnuksen esto ei estä tilien luomista ja lisäämistä tietokantaan, mutta se soveltaa näihin tileihin automaattisesti määrättyjä moderointitoimia tilin luomisen jälkeen. + hint: Verkkotunnuksen esto ei estä tilien lisäämistä tietokantaan, mutta se soveltaa näihin tileihin takautuvasti ja automaattisesti tiettyjä valvontatoimia. severity: - desc_html: "Rajoita -valinta piilottaa tämän verkkoalueen tilien julkaisut heiltä, jotka eivät seuraa kyseisiä tilejä. Lopeta poistaa kaiken sisällön, median ja profiilien tiedot tämän verkkotunnuksen tileiltä palvelimellasi. Käytä valintaa Ei mitään, jos haluat vain estää mediatiedostojen julkaisemisen." + desc_html: Valinta Rajoita piilottaa tässä verkkotunnuksessa sijaitsevien tilien julkaisut kaikilta, jotka eivät seuraa näitä tilejä. Valinta Jäädytä poistaa palvelimeltasi kaikkien tässä verkkotunnuksessa sijaitsevien tilien sisällön, median ja profiilitiedot. Käytä valintaa Ei mitään, jos haluat vain hylätä mediatiedostot. noop: Ei mitään silence: Rajoita - suspend: Jäähy + suspend: Jäädytä title: Uusi verkkotunnuksen esto no_domain_block_selected: Verkkoalue-estoihin ei tehty muutoksia, koska valintoja ei tehty not_permitted: Nykyiset käyttöoikeutesi eivät kata tätä toimintoa obfuscate: Peitä verkkotunnuksen nimi - obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos verkkotunnuksen rajoitusten luettelo on käytössä + obfuscate_hint: Peitä verkkotunnus osittain luettelossa, jos julkinen verkkotunnusten rajoitusluettelo on käytössä private_comment: Yksityinen kommentti private_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta, valvojien sisäiseen käyttöön. public_comment: Julkinen kommentti - public_comment_hint: Kommentoi tätä verkkotunnukselle koskevaa rajoitusta suurelle yleisölle, jos verkkotunnusten luettelon mainonta on käytössä. + public_comment_hint: Kommentoi tätä verkkotunnuksen rajoitusta suurelle yleisölle, jos julkinen verkkotunnusten rajoitusluettelo on käytössä. reject_media: Hylkää mediatiedostot reject_media_hint: Poistaa paikallisesti tallennetut mediatiedostot eikä lataa niitä enää jatkossa. Ei merkitystä jäähyn kohdalla reject_reports: Hylkää raportit @@ -449,7 +449,7 @@ fi: no_file: Yhtäkään tiedostoa ei ole valittu export_domain_blocks: import: - description_html: Olet tuomassa järjestelmään luetteloa verkkoalue-estoista. Tarkista luettelo huolella – etenkin, ellet ole itse tehnyt listausta. + description_html: Olet tuomassa verkkotunnusten estoluetteloa. Tarkista luettelo huolella – etenkin, jos et ole laatinut sitä itse. existing_relationships_warning: Olemassa olevat seuraussuhteet private_comment_description_html: 'Tuodun estolistan alkuperän selvillä pitämiseksi, lisätään tietojen yhteyteen seuraava yksityinen kommentti: %{comment}' private_comment_template: Tuotu lähteestä %{source}, pvm %{date} @@ -459,13 +459,13 @@ fi: title: Tuo luettelo verkkoalue-estoista no_file: Yhtäkään tiedostoa ei ole valittu follow_recommendations: - description_html: "Suositusten noudattaminen auttaa uusia käyttäjiä löytämään nopeasti mielenkiintoista sisältöä.. Jos käyttäjä ei ole ollut vuorovaikutuksessa tarpeeksi muiden kanssa luodakseen henkilökohtaisia seuraajia, näitä muita tilejä suositellaan sen sijaan. Ne lasketaan uudelleen päivittäin yhdistelmästä tilejä, joilla on korkein viimeaikainen käyttö ja korkein paikallinen seuraajien määrä tietyllä kielellä." + description_html: "Seuraamissuositukset auttavat uusia käyttäjiä löytämään nopeasti kiinnostavaa sisältöä. Kun käyttäjä ei ole ollut tarpeeksi vuorovaikutuksessa muiden kanssa, jotta hänelle olisi muodostunut henkilökohtaisia seuraamissuosituksia, suositellaan niiden sijaan näitä tilejä. Ne lasketaan päivittäin uudelleen yhdistelmästä tilejä, jotka ovat viime aikoina olleet aktiivisimmin sitoutuneita ja joilla on suurimmat paikalliset seuraajamäärät tietyllä kielellä." language: Kielelle status: Tila - suppress: Peitä noudata suosituksia - suppressed: Rajoitettu - title: Noudata suosituksia - unsuppress: Palauta seuraa suositus + suppress: Hylkää seuraamissuositus + suppressed: Hylätty + title: Seuraamissuositukset + unsuppress: Palauta seuraamissuositus instances: availability: description_html: @@ -490,7 +490,7 @@ fi: policies: reject_media: Hylkää media reject_reports: Hylkää raportit - silence: Rajoitus + silence: Rajoita suspend: Jäädytä policy: Käytännöt reason: Julkinen syy @@ -503,7 +503,7 @@ fi: instance_languages_dimension: Suosituimmat kielet instance_media_attachments_measure: tallennetut median liitteet instance_reports_measure: niitä koskevat raportit - instance_statuses_measure: tallennetut viestit + instance_statuses_measure: tallennetut julkaisut delivery: all: Kaikki clear: Tyhjennä toimitusvirheet @@ -522,12 +522,12 @@ fi: moderation: all: Kaikki limited: Rajoitettu - title: Moderointi + title: Valvonta private_comment: Yksityinen kommentti public_comment: Julkinen kommentti purge: Tyhjennä - purge_description_html: Jos uskot tämän verkkotunnuksen olevan offline-tilassa, voit poistaa kaikki tilitietueet ja niihin liittyvät tiedot sinun tallennustilasta. Tämä voi kestää jonkin aikaa. - title: Tiedossa olevat instanssit + purge_description_html: Jos uskot, että tämä verkkotunnus on offline-tilassa tarkoituksella, voit poistaa kaikki verkkotunnuksen tilitietueet ja niihin liittyvät tiedot tallennustilastasi. Tämä voi kestää jonkin aikaa. + title: Federointi total_blocked_by_us: Estetty meidän toimesta total_followed_by_them: Heidän seuraama total_followed_by_us: Meidän seuraama @@ -562,11 +562,11 @@ fi: relays: add_new: Lisää uusi välittäjä delete: Poista - description_html: "federaatiovälittäjä on välityspalvelin, joka siirtää siihen liittyneiden palvelimien välillä suuria julksia viestimääriä. Tämä voi auttaa pieniä ja keskikokoisia palvelimia löytämään fediversen sisältöä, joka muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvelimien käyttäjiä manuaalisesti." + description_html: "Federointivälittäjä on välityspalvelin, joka siirtää suuria määriä julkisia julkaisuja siihen liittyneiden palvelinten välillä. Se voi auttaa pieniä ja keskisuuria palvelimia löytämään fediversumin sisältöä, mikä muutoin vaatisi paikallisia käyttäjiä seuraamaan etäpalvalinten käyttäjiä manuaalisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Poissa käytöstä enable: Ota käyttöön - enable_hint: Kun tämä on otettu käyttöön, palvelimesi liittyy välittäjään ja vastaanottaa jatkossa kaikki sen jakelemat julkiset julkaisut sekä välittää omat julkiset julkaisunsa sille. + enable_hint: Kun tämä on otettu käyttöön, palvelimesi tilaa välittäjältä kaikki sen välittämät julkiset julkaisut ja alkaa lähettää omansa sille. enabled: Käytössä inbox_url: Välittäjän URL pending: Odotetaan välittäjän hyväksyntää @@ -586,13 +586,13 @@ fi: action_log: Tarkastusloki action_taken_by: Toimenpiteen tekijä actions: - delete_description_html: Ilmoitetut viestit poistetaan ja kirjataan varoitus, joka auttaa sinua saman tilin tulevista rikkomuksista. - mark_as_sensitive_description_html: Ilmoitettujen viestien media merkitään arkaluonteisiksi ja varoitus tallennetaan, jotta voit kärjistää saman tilin tulevia rikkomuksia. - other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja ilmoitetun tilin viestinnän mukauttamiseksi. - resolve_description_html: Ilmoitettua tiliä vastaan ei ryhdytä toimenpiteisiin, varoitusta ei kirjata ja raportti suljetaan. - silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai estävät sen manuaalisesti, mikä rajoittaa merkittävästi sen kattavuutta. Se voidaan aina palauttaa. Sulkee kaikki raportit tätä tiliä vastaan. - suspend_description_html: Tili ja kaikki sen sisältö eivät ole käytettävissä ja vuorovaikutus sen kanssa on mahdotonta, sekä lopulta poistetaan. Palautettava 30 päivän kuluessa. Sulkee kaikki raportit tätä tiliä vastaan. - actions_description_html: Päätä, mihin toimiin ryhdyt tämän ilmoituksen ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä vastaan, heille lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti luokka on valittuna. + delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. + other_description_html: Katso lisää vaihtoehtoja tilin käytöksen hallitsemiseksi ja raportoidulle tilille kohdistuvan viestinnän mukauttamiseksi. + resolve_description_html: Ilmoitettua tiliä kohtaan ei ryhdytä toimiin, varoitusta ei kirjata ja raportti suljetaan. + silence_description_html: Tili näkyy vain niille, jotka jo seuraavat sitä tai etsivät sen manuaalisesti, mikä rajoittaa merkittävästi sen tavoitettavuutta. Voidaan perua milloin vain. Sulkee kaikki tilin vastaiset raportit. + suspend_description_html: Tili ja mikään sen sisältö eivät ole käytettävissä, ja lopulta ne poistetaan, ja vuorovaikutus tilin kanssa on mahdotonta. Peruttavissa 30 päivän ajan. Sulkee kaikki tämän tilin vastaiset raportit. + actions_description_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Jos ryhdyt rangaistustoimeen ilmoitettua tiliä kohtaan, hänelle lähetetään sähköposti-ilmoitus, paitsi jos Roskaposti-luokka on valittuna. actions_description_remote_html: Päätä, mihin toimiin ryhdyt tämän raportin ratkaisemiseksi. Tämä vaikuttaa vain siihen, miten palvelimesi kommunikoi tämän etätilin kanssa ja käsittelee sen sisältöä. add_to_report: Lisää raporttiin are_you_sure: Oletko varma? @@ -600,15 +600,15 @@ fi: assigned: Määritetty valvoja by_target_domain: Ilmoitetun tilin verkkotunnus cancel: Peruuta - category: Kategoria - category_description_html: Syy, miksi tämä tili ja/tai sisältö ilmoitettiin, mainitaan yhteydenotossa ilmoitettuun tiliin + category: Luokka + category_description_html: Syy siihen, miksi tämä tili ja/tai sisältö raportoitiin, mainitaan ilmoitetun tilin kanssa viestiessä comment: none: Ei mitään comment_description_html: 'Antaakseen lisätietoja %{name} kirjoitti:' confirm: Vahvista - confirm_action: Vahvista moderointitoiminto käyttäjää @%{acct} kohtaan + confirm_action: Vahvista valvontatoimi käyttäjää @%{acct} kohtaan created_at: Raportoitu - delete_and_resolve: Poista viestejä + delete_and_resolve: Poista julkaisut forwarded: Välitetty forwarded_to: Välitetty %{domain} mark_as_resolved: Merkitse ratkaistuksi @@ -638,22 +638,22 @@ fi: statuses_description_html: Loukkaava sisältö mainitaan ilmoitetun tilin yhteydessä summary: action_preambles: - delete_html: 'Olet aikeissa poistaa joitain käyttäjän @%{acct} viestejä. Tästä seuraa:' - mark_as_sensitive_html: 'Olet aikeissa merkitä joitain käyttäjän @%{acct} viestejä arkaluonteisiksi. Tästä seuraa:' + delete_html: 'Olet aikeissa poistaa käyttäjän @%{acct} julkaisuja. Tästä seuraa:' + mark_as_sensitive_html: 'Olet aikeissa merkitä käyttäjän @%{acct} julkaisuja arkaluonteisiksi. Tästä seuraa:' silence_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' - suspend_html: 'Olet aikeissa rajoittaa käyttäjän @%{acct} tiliä. Tästä seuraa:' + suspend_html: 'Olet aikeissa jäädyttää käyttäjän @%{acct} tilin. Tästä seuraa:' actions: - delete_html: Loukkaavat viestit poistetaan - mark_as_sensitive_html: Loukkaavien viestien media merkitään arkaluonteiseksi - silence_html: Vakavasti rajoittaa käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain jo häntä seuraaville tai niille, jotka etsivät profiilia manuaalisesti - suspend_html: Rajoita @%{acct}, jolloin heidän profiilinsa ja sisällönsä ei ole käytettävissä ja on mahdotonta olla vuorovaikutuksessa + delete_html: Poista loukkaavat julkaisut + mark_as_sensitive_html: Merkitse loukkaavien julkaisujen media arkaluonteiseksi + silence_html: Rajoita merkittävästi käyttäjän @%{acct} tavoitettavuutta tekemällä profiilista ja sen sisällöstä näkyviä vain niille, jotka jo seuraavat tiliä tai etsivät sen manuaalisesti + suspend_html: Jäädytä @%{acct}, jolloin hänen profiilinsa ja sisältönsä ei ole käytettävissä ja hänen kanssaan on mahdotonta olla vuorovaikutuksessa close_report: 'Merkitse raportti #%{id} selvitetyksi' close_reports_html: Merkitse kaikki käyttäjään @%{acct} kohdistuvat raportit ratkaistuiksi - delete_data_html: Poista @%{acct}profiili ja sisältö 30 päivän kuluttua, ellei jäädytystä tällä välin peruuteta + delete_data_html: Poista käyttäjän @%{acct} profiili ja sen sisältö 30 päivän kuluttua, ellei jäädytystä sillä välin kumota preview_preamble_html: "@%{acct} saa varoituksen, jonka sisältö on seuraava:" record_strike_html: Tallenna varoitus @%{acct} vastaan, joka auttaa sinua selvittämään tulevia rikkomuksia tältä tililtä send_email_html: Lähetä käyttäjälle @%{acct} varoitus sähköpostitse - warning_placeholder: Valinnaiset lisäperustelut moderointitoimenpiteelle. + warning_placeholder: Valinnaiset lisäperustelut valvontatoimelle. target_origin: Raportoidun tilin alkuperä title: Raportit unassign: Määrittämätön @@ -670,7 +670,7 @@ fi: administration: Ylläpito devops: DevOps invites: Kutsut - moderation: Moderointi + moderation: Valvonta special: Erikois delete: Poista description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. @@ -687,34 +687,34 @@ fi: delete_user_data_description: Salli käyttäjien poistaa muiden käyttäjien tiedot viipymättä invite_users: Kutsu käyttäjiä invite_users_description: Sallii käyttäjien kutsua uusia ihmisiä palvelimelle - manage_announcements: Hallitse Ilmoituksia - manage_announcements_description: Salli käyttäjien hallita ilmoituksia palvelimella + manage_announcements: Hallitse tiedotteita + manage_announcements_description: Sallii käyttäjien hallita tiedotteita palvelimella manage_appeals: Hallitse valituksia - manage_appeals_description: Antaa käyttäjien tarkastella valvontatoimia koskevia valituksia - manage_blocks: Hallitse lohkoja - manage_blocks_description: Sallii käyttäjien estää sähköpostipalvelujen ja IP-osoitteiden käytön - manage_custom_emojis: Hallita mukautettuja hymiöitä - manage_custom_emojis_description: Salli käyttäjien hallita mukautettuja hymiöitä palvelimella - manage_federation: Hallita liitoksia - manage_federation_description: Sallii käyttäjien estää tai sallia liitoksen muiden verkkotunnusten kanssa ja hallita toimitusta - manage_invites: Hallita kutsuja + manage_appeals_description: Sallii käyttäjien tarkistaa valvontatoimia koskevia valituksia + manage_blocks: Hallitse estoja + manage_blocks_description: Sallii käyttäjien estää sähköpostipalveluntarjoajia ja IP-osoitteita + manage_custom_emojis: Hallitse mukautettuja emojeita + manage_custom_emojis_description: Sallii käyttäjien hallita mukautettuja emojeita palvelimella + manage_federation: Hallitse federointia + manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta + manage_invites: Hallitse kutsuja manage_invites_description: Sallii käyttäjien selata ja poistaa kutsulinkkejä käytöstä - manage_reports: Hallita raportteja - manage_reports_description: Sallii käyttäjien tarkastella raportteja ja suorittaa valvontatoimia niitä vastaan - manage_roles: Hallita rooleja + manage_reports: Hallitse raportteja + manage_reports_description: Sallii käyttäjien tarkistaa raportteja ja suorittaa valvontatoimia niitä vastaan + manage_roles: Hallitse rooleja manage_roles_description: Sallii käyttäjien hallita ja määrittää rooleja heidän alapuolellaan - manage_rules: Hallita sääntöjä - manage_rules_description: Sallii käyttäjien vaihtaa palvelinsääntöjä - manage_settings: Hallita asetuksia - manage_settings_description: Salli käyttäjien muuttaa sivuston asetuksia - manage_taxonomies: Hallita luokittelua + manage_rules: Hallitse sääntöjä + manage_rules_description: Sallii käyttäjien muuttaa palvelimen sääntöjä + manage_settings: Hallitse asetuksia + manage_settings_description: Sallii käyttäjien muuttaa sivuston asetuksia + manage_taxonomies: Hallitse luokittelua manage_taxonomies_description: Sallii käyttäjien tarkistaa nousussa olevan sisällön ja päivittää aihetunnisteiden asetuksia - manage_user_access: Hallita käyttäjän oikeuksia - manage_user_access_description: Sallii käyttäjien poistaa käytöstä muiden käyttäjien kaksivaiheisen todennuksen, muuttaa heidän sähköpostiosoitettaan ja nollata heidän salasanansa - manage_users: Hallita käyttäjiä - manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä vastaan - manage_webhooks: Hallita Webhookit - manage_webhooks_description: Sallii käyttäjien luoda webhookit hallinnollisiin tapahtumiin + manage_user_access: Hallitse käyttäjäoikeuksia + manage_user_access_description: Sallii käyttäjien poistaa muiden käyttäjien kaksivaiheinen todennus käytöstä, vaihtaa heidän sähköpostiosoitteensa ja nollata heidän salasanansa + manage_users: Hallitse käyttäjiä + manage_users_description: Sallii käyttäjien tarkastella muiden käyttäjien tietoja ja suorittaa valvontatoimia heitä kohtaan + manage_webhooks: Hallitse webhookeja + manage_webhooks_description: Sallii käyttäjien luoda webhookeja hallinnollisiin tapahtumiin view_audit_log: Katsoa valvontalokia view_audit_log_description: Sallii käyttäjien nähdä palvelimen hallinnollisten toimien historian view_dashboard: Näytä koontinäyttö @@ -725,13 +725,13 @@ fi: rules: add_new: Lisää sääntö delete: Poista - description_html: Vaikka useimmat väittävät, että ovat lukenut ja hyväksyneet käyttöehdot niin yleensä ihmiset eivät lue niitä läpi ennen kuin ongelma syntyy. Tee helpoksi nähdä palvelimen säännöt yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä moniin erillisiin kohteisiin. + description_html: Vaikka useimmat väittävät, että ovat lukeneet ja hyväksyneet käyttöehdot, niin yleensä ihmiset eivät lue niitä läpi ennen kuin ilmenee ongelma. Helpota palvelimen sääntöjen näkemistä yhdellä silmäyksellä tarjoamalla ne tiiviissä luettelossa. Yritä pitää säännöt lyhyinä ja yksinkertaisina, mutta yritä olla jakamatta niitä useisiin erillisiin kohtiin. edit: Muokkaa sääntöä empty: Palvelimen sääntöjä ei ole vielä määritelty. title: Palvelimen säännöt settings: about: - manage_rules: Hallinnoi palvelimen sääntöjä + manage_rules: Hallitse palvelimen sääntöjä preamble: Anna perusteellista tietoa siitä, miten palvelinta käytetään, valvotaan, rahoitetaan. rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja @@ -739,7 +739,7 @@ fi: preamble: Muokkaa Mastodonin web-käyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voidaan näyttää useissa eri ympäristöissä, kuten Mastodonin käyttöliittymässä, sovelluksissa, linkkien esikatselu muilla sivustoilla ja viestisovelluksien sisällä ja niin edelleen. Tästä syystä on parasta pitää nämä tiedot selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -751,7 +751,7 @@ fi: desc_html: Vaikuttaa kaikkiin käyttäjiin, jotka eivät ole muuttaneet tätä asetusta itse title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle discovery: - follow_recommendations: Noudata suosituksia + follow_recommendations: Seuraamissuositukset preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset etsintäominaisuudet toimivat palvelimellasi. profile_directory: Profiilihakemisto public_timelines: Julkiset aikajanat @@ -773,7 +773,7 @@ fi: open: Kaikki voivat rekisteröityä security: authorized_fetch: Vaadi todennus yhdistetyiltä palvelimilta - authorized_fetch_hint: Todennuksen vaatiminen yhdistetyiltä palvelimilta mahdollistaa sekä käyttäjätason että palvelintason alueiden tiukemmat estot. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksien ulottuvuutta ja voi luoda yhteensopivuusongelmia joidenkin yhdistettyjen palveluiden kanssa. Lisäksi, tämä ei myöskään estä muita toimijoita hakemasta julkisia viestejäsi ja tilejäsi. + authorized_fetch_hint: Todennuksen vaatiminen federoiduilta palvelimilta mahdollistaa sekä käyttäjä- että palvelintason estojen tiukemman valvonnan. Tämä tapahtuu kuitenkin suorituskyvyn kustannuksella, vähentää vastauksiesi tavoittavuutta ja voi aiheuttaa yhteensopivuusongelmia joidenkin federoitujen palvelujen kanssa. Tämä ei myöskään estä omistautuneita toimijoita hakemasta julkisia julkaisujasi ja tilejäsi. authorized_fetch_overridden_hint: Et voi tällä hetkellä muuttaa tätä asetusta, koska se on ohitettu ympäristömuuttujalla. federation_authentication: Yhdistettyjen palvelinten todentamisen täytäntöönpano title: Palvelimen asetukset @@ -808,23 +808,23 @@ fi: media: title: Media metadata: Metadata - no_status_selected: Viestejä ei muutettu, koska yhtään ei ole valittuna - open: Avaa viesti - original_status: Alkuperäinen viesti + no_status_selected: Julkaisuja ei muutettu, koska yhtään ei ole valittuna + open: Avaa julkaisu + original_status: Alkuperäinen julkaisu reblogs: Edelleen jako - status_changed: Viesti muutettu + status_changed: Julkaisua muutettu title: Tilin tilat trending: Nousussa visibility: Näkyvyys with_media: Sisältää mediaa strikes: actions: - delete_statuses: "%{name} poisti käyttäjän %{target} viestit" + delete_statuses: "%{name} poisti käyttäjän %{target} julkaisut" disable: "%{name} jäädytti %{target} tilin" - mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} viestit arkaluonteisiksi" + mark_statuses_as_sensitive: "%{name} merkitsi käyttäjän %{target} julkaisut arkaluonteisiksi" none: "%{name} lähetti varoituksen henkilölle %{target}" sensitive: "%{name} merkitsi käyttäjän %{target} tilin arkaluonteiseksi" - silence: "%{name} rajoitti käyttäjän %{target} tilin" + silence: "%{name} rajoitti käyttäjän %{target} tiliä" suspend: "%{name} jäädytti käyttäjän %{target} tilin" appeal_approved: Valitti appeal_pending: Valitus vireillä @@ -852,7 +852,7 @@ fi: message_html: 'Yhteensopimaton Elasticsearch versio: %{value}' version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: - action: Hallinnoi palvelimen sääntöjä + action: Hallitse palvelimen sääntöjä message_html: Et ole määrittänyt mitään palvelimen sääntöä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset @@ -900,17 +900,17 @@ fi: title: Julkaisijat rejected: Hylätty statuses: - allow: Salli viesti + allow: Salli julkaisu allow_account: Salli tekijä - description_html: Nämä ovat viestejä, jotka palvelimesi tietää tällä hetkellä jaetuksi ja suosituksi. Tämä voi auttaa uusia ja palaavia ihmisiä löytämään lisää ihmisiä, joita seurata seurata. Julkaisuja ei näytetä julkisesti ennen kuin hyväksyt tekijän ja kirjoittaja sallii tilinsä ehdottamisen muille. Voit myös sallia tai hylätä yksittäiset viestit. - disallow: Estä viesti + description_html: Nämä ovat julkaisuja, joita palvelimesi tietää jaettavan ja lisättävän suosikkeihin paljon tällä hetkellä. Listaus voi auttaa uusia ja palaavia käyttäjiäsi löytämään lisää seurattavia. Julkaisut eivät näy julkisesti ennen kuin hyväksyt niiden julkaisijan ja julkaisija sallii tilinsä ehdottamisen. Voit myös sallia tai hylätä yksittäisiä julkaisuja. + disallow: Kiellä julkaisu disallow_account: Estä tekijä - no_status_selected: Suosittuja viestejä ei muutettu, koska yhtään ei valittu + no_status_selected: Suosittuja julkaisuja ei muutettu, koska yhtään ei ole valittuna not_discoverable: Tekijä ei ole ilmoittanut olevansa löydettävissä shared_by: - one: Jaettu tai merkitty suosikiksi kerran + one: Jaettu tai lisätty suosikkeihin kerran other: Jaettu tai merkitty suosikiksi %{friendly_count} kertaa - title: Suositut viestit + title: Suositut julkaisut tags: current_score: Nykyinen tulos %{score} dashboard: @@ -941,7 +941,7 @@ fi: delete: Poista edit_preset: Muokkaa varoituksen esiasetusta empty: Et ole vielä määrittänyt yhtäkään varoitusten esiasetusta. - title: Hallinnoi varoitusten esiasetuksia + title: Hallitse varoitusten esiasetuksia webhooks: add_new: Lisää päätepiste delete: Poista @@ -965,16 +965,16 @@ fi: admin_mailer: new_appeal: actions: - delete_statuses: poistaa heidän viestit + delete_statuses: poistaa hänen julkaisunsa disable: jäädyttää heidän tilinsä - mark_statuses_as_sensitive: merkitä heidän viestinsä arkaluonteisiksi + mark_statuses_as_sensitive: merkitä hänen julkaisunsa arkaluonteisiksi none: varoitus sensitive: merkitä heidän tilinsä arkaluonteiseksi - silence: rajoittaa heidän tilinsä - suspend: jäädyttää heidän tilinsä - body: "%{target} on valittanut valvojan päätöksestä %{action_taken_by} aika %{date}, joka oli %{type}. He kirjoittivat:" - next_steps: Voit hyväksyä vetoomuksen ja kumota päätöksen tai jättää sen huomiotta. - subject: "%{username} valittaa valvojan päätöksestä, joka koskee instanssia %{instance}" + silence: rajoittaa hänen tiliään + suspend: jäädyttää hänen tilinsä + body: "%{target} valittaa valvojan %{action_taken_by} päätöksestä %{date}, joka oli %{type}. Hän kirjoitti:" + next_steps: Voit hyväksyä valituksen, jolloin valvontapäätös kumoutuu, tai sivuuttaa sen. + subject: "%{username} valittaa valvontapäätöksestä, joka koskee instanssia %{instance}" new_critical_software_updates: body: Mastodonin uusia kriittisen tärkeitä versioita on julkaistu, joten saatat haluta päivittää niin pian kuin mahdollista! subject: Kriittisiä Mastodon-päivityksiä on saatavilla instanssille %{instance}! @@ -983,7 +983,7 @@ fi: subject: Uusi tili tarkastettavana instanssissa %{instance} (%{username}) new_report: body: "%{reporter} on raportoinut kohteen %{target}" - body_remote: Joku osoitteesta %{domain} on raportoinut kohteen %{target} + body_remote: Joku palvelimelta %{domain} raportoi käyttäjän %{target} subject: Uusi raportti instanssista %{instance} (nro %{id}) new_software_updates: body: Uusia Mastodon-versioita on julkaistu, joten saatat haluta päivittää! @@ -993,7 +993,7 @@ fi: new_trending_links: title: Suositut linkit new_trending_statuses: - title: Suositut viestit + title: Suositut julkaisut new_trending_tags: no_approved_tags: Tällä hetkellä ei ole hyväksyttyjä trendikkäitä aihetunnisteita. requirements: 'Mikä tahansa näistä ehdokkaista voisi ylittää #%{rank} hyväksytyn trendikkään aihetunnisteen, joka on tällä hetkellä #%{lowest_tag_name} arvosanalla %{lowest_tag_score}.' @@ -1008,10 +1008,10 @@ fi: remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä - advanced_web_interface_hint: 'Jos haluat käyttää koko näytön leveyttä, edistyneen web-käyttöliittymän avulla voit määrittää useita eri sarakkeita näyttämään niin paljon tietoa samanaikaisesti kuin haluat: Koti, ilmoitukset, yhdistetty aikajana, mikä tahansa määrä luetteloita ja aihetunnisteita.' + advanced_web_interface_hint: 'Jos haluat hyödyntää näytön koko leveyttä, edistyneen webkäyttöliittymän avulla voit määrittää useita erilaisia sarakkeita, niin näet kerralla niin paljon tietoa kuin haluat: kotisyöte, ilmoitukset, yleinen aikajana, mikä tahansa määrä listoja ja aihetunnisteita.' animations_and_accessibility: Animaatiot ja saavutettavuus confirmation_dialogs: Vahvistusvalinnat - discovery: Löydöt + discovery: Löytäminen localization: body: Mastodonin ovat kääntäneet vapaaehtoiset. guide_link: https://crowdin.com/project/mastodon @@ -1076,8 +1076,8 @@ fi: accept: Hyväksy back: Takaisin invited_by: 'Seuraavalta käyttäjältä vastaanottamasi kutsun ansiosta voit liittyä palvelimelle %{domain}:' - preamble: "%{domain} valvojat määrittävät ja valvovat sääntöjä." - preamble_invited: Ennen kuin jatkat, huomioi palvelimen %{domain} valvojien asettamat perussäännöt. + preamble: Palvelimen %{domain} valvojat määrittävät ja valvovat sääntöjä. + preamble_invited: Ennen kuin jatkat, ota huomioon palvelimen %{domain} valvojien asettamat perussäännöt. title: Joitakin perussääntöjä. title_invited: Sinut on kutsuttu. security: Tunnukset @@ -1086,21 +1086,21 @@ fi: email_below_hint_html: Tarkista roskapostikansiosi tai pyydä uusi viesti. Voit korjata sähköpostiosoitteesi, jos se oli väärin. email_settings_hint_html: Napsauta lähettämäämme linkkiä vahvistaaksesi osoitteen %{email}. Odotamme täällä. link_not_received: Etkö saanut linkkiä? - new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutaman minuutin sisällä! - title: Tarkista saamasi viestit + new_confirmation_instructions_sent: Saat uuden vahvistuslinkin sisältävän sähköpostiviestin muutamassa minuutissa! + title: Tarkista sähköpostilaatikkosi sign_in: preamble_html: Kirjaudu %{domain}-tunnuksellasi. Jos tilisi sijaitsee eri palvelimella, et voi kirjautua täällä. title: Kirjaudu palvelimelle %{domain} sign_up: - manual_review: Palvelimen %{domain} ylläpito tarkastaa rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä, kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. + manual_review: Palvelimen %{domain} valvojat tarkistavat rekisteröitymiset käsin. Helpottaaksesi rekisteröitymisesi käsittelyä kerro hieman itsestäsi ja miksi haluat luoda käyttäjätilin palvelimelle %{domain}. preamble: Kun sinulla on tili tällä Mastodon-palvelimella, voit seurata kaikkia muita verkossa olevia henkilöitä riippumatta siitä, missä heidän tilinsä on. title: Otetaan sinulle käyttöön %{domain}. status: account_status: Tilin tila confirming: Odotetaan sähköpostivahvistuksen valmistumista. functional: Tilisi on täysin toiminnassa. - pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi on hyväksytty. - redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä kohteeseen %{acct}. + pending: Hakemuksesi odottaa henkilökuntamme tarkastusta. Tämä voi kestää jonkin aikaa. Saat sähköpostiviestin, jos hakemuksesi hyväksytään. + redirecting_to: Tilisi ei ole aktiivinen, koska se ohjaa tällä hetkellä tilille %{acct}. view_strikes: Näytä tiliäsi koskevia aiempia varoituksia too_fast: Lomake lähetettiin liian nopeasti, yritä uudelleen. use_security_key: Käytä suojausavainta @@ -1140,7 +1140,7 @@ fi: warning: before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä - data_removal: Viestit ja muut tiedot poistetaan pysyvästi + data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi email_contact_html: Jos ei saavu perille, voit pyytää apua sähköpostilla %{email} email_reconfirmation_html: Jos et saa vahvistuksen sähköpostia, niin voit pyytää sitä uudelleen @@ -1164,17 +1164,17 @@ fi: description_html: Nämä ovat tiliäsi koskevia toimia ja varoituksia, jotka instanssin %{instance} henkilökunta on lähettänyt sinulle. recipient: Osoitettu reject_appeal: Hylkää valitus - status: 'Viesti #%{id}' - status_removed: Viesti on jo poistettu järjestelmästä + status: 'Julkaisu #%{id}' + status_removed: Julkaisu on jo poistettu järjestelmästä title: "%{action} alkaen %{date}" title_actions: - delete_statuses: Viestin poisto + delete_statuses: Julkaisun poisto disable: Tilin jäädyttäminen - mark_statuses_as_sensitive: Viestien merkitseminen arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisujen merkitseminen arkaluonteisiksi none: Varoitus sensitive: Tilin merkitseminen arkaluonteiseksi silence: Tilin rajoittaminen - suspend: Tilin jäädyttäminen + suspend: Tilin jäädytys your_appeal_approved: Valituksesi on hyväksytty your_appeal_pending: Olet lähettänyt valituksen your_appeal_rejected: Valituksesi on hylätty @@ -1182,8 +1182,8 @@ fi: invalid_domain: ei ole kelvollinen toimialueen nimi edit_profile: basic_information: Perustiedot - hint_html: "Mukauta mitä ihmiset näkevät julkisessa profiilissasi ja sinun julkaisujen vieressä. Ihmiset todennäköisesti seuraavat ja kirjoittavat sinulle, kun sinulla on täytetty profiili ja profiilikuva." - other: Muu + hint_html: "Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä. Ihmiset seuraavat sinua takaisin ja ovat kanssasi vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva." + other: Muut errors: '400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti. '403': Sinulla ei ole lupaa nähdä tätä sivua. @@ -1206,7 +1206,7 @@ fi: archive_takeout: date: Päiväys download: Lataa arkisto - hint_html: Voit pyytää arkistoa omista viesteistä ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa viikon välein. + hint_html: Voit pyytää arkistoa omista julkaisuista ja mediasta. Viedyt tiedot ovat ActivityPub-muodossa, ja ne voi lukea millä tahansa yhteensopivalla ohjelmalla. Voit pyytää arkistoa 7 päivän välein. in_progress: Arkistoa kootaan... request: Pyydä arkisto size: Koko @@ -1225,15 +1225,15 @@ fi: filters: contexts: account: Profiilit - home: Kotiaikajana + home: Kotisyöte ja listat notifications: Ilmoitukset public: Julkiset aikajanat thread: Keskustelut edit: add_keyword: Lisää avainsana keywords: Avainsanat - statuses: Yksittäiset viestit - statuses_hint_html: Tämä suodatin koskee yksittäisten viestien valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista viestit suodattimesta. + statuses: Yksittäiset julkaisut + statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. @@ -1248,11 +1248,11 @@ fi: one: "%{count} avainsana" other: "%{count} avainsanaa" statuses: - one: "%{count} viesti" - other: "%{count} viestiä" + one: "%{count} julkaisu" + other: "%{count} julkaisua" statuses_long: - one: "%{count} yksittäinen viesti piilotettu" - other: "%{count} yksittäistä viestiä piilotettu" + one: "%{count} yksittäinen julkaisu piilotettu" + other: "%{count} yksittäistä julkaisua piilotettu" title: Suodattimet new: save: Tallenna uusi suodatin @@ -1262,8 +1262,8 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten viestien valintaa muista kriteereistä riippumatta. Voit lisätä lisää viestejä tähän suodattimeen web-käyttöliittymästä. - title: Suodatetut viestit + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + title: Suodatetut julkaisut generic: all: Kaikki all_items_on_page_selected_html: @@ -1291,7 +1291,7 @@ fi: imports: errors: empty: Tyhjä CSV-tiedosto - incompatible_type: Yhteensopimaton valitun tuontityypin kanssa + incompatible_type: Yhteensopimaton valitun tuontilajin kanssa invalid_csv_file: 'Epäkelpo CSV-tiedosto. Virhe: %{error}' over_rows_processing_limit: sisältää yli %{count} riviä too_large: Tiedosto on liian suuri @@ -1304,20 +1304,20 @@ fi: overwrite: Korvaa overwrite_long: Korvaa nykyiset tietueet uusilla overwrite_preambles: - blocking_html: Olet aikeissa korvata estoluettelon kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. - bookmarks_html: Olet aikeissa korvata kirjanmerkit kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. - domain_blocking_html: Olet aikeissa korvata verkkotunnusestot kaikkiaan %{total_items} verkkotunnuksella tiedostoon %{filename} perustuen. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. Aiot lisäksi lopettaa kaikkien muiden seuraamisen. - lists_html: Olet korvaamassa listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. - muting_html: Olet korvaamassa mykistettyjä tilejäsi kaikkiaan %{total_items} tilillä tiedostoon %{filename} perustuen. + blocking_html: Olet aikeissa korvata estoluettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. + bookmarks_html: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}. + domain_blocking_html: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{total_items} verkkotunnuksella tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen. + lists_html: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä. + muting_html: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}. preambles: - blocking_html: Olet estämässä yhteensä %{total_items} tiliä tiedostoon %{filename} perustuen. - bookmarks_html: Olet lisäämässä %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. - domain_blocking_html: Olet estämässä yhteensä %{total_items} verkkotunnusta tiedoston %{filename} nojalla. - following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostoon %{filename} perustuen. - lists_html: Olet lisäämässä listoihisi %{total_items} tiliä tiedostosta %{filename}. Uudet listat luodaan, jos sopivaa kohdelistaa ei ole olemassa. - muting_html: Olet hiljentämässä yhteensä %{total_items} tiliä tiedostosta %{filename}. - preface: Voit tuoda toisesta instanssista viemiäsi tietoja, kuten esimerkiksi seuraamiesi tai estämiesi henkilöiden listan. + blocking_html: Olet aikeissa estää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + bookmarks_html: Olet lisäämässä kaikkiaan %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi. + domain_blocking_html: Olet aikeissa estää kaikkiaan %{total_items} verkkotunnusta tiedostosta %{filename}. + following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + lists_html: Olet lisäämässä listoihisi kaikkiaan %{total_items} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa. + muting_html: Olet aikeissa mykistää kaikkiaan %{total_items} tiliä tiedostosta %{filename}. + preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi henkilöiden luettelon. recent_imports: Viimeksi tuotu states: finished: Valmis @@ -1337,14 +1337,14 @@ fi: type: Tuonnin tyyppi type_groups: constructive: Seuratut ja kirjanmerkit - destructive: Estot ja hiljennykset + destructive: Estot ja mykistykset types: - blocking: Estettyjen lista + blocking: Estoluettelo bookmarks: Kirjanmerkit - domain_blocking: Verkkoalueen estolista - following: Seurattujen lista + domain_blocking: Verkkotunnuksen estoluettelo + following: Seurattujen luettelo lists: Listat - muting: Mykistettyjen lista + muting: Mykistettyjen luettelo upload: Lähetä invites: delete: Poista käytöstä @@ -1386,7 +1386,7 @@ fi: unsubscribe: action: Kyllä, peru tilaus complete: Tilaus lopetettiin - confirmation_html: Olethan varma, että haluat lopettaa %{type} -aiheisten Mastodonin sähköposti-ilmoitusten vastaanoton palvelimelta %{domain} osoitteeseesi %{email}? Voit toki milloin tahansa ottaa jälleen käyttöön muun muassa nämä viestit sähköposti-ilmoitusasetusten kautta. + confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: favourite: sähköpostit ilmoituksille @@ -1394,7 +1394,7 @@ fi: follow_request: seuraa pyyntöjä sähköpostiin mention: mainitse sähköpostin ilmoitukset reblog: tehosta sähköpostien ilmoituksia - resubscribe_html: Jos olet perunut ilmoitusviestien vastaanottamisen suotta, pääset jälleentilaamaan ilmoitusviestejä sähköposti-ilmoitusasetusten kautta. + resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: @@ -1434,7 +1434,7 @@ fi: other_data: Muita tietoja ei siirretä automaattisesti redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta moderation: - title: Moderointi + title: Valvonta move_handler: carry_blocks_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka olit estänyt. carry_mutes_over_text: Tämä käyttäjä siirtyi paikasta %{acct}, jonka mykistit. @@ -1448,15 +1448,15 @@ fi: sign_up: subject: "%{name} rekisteröityi" favourite: - body: "%{name} tykkäsi tilastasi:" - subject: "%{name} tykkäsi tilastasi" - title: Uusi tykkäys + body: "%{name} lisäsi julkaisusi suosikkeihinsa:" + subject: "%{name} lisäsi julkaisusi suosikkeihinsa" + title: Uusi suosikkeihin lisäys follow: body: "%{name} seuraa nyt sinua!" subject: "%{name} seuraa nyt sinua" title: Uusi seuraaja follow_request: - action: Hallinnoi seuraamispyyntöjä + action: Hallitse seuraamispyyntöjä body: "%{name} haluaa seurata sinua" subject: 'Odottava seuraamispyyntö: %{name}' title: Uusi seuraamispyyntö @@ -1468,13 +1468,13 @@ fi: poll: subject: Äänestys käyttäjältä %{name} on päättynyt reblog: - body: "%{name} tehosti viestiäsi:" - subject: "%{name} tehosti viestiäsi" + body: "%{name} tehosti julkaisuasi:" + subject: "%{name} tehosti julkaisuasi" title: Uusi tehostus status: subject: "%{name} julkaisi juuri" update: - subject: "%{name} muokkasi viestiä" + subject: "%{name} muokkasi julkaisua" notifications: administration_emails: Ylläpitäjän sähköposti-ilmoitukset email_events: Sähköposti-ilmoitusten tapahtumat @@ -1518,16 +1518,16 @@ fi: too_many_options: ei voi sisältää enempää kuin %{max} kohdetta preferences: other: Muut - posting_defaults: Viestien oletusasetukset + posting_defaults: Julkaisun oletusasetukset public_timelines: Julkiset aikajanat privacy: - hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua saavuttamaan laajemman yleisön. Käytä hetki aikaa tarkistaaksesi, soveltuvatko nämä vaihtoehdot tarpeisiisi." + hint_html: "Määritä, kuinka haluat profiilisi ja julkaisujesi löytyvän. Mastodonissa on monia ominaisuuksia, joiden käyttöönotto voi auttaa sinua tavoittamaan laajemman yleisön. Käytä hetki tarkistaaksesi, sopivatko nämä asetukset käyttöösi." privacy: Yksityisyys - privacy_hint_html: Määritä miten paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja sekä hienoja sovelluksia selaillen toisten seuraamia käyttäjiä, ja näkemällä, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. + privacy_hint_html: Määritä, kuinka paljon muita avustavia tietoja haluat paljastaa. Käyttäjät löytävät kiinnostavia profiileja ja hienoja sovelluksia, kun he selaavat toisten seuraamia käyttäjiä ja kun he näkevät, millä sovelluksilla nämä julkaisevat. Saatat kuitenkin haluta piilottaa nämä tiedot. reach: Tavoittavuus - reach_hint_html: Päätä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko viestiesi näkyvän Selaa-sivulla? Haluatko käyttäjien näkevän sinut heidän seuraussuosituksissaan? Haluatko hyväksyä uudet seuraajat automaattisesti vai haluatko hyväksyä jokaisen erikseen? + reach_hint_html: Määritä, haluatko tulla uusien käyttäjien löytämäksi ja seuraamaksi. Haluatko julkaisujesi näkyvän Selaa-sivulla? Haluatko muiden käyttäjien näkevän sinut seuraamissuosituksissaan? Haluatko hyväksyä kaikki uudet seuraajat automaattisesti vai päättää jokaisesta erikseen? search: Haku - search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Huomioithan, ettei täyttä poisjättäytymistä kaikista hakukoneista voida taata julkisille tiedoille. + search_hint_html: Määritä, kuinka haluat tulla löydetyksi. Haluatko, että ihmiset löytävät sinut julkisten julkaisujesi perusteella? Haluatko, että ihmiset Mastodonin ulkopuolella löytävät profiilisi tehdessään hakuja verkossa? Otathan huomioon, ettei julkisten tietojen täyttä kaikista hakukoneista poisjäämistä voi taata. title: Yksityisyys ja tavoittavuus privacy_policy: title: Tietosuojakäytäntö @@ -1564,12 +1564,12 @@ fi: rss: content_warning: 'Sisältövaroitus:' descriptions: - account: Julkiset viestit lähettäjältä @%{acct} - tag: 'Julkiset viestit merkitty #%{hashtag}' + account: Julkiset julkaisut tililtä @%{acct} + tag: 'Julkiset julkaisut aihetunnisteella #%{hashtag}' scheduled_statuses: - over_daily_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan tälle päivälle - over_total_limit: Olet ylittänyt %{limit} ajoitetun viestin rajan - too_soon: Ajoitetun päivämäärän on oltava tulevaisuudessa + over_daily_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan tälle päivälle + over_total_limit: Olet ylittänyt %{limit} ajoitetun julkaisun rajan + too_soon: Ajoitetun päiväyksen pitää olla tulevaisuudessa sessions: activity: Viimeisin toiminta browser: Selain @@ -1623,19 +1623,19 @@ fi: authorized_apps: Valtuutetut sovellukset back: Takaisin Mastodoniin delete: Tilin poisto - development: Kehittäminen + development: Kehitys edit_profile: Muokkaa profiilia export: Vie tietoja - featured_tags: Esitellyt aihetunnisteet + featured_tags: Esiteltävät aihetunnisteet import: Tuo - import_and_export: Tuo ja vie + import_and_export: Tuonti ja vienti migrate: Tilin muutto muualle notifications: Ilmoitukset preferences: Ominaisuudet - profile: Profiili - relationships: Seurattavat ja seuraajat - statuses_cleanup: Automaattinen viestin poisto - strikes: Valvojan varoitukset + profile: Julkinen profiili + relationships: Seuratut ja seuraajat + statuses_cleanup: Autom. julkaisujen poisto + strikes: Valvontavaroitukset two_factor_authentication: Kaksivaiheinen todentaminen webauthn_authentication: Suojausavaimet statuses: @@ -1650,21 +1650,21 @@ fi: video: one: "%{count} video" other: "%{count} videota" - boosted_from_html: Tehostus lähteestä %{acct_link} + boosted_from_html: Tehosti lähteestä %{acct_link} content_warning: 'Sisältövaroitus: %{warning}' default_language: Sama kuin käyttöliittymän kieli disallowed_hashtags: - one: 'sisälsi aihetunnisteen jota ei sallita: %{tags}' - other: 'sisälsi aihetunnisteet joita ei sallita: %{tags}' + one: 'sisälsi kielletyn aihetunnisteen: %{tags}' + other: 'sisälsi kiellettyjä aihetunnisteita: %{tags}' edited_at_html: Muokattu %{date} errors: - in_reply_not_found: Viesti, johon yrität vastata, ei näytä olevan olemassa. + in_reply_not_found: Julkaisua, johon yrität vastata, ei näytä olevan olemassa. open_in_web: Avaa selaimessa over_character_limit: merkkimäärän rajoitus %{max} ylitetty pin_errors: - direct: Viestejä, jotka ovat näkyvissä vain mainituille käyttäjille, ei voi kiinnittää - limit: Olet jo kiinnittänyt suurimman mahdollisen määrän viestejä - ownership: Muiden viestejä ei voi kiinnittää + direct: Vain mainituille käyttäjille näkyviä julkaisuja ei voi kiinnittää + limit: Olet jo kiinnittänyt enimmäismäärän julkaisuja + ownership: Muiden julkaisuja ei voi kiinnittää reblog: Tehostusta ei voi kiinnittää poll: total_people: @@ -1685,29 +1685,29 @@ fi: private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä - unlisted: Listaamaton julkinen + unlisted: Listaamaton unlisted_long: Kaikki voivat nähdä, mutta ei näytetä julkisilla aikajanoilla statuses_cleanup: - enabled: Poista vanhat viestit automaattisesti - enabled_hint: Poistaa viestit automaattisesti, kun ne saavuttavat tietyn ikärajan, elleivät ne täsmää yhtä alla olevista poikkeuksista + enabled: Poista vanhat julkaisut automaattisesti + enabled_hint: Poistaa julkaisusi automaattisesti, kun ne saavuttavat valitun ikärajan, ellei jokin alla olevista poikkeuksista tule kyseeseen exceptions: Poikkeukset - explanation: Koska viestien poistaminen on kallista toimintaa, sitä tehdään hitaasti ajan mittaan, kun palvelin ei ole muutoin kiireinen. Viestejäsi voidaankin siis poistaa myös viiveellä verrattuna niille määrittämääsi aikarajaan. + explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen - interaction_exceptions_explanation: Huomaa, että ei ole takeita viestien poistamiselle, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen, kun ne on kerran ylitetty. + interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit - keep_direct_hint: Ei poista mitään sinun suoria viestejä - keep_media: Säilytä viestit, joissa on liitetiedostoja - keep_media_hint: Ei poista viestejä, joissa on liitteitä - keep_pinned: Pidä kiinnitettyt viestit - keep_pinned_hint: Ei poista mitään kiinnitettyä viestiä + keep_direct_hint: Ei poista yksityisviestejäsi + keep_media: Säilytä julkaisut, joissa on medialiitteitä + keep_media_hint: Ei poista julkaisujasi, joissa on medialiitteitä + keep_pinned: Säilytä kiinnitetyt julkaisut + keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset keep_polls_hint: Ei poista yhtäkään äänestystä - keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi viestit - keep_self_bookmark_hint: Ei poista viestejäsi, jos olet lisännyt ne kirjanmerkkeihin - keep_self_fav: Säilyttää viestit suosikeissa - keep_self_fav_hint: Ei poista omia viestejäsi, jos olet lisännyt ne suosikkeihin + keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut + keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin + keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut + keep_self_fav_hint: Ei poista julkaisujasi, jos olet lisännyt ne suosikkeihin min_age: '1209600': 2 viikkoa '15778476': 6 kuukautta @@ -1718,12 +1718,12 @@ fi: '63113904': 2 vuotta '7889238': 3 kuukautta min_age_label: Ikäraja - min_favs: Pidä viestit suosikeissa vähintään - min_favs_hint: Toiminto ei poista julkaisujasi, joista on tykätty vähintään tässä kohtaa määritellyn monesti. Jätä kenttä tyhjäksi, jos haluat poistaa julkaisut tykkäyksistä huolimatta - min_reblogs: Pidä viestit tehostettuna vähintään - min_reblogs_hint: Ei poista yhtään viestiäsi, jota on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi poistaaksesi viestejä riippumatta niiden tehosteiden määrästä + min_favs: Säilytä julkaisut, joilla on suosikiksi lisäyksiä vähintään + min_favs_hint: Ei poista julkaisujasi, joita on lisätty suosikeihin vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta suosikkeihin lisäysmääristä + min_reblogs: Säilytä julkaisut, joilla on tehostuksia vähintään + min_reblogs_hint: Ei poista julkaisujasi, joita on tehostettu vähintään näin monta kertaa. Jätä tyhjäksi, jos haluat poistaa julkaisuja riippumatta niiden tehostusten määrästä stream_entries: - sensitive_content: Arkaluontoista sisältöä + sensitive_content: Arkaluonteista sisältöä strikes: errors: too_late: On liian myöhäistä vedota tähän varoitukseen @@ -1786,38 +1786,38 @@ fi: spam: Roskaposti violation: Sisältö rikkoo seuraavia yhteisön sääntöjä explanation: - delete_statuses: Joitakin viesteistäsi on havaittu rikkovan yhtä tai useampaa yhteisön sääntöä ja instanssin %{instance} valvojat ovat poistaneet ne. + delete_statuses: Joidenkin julkaisuistasi on havaittu rikkovan ainakin yhtä yhteisön sääntöä, ja instanssin %{instance} valvojat ovat poistaneet ne. disable: Et voi enää käyttää tiliäsi, mutta profiilisi ja muut tiedot pysyvät muuttumattomina. Voit pyytää varmuuskopiota tiedoistasi, vaihtaa tilin asetuksia tai poistaa tilisi. - mark_statuses_as_sensitive: Instanssin %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa viestiä ennen kuin esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi kun julkaiset tulevaisuudessa. + mark_statuses_as_sensitive: Palvelimen %{instance} valvojat ovat merkinneet osan julkaisuistasi arkaluonteisiksi. Tämä tarkoittaa sitä, että ihmisten täytyy napauttaa mediaa ennen kuin sen esikatselu näytetään. Voit merkitä median itse arkaluonteiseksi, kun julkaiset tulevaisuudessa. sensitive: Tästä lähtien kaikki ladatut mediatiedostot merkitään arkaluonteisiksi ja piilotetaan napsautusvaroituksen taakse. - silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat ihmiset näkevät viestisi tällä palvelimella ja sinut voidaan sulkea pois erilaisista hakuominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. - suspend: Et voi enää käyttää tiliäsi ja profiilisi ja muut tiedot eivät ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi varmuuskopiota tiedoistasi, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme joitakin perustietoja, jotka estävät sinua kiertämästä keskeyttämistä. + silence: Voit edelleen käyttää tiliäsi, mutta vain sinua jo seuraavat käyttäjät näkevät julkaisusi tällä palvelimella ja sinut voidaan sulkea pois eri löytämisominaisuuksista. Toiset voivat kuitenkin edelleen seurata sinua manuaalisesti. + suspend: Et voi enää käyttää tiliäsi, eivätkä profiilisi ja muut tiedot ole enää käytettävissä. Voit silti kirjautua sisään pyytääksesi tietojesi varmuuskopiota, kunnes tiedot on poistettu kokonaan noin 30 päivän kuluttua. Säilytämme kuitenkin joitain perustietoja, jotka estävät sinua kiertämästä jäädytystä. reason: 'Syy:' - statuses: 'Viestejä lainattu:' + statuses: 'Julkaisuja lainattu:' subject: - delete_statuses: Viestisi %{acct} on poistettu + delete_statuses: Julkaisusi tilillä %{acct} on poistettu disable: Tilisi %{acct} on jäädytetty - mark_statuses_as_sensitive: Viestisi %{acct} on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisusi tilillä %{acct} on merkitty arkaluonteisiksi none: Varoitus %{acct} - sensitive: Sinun viestisi %{acct} merkitään arkaluonteisiksi tästä lähtien - silence: Tilisi %{acct} on rajoitettu + sensitive: Julkaisusi tilillä %{acct} merkitään arkaluonteisiksi tästä lähtien + silence: Tiliäsi %{acct} on rajoitettu suspend: Tilisi %{acct} on jäädytetty title: - delete_statuses: Viestit poistettu + delete_statuses: Julkaisut poistettu disable: Tili jäädytetty - mark_statuses_as_sensitive: Viestit on merkitty arkaluonteisiksi + mark_statuses_as_sensitive: Julkaisut merkitty arkaluonteisiksi none: Varoitus sensitive: Tili on merkitty arkaluonteiseksi - silence: Rajoitettu tili - suspend: Tilin käyttäminen jäädytetty + silence: Tiliä rajoitettu + suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista - final_step: 'Aloita julkaiseminen! Vaikkei sinulla ole seuraajia, voivat muut nähdä julkiset julkaisusi esimerkiksi paikallisella aikajanalla ja aihetunnisteilla. Kannattaa myös esittäytyä käyttämällä aihetunnistetta #introductions.' + final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' full_handle: Koko käyttäjätunnuksesi - full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai löytää sinut muiden palvelimien kautta. + full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta. subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f32fe33ab7..f3a6392ff0 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -463,20 +463,40 @@ hy: regenerate_token: Ստեղծել նոր հասանելիութեան կտրոն your_token: Քո մուտքի բանալին auth: + apply_for_account: Ուղարկել delete_account: Ջնջել հաշիվը description: prefix_sign_up: Գրանցուի՛ր Մաստոդոնում հենց այսօր + didnt_get_confirmation: Չե՞ս ստացել հաստատման յղում dont_have_your_security_key: Չունե՞ս անվտանգութեան բանալի։ forgot_password: Մոռացե՞լ ես գաղտնաբառդ login: Մտնել logout: Դուրս գալ migrate_account: Տեղափոխուել այլ հաշիւ or_log_in_with: Կամ մուտք գործել օգտագործելով՝ + privacy_policy_agreement_html: Ես կարդացել եւ ընդունել եմ գաղնիութեան քաղաքականութիւնը + progress: + confirm: Փոստի հաստատում + details: Ձեր տուեալները + review: Վաւերացում + rules: Ընդունել կանոները register: Գրանցվել registration_closed: "%{instance}ը չի ընդունում նոր անդամներ" reset_password: Վերականգնել գաղտանաբառը + rules: + accept: Հաստատել + back: Վերադառնալ + preamble: Կանոնները սահմանում եւ կիրառում են %{domain}-ի մոդերատորները։ + title: Մի քանի հիմանական կանոններ։ security: Անվտանգություն set_new_password: Սահմանել նոր գաղտնաբառ + sign_in: + preamble_html: Մուտքագրէք %{domain}-ի ձեր տուեալները։ Եթե ձեր հաշիւը ուրիշ սպասարկիչի վրայ է, այտեղ մտնել չի ստացուի։ + title: Մտնել %{domain} + sign_up: + manual_review: Գրանցումները %{domain}-ում վաւերացնում են մոդերատորնրը։ Մեզ օգնելու համար մի փոքր պատմէք ձեր մասին եւ թե ինչու էք ուզում գրանցուել։ + preamble: Այս հանգոյցում հաշիւ ունենալով դուք կարող էք հերտեւել դաշնեզերքի ցանկացած օգտատիրոջ, անկախ նրանից թե որտեղ է նրա հաշիւը տեղակայուած։ + title: Ստեղծի՜ր հաշիւ %{domain}-ում status: account_status: Հաշուի կարգավիճակ pending: Դիմումը պէտք է քննուի մեր անձնակազմի կողմից, ինչը կարող է մի փոքր ժամանակ խլել։ Դիմումի հաստատուելու դէպքում, կտեղեկացնենք նամակով։ @@ -685,6 +705,8 @@ hy: other: Այլ posting_defaults: Կանխադիր կարգաւորումներ public_timelines: Հանրային հոսք + privacy: + search: Որոնել privacy_policy: title: Գաղտնիութեան քաղաքականութիւն reactions: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index da6d8596e0..cc3fd07c49 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -269,7 +269,7 @@ ko: reopen_report_html: "%{name} 님이 신고 %{target}을 다시 열었습니다" resend_user_html: "%{name} 님이 %{target} 님에 대한 확인 메일을 다시 보냈습니다" reset_password_user_html: "%{name} 님이 사용자 %{target}의 암호를 초기화했습니다" - resolve_report_html: "%{name} 중재자가 %{target}번 신고를 해결로 변경하였습니다" + resolve_report_html: "%{name} 님이 %{target}번 신고를 해결로 변경하였습니다" sensitive_account_html: "%{name} 님이 %{target}의 미디어를 민감함으로 표시했습니다" silence_account_html: "%{name} 님이 %{target}의 계정을 제한시켰습니다" suspend_account_html: "%{name} 님이 %{target}의 계정을 정지시켰습니다" diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index 12af55af62..f0c18d1128 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -330,5 +330,5 @@ en-GB: text: required title: sessions: - webauthn: Use one of your security keys to sign in + webauthn: Use one of your security keys to log in 'yes': 'Yes' diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index cc2f1141d9..db82edba24 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,13 +3,13 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla, ja profiiliasi voidaan myös ehdottaa suoraan toisille käyttäjille. + discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. - fields: Kotisivusi, pronominit, ikä, mitä ikinä haluatkin. - indexable: Julkiset viestit voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa viestiesi kanssa, voivat etsiä niitä siitä riippumatta. + fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. + indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, 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 eivät näe ketä seuraat ja ketkä seuraavat sinua. Käyttäjät, joita sinä seuraat, näkevät kuitenkin sinun seuraavan heitä. - unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seurantapyynnöt. + 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ä. + unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: @@ -18,7 +18,7 @@ fi: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle admin_account_action: - include_statuses: Käyttäjä näkee mitkä viestit johtivat toimenpiteeseen tai varoitukseen + include_statuses: Käyttäjä näkee, mitkä julkaisut johtivat valvontatoimeen tai varoitukseen send_email_notification: Käyttäjä saa selvityksen siitä, mitä hänen tililleen tapahtui text_html: Valinnainen. Voit käyttää julkaisun syntaksia. Voit lisätä varoitusasetuksia säästääksesi aikaa type_html: Valitse mitä teet käyttäjälle %{acct} @@ -31,10 +31,10 @@ fi: warning_preset_id: Valinnainen. Voit silti lisätä mukautetun tekstin esiasetuksen loppuun announcement: all_day: Kun valittu, vain valittu aikaväli näytetään - ends_at: Valinnainen. Ilmoitus tullaan poistamaan automaattisesti tällä hetkellä - scheduled_at: Jätä tyhjäksi julkaistaksesi ilmoituksen välittömästi - starts_at: Valinnainen. Jos ilmoituksesi on sidottu tiettyyn aikaväliin - text: Voit käyttää julkaisun syntaksia. Muista, kuinka paljon tilaa ilmoitus vie käyttäjän näytöltä + ends_at: Valinnainen. Tiedote poistetaan automaattisesti tällä hetkellä + scheduled_at: Jätä tyhjäksi julkaistaksesi tiedotteen heti + starts_at: Valinnainen. Jos tiedotteesi on sidottu tiettyyn aikaväliin + text: Voit käyttää julkaisun syntaksia. Ota huomioon, kuinka paljon tilaa tiedote vie käyttäjän näytöltä appeal: text: Voit valittaa varoituksesta vain kerran defaults: @@ -51,14 +51,14 @@ fi: irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli password: Käytä vähintään 8 merkkiä - phrase: Täytetään riippumatta julkaisun kirjainkoon tai sisällön varoituksesta + phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. - setting_aggregate_reblogs: Älä näytä uusia tehosteita viesteille, joita on äskettäin tehostettu (koskee vain äskettäin saatuja tehosteita) + setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media - setting_display_media_hide_all: Piilota aina kaikki media - setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media + setting_display_media_hide_all: Piilota media aina + setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja @@ -74,7 +74,7 @@ fi: action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa - warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen otsikko + warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi form_admin_settings: activity_api_enabled: Paikallisesti julkaistujen julkaisujen, aktiivisten käyttäjien ja rekisteröitymisten viikoittainen määrä backups_retention_period: Säilytä luodut arkistot määritetyn määrän päiviä. @@ -84,7 +84,7 @@ fi: custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa. mascot: Ohittaa kuvituksen edistyneessä käyttöliittymässä. media_cache_retention_period: Ladatut mediatiedostot poistetaan määritetyn määrän päiviä jälkeen, kun arvo on positiivinen ja ladataan uudelleen pyynnöstä. - peers_api_enabled: Lista verkkotunnuksista, joita tämä palvelin on kohdannut fediversessä. Täällä ei ole tietoja siitä, oletko liitossa tiettyjen palvelinten kanssa, vaan ainoastaan luettelo niistä verkkotunnuksista, joista palvelimesi on ylipäätään tietoinen. Tätä tietoa käytetään palveluissa, jotka keräävät liittotilastoja laajassa merkityksessä. + peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja liittoutumisesta yleisellä tasolla. profile_directory: Profiilihakemisto lueteloi kaikki käyttäjät, jotka ovat ilmoittaneet olevansa löydettävissä. require_invite_text: Kun kirjautuminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” teksti syötetään pakolliseksi eikä vapaaehtoiseksi site_contact_email: Kuinka ihmiset voivat tavoittaa sinut oikeudellisissa tai tukikysymyksissä. @@ -103,7 +103,7 @@ fi: form_challenge: current_password: Olet menossa suojatulle alueelle imports: - data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto + data: Toiselta Mastodon-palvelimelta tuotu CSV-tiedosto invite_request: text: Tämä auttaa meitä arvioimaan hakemustasi ip_block: @@ -122,7 +122,7 @@ fi: webauthn: Jos kyseessä on USB-avain, muista laittaa se paikalleen ja tarvittaessa napauttaa sitä. settings: indexable: Profiilisi voi näkyä Googlen, Bingin ja muiden hakukoneiden hakutuloksissa. - show_application: Voit siitä huolimatta aina nähdä, millä sovelluksella julkaisusi laadittiin. + show_application: Voit silti aina nähdä, mistä sovelluksesta julkaisusi lähetettiin. tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: @@ -140,11 +140,11 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - discoverable: Sisällytä profiili ja julkaisut etsintäalgoritmeihin + discoverable: Nosta profiili ja julkaisut esille löytämisalgoritmeissa fields: name: Nimike value: Sisältö - indexable: Sisällytä julkiset viestit hakutuloksiin + indexable: Sisällytä julkiset julkaisut hakutuloksiin show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: @@ -169,9 +169,9 @@ fi: announcement: all_day: Koko päivän kestävä tapahtuma ends_at: Tapahtuman loppu - scheduled_at: Ajasta julkaisu + scheduled_at: Ajoita julkaisu starts_at: Tapahtuman alku - text: Ilmoitus + text: Tiedote appeal: text: Perustele, miksi tämä päätös olisi kumottava defaults: @@ -184,18 +184,18 @@ fi: context: Suodata konteksteista current_password: Nykyinen salasana data: Tiedot - display_name: Nimimerkki + display_name: Näyttönimi email: Sähköpostiosoite expires_in: Vanhenee - fields: Profiilin metadata - header: Otsakekuva + fields: Lisäkentät + header: Otsikkokuva honeypot: "%{label} (älä täytä)" inbox_url: Välittäjän postilaatikon URL-osoite irreversible: Pudota piilottamisen sijaan locale: Kieli max_uses: Käyttökertoja enintään new_password: Uusi salasana - note: Kuvaus + note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana phrase: Avainsana tai lause @@ -203,29 +203,29 @@ fi: setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia setting_auto_play_gif: Toista GIF-animaatiot automaattisesti - setting_boost_modal: Kysy vahvistus ennen tehostusta + setting_boost_modal: Kysy vahvistusta ennen tehostusta setting_default_language: Viestien kieli setting_default_privacy: Viestin näkyvyys setting_default_sensitive: Merkitse media aina arkaluontoiseksi - setting_delete_modal: Kysy vahvistusta ennen viestin poistamista + setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen setting_display_media_default: Oletus setting_display_media_hide_all: Piilota kaikki setting_display_media_show_all: Näytä kaikki - setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt viestit + setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt julkaisut setting_hide_network: Piilota verkkosi setting_reduce_motion: Vähennä animaatioiden liikettä setting_system_font_ui: Käytä järjestelmän oletusfonttia setting_theme: Sivuston teema setting_trends: Näytä päivän trendit - setting_unfollow_modal: Kysy vahvistusta, ennen kuin lopetat seuraamisen + setting_unfollow_modal: Kysy vahvistusta ennen seuraamisen lopettamista setting_use_blurhash: Näytä värikkäät liukuvärit piilotetulle medialle - setting_use_pending_items: Hidastila + setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi title: Otsikko - type: Tietojen laji + type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti whole_word: Koko sana @@ -289,7 +289,7 @@ fi: follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua mention: Lähetä sähköposti, kun sinut mainitaan pending_account: Uusi tili tarvitsee tarkastusta - reblog: Lähetä sähköposti, kun joku tehosti viestiäsi + reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: all: Ilmoita kaikista päivityksistä @@ -302,7 +302,7 @@ fi: text: Sääntö settings: indexable: Sisällytä profiilisivu hakukoneisiin - show_application: Näytä, mistä sovelluksesta lähetit viestin + show_application: Näytä, mistä sovelluksesta lähetit julkaisun tag: listable: Salli tämän aihetunnisteen näkyä hauissa ja ehdotuksissa name: Aihetunniste diff --git a/config/locales/simple_form.hy.yml b/config/locales/simple_form.hy.yml index d2fab9e048..56aa1d66b1 100644 --- a/config/locales/simple_form.hy.yml +++ b/config/locales/simple_form.hy.yml @@ -44,6 +44,7 @@ hy: setting_display_media_show_all: Մեդիա միշտ ցոյց տալ setting_use_blurhash: Կտորները հիմնուում են թաքցուած վիզուալի վրայ՝ խամրեցնելով դետալները setting_use_pending_items: Թաքցնել հոսքի թարմացումները կտտոի ետեւում՝ աւտօմատ թարմացուող հոսքի փոխարէն + username: Միայն լատինատառեր, թուեր եւ տակի գծիկ whole_word: Եթէ բանալի բառը կամ արտայայտութիւնը պարունակում է միայն այբբենական նիշեր եւ թուեր, ապա այն կիրառուելու է ամբողջ բառի հետ համընկնելու դէպքում միայն domain_allow: domain: Այս տիրոյթը կարող է ստանալ տուեալներ այս սպասարկչից եւ ստացուող տուեալները կարող են օգտագործուել եւ պահուել From 8bc5fe204e63432837704693373768c002bbf901 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 13:41:24 +0200 Subject: [PATCH 193/237] Fix filtering audit log for entries about disabling 2FA (#27186) --- app/models/admin/action_log_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb index f89d452ef4..0117974628 100644 --- a/app/models/admin/action_log_filter.rb +++ b/app/models/admin/action_log_filter.rb @@ -38,7 +38,7 @@ class Admin::ActionLogFilter destroy_status: { target_type: 'Status', action: 'destroy' }.freeze, destroy_user_role: { target_type: 'UserRole', action: 'destroy' }.freeze, destroy_canonical_email_block: { target_type: 'CanonicalEmailBlock', action: 'destroy' }.freeze, - disable_2fa_user: { target_type: 'User', action: 'disable' }.freeze, + disable_2fa_user: { target_type: 'User', action: 'disable_2fa' }.freeze, disable_custom_emoji: { target_type: 'CustomEmoji', action: 'disable' }.freeze, disable_user: { target_type: 'User', action: 'disable' }.freeze, enable_custom_emoji: { target_type: 'CustomEmoji', action: 'enable' }.freeze, From 4e420d84595b62c75869511b198f03f66601b6c0 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 28 Sep 2023 15:29:07 +0200 Subject: [PATCH 194/237] Fix link handling of mentions in user profiles when logged out (#27185) --- app/javascript/mastodon/actions/search.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index 7aea346e6d..38a089b486 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -147,6 +147,10 @@ export const openURL = (value, history, onFailure) => (dispatch, getState) => { const signedIn = !!getState().getIn(['meta', 'me']); if (!signedIn) { + if (onFailure) { + onFailure(); + } + return; } From 2cd969cca79800bf336fc0406c815d21b9050a4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 10:04:18 +0200 Subject: [PATCH 195/237] New Crowdin Translations (automated) (#27202) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 12 ++-- config/locales/devise.fi.yml | 14 ++-- config/locales/doorkeeper.fi.yml | 8 +-- config/locales/fi.yml | 92 ++++++++++++------------- config/locales/simple_form.fi.yml | 62 ++++++++--------- 5 files changed, 94 insertions(+), 94 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4aa46ec0fc..094b7d3b36 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -201,9 +201,9 @@ "disabled_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä.", "dismissable_banner.community_timeline": "Nämä ovat viimeisimpiä julkaisuja käyttäjiltä, joiden tili sijaitsee palvelimella {domain}.", "dismissable_banner.dismiss": "Hylkää", - "dismissable_banner.explore_links": "Näistä uutisista puhutaan juuri nyt tällä ja muilla hajautetun verkon palvelimilla.", - "dismissable_banner.explore_statuses": "Nämä ovat tänään huomiota keräävimpiä sosiaalisen verkon julkaisuja. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", - "dismissable_banner.explore_tags": "Nämä aihetunnisteet saavat juuri nyt vetovoimaa tällä ja muilla hajautetun verkon palvelimilla olevien ihmisten keskuudessa.", + "dismissable_banner.explore_links": "Näitä uutisia jaetaan tänään sosiaalisessa verkossa eniten. Uusimmat ja eri käyttäjien eniten lähettämät uutiset nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_statuses": "Nämä sosiaalisen verkon julkaisut keräävät tänään eniten huomiota. Uusimmat, tehostetuimmat ja suosikiksi lisätyimmät nousevat listauksessa korkeimmalle.", + "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", @@ -324,7 +324,7 @@ "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolla loit tilisi. Jos et muista, etsi tervetuliaissähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -493,10 +493,10 @@ "onboarding.steps.setup_profile.title": "Mukauta profiiliasi", "onboarding.steps.share_profile.body": "Kerro kavereillesi, kuinka sinut löytää Mastodonista", "onboarding.steps.share_profile.title": "Jaa Mastodon-profiilisi", - "onboarding.tips.2fa": "Tiesitkö? Voit lisäsuojata tiliäsi ottamalla kaksivaiheisen todennuksen käyttöön palvelun tiliasetuksista. Ominaisuus toimii haluamasi TOTP-todennussovelluksen avulla, eikä käyttö edellytä puhelinnumeron antamista!", + "onboarding.tips.2fa": "Tiesitkö? Voit suojata tilisi ottamalla kaksivaiheisen todennuksen käyttöön tilisi asetuksista. Se toimii millä tahansa TOTP-sovelluksella, eikä sen käyttö edellytä puhelinnumeroa!", "onboarding.tips.accounts_from_other_servers": "Tiesitkö? Koska Mastodon on hajautettu, osa kohtaamistasi profiileista sijaitsee muilla kuin sinun palvelimellasi. Voit silti viestiä saumattomasti heidän kanssaan! Heidän palvelimensa mainitaan käyttäjänimen jälkiosassa!", "onboarding.tips.migration": "Tiesitkö? Jos koet, ettei {domain} ole jatkossa itsellesi hyvä palvelinvalinta, voit siirtyä toiselle Mastodon-palvelimelle menettämättä seuraajiasi. Voit jopa isännöidä omaa palvelintasi!", - "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi, ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi tietoihin. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä mitään asiakirjoja!", + "onboarding.tips.verification": "Tiesitkö? Voit vahvistaa tilisi lisäämällä omalle verkkosivustollesi linkin Mastodon-profiiliisi ja lisäämällä sitten verkkosivustosi osoitteen Mastodon-profiilisi lisäkenttään. Tämä ei maksa mitään, eikä sinun tarvitse lähetellä asiakirjoja!", "password_confirmation.exceeds_maxlength": "Salasanan vahvistus ylittää salasanan enimmäispituuden", "password_confirmation.mismatching": "Salasanan vahvistus ei täsmää", "picture_in_picture.restore": "Laita se takaisin", diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index eecbb3897a..8bbcb071e3 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -27,12 +27,12 @@ fi: title: Vahvista sähköpostiosoite email_changed: explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:' - extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: Sähköpostiosoite vaihdettu' title: Uusi sähköpostiosoite password_change: explanation: Tilisi salasana on vaihdettu. - extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. + extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi. subject: 'Mastodon: salasana vaihdettu' title: Salasana vaihdettu reconfirmation_instructions: @@ -47,11 +47,11 @@ fi: subject: 'Mastodon: ohjeet salasanan vaihtoon' title: Salasanan vaihto two_factor_disabled: - explanation: Kaksivaiheinen todennus tilillesi poistettiin käytöstä. Kirjautuminen onnistuu nyt käyttäen pelkkää sähköpostiosoitetta ja salasanaa. + explanation: Tilisi kaksivaiheinen todennus poistettiin käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitella ja salasanalla. subject: 'Mastodon: kaksivaiheinen todennus poistettu käytöstä' title: 2-vaiheinen todennus pois käytöstä two_factor_enabled: - explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Kaksivaiheisen tunnistuksen sovelluksesta saatu koodi tarvitaan kirjautumiseen. + explanation: Kaksivaiheinen todennus on otettu käyttöön tilillesi. Kirjautumiseen tarvitaan kaksivaiheisen todennuksen sovelluksesta saatu koodi. subject: 'Mastodon: kaksivaiheinen todennus otettu käyttöön' title: 2-vaiheinen todennus käytössä two_factor_recovery_codes_changed: @@ -70,11 +70,11 @@ fi: subject: 'Mastodon: suojausavain poistettu' title: Yksi suojausavaimistasi on poistettu webauthn_disabled: - explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista käyttämällä vain paritetun TOTP-sovelluksen luomaa tokenia. - subject: 'Mastodon: Todennus suoja-avaimilla poistettu käytöstä' + explanation: Suojausavaimilla todennus on poistettu käytöstä tililtäsi. Kirjautuminen on nyt mahdollista vain paritetun TOTP-sovelluksen luomaa koodia käyttämällä. + subject: 'Mastodon: Todennus suojausavaimilla poistettu käytöstä' title: Suojausavaimet poistettu käytöstä webauthn_enabled: - explanation: Todennus suojausavaimella on otettu käyttöön tililläsi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. + explanation: Todennus suojausavaimella on otettu käyttöön tilillesi. Suojausavaintasi voidaan nyt käyttää kirjautumiseen. subject: 'Mastodon: Todennus suojausavaimella on otettu käyttöön' title: Suojausavaimet käytössä omniauth_callbacks: diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 81b248ef2e..8d030274e7 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -67,13 +67,13 @@ fi: title: Kopioi tämä valtuutuskoodi ja liitä se sovellukseen. authorized_applications: buttons: - revoke: Peru + revoke: Hylkää confirmations: revoke: Oletko varma? index: authorized_at: Valtuutettu %{date} - description_html: Nämä ovat sovelluksia, jotka voivat käyttää tiliäsi käyttäen API. Jos et tunnista sitä tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. - last_used_at: Viimeksi käytetty %{date} + description_html: Nämä sovellukset voivat käyttää tiliäsi ohjelmointirajapinnan kautta. Jos tässä on sovelluksia, joita et tunnista, tai sovellus toimii väärin, voit peruuttaa sen käyttöoikeuden. + last_used_at: Käytetty viimeksi %{date} never_used: Ei käytetty scopes: Oikeudet superapp: Sisäinen @@ -114,7 +114,7 @@ fi: notice: Sovellus poistettu. grouped_scopes: access: - read: Vain luku + read: Vain lukuoikeus read/write: Luku- ja kirjoitusoikeudet write: Vain kirjoitusoikeus title: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 8a5d72a661..466cb95a24 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -76,7 +76,7 @@ fi: inbox_url: Saapuvan postilaatikon osoite invite_request_text: Syitä liittymiseen invited_by: Kutsuja - ip: IP + ip: IP-osoite joined: Liittynyt location: all: Kaikki @@ -736,10 +736,10 @@ fi: rules_hint: On olemassa erityinen alue sääntöjä, joita käyttäjien odotetaan noudattavan. title: Tietoja appearance: - preamble: Muokkaa Mastodonin web-käyttöliittymää. + preamble: Mukauta Mastodonin verkkokäyttöliittymää. title: Ulkoasu branding: - preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin web-käyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. + preamble: Palvelimesi brändäys erottaa sen muista verkon palvelimista. Nämä tiedot voivat näkyä monissa eri ympäristöissä, kuten Mastodonin verkkokäyttöliittymässä, natiivisovelluksissa, linkkien esikatseluissa muilla sivustoilla, viestintäsovelluksissa ja niin edelleen. Siksi nämä tiedot kannattaa pitää selkeinä, lyhyinä ja ytimekkäinä. title: Brändäys captcha_enabled: desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. @@ -853,7 +853,7 @@ fi: version_comparison: Elasticsearch %{running_version} on käynnissä, kun %{required_version} vaaditaan rules_check: action: Hallitse palvelimen sääntöjä - message_html: Et ole määrittänyt mitään palvelimen sääntöä. + message_html: Et ole määrittänyt lainkaan palvelimen sääntöjä. sidekiq_process_check: message_html: Ei ole Sidekiq-prosessia käynnissä jonossa %{value}. Tarkista Sidekiq-asetukset software_version_critical_check: @@ -864,7 +864,7 @@ fi: message_html: Mastodonin virhekorjauspäivitys on saatavilla. upload_check_privacy_error: action: Katso täältä lisätietoja - message_html: "Verkkopalvelimesi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." + message_html: "Verkkopalvelimesi on määritetty väärin. Käyttäjiesi yksityisyys on vaarassa." upload_check_privacy_error_object_storage: action: Katso täältä lisätietoja message_html: "Objektivarastosi on määritetty virheellisesti, ja käyttäjiesi yksityisyys on vaarassa." @@ -1004,7 +1004,7 @@ fi: created_msg: Uusi alias luotiin onnistuneesti. Voit nyt aloittaa siirron vanhasta tilistä. deleted_msg: Alias poistettiin onnistuneesti. Siirtyminen tuolta tililtä tähän ei ole enää mahdollista. empty: Sinulla ei ole aliaksia. - hint_html: Jos haluat siirtyä toisesta tilistä tähän tiliin, voit luoda aliasin, joka on pakollinen, ennen kuin voit siirtää seuraajia vanhasta tilistä tähän tiliin. Tämä toiminto on itsessään vaaraton ja palautuva. Tilin siirtyminen aloitetaan vanhalta tililtä. + hint_html: Jos haluat muuttaa toiselta tililtä tälle tilille, voit luoda tässä aliaksen, mitä vaaditaan ennen kuin voit edetä siirtämään seuraajat vanhalta tililtä tälle tilille. Tänä toiminto on itsessään vaaraton ja kumottavissa. Tilin muuttaminen aloitetaan vanhalta tililtä. remove: Poista aliaksen linkitys appearance: advanced_web_interface: Edistynyt selainkäyttöliittymä @@ -1042,7 +1042,7 @@ fi: confirmations: wrong_email_hint: Jos sähköpostiosoite ei ole oikein, voit muuttaa sen tilin asetuksista. delete_account: Poista tili - delete_account_html: Jos haluat poistaa tilisi, paina tästä. Poisto on vahvistettava. + delete_account_html: Jos haluat poistaa tilisi, voit edetä tästä. Sinua pyydetään vahvistamaan poisto. description: prefix_invited_by_user: "@%{name} kutsuu sinut liittymään tälle Mastodonin palvelimelle!" prefix_sign_up: Liity Mastodoniin tänään! @@ -1051,13 +1051,13 @@ fi: dont_have_your_security_key: Eikö sinulla ole suojausavainta? forgot_password: Unohditko salasanasi? invalid_reset_password_token: Salasanan palautustunnus on virheellinen tai vanhentunut. Pyydä uusi. - link_to_otp: Syötä puhelimesi kaksivaiheinen koodi tai palautuskoodi + link_to_otp: Syötä puhelimesi kaksivaiheisen todennuksen koodi tai palautuskoodi link_to_webauth: Käytä suojausavaintasi log_in_with: Kirjaudu käyttäen login: Kirjaudu sisään logout: Kirjaudu ulos migrate_account: Muuta toiseen tiliin - migrate_account_html: Jos haluat ohjata tämän tilin toiseen tiliin, voit asettaa toisen tilin tästä. + migrate_account_html: Jos haluat ohjata tämän tilin toiseen, voit asettaa toisen tilin tästä. or_log_in_with: Tai käytä kirjautumiseen privacy_policy_agreement_html: Olen lukenut ja hyväksynyt tietosuojakäytännön progress: @@ -1138,7 +1138,7 @@ fi: proceed: Poista tili success_msg: Tilin poisto onnistui warning: - before: 'Ennen kuin jatkat, lue nämä huomautukset huolellisesti:' + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' caches: Muiden palvelimien välimuistiin tallentamaa sisältöä voi vielä löytyä data_removal: Julkaisusi ja muut tietosi poistetaan pysyvästi email_change_html: Voit muuttaa sähköpostiosoitettasi poistamatta tiliäsi @@ -1198,7 +1198,7 @@ fi: content: Valitettavasti jokin meni pieleen meidän päässämme. title: Sivu ei ole oikein '503': Sivua ei voitu näyttää palvelimen väliaikaisen vian vuoksi. - noscript_html: Käyttääksesi Mastodon-verkkopalvelua, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla myös jotakin juuri käyttämällesi alustalle kehitettyä Mastodon-sovellusta. + noscript_html: Käyttääksesi Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin natiivisovelluksia. existing_username_validator: not_found: paikallista käyttäjää ei löydy kyseisellä käyttäjänimellä not_found_multiple: "%{usernames} ei löytynyt" @@ -1236,7 +1236,7 @@ fi: statuses_hint_html: Tämä suodatin koskee yksittäisten julkaisujen valintaa riippumatta siitä, vastaavatko ne alla olevia avainsanoja. Tarkista tai poista julkaisut suodattimesta. title: Muokkaa suodatinta errors: - deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai selainkäyttöliittymää. + deprecated_api_multiple_keywords: Näitä parametreja ei voi muuttaa tästä sovelluksesta, koska ne koskevat useampaa kuin yhtä suodattimen avainsanaa. Käytä uudempaa sovellusta tai verkkokäyttöliittymää. invalid_context: Ei sisältöä tai se on virheellinen index: contexts: Suodattimet %{contexts} @@ -1262,7 +1262,7 @@ fi: batch: remove: Poista suodattimista index: - hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen web-käyttöliittymästä. + hint: Tämä suodatin koskee yksittäisten julkaisujen valintaa muista kriteereistä riippumatta. Voit lisätä lisää julkaisuja tähän suodattimeen verkkokäyttöliittymästä. title: Suodatetut julkaisut generic: all: Kaikki @@ -1279,7 +1279,7 @@ fi: delete: Poista deselect: Poista kaikki valinnat none: Ei mitään - order_by: Järjestä + order_by: Järjestys save_changes: Tallenna muutokset select_all_matching_items: one: Valitse %{count} kohde, joka vastaa hakuasi. @@ -1373,7 +1373,7 @@ fi: limit: Sinulla on enimmäismäärä listoja login_activities: authentication_methods: - otp: kaksivaiheinen todennussovellus + otp: kaksivaiheisen todennuksen sovellus password: salasana sign_in_token: sähköpostin turvakoodi webauthn: suojausavaimet @@ -1415,7 +1415,7 @@ fi: on_cooldown: Sinä olet jäähyllä followers_count: Seuraajat muuton aikana incoming_migrations: Siirtyminen toiselta tililtä - incoming_migrations_html: Siirtääksesi toisesta tilistä tähän tiliin, sinun täytyy ensin luoda tilin alias. + incoming_migrations_html: Siirtyäksesi toisesta tilistä tähän, sinun täytyy ensin luoda tilin alias. moved_msg: Tilisi ohjaa nyt kohteeseen %{acct} ja seuraajiasi siirretään. not_redirecting: Tilisi ei ohjaa tällä hetkellä mihinkään muuhun tiliin. on_cooldown: Olet siirtänyt tilisi äskettäin. Tämä toiminto tulee saataville uudelleen %{count} päivän kuluttua. @@ -1426,13 +1426,13 @@ fi: set_redirect: Aseta uudelleenohjaus warning: backreference_required: Uusi tili on ensin määritettävä viittaamaan tähän tiliin - before: 'Ennen jatkamista, lue nämä huomautukset huolellisesti:' - cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää liikkumaan - disabled_account: Nykyinen tilisi ei ole täysin käytettävissä jälkikäteen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. + before: 'Ennen kuin etenet, lue nämä huomautukset huolellisesti:' + cooldown: Muuton jälkeen on odotusaika, jonka aikana et pysty enää muuttamaan + disabled_account: Nykyinen tilisi ei ole täysin käytettävissä tämän jälkeen. Sinulla on kuitenkin pääsy tietojen vientiin ja uudelleenaktivointiin. followers: Tämä toiminto siirtää kaikki seuraajat nykyisestä tilistä uudelle tilille - only_redirect_html: Vaihtoehtoisesti voit asettaa vain uudelleenohjauksen profiiliisi. + only_redirect_html: Vaihtoehtoisesti voit asettaa vain ohjauksen profiiliisi. other_data: Muita tietoja ei siirretä automaattisesti - redirect: Nykyinen tilisi profiili päivitetään, ohjataan uudelleen ja jätetään pois hausta + redirect: Nykyisen tilisi profiili päivitetään ohjaushuomautuksella ja suljetaan pois hauista moderation: title: Valvonta move_handler: @@ -1492,7 +1492,7 @@ fi: trillion: B otp_authentication: code_hint: Anna todennussovelluksen luoma koodi vahvistaaksesi - description_html: Jos otat käyttöön kaksivaiheisen todentamisen, käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. + description_html: Jos otat kaksivaiheisen todennuksen käyttöön käyttämällä todennussovellusta, kirjautumiseen vaaditaan puhelin, jolla voidaan luoda kirjautumistunnuksia. enable: Ota käyttöön instructions_html: "Lue tämä QR-koodi puhelimen Google Authenticator- tai vastaavalla TOTP-sovelluksella. Sen jälkeen sovellus luo tunnuksia, joita tarvitset kun kirjaudut sisään." manual_instructions: 'Jos et voi lukea QR-koodia ja haluat syöttää sen käsin, tässä on salainen koodi tekstinä:' @@ -1547,10 +1547,10 @@ fi: following: Seuratut invited: Kutsutut last_active: Viimeksi aktiivinen - most_recent: Viimeisin - moved: Muuttanut + most_recent: Viimeisimmät + moved: Muuttaneet mutual: Molemmat - primary: Ensisijainen + primary: Ensisijaiset relationship: Suhde remove_selected_domains: Poista kaikki seuraajat valituista verkkotunnuksista remove_selected_followers: Poista valitut seuraajat @@ -1595,7 +1595,7 @@ fi: weibo: Weibo current_session: Nykyinen istunto description: "%{browser} alustalla %{platform}" - explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneet Mastodon-tilillesi. + explanation: Nämä verkkoselaimet ovat tällä hetkellä kirjautuneena Mastodon-tilillesi. ip: IP-osoite platforms: adobe_air: Adobe AIR @@ -1636,7 +1636,7 @@ fi: relationships: Seuratut ja seuraajat statuses_cleanup: Autom. julkaisujen poisto strikes: Valvontavaroitukset - two_factor_authentication: Kaksivaiheinen todentaminen + two_factor_authentication: Kaksivaiheinen todennus webauthn_authentication: Suojausavaimet statuses: attached: @@ -1681,7 +1681,7 @@ fi: title: "%{name}: ”%{quote}”" visibilities: direct: Suoraan - private: Vain seuraajille + private: Vain seuraajat private_long: Näytä vain seuraajille public: Julkinen public_long: Kaikki voivat nähdä @@ -1694,7 +1694,7 @@ fi: explanation: Koska julkaisujen poistaminen on raskas toimi, se tapahtuu hitaasti ajan mittaan, kun palvelin ei ole muutoin ruuhkainen. Siksi viestejäsi voi poistua vasta tovi sen jälkeen, kun ne ovat saavuttaneet ikärajan. ignore_favs: Ohita suosikit ignore_reblogs: Ohita tehostukset - interaction_exceptions: Poikkeukset, jotka perustuvat vuorovaikutukseen + interaction_exceptions: Vuorovaikutuksiin perustuvat poikkeukset interaction_exceptions_explanation: Huomaa, ettei julkaisujen poistumisesta ole varmuutta, jos ne alittavat suosikki- tai tehostusrajan sen jälkeen kun ne on kerran ylitetty. keep_direct: Säilytä yksityisviestit keep_direct_hint: Ei poista yksityisviestejäsi @@ -1703,7 +1703,7 @@ fi: keep_pinned: Säilytä kiinnitetyt julkaisut keep_pinned_hint: Ei poista kiinnitettyjä julkaisujasi keep_polls: Säilytä äänestykset - keep_polls_hint: Ei poista yhtäkään äänestystä + keep_polls_hint: Ei poista äänestyksiäsi keep_self_bookmark: Säilytä kirjanmerkkeihin lisäämäsi julkaisut keep_self_bookmark_hint: Ei poista julkaisujasi, jos olet lisännyt ne kirjanmerkkeihin keep_self_fav: Säilytä suosikkeihin lisäämäsi julkaisut @@ -1745,16 +1745,16 @@ fi: too_many_requests: Käännöspalvelulle on hiljattain esitetty liian monta pyyntöä. two_factor_authentication: add: Lisää - disable: Poista käytöstä + disable: Poista 2FA käytöstä disabled_success: Kaksivaiheinen todennus on poistettu käytöstä edit: Muokkaa - enabled: Kaksivaiheinen todentaminen käytössä - enabled_success: Kaksivaiheisen todentamisen käyttöönotto onnistui + enabled: Kaksivaiheinen todennus käytössä + enabled_success: Kaksivaiheisen todennuksen käyttöönotto onnistui generate_recovery_codes: Luo palautuskoodit - lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodit, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. - methods: Kaksivaiheisen tunnistautumisen menetelmät + lost_recovery_codes: Palautuskoodien avulla voit käyttää tiliä, jos menetät puhelimesi. Jos olet hukannut palautuskoodisi, voit luoda uudet tästä. Vanhat palautuskoodit poistetaan käytöstä. + methods: Kaksivaiheisen todennuksen menetelmät otp: Todennussovellus - recovery_codes: Varapalautuskoodit + recovery_codes: Ota palautuskoodit talteen recovery_codes_regenerated: Uusien palautuskoodien luonti onnistui recovery_instructions_html: Jos menetät puhelimesi, voit kirjautua tilillesi jollakin alla olevista palautuskoodeista. Pidä palautuskoodit hyvässä tallessa. Voit esimerkiksi tulostaa ne ja säilyttää muiden tärkeiden papereiden joukossa. webauthn: Suojausavaimet @@ -1776,7 +1776,7 @@ fi: change_password: vaihda salasanasi details: 'Tässä on tiedot kirjautumisesta:' explanation: Olemme havainneet kirjautumisen tilillesi uudesta IP-osoitteesta. - further_actions_html: Jos tämä et ollut sinä, suosittelemme että %{action} välittömästi ja ota kaksivaiheinen todennus käyttöön säilyttääksesi tilisi turvallisena. + further_actions_html: Jos tämä et ollut sinä, suosittelemme, että %{action} heti ja otat käyttöön kaksivaiheisen todennuksen pitääksesi tilisi turvassa. subject: Tiliäsi on käytetty uudesta IP-osoitteesta title: Uusi kirjautuminen warning: @@ -1828,26 +1828,26 @@ fi: seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä. signed_in_as: 'Kirjautunut tilillä:' verification: - extra_instructions_html: Vinkki: Tämä linkitys verkkosivustollasi voidaan toteuttaa myös näkymättömänä. Tärkeä osuus on rel="me" -määre, jolla ehkäistään valeprofiilikäyttötarkoituksia sivustoilla, joiden sisältö perustuu käyttäjiensä julkaisuihin. Voit siis käyttää linkkiviittauselementtiä link HTML-lähdekoodin otsakeosassa (head) sen sijaan, että käyttäisit näkyvää hyperlinkkielementtiä a. HTML-lähdekoodin tulee tuolta osin kuitenkin olla JavaScriptistä riippumatonta. + extra_instructions_html: Vinkki: Verkkosivustollasi oleva linkki voi olla myös näkymätön. Olennainen osuus on rel="me", joka estää toiseksi henkilöksi tekeytymisen verkkosivustoilla, joilla on käyttäjien luomaa sisältöä. Voit käyttää jopa link-elementtiä sivun head-osassa elementin a sijaan, mutta HTML:n pitää olla käytettävissä ilman JavaScript-koodin suorittamista. here_is_how: Näin voit tehdä sen - hint_html: "Mastodonissa henkilöllisyyden vahventaminen on jokaisen käyttäjän ulottuvilla. Tämä perustuu avoimiin standardeihin, maksuttomasti nyt ja aina. Kaikki mitä tarvitset on henkilökohtainen verkkosivusto, jonka avulla sinut voidaan tunnistaa. Kun Mastodon-profiilistasi on linkki kyseiselle verkkosivustollesi, ja sieltä löytyy vastaviittaus tai -linkitys profiiliisi, näkyy profiilissasi vahvistustunniste." - instructions_html: Kopioi ja liitä alla oleva koodi verkkosivusi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin ylimääräisistä kentistä profiiliasetuksissa, "Muokkaa profiilia" -välilehdestä, ja tallenna muutokset. + hint_html: "Henkilöllisyyden vahvistaminen on Mastodonissa jokaisen käyttäjän ulottuvilla. Se perustuu avoimiin standardeihin ja on maksutonta nyt ja aina. Tarvitset vain henkilökohtaisen verkkosivuston, jonka perusteella sinut voidaan tunnistaa. Kun teet linkin tuolle verkkosivulle profiilistasi, tarkistamme, että verkkosivustolla on linkki takaisin profiiliisi, ja näytämme profiilissasi visuaalisen ilmaisimen." + instructions_html: Kopioi ja liitä alla oleva koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset. verification: Vahvistus verified_links: Vahvistetut linkkisi webauthn_credentials: add: Lisää uusi suojausavain create: - error: Suojausavaimen lisäämisessä tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen lisääminen onnistui. + error: Suojausavaimen lisäämisessä oli ongelma. Yritä uudelleen. + success: Suojausavaimesi lisääminen onnistui. delete: Poista delete_confirmation: Haluatko varmasti poistaa tämän suojausavaimen? description_html: Jos otat suojausavaimen todennuksen käyttöön, kirjautuminen edellyttää jonkin suojausavaimen käyttämistä. destroy: - error: Suojausavaimen poistamisessa tapahtui ongelma. Yritä uudelleen. - success: Sinun suojausavaimen poistaminen onnistui. + error: Suojausavaimen poistamisessa oli ongelma. Yritä uudelleen. + success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain - nickname_hint: Anna nimimerkki uudelle suojausavaimelle + nickname_hint: Anna uuden suojausaivaimesi lempinimi not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa not_supported: Tämä selain ei tue suojausavaimia - otp_required: Jos haluat käyttää suojausavaimia, ota ensin käyttöön kaksivaiheinen todennus. + otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index db82edba24..1eec9a9317 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -11,9 +11,9 @@ fi: 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ä. unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntää. Poista valinta, jos haluat tarkistaa ja hyväksyä tai hylätä vastaanottamasi seuraamispyynnöt. account_alias: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, josta haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat siirtyä account_migration: - acct: Määrittele käyttäjän käyttäjänimi@verkkotunnus, johon haluat siirtyä + acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, johon haluat siirtyä account_warning_preset: text: Voit käyttää julkaisun syntaksia, kuten URL-osoitteita, aihetunnisteita ja mainintoja title: Valinnainen. Ei näy vastaanottajalle @@ -41,7 +41,7 @@ fi: autofollow: Henkilöt, jotka rekisteröityvät kutsun kautta, seuraavat sinua automaattisesti avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja eikä sitä ehkä valvota - context: Yksi tai useampi asiayhteys, jossa suodattimen pitäisi olla käytössä + context: Ainakin yksi konteksti, jossa suodattimen pitäisi olla voimassa current_password: Turvallisuussyistä kirjoita nykyisen tilin salasana current_username: Vahvista kirjoittamalla nykyisen tilin käyttäjätunnus digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana @@ -54,15 +54,15 @@ fi: phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. setting_aggregate_reblogs: Älä näytä uusia tehostuksia julkaisuille, joita on äskettäin tehostettu (koskee vain juuri vastaanotettuja tehostuksia) - setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät aktiivisesti Mastodonia - setting_default_sensitive: Arkaluontoinen media on oletuksena piilotettu ja se voidaan näyttää yhdellä napsautuksella + setting_always_send_emails: Yleensä sähköposti-ilmoituksia ei lähetetä, kun käytät Mastodonia aktiivisesti + setting_default_sensitive: Arkaluonteinen media on oletuksena piilotettu, ja se voidaan näyttää yhdellä napsautuksella setting_display_media_default: Piilota arkaluonteiseksi merkitty media setting_display_media_hide_all: Piilota media aina setting_display_media_show_all: Näytä media aina setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat setting_use_pending_items: Piilota aikajanan päivitykset napsautuksen taakse syötteen automaattisen vierityksen sijaan username: Voit käyttää kirjaimia, numeroita ja alaviivoja - whole_word: Kun avainsana tai lause on vain aakkosnumeerinen, se otetaan käyttöön, jos se vastaa koko sanaa + whole_word: Kun avainsana tai -fraasi on kokonaan aakkosnumeerinen, se on voimassa vain, jos se vastaa koko sanaa domain_allow: domain: Tämä verkkotunnus voi noutaa tietoja tältä palvelimelta ja sieltä saapuvat tiedot käsitellään ja tallennetaan email_domain_block: @@ -71,7 +71,7 @@ fi: featured_tag: name: 'Tässä muutamia hiljattain käyttämiäsi aihetunnisteita:' filters: - action: Valitse, mikä toiminto suoritetaan, kun viesti vastaa suodatinta + action: Valitse, mikä toiminto suoritetaan, kun julkaisu vastaa suodatinta actions: hide: Piilota suodatettu sisältö kokonaan ja käyttäydy ikään kuin sitä ei olisi olemassa warn: Piilota suodatettu sisältö varoituksen taakse, jossa mainitaan suodattimen nimi @@ -126,7 +126,7 @@ fi: tag: name: Voit muuttaa esimerkiksi kirjaimia paremmin luettavaksi user: - chosen_languages: Kun valittu, vain valituilla kielillä julkaistut viestit näkyvät julkisilla aikajanoilla + chosen_languages: Kun valittu, vain valituilla kielillä kirjoitetut julkaisut näkyvät julkisilla aikajanoilla role: Rooli määrää, mitkä käyttöoikeudet käyttäjällä on user_role: color: Väri, jota käytetään roolin koko käyttöliittymässä, RGB heksamuodossa @@ -148,21 +148,21 @@ fi: show_collections: Näytä seuratut ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: - acct: Vanhan tilin käsittely + acct: Vanhan tilin käyttäjätunnus account_migration: - acct: Uuden tilin käsittely + acct: Uuden tilin käyttäjätunnus account_warning_preset: text: Esiasetettu teksti - title: Otsikko + title: Nimi admin_account_action: include_statuses: Sisällytä raportoidut viestit sähköpostiin send_email_notification: Ilmoita käyttäjälle sähköpostitse text: Mukautettu varoitus - type: Toimenpide + type: Toimi types: disable: Poista kirjautuminen käytöstä none: Älä tee mitään - sensitive: Arkaluontoinen + sensitive: Arkaluonteinen silence: Hiljennä suspend: Poista käytöstä ja tuhoa käyttäjätunnuksen tiedot peruuttamattomasti warning_preset_id: Käytä varoitusmallia @@ -181,7 +181,7 @@ fi: chosen_languages: Suodata kieliä confirm_new_password: Vahvista uusi salasana confirm_password: Vahvista salasana - context: Suodata konteksteista + context: Suodattimen kontekstit current_password: Nykyinen salasana data: Tiedot display_name: Näyttönimi @@ -198,15 +198,15 @@ fi: note: Elämäkerta otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana - phrase: Avainsana tai lause - setting_advanced_layout: Ota käyttöön edistynyt selainkäyttöliittymä - setting_aggregate_reblogs: Ryhmitä tehostukset aikajanalla - setting_always_send_emails: Lähetä aina sähköposti-ilmoituksia + phrase: Avainsana tai -fraasi + setting_advanced_layout: Ota edistynyt selainkäyttöliittymä käyttöön + setting_aggregate_reblogs: Ryhmitä tehostukset aikajanoilla + setting_always_send_emails: Lähetä sähköposti-ilmoitukset aina setting_auto_play_gif: Toista GIF-animaatiot automaattisesti setting_boost_modal: Kysy vahvistusta ennen tehostusta - setting_default_language: Viestien kieli - setting_default_privacy: Viestin näkyvyys - setting_default_sensitive: Merkitse media aina arkaluontoiseksi + setting_default_language: Julkaisun kieli + setting_default_privacy: Julkaisun näkyvyys + setting_default_sensitive: Merkitse media aina arkaluonteiseksi setting_delete_modal: Kysy vahvistusta ennen julkaisun poistamista setting_disable_swiping: Poista pyyhkäisyt käytöstä setting_display_media: Median näyttäminen @@ -224,7 +224,7 @@ fi: setting_use_pending_items: Hidas tila severity: Vakavuus sign_in_token_attempt: Turvakoodi - title: Otsikko + title: Nimi type: Tuontilaji username: Käyttäjänimi username_or_email: Käyttäjänimi tai sähköposti @@ -236,7 +236,7 @@ fi: filters: actions: hide: Piilota kokonaan - warn: Piilota varoituksella + warn: Piilota ja näytä varoitus form_admin_settings: activity_api_enabled: Julkaise yhteenlasketut tilastot käyttäjätoiminnasta rajapinnassa backups_retention_period: Käyttäjän arkiston säilytysaika @@ -268,14 +268,14 @@ fi: interactions: must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa - must_be_following_dm: Estä suorat viestit käyttäjiltä, joita et seuraa + must_be_following_dm: Estä yksityisviestit käyttäjiltä, joita et seuraa invite: comment: Kommentoi invite_request: text: Miksi haluat liittyä? ip_block: comment: Kommentti - ip: IP + ip: IP-osoite severities: no_access: Estä pääsy sign_up_block: Estä kirjautumiset @@ -284,11 +284,11 @@ fi: notification_emails: appeal: Joku valittaa valvojan päätöksestä digest: Lähetä koosteviestejä sähköpostitse - favourite: Lähetä sähköposti, kun joku tykkää tilastasi - follow: Lähetä sähköposti, kun joku seuraa sinua - follow_request: Lähetä sähköposti, kun joku pyytää seurata sinua - mention: Lähetä sähköposti, kun sinut mainitaan - pending_account: Uusi tili tarvitsee tarkastusta + favourite: Joku lisäsi julkaisusi suosikkeihinsa + follow: Joku seurasi sinua + follow_request: Joku pyysi saada seurata sinua + mention: Joku mainitsi sinut + pending_account: Uusi tili tarvitsee tarkistusta reblog: Joku tehosti julkaisuasi report: Uusi raportti on lähetetty software_updates: @@ -297,7 +297,7 @@ fi: label: Uusi Mastodon-versio on saatavilla none: Älä koskaan ilmoita päivityksistä (ei suositeltu) patch: Ilmoita virhekorjauspäivityksistä - trending_tag: Uusi trendi vaatii tarkastelua + trending_tag: Uusi trendi vaatii tarkistusta rule: text: Sääntö settings: From ac32f4b3c370ba9f579036fe391ae1971b87f057 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 29 Sep 2023 15:51:36 +0200 Subject: [PATCH 196/237] Fix explore prompt appearing because of posts being received out of order (#27211) --- .../mastodon/features/home_timeline/index.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/index.jsx b/app/javascript/mastodon/features/home_timeline/index.jsx index 63d373b9a9..93f9376285 100644 --- a/app/javascript/mastodon/features/home_timeline/index.jsx +++ b/app/javascript/mastodon/features/home_timeline/index.jsx @@ -39,8 +39,17 @@ const getHomeFeedSpeed = createSelector([ ], (statusIds, pendingStatusIds, statusMap) => { const recentStatusIds = pendingStatusIds.size > 0 ? pendingStatusIds : statusIds; const statuses = recentStatusIds.filter(id => id !== null).map(id => statusMap.get(id)).filter(status => status?.get('account') !== me).take(20); - const oldest = new Date(statuses.getIn([statuses.size - 1, 'created_at'], 0)); - const newest = new Date(statuses.getIn([0, 'created_at'], 0)); + + if (statuses.isEmpty()) { + return { + gap: 0, + newest: new Date(0), + }; + } + + const datetimes = statuses.map(status => status.get('created_at', 0)); + const oldest = new Date(datetimes.min()); + const newest = new Date(datetimes.max()); const averageGap = (newest - oldest) / (1000 * (statuses.size + 1)); // Average gap between posts on first page in seconds return { From ccb980beac2c918e81f9c9b5b5bbcc5901d11377 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Mon, 2 Oct 2023 13:21:43 +0200 Subject: [PATCH 197/237] Fix websocket connections being incorrectly decremented twice on errors (#27238) --- streaming/index.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/streaming/index.js b/streaming/index.js index 8015c6815a..3565ed2783 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -1386,19 +1386,21 @@ const startServer = async () => { }; wss.on('connection', (ws, req) => { - const location = url.parse(req.url, true); + // Note: url.parse could throw, which would terminate the connection, so we + // increment the connected clients metric straight away when we establish + // the connection, without waiting: + connectedClients.labels({ type: 'websocket' }).inc(); + // Setup request properties: req.requestId = uuid.v4(); req.remoteAddress = ws._socket.remoteAddress; + // Setup connection keep-alive state: ws.isAlive = true; - ws.on('pong', () => { ws.isAlive = true; }); - connectedClients.labels({ type: 'websocket' }).inc(); - /** * @type {WebSocketSession} */ @@ -1408,27 +1410,31 @@ const startServer = async () => { subscriptions: {}, }; - const onEnd = () => { + ws.on('close', function onWebsocketClose() { const subscriptions = Object.keys(session.subscriptions); subscriptions.forEach(channelIds => { removeSubscription(session.subscriptions, channelIds.split(';'), req) }); + // Decrement the metrics for connected clients: + connectedClients.labels({ type: 'websocket' }).dec(); + // ensure garbage collection: session.socket = null; session.request = null; session.subscriptions = {}; + }); - connectedClients.labels({ type: 'websocket' }).dec(); - }; - - ws.on('close', onEnd); - ws.on('error', onEnd); + // Note: immediately after the `error` event is emitted, the `close` event + // is emitted. As such, all we need to do is log the error here. + ws.on('error', (err) => { + log.error('websocket', err.toString()); + }); ws.on('message', (data, isBinary) => { if (isBinary) { - log.warn('socket', 'Received binary data, closing connection'); + log.warn('websocket', 'Received binary data, closing connection'); ws.close(1003, 'The mastodon streaming server does not support binary messages'); return; } @@ -1451,7 +1457,10 @@ const startServer = async () => { subscribeWebsocketToSystemChannel(session); - if (location.query.stream) { + // Parse the URL for the connection arguments (if supplied), url.parse can throw: + const location = req.url && url.parse(req.url, true); + + if (location && location.query.stream) { subscribeWebsocketToChannel(session, firstParam(location.query.stream), location.query); } }); From 7b86708980f99606265dbb97d33ee9516be58dde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:35:29 +0200 Subject: [PATCH 198/237] New Crowdin Translations (automated) (#27220) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fa.json | 2 +- app/javascript/mastodon/locales/fi.json | 24 ++-- app/javascript/mastodon/locales/fr-QC.json | 2 +- app/javascript/mastodon/locales/ja.json | 16 +-- app/javascript/mastodon/locales/lv.json | 30 ++--- app/javascript/mastodon/locales/sk.json | 109 ++++++++++++------- app/javascript/mastodon/locales/sr-Latn.json | 2 +- app/javascript/mastodon/locales/sr.json | 2 +- config/locales/doorkeeper.fa.yml | 2 + config/locales/doorkeeper.fi.yml | 2 +- config/locales/fi.yml | 34 +++--- config/locales/ja.yml | 4 +- config/locales/simple_form.fi.yml | 6 +- 13 files changed, 132 insertions(+), 103 deletions(-) diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index c1b067cff8..f4a2e09e73 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -338,7 +338,7 @@ "keyboard_shortcuts.column": "برای تمرکز روی یک فرسته در یکی از ستون‌ها", "keyboard_shortcuts.compose": "تمرکز روی محیط نوشتن", "keyboard_shortcuts.description": "توضیح", - "keyboard_shortcuts.direct": "باز کردن ستون اشاره‌های خصوصی", + "keyboard_shortcuts.direct": "برای گشودن ستون اشاره‌های خصوصی", "keyboard_shortcuts.down": "پایین بردن در سیاهه", "keyboard_shortcuts.enter": "گشودن فرسته", "keyboard_shortcuts.favourite": "پسندیدن فرسته", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 094b7d3b36..4c920b038f 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -206,7 +206,7 @@ "dismissable_banner.explore_tags": "Nämä sosiaalisen verkon aihetunnisteet keräävät tänään eniten huomiota. Useimman käyttäjän käyttämät aihetunnisteet nousevat listauksessa korkeimmalle.", "dismissable_banner.public_timeline": "Nämä ovat viimeisimpiä julkaisuja sosiaalisen verkon käyttäjiltä, joita seurataan palvelimella {domain}.", "embed.instructions": "Upota julkaisu verkkosivullesi kopioimalla alla oleva koodi.", - "embed.preview": "Se tulee näyttämään tältä:", + "embed.preview": "Tältä se näyttää:", "emoji_button.activity": "Aktiviteetit", "emoji_button.clear": "Tyhjennä", "emoji_button.custom": "Mukautetut", @@ -226,7 +226,7 @@ "empty_column.account_timeline": "Ei viestejä täällä.", "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole estänyt käyttäjiä.", - "empty_column.bookmarked_statuses": "Et ole vielä lisännyt viestejä kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", + "empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.", "empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!", "empty_column.direct": "Yksityisiä mainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.", "empty_column.domain_blocks": "Palveluita ei ole vielä estetty.", @@ -314,17 +314,17 @@ "home.pending_critical_update.link": "Tutustu päivityssisältöihin", "home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!", "home.show_announcements": "Näytä tiedotteet", - "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", + "interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi kirjoittajalle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.", "interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.", "interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.", "interaction_modal.description.reply": "Mastodon-tilillä voit vastata tähän julkaisuun.", - "interaction_modal.login.action": "Palaa aloitussivulle", - "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus (kuten mastodon.social)", + "interaction_modal.login.action": "Siirry kotiin", + "interaction_modal.login.prompt": "Kotipalvelimesi verkkotunnus, kuten mastodon.social", "interaction_modal.no_account_yet": "Etkö ole vielä Mastodonissa?", "interaction_modal.on_another_server": "Toisella palvelimella", "interaction_modal.on_this_server": "Tällä palvelimella", "interaction_modal.sign_in": "Et ole kirjautunut tälle palvelimelle. Millä palvelimella tilisi sijaitsee?", - "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jossa loit tilisi. Jos et muista, etsi tervetulosähköpostia saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", + "interaction_modal.sign_in_hint": "Vihje: Se on sama verkkosivusto, jolle rekisteröidyit. Jos et muista, etsi tervetulosähköposti saapuneista viesteistäsi. Voit myös syöttää koko käyttäjätunnuksesi! (Esimerkki: @Mastodon@Mastodon.social)", "interaction_modal.title.favourite": "Lisää käyttäjän {name} julkaisu suosikkeihin", "interaction_modal.title.follow": "Seuraa käyttäjää {name}", "interaction_modal.title.reblog": "Tehosta käyttäjän {name} julkaisua", @@ -473,7 +473,7 @@ "onboarding.action.back": "Palaa takaisin", "onboarding.actions.back": "Palaa takaisin", "onboarding.actions.go_to_explore": "Siirry suosituimpien aiheiden syötteeseen", - "onboarding.actions.go_to_home": "Siirry kotisyötteeseen", + "onboarding.actions.go_to_home": "Siirry kotisyötteeseeni", "onboarding.compose.template": "Tervehdys #Mastodon!", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa, tai yrittää myöhemmin uudelleen.", "onboarding.follows.lead": "Kokoat oman kotisyötteesi itse. Mitä enemmän ihmisiä seuraat, sitä aktiivisempi ja kiinnostavampi syöte on. Nämä profiilit voivat olla alkuun hyvä lähtökohta — voit aina lopettaa niiden seuraamisen myöhemmin!", @@ -618,10 +618,10 @@ "status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä", "status.admin_status": "Avaa julkaisu valvontanäkymässä", "status.block": "Estä @{name}", - "status.bookmark": "Tallenna kirjanmerkki", + "status.bookmark": "Lisää kirjanmerkki", "status.cancel_reblog_private": "Peru tehostus", "status.cannot_reblog": "Tätä julkaisua ei voi tehostaa", - "status.copy": "Kopioi linkki julkaisuun", + "status.copy": "Kopioi julkaisun linkki", "status.delete": "Poista", "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Mainitse @{name} yksityisesti", @@ -662,9 +662,9 @@ "status.share": "Jaa", "status.show_filter_reason": "Näytä joka tapauksessa", "status.show_less": "Näytä vähemmän", - "status.show_less_all": "Näytä vähemmän kaikista", + "status.show_less_all": "Näytä kaikista vähemmän", "status.show_more": "Näytä lisää", - "status.show_more_all": "Näytä lisää kaikista", + "status.show_more_all": "Näytä kaikista enemmän", "status.show_original": "Näytä alkuperäinen", "status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}", "status.translate": "Käännä", @@ -715,7 +715,7 @@ "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "upload_progress.processing": "Käsitellään…", - "username.taken": "Kyseinen käyttäjätunnus on jo käytössä. Kokeile eri tunnusta", + "username.taken": "Käyttäjätunnus on jo varattu. Kokeile toista", "video.close": "Sulje video", "video.download": "Lataa tiedosto", "video.exit_fullscreen": "Poistu koko näytön tilasta", diff --git a/app/javascript/mastodon/locales/fr-QC.json b/app/javascript/mastodon/locales/fr-QC.json index 4da7477dca..16a18048b4 100644 --- a/app/javascript/mastodon/locales/fr-QC.json +++ b/app/javascript/mastodon/locales/fr-QC.json @@ -308,7 +308,7 @@ "home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_replies": "Afficher réponses", "home.explore_prompt.body": "Votre fil d'actualité aura un mélange de messages depuis les hashtags que vous avez choisi de suivre, les personnes que vous avez choisi de suivre, et les messages qu'ils boostent. Si ça vous semble trop calme à votre goût, n’hésitez pas à :", - "home.explore_prompt.title": "C'est chez vous dans Mastadon.", + "home.explore_prompt.title": "C'est votre page d'accueil dans Mastodon.", "home.hide_announcements": "Masquer les annonces", "home.pending_critical_update.body": "Veuillez mettre à jour votre serveur Mastodon dès que possible !", "home.pending_critical_update.link": "Voir les mises à jour", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index cfba6db93f..0bf0a96a27 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -1,13 +1,13 @@ { "about.blocks": "制限中のサーバー", "about.contact": "連絡先", - "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアでMastodon gGmbHの商標です。", - "about.domain_blocks.no_reason_available": "制限理由", - "about.domain_blocks.preamble": "Mastodonでは連合先のどのようなサーバーのユーザーとも交流できます。ただし次のサーバーには例外が設定されています。", + "about.disclaimer": "Mastodonは自由なオープンソースソフトウェアであり、Mastodon gGmbHの商標です。", + "about.domain_blocks.no_reason_available": "理由未記載", + "about.domain_blocks.preamble": "Mastodonでは原則的にあらゆるサーバー同士で交流したり、互いの投稿を読んだりできますが、当サーバーでは例外的に次のような制限を設けています。", "about.domain_blocks.silenced.explanation": "このサーバーのプロフィールやコンテンツは、明示的に検索したり、フォローでオプトインしない限り、通常は表示されません。", "about.domain_blocks.silenced.title": "制限", "about.domain_blocks.suspended.explanation": "これらのサーバーからのデータは処理されず、保存や変換もされません。該当するユーザーとの交流もできません。", - "about.domain_blocks.suspended.title": "停止済み", + "about.domain_blocks.suspended.title": "停止中", "about.not_available": "この情報はこのサーバーでは利用できません。", "about.powered_by": "{mastodon}による分散型ソーシャルメディア", "about.rules": "サーバーのルール", @@ -301,7 +301,7 @@ "hashtag.counter_by_uses_today": "今日{count, plural, other {{counter}件}}", "hashtag.follow": "ハッシュタグをフォローする", "hashtag.unfollow": "ハッシュタグのフォローを解除", - "hashtags.and_other": "+{count, plural, other {#件}}", + "hashtags.and_other": "ほか{count, plural, other {#個}}", "home.actions.go_to_explore": "話題をさがす", "home.actions.go_to_suggestions": "フォローするユーザーを検索", "home.column_settings.basic": "基本設定", @@ -405,7 +405,7 @@ "navigation_bar.discover": "見つける", "navigation_bar.domain_blocks": "ブロックしたドメイン", "navigation_bar.edit_profile": "プロフィールを編集", - "navigation_bar.explore": "エクスプローラー", + "navigation_bar.explore": "探索する", "navigation_bar.favourites": "お気に入り", "navigation_bar.filters": "フィルター設定", "navigation_bar.follow_requests": "フォローリクエスト", @@ -424,7 +424,7 @@ "not_signed_in_indicator.not_signed_in": "この機能を使うにはログインする必要があります。", "notification.admin.report": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", - "notification.favourite": "{name}さんがあなたの投稿をお気に入りに追加しました。", + "notification.favourite": "{name}さんがお気に入りしました", "notification.follow": "{name}さんにフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", "notification.mention": "{name}さんがあなたに返信しました", @@ -518,7 +518,7 @@ "privacy.public.long": "誰でも閲覧可", "privacy.public.short": "公開", "privacy.unlisted.long": "誰でも閲覧可、サイレント", - "privacy.unlisted.short": "未収載", + "privacy.unlisted.short": "非収載", "privacy_policy.last_updated": "{date}に更新", "privacy_policy.title": "プライバシーポリシー", "refresh": "更新", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index d35418e185..3f2c74cbac 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,11 +9,11 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", - "account.badges.bot": "Robots", + "account.badges.bot": "Automatizēts", "account.badges.group": "Grupa", "account.block": "Bloķēt @{name}", "account.block_domain": "Bloķēt domēnu {domain}", @@ -102,7 +102,7 @@ "bundle_modal_error.message": "Kaut kas nogāja greizi, ielādējot šo komponenti.", "bundle_modal_error.retry": "Mēģināt vēlreiz", "closed_registrations.other_server_instructions": "Tā kā Mastodon ir decentralizēts, tu vari izveidot kontu citā serverī un joprojām mijiedarboties ar šo.", - "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši domēnā {domain}, lai izmantotu Mastodon.", + "closed_registrations_modal.description": "Pašlaik nav iespējams izveidot kontu domēnā {domain}, taču ņem vērā, ka tev nav nepieciešams konts tieši {domain}, lai lietotu Mastodon.", "closed_registrations_modal.find_another_server": "Atrast citu serveri", "closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur tu izveido savu kontu, varēsi sekot līdzi un sazināties ar ikvienu šajā serverī. Tu pat vari vadīt to pats!", "closed_registrations_modal.title": "Reģistrēšanās Mastodon", @@ -113,7 +113,7 @@ "column.direct": "Privāti pieminēti", "column.directory": "Pārlūkot profilus", "column.domain_blocks": "Bloķētie domēni", - "column.favourites": "Iecienīti", + "column.favourites": "Iecienītie", "column.firehose": "Tiešraides plūsmas", "column.follow_requests": "Sekošanas pieprasījumi", "column.home": "Sākums", @@ -151,7 +151,7 @@ "compose_form.poll.switch_to_multiple": "Mainīt aptaujas veidu, lai atļautu vairākas izvēles", "compose_form.poll.switch_to_single": "Mainīt aptaujas veidu, lai atļautu vienu izvēli", "compose_form.publish": "Publicēt", - "compose_form.publish_form": "Publicēt", + "compose_form.publish_form": "Jauns ieraksts", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Saglabāt izmaiņas", "compose_form.sensitive.hide": "{count, plural, one {Atzīmēt multividi kā sensitīvu} other {Atzīmēt multivides kā sensitīvas}}", @@ -161,7 +161,7 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un sūdzēties", + "confirmations.block.block_and_report": "Bloķēt un Ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", @@ -236,7 +236,7 @@ "empty_column.follow_requests": "Šobrīd tev nav sekošanas pieprasījumu. Kad kāds pieteiksies tev sekot, pieprasījums parādīsies šeit.", "empty_column.followed_tags": "Tu vēl neesi sekojis nevienam tēmturim. Kad to izdarīsi, tie tiks parādīti šeit.", "empty_column.hashtag": "Ar šo tēmturi nekas nav atrodams.", - "empty_column.home": "Tava mājas laika līnija ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem. {suggestions}", + "empty_column.home": "Tava mājas laikrinda ir tukša! Lai to aizpildītu, pieseko vairāk cilvēkiem.", "empty_column.list": "Šis saraksts pašreiz ir tukšs. Kad šī saraksta dalībnieki publicēs jaunas ziņas, tās parādīsies šeit.", "empty_column.lists": "Pašreiz tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.", "empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -476,23 +476,23 @@ "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", "onboarding.compose.template": "Sveiki, #Mastodon!", "onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu personas, kurām sekot, vai mēģināt vēlreiz vēlāk.", - "onboarding.follows.lead": "Savu mājas plūsmu veido tu pats. Jo vairāk cilvēkiem tu sekosi, jo aktīvāk un interesantāk viss būs. Šie profili var būt labs sākumpunkts — vēlāk vienmēr varēsi pārstāt sekot!", + "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Populārs Mastodon", "onboarding.share.lead": "Paziņo citiem, kā viņi tevi var atrast Mastodon!", "onboarding.share.message": "Es esmu {username} #Mastodon! Nāc sekot man uz {url}", "onboarding.share.next_steps": "Iespējamie nākamie soļi:", "onboarding.share.title": "Kopīgo savu profilu", - "onboarding.start.lead": "Tavs jaunais Mastodon konts ir gatavs lietošanai. Lūk, kā tu vari to pilnīgāk izmantot:", - "onboarding.start.skip": "Vai vēlies izlaist tieši uz priekšu?", + "onboarding.start.lead": "Tagad tu esat daļa no Mastodon — unikālas, decentralizētas sociālo mediju platformas, kurā tu, nevis algoritms, veido savu pieredzi. Sāksim darbu šajā jaunajā sociālajā jomā:", + "onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?", "onboarding.start.title": "Tev tas izdevās!", "onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.", "onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}", - "onboarding.steps.publish_status.body": "Sveicini pasauli.", + "onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", "onboarding.steps.setup_profile.body": "Citi, visticamāk, sazināsies ar tevi, izmantojot aizpildītu profilu.", "onboarding.steps.setup_profile.title": "Pielāgo savu profilu", "onboarding.steps.share_profile.body": "Paziņo saviem draugiem, kā tevi atrast Mastodon!", - "onboarding.steps.share_profile.title": "Kopīgo savu profilu", + "onboarding.steps.share_profile.title": "Kopīgo savu Mastodon profilu", "onboarding.tips.2fa": "Vai zināji? Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divu faktoru autentifikāciju. Tas darbojas ar jebkuru tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!", "onboarding.tips.accounts_from_other_servers": "Vai zināji? Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!", "onboarding.tips.migration": "Vai zināji? Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu personīgo serveri!", @@ -518,7 +518,7 @@ "privacy.public.long": "Redzams visiem", "privacy.public.short": "Publiska", "privacy.unlisted.long": "Redzams visiem, bet izslēgts no satura atklāšanas funkcijām", - "privacy.unlisted.short": "Nerindota", + "privacy.unlisted.short": "Neiekļautie", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", "refresh": "Atsvaidzināt", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index bd1252b47f..da12eaa1b5 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -12,53 +12,53 @@ "about.powered_by": "Decentralizované sociálne médiá poháňané technológiou {mastodon}", "about.rules": "Pravidlá servera", "account.account_note_header": "Poznámka", - "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", + "account.add_or_remove_from_list": "Pridaj alebo odober zo zoznamov", "account.badges.bot": "Bot", "account.badges.group": "Skupina", "account.block": "Blokuj @{name}", - "account.block_domain": "Ukry všetko z {domain}", + "account.block_domain": "Skry všetko z {domain}", "account.block_short": "Blokuj", "account.blocked": "Blokovaný/á", "account.browse_more_on_origin_server": "Prehľadávaj viac na pôvodnom profile", - "account.cancel_follow_request": "Stiahni žiadosť o nasledovanie", - "account.direct": "Spomeň @{name} v súkromí", - "account.disable_notifications": "Prestaň ma oboznamovať, keď má @{name} príspevky", - "account.domain_blocked": "Doména ukrytá", + "account.cancel_follow_request": "Zruš žiadosť o sledovanie", + "account.direct": "Spomeň @{name} súkromne", + "account.disable_notifications": "Prestaň mi oznamovať, keď má @{name} príspevky", + "account.domain_blocked": "Doména skrytá", "account.edit_profile": "Uprav profil", - "account.enable_notifications": "Oboznamuj ma, keď má @{name} príspevky", + "account.enable_notifications": "Oznamuj mi, keď má @{name} príspevky", "account.endorse": "Zobrazuj na profile", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", "account.featured_tags.title": "Odporúčané hashtagy používateľa {name}", - "account.follow": "Nasleduj", - "account.followers": "Nasledovatelia", + "account.follow": "Sleduj", + "account.followers": "Sledovatelia", "account.followers.empty": "Tohto používateľa ešte nikto nenasleduje.", - "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúci} other {{counter} Sledujúci}}", - "account.following": "Nasledujem", + "account.followers_counter": "{count, plural, one {{counter} Sledujúci} few {{counter} Sledujúci} many {{counter} Sledujúcich} other {{counter} Sledujúcich}}", + "account.following": "Sledujem", "account.following_counter": "{count, plural, one {{counter} Sledovaných} other {{counter} Sledujúcich}}", - "account.follows.empty": "Tento používateľ ešte nikoho nenasleduje.", - "account.follows_you": "Nasleduje ťa", + "account.follows.empty": "Tento používateľ ešte nikoho nesleduje.", + "account.follows_you": "Sleduje ťa", "account.go_to_profile": "Prejdi na profil", - "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", + "account.hide_reblogs": "Skry zdieľania od @{name}", "account.in_memoriam": "In Memoriam.", "account.joined_short": "Pridal/a sa", "account.languages": "Zmeniť odoberané jazyky", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", - "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", + "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sa sám rozhoduje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} uvádza, že jeho/jej nový účet je teraz:", - "account.mute": "Nevšímaj si @{name}", - "account.mute_notifications_short": "Stíš oboznámenia", - "account.mute_short": "Nevšímaj si", - "account.muted": "Nevšímaný/á", - "account.no_bio": "Nieje uvedený žiadny popis.", + "account.mute": "Stíš @{name}", + "account.mute_notifications_short": "Stíš oznámenia", + "account.mute_short": "Stíš", + "account.muted": "Stíšený", + "account.no_bio": "Nie je uvedený žiadny popis.", "account.open_original_page": "Otvor pôvodnú stránku", "account.posts": "Príspevky", "account.posts_with_replies": "Príspevky a odpovede", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", - "account.requested_follow": "{name} ťa žiada nasledovať", + "account.requested_follow": "{name} ti poslal žiadosť na sledovanie", "account.share": "Zdieľaj @{name} profil", "account.show_reblogs": "Ukáž vyzdvihnutia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}", @@ -84,7 +84,7 @@ "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", - "announcement.announcement": "Oboznámenie", + "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skry zvuk", "autosuggest_hashtag.per_week": "{count} týždenne", @@ -119,7 +119,7 @@ "column.home": "Domov", "column.lists": "Zoznamy", "column.mutes": "Nevšímaní užívatelia", - "column.notifications": "Oboznámenia", + "column.notifications": "Oznámenia", "column.pins": "Pripnuté príspevky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", @@ -185,7 +185,7 @@ "confirmations.redraft.message": "Ste si istý, že chcete premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", "confirmations.reply.confirm": "Odpovedz", "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", - "confirmations.unfollow.confirm": "Nesleduj", + "confirmations.unfollow.confirm": "Prestaň sledovať", "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", "conversation.delete": "Vymaž konverzáciu", "conversation.mark_as_read": "Označ za prečítané", @@ -223,7 +223,7 @@ "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", "empty_column.account_suspended": "Účet bol vylúčený", - "empty_column.account_timeline": "Niesu tu žiadne príspevky!", + "empty_column.account_timeline": "Nie sú tu žiadne príspevky!", "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.bookmarked_statuses": "Ešte nemáš žiadné záložky. Keď si pridáš príspevok k záložkám, zobrazí sa tu.", @@ -296,19 +296,24 @@ "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "hashtag.column_settings.tag_toggle": "Vlož dodatočné haštagy pre tento stĺpec", - "hashtag.follow": "Nasleduj haštag", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} sledujúci} few {{counter} sledujúci} many {{counter} sledujúcich} other {{counter} sledujúcich}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes", + "hashtag.follow": "Sleduj haštag", "hashtag.unfollow": "Nesleduj haštag", + "hashtags.and_other": "…a {count, plural, one {} few {# ďalšie} many {# ďalších}other {# ďalších}}", "home.actions.go_to_explore": "Pozrieť, čo je trendy", "home.actions.go_to_suggestions": "Nájdi ľudí na sledovanie", "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Ukáž vyzdvihnuté", "home.column_settings.show_replies": "Ukáž odpovede", + "home.explore_prompt.body": "Váš domovský informačný kanál bude obsahovať mix príspevkov z mriežok, ktoré ste sa rozhodli sledovať, ľudí, ktorých ste sa rozhodli sledovať, a príspevkov, ktoré preferujú. Ak sa vám to zdá príliš málo, možno budete chcieť:", "home.explore_prompt.title": "Toto je tvoja domovina v rámci Mastodonu.", - "home.hide_announcements": "Skry oboznámenia", + "home.hide_announcements": "Skry oznámenia", "home.pending_critical_update.body": "Prosím aktualizuj si svoj Mastodon server, ako náhle to bude možné!", "home.pending_critical_update.link": "Pozri aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia!", - "home.show_announcements": "Ukáž oboznámenia", + "home.show_announcements": "Ukáž oznámenia", "interaction_modal.description.favourite": "S účtom na Mastodone si môžeš tento príspevok obľúbiť, aby si dal/a autorovi vedieť, že ho oceňuješ, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "Ak máte konto na Mastodone, môžete sledovať {name} a dostávať príspevky do svojho domovského kanála.", "interaction_modal.description.reblog": "Ak máte účet na Mastodone, môžete tento príspevok posilniť a zdieľať ho s vlastnými sledovateľmi.", @@ -319,6 +324,7 @@ "interaction_modal.on_another_server": "Na inom serveri", "interaction_modal.on_this_server": "Na tomto serveri", "interaction_modal.sign_in": "Nie si prihláseý/á na tomto serveri. Kde je tvoj účet hostovaný?", + "interaction_modal.sign_in_hint": "Tip: Toto je webová stránka, na ktorej ste sa zaregistrovali. Ak si nepamätáte, pohľadajte uvítací e-mail vo svojej schránke. Môžete tiež zadať svoje celé používateľské meno! (napr. @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Obľúb si {name} ov/in príspevok", "interaction_modal.title.follow": "Nasleduj {name}", "interaction_modal.title.reblog": "Vyzdvihni {name}ov/in príspevok", @@ -346,7 +352,7 @@ "keyboard_shortcuts.mention": "spomeň autora", "keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov", "keyboard_shortcuts.my_profile": "otvor svoj profil", - "keyboard_shortcuts.notifications": "otvor panel oboznámení", + "keyboard_shortcuts.notifications": "Otvor panel oznámení", "keyboard_shortcuts.open_media": "na otvorenie médií", "keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov", "keyboard_shortcuts.profile": "otvor autorov profil", @@ -373,6 +379,7 @@ "lists.delete": "Vymaž list", "lists.edit": "Uprav zoznam", "lists.edit.submit": "Zmeň názov", + "lists.exclusive": "Skryť tieto príspevky z domovskej stránky", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", "lists.replies_policy.followed": "Akýkoľvek nasledovaný užívateľ", @@ -426,11 +433,11 @@ "notification.reblog": "{name} zdieľal/a tvoj príspevok", "notification.status": "{name} práve uverejnil/a", "notification.update": "{name} upravil/a príspevok", - "notifications.clear": "Vyčisti oboznámenia", - "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", + "notifications.clear": "Vyčisti oznámenia", + "notifications.clear_confirmation": "Naozaj chceš nenávratne odstrániť všetky tvoje oznámenia?", "notifications.column_settings.admin.report": "Nové hlásenia:", "notifications.column_settings.admin.sign_up": "Nové registrácie:", - "notifications.column_settings.alert": "Oboznámenia na ploche", + "notifications.column_settings.alert": "Oznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", "notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie", "notifications.column_settings.filter_bar.category": "Rýchle triedenie", @@ -444,8 +451,8 @@ "notifications.column_settings.show": "Ukáž v stĺpci", "notifications.column_settings.sound": "Prehraj zvuk", "notifications.column_settings.status": "Nové príspevky:", - "notifications.column_settings.unread_notifications.category": "Neprečítané oboznámenia", - "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oboznámenia", + "notifications.column_settings.unread_notifications.category": "Neprečítané oznámenia", + "notifications.column_settings.unread_notifications.highlight": "Zdôrazni neprečítané oznámenia", "notifications.column_settings.update": "Úpravy:", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", @@ -455,12 +462,12 @@ "notifications.filter.polls": "Výsledky ankiet", "notifications.filter.statuses": "Aktualizácie od ľudí, ktorých nasleduješ", "notifications.grant_permission": "Udeľ povolenie.", - "notifications.group": "{count} oboznámení", - "notifications.mark_as_read": "Označ každé oboznámenie za prečítané", - "notifications.permission_denied": "Oboznámenia na plochu sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", - "notifications.permission_denied_alert": "Oboznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača o to, bola už skôr zamietnutá", - "notifications.permission_required": "Oboznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", - "notifications_permission_banner.enable": "Povoliť oboznámenia na plochu", + "notifications.group": "{count} Oznámení", + "notifications.mark_as_read": "Označ každé oznámenie za prečítané", + "notifications.permission_denied": "Oznámenia na ploche sú nedostupné, kvôli predtým zamietnutej požiadavke prehliadača", + "notifications.permission_denied_alert": "Oznámenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", + "notifications.permission_required": "Oznámenia na ploche sú nedostupné, pretože potrebné povolenia neboli udelené.", + "notifications_permission_banner.enable": "Povoliť oznámenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nikdy nezmeškaj jedinú vec", "onboarding.action.back": "Vziať ma späť", @@ -468,6 +475,7 @@ "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "Nazdar #Mastodon!", + "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.", "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", "onboarding.follows.title": "Popular on Mastodon", "onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!", @@ -476,6 +484,7 @@ "onboarding.share.title": "Zdieľaj svoj profil", "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.start.title": "Zvládli ste to!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", "onboarding.steps.publish_status.body": "Say hello to the world.", @@ -484,6 +493,12 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Vedeli ste? Svoj účet môžete zabezpečiť nastavením dvojfaktorového overenia v nastaveniach účtu. Funguje to s akoukoľvek aplikáciou TOTP podľa vášho výberu, nie je potrebné žiadne telefónne číslo!", + "onboarding.tips.accounts_from_other_servers": "Vedeli ste? Keďže Mastodon je decentralizovaný, niektoré profily, s ktorými sa stretnete, budú na iných serveroch, ako je váš. Aj napriek tomu s nimi môžete bezproblémovo komunikovať! Ich server je v druhej časti ich používateľského mena!", + "onboarding.tips.migration": "Vedeli ste? Ak máte pocit, že doména {domain} pre vás v budúcnosti nebude skvelou voľbou, môžete prejsť na iný server Mastodon bez straty svojich sledovateľov. Môžete dokonca hostovať svoj vlastný server!", + "onboarding.tips.verification": "Vedeli ste? Svoj účet môžete overiť umiestnením odkazu na svoj profil Mastodon na svoju vlastnú webovú lokalitu a pridaním webovej lokality do svojho profilu. Nie sú potrebné žiadne poplatky ani doklady!", + "password_confirmation.exceeds_maxlength": "Potvrdené heslo presahuje maximálnu dĺžku hesla", + "password_confirmation.mismatching": "Zadané heslá sa nezhodujú", "picture_in_picture.restore": "Vrátiť späť", "poll.closed": "Uzatvorená", "poll.refresh": "Obnoviť", @@ -542,6 +557,7 @@ "report.reasons.dislike": "Nepáči sa mi", "report.reasons.dislike_description": "Nieje to niečo, čo chceš vidieť", "report.reasons.legal": "Je to nelegálne", + "report.reasons.legal_description": "Domnievate sa, že porušuje zákony vašej krajiny alebo krajiny servera", "report.reasons.other": "Je to niečo iné", "report.reasons.other_description": "Tento problém nepatrí do iných kategórií", "report.reasons.spam": "Je to spam", @@ -559,6 +575,7 @@ "report.thanks.title": "Nechceš to vidieť?", "report.thanks.title_actionable": "Vďaka za nahlásenie, pozrieme sa na to.", "report.unfollow": "Nesleduj @{name}", + "report.unfollow_explanation": "Tento účet sledujete. Ak už nechcete vidieť jeho príspevky vo svojom domovskom kanáli, zrušte jeho sledovanie.", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Právne ujednania", "report_notification.categories.other": "Ostatné", @@ -573,6 +590,8 @@ "search.quick_action.open_url": "Otvor URL v rámci Mastodonu", "search.quick_action.status_search": "Príspevky zodpovedajúce {x}", "search.search_or_paste": "Hľadaj, alebo vlož URL adresu", + "search_popout.full_text_search_disabled_message": "Nie je k dispozícii v doméne {domain}.", + "search_popout.language_code": "ISO kód jazyka", "search_popout.options": "Možnosti vyhľadávania", "search_popout.quick_actions": "Rýchle akcie", "search_popout.recent": "Nedávne vyhľadávania", @@ -585,14 +604,18 @@ "search_results.see_all": "Ukáž všetky", "search_results.statuses": "Príspevky", "search_results.title": "Hľadaj {q}", + "server_banner.about_active_users": "Ľudia používajúci tento server za posledných 30 dní (Aktívni používatelia za mesiac)", "server_banner.active_users": "aktívni užívatelia", "server_banner.administered_by": "Správcom je:", + "server_banner.introduction": "{domain} je súčasťou decentralizovanej sociálnej siete využívajúcej technológiu {mastodon}.", "server_banner.learn_more": "Zisti viac", "server_banner.server_stats": "Serverové štatistiky:", "sign_in_banner.create_account": "Vytvor účet", "sign_in_banner.sign_in": "Prihlás sa", "sign_in_banner.sso_redirect": "Prihlás sa, alebo zaregistruj", + "sign_in_banner.text": "Prihláste sa, aby ste mohli sledovať profily alebo haštagy, obľúbené veci, zdieľať ich a odpovedať na príspevky. Môžete tiež komunikovať zo svojho účtu na inom serveri.", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", + "status.admin_domain": "Otvor rozhranie na moderovanie domény {domain}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", "status.block": "Blokuj @{name}", "status.bookmark": "Záložka", @@ -649,9 +672,11 @@ "status.uncached_media_warning": "Náhľad nie je k dispozícii", "status.unmute_conversation": "Prestaň si nevšímať konverzáciu", "status.unpin": "Odopni z profilu", + "subscribed_languages.lead": "Po zmene sa na vašej domovskej stránke a časovej osi zoznamu zobrazia iba príspevky vo vybraných jazykoch. Ak chcete dostávať príspevky vo všetkých jazykoch, vyberte možnosť žiadne.", "subscribed_languages.save": "Ulož zmeny", + "subscribed_languages.target": "Zmeniť prihlásené jazyky pre {target}", "tabs_bar.home": "Domov", - "tabs_bar.notifications": "Oboznámenia", + "tabs_bar.notifications": "Oznámenia", "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", @@ -680,6 +705,7 @@ "upload_form.video_description": "Popíš, pre ľudí so stratou sluchu, alebo očným znevýhodnením", "upload_modal.analyzing_picture": "Analyzujem obrázok…", "upload_modal.apply": "Použi", + "upload_modal.applying": "Nastavovanie…", "upload_modal.choose_image": "Vyber obrázok", "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", "upload_modal.detect_text": "Rozpoznaj text z obrázka", @@ -689,6 +715,7 @@ "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "upload_progress.processing": "Spracovávanie…", + "username.taken": "Používateľské meno je obsadené. Skúste iné", "video.close": "Zavri video", "video.download": "Stiahni súbor", "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 9750784bbc..f64952f7b5 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Vidljivo samo pomenutim korisnicima", "privacy.direct.short": "Samo pomenute osobe", "privacy.private.long": "Vidljivo samo pratiocima", - "privacy.private.short": "Samo pratiocima", + "privacy.private.short": "Samo pratioci", "privacy.public.long": "Vidljivo za sve", "privacy.public.short": "Javno", "privacy.unlisted.long": "Vidljivo svima, ali isključeno iz funkcija otkrivanja", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index bb4739cbcc..130b28bc74 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -514,7 +514,7 @@ "privacy.direct.long": "Видљиво само поменутим корисницима", "privacy.direct.short": "Само поменуте особе", "privacy.private.long": "Видљиво само пратиоцима", - "privacy.private.short": "Само пратиоцима", + "privacy.private.short": "Само пратиоци", "privacy.public.long": "Видљиво за све", "privacy.public.short": "Јавно", "privacy.unlisted.long": "Видљиво свима, али искључено из функција откривања", diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 085507f8bf..c56e76e346 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -149,6 +149,7 @@ fa: scopes: admin:read: خواندن تمام داده‌ها روی کارساز admin:read:accounts: خواندن اطّلاعات حساس از همهٔ حساب‌ها + admin:read:canonical_email_blocks: خواندن اطّلاعات حسّاس از همهٔ انسدادهای رایانامهٔ متعارف admin:read:domain_allows: خواندن اطّلاعات حساس از همهٔ دامنه ها اجازه داده شد admin:read:domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های مسدودشده admin:read:email_domain_blocks: خواندن اطّلاعات حساس از همهٔ دامنه های رایانامه های مسدودشده @@ -156,6 +157,7 @@ fa: admin:read:reports: خواندن اطّلاعات حساس از همهٔ گزارش‌ها و حساب‌های گزارش‌شده admin:write: تغییر تمام داده‌ها روی کارساز admin:write:accounts: انجام کنش مدیریتی روی حساب‌ها + admin:write:canonical_email_blocks: انجام کنش‌های نظارتی روی همهٔ انسدادهای رایانامهٔ متعارف admin:write:domain_allows: انجام کنش مدیریتی روی اجازه‌های دامنه admin:write:domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنه admin:write:email_domain_blocks: انجام کنش مدیریتی روی انسدادهای دامنهٔ رایانامه diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 8d030274e7..0f263b00d5 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -182,7 +182,7 @@ fi: write: muokkaa kaikkia tilisi tietoja write:accounts: muokkaa profiiliasi write:blocks: estä tilejä ja verkkotunnuksia - write:bookmarks: lisää julkaisuja kirjanmerkkeihisi + write:bookmarks: lisää julkaisuja kirjanmerkkeihin write:conversations: mykistä ja poista keskusteluja write:favourites: suosikkijulkaisut write:filters: luo suodattimia diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 466cb95a24..2043d327a1 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1,7 +1,7 @@ --- fi: about: - about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: Ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu! Pidä tietosi ominasi Mastodonilla!' + about_mastodon_html: 'Tulevaisuuden sosiaalinen verkosto: ei mainoksia, ei valvontaa, toteutettu avoimilla protokollilla ja hajautettu rakenne! Pidä tietosi ominasi Mastodonin avulla!' contact_missing: Ei asetettu contact_unavailable: Ei saatavilla hosted_on: Mastodon palvelimella %{domain} @@ -262,8 +262,8 @@ fi: disable_sign_in_token_auth_user_html: "%{name} poisti sähköpostitunnuksen %{target} todennuksen käytöstä" disable_user_html: "%{name} poisti kirjautumisen käyttäjältä %{target}" enable_custom_emoji_html: "%{name} otti käyttöön emojin %{target}" - enable_sign_in_token_auth_user_html: "%{name} aktivoi sähköpostitunnuksen käyttäjälle %{target}" - enable_user_html: "%{name} salli kirjautumisen käyttäjälle %{target}" + enable_sign_in_token_auth_user_html: "%{name} otti todennuksen sähköpostivaltuutuksella käyttöön käyttäjälle %{target}" + enable_user_html: "%{name} otti kirjautumisen käyttöön käyttäjälle %{target}" memorialize_account_html: "%{name} muutti käyttäjän %{target} tilin muistosivuksi" promote_user_html: "%{name} ylensi käyttäjän %{target}" reject_appeal_html: "%{name} hylkäsi valvontapäätöksen valituksen käyttäjältä %{target}" @@ -584,7 +584,7 @@ fi: one: "%{count} ilmoitus" other: "%{count} ilmoitusta" action_log: Tarkastusloki - action_taken_by: Toimenpiteen tekijä + action_taken_by: Toimen tehnyt actions: delete_description_html: Raportoidut julkaisut poistetaan ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. mark_as_sensitive_description_html: Raportoitujen julkaisujen media merkitään arkaluonteiseksi ja kirjataan varoitus, joka auttaa suhtautumaan vakavammin saman tilin tuleviin rikkomuksiin. @@ -673,7 +673,7 @@ fi: moderation: Valvonta special: Erikois delete: Poista - description_html: Käyttäjän roolit, voit muokata toimintoja ja alueita mitä sinun Mastodon käyttäjät voivat käyttää. + description_html: "Käyttäjärooleilla voit muokata, mihin toimintoihin ja alueisiin käyttäjäsi pääsevät käsiksi." edit: Muokkaa "%{name}" roolia everyone: Oletus käyttöoikeudet everyone_full_description_html: Tämä on perusrooli joka vaikuttaa kaikkiin käyttäjiin, jopa ilman määrättyä roolia. Kaikki muut roolit perivät sen käyttöoikeudet. @@ -945,11 +945,11 @@ fi: webhooks: add_new: Lisää päätepiste delete: Poista - description_html: "Webhook mahdollistaa Mastodonin työntää reaaliaikaisia ilmoituksia valituista tapahtumista omaan sovellukseesi, joten sovelluksesi voi laukaista automaattisesti reaktioita." + description_html: "Webhookin avulla Mastodon voi puskea sovellukseesi reaaliaikaisia ilmoituksia valituista tapahtumista, jotta sovelluksesi voi laukaista reaktioita automaattisesti." disable: Poista käytöstä - disabled: Ei käytössä + disabled: Pois käytöstä edit: Muokkaa päätepistettä - empty: Sinulla ei ole vielä määritetty webhook-päätepisteitä. + empty: Et ole vielä määrittänyt webhook-päätepisteitä. enable: Ota käyttöön enabled: Aktiivinen enabled_events: @@ -1150,7 +1150,7 @@ fi: username_unavailable: Käyttäjänimesi ei tule saataville enää uudestaan disputes: strikes: - action_taken: Toteutetut toimet + action_taken: Tehty toimi appeal: Vetoomus appeal_approved: Tähän valitukseen on haettu muutosta, eikä se ole enää voimassa appeal_rejected: Valitus on hylätty @@ -1389,13 +1389,13 @@ fi: confirmation_html: Haluatko varmasti lopettaa Mastodonin sähköposti-ilmoitusten vastaanottamisen aiheesta %{type} palvelimelta %{domain} osoitteeseesi %{email}? Voit tilata ilmoitusviestejä milloin tahansa uudelleen sähköposti-ilmoitusten asetuksista. emails: notification_emails: - favourite: sähköpostit ilmoituksille - follow: seuraa sähköpostin ilmoituksia - follow_request: seuraa pyyntöjä sähköpostiin - mention: mainitse sähköpostin ilmoitukset - reblog: tehosta sähköpostien ilmoituksia + favourite: sähköposti-ilmoituksia suosikkeihin lisäämisistä + follow: sähköposti-ilmoituksia seuraamisista + follow_request: sähköposti-ilmoituksia seuraamispyynnöistä + mention: sähköposti-ilmoituksia maininnoista + reblog: sähköposti-ilmoituksia tehostuksista resubscribe_html: Jos olet perunut tilauksen erehdyksessä, voit tilata ilmoitusviestejä uudelleen sähköposti-ilmoitusten asetuksista. - success_html: Sinulle ei vastedes lähetetä %{type} -aihepiirin Mastodon-sähköposti-ilmoituksia palvelimelta %{domain} osoitteeseen %{email}. + success_html: Sinulle ei enää lähetetä Mastodonin %{type} palvelimelta %{domain} osoitteeseen %{email}. title: Lopeta tilaus media_attachments: validations: @@ -1812,7 +1812,7 @@ fi: suspend: Tili jäädytetty welcome: edit_profile_action: Määritä profiili - edit_profile_step: Voit mukauttaa profiiliasi mm. profiilikuvalla ja uudella näyttönimellä. Voit myös valita haluatko tarkastaa ja hyväksyä uudet seuraajat itse. + edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun final_action: Ala julkaista final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' @@ -1847,7 +1847,7 @@ fi: success: Suojausavaimesi poistaminen onnistui. invalid_credential: Virheellinen suojausavain nickname_hint: Anna uuden suojausaivaimesi lempinimi - not_enabled: Et ole vielä ottanut käyttöön WebAuthn-ohjelmaa + not_enabled: Et ole vielä ottanut WebAuthn-ohjelmaa käyttöön not_supported: Tämä selain ei tue suojausavaimia otp_required: Jos haluat käyttää suojausavaimia, ota ensin kaksivaiheinen todennus käyttöön. registered_on: Rekisteröity %{date} diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b18405fb65..6a72c1ca14 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -770,12 +770,12 @@ ja: critical_update: "※緊急 (速やかに適用してください)" description: Mastodonサーバーはいつでも最新の状態を保ち、新しい機能や修正を利用できるようにしておくことをおすすめします。またセキュリティの問題が発生した場合は、速やかにMastodonをアップデートすることが大切です。Mastodonは30分おきにアップデートを確認し、通知設定に応じて新しいアップデートをメールで通知します。 documentation_link: もっと見る - release_notes: 更新情報 + release_notes: リリースノート title: 利用可能なアップデート type: アップデートの種別 types: major: メジャーリリース - minor: リリース + minor: マイナーリリース patch: パッチ (バグ修正のみ) version: バージョン statuses: diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 1eec9a9317..1925ba77f3 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,7 +3,7 @@ fi: simple_form: hints: account: - discoverable: Julkisia viestejäsi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. + discoverable: Julkisia julkaisujasi ja profiiliasi voidaan pitää esillä tai suositella Mastodonin eri alueilla ja profiiliasi voidaan ehdottaa toisille käyttäjille. display_name: Koko nimesi tai lempinimesi. fields: Kotisivusi, pronominit, ikä, mitä ikinä haluat. indexable: Julkiset julkaisusi voivat näkyä hakutuloksissa Mastodonissa. Ihmiset, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta. @@ -49,7 +49,7 @@ fi: header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px inbox_url: Kopioi URL-osoite haluamasi välittäjän etusivulta irreversible: Suodatetut julkaisut katoavat lopullisesti, vaikka suodatin poistettaisiin myöhemmin - locale: Käyttöliittymän, sähköpostien ja ilmoitusten kieli + locale: Käyttöliittymän, sähköpostien ja puskuilmoitusten kieli password: Käytä vähintään 8 merkkiä phrase: Täsmää riippumatta tekstin aakkoslajista tai julkaisun sisältövaroituksesta scopes: Mihin sovellusliittymiin sovellus pääsee käsiksi. Jos valitset ylätason laajuuden, sinun ei tarvitse valita yksittäisiä. @@ -136,7 +136,7 @@ fi: position: Korkeampi rooli ratkaisee konfliktit tietyissä tilanteissa. Tiettyjä toimintoja voidaan suorittaa vain rooleille, joiden prioriteetti on pienempi webhook: events: Valitse lähetettävät tapahtumat - template: Luo oma JSON-hyötykuorma käyttäen muuttujainterpolointia. Jättäessäsi kentän tyhjäksi, käytetään vakio-JSON-kuormaa. + template: Luo oma JSON-hyötykuorma käyttäen muuttujien interpolointia. Jätä kenttä tyhjäksi käyttääksesi vakio-JSON-kuormaa. url: Mihin tapahtumat lähetetään labels: account: From cfd2c6e28de4002d2e12200984d02cc74c211169 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:20:04 +0200 Subject: [PATCH 199/237] Fix import progress not updating on certain failures (#27247) --- app/workers/import/row_worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/import/row_worker.rb b/app/workers/import/row_worker.rb index 09dd6ce736..c86900e6ad 100644 --- a/app/workers/import/row_worker.rb +++ b/app/workers/import/row_worker.rb @@ -8,7 +8,7 @@ class Import::RowWorker sidekiq_retries_exhausted do |msg, _exception| ActiveRecord::Base.connection_pool.with_connection do # Increment the total number of processed items, and bump the state of the import if needed - bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:id) + bulk_import_id = BulkImportRow.where(id: msg['args'][0]).pick(:bulk_import_id) BulkImport.progress!(bulk_import_id) unless bulk_import_id.nil? end end From 8a6fa34040789a4e849ff115e311f6e1b500f42d Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 2 Oct 2023 16:42:52 +0200 Subject: [PATCH 200/237] Fix incorrectly keeping outdated update notices absent from the API endpoint (#27021) --- app/services/software_update_check_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb index 49b92f104d..c8ce1753f5 100644 --- a/app/services/software_update_check_service.rb +++ b/app/services/software_update_check_service.rb @@ -35,11 +35,13 @@ class SoftwareUpdateCheckService < BaseService end def process_update_notices!(update_notices) - return if update_notices.blank? || update_notices['updatesAvailable'].blank? + return if update_notices.blank? || update_notices['updatesAvailable'].nil? # Clear notices that are not listed by the update server anymore SoftwareUpdate.where.not(version: update_notices['updatesAvailable'].pluck('version')).delete_all + return if update_notices['updatesAvailable'].blank? + # Check if any of the notices is new, and issue notifications known_versions = SoftwareUpdate.where(version: update_notices['updatesAvailable'].pluck('version')).pluck(:version) new_update_notices = update_notices['updatesAvailable'].filter { |notice| known_versions.exclude?(notice['version']) } From 6ba4b208b86ee5ce23adaf8f52181dec3c5d565f Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 10:09:00 +0200 Subject: [PATCH 201/237] Change some worker lock TTLs (#27246) --- app/workers/account_deletion_worker.rb | 2 +- .../activitypub/synchronize_featured_collection_worker.rb | 2 +- .../activitypub/synchronize_featured_tags_collection_worker.rb | 2 +- app/workers/activitypub/update_distribution_worker.rb | 2 +- app/workers/admin/account_deletion_worker.rb | 2 +- app/workers/admin/domain_purge_worker.rb | 2 +- app/workers/publish_scheduled_status_worker.rb | 2 +- app/workers/resolve_account_worker.rb | 2 +- app/workers/scheduler/indexing_scheduler.rb | 2 +- app/workers/scheduler/scheduled_statuses_scheduler.rb | 2 +- app/workers/verify_account_links_worker.rb | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/workers/account_deletion_worker.rb b/app/workers/account_deletion_worker.rb index b501511728..e4f943fbd1 100644 --- a/app/workers/account_deletion_worker.rb +++ b/app/workers/account_deletion_worker.rb @@ -3,7 +3,7 @@ class AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id, options = {}) account = Account.find(account_id) diff --git a/app/workers/activitypub/synchronize_featured_collection_worker.rb b/app/workers/activitypub/synchronize_featured_collection_worker.rb index f67d693cb3..7a187d7f53 100644 --- a/app/workers/activitypub/synchronize_featured_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, options = {}) options = { note: true, hashtag: false }.deep_merge(options.deep_symbolize_keys) diff --git a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb index 14af4f725c..570415c821 100644 --- a/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb +++ b/app/workers/activitypub/synchronize_featured_tags_collection_worker.rb @@ -3,7 +3,7 @@ class ActivityPub::SynchronizeFeaturedTagsCollectionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(account_id, url) ActivityPub::FetchFeaturedTagsCollectionService.new.call(Account.find(account_id), url) diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb index d0391bb6f6..a04ac621f3 100644 --- a/app/workers/activitypub/update_distribution_worker.rb +++ b/app/workers/activitypub/update_distribution_worker.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ActivityPub::UpdateDistributionWorker < ActivityPub::RawDistributionWorker - sidekiq_options queue: 'push', lock: :until_executed + sidekiq_options queue: 'push', lock: :until_executed, lock_ttl: 1.day.to_i # Distribute an profile update to servers that might have a copy # of the account in question diff --git a/app/workers/admin/account_deletion_worker.rb b/app/workers/admin/account_deletion_worker.rb index 6e0eb331be..5dfdfb6e73 100644 --- a/app/workers/admin/account_deletion_worker.rb +++ b/app/workers/admin/account_deletion_worker.rb @@ -3,7 +3,7 @@ class Admin::AccountDeletionWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(account_id) DeleteAccountService.new.call(Account.find(account_id), reserve_username: true, reserve_email: true) diff --git a/app/workers/admin/domain_purge_worker.rb b/app/workers/admin/domain_purge_worker.rb index 095232a6d7..6c5250b660 100644 --- a/app/workers/admin/domain_purge_worker.rb +++ b/app/workers/admin/domain_purge_worker.rb @@ -3,7 +3,7 @@ class Admin::DomainPurgeWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.week.to_i def perform(domain) PurgeDomainService.new.call(domain) diff --git a/app/workers/publish_scheduled_status_worker.rb b/app/workers/publish_scheduled_status_worker.rb index ce42f7be7c..aa5c4a834a 100644 --- a/app/workers/publish_scheduled_status_worker.rb +++ b/app/workers/publish_scheduled_status_worker.rb @@ -3,7 +3,7 @@ class PublishScheduledStatusWorker include Sidekiq::Worker - sidekiq_options lock: :until_executed + sidekiq_options lock: :until_executed, lock_ttl: 1.hour.to_i def perform(scheduled_status_id) scheduled_status = ScheduledStatus.find(scheduled_status_id) diff --git a/app/workers/resolve_account_worker.rb b/app/workers/resolve_account_worker.rb index 2b5be6d1b2..4ae2442af5 100644 --- a/app/workers/resolve_account_worker.rb +++ b/app/workers/resolve_account_worker.rb @@ -3,7 +3,7 @@ class ResolveAccountWorker include Sidekiq::Worker - sidekiq_options queue: 'pull', lock: :until_executed + sidekiq_options queue: 'pull', lock: :until_executed, lock_ttl: 1.day.to_i def perform(uri) ResolveAccountService.new.call(uri) diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb index ff1b744442..5c985e25a0 100644 --- a/app/workers/scheduler/indexing_scheduler.rb +++ b/app/workers/scheduler/indexing_scheduler.rb @@ -5,7 +5,7 @@ class Scheduler::IndexingScheduler include Redisable include DatabaseHelper - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i IMPORT_BATCH_SIZE = 1000 SCAN_BATCH_SIZE = 10 * IMPORT_BATCH_SIZE diff --git a/app/workers/scheduler/scheduled_statuses_scheduler.rb b/app/workers/scheduler/scheduled_statuses_scheduler.rb index b5801248f2..fe60d5524e 100644 --- a/app/workers/scheduler/scheduled_statuses_scheduler.rb +++ b/app/workers/scheduler/scheduled_statuses_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::ScheduledStatusesScheduler include Sidekiq::Worker - sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.hour.to_i def perform publish_scheduled_statuses! diff --git a/app/workers/verify_account_links_worker.rb b/app/workers/verify_account_links_worker.rb index f606e6c26f..ad27f450b7 100644 --- a/app/workers/verify_account_links_worker.rb +++ b/app/workers/verify_account_links_worker.rb @@ -3,7 +3,7 @@ class VerifyAccountLinksWorker include Sidekiq::Worker - sidekiq_options queue: 'default', retry: false, lock: :until_executed + sidekiq_options queue: 'default', retry: false, lock: :until_executed, lock_ttl: 1.hour.to_i def perform(account_id) account = Account.find(account_id) From 7c6f41039d4e3709685cf644b2b9a1a147a0a3fc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:47:28 +0200 Subject: [PATCH 202/237] New Crowdin Translations (automated) (#27260) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/lv.json | 6 ++-- app/javascript/mastodon/locales/si.json | 35 ++++++++++------------ app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.hr.yml | 13 ++++++++ config/locales/hr.yml | 5 ++++ config/locales/simple_form.cy.yml | 5 ++++ 6 files changed, 42 insertions(+), 24 deletions(-) diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 3f2c74cbac..aab7b9a8fb 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderētie serveri", "about.contact": "Kontakts:", - "about.disclaimer": "Mastodon ir bezmaksas atvērtā koda programmatūra un Mastodon gGmbH preču zīme.", + "about.disclaimer": "Mastodon ir bezmaksas atklātā pirmkoda programmatūra un Mastodon gGmbH preču zīme.", "about.domain_blocks.no_reason_available": "Iemesls nav norādīts", "about.domain_blocks.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita federācijas servera. Šie ir izņēmumi, kas veikti šajā konkrētajā serverī.", "about.domain_blocks.silenced.explanation": "Parasti tu neredzēsi profilus un saturu no šī servera, ja vien tu nepārprotami izvēlēsies to pārskatīt vai sekot.", @@ -9,7 +9,7 @@ "about.domain_blocks.suspended.explanation": "Nekādi dati no šī servera netiks apstrādāti, uzglabāti vai apmainīti, padarot neiespējamu mijiedarbību vai saziņu ar lietotājiem no šī servera.", "about.domain_blocks.suspended.title": "Apturētie", "about.not_available": "Šī informācija šajā serverī nav bijusi pieejama.", - "about.powered_by": "Decentralizēto sociālo tīklu nodrošina {mastodon}", + "about.powered_by": "Decentralizētu sociālo tīklu nodrošina {mastodon}", "about.rules": "Servera noteikumi", "account.account_note_header": "Piezīme", "account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem", @@ -26,7 +26,7 @@ "account.domain_blocked": "Domēns ir bloķēts", "account.edit_profile": "Rediģēt profilu", "account.enable_notifications": "Paziņot man, kad @{name} publicē ierakstu", - "account.endorse": "Izcelt profilā", + "account.endorse": "Izcelts profilā", "account.featured_tags.last_status_at": "Beidzamā ziņa {date}", "account.featured_tags.last_status_never": "Ierakstu nav", "account.featured_tags.title": "{name} izceltie tēmturi", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 27c19adf8e..2c6979b018 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -100,7 +100,7 @@ "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", - "compose_form.publish_form": "Publish", + "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", @@ -160,7 +160,7 @@ "emoji_button.symbols": "සංකේත", "emoji_button.travel": "චාරිකා සහ ස්ථාන", "empty_column.account_suspended": "ගිණුම අත්හිටුවා ඇත", - "empty_column.account_timeline": "මෙහි දත් නැත!", + "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", @@ -240,7 +240,7 @@ "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", - "keyboard_shortcuts.toot": "අලුත්ම ටූට් එකක් පටන් ගන්න", + "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", "lightbox.close": "වසන්න", @@ -253,7 +253,7 @@ "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", "lists.delete": "ලේඛනය මකන්න", "lists.edit": "ලේඛනය සංස්කරණය", - "lists.edit.submit": "මාතෘකාව වෙනස් කරන්න", + "lists.edit.submit": "සිරැසිය සංශෝධනය", "lists.new.create": "ලැයිස්තුව එකතු කරන්න", "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", @@ -346,14 +346,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", - "picture_in_picture.restore": "ආපහු දාන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", - "poll.total_people": "{count, plural, one {# පුද්ගලයා} other {# මහජන}}", - "poll.total_votes": "{count, plural, one {# ඡන්දය} other {ඡන්ද #}}", "poll.vote": "ඡන්දය", - "poll.voted": "ඔබ මෙම පිළිතුරට ඡන්දය දුන්නා", - "poll.votes": "{votes, plural, one {# ඡන්දය} other {ඡන්ද #}}", + "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", "poll_button.add_poll": "මත විමසුමක් යොදන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", @@ -363,13 +359,10 @@ "privacy.private.short": "අනුගාමිකයින් පමණි", "privacy.public.long": "සැමට දිස්වෙයි", "privacy.public.short": "ප්‍රසිද්ධ", - "privacy.unlisted.long": "සැමට දෘශ්‍යමාන, නමුත් සොයාගැනීමේ විශේෂාංග වලින් ඉවත් විය", - "privacy.unlisted.short": "ලැයිස්තුගත නොකළ", + "privacy_policy.title": "රහස්‍යතා ප්‍රතිපත්තිය", "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", - "regeneration_indicator.sublabel": "ඔබේ නිවසේ පෝෂණය සූදානම් වෙමින් පවතී!", "relative_time.days": "ද. {number}", - "relative_time.full.days": "{number, plural, one {# දින} other {# දින}} පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -381,10 +374,9 @@ "relative_time.today": "අද", "reply_indicator.cancel": "අවලංගු කරන්න", "report.block": "අවහිර", - "report.block_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට හෝ ඔබව අනුගමනය කිරීමට නොහැකි වනු ඇත. ඔවුන් අවහිර කර ඇති බව ඔවුන්ට පැවසිය හැකිය.", "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", - "report.categories.violation": "අන්තර්ගතය සේවාදායක නීති එකක් හෝ කිහිපයක් උල්ලංඝනය කරයි", + "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", @@ -426,8 +418,12 @@ "search_results.all": "සියල්ල", "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", + "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", - "sign_in_banner.sign_in": "Sign in", + "search_results.title": "{q} සොයන්න", + "server_banner.learn_more": "තව දැනගන්න", + "sign_in_banner.create_account": "ගිණුමක් සාදන්න", + "sign_in_banner.sign_in": "පිවිසෙන්න", "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", "status.block": "@{name} අවහිර", @@ -455,12 +451,11 @@ "status.read_more": "තව කියවන්න", "status.reblog": "බූස්ට් කරන්න", "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogged_by": "{name} වැඩි කරන ලදී", "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", - "status.replyAll": "ත්‍රෙඩ් එකට පිළිතුරු දෙන්න", + "status.replyAll": "නූලට පිළිතුරු දෙන්න", "status.report": "@{name} වාර්තාව", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", @@ -508,10 +503,10 @@ "upload_modal.description_placeholder": "කඩිසර දුඹුරු හිවලෙක් කම්මැලි බල්ලා මතින් පනී", "upload_modal.detect_text": "රූපයෙහි පෙළ අනාවරණය", "upload_modal.edit_media": "මාධ්‍ය සංස්කරණය", - "upload_modal.hint": "සියලුම සිඟිති රූ මත සැම විටම දර්ශනය වන නාභි ලක්ෂ්‍යය තේරීමට පෙරදසුනෙහි රවුම ක්ලික් කරන්න හෝ අදින්න.", - "upload_modal.preparing_ocr": "OCR…සූදානම් කරමින්", + "upload_modal.preparing_ocr": "OCR සඳහා සැරසෙමින්…", "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", + "upload_progress.processing": "සැකසෙමින්…", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index a6694b21df..8b5f7de2f3 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -373,7 +373,7 @@ "lightbox.previous": "上一步", "limited_account_hint.action": "一律顯示個人檔案", "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", - "link_preview.author": "按照 {name}", + "link_preview.author": "由 {name} 提供", "lists.account.add": "新增至列表", "lists.account.remove": "從列表中移除", "lists.delete": "刪除列表", diff --git a/config/locales/activerecord.hr.yml b/config/locales/activerecord.hr.yml index 98ca8155fd..b095244dd6 100644 --- a/config/locales/activerecord.hr.yml +++ b/config/locales/activerecord.hr.yml @@ -5,3 +5,16 @@ hr: poll: expires_at: Krajnji rok options: Opcije + user: + email: E-mail adresa + password: Lozinka + user/account: + username: Korisničko ime + user/invite_request: + text: Razlog + errors: + models: + account: + attributes: + username: + invalid: mora sadržavati samo slova, brojeve i _ diff --git a/config/locales/hr.yml b/config/locales/hr.yml index d1e6728d42..aa7ee760ba 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -27,12 +27,17 @@ hr: new_email: Nova e-pošta submit: Promijeni e-poštu title: Promjena e-pošte za %{username} + change_role: + changed_msg: Uloga uspješno dodijeljena! + label: Promjeni ulogu confirm: Potvrdi confirmed: Potvrđeno confirming: Potvrđivanje custom: Prilagođeno delete: Izbriši podatke deleted: Izbrisano + disable: Zamrzni + disable_two_factor_authentication: Onemogući 2FA display_name: Prikazano ime domain: Domena edit: Uredi diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 70194a1e0c..ddc1b1b935 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -292,7 +292,11 @@ cy: reblog: Mae rhywun wedi hybu eich postiad report: Cyflwynwyd adroddiad newydd software_updates: + all: Rhoi gwybod am bob ddiweddariad + critical: Rhoi gwybod am ddiweddariadau critigol yn unig label: Mae fersiwn Mastodon newydd ar gael + none: Byth rhoi gwybod am ddiweddariadau (nid argymhellir) + patch: Rhoi gwybod am ddiweddariadau trwsio byg trending_tag: Mae pwnc llosg newydd angen adolygiad rule: text: Rheol @@ -319,6 +323,7 @@ cy: url: URL diweddbwynt 'no': Na not_recommended: Heb ei argymell + overridden: Wedi'i gwrth-wneud recommended: Argymhellwyd required: mark: "*" From 16dcdfcb4efc75e89ccff4dc3fa5a271a1fbf1f9 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Tue, 3 Oct 2023 10:47:50 +0200 Subject: [PATCH 203/237] Fix importer returning negative row estimates (#27258) --- app/lib/importer/base_importer.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/lib/importer/base_importer.rb b/app/lib/importer/base_importer.rb index a21557d303..7688426b48 100644 --- a/app/lib/importer/base_importer.rb +++ b/app/lib/importer/base_importer.rb @@ -34,7 +34,9 @@ class Importer::BaseImporter # Estimate the amount of documents that would be indexed. Not exact! # @returns [Integer] def estimate! - ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples AS estimate FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['estimate'].to_i } + reltuples = ActiveRecord::Base.connection_pool.with_connection { |connection| connection.select_one("SELECT reltuples FROM pg_class WHERE relname = '#{index.adapter.target.table_name}'")['reltuples'].to_i } + # If the table has never yet been vacuumed or analyzed, reltuples contains -1 + [reltuples, 0].max end # Import data from the database into the index From 82502f54ac941b6cf239dd9fa92f26ed4fa538c8 Mon Sep 17 00:00:00 2001 From: David Aaron <1858430+suddjian@users.noreply.github.com> Date: Tue, 3 Oct 2023 02:48:57 -0700 Subject: [PATCH 204/237] Change min age of backup policy from 1 week to 6 days (#27200) --- app/policies/backup_policy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/policies/backup_policy.rb b/app/policies/backup_policy.rb index 0ef89a8d0c..86b8efbe96 100644 --- a/app/policies/backup_policy.rb +++ b/app/policies/backup_policy.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class BackupPolicy < ApplicationPolicy - MIN_AGE = 1.week + MIN_AGE = 6.days def create? user_signed_in? && current_user.backups.where('created_at >= ?', MIN_AGE.ago).count.zero? From aa4c4f5737289ebfbaa67e7369d28d140e84e624 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 3 Oct 2023 04:52:21 -0500 Subject: [PATCH 205/237] Keep version string displayed without breakpoints in UI (#26986) --- .../mastodon/features/ui/components/link_footer.jsx | 2 +- app/javascript/styles/mastodon/components.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/link_footer.jsx b/app/javascript/mastodon/features/ui/components/link_footer.jsx index 7aaa887ac6..9585df2ec4 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.jsx +++ b/app/javascript/mastodon/features/ui/components/link_footer.jsx @@ -100,7 +100,7 @@ class LinkFooter extends PureComponent { {DividingCircle} {DividingCircle} - v{version} + v{version}

); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 58bc430ce2..41436a92f9 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -9008,6 +9008,10 @@ noscript { color: $dark-text-color; margin-bottom: 20px; + .version { + white-space: nowrap; + } + strong { font-weight: 500; } From 451884a36b3d24134f40db260b4c00dd1cf82826 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:32 +0200 Subject: [PATCH 206/237] Add a short-lived lock to trend refresh scheduler (#27253) --- app/workers/scheduler/trends/refresh_scheduler.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/workers/scheduler/trends/refresh_scheduler.rb b/app/workers/scheduler/trends/refresh_scheduler.rb index b559ba46b4..85c000deea 100644 --- a/app/workers/scheduler/trends/refresh_scheduler.rb +++ b/app/workers/scheduler/trends/refresh_scheduler.rb @@ -3,7 +3,7 @@ class Scheduler::Trends::RefreshScheduler include Sidekiq::Worker - sidekiq_options retry: 0 + sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 30.minutes.to_i def perform Trends.refresh! From 0619ec1592dd97aa7aee9375a287c99c7882132a Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 12:21:42 +0200 Subject: [PATCH 207/237] Fix boosts of local users being filtered in account timelines (#27204) --- app/lib/account_statuses_filter.rb | 6 +++++- .../account_statuses_filter_spec.rb | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) rename spec/{models => lib}/account_statuses_filter_spec.rb (91%) diff --git a/app/lib/account_statuses_filter.rb b/app/lib/account_statuses_filter.rb index a5aca96601..b34ebb4777 100644 --- a/app/lib/account_statuses_filter.rb +++ b/app/lib/account_statuses_filter.rb @@ -60,8 +60,12 @@ class AccountStatusesFilter .where(reblog_of_id: nil) .or( scope + # This is basically `Status.not_domain_blocked_by_account(current_account)` + # and `Status.not_excluded_by_account(current_account)` but on the + # `reblog` association. Unfortunately, there seem to be no clean way + # to re-use those scopes in our case. + .where(reblog: { accounts: { domain: nil } }).or(scope.where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } })) .where.not(reblog: { account_id: current_account.excluded_from_timeline_account_ids }) - .where.not(reblog: { accounts: { domain: current_account.excluded_from_timeline_domains } }) ) end diff --git a/spec/models/account_statuses_filter_spec.rb b/spec/lib/account_statuses_filter_spec.rb similarity index 91% rename from spec/models/account_statuses_filter_spec.rb rename to spec/lib/account_statuses_filter_spec.rb index 0cf6453fe3..c821eb4bac 100644 --- a/spec/models/account_statuses_filter_spec.rb +++ b/spec/lib/account_statuses_filter_spec.rb @@ -202,7 +202,7 @@ RSpec.describe AccountStatusesFilter do context 'when blocking a reblogged domain' do let(:other_account) { Fabricate(:account, domain: 'example.com') } let(:reblogging_status) { Fabricate(:status, account: other_account) } - let(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } before do current_account.block_domain!(other_account.domain) @@ -213,6 +213,20 @@ RSpec.describe AccountStatusesFilter do end end + context 'when blocking an unrelated domain' do + let(:other_account) { Fabricate(:account, domain: nil) } + let(:reblogging_status) { Fabricate(:status, account: other_account, visibility: 'public') } + let!(:reblog) { Fabricate(:status, account: account, visibility: 'public', reblog: reblogging_status) } + + before do + current_account.block_domain!('example.com') + end + + it 'returns the reblog from the non-blocked domain' do + expect(subject.results.pluck(:id)).to include(reblog.id) + end + end + context 'when muting a reblogged account' do let(:reblog) { status_with_reblog!('public') } From 3e21780cf16944e9903d6234e58f711df69a4e1d Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 13:12:39 +0200 Subject: [PATCH 208/237] Fix double scroll bars in some columns in advanced interface (#27187) --- app/javascript/mastodon/components/column.jsx | 6 -- .../mastodon/features/explore/index.jsx | 72 +++++++++---------- .../mastodon/features/explore/links.jsx | 2 +- .../mastodon/features/explore/results.jsx | 2 +- .../mastodon/features/explore/suggestions.jsx | 2 +- .../mastodon/features/explore/tags.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 42 ++++++----- .../styles/mastodon/components.scss | 3 + 8 files changed, 62 insertions(+), 69 deletions(-) diff --git a/app/javascript/mastodon/components/column.jsx b/app/javascript/mastodon/components/column.jsx index d737bd347c..cf9df3ba27 100644 --- a/app/javascript/mastodon/components/column.jsx +++ b/app/javascript/mastodon/components/column.jsx @@ -22,12 +22,6 @@ export default class Column extends PureComponent { scrollable = document.scrollingElement; } else { scrollable = this.node.querySelector('.scrollable'); - - // Some columns have nested `.scrollable` containers, with the outer one - // being a wrapper while the actual scrollable content is deeper. - if (scrollable.classList.contains('scrollable--flex')) { - scrollable = scrollable?.querySelector('.scrollable') || scrollable; - } } if (!scrollable) { diff --git a/app/javascript/mastodon/features/explore/index.jsx b/app/javascript/mastodon/features/explore/index.jsx index 1a66adc87c..fefdc23fab 100644 --- a/app/javascript/mastodon/features/explore/index.jsx +++ b/app/javascript/mastodon/features/explore/index.jsx @@ -67,47 +67,45 @@ class Explore extends PureComponent {
-
- {isSearching ? ( - - ) : ( - <> -
- - + {isSearching ? ( + + ) : ( + <> +
+ + + + + + + + + {signedIn && ( + + + )} - - - + + + +
- {signedIn && ( - - - - )} + + + + + + + + - - - -
- - - - - - - - - - - - {intl.formatMessage(messages.title)} - - - - )} -
+ + {intl.formatMessage(messages.title)} + + + + )} ); } diff --git a/app/javascript/mastodon/features/explore/links.jsx b/app/javascript/mastodon/features/explore/links.jsx index 663aa6d80f..e610c84d41 100644 --- a/app/javascript/mastodon/features/explore/links.jsx +++ b/app/javascript/mastodon/features/explore/links.jsx @@ -52,7 +52,7 @@ class Links extends PureComponent { } return ( -
+
{banner} {isLoading ? () : links.map((link, i) => ( diff --git a/app/javascript/mastodon/features/explore/results.jsx b/app/javascript/mastodon/features/explore/results.jsx index c6fe9b78e0..4c23d6422d 100644 --- a/app/javascript/mastodon/features/explore/results.jsx +++ b/app/javascript/mastodon/features/explore/results.jsx @@ -204,7 +204,7 @@ class Results extends PureComponent {
-
+
+
{isLoading ? : suggestions.map(suggestion => ( ))} diff --git a/app/javascript/mastodon/features/explore/tags.jsx b/app/javascript/mastodon/features/explore/tags.jsx index 1a4d259690..11e0147214 100644 --- a/app/javascript/mastodon/features/explore/tags.jsx +++ b/app/javascript/mastodon/features/explore/tags.jsx @@ -51,7 +51,7 @@ class Tags extends PureComponent { } return ( -
+
{banner} {isLoading ? () : hashtags.map(hashtag => ( diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index e5b47d3fe0..efde58a5c0 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -169,32 +169,30 @@ const Firehose = ({ feedType, multiColumn }) => { -
-
- - - +
+ + + - - - + + + - - - -
- - + + +
+ + {intl.formatMessage(messages.title)} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 41436a92f9..567397a07b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8278,6 +8278,9 @@ noscript { flex: 1 1 auto; display: flex; flex-direction: column; + background: $ui-base-color; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } .story { From a9588065b208fbda9f6d239658b657e79c151534 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 3 Oct 2023 11:01:45 -0400 Subject: [PATCH 209/237] Dont match mention in url query string (#25656) Co-authored-by: Claire --- .rubocop_todo.yml | 4 ---- app/models/account.rb | 2 +- spec/models/account_spec.rb | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index adfd476892..631b9b5669 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -289,10 +289,6 @@ RSpec/MultipleMemoizedHelpers: RSpec/NestedGroups: Max: 6 -RSpec/PendingWithoutReason: - Exclude: - - 'spec/models/account_spec.rb' - # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationController: Exclude: diff --git a/app/models/account.rb b/app/models/account.rb index cdb701edbc..a25ebc4aaf 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -66,7 +66,7 @@ class Account < ApplicationRecord BACKGROUND_REFRESH_INTERVAL = 1.week.freeze USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i - MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i + MENTION_RE = %r{(? Date: Thu, 5 Oct 2023 09:50:08 +0200 Subject: [PATCH 210/237] Fix Vary headers not being set on some redirects (#27272) --- app/controllers/concerns/web_app_controller_concern.rb | 10 ++++++---- app/controllers/follower_accounts_controller.rb | 1 - app/controllers/following_accounts_controller.rb | 1 - spec/requests/cache_spec.rb | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index 273d7344ca..5687d6e5b6 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -4,10 +4,10 @@ module WebAppControllerConcern extend ActiveSupport::Concern included do - prepend_before_action :redirect_unauthenticated_to_permalinks! - before_action :set_app_body_class - vary_by 'Accept, Accept-Language, Cookie' + + before_action :redirect_unauthenticated_to_permalinks! + before_action :set_app_body_class end def skip_csrf_meta_tags? @@ -22,7 +22,9 @@ module WebAppControllerConcern return if user_signed_in? && current_account.moved_to_account_id.nil? redirect_path = PermalinkRedirector.new(request.path).redirect_path + return if redirect_path.blank? - redirect_to(redirect_path) if redirect_path.present? + expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in? + redirect_to(redirect_path) end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index ffdbd01802..5effd9495e 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index cce296f9fd..268fad96d0 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -3,7 +3,6 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern include SignatureVerification - include WebAppControllerConcern vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' } diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index 178d19ed0d..c391c8b3da 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -30,6 +30,7 @@ module TestEndpoints /directory /@alice /@alice/110224538612341312 + /deck/home ).freeze # Endpoints that should be cachable when accessed anonymously but have a Vary From aba0c5abd9556f168d8c27b110877c9d9c84ba92 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 10:53:04 +0200 Subject: [PATCH 211/237] New Crowdin Translations (automated) (#27270) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/si.json | 290 ++++++------- config/locales/devise.si.yml | 18 +- config/locales/doorkeeper.si.yml | 72 ++-- config/locales/eu.yml | 3 + config/locales/si.yml | 524 +++++++++++++----------- config/locales/simple_form.si.yml | 88 ++-- 6 files changed, 511 insertions(+), 484 deletions(-) diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2c6979b018..4d116bfd31 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,79 +1,77 @@ { + "about.blocks": "මැදිහත්කරණ සේවාදායක", + "about.contact": "සබඳතාව:", + "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", + "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", - "account.badges.bot": "ස්වයං ක්‍රමලේඛය", "account.badges.group": "සමූහය", "account.block": "@{name} අවහිර කරන්න", "account.block_domain": "{domain} වසම අවහිර කරන්න", + "account.block_short": "අවහිර", "account.blocked": "අවහිර කර ඇත", "account.browse_more_on_origin_server": "මුල් පැතිකඩෙහි තවත් පිරික්සන්න", - "account.cancel_follow_request": "Withdraw follow request", "account.disable_notifications": "@{name} පළ කරන විට මට දැනුම් නොදෙන්න", "account.domain_blocked": "වසම අවහිර කර ඇත", "account.edit_profile": "පැතිකඩ සංස්කරණය", "account.enable_notifications": "@{name} පළ කරන විට මට දැනුම් දෙන්න", "account.endorse": "පැතිකඩෙහි විශේෂාංගය", + "account.featured_tags.last_status_never": "ලිපි නැත", "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.", - "account.followers_counter": "{count, plural, one {{counter} අනුගාමිකයෙක්} other {{counter} අනුගාමිකයින්}}", "account.following": "අනුගමනය", "account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", - "account.hide_reblogs": "@{name}සිට බූස්ට් සඟවන්න", + "account.go_to_profile": "පැතිකඩට යන්න", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", - "account.locked_info": "මෙම ගිණුමේ රහස්‍යතා තත්ත්වය අගුලු දමා ඇත. හිමිකරු ඔවුන් අනුගමනය කළ හැක්කේ කාටදැයි හස්තීයව සමාලෝචනය කරයි.", "account.media": "මාධ්‍යය", - "account.mention": "@{name} සැඳහුම", + "account.mention": "@{name} සඳහන් කරන්ක", "account.mute": "@{name} නිහඬ කරන්න", + "account.mute_short": "නිහඬ", "account.muted": "නිහඬ කළා", "account.posts": "ලිපි", - "account.posts_with_replies": "ටූට්ස් සහ පිළිතුරු", + "account.posts_with_replies": "ලිපි සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", - "account.requested": "අනුමැතිය බලාපොරොත්තුවෙන්", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", - "account.show_reblogs": "@{name}සිට බූස්ට් පෙන්වන්න", - "account.statuses_counter": "{count, plural, one {{counter} ටූට්} other {{counter} ටූට්ස්}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", "account.unblock_short": "අනවහිර", "account.unendorse": "පැතිකඩෙහි විශේෂාංග නොකරන්න", - "account.unfollow": "අනුගමනය නොකරන්න", - "account.unmute": "@{name}නිහඬ නොකරන්න", "account.unmute_short": "නොනිහඬ", "account_note.placeholder": "සටහන යෙදීමට ඔබන්න", - "admin.dashboard.daily_retention": "ලියාපදිංචි වීමෙන් පසු දිනකට පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.monthly_retention": "ලියාපදිංචි වීමෙන් පසු මාසය අනුව පරිශීලක රඳවා ගැනීමේ අනුපාතය", - "admin.dashboard.retention.average": "සාමාන්යය", - "admin.dashboard.retention.cohort": "ලියාපදිංචි වීමේ මාසය", + "admin.dashboard.retention.cohort": "ලියාපදිංචි මාසය", "admin.dashboard.retention.cohort_size": "නව පරිශ්‍රීලකයින්", "alert.rate_limited.message": "{retry_time, time, medium} කට පසුව උත්සාහ කරන්න.", - "alert.rate_limited.title": "මිල සීමා සහිතයි", - "alert.unexpected.message": "අනපේක්ෂිත දෝෂයක් ඇතිවුනා.", + "alert.rate_limited.title": "අනුපාතනය වී ඇත", + "alert.unexpected.message": "අනපේක්‍ෂිත දෝෂයක් සිදු විය.", "alert.unexpected.title": "අපොයි!", "announcement.announcement": "නිවේදනය", - "attachments_list.unprocessed": "(සැකසුම් නොකළ)", "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", - "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට ඔබට {combo} එබිය හැක", + "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", "bundle_modal_error.close": "වසන්න", - "bundle_modal_error.message": "මෙම සංරචකය පූරණය කිරීමේදී යම් දෙයක් වැරදී ඇත.", + "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", + "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක", "column.about": "පිලිබඳව", "column.blocks": "අවහිර කළ අය", - "column.bookmarks": "පොත් යොමු", - "column.community": "දේශීය කාලරේඛාව", + "column.bookmarks": "පොත්යොමු", + "column.community": "ස්ථානීය කාලරේඛාව", + "column.direct": "පෞද්ගලික සැඳහුම්", "column.directory": "පැතිකඩ පිරික්සන්න", "column.domain_blocks": "අවහිර කළ වසම්", + "column.favourites": "ප්‍රියතමයන්", + "column.firehose": "සජීව සංග්‍රහ", "column.follow_requests": "අනුගමන ඉල්ලීම්", "column.home": "මුල් පිටුව", - "column.lists": "ලේඛන", + "column.lists": "ලැයිස්තු", "column.mutes": "නිහඬ කළ අය", "column.notifications": "දැනුම්දීම්", "column.pins": "ඇමිණූ ලිපි", - "column.public": "ෆෙඩරේටඩ් කාලරේඛාව", + "column.public": "ඒකාබද්ධ කාලරේඛාව", "column_back_button.label": "ආපසු", "column_header.hide_settings": "සැකසුම් සඟවන්න", "column_header.moveLeft_settings": "තීරුව වමට ගෙනයන්න", @@ -87,70 +85,60 @@ "community.column_settings.remote_only": "දුරස්ථව පමණයි", "compose.language.change": "භාෂාව සංශෝධනය", "compose.language.search": "භාෂා සොයන්න...", + "compose.published.body": "ලිපිය පළ විය.", + "compose.published.open": "අරින්න", + "compose.saved.body": "ලිපිය සුරැකිණි.", "compose_form.direct_message_warning_learn_more": "තව දැනගන්න", - "compose_form.encryption_warning": "Mastodon හි පළ කිරීම් අන්තයේ සිට අවසානය දක්වා සංකේතනය කර නොමැත. Mastodon හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", - "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", - "compose_form.lock_disclaimer": "ඔබගේ ගිණුම {locked}නොවේ. ඔබගේ අනුගාමිකයින්ට පමණක් පළ කිරීම් බැලීමට ඕනෑම කෙනෙකුට ඔබව අනුගමනය කළ හැක.", + "compose_form.encryption_warning": "මාස්ටඩන් වෙත පළ කරන දෑ අන්ත සංකේතනයෙන් ආරක්‍ෂා නොවේ. මාස්ටඩන් හරහා කිසිදු සංවේදී තොරතුරක් බෙදා නොගන්න.", "compose_form.lock_disclaimer.lock": "අගුළු දමා ඇත", "compose_form.placeholder": "ඔබගේ සිතුවිලි මොනවාද?", "compose_form.poll.add_option": "තේරීමක් යොදන්න", "compose_form.poll.duration": "මත විමසීමේ කාලය", "compose_form.poll.option_placeholder": "තේරීම {number}", "compose_form.poll.remove_option": "මෙම ඉවත් කරන්න", - "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයක් ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", - "compose_form.poll.switch_to_single": "තනි තේරීමකට ඉඩ දීම සඳහා මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_multiple": "තේරීම් කිහිපයකට මත විමසුම වෙනස් කරන්න", + "compose_form.poll.switch_to_single": "තනි තේරීමකට මත විමසුම වෙනස් කරන්න", "compose_form.publish": "ප්‍රකාශනය", "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", - "compose_form.sensitive.hide": "{count, plural, one {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න} other {මාධ්ය සංවේදී ලෙස සලකුණු කරන්න}}", - "compose_form.sensitive.marked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත}}", - "compose_form.sensitive.unmarked": "{count, plural, one {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත} other {මාධ්‍ය සංවේදී ලෙස සලකුණු කර නැත}}", - "compose_form.spoiler.marked": "අනතුරු ඇඟවීම පිටුපස පෙළ සඟවා ඇත", - "compose_form.spoiler.unmarked": "ප්‍රයෝජනය සඟවා නැත", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", "confirmations.block.confirm": "අවහිර", "confirmations.block.message": "ඔබට {name} අවහිර කිරීමට වුවමනා ද?", "confirmations.delete.confirm": "මකන්න", - "confirmations.delete.message": "ඔබට මෙම තත්ත්වය මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete.message": "ඔබට මෙම ලිපිය මැකීමට වුවමනා ද?", "confirmations.delete_list.confirm": "මකන්න", - "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?", + "confirmations.delete_list.message": "ඔබට මෙම ලැයිස්තුව සදහටම මැකීමට වුවමනා ද?", "confirmations.discard_edit_media.confirm": "ඉවත ලන්න", "confirmations.discard_edit_media.message": "ඔබට මාධ්‍ය විස්තරයට හෝ පෙරදසුනට නොසුරකින ලද වෙනස්කම් තිබේ, කෙසේ වෙතත් ඒවා ඉවත දමන්නද?", "confirmations.domain_block.confirm": "සම්පූර්ණ වසම අවහිර කරන්න", - "confirmations.domain_block.message": "ඔබට සම්පූර්ණ {domain}අවහිර කිරීමට අවශ්‍ය බව ඔබට සැබවින්ම විශ්වාසද? බොහෝ අවස්ථාවලදී ඉලක්කගත බ්ලොක් හෝ නිශ්ශබ්ද කිරීම් කිහිපයක් ප්රමාණවත් වන අතර වඩාත් යෝග්ය වේ. ඔබ කිසිදු පොදු කාලරාමුවක හෝ ඔබගේ දැනුම්දීම් වල එම වසමේ අන්තර්ගතය නොදකිනු ඇත. එම වසමෙන් ඔබගේ අනුගාමිකයින් ඉවත් කරනු ලැබේ.", + "confirmations.edit.confirm": "සංස්කරණය", "confirmations.logout.confirm": "නික්මෙන්න", "confirmations.logout.message": "ඔබට නික්මෙන්න අවශ්‍ය බව විශ්වාසද?", "confirmations.mute.confirm": "නිශ්ශබ්ද", - "confirmations.mute.explanation": "මෙය ඔවුන්ගෙන් පළ කිරීම් සහ ඒවා සඳහන් කරන පළ කිරීම් සඟවයි, නමුත් එය ඔවුන්ට ඔබේ පළ කිරීම් බැලීමට සහ ඔබව අනුගමනය කිරීමට තවමත් ඉඩ ලබා දේ.", - "confirmations.mute.message": "ඔබට {name} නිශ්ශබ්ද කිරීමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.redraft.confirm": "මකන්න සහ නැවත කෙටුම්පත් කරන්න", + "confirmations.mute.message": "{name} නිහඬ කිරීමට වුවමනා ද?", "confirmations.reply.confirm": "පිළිතුර", - "confirmations.reply.message": "දැන් පිළිතුරු දීම ඔබ දැනට රචනා කරන පණිවිඩය උඩින් ලියයි. ඔබට ඉදිරියට යාමට අවශ්‍ය බව විශ්වාසද?", - "confirmations.unfollow.confirm": "අනුගමනය නොකරන්න", - "confirmations.unfollow.message": "ඔබට {name}අනුගමනය නොකිරීමට අවශ්‍ය බව විශ්වාසද?", "conversation.delete": "සංවාදය මකන්න", "conversation.mark_as_read": "කියවූ බව යොදන්න", "conversation.open": "සංවාදය බලන්න", "conversation.with": "{names} සමඟ", "copypaste.copied": "පිටපත් විය", - "directory.federated": "දන්නා fediverse වලින්", + "copypaste.copy_to_clipboard": "පසුරුපුවරුවට පිටපතක්", + "directory.federated": "දන්නා ෆෙඩිවර්ස් වෙතින්", "directory.local": "{domain} වෙතින් පමණි", "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", - "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", - "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", + "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", - "embed.preview": "එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:", + "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", "emoji_button.custom": "අභිරුචි", - "emoji_button.flags": "කොඩි", "emoji_button.food": "ආහාර සහ පාන", "emoji_button.label": "ඉමොජි යොදන්න", - "emoji_button.nature": "ස්වභාවික", + "emoji_button.nature": "සොබාදහම", "emoji_button.not_found": "ගැළපෙන ඉමෝජි හමු නොවිණි", "emoji_button.objects": "වස්තූන්", "emoji_button.people": "මිනිසුන්", @@ -164,154 +152,145 @@ "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.community": "දේශීය කාලරේඛාව හිස් ය. පන්දුව පෙරළීමට ප්‍රසිද්ධියේ යමක් ලියන්න!", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", - "empty_column.follow_requests": "ඔබට තවමත් අනුගමනය කිරීමේ ඉල්ලීම් කිසිවක් නොමැත. ඔබට එකක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.hashtag": "මෙම හැෂ් ටැග් එකේ තවම කිසිවක් නොමැත.", - "empty_column.home": "ඔබගේ නිවසේ කාලරේඛාව හිස්ය! එය පිරවීම සඳහා තවත් පුද්ගලයින් අනුගමනය කරන්න. {suggestions}", - "empty_column.list": "මෙම ලැයිස්තුවේ තවමත් කිසිවක් නොමැත. මෙම ලැයිස්තුවේ සාමාජිකයන් නව තත්ව පළ කරන විට, ඔවුන් මෙහි දිස් වනු ඇත.", + "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", - "empty_column.notifications": "ඔබට තවම දැනුම්දීම් කිසිවක් නැත. වෙනත් පුද්ගලයින් ඔබ සමඟ අන්තර් ක්‍රියා කරන විට, ඔබ එය මෙහි දකිනු ඇත.", - "empty_column.public": "මෙහි කිසිවක් නැත! යමක් ප්‍රසිද්ධියේ ලියන්න, නැතහොත් එය පිරවීම සඳහා වෙනත් සේවාදායකයන්ගෙන් පරිශීලකයන් හස්තීයව අනුගමනය කරන්න", + "empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.", "error.unexpected_crash.explanation": "අපගේ කේතයේ දෝෂයක් හෝ බ්‍රවුසර ගැළපුම් ගැටලුවක් හේතුවෙන්, මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක.", "error.unexpected_crash.explanation_addons": "මෙම පිටුව නිවැරදිව ප්‍රදර්ශනය කළ නොහැක. මෙම දෝෂය බ්‍රවුසර ඇඩෝනයක් හෝ ස්වයංක්‍රීය පරිවර්තන මෙවලම් නිසා ඇති විය හැක.", - "error.unexpected_crash.next_steps": "පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "error.unexpected_crash.next_steps_addons": "ඒවා අක්‍රිය කර පිටුව නැවුම් කිරීමට උත්සාහ කරන්න. එය උදව් නොකළහොත්, ඔබට තවමත් වෙනත් බ්‍රවුසරයක් හෝ ස්වදේශීය යෙදුමක් හරහා Mastodon භාවිත කිරීමට හැකි වේ.", - "errors.unexpected_crash.copy_stacktrace": "ස්ටැක්ට්රේස් පසුරු පුවරුවට පිටපත් කරන්න", + "error.unexpected_crash.next_steps": "පිටුව නැවුම් කර බලන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", + "error.unexpected_crash.next_steps_addons": "ඒවා අබල කර පිටුව නැවුම් කරන්න. එයින් ඵලක් නොවේ නම්, වෙනත් අතිරික්සුවක් හෝ නිසග යෙදුමක් හරහා මාස්ටඩන් භාවිතා කරන්න.", "errors.unexpected_crash.report_issue": "ගැටළුව වාර්තාව", "explore.search_results": "සෙවුම් ප්‍රතිඵල", - "explore.title": "ගවේශණය", + "explore.suggested_follows": "පුද්ගලයින්", + "explore.title": "ගවේශනය", + "explore.trending_links": "පුවත්", + "explore.trending_statuses": "ලිපි", "filter_modal.added.expired_title": "පෙරහන ඉකුත්ය!", "filter_modal.added.review_and_configure_title": "පෙරහන් සැකසුම්", "filter_modal.added.settings_link": "සැකසුම් පිටුව", + "filter_modal.added.title": "පෙරහන එක් කළා!", "filter_modal.select_filter.expired": "ඉකුත්ය", "filter_modal.select_filter.prompt_new": "නව ප්‍රවර්ගය: {name}", "filter_modal.select_filter.search": "සොයන්න හෝ සාදන්න", - "follow_request.authorize": "අවසරලත්", + "filter_modal.select_filter.title": "මෙම ලිපිය පෙරන්න", + "filter_modal.title.status": "ලිපියක් පෙරන්න", + "firehose.local": "මෙම සේවාදායකය", + "firehose.remote": "වෙනත් සේවාදායක", "follow_request.reject": "ප්‍රතික්‍ෂේප", - "follow_requests.unlocked_explanation": "ඔබගේ ගිණුම අගුලු දමා නොතිබුණද, {domain} කාර්ය මණ්ඩලය සිතුවේ ඔබට මෙම ගිණුම් වලින් ලැබෙන ඉල්ලීම් හස්තීයව සමාලෝචනය කිරීමට අවශ්‍ය විය හැකි බවයි.", + "footer.about": "පිළිබඳව", + "footer.directory": "පැතිකඩ නාමාවලිය", + "footer.get_app": "යෙදුම ගන්න", + "footer.invite": "ආරාධනා කරන්න", + "footer.keyboard_shortcuts": "යතුරුපුවරුවේ කෙටිමං", + "footer.privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය", + "footer.source_code": "මූලාශ්‍ර කේතය බලන්න", + "footer.status": "තත්‍වය", "generic.saved": "සුරැකිණි", "getting_started.heading": "පටන් ගන්න", "hashtag.column_header.tag_mode.all": "සහ {additional}", "hashtag.column_header.tag_mode.any": "හෝ {additional}", - "hashtag.column_header.tag_mode.none": "{additional}නොමැතිව", "hashtag.column_settings.select.no_options_message": "යෝජනා හමු නොවිණි", - "hashtag.column_settings.select.placeholder": "හැෂ් ටැග්…ඇතුලත් කරන්න", "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", - "hashtag.column_settings.tag_mode.any": "ඇතුළත් එකක්", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", + "home.actions.go_to_explore": "නැගී එන දෑ බලන්න", + "home.actions.go_to_suggestions": "පුද්ගලයින් සොයන්න", "home.column_settings.basic": "මූලික", - "home.column_settings.show_reblogs": "බූස්ට් පෙන්වන්න", "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", + "home.explore_prompt.title": "මෙය ඔබගේ මාස්ටඩන් මුල් පිටුවයි.", "home.hide_announcements": "නිවේදන සඟවන්න", + "home.pending_critical_update.link": "යාවත්කාල බලන්න", "home.show_announcements": "නිවේදන පෙන්වන්න", - "intervals.full.days": "{number, plural, one {# දින} other {# දින}}", - "intervals.full.hours": "{number, plural, one {# පැය} other {# පැය}}", - "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}}", + "interaction_modal.on_this_server": "මෙම සේවාදායකයෙහි", + "intervals.full.days": "{number, plural, one {දවස් #} other {දවස් #}}", + "intervals.full.hours": "{number, plural, one {පැය #} other {පැය #}}", + "intervals.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}}", "keyboard_shortcuts.back": "ආපසු යාත්‍රණය", - "keyboard_shortcuts.blocked": "අවහිර කළ පරිශීලක ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.boost": "වැඩි කිරීමට", - "keyboard_shortcuts.column": "එක් තීරුවක තත්ත්වය නාභිගත කිරීමට", - "keyboard_shortcuts.compose": "රචනා පාඨ ප්‍රදේශය නාභිගත කිරීමට", "keyboard_shortcuts.description": "සවිස්තරය", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගමන් කිරීමට", + "keyboard_shortcuts.down": "ලැයිස්තුවේ පහළට ගෙනයන්න", "keyboard_shortcuts.enter": "ලිපිය අරින්න", + "keyboard_shortcuts.favourites": "ප්‍රියතමයන් ලැයිස්තුව අරින්න", "keyboard_shortcuts.federated": "ෆෙඩරේටඩ් කාලරාමුව විවෘත කිරීමට", "keyboard_shortcuts.heading": "යතුරුපුවරු කෙටිමං", - "keyboard_shortcuts.home": "නිවසේ කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.hotkey": "උණු යතුර", - "keyboard_shortcuts.legend": "මෙම පුරාවෘත්තය ප්රදර්ශනය කිරීමට", "keyboard_shortcuts.local": "දේශීය කාලරේඛාව විවෘත කිරීමට", "keyboard_shortcuts.mention": "කතුවරයා සඳහන් කිරීමට", - "keyboard_shortcuts.muted": "නිශ්ශබ්ද පරිශීලක ලැයිස්තුව විවෘත කිරීමට", + "keyboard_shortcuts.muted": "නිහඬ කළ අය පෙන්වන්න", "keyboard_shortcuts.my_profile": "ඔබගේ පැතිකඩ අරින්න", "keyboard_shortcuts.notifications": "දැනුම්දීම් තීරුව විවෘත කිරීමට", "keyboard_shortcuts.open_media": "මාධ්‍ය අරින්න", - "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලේඛනය අරින්න", + "keyboard_shortcuts.pinned": "ඇමිණූ ලිපි ලැයිස්තුව අරින්න", "keyboard_shortcuts.profile": "කතෘගේ පැතිකඩ අරින්න", "keyboard_shortcuts.reply": "පිළිතුරු දීමට", - "keyboard_shortcuts.requests": "පහත ඉල්ලීම් ලැයිස්තුව විවෘත කිරීමට", - "keyboard_shortcuts.search": "සෙවුම් අවධානය යොමු කිරීමට", - "keyboard_shortcuts.spoilers": "CW ක්ෂේත්‍රය පෙන්වීමට/සැඟවීමට", + "keyboard_shortcuts.spoilers": "CW ක්‍ෂේත්‍රය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.start": "\"පටන් ගන්න\" තීරුව අරින්න", - "keyboard_shortcuts.toggle_hidden": "CW පිටුපස පෙළ පෙන්වීමට/සැඟවීමට", "keyboard_shortcuts.toggle_sensitivity": "මාධ්‍ය පෙන්වන්න/සඟවන්න", "keyboard_shortcuts.toot": "නව ලිපියක් අරඹන්න", - "keyboard_shortcuts.unfocus": "අවධානය යොමු නොකිරීමට textarea/search රචනා කරන්න", - "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට යාමට", + "keyboard_shortcuts.up": "ලැයිස්තුවේ ඉහළට ගෙනයන්න", "lightbox.close": "වසන්න", - "lightbox.compress": "රූප බැලීමේ කොටුව සම්පීඩනය කරන්න", - "lightbox.expand": "රූප දර්ශන පෙට්ටිය දිග හරින්න", "lightbox.next": "ඊළඟ", "lightbox.previous": "පෙර", "limited_account_hint.action": "කෙසේ හෝ පැතිකඩ පෙන්වන්න", - "lists.account.add": "ලේඛනයට දමන්න", - "lists.account.remove": "ලේඛනයෙන් ඉවතලන්න", - "lists.delete": "ලේඛනය මකන්න", - "lists.edit": "ලේඛනය සංස්කරණය", + "lists.account.add": "ලැයිස්තුවට දමන්න", + "lists.account.remove": "ලැයිස්තුවෙන් ඉවතලන්න", + "lists.delete": "ලැයිස්තුව මකන්න", + "lists.edit": "ලැයිස්තුව සංස්කරණය", "lists.edit.submit": "සිරැසිය සංශෝධනය", - "lists.new.create": "ලැයිස්තුව එකතු කරන්න", - "lists.new.title_placeholder": "නව ලැයිස්තු මාතෘකාව", - "lists.replies_policy.followed": "අනුගමනය කරන ඕනෑම පරිශීලකයෙක්", - "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයන්", + "lists.new.title_placeholder": "නව ලැයිස්තුවේ සිරැසිය", + "lists.replies_policy.list": "ලැයිස්තුවේ සාමාජිකයින්", "lists.replies_policy.none": "කිසිවෙක් නැත", "lists.replies_policy.title": "පිළිතුරු පෙන්වන්න:", - "lists.search": "ඔබ අනුගමනය කරන පුද්ගලයින් අතර සොයන්න", - "lists.subheading": "ඔබගේ ලේඛන", - "load_pending": "{count, plural, one {# නව අයිතමයක්} other {නව අයිතම #ක්}}", + "lists.subheading": "ඔබගේ ලැයිස්තු", "loading_indicator.label": "පූරණය වෙමින්...", - "media_gallery.toggle_visible": "{number, plural, one {රූපය සඟවන්න} other {පින්තූර සඟවන්න}}", "mute_modal.duration": "පරාසය", - "mute_modal.hide_notifications": "මෙම පරිශීලකයාගෙන් දැනුම්දීම් සඟවන්නද?", - "mute_modal.indefinite": "අවිනිශ්චිත", + "mute_modal.hide_notifications": "මෙම පුද්ගලයාගේ දැනුම්දීම් සඟවන්නද?", + "navigation_bar.about": "පිළිබඳව", "navigation_bar.blocks": "අවහිර කළ අය", "navigation_bar.bookmarks": "පොත්යොමු", - "navigation_bar.community_timeline": "දේශීය කාලරේඛාව", - "navigation_bar.compose": "නව ටූට් සාදන්න", - "navigation_bar.discover": "සොයා ගන්න", + "navigation_bar.community_timeline": "ස්ථානීය කාලරේඛාව", + "navigation_bar.compose": "නව ලිපියක් ලියන්න", + "navigation_bar.direct": "පෞද්ගලික සැඳහුම්", "navigation_bar.domain_blocks": "අවහිර කළ වසම්", "navigation_bar.edit_profile": "පැතිකඩ සංස්කරණය", - "navigation_bar.explore": "ගවේෂණය කරන්න", + "navigation_bar.explore": "ගවේශනය", + "navigation_bar.favourites": "ප්‍රියතමයන්", "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", - "navigation_bar.lists": "ලේඛන", + "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "නිහඬ කළ අය", "navigation_bar.personal": "පුද්ගලික", "navigation_bar.pins": "ඇමිණූ ලිපි", "navigation_bar.preferences": "අභිප්‍රේත", - "navigation_bar.public_timeline": "ෆෙඩරේටඩ් කාලරේඛාව", + "navigation_bar.public_timeline": "ඒකාබද්ධ කාලරේඛාව", + "navigation_bar.search": "සොයන්න", "navigation_bar.security": "ආරක්ෂාව", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", - "notification.admin.report": "{name} වාර්තා {target}", - "notification.admin.sign_up": "{name} අත්සන් කර ඇත", "notification.follow": "{name} ඔබව අනුගමනය කළා", - "notification.follow_request": "{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත", "notification.mention": "{name} ඔබව සඳහන් කර ඇත", "notification.own_poll": "ඔබගේ මත විමසුම නිමයි", "notification.poll": "ඔබ ඡන්දය දුන් මත විමසුමක් නිමයි", - "notification.reblog": "{name} ඔබේ තත්ත්වය ඉහළ නැංවීය", "notification.status": "{name} දැන් පළ කළා", - "notification.update": "{name} පළ කිරීමක් සංස්කරණය කළා", + "notification.update": "{name} ලිපියක් සංස්කරණය කළා", "notifications.clear": "දැනුම්දීම් මකන්න", - "notifications.clear_confirmation": "ඔබට ඔබගේ සියලු දැනුම්දීම් ස්ථිරවම හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", + "notifications.clear_confirmation": "දැනුම්දීම් සියල්ල හිස් කිරීමට වුවමනා ද?", "notifications.column_settings.admin.report": "නව වාර්තා:", "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", + "notifications.column_settings.favourite": "ප්‍රියතමයන්:", "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", - "notifications.column_settings.poll": "ඡන්ද ප්‍රතිඵල:", + "notifications.column_settings.poll": "මත විමසුමේ ප්‍රතිඵල:", "notifications.column_settings.push": "තල්ලු දැනුම්දීම්", - "notifications.column_settings.reblog": "තල්ලු කිරීම්:", "notifications.column_settings.show": "තීරුවෙහි පෙන්වන්න", "notifications.column_settings.sound": "ශබ්දය වාදනය", "notifications.column_settings.status": "නව ලිපි:", @@ -319,38 +298,26 @@ "notifications.column_settings.unread_notifications.highlight": "නොකියවූ දැනුම්දීම් ඉස්මතු කරන්න", "notifications.column_settings.update": "සංශෝධන:", "notifications.filter.all": "සියල්ල", - "notifications.filter.boosts": "බූස්ට් කරයි", + "notifications.filter.favourites": "ප්‍රියතමයන්", "notifications.filter.follows": "අනුගමනය", "notifications.filter.mentions": "සැඳහුම්", - "notifications.filter.polls": "ඡන්ද ප්‍රතිඵල", - "notifications.filter.statuses": "ඔබ අනුගමනය කරන පුද්ගලයින්ගෙන් යාවත්කාලීන", - "notifications.grant_permission": "අවසර දෙන්න.", + "notifications.filter.polls": "මත විමසුමේ ප්‍රතිඵල", "notifications.group": "දැනුම්දීම් {count}", "notifications.mark_as_read": "සියළු දැනුම්දීම් කියවූ බව යොදන්න", - "notifications.permission_denied": "කලින් ප්‍රතික්ෂේප කළ බ්‍රවුසර අවසර ඉල්ලීම හේතුවෙන් ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත", - "notifications.permission_denied_alert": "බ්‍රවුසර අවසරය පෙර ප්‍රතික්ෂේප කර ඇති බැවින්, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කළ නොහැක", - "notifications.permission_required": "අවශ්‍ය අවසරය ලබා දී නොමැති නිසා ඩෙස්ක්ටොප් දැනුම්දීම් නොමැත.", "notifications_permission_banner.enable": "වැඩතල දැනුම්දීම් සබල කරන්න", - "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සබල කරන්න. ඔබට ඒවා සක්‍රිය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න නිවැරදිව පාලනය කළ හැක.", - "notifications_permission_banner.title": "කිසිම දෙයක් අතපසු කරන්න එපා", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", - "onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!", - "onboarding.follows.title": "Popular on Mastodon", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", - "onboarding.start.skip": "Want to skip right ahead?", - "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}", - "onboarding.steps.publish_status.body": "Say hello to the world.", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "Customize your profile", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", - "onboarding.steps.share_profile.title": "Share your profile", + "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", + "onboarding.compose.template": "ආයුබෝ #මාස්ටඩන්!", + "onboarding.share.title": "ඔබගේ පැතිකඩ බෙදාගන්න", + "onboarding.steps.publish_status.title": "පළමු ලිපිය පළ කරන්න", + "onboarding.steps.setup_profile.title": "ඔබගේ පැතිකඩ අභිරුචිකරණය", + "onboarding.steps.share_profile.body": "මාස්ටඩන් හි ඔබව සොයා ගන්නේ කෙසේදැයි යහළුවන්ට දන්වන්න", + "onboarding.steps.share_profile.title": "ඔබගේ පැතිකඩ බෙදාගන්න", "poll.closed": "වසා ඇත", "poll.refresh": "නැවුම් කරන්න", + "poll.reveal": "ප්‍රතිඵල බලන්න", "poll.vote": "ඡන්දය", "poll.voted": "ඔබ මෙම උත්තරයට ඡන්දය දී ඇත", - "poll_button.add_poll": "මත විමසුමක් යොදන්න", + "poll_button.add_poll": "මත විමසුමක් අරඹන්න", "poll_button.remove_poll": "මත විමසුම ඉවතලන්න", "privacy.change": "ලිපියේ රහස්‍යතාව සංශෝධනය", "privacy.direct.long": "සඳහන් කළ අයට දිස්වෙයි", @@ -363,6 +330,7 @@ "refresh": "නැවුම් කරන්න", "regeneration_indicator.label": "පූරණය වෙමින්…", "relative_time.days": "ද. {number}", + "relative_time.full.days": "{number, plural, one {දවස් #} other {දවස් #}} කට පෙර", "relative_time.full.hours": "{number, plural, one {පැය #} other {පැය #}} කට පෙර", "relative_time.full.just_now": "මේ දැන්", "relative_time.full.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} කට පෙර", @@ -377,10 +345,9 @@ "report.categories.other": "වෙනත්", "report.categories.spam": "ආයාචිත", "report.categories.violation": "අන්තර්ගතය නිසා සේවාදායකයේ නීතියක් හෝ කිහිපයක් කඩ වේ", - "report.category.subtitle": "හොඳම ගැලපීම තෝරන්න", "report.category.title": "මෙම {type}සමඟ සිදුවන්නේ කුමක්දැයි අපට කියන්න", "report.category.title_account": "පැතිකඩ", - "report.category.title_status": "තැපැල්", + "report.category.title_status": "ලිපිය", "report.close": "අහවරයි", "report.comment.title": "අප දැනගත යුතු යැයි ඔබ සිතන තවත් යමක් තිබේද?", "report.forward": "{target} වෙත හරවන්න", @@ -391,7 +358,7 @@ "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", "report.reasons.dislike_description": "ඒක බලන්න ඕන දෙයක් නෙවෙයි", - "report.reasons.other": "ඒක වෙන දෙයක්", + "report.reasons.other": "එය වෙනත් දෙයක්", "report.reasons.other_description": "ගැටළුව වෙනත් වර්ග වලට නොගැලපේ", "report.reasons.spam": "එය අයාචිතයි", "report.reasons.spam_description": "අනිෂ්ට සබැඳි, ව්‍යාජ නියැලීම, හෝ පුනරාවර්තන පිළිතුරු", @@ -402,8 +369,8 @@ "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", "report.submit": "යොමන්න", - "report.target": "වාර්තාව {target}", - "report.thanks.take_action": "Mastodon හි ඔබ දකින දේ පාලනය කිරීම සඳහා ඔබේ විකල්ප මෙන්න:", + "report.target": "{target} වාර්තා කිරීම", + "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", "report.thanks.take_action_actionable": "අපි මෙය සමාලෝචනය කරන අතරතුර, ඔබට @{name}ට එරෙහිව පියවර ගත හැක:", "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", @@ -415,8 +382,9 @@ "report_notification.categories.violation": "නීතිය කඩ කිරීම", "report_notification.open": "විවෘත වාර්තාව", "search.placeholder": "සොයන්න", + "search.quick_action.open_url": "ලිපිනය මාස්ටඩන්හි අරින්න", + "search.search_or_paste": "සොයන්න හෝ ඒ.ස.නි. අලවන්න", "search_results.all": "සියල්ල", - "search_results.hashtags": "හැෂ් ටැග්", "search_results.nothing_found": "මෙම සෙවුම් පද සඳහා කිසිවක් සොයාගත නොහැකි විය", "search_results.see_all": "සියල්ල බලන්න", "search_results.statuses": "ලිපි", @@ -424,24 +392,23 @@ "server_banner.learn_more": "තව දැනගන්න", "sign_in_banner.create_account": "ගිණුමක් සාදන්න", "sign_in_banner.sign_in": "පිවිසෙන්න", - "status.admin_account": "@{name}සඳහා මධ්‍යස්ථ අතුරුමුහුණත විවෘත කරන්න", - "status.admin_status": "මධ්‍යස්ථ අතුරුමුහුණතෙහි මෙම තත්ත්වය විවෘත කරන්න", + "status.admin_status": "මෙම ලිපිය මැදිහත්කරණ අතුරුමුහුණතෙහි අරින්න", "status.block": "@{name} අවහිර", "status.bookmark": "පොත්යොමුවක්", - "status.cannot_reblog": "මෙම තනතුර වැඩි කළ නොහැක", - "status.copy": "තත්වයට සබැඳිය පිටපත් කරන්න", "status.delete": "මකන්න", "status.detailed_status": "විස්තරාත්මක සංවාද දැක්ම", "status.edit": "සංස්කරණය", "status.edited": "සංශෝධිතයි {date}", "status.edited_x_times": "සංශෝධිතයි {count, plural, one {වාර {count}} other {වාර {count}}}", "status.embed": "කාවැද්දූ", + "status.filter": "මෙම ලිපිය පෙරන්න", "status.filtered": "පෙරන ලද", + "status.hide": "ලිපිය සඟවන්න", "status.history.created": "{name} නිර්මාණය {date}", "status.history.edited": "{name} සංස්කරණය {date}", "status.load_more": "තව පූරණය", "status.media_hidden": "මාධ්‍ය සඟවා ඇත", - "status.mention": "@{name} සැඳහුම", + "status.mention": "@{name} සඳහන් කරන්ක", "status.more": "තව", "status.mute": "@{name} නිහඬව", "status.mute_conversation": "සංවාදය නිහඬව", @@ -449,14 +416,10 @@ "status.pin": "පැතිකඩට අමුණන්න", "status.pinned": "ඇමිණූ ලිපියකි", "status.read_more": "තව කියවන්න", - "status.reblog": "බූස්ට් කරන්න", - "status.reblog_private": "මුල් දෘශ්‍යතාව සමඟ වැඩි කරන්න", - "status.reblogs.empty": "තාම කවුරුත් මේ toot එක boost කරලා නැහැ. යමෙකු එසේ කළ විට, ඔවුන් මෙහි පෙන්වනු ඇත.", - "status.redraft": "මකන්න සහ නැවත කෙටුම්පත", "status.remove_bookmark": "පොත්යොමුව ඉවතලන්න", "status.reply": "පිළිතුරු", "status.replyAll": "නූලට පිළිතුරු දෙන්න", - "status.report": "@{name} වාර්තාව", + "status.report": "@{name} වාර්තා කරන්න", "status.sensitive_warning": "සංවේදී අන්තර්ගතයකි", "status.share": "බෙදාගන්න", "status.show_filter_reason": "කෙසේ වුවද පෙන්වන්න", @@ -464,29 +427,29 @@ "status.show_less_all": "සියල්ල අඩුවෙන් පෙන්වන්න", "status.show_more": "තවත් පෙන්වන්න", "status.show_more_all": "සියල්ල වැඩියෙන් පෙන්වන්න", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.translate": "පරිවර්තනය", + "status.translated_from_with": "{provider} මගින් {lang} භාෂාවෙන් පරිවර්තනය කර ඇත", + "status.uncached_media_warning": "පෙරදසුන නැත", "status.unmute_conversation": "සංවාදය නොනිහඬ", "status.unpin": "පැතිකඩෙන් ගළවන්න", "subscribed_languages.save": "වෙනස්කම් සුරකින්න", "tabs_bar.home": "මුල් පිටුව", "tabs_bar.notifications": "දැනුම්දීම්", - "time_remaining.days": "{number, plural, one {# දින} other {# දින}} අත්හැරියා", - "time_remaining.hours": "{number, plural, one {# පැය} other {# පැය}} අත්හැරියා", - "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {# මිනිත්තු}} අත්හැරියා", - "time_remaining.moments": "ඉතිරිව ඇති මොහොත", - "time_remaining.seconds": "{number, plural, one {# දෙවැනි} other {# තත්පර}} අත්හැරියා", + "time_remaining.days": "{number, plural, one {දවස් #} other {දවස් #}} ක් ඉතිරිය", + "time_remaining.hours": "{number, plural, one {පැය #} other {පැය #}} ක් ඉතිරිය", + "time_remaining.minutes": "{number, plural, one {විනාඩි #} other {විනාඩි #}} ක් ඉතිරිය", + "time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", "trends.trending_now": "දැන් ප්‍රවණතාවය", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", "units.short.thousand": "{count}කි", "upload_area.title": "උඩුගතයට ඇද දමන්න", - "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට යොදන්න", + "upload_button.label": "රූප, දෘශ්‍යක හෝ හඬපට අමුණන්න", "upload_error.limit": "සීමාව ඉක්මවා ඇත.", "upload_error.poll": "මත විමසුම් සමඟ ගොනු යෙදීමට ඉඩ නොදේ.", "upload_form.audio_description": "නොඇසෙන අය සඳහා විස්තර කරන්න", @@ -507,6 +470,7 @@ "upload_modal.preview_label": "පෙරදසුන ({ratio})", "upload_progress.label": "උඩුගත වෙමින්...", "upload_progress.processing": "සැකසෙමින්…", + "username.taken": "නම දැනටමත් අරගෙන ඇත", "video.close": "දෘශ්‍යකය වසන්න", "video.download": "ගොනුව බාගන්න", "video.exit_fullscreen": "පූර්ණ තිරයෙන් පිටවන්න", diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index a20057cef9..c866bed0e9 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -23,7 +23,6 @@ si: explanation: ඔබ මෙම ඊමේල් ලිපිනය සමඟ %{host} හි ගිණුමක් සාදා ඇත. ඔබ එය සක්‍රිය කිරීමට එක ක්ලික් කිරීමක් ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. explanation_when_pending: ඔබ මෙම විද්‍යුත් තැපැල් ලිපිනය සමඟ %{host} වෙත ආරාධනාවක් සඳහා ඉල්ලුම් කළා. ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. ඔබගේ විස්තර වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට ඔබට පුරනය විය හැක, නමුත් ඔබගේ ගිණුම අනුමත වන තුරු ඔබට බොහෝ කාර්යයන් වෙත ප්‍රවේශ විය නොහැක. ඔබගේ අයදුම්පත ප්‍රතික්ෂේප කළහොත්, ඔබගේ දත්ත ඉවත් කරනු ඇත, එබැවින් ඔබෙන් වැඩිදුර ක්‍රියාමාර්ග අවශ්‍ය නොවනු ඇත. මේ ඔබ නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. extra_html: කරුණාකර සේවාදායකයේ නීති සහ අපගේ සේවා කොන්දේසිද පරීක්ෂා කරන්න. - subject: 'Mastodon: %{instance}සඳහා තහවුරු කිරීමේ උපදෙස්' title: වි. තැපෑල තහවුරු කරන්න email_changed: explanation: 'ඔබගේ ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් වෙමින් පවතී:' @@ -33,30 +32,26 @@ si: password_change: explanation: ඔබගේ ගිණුම සඳහා මුරපදය වෙනස් කර ඇත. extra: ඔබ ඔබගේ මුරපදය වෙනස් නොකළේ නම්, යමෙකු ඔබගේ ගිණුමට ප්‍රවේශය ලබා ගෙන ඇති බව පෙනෙන්නට තිබේ. ඔබගේ ගිණුමෙන් අගුලු දමා ඇත්නම් කරුණාකර ඔබගේ මුරපදය වහාම වෙනස් කරන්න හෝ සේවාදායක පරිපාලක අමතන්න. - subject: 'Mastodon: මුරපදය වෙනස් විය' + subject: 'මාස්ටඩන්: මුරපදය වෙනස් විය' title: මුරපදය වෙනස් විය reconfirmation_instructions: explanation: ඔබගේ ඊමේල් වෙනස් කිරීමට නව ලිපිනය තහවුරු කරන්න. - extra: මෙම වෙනස ඔබ විසින් ආරම්භ කරන ලද්දක් නොවේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වන තෙක් Mastodon ගිණුම සඳහා ඊමේල් ලිපිනය වෙනස් නොවේ. - subject: 'Mastodon: %{instance}සඳහා විද්‍යුත් තැපෑල තහවුරු කරන්න' title: වි-තැපෑල තහවුරු කරන්න reset_password_instructions: action: මුරපදය වෙනස් කරන්න explanation: ඔබ ඔබගේ ගිණුම සඳහා නව මුරපදයක් ඉල්ලා ඇත. extra: ඔබ මෙය ඉල්ලා නොසිටියේ නම්, කරුණාකර මෙම විද්‍යුත් තැපෑල නොසලකා හරින්න. ඔබ ඉහත සබැඳියට ප්‍රවේශ වී අලුත් එකක් සාදන තෙක් ඔබේ මුරපදය වෙනස් නොවනු ඇත. - subject: 'Mastodon: මුරපද උපදෙස් යළි පිහිටුවන්න' + subject: 'මාස්ටඩන්: මුරපදය යළි සැකසීමේ උපදෙස්' title: මුරපදය යළි සැකසීම two_factor_disabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය අබල කර ඇත. විද්‍යුත් තැපැල් ලිපිනය සහ මුරපදය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය අක්‍රීය කර ඇත' title: ද්විපියවර අබලයි two_factor_enabled: explanation: ඔබගේ ගිණුම සඳහා ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනයක් පුරනය වීමට අවශ්‍ය වනු ඇත. - subject: 'Mastodon: ද්වි සාධක සත්‍යාපනය සක්‍රීය කර ඇත' title: ද්විපියවර සබලයි two_factor_recovery_codes_changed: explanation: පෙර ප්‍රතිසාධන කේත අවලංගු කර නව ඒවා උත්පාදනය කර ඇත. - subject: 'Mastodon: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කරන ලදී' + subject: 'මාස්ටඩන්: ද්වි-සාධක ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි' title: ද්විපියවර ප්‍රතිසාධන කේත වෙනස් විය unlock_instructions: subject: 'මාස්ටඩන්: අගුළු හැරීමේ උපදේශ' @@ -67,15 +62,13 @@ si: title: ආරක්‍ෂණ යතුරක් එකතු කර ඇත deleted: explanation: පහත ආරක්ෂක යතුර ඔබගේ ගිණුමෙන් මකා ඇත - subject: 'Mastodon: ආරක්ෂක යතුර මකා ඇත' + subject: 'මාස්ටඩන්: ආරක්‍ෂණ යතුර මකා ඇත' title: ඔබගේ ආරක්ෂක යතුරු වලින් එකක් මකා ඇත webauthn_disabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අබල කර ඇත. යුගල කළ TOTP යෙදුම මගින් ජනනය කරන ලද ටෝකනය පමණක් භාවිතයෙන් දැන් පුරනය විය හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සමඟ සත්‍යාපනය අක්‍රිය කර ඇත' title: ආරක්‍ෂණ යතුරු අබල කර ඇත webauthn_enabled: explanation: ඔබගේ ගිණුම සඳහා ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත. ඔබගේ ආරක්ෂක යතුර දැන් පුරනය වීම සඳහා භාවිතා කළ හැක. - subject: 'Mastodon: ආරක්ෂක යතුරු සත්‍යාපනය සක්‍රීය කර ඇත' title: ආරක්‍ෂණ යතුරු සබල කර ඇත omniauth_callbacks: failure: '"%{reason}" නිසා %{kind} සිට ඔබව සත්‍යාපනය කළ නොහැක.' @@ -108,8 +101,7 @@ si: already_confirmed: දැනටමත් තහවුරු කර ඇත, කරුණාකර පුරනය වීමට උත්සාහ කරන්න confirmation_period_expired: "%{period}තුළ තහවුරු කළ යුතුය, කරුණාකර අලුත් එකක් ඉල්ලන්න" expired: කල් ඉකුත් වී ඇත, කරුණාකර අලුත් එකක් ඉල්ලන්න - not_found: හමු වුණේ නැහැ - not_locked: අගුලු දමා නොතිබුණි + not_found: හමු නොවිණි not_saved: one: '1 දෝෂයක් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' other: 'දෝෂ %{count} කින් මෙම %{resource} සුරැකීම තහනම් කර ඇත:' diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 2307f63c0a..31b38444d3 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -74,9 +74,9 @@ si: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. last_used_at: අවසන් වරට භාවිතා කළේ %{date} - never_used: කවදාවත් පාවිච්චි කළේ නැහැ + never_used: භාවිතා කර නැත scopes: අවසර - superapp: අභ්යන්තර + superapp: අභ්‍යන්තර title: ඔබගේ බලයලත් අයදුම්පත් errors: messages: @@ -104,33 +104,34 @@ si: flash: applications: create: - notice: යෙදුම නිර්මාණය කරන ලදී. + notice: යෙදුම සෑදිණි. destroy: - notice: යෙදුම මකා ඇත. + notice: යෙදුම මැකිණි. update: - notice: යෙදුම යාවත්කාලීන කරන ලදී. + notice: යෙදුම යාවත්කාල විය. authorized_applications: destroy: notice: අයදුම්පත අවලංගු කරන ලදී. grouped_scopes: access: - read: කියවීමට පමණක් ප්‍රවේශය - read/write: කියවීමට සහ ලිවීමට ප්‍රවේශය - write: ලිවීමට පමණක් ප්‍රවේශය + read: ප්‍රවේශය කියවීමට පමණි + read/write: කියවීමට හා ලිවීමට ප්‍රවේශය + write: ප්‍රවේශය ලිවීමට පමණි title: accounts: ගිණුම් - admin/accounts: ගිණුම් පරිපාලනය + admin/accounts: ගිණුම් කළමනාකරණය admin/all: සියලුම පරිපාලන කාර්යයන් admin/reports: වාර්තා පරිපාලනය + all: ඔබගේ මාස්ටඩන් ගිණුමට පූර්ණ ප්‍රවේශය blocks: කුට්ටි - bookmarks: පිටු සලකුණු + bookmarks: පොත්යොමු conversations: සංවාද crypto: අන්ත සංකේතනය + favourites: ප්‍රියතමයන් filters: පෙරහන් follows: පහත සඳහන් lists: ලැයිස්තු - media: මාධ්ය ඇමුණුම් - mutes: නිහඬ කරයි + media: මාධ්‍ය ඇමුණුම් notifications: දැනුම්දීම් push: තල්ලු දැනුම්දීම් reports: වාර්තා @@ -142,39 +143,40 @@ si: applications: යෙදුම් oauth2_provider: වි.සත්‍යා.2 (OAuth) සැපයුම්කරු application: - title: වි.සත්යා. (OAuth) තොරතුරු අවශ්‍යයි + title: වි.සත්‍යා. (OAuth) අනුමැතිය අවශ්‍යයයි scopes: - admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවන්න - admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවන්න - admin:write: සේවාදායකයේ සියලුම දත්ත වෙනස් කරන්න - admin:write:accounts: ගිණුම් මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - admin:write:reports: වාර්තා මත මධ්‍යස්ථ ක්‍රියා සිදු කරන්න - crypto: end-to-end encryption භාවිතා කරන්න + admin:read: සේවාදායකයේ ඇති සියලුම දත්ත කියවයි + admin:read:accounts: සියලුම ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:read:reports: සියලුම වාර්තා සහ වාර්තා කළ ගිණුම් වල සංවේදී තොරතුරු කියවයි + admin:write: සේවාදායකයේ සියලුම දත්ත සංශෝධනය කරයි + admin:write:accounts: ගිණුම් සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + admin:write:reports: වාර්තා සඳහා මැදිහත්කරණ ක්‍රියාමාර්ග ගනියි + crypto: අන්ත සංකේතනය භාවිතා කරයි follow: ගිණුම් සබඳතා වෙනස් කරන්න - push: ඔබගේ තල්ලු දැනුම්දීම් ලබා ගන්න - read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවන්න - read:accounts: ගිණුම් තොරතුරු බලන්න + push: ඔබගේ තල්ලු දැනුම්දීම් ලබන්න + read: ඔබගේ ගිණුමේ සියලුම දත්ත කියවයි + read:accounts: ගිණුම්වල තොරතුරු දකියි read:blocks: ඔබගේ වාරණ බලන්න - read:bookmarks: ඔබගේ පිටු සලකුණු බලන්න + read:bookmarks: ඔබගේ පොත්යොමු දකියි + read:favourites: ඔබගේ ප්‍රියතමයන් බලන්න read:filters: ඔබගේ පෙරහන් බලන්න read:follows: ඔබගේ පහත සඳහන් බලන්න read:lists: ඔබගේ ලැයිස්තු බලන්න read:mutes: ඔබේ ගොළු බලන්න - read:notifications: ඔබගේ දැනුම්දීම් බලන්න + read:notifications: ඔබගේ දැනුම්දීම් බලයි read:reports: ඔබගේ වාර්තා බලන්න - read:search: ඔබ වෙනුවෙන් සොයන්න - read:statuses: සියලුම පෝස්ට් බලන්න + read:search: ඔබ වෙනුවෙන් සොයයි + read:statuses: සියලු ලිපි බලයි write: ඔබගේ ගිණුමේ සියලුම දත්ත වෙනස් කරන්න write:accounts: ඔබගේ පැතිකඩ වෙනස් කරන්න - write:blocks: ගිණුම් සහ වසම් අවහිර කරන්න - write:bookmarks: පිටු සලකුණු සටහන් + write:blocks: ගිණුම් සහ වසම් අවහිර කරයි + write:bookmarks: ලිපි වලට පොත්යොමු තබයි write:conversations: සංවාද නිහඬ කිරීම සහ මකා දැමීම - write:filters: පෙරහන් කරන්න + write:favourites: ප්‍රියතම ලිපි + write:filters: පෙරහන් සාදයි write:follows: මිනිසුන් අනුගමනය කරන්න write:lists: ලැයිස්තු සාදන්න - write:media: මාධ්‍ය ගොනු උඩුගත කරන්න - write:mutes: මිනිසුන් සහ සංවාද කරන්න - write:notifications: ඔබගේ දැනුම්දීම් හිස්කරන්න - write:reports: වෙනත් පුද්ගලයින් වාර්තා කරන්න - write:statuses: පළ කිරීම් පළ කරන්න + write:media: මාධ්‍ය ගොනු උඩුගත කරයි + write:mutes: සංවාද හා පුද්ගලයින් නිහඬ කරයි + write:notifications: ඔබගේ දැනුම්දීම් හිස් කරයි + write:statuses: ලිපි පළ කරයි diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7ca7f63a5b..d21259ee77 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -785,6 +785,9 @@ eu: release_notes: Bertsio oharrak title: Eguneraketak eskuragarri type: Mota + types: + major: Argitalpen handia + minor: Argitalpen txikia version: Bertsioa statuses: account: Egilea diff --git a/config/locales/si.yml b/config/locales/si.yml index 45be8b76f2..787d6fde38 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1,10 +1,11 @@ --- si: about: - about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, ආයතනික නිරීක්ෂණ නැත, සදාචාරාත්මක සැලසුම් සහ විමධ්‍යගත කිරීම! Mastodon සමඟ ඔබේ දත්ත අයිති කරගන්න!' - contact_missing: සකස් කර නැත + about_mastodon_html: 'අනාගත සමාජ ජාලය: දැන්වීම් නැත, සංස්ථානික අවේක්‍ෂණ නැත, යහපතට නිර්මිතයි සහ විමධ්‍යගතයි! මාස්ටඩන් සමඟ ඔබගේ දත්ත අයිතිව තබාගන්න!' + contact_missing: සකසා නැත contact_unavailable: අ/නොවේ - hosted_on: Mastodon %{domain}හි සත්කාරකත්වය දරයි + hosted_on: "%{domain} හරහා සත්කාරකත්‍වය ලබයි" + title: පිළිබඳව accounts: follow: අනුගමනය followers: @@ -14,7 +15,7 @@ si: instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී - nothing_here: මෙහි කිසිත් නැත! + nothing_here: මෙහි කිසිවක් නැත! pin_errors: following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: @@ -23,51 +24,49 @@ si: posts_tab_heading: ලිපි admin: account_actions: - action: ක්‍රියාව සිදු කරන්න - title: "%{acct}මත මධ්‍යස්ථ ක්‍රියාව සිදු කරන්න" + action: ක්‍රියාමාර්ගයක් ගන්න account_moderation_notes: - create: සටහන හැරයන්න - created_msg: මධ්‍යස්ථ සටහන සාර්ථකව සාදන ලදී! - destroyed_msg: මධ්‍යස්ථ සටහන සාර්ථකව විනාශ විය! + create: සටහනක් තබන්න accounts: add_email_domain_block: වි-තැපැල් වසම අවහිර කරන්න - approve: අනුමත කරන්න + approve: අනුමැතිය approved_msg: "%{username}හි ලියාපදිංචි වීමේ යෙදුම සාර්ථකව අනුමත කරන ලදී" are_you_sure: ඔබට විශ්වාසද? - avatar: අවතාරය + avatar: ප්‍රතිරූපය by_domain: වසම change_email: + changed_msg: වි-තැපෑල සාර්ථකව වෙනස් විය! current_email: වත්මන් වි-තැපෑල label: වි-තැපෑල වෙනස් කරන්න new_email: නව විද්‍යුත් තැපෑල submit: වි-තැපෑල වෙනස් කරන්න title: "%{username} සඳහා වි-තැපෑල වෙනස් කරන්න" + change_role: + changed_msg: භූමිකාව සාර්ථකව වෙනස් විය! + label: භූමිකාව වෙනස් කරන්න + no_role: නව භූමිකාව + title: "%{username} සඳහා භූමිකාව වෙනස් කරන්න" confirm: සනාථ කරන්න - confirmed: තහවුරු කර ඇත + confirmed: සනාථ කර ඇත confirming: සනාථ කරමින් custom: අභිරුචි delete: දත්ත මකන්න - deleted: මකා දමන ලදී - demote: පහත් කරන්න + deleted: මකා ඇත destroyed_msg: "%{username}හි දත්ත ඉක්මනින් මකා දැමීමට පෝලිම් කර ඇත" - disable: කැටි කරන්න disable_sign_in_token_auth: ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න disable_two_factor_authentication: 2FA අබල කරන්න - disabled: ශීත කළ display_name: ප්රදර්ශන නාමය domain: වසම edit: සංස්කරණය email: විද්‍යුත් තැපෑල email_status: වි-තැපෑලෙහි තත්වය - enable: කැටි කිරීම ඉවත් කරන්න enable_sign_in_token_auth: විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සබල කරන්න enabled: සබල කර ඇත enabled_msg: "%{username}ගේ ගිණුම සාර්ථකව අත්හිටුවා ඇත" followers: අනුගාමිකයින් - follows: පහත සඳහන් header: ශීර්ෂය inbox_url: එන ලිපි URL - invite_request_text: එක්වීම සඳහා + invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) joined: එක් වී ඇත @@ -84,12 +83,13 @@ si: moderation: active: සක්‍රීයයි all: සියල්ල - pending: පොරොත්තුවෙන් + disabled: අබලයි + pending: පොරොත්තු suspended: අත්හිටුවන ලදි - title: මධ්යස්ථභාවය - moderation_notes: මධ්‍යස්ථ සටහන් + title: මැදිහත්කරණය + moderation_notes: මැදිහත්කරණ සටහන් most_recent_activity: වඩාත්ම මෑත ක්රියාකාරිත්වය - most_recent_ip: ඊට වඩා අ.ජා.කේ.(IP) + most_recent_ip: මෑත අ.ජා.කෙ. (IP) no_account_selected: කිසිවක් තෝරා නොගත් බැවින් ගිණුම් කිසිවක් වෙනස් කර නැත no_limits_imposed: සීමාවන් පනවා නැත not_subscribed: දායක වී නැත @@ -99,37 +99,36 @@ si: previous_strikes_description_html: one: මෙම ගිණුමට එක වර්ජනයක් ඇත. other: මෙම ගිණුමේ වර්ජන %{count} ඇත. - promote: ප්රවර්ධනය කරන්න protocol: කෙටුම්පත - public: ප්රසිද්ධ + public: ප්‍රසිද්ධ push_subscription_expires: පුෂ් දායකත්වය කල් ඉකුත් වේ - redownload: පැතිකඩ නැවුම්කරන්න + redownload: පැතිකඩ නැවුම් කරන්න redownloaded_msg: මූලාරම්භයේ සිට %{username}හි පැතිකඩ සාර්ථකව නැවුම් කරන ලදී reject: ප්‍රතික්ෂේප rejected_msg: "%{username}හි ලියාපදිංචි වීමේ අයදුම්පත සාර්ථකව ප්‍රතික්ෂේප විය" - remove_avatar: අවතාරය ඉවත් කරන්න + remove_avatar: ප්‍රතිරූපය ඉවත් කරන්න remove_header: ශීර්ෂය ඉවත්කරන්න removed_avatar_msg: "%{username}ගේ අවතාර රූපය සාර්ථකව ඉවත් කරන ලදී" removed_header_msg: "%{username}හි ශීර්ෂ රූපය සාර්ථකව ඉවත් කරන ලදී" resend_confirmation: already_confirmed: මෙම පරිශීලකයා දැනටමත් තහවුරු කර ඇත reset: නැවත සකසන්න - reset_password: මුරපදය නැවතසකසන්න + reset_password: මුරපදය යළි සකසන්න resubscribe: නැවත දායක වන්න + role: භූමිකාව search: සොයන්න search_same_email_domain: එකම විද්‍යුත් තැපැල් වසම සහිත වෙනත් පරිශීලකයන් search_same_ip: එකම IP සහිත වෙනත් පරිශීලකයන් + security: ආරක්‍ෂාව security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitive: සංවේදී sensitized: සංවේදී ලෙස සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා targeted_reports: වෙනත් අය විසින් වාර්තා කරන ලදී - silence: සීමාව - silenced: සීමාසහිත + silenced: සීමා සහිතයි statuses: ලිපි strikes: පෙර වැඩ වර්ජන subscribe: දායක වන්න @@ -147,26 +146,25 @@ si: unsilenced_msg: "%{username}ගිණුමේ සීමාව සාර්ථකව ඉවත් කරන ලදී" unsubscribe: දායක නොවන්න unsuspended_msg: "%{username}ගිණුම සාර්ථකව අත්හිටුවන ලදී" - username: පරිශීලක නාමය + username: පරිශ්‍රීලක නාමය view_domain: වසම සඳහා සාරාංශය බලන්න warn: අවවාද web: වියමන - whitelisted: ෆෙඩරේෂන් සඳහා අවසර ඇත + whitelisted: ඒකාබද්ධයට ඉඩ දී ඇත action_logs: action_types: approve_appeal: අභියාචනය අනුමත කරන්න approve_user: පරිශීලක අනුමත කරන්න assigned_to_self_report: වාර්තාව පැවරීම - change_email_user: පරිශීලකයින්ට වි-තැපෑල වෙනස් කරන්න confirm_user: පරිශීලක තහවුරු කරන්න create_account_warning: අවවාදයක් සාදන්න create_announcement: නිවේදනය සාදන්න create_custom_emoji: අභිරුචි ඉමොජි සාදන්න - create_domain_allow: වසම් ඉඩදීමක් සාදන්න - create_domain_block: වසම් අවහිරයක් සාදන්න + create_domain_allow: වසමකට ඉඩදීම සාදන්න create_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එකක් සාදන්න create_ip_block: අ.ජා. කෙ. (IP) නීතියක් සාදන්න create_unavailable_domain: ලබා ගත නොහැකි වසම සාදන්න + create_user_role: භූමිකාව සාදන්න demote_user: පරිශීලකයා පහත් කරන්න destroy_announcement: නිවේදනය මකන්න destroy_custom_emoji: අභිරුචි ඉමොජි මකන්න @@ -178,23 +176,21 @@ si: destroy_status: පළ කිරීම මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න - disable_custom_emoji: අභිරුචි ඉමොජි අබල කරන්න + disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න disable_sign_in_token_auth_user: පරිශීලකයා සඳහා ඊමේල් ටෝකන් සත්‍යාපනය අක්‍රීය කරන්න - disable_user: පරිශීලනය කරන්න - enable_custom_emoji: අභිරුචි ඉමොජි සබල කරන්න + enable_custom_emoji: අභිරුචි ඉමෝජි සබල කරන්න enable_sign_in_token_auth_user: පරිශීලකයා සඳහා විද්‍යුත් තැපෑල ටෝකන් සත්‍යාපනය සක්‍රීය කරන්න enable_user: පරිශීලක සබල කරන්න memorialize_account: ගිණුම අනුස්මරණ කරන්න - promote_user: පරිශීලක ප්රවර්ධනය කරන්න reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න reject_user: පරිශීලක ප්‍රතික්ෂේප කරන්න - remove_avatar_user: Avatar ඉවත් කරන්න - reopen_report: වාර්තාව නැවත විවෘත කරන්න - reset_password_user: මුරපදය නැවතසකසන්න + remove_avatar_user: ප්‍රතිරූපය ඉවත් කරන්න + reopen_report: වාර්තාව නැවත අරින්න + reset_password_user: මුරපදය යළි සකසන්න resolve_report: වාර්තාව විසඳන්න sensitive_account: බල සංවේදී ගිණුම silence_account: ගිණුම සීමා කරන්න - suspend_account: සැලකිය යුතු + suspend_account: ගිණුම අත්හිටුවන්න unassigned_report: වාර්තාව පැවරීම ඉවත් කරන්න unblock_email_account: ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන්න unsensitive_account: බල සංවේදී ගිණුම අහෝසි කරන්න @@ -205,7 +201,6 @@ si: update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න update_status: පළ කිරීම යාවත්කාලීන කරන්න actions: - approve_appeal_html: "%{name} අනුමත මධ්‍යස්ථ තීරණ අභියාචනය %{target}සිට" approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" change_email_user_html: "%{name} පරිශීලක %{target}ගේ ඊමේල් ලිපිනය වෙනස් කළේය" @@ -236,7 +231,6 @@ si: enable_user_html: පරිශීලක %{target}සඳහා %{name} සක්‍රීය පුරනය වීම memorialize_account_html: "%{name} %{target}ගේ ගිණුම සිහිවටන පිටුවක් බවට පත් කළේය" promote_user_html: "%{name} උසස් පරිශීලක %{target}" - reject_appeal_html: "%{name} %{target}සිට මධ්‍යස්ථ තීරණ අභියාචනය ප්‍රතික්ෂේප කරන ලදී" reject_user_html: "%{name} %{target}සිට ලියාපදිංචි වීම ප්‍රතික්ෂේප විය" remove_avatar_user_html: "%{name} %{target}ගේ අවතාරය ඉවත් කරන ලදී" reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" @@ -255,8 +249,8 @@ si: update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. - filter_by_action: ක්‍රියාව අනුව පෙරන්න - filter_by_user: පරිශීලක අනුව පෙරන්න + filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න + filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න title: විගණන සටහන announcements: destroyed_msg: නිවේදනය සාර්ථකව මකා ඇත! @@ -279,22 +273,22 @@ si: assign_category: කාණ්ඩය පැවරීම by_domain: වසම copied_msg: ඉමොජි වල දේශීය පිටපත සාර්ථකව සාදන ලදී - copy: පිටපත් + copy: පිටපතක් copy_failed_msg: එම ඉමොජියේ දේශීය පිටපතක් සෑදීමට නොහැකි විය create_new_category: නව ප්‍රවර්ගයක් සාදන්න created_msg: ඉමොජි සාර්ථකව නිර්මාණය කළා! delete: මකන්න destroyed_msg: Emojo සාර්ථකව විනාශ විය! disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි disabled_msg: එම ඉමොජිය සාර්ථකව අබල කරන ලදී - emoji: ඉමොජි + emoji: ඉමෝජි enable: සබල කරන්න - enabled: සබල කර ඇත + enabled: සබලයි enabled_msg: එම ඉමොජි සාර්ථකව සබල කරන ලදී image_hint: PNG හෝ GIF %{size}දක්වා list: ලැයිස්තුව - listed: ලැයිස්තුගත කර ඇත + listed: ලැයිස්තුගත new: title: නව අභිරුචි ඉමොජි එක් කරන්න not_permitted: මෙම ක්‍රියාව සිදු කිරීමට ඔබට අවසර නැත @@ -313,7 +307,7 @@ si: interactions: අන්තර්ක්රියා media_storage: මාධ්ය ගබඩාව new_users: නව පරිශීලකයන් - opened_reports: වාර්තා විවෘත විය + opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" other: "%{count} අභියාචනා පොරොත්තු" @@ -329,11 +323,11 @@ si: resolved_reports: වාර්තා විසඳා ඇත software: මෘදුකාංගය sources: ලියාපදිංචි මූලාශ්‍ර - space: අවකාශය භාවිතය + space: ඉඩ භාවිතය title: උපකරණ පුවරුව top_languages: ඉහළම ක්රියාකාරී භාෂා top_servers: ඉහළම ක්රියාකාරී සේවාදායකයන් - website: වෙබ් අඩවිය + website: අඩවිය disputes: appeals: empty: අභියාචනා හමු නොවීය. @@ -353,7 +347,6 @@ si: existing_domain_block_html: ඔබ දැනටමත් %{name}මත දැඩි සීමාවන් පනවා ඇත, ඔබට එය අවහිර කිරීම ඉවත් කිරීමට අවශ්‍යයි. new: create: බ්ලොක් එකක් සාදන්න - hint: ඩොමේන් බ්ලොක් එක දත්ත සමුදාය තුල ගිණුම් ඇතුලත් කිරීම් නිර්මාණය වීම වලක්වන්නේ නැත, නමුත් එම ගිණුම් වලට ප්‍රතික්‍රියාශීලීව සහ ස්වයංක්‍රීයව විශේෂිත මධ්‍යස්ථ ක්‍රම යොදනු ඇත. severity: noop: කිසිවක් නැත suspend: අත්හිටුවන්න @@ -361,7 +354,6 @@ si: obfuscate: අපැහැදිලි වසම් නාමය obfuscate_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම් ලැයිස්තුවේ වසම් නාමය අර්ධ වශයෙන් අපැහැදිලි කරන්න private_comment: පුද්ගලික අදහස - private_comment_hint: පරිපාලකයින් විසින් අභ්‍යන්තර භාවිතය සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. public_comment: ප්‍රසිද්ධ අදහස public_comment_hint: වසම් සීමාවන් ලැයිස්තුව ප්‍රචාරණය කිරීම සබල කර ඇත්නම්, සාමාන්‍ය ජනතාව සඳහා මෙම වසම් සීමාව ගැන අදහස් දක්වන්න. reject_media: මාධ්‍ය ගොනු ප්‍රතික්ෂේප කරන්න @@ -415,16 +407,16 @@ si: by_domain: වසම confirm_purge: ඔබට මෙම වසමෙන් දත්ත ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද? content_policies: - comment: අභ්යන්තර සටහන + comment: අභ්‍යන්තර සටහන description_html: ඔබට මෙම වසම සහ එහි ඕනෑම උප වසමකින් සියලුම ගිණුම් වලට අදාළ වන අන්තර්ගත ප්‍රතිපත්ති නිර්වචනය කළ හැක. policies: reject_media: මාධ්‍ය ප්‍රතික්ෂේප කරන්න reject_reports: වාර්තා ප්‍රතික්ෂේප කරන්න silence: සීමාව suspend: අත්හිටුවන්න - policy: ප්රතිපත්ති + policy: ප්‍රතිපත්තිය reason: පොදු හේතුව - title: අන්තර්ගත ප්රතිපත්ති + title: අන්තර්ගත ප්‍රතිපත්ති dashboard: instance_accounts_dimension: වැඩිපුරම අනුගමනය කරන ගිණුම් instance_accounts_measure: ගබඩා කර ඇති ගිණුම් @@ -452,7 +444,7 @@ si: moderation: all: සියල්ල limited: සීමා සහිතයි - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය private_comment: පුද්ගලික අදහස public_comment: ප්‍රසිද්ධ අදහස purge: පිරිසිදු කරන්න @@ -468,7 +460,6 @@ si: deactivate_all: සියල්ල අක්‍රිය කරන්න filter: all: සියල්ල - available: පවතින expired: ඉකුත් වී ඇත title: පෙරහන title: ඇරයුම් @@ -494,13 +485,13 @@ si: delete: මකන්න description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න - disabled: අබල කර ඇත + disabled: අබලයි enable: සබල කරන්න enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් - save_and_enable: සුරකින්න සහ සක්රිය කරන්න + save_and_enable: සුරකින්න හා සබල කරන්න setup: රිලේ සම්බන්ධතාවයක් සකසන්න signatures_not_enabled: ආරක්ෂිත මාදිලිය හෝ සීමිත ෆෙඩරේෂන් මාදිලිය සබල කර ඇති අතර රිලේ නිවැරදිව ක්‍රියා නොකරනු ඇත status: තත්වය @@ -524,21 +515,21 @@ si: add_to_report: වාර්තා කිරීමට තවත් එක් කරන්න are_you_sure: ඔබට විශ්වාසද? assign_to_self: මට පවරන්න - assigned: පවරා ඇති උපපරිපාලක by_target_domain: වාර්තා කළ ගිණුමෙහි වසම - category: වර්ගය + cancel: අවලංගු + category: ප්‍රවර්ගය category_description_html: මෙම ගිණුම සහ/හෝ අන්තර්ගතය වාර්තා කළ හේතුව වාර්තා කළ ගිණුම සමඟ සන්නිවේදනයේ සඳහන් කරනු ඇත comment: none: කිසිවක් නැත comment_description_html: 'වැඩි විස්තර සැපයීම සඳහා, %{name} ලිවීය:' created_at: වාර්තා කර ඇත - delete_and_resolve: පළ කිරීම් මකන්න - forwarded: යොමු කළා - forwarded_to: "%{domain}වෙත යොමු කරන ලදී" + delete_and_resolve: ලිපි මකන්න + forwarded: හරවා යවා ඇත + forwarded_to: "%{domain} වෙත හරවා යැවිණි" mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න - no_one_assigned: කිසි කෙනෙක නැහැ + no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න create_and_resolve: සටහන සමඟ විසඳන්න @@ -546,10 +537,9 @@ si: delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් - notes_description_html: අනෙකුත් උපපරිපාලකයින්ට සහ ඔබේ අනාගතයට සටහන් බලන්න සහ තබන්න quick_actions_description_html: 'වාර්තා කළ අන්තර්ගතය බැලීමට ඉක්මන් ක්‍රියාමාර්ගයක් ගන්න හෝ පහළට අනුචලනය කරන්න:' remote_user_placeholder: "%{instance}සිට දුරස්ථ පරිශීලකයා" - reopen: වාර්තාව නැවත විවෘත කරන්න + reopen: වාර්තාව නැවත අරින්න report: "@%{id} වාර්තා කරන්න" reported_account: වාර්තා කළ ගිණුම reported_by: විසින් වාර්තා @@ -562,17 +552,46 @@ si: target_origin: වාර්තා කළ ගිණුමේ ආරම්භය title: වාර්තා unassign: පැවරීම ඉවත් කරන්න + unknown_action_msg: 'නොදන්නා ක්‍රියාමාර්ගයකි: %{action}' unresolved: නොවිසඳී ඇත updated_at: යාවත්කාලීන කරන ලදී view_profile: පැතිකඩ බලන්න + roles: + categories: + administration: පරිපාලනය + devops: DevOps + invites: ඇරයුම් + moderation: මැදිහත්කරණය + special: විශේෂ + delete: මකන්න + privileges: + invite_users: ආරාධනා කරන්න + manage_announcements: නිවේදනය කළමනාකරණය + manage_federation: ඒකාබද්ධ කළමනාකරණය + manage_invites: ආරාධනා කළමනාකරණය + manage_reports: වාර්තා කළමනාකරණය + manage_roles: භූමිකා කළමනාකරණය + manage_rules: නීති කළමනාකරණය + manage_settings: සැකසුම් කළමනාකරණය + manage_user_access: ප්‍රවේශය කළමනාකරණය + manage_users: පරිශ්‍රීලකයින් කළමනාකරණය + view_dashboard: උපකරණ පුවරුව බලන්න + view_devops: DevOps + title: භූමිකා rules: - add_new: නීතිය එකතු කරන්න delete: මකන්න description_html: බොහෝ දෙනා සේවා කොන්දේසි කියවා එකඟ වූ බව ප්‍රකාශ කරන අතර, සාමාන්‍යයෙන් මිනිසුන් ගැටලුවක් පැනනඟින තුරු කියවා නොගනිති. පැතලි බුලට් පොයින්ට් ලිස්ට් එකකින් ඒවා ලබා දීමෙන් බැලූ බැල්මට ඔබේ සේවාදායකයේ නීති බැලීම පහසු කරන්න. තනි නීති කෙටි හා සරලව තබා ගැනීමට උත්සාහ කරන්න, නමුත් ඒවා විවිධ අයිතම වලට බෙදීමට උත්සාහ නොකරන්න. - edit: නීතිය සංස්කරණය කරන්න + edit: නීතිය සංස්කරණය empty: තවමත් සේවාදායක රීති නිර්වචනය කර නොමැත. title: සේවාදායකයේ නීති settings: + about: + manage_rules: සේවාදායකයේ නීති කළමනාකරණය + title: පිළිබඳව + appearance: + title: පෙනුම + discovery: + profile_directory: පැතිකඩ නාමාවලිය domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -582,26 +601,43 @@ si: approved: ලියාපදිංචි වීමට අනුමැතිය අවශ්‍යයි none: කිසිවෙකුට ලියාපදිංචි විය නොහැක open: ඕනෑම කෙනෙකුට ලියාපදිංචි විය හැක + title: සේවාදායකයේ සැකසුම් site_uploads: delete: උඩුගත කළ ගොනුව මකන්න destroyed_msg: අඩවිය උඩුගත කිරීම සාර්ථකව මකා ඇත! + software_updates: + documentation_link: තව දැනගන්න + release_notes: නිකුතු සටහන් + title: තිබෙන යාවත්කාල + type: වර්ගය + version: අනුවාදය statuses: - back_to_account: ගිණුම් පිටුවට ආපසු යන්න - back_to_report: වාර්තා පිටුවට ආපසු යන්න + account: කර්තෘ + application: යෙදුම + back_to_account: ගිණුමේ පිටුවට ආපසු + back_to_report: වාර්තා පිටුවට ආපසු batch: remove_from_report: වාර්තාවෙන් ඉවත් කරන්න report: වාර්තාව - deleted: මකා දමන ලදී + deleted: මකා ඇත + favourites: ප්‍රියතමයන් + history: අනුවාද ඉතිහාසය + language: භාෂාව media: title: මාධ්‍යය + metadata: පාරදත්ත no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත - title: ගිණුම් තනතුරු - with_media: මාධ්‍ය දායකත්වය + open: ලිපිය අරින්න + original_status: මුල් ලිපිය + status_changed: ලිපිය සංශෝධිතයි + title: ගිණුමේ ලිපි + trending: නැගී එන + with_media: මාධ්‍ය සමඟ strikes: actions: - delete_statuses: "%{target}ගේ පළ කිරීම් %{name} මකා දමන ලදී" + delete_statuses: "%{target}ගේ ලිපි %{name} මකා ඇත" disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" - mark_statuses_as_sensitive: "%{name} %{target}ගේ පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත" + mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" @@ -611,28 +647,35 @@ si: system_checks: database_schema_check: message_html: පොරොත්තු දත්ත සමුදා සංක්‍රමණයන් ඇත. යෙදුම අපේක්ෂිත පරිදි ක්‍රියා කරන බව සහතික කිරීමට කරුණාකර ඒවා ධාවනය කරන්න + elasticsearch_preset: + action: ප්‍රලේඛනය බලන්න + elasticsearch_preset_single_node: + action: ප්‍රලේඛනය බලන්න elasticsearch_running_check: message_html: Elasticsearch වෙත සම්බන්ධ වීමට නොහැකි විය. කරුණාකර එය ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න, නැතහොත් සම්පූර්ණ පෙළ සෙවීම අක්‍රීය කරන්න elasticsearch_version_check: message_html: 'නොගැලපෙන ඉලාස්ටික් සෙවුම් අනුවාදය: %{value}' version_comparison: Elasticsearch %{running_version} ක්‍රියාත්මක වන අතර %{required_version} අවශ්‍ය වේ rules_check: - action: සේවාදායක නීති කළමනාකරණය කරන්න + action: සේවාදායකයේ නීති කළමනාකරණය message_html: ඔබ සේවාදායක රීති කිසිවක් නිර්වචනය කර නැත. sidekiq_process_check: message_html: "%{value} පෝලිම්(ය) සඳහා Sidekiq ක්‍රියාවලියක් ක්‍රියාත්මක නොවේ. කරුණාකර ඔබේ Sidekiq වින්‍යාසය සමාලෝචනය කරන්න" + software_version_critical_check: + action: තිබෙන යාවත්කාල බලන්න + software_version_patch_check: + action: තිබෙන යාවත්කාල බලන්න tags: review: තත්‍වය සමාලෝචනය updated_msg: Hashtag සැකසුම් සාර්ථකව යාවත්කාලීන කරන ලදී title: පරිපාලනය trends: - allow: ඉඩ දෙන්න - approved: අනුමත කළා + allow: ඉඩදෙන්න + approved: අනුමතයි disallow: අවසර නොදෙන්න links: - allow: සබැඳියට ඉඩ දෙන්න + allow: සබැඳියට ඉඩදෙන්න allow_provider: ප්‍රකාශකයාට ඉඩ දෙන්න - description_html: මේවා ඔබගේ සේවාදායකය විසින් පළ කිරීම් දකින ගිණුම් මගින් දැනට බොහෝ සෙයින් බෙදා ගන්නා සබැඳි වේ. එය ඔබගේ පරිශීලකයින්ට ලෝකයේ සිදුවෙමින් පවතින දේ සොයා ගැනීමට උදවු කළ හැක. ඔබ ප්‍රකාශකයා අනුමත කරන තුරු සබැඳි කිසිවක් ප්‍රසිද්ධියේ ප්‍රදර්ශනය නොවේ. ඔබට තනි සබැඳිවලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: සබැඳියට ඉඩ නොදෙන්න disallow_provider: ප්‍රකාශකයාට ඉඩ නොදෙන්න shared_by_over_week: @@ -640,7 +683,6 @@ si: other: පසුගිය සතිය පුරා පුද්ගලයින් %{count} දෙනෙකු විසින් බෙදා ගන්නා ලදී title: නැඟී එන සබැඳි usage_comparison: ඊයේ %{yesterday} හා සසඳන විට අද %{today} වරක් බෙදා ගන්නා ලදී - only_allowed: අවසර දී ඇත pending_review: පොරොත්තු සමාලෝචනය preview_card_providers: allowed: මෙම ප්‍රකාශකයාගේ සබැඳි නැඹුරු විය හැක @@ -651,14 +693,13 @@ si: statuses: allow: පළ කිරීමට ඉඩ දෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - description_html: මේ වන විට ඔබේ සේවාදායකය දන්නා පෝස්ට් මේ වන විට බොහෝ බෙදාහරින සහ මේ මොහොතේ වැඩි කැමැත්තක් දක්වයි. එය ඔබගේ නව සහ නැවත පැමිණෙන පරිශීලකයින්ට අනුගමනය කිරීමට තවත් පුද්ගලයින් සොයා ගැනීමට උදවු කළ හැක. ඔබ කර්තෘ අනුමත කරන තෙක් පළ කිරීම් කිසිවක් ප්‍රසිද්ධියේ නොපෙන්වන අතර, කර්තෘ තම ගිණුම අන් අයට යෝජනා කිරීමට ඉඩ දෙයි. ඔබට තනි පළ කිරීම්වලට ඉඩ දීමට හෝ ප්‍රතික්ෂේප කිරීමටද හැකිය. disallow: පළ කිරීමට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: one: එක් වරක් බෙදාගත් හෝ ප්‍රිය කරන ලදී other: "%{friendly_count} වරක් බෙදාගෙන ප්‍රිය කරන ලදී" - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි tags: current_score: වත්මන් ලකුණු %{score} dashboard: @@ -667,9 +708,8 @@ si: tag_servers_dimension: ඉහළම සේවාදායකයන් tag_servers_measure: විවිධ සේවාදායකයන් tag_uses_measure: සම්පූර්ණ භාවිතය - description_html: මේවා දැනට ඔබගේ සේවාදායකය දකින බොහෝ පළ කිරීම් වල දිස්වන හැෂ් ටැග් වේ. මේ මොහොතේ මිනිසුන් වැඩිපුරම කතා කරන්නේ කුමක් දැයි සොයා ගැනීමට එය ඔබගේ පරිශීලකයින්ට උදවු කළ හැක. ඔබ ඒවා අනුමත කරන තුරු හෑෂ් ටැග් ප්‍රසිද්ධියේ නොපෙන්වයි. - listable: යෝජනා කළ හැක - not_listable: යෝජනා නොකරනු ඇත + listable: යෝජනා කළ හැකිය + not_listable: යෝජනා නොවනු ඇත not_trendable: ප්‍රවණතා යටතේ දිස් නොවනු ඇත not_usable: භාවිතා කළ නොහැක peaked_on_and_decaying: "%{date}හි උච්චතම, දැන් දිරාපත් වෙමින් පවතී" @@ -692,7 +732,6 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - description_html: A webhook Mastodon හට තෝරාගත් සිදුවීම් පිළිබඳ තත්‍ය කාලීන දැනුම්දීම් ක් ඔබේම යෙදුමට තල්ලු කිරීමට හැකියාව ලබා දෙයි, එම නිසා ඔබේ යෙදුමට ස්වයංක්‍රීයව ප්‍රතික්‍රියා අවුලුවාලීමට හැකිය. disable: අක්රිය කරන්න disabled: ආබාධිතයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න @@ -700,8 +739,8 @@ si: enable: සබල කරන්න enabled: ක්රියාකාරී enabled_events: - one: 1 සබල කළ සිදුවීමක් - other: "%{count} සබල කළ සිදුවීම්" + one: සබල සිදුවීම් 1 + other: සබල සිදුවීම් %{count} events: සිදුවීම් new: නව webhook rotate_secret: රහස කරකවන්න @@ -718,9 +757,6 @@ si: sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට suspend: ඔවුන්ගේ ගිණුම අත්හිටුවීමට - body: "%{target} යනු %{type}ක් වූ %{date}සිට %{action_taken_by} කින් මධ්‍යස්ථ තීරණයක් අභියාචනා කරයි. ඔවුන් මෙසේ ලිවීය." - next_steps: ඔබට මධ්‍යස්ථ තීරණය අවලංගු කිරීමට අභියාචනය අනුමත කළ හැකිය, නැතහොත් එය නොසලකා හරින්න. - subject: "%{username} යනු %{instance}හි මධ්‍යස්ථ තීරණයකට අභියාචනා කරයි" new_pending_account: body: නව ගිණුමේ විස්තර පහතින්. ඔබට මෙම යෙදුම අනුමත කිරීමට හෝ ප්‍රතික්ෂේප කිරීමට හැකිය. subject: නව ගිණුම සමාලෝචනය සඳහා %{instance} (%{username}) @@ -747,25 +783,25 @@ si: hint_html: ඔබට වෙනත් ගිණුමකින් මෙය වෙත මාරු වීමට අවශ්‍ය නම්, මෙහිදී ඔබට අන්වර්ථ නාමයක් සෑදිය හැක, එය පැරණි ගිණුමෙන් අනුගාමිකයින් මෙම ගිණුමට ගෙන යාමට පෙර අවශ්‍ය වේ. මෙම ක්‍රියාවම හානිකර නොවන සහ ආපසු හැරවිය හැකිවේ. ගිණුම් සංක්‍රමණය පැරණි ගිණුමෙන් ආරම්භ වේ. remove: අන්වර්ථය විසන්ධි කරන්න appearance: - advanced_web_interface: උසස් වියමන අතුරුමුහුණත + advanced_web_interface: සංකීර්ණ අතුරු මුහුණත advanced_web_interface_hint: 'ඔබට ඔබේ සම්පූර්ණ තිරයේ පළල භාවිතා කිරීමට අවශ්‍ය නම්, උසස් වෙබ් අතුරු මුහුණත ඔබට අවශ්‍ය පරිදි එකම වේලාවක බොහෝ තොරතුරු බැලීමට විවිධ තීරු වින්‍යාස කිරීමට ඉඩ දෙයි: නිවස, දැනුම්දීම්, ෆෙඩරේටඩ් කාලරාමුව, ඕනෑම ලැයිස්තු සහ හැෂ් ටැග්.' animations_and_accessibility: සජීවිකරණ සහ ප්‍රවේශ්‍යතාව confirmation_dialogs: තහවුරු කිරීමේ සංවාද discovery: සොයාගැනීම localization: - body: Mastodon ස්වේච්ඡා සේවකයන් විසින් පරිවර්තනය කර ඇත. + body: මාස්ටඩන් ස්වේච්ඡාවෙන් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. - sensitive_content: සංවේදී අන්තර්ගතය + sensitive_content: සංවේදී අන්තර්ගත application_mailer: notification_preferences: ඊමේල් මනාප වෙනස් කරන්න salutation: "%{name}," settings: 'ඊමේල් මනාප වෙනස් කරන්න: %{link}' view: 'දැක්ම:' view_profile: පැතිකඩ බලන්න - view_status: පළ කිරීම බලන්න + view_status: ලිපිය බලන්න applications: - created: යෙදුම සාර්ථකව නිර්මාණය කරන ලදී + created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී @@ -775,9 +811,8 @@ si: delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: - prefix_invited_by_user: "@%{name} ඔබට Mastodon හි මෙම සේවාදායකයට සම්බන්ධ වීමට ආරාධනා කරයි!" + prefix_invited_by_user: "@%{name} මෙම මාස්ටඩන් සේවාදායකයට ආරාධනා කර ඇත!" prefix_sign_up: අදම මාස්ටඩන් හි ලියාපදිංචි වන්න! - suffix: ගිණුමක් සමඟ, ඔබට ඕනෑම Mastodon සේවාදායකයකින් සහ තවත් බොහෝ දේ භාවිතා කරන්නන් සමඟ පුද්ගලයින් අනුගමනය කිරීමට, යාවත්කාලීන කිරීම් පළ කිරීමට සහ පණිවිඩ හුවමාරු කර ගැනීමට හැකි වනු ඇත! dont_have_your_security_key: ඔබගේ ආරක්ෂක යතුර නොමැතිද? forgot_password: මුරපදය අමතක වුනාද? invalid_reset_password_token: මුරපද යළි පිහිටුවීමේ ටෝකනය අවලංගු හෝ කල් ඉකුත් වී ඇත. කරුණාකර අලුත් එකක් ඉල්ලන්න. @@ -788,11 +823,13 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. - or_log_in_with: හෝ සමඟින් පිවිසෙන්න register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" - reset_password: මුරපදය නැවත සකසන්න - security: ආරක්ෂාව + reset_password: මුරපදය යළි සකසන්න + rules: + accept: පිළිගන්න + back: ආපසු + security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න status: account_status: ගිණුමේ තත්වය @@ -802,11 +839,11 @@ si: redirecting_to: එය දැනට %{acct}වෙත හරවා යවන බැවින් ඔබගේ ගිණුම අක්‍රියයි. view_strikes: ඔබගේ ගිණුමට එරෙහිව පසුගිය වර්ජන බලන්න too_fast: පෝරමය ඉතා වේගයෙන් ඉදිරිපත් කර ඇත, නැවත උත්සාහ කරන්න. - use_security_key: ආරක්ෂක යතුර භාවිතා කරන්න + use_security_key: ආරක්‍ෂණ යතුර භාවිතා කරන්න challenge: confirm: ඉදිරියට hint_html: "ඉඟිය: අපි ඉදිරි පැය සඳහා නැවත ඔබගේ මුරපදය ඔබෙන් නොඉල්ලමු." - invalid_password: නොවන මුරපදයකි + invalid_password: මුරපදය වැරදිය prompt: ඉදිරියට යාමට මුරපදය තහවුරු කරන්න crypto: errors: @@ -814,20 +851,24 @@ si: invalid_signature: වලංගු Ed25519 අත්සනක් නොවේ date: formats: - default: "%b %d, %Y" - with_month_name: "%B %d, %Y" + default: "%Y %b %d" + with_month_name: "%Y %B %d" datetime: distance_in_words: about_x_hours: පැය %{count} about_x_months: මාස %{count} + about_x_years: ව.%{count} + almost_x_years: ව.%{count} half_a_minute: මේ දැන් - less_than_x_minutes: මීටර් %{count} + less_than_x_minutes: විනාඩි %{count} less_than_x_seconds: මේ දැන් - x_minutes: මීටර් %{count} + over_x_years: ව.%{count} + x_days: ද.%{count} + x_minutes: විනාඩි %{count} x_months: මාස %{count} - x_seconds: "%{count}තත්" + x_seconds: තත්. %{count} deletes: - challenge_not_passed: ඔබ ඇතුළත් කළ තොරතුරු නිවැරදි නැත + challenge_not_passed: ඔබ ඇතුල් කරන ලද තොරතුරු වැරදියි confirm_password: ඔබගේ අනන්‍යතාවය තහවුරු කිරීමට ඔබගේ වත්මන් මුරපදය ඇතුලත් කරන්න confirm_username: ක්රියා පටිපාටිය තහවුරු කිරීමට ඔබගේ පරිශීලක නාමය ඇතුලත් කරන්න proceed: ගිණුම මකන්න @@ -875,6 +916,9 @@ si: your_appeal_rejected: ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත domain_validator: invalid_domain: වලංගු ඩොමේන් නාමයක් නොවේ + edit_profile: + basic_information: මූලික තොරතුරු + other: වෙනත් errors: '400': ඔබ ඉදිරිපත් කළ ඉල්ලීම අවලංගු හෝ විකෘති විය. '403': ඔබට මෙම පිටුව බැලීමට අවසර නැත. @@ -884,27 +928,28 @@ si: '422': content: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය. ඔබ කුකීස් අවහිර කරනවාද? title: ආරක්ෂක සත්‍යාපනය අසාර්ථක විය - '429': ඉල්ලීම් වැඩියි + '429': ඉල්ලීම් බොහෝය '500': content: අපට කණගාටුයි, නමුත් අපගේ පැත්තෙන් යමක් වැරදී ඇත. - title: මෙම පිටුව නිවැරදි නොවේ + title: මෙම පිටුව වැරදියි '503': තාවකාලික සේවාදායකයේ අසාර්ථක වීමක් හේතුවෙන් පිටුව සේවය කිරීමට නොහැකි විය. - noscript_html: Mastodon වෙබ් යෙදුම භාවිතා කිරීමට, කරුණාකර JavaScript සක්‍රීය කරන්න. විකල්පයක් ලෙස, ඔබේ වේදිකාව සඳහා එකක් උත්සාහ කරන්න. + noscript_html: මාස්ටඩන් වියමන යෙදුම භාවිතා කිරීමට ජාවාස්ක්‍රිප්ට් සබල කරන්න. ඊට අමතරව, ඔබගේ වේදිකාව සඳහා වන නිසග යෙදුමක් අත්හදා බලන්න. existing_username_validator: not_found: එම පරිශීලක නාමය සහිත දේශීය පරිශීලකයෙකු සොයා ගැනීමට නොහැකි විය not_found_multiple: "%{usernames}සොයා ගැනීමට නොහැකි විය" exports: archive_takeout: date: දිනය - download: ඔබගේ සුරක්ෂිතභාවය බාගන්න + download: ඔබගේ සංරක්‍ෂිතය බාගන්න hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය blocks: ඔබ අවහිර කරන්න - bookmarks: පොත් යොමු කරන්න + bookmarks: පොත්යොමු + csv: CSV domain_blocks: වසම් අවහිර කිරීම් - lists: ලැයිස්තුව + lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න storage: මාධ්‍ය ගබඩාව featured_tags: @@ -913,13 +958,14 @@ si: filters: contexts: account: පැතිකඩයන් - home: නිවස සහ ලැයිස්තු + home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් public: පොදු කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න keywords: මූල පද + statuses: තනි ලිපි title: පෙරහන සංස්කරණය errors: deprecated_api_multiple_keywords: මෙම පරාමිති පෙරහන් මූල පද එකකට වඩා අදාළ වන බැවින් මෙම යෙදුමෙන් වෙනස් කළ නොහැක. වඩාත් මෑත යෙදුමක් හෝ වෙබ් අතුරු මුහුණතක් භාවිතා කරන්න. @@ -927,21 +973,32 @@ si: index: contexts: "%{contexts}හි පෙරහන්" delete: මකන්න - empty: ඔබට පෙරහන් නොමැත. - expires_in: "%{distance}කින් කල් ඉකුත් වේ" - expires_on: "%{date}දින කල් ඉකුත් වේ" + empty: ඔබ සතුව පෙරහන් නැත. + expires_in: "%{distance} කින් ඉකුත් වේ" + expires_on: "%{date} දී ඉකුත් වේ" keywords: - one: "%{count} මූල පදය" - other: "%{count} මූල පද" + one: මූල පද %{count} + other: මූල පද %{count} + statuses: + one: ලිපි %{count} + other: ලිපි %{count} title: පෙරහන් new: save: නව පෙරහන සුරකින්න title: නව පෙරහනක් එකතු කරන්න + statuses: + back_to_filter: පෙරහනට ආපසු + batch: + remove: පෙරහනෙන් ඉවතලන්න + index: + title: පෙරූ ලිපි generic: all: සියල්ල - changes_saved_msg: වෙනස්කම් සාර්ථකව සුරකින ලදී! + cancel: අවලංගු + changes_saved_msg: වෙනස්කම් සාර්ථකව සුරැකිණි! copy: පිටපතක් delete: මකන්න + deselect: සියල්ල නොතෝරන්න none: කිසිවක් නැත order_by: විසින් ඇණවුම් කරන්න save_changes: වෙනස්කම් සුරකින්න @@ -951,24 +1008,30 @@ si: other: යමක් තවමත් හරි නැත! කරුණාකර පහත දෝෂ %{count} ක් සමාලෝචනය කරන්න imports: errors: + empty: හිස් CSV ගොනුවකි over_rows_processing_limit: පේළි %{count} කට වඩා අඩංගු වේ + too_large: ගොනුව ඉතා විශාලයි + imported: ආයාත විය modes: - merge: ඒකාබද්ධ කරන්න + merge: ඒකාබද්ධ merge_long: පවතින වාර්තා තබා නව ඒවා එකතු කරන්න overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත + titles: + lists: ලැයිස්තු ආයාත වෙමින් types: - blocking: අවහිර කිරීමේ ලැයිස්තුව - bookmarks: පොත් යොමු - domain_blocking: වසම් අවහිර කිරීමේ ලැයිස්තුව - following: පහත ලැයිස්තුව + blocking: අවහිර ලැයිස්තුව + bookmarks: පොත්යොමු + domain_blocking: වසම් අවහිර ලැයිස්තුව + following: අනුගමන ලැයිස්තුව + lists: ලැයිස්තු muting: නිහඬ කිරීමේ ලැයිස්තුව upload: උඩුගත කරන්න invites: - delete: අක්රිය කරන්න - expired: කල් ඉකුත් වී ඇත + delete: අක්‍රිය කරන්න + expired: ඉකුත් වී ඇත expires_in: '1800': විනාඩි 30 '21600': පැය 6 @@ -987,7 +1050,7 @@ si: table: expires_at: කල් ඉකුත් වේ uses: භාවිතා කරයි - title: මිනිසුන්ට ආරාධනා කරන්න + title: ආරාධනා කරන්න login_activities: authentication_methods: otp: ද්වි-සාධක සත්‍යාපන යෙදුම @@ -1036,7 +1099,7 @@ si: other_data: වෙනත් දත්ත කිසිවක් ස්වයංක්‍රීයව ගෙන නොයනු ඇත redirect: ඔබගේ ජංගම ගිණුමේ පැතිකඩ යළි-යොමු කිරීමේ දැන්වීමක් සමඟ යාවත්කාලීන කෙරෙන අතර සෙවුම් වලින් බැහැර කරනු ලැබේ moderation: - title: මධ්යස්ථභාවය + title: මැදිහත්කරණය move_handler: carry_blocks_over_text: මෙම පරිශීලකයා ඔබ අවහිර කර තිබූ %{acct}සිට මාරු විය. carry_mutes_over_text: මෙම පරිශීලකයා ඔබ නිශ්ශබ්ද කර තිබූ %{acct}වෙතින් මාරු විය. @@ -1044,37 +1107,31 @@ si: notification_mailer: admin: report: - subject: "%{name} වාර්තාවක් ඉදිරිපත් කළේය" + subject: "%{name} වාර්තාවක් යොමු කර ඇත" sign_up: subject: "%{name} අත්සන් කර ඇත" favourite: - body: 'ඔබේ පළ කිරීම %{name}විසින් ප්‍රිය කරන ලදී:' - subject: "%{name} ඔබගේ පළ කිරීම ප්‍රිය කරන ලදී" - title: නව ප්රියතම + body: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා:" + subject: "%{name} ඔබගේ ලිපියට ප්‍රිය කළා" + title: නව ප්‍රියතමය follow: body: "%{name} දැන් ඔබව අනුගමනය කරයි!" subject: "%{name} දැන් ඔබව අනුගමනය කරයි" title: නව අනුගාමිකයෙක් follow_request: - action: අනුගමනය කරන ඉල්ලීම් කළමනාකරණය කරන්න + action: අනුගමන ඉල්ලීම් කළමනාකරණය body: "%{name} ඔබව අනුගමනය කිරීමට ඉල්ලා ඇත" subject: 'පොරොත්තු අනුගාමිකයා: %{name}' - title: නව අනුගමනය ඉල්ලීම + title: නව අනුගමන ඉල්ලීම mention: action: පිළිතුර - body: 'ඔබව මෙහි %{name} කින් සඳහන් කර ඇත:' - subject: ඔබව %{name}මගින් සඳහන් කර ඇත + body: "%{name} ඔබව මෙහි සඳහන් කර ඇත:" + subject: "%{name} ඔබව සඳහන් කර ඇත" title: නව සඳැහුම - poll: - subject: "%{name} න් මත විමසුමක් අවසන් විය" - reblog: - body: 'ඔබේ පළ කිරීම %{name}කින් වැඩි කරන ලදී:' - subject: "%{name} ඔබේ පළ කිරීම ඉහළ නැංවීය" - title: නව තල්ලුවක් status: subject: "%{name} දැන් පළ කළා" update: - subject: "%{name} පළ කිරීමක් සංස්කරණය කළා" + subject: "%{name} ලිපිය සංශෝධනය කළා" notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' @@ -1084,11 +1141,8 @@ si: decimal_units: format: "%n%u" units: - billion: බී million: ද.ල. - quadrillion: ප්‍රශ්නය thousand: ද. - trillion: ටී otp_authentication: code_hint: තහවුරු කිරීමට ඔබගේ සත්‍යාපන යෙදුම මගින් ජනනය කරන ලද කේතය ඇතුළු කරන්න description_html: ඔබ සත්‍යාපන යෙදුමක් භාවිතයෙන් ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්නේ නම්, ලොගින් වීමේදී ඔබට ඔබගේ දුරකථනය සන්තකයේ තබා ගැනීමට අවශ්‍ය වනු ඇත, එය ඔබට ඇතුළු වීමට ටෝකන ජනනය කරයි. @@ -1105,19 +1159,21 @@ si: truncate: "…" polls: errors: - already_voted: ඔබ දැනටමත් මෙම මත විමසුමට ඡන්දය දී ඇත - duplicate_options: අනුපිටපත් අයිතම අඩංගු වේ + already_voted: ඔබ මෙම මත විමසුමට ඡන්දය දී ඇත duration_too_long: අනාගතයට බොහෝ දුරයි - duration_too_short: ඉතා ඉක්මනින් වේ - expired: මත විමසුම දැනටමත් අවසන් වී ඇත + expired: මත විමසුම දැනටමත් නිමා වී ඇත invalid_choice: තෝරාගත් ඡන්ද විකල්පය නොපවතී - over_character_limit: එක් එක් අක්ෂර %{max} ට වඩා දිගු විය නොහැක - too_few_options: එක් අයිතමයකට වඩා තිබිය යුතුය - too_many_options: අයිතම %{max} කට වඩා අඩංගු විය නොහැක + self_vote: ඔබගේ මත විමසුමට ජන්දය දීමට නොහැකිය + too_few_options: එක් අථකයකට වඩා තිබිය යුතුය + too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් posting_defaults: පෙරනිමි පළ කිරීම public_timelines: පොදු කාලරේඛා + privacy: + search: සොයන්න + privacy_policy: + title: රහස්‍යතා ප්‍රතිපත්තිය reactions: errors: limit_reached: විවිධ ප්‍රතික්‍රියා වල සීමාව ළඟා විය @@ -1133,7 +1189,7 @@ si: most_recent: මෑතකාලීන moved: මාරු කළා mutual: අන්යෝන්ය - primary: ප්රාථමික + primary: ප්‍රාථමික relationship: සම්බන්ධතාවය remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න @@ -1158,36 +1214,45 @@ si: browser: අතිරික්සුව browsers: alipay: අලිපේ + blackberry: බ්ලැක්බෙරි chrome: ක්‍රෝම් edge: මයික්‍රොසොෆ්ට් එඩ්ගේ electron: ඉලෙක්ට්‍රෝන් firefox: ෆයර්ෆොක්ස් generic: නොදන්නා අතිරික්සුවකි + huawei_browser: හුආවේ අතිරික්සුව ie: ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් micro_messenger: මයික්‍රොමැසෙන්ජර් - nokia: Nokia S40 Ovi බ්‍රව්සරය + nokia: නොකියා S40 Ovi අතිරික්සුව opera: ඔපෙරා otter: ඔටර් + phantom_js: PhantomJS qq: කියුකියු අතිරික්සුව safari: සෆාරි + uc_browser: UC අතිරික්සුව + unknown_browser: නොදන්නා අතිරික්සුවකි weibo: වෙයිබො - current_session: වත්මන් සැසිය - description: "%{browser} මත %{platform}" - explanation: මේවා දැනට ඔබගේ Mastodon ගිණුමට ලොග් වී ඇති වෙබ් බ්‍රව්සර් වේ. + current_session: වත්මන් වාරය + description: "%{platform} හි %{browser}" + explanation: ඔබගේ මාස්ටඩන් ගිණුමට පිවිසීම සඳහා භාවිතා කර තිබෙන අතිරික්සු. ip: අ.ජා. කෙ. (IP) platforms: adobe_air: ඇඩෝබි එයාර් android: ඇන්ඩ්‍රොයිඩ් + blackberry: බ්ලැක්බෙරි + chrome_os: ChromeOS firefox_os: ෆයර්ෆොක්ස් ඕඑස් ios: අයිඕඑස් + kai_os: KaiOS linux: ලිනක්ස් mac: මැක්ඕඑස් + unknown_platform: නොදන්නා වේදිකාවකි windows: වින්ඩෝස් windows_mobile: වින්ඩෝස් මොබයිල් windows_phone: වින්ඩෝස් පෝන් revoke: අවලංගු කරන්න - revoke_success: සැසිය සාර්ථකව අවලංගු කරන ලදී - title: සැසිවාර + revoke_success: වාරය සාර්ථකව අවලංගු කෙරිණි + title: වාර view_authentication_history: ඔබගේ ගිණුමේ සත්‍යාපන ඉතිහාසය බලන්න settings: account: ගිණුම @@ -1195,8 +1260,8 @@ si: aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම authorized_apps: අවසර ලත් යෙදුම් - back: Mastodon වෙත නැවත යන්න - delete: ගිණුම මකා දැමීම + back: මාස්ටඩන් වෙත ආපසු + delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය export: දත්ත නිර්යාතය @@ -1205,13 +1270,12 @@ si: import_and_export: ආයාත හා නිර්යාත migrate: ගිණුම් සංක්‍රමණය notifications: දැනුම්දීම් - preferences: මනාප - profile: පැතිකඩ + preferences: අභිප්‍රේත + profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම - strikes: මධ්‍යස්ථ වැඩ වර්ජන two_factor_authentication: ද්වි සාධක Aut - webauthn_authentication: ආරක්ෂක යතුරු + webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: attached: audio: @@ -1219,14 +1283,13 @@ si: other: "%{count} ශ්රව්ය" description: 'අමුණා ඇත: %{attached}' image: - one: "%{count} රූපය" - other: පින්තූර %{count} + one: රූප %{count} + other: රූප %{count} video: - one: "%{count} වීඩියෝ" - other: වීඩියෝ %{count} - boosted_from_html: "%{acct_link}සිට වැඩි කරන ලදී" + one: දෘශ්‍යක %{count} + other: දෘශ්‍යක %{count} content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම: %{warning}' - default_language: අතුරු මුහුණත් භාෂාවට සමානයි + default_language: අතුරු මුහුණතේ භාෂාවම disallowed_hashtags: one: 'අනුමත නොකළ හැෂ් ටැගයක් අඩංගු විය: %{tags}' other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' @@ -1239,15 +1302,14 @@ si: direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක - reblog: බූස්ට් එකක් ඇලවිය නොහැක poll: total_people: - one: "%{count} පුද්ගලයෙක්" - other: පුද්ගලයන් %{count} + one: පුද්ගලයින් %{count} + other: පුද්ගලයින් %{count} total_votes: - one: "%{count} ඡන්ද" + one: ඡන්ද %{count} යි other: ඡන්ද %{count} යි - vote: ඡන්දය දෙන්න + vote: ඡන්දය show_more: තව පෙන්වන්න show_newer: අලුත්ම පෙන්වන්න show_older: පැරණි පෙන්වන්න @@ -1264,37 +1326,32 @@ si: statuses_cleanup: enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි - exceptions: ව්යතිරේක + exceptions: හැර දැමීම් explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. - ignore_favs: ප්‍රියතමයන් නොසලකා හරින්න - ignore_reblogs: වැඩි කිරීම් නොසලකා හරින්න + ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක - interaction_exceptions_explanation: පළ කිරීම් වරක් ඒවා ඉක්මවා ගිය පසු ප්‍රියතම හෝ බූස්ට් සීමාවට පහළින් ගියහොත් ඒවා මැකීමට සහතිකයක් නොමැති බව සලකන්න. - keep_direct: සෘජු පණිවිඩ තබා ගන්න - keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මකන්නේ නැත - keep_media: මාධ්‍ය ඇමුණුම් සමඟ පළ කිරීම් තබා ගන්න + keep_direct: සෘජු පණිවිඩ තබාගන්න + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත + keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි - keep_polls: ඡන්ද තබා ගන්න - keep_polls_hint: ඔබගේ ඡන්ද විමසීම් කිසිවක් මකන්නේ නැත - keep_self_bookmark: ඔබ පිටු සලකුණු කළ පළ කිරීම් තබා ගන්න - keep_self_bookmark_hint: ඔබ ඔබේම පළ කිරීම් පිටු සලකුණු කර ඇත්නම් ඒවා මකා නොදමන්න - keep_self_fav: ඔබ කැමති පළ කිරීම් තබා ගන්න - keep_self_fav_hint: ඔබ ඒවාට කැමති නම් ඔබේම පළ කිරීම් මකා නොදමන්න + keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත + keep_self_bookmark: ඔබ පොත්යොමු තැබූ ලිපි තබාගන්න + keep_self_bookmark_hint: ඔබගේම ලිපි වලට පොත්යොමු තබා ඇත්නම් ඒවා මකා නොදැමෙයි + keep_self_fav: ඔබ ප්‍රිය කළ ලිපි තබාගන්න + keep_self_fav_hint: ඔබගේම ලිපි වලට ප්‍රිය කර ඇත්නම් ඒවා මකා නොදැමෙයි min_age: - '1209600': සති 2 යි - '15778476': මාස 6 යි - '2629746': මාස 1 යි - '31556952': වසර 1 යි - '5259492': මාස 2 ක් - '604800': 1 සතිය - '63113904': අවුරුදු 2 ක් - '7889238': මාස 3 යි + '1209600': සති 2 + '15778476': මාස 6 + '2629746': මාස 1 + '31556952': අවුරුදු 1 + '5259492': මාස 2 + '604800': සති 1 + '63113904': අවුරුදු 2 + '7889238': මාස 3 min_age_label: වයස් සීමාව - min_favs: අඩුම තරමින් පෝස්ට් ප්‍රිය කරන ලෙස තබා ගන්න - min_reblogs: අඩුම තරමේ පෝස්ට් බූස්ට් කරගෙන තියාගන්න - min_reblogs_hint: අඩුම තරමින් මෙම වාර ගණන වැඩි කර ඇති ඔබගේ පළ කිරීම් කිසිවක් මකා නොදමන්න. බූස්ට් ගණන නොතකා පළ කිරීම් මැකීමට හිස්ව තබන්න + min_favs: අවම වශයෙන් ප්‍රිය කළ ලිපි තබාගන්න stream_entries: sensitive_content: සංවේදී අන්තර්ගතයකි strikes: @@ -1303,11 +1360,15 @@ si: tags: does_not_match_previous_name: පෙර නමට නොගැලපේ themes: - contrast: Mastodon (ඉහළ වෙනස) - default: මැස්ටෝඩන් (අඳුරු) - mastodon-light: මැස්ටෝඩන් (ආලෝකය) + default: මාස්ටඩන් (අඳුරු) + mastodon-light: මාස්ටඩන් (දීප්ත) + time: + formats: + default: "%Y %b %d, %H:%M" + month: "%Y %b" + with_time_zone: "%Y %b %d, %H:%M %Z" two_factor_authentication: - add: එකතු කරන්න + add: එකතු disable: 2FA අබල කරන්න disabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව අබල කර ඇත edit: සංස්කරණය @@ -1332,11 +1393,11 @@ si: subject: "%{date} සිට ඔබගේ අභියාචනය ප්‍රතික්ෂේප කර ඇත" title: අභියාචනය ප්‍රතික්ෂේප විය backup_ready: - explanation: ඔබ ඔබේ Mastodon ගිණුමේ සම්පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගත කිරීම සඳහා සූදානම්! + explanation: ඔබගේ මාස්ටඩන් ගිණුමේ පූර්ණ උපස්ථයක් ඉල්ලා ඇත. එය දැන් බාගැනීමට හැකිය! subject: ඔබගේ සංරක්ෂිතය බාගැනීමට සූදානම්ය title: සංරක්ෂිත රැගෙන යාම suspicious_sign_in: - change_password: ඔබගේ මුරපදය වෙනස් කරන්න + change_password: මුරපදය වෙනස් කරන්න details: 'පුරනය වීමේ විස්තර මෙන්න:' explanation: අපි නව IP ලිපිනයකින් ඔබගේ ගිණුමට පුරනය වීමක් අනාවරණය කරගෙන ඇත. further_actions_html: මෙය ඔබ නොවේ නම්, අපි ඔබට වහාම %{action} ලෙස නිර්දේශ කර ඔබගේ ගිණුම සුරක්ෂිතව තබා ගැනීමට සාධක දෙකක සත්‍යාපනය සබල කරන්න. @@ -1349,9 +1410,7 @@ si: spam: ආයාචිත තැපැල් violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: - delete_statuses: ඔබගේ සමහර පළ කිරීම් ප්‍රජා මාර්ගෝපදේශ එකක් හෝ කිහිපයක් උල්ලංඝනය කරන බව සොයා ගෙන ඇති අතර පසුව %{instance}හි උපපරිපාලකයින් විසින් ඉවත් කර ඇත. disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - mark_statuses_as_sensitive: ඔබගේ සමහර පළ කිරීම් %{instance}හි පරිපාලකයින් විසින් සංවේදී ලෙස සලකුණු කර ඇත. මෙයින් අදහස් කරන්නේ පෙරදසුනක් දර්ශනය වීමට පෙර පුද්ගලයින්ට පළ කිරීම් වල මාධ්‍ය තට්ටු කිරීමට අවශ්‍ය වනු ඇති බවයි. අනාගතයේදී පළ කිරීමේදී ඔබට මාධ්‍ය සංවේදී ලෙස සලකුණු කළ හැක. sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. @@ -1361,25 +1420,25 @@ si: delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" - none: "%{acct}සඳහා අනතුරු ඇඟවීම" - sensitive: "%{acct} හි ඔබගේ පළ කිරීම් මෙතැන් සිට සංවේදී ලෙස සලකුණු කෙරේ" + none: "%{acct} සඳහා අවවාදය" + sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත suspend: ඔබගේ ගිණුම %{acct} අත්හිටුවා ඇත title: - delete_statuses: පළ කිරීම් ඉවත් කරන ලදී + delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත none: අවවාදයයි - sensitive: ගිණුම සංවේදී ලෙස ලකුණු කර ඇත - silence: ගිණුම සීමා සහිතයි + sensitive: ගිණුම සංවේදී බව යොදා ඇත + silence: ගිණුම සීමා කර ඇත suspend: ගිණුම අත්හිටුවා ඇත welcome: - edit_profile_action: සැකසුම් පැතිකඩ + edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: පළ කිරීම ආරම්භ කරන්න + final_action: ලිපි පළ කරන්න full_handle: ඔබේ සම්පූර්ණ හසුරුව full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. - subject: Mastodon වෙත සාදරයෙන් පිළිගනිමු + subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: follow_limit_reached: ඔබට පුද්ගලයින් %{limit} කට වඩා අනුගමනය කළ නොහැක @@ -1388,9 +1447,10 @@ si: seamless_external_login: ඔබ බාහිර සේවාවක් හරහා ලොග් වී ඇත, එබැවින් මුරපදය සහ ඊමේල් සැකසුම් නොමැත. signed_in_as: 'මෙසේ පුරනය වී ඇත:' verification: - verification: සත්යාපනය + here_is_how: කෙසේදැයි මෙන්න + verification: සත්‍යාපනය webauthn_credentials: - add: නව ආරක්ෂක යතුර එක් කරන්න + add: නව ආරක්‍ෂණ යතුර එක් කරන්න create: error: ඔබගේ ආරක්ෂක යතුර එක් කිරීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව එක් කරන ලදී. @@ -1400,9 +1460,9 @@ si: destroy: error: ඔබගේ ආරක්ෂක යතුර මැකීමේ ගැටලුවක් ඇති විය. කරුණාකර නැවත උත්සාහ කරන්න. success: ඔබගේ ආරක්ෂක යතුර සාර්ථකව මකා ඇත. - invalid_credential: වලංගු නොවන ආරක්ෂක යතුර + invalid_credential: ආරක්‍ෂණ යතුර වලංගු නොවේ nickname_hint: ඔබගේ නව ආරක්ෂක යතුරේ අන්වර්ථ නාමය ඇතුළත් කරන්න not_enabled: ඔබ තවමත් WebAuthn සබල කර නැත not_supported: මෙම බ්‍රවුසරය ආරක්ෂක යතුරු සඳහා සහය නොදක්වයි otp_required: ආරක්ෂක යතුරු භාවිතා කිරීමට කරුණාකර පළමුව ද්වි-සාධක සත්‍යාපනය සක්‍රීය කරන්න. - registered_on: "%{date}හි ලියාපදිංචි වී ඇත" + registered_on: "%{date} දී ලියාපදිංචි වී ඇත" diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 23e63ef42c..917d3791f6 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -7,10 +7,9 @@ si: account_migration: acct: ඔබට යාමට අවශ්‍ය ගිණුමේ username@domain සඳහන් කරන්න account_warning_preset: - text: ඔබට URL, හෑෂ් ටැග් සහ සඳහන් කිරීම් වැනි පෝස්ට් සින්ටැක්ස් භාවිතා කළ හැක + text: ඔබට ඒ.ස.නි., පූරක අනන්‍යන සහ සැඳහුම් වැනි ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: - include_statuses: මධ්‍යස්ථ ක්‍රියාව හෝ අනතුරු ඇඟවීමට හේතු වී ඇත්තේ කුමන පළ කිරීම්දැයි පරිශීලකයා දකිනු ඇත send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" @@ -38,17 +37,16 @@ si: email: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑලක් එවනු ලැබේ header: PNG, GIF හෝ JPG. වැඩිම %{size}. %{dimensions}px දක්වා අඩු කරනු ඇත inbox_url: ඔබට භාවිතා කිරීමට අවශ්‍ය රිලේ හි මුල් පිටුවෙන් URL එක පිටපත් කරන්න - irreversible: පෙරහන පසුව ඉවත් කළද, පෙරූ පළ කිරීම් ආපසු හැරවිය නොහැකි ලෙස අතුරුදහන් වනු ඇත - locale: පරිශීලක අතුරුමුහුණතේ භාෂාව, ඊමේල් සහ තල්ලු දැනුම්දීම් + irreversible: පෙරහන පසුව ඉවත් කළ ද, පෙරූ ලිපි අප්‍රතිවර්ත්‍යව අතුරුදහන් වනු ඇත + locale: වි-තැපැල්, තල්ලු දැනුම්දීම් සහ පරිශ්‍රීලක අතුරුමුහුණතේ භාෂාව password: අවම වශයෙන් අක්ෂර 8 ක් භාවිතා කරන්න - phrase: පළ කිරීමක පෙළ හෝ අන්තර්ගත අනතුරු ඇඟවීම නොසලකා ගැලපේ + phrase: ලිපිවල පෙළ හෝ අන්තර්ගත අවවාද නොසලකා ගැළපෙනු ඇත scopes: යෙදුමට ප්‍රවේශ වීමට ඉඩ දෙන්නේ කුමන API වලටද. ඔබ ඉහළ මට්ටමේ විෂය පථයක් තෝරා ගන්නේ නම්, ඔබට තනි ඒවා තෝරා ගැනීමට අවශ්‍ය නොවේ. - setting_aggregate_reblogs: මෑතකදී බූස්ට් කරන ලද පළ කිරීම් සඳහා නව බූස්ට් පෙන්වන්න එපා (අලුතින් ලැබුණු බූස්ට් වලට පමණක් බලපායි) - setting_always_send_emails: සාමාන්‍යයෙන් ඔබ Mastodon සක්‍රියව භාවිතා කරන විට විද්‍යුත් තැපැල් දැනුම්දීම් නොයවනු ඇත + setting_always_send_emails: ඔබ නිතර මාස්ටඩන් භාවිතා කරන විට වි-තැපැල් දැනුම්දීම් නොලැබෙයි setting_default_sensitive: සංවේදී මාධ්‍ය පෙරනිමියෙන් සඟවා ඇති අතර ක්ලික් කිරීමකින් හෙළිදරව් කළ හැක - setting_display_media_default: සංවේදී ලෙස සලකුණු කළ මාධ්‍ය සඟවන්න - setting_display_media_hide_all: සෑම විටම මාධ්‍ය සඟවන්න - setting_display_media_show_all: සෑම විටම මාධ්‍ය පෙන්වන්න + setting_display_media_default: සංවේදී බව සලකුණු කළ මාධ්‍ය සඟවන්න + setting_display_media_hide_all: සැමවිට මාධ්‍ය සඟවන්න + setting_display_media_show_all: සැමවිට මාධ්‍ය පෙන්වන්න setting_use_blurhash: අනුක්‍රමණ සැඟවුණු දෘශ්‍යවල වර්ණ මත පදනම් වන නමුත් ඕනෑම විස්තරයක් අපැහැදිලි කරයි setting_use_pending_items: සංග්‍රහය ස්වයංක්‍රීයව අනුචලනය කරනවා වෙනුවට ක්ලික් කිරීමක් පිටුපස කාලරේඛා යාවත්කාලීන සඟවන්න whole_word: මූල පදය හෝ වාක්‍ය ඛණ්ඩය අක්ෂරාංක පමණක් වන විට, එය යෙදෙන්නේ එය සම්පූර්ණ වචනයට ගැලපේ නම් පමණි @@ -58,14 +56,14 @@ si: domain: මෙය විද්‍යුත් තැපැල් ලිපිනයේ හෝ එය භාවිතා කරන MX වාර්තාවේ පෙන්වන ඩොමේන් නාමය විය හැක. ලියාපදිංචි වූ පසු ඒවා පරීක්ෂා කරනු ලැබේ. with_dns_records: ලබා දී ඇති වසමේ DNS වාර්තා විසඳීමට උත්සාහ කරන අතර ප්‍රතිඵල ද අවහිර කරනු ලැබේ filters: - action: පළ කිරීමක් පෙරහනට ගැළපෙන විට සිදු කළ යුතු ක්‍රියාව තෝරන්න + action: ලිපියක් පෙරහනට ගැළපෙන විට ඉටු විය යුතු ක්‍රියාමාර්ගය තෝරන්න actions: hide: පෙරහන් කළ අන්තර්ගතය සම්පූර්ණයෙන්ම සඟවන්න, එය නොපවතින ලෙස හැසිරෙන්න warn: පෙරහන මාතෘකාව සඳහන් කරන අනතුරු ඇඟවීමක් පිටුපස පෙරූ අන්තර්ගතය සඟවන්න form_challenge: current_password: ඔබ ආරක්ෂිත ප්‍රදේශයකට ඇතුල් වේ imports: - data: CSV ගොනුව වෙනත් Mastodon සේවාදායකයකින් අපනයනය කරන ලදී + data: CSV ගොනුව වෙනත් මාස්ටඩන් සේවාදායකයකින් නිර්යාත කර ඇත invite_request: text: මෙය ඔබගේ අයදුම්පත සමාලෝචනය කිරීමට අපට උපකාරී වනු ඇත ip_block: @@ -84,7 +82,7 @@ si: tag: name: ඔබට අකුරු වල ආවරණය පමණක් වෙනස් කළ හැකිය, උදාහරණයක් ලෙස, එය වඩාත් කියවිය හැකි කිරීමට user: - chosen_languages: පරීක්ෂා කළ විට, තෝරාගත් භාෂාවලින් පළ කිරීම් පමණක් පොදු කාලරේඛා තුළ සංදර්ශන කෙරේ + chosen_languages: සබල නම්, තෝරාගත් භාෂාවල ලිපි පමණක් ප්‍රසිද්ධ කාල රේඛාවේ දිස්වේ webhook: events: යැවීමට සිදුවීම් තෝරන්න url: සිදුවීම් යවනු ලබන ස්ථානය @@ -99,16 +97,16 @@ si: acct: නව ගිණුමේ හැසිරවීම account_warning_preset: text: පෙර සැකසූ පෙළ - title: ශීර්ෂය + title: සිරැසිය admin_account_action: - include_statuses: විද්‍යුත් තැපෑලෙහි වාර්තා කරන ලද පළ කිරීම් ඇතුළත් කරන්න + include_statuses: වි-තැපෑලට වාර්තා කරන ලද ලිපි ද ඇතුළත් කරන්න send_email_notification: විද්‍යුත් තැපෑලෙන් පරිශීලකයාට දැනුම් දෙන්න text: අභිරුචි අනතුරු ඇඟවීම type: ක්‍රියාමාර්ගය types: disable: කැටි කරන්න none: අනතුරු ඇඟවීමක් යවන්න - sensitive: පවතී + sensitive: සංවේදීතාව silence: සීමාව suspend: අත්හිටුවන්න warning_preset_id: අනතුරු ඇඟවීමේ පෙරසිටුවක් භාවිතා කරන්න @@ -123,12 +121,11 @@ si: defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න avatar: අවතාරය - bot: මෙය ස්වයං ක්‍රමලේඛගත ගිණුමකි - chosen_languages: භාෂා පෙරහන් කරන්න - confirm_new_password: නව මුර පදය තහවුරු කරන්න - confirm_password: මුරපදය තහවුරු කර ඇත - context: සන්දර්භ පෙරහන් කරන්න - current_password: වත්මන් මුර පදය + chosen_languages: භාෂා පෙරන්න + confirm_new_password: නව මුරපදය තහවුරු කරන්න + confirm_password: මුරපදය තහවුරු කරන්න + context: සන්දර්භ පෙරන්න + current_password: වත්මන් මුරපදය data: දත්ත display_name: ප්රදර්ශන නාමය email: වි-තැපැල් ලිපිනය @@ -138,28 +135,25 @@ si: honeypot: "%{label} (පුරවන්න එපා)" inbox_url: රිලේ එන ලිපි URL irreversible: සැඟවීම වෙනුවට අතහරින්න - locale: අතුරු මුහුණත භාෂාව + locale: අතුරු මුහුණතේ භාෂාව max_uses: උපරිම භාවිත ගණන new_password: නව මුරපදය - note: ජෛව otp_attempt: ද්වි සාධක කේතය password: මුරපදය phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න - setting_aggregate_reblogs: කණ්ඩායම් කාලරේඛාව වැඩි කරයි setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න - setting_boost_modal: වැඩි කිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න - setting_default_language: පළ කිරීමේ භාෂාව - setting_default_privacy: පුද්ගලිකත්වය පළ කිරීම - setting_default_sensitive: සෑම විටම මාධ්‍ය සංවේදී ලෙස සලකුණු කරන්න - setting_delete_modal: පළ කිරීමක් මැකීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න + setting_default_language: ලිපිවල භාෂාව + setting_default_privacy: ලිපියේ රහස්‍යතාව + setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න + setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය - setting_display_media_default: පෙරනිමිය + setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න setting_display_media_show_all: සියල්ල පෙන්වන්න - setting_expand_spoilers: අන්තර්ගත අනතුරු ඇඟවීම් සමඟ සලකුණු කර ඇති පළ කිරීම් සැමවිටම පුළුල් කරන්න + setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න @@ -167,10 +161,10 @@ si: setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න setting_use_blurhash: සැඟවුණු මාධ්‍ය සඳහා වර්ණවත් අනුක්‍රමික පෙන්වන්න - setting_use_pending_items: මන්දගාමී මාදිලිය + setting_use_pending_items: මන්දගාමී ප්‍රකාරය severity: බරපතලකම sign_in_token_attempt: ආරක්‍ෂණ කේතය - title: ශීර්ෂය + title: සිරැසිය type: ආයාත වර්ගය username: පරිශීලක නාමය username_or_email: පරි. නාමය හෝ වි-තැපෑල @@ -183,10 +177,16 @@ si: actions: hide: සම්පූර්ණයෙන්ම සඟවන්න warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + form_admin_settings: + custom_css: අභිරුචි CSS + profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න + site_terms: රහස්‍යතා ප්‍රතිපත්තිය + site_title: සේවාදායකයේ නම + theme: පෙරනිමි තේමාව interactions: must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න - must_be_following_dm: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගෙන් සෘජු පණිවිඩ අවහිර කරන්න + must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස invite_request: @@ -195,18 +195,16 @@ si: comment: අදහස ip: අ.ජා. කෙ. (IP) severities: - no_access: ප්රවේශය අවහිර කරන්න + no_access: ප්‍රවේශය අවහිර කරන්න sign_up_requires_approval: ලියාපදිංචි වීම සීමා කරන්න severity: නීතිය notification_emails: - appeal: යමෙක් උපපරිපාලක තීරණයකට අභියාචනා කරයි digest: digest ඊමේල් යවන්න - favourite: කවුරුහරි ඔබේ පළ කිරීම ප්‍රිය කළා + favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා follow: කවුරුහරි ඔබව අනුගමනය කළා follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය mention: කවුරුහරි ඔබව සඳහන් කළා pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - reblog: කවුරුහරි ඔබේ පළ කිරීම වැඩි කළා report: නව වාර්තාවක් ඉදිරිපත් කෙරේ trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ rule: @@ -215,11 +213,19 @@ si: listable: මෙම හැෂ් ටැගය සෙවීම් සහ යෝජනා වල දිස් වීමට ඉඩ දෙන්න name: හෑෂ් ටැගය trendable: මෙම හැෂ් ටැගය ප්‍රවණතා යටතේ දිස් වීමට ඉඩ දෙන්න - usable: මෙම හැෂ් ටැගය භාවිතා කිරීමට පළ කිරීම් වලට ඉඩ දෙන්න + usable: ලිපි සඳහා මෙම පූරක අනන්‍යනය භාවිතයට ඉඩදෙන්න + user: + role: භූමිකාව + time_zone: වේලා කලාපය + user_role: + color: චිහ්නයේ පාට + name: නම + permissions_as_keys: අවසර + position: ප්‍රමුඛත්‍වය webhook: events: සබල කළ සිදුවීම් url: අන්ත ලක්ෂ්‍ය URL - 'no': නැත + 'no': නැහැ recommended: නිර්දේශිත required: mark: "*" From 88fc73dbbc7b08aca1153d53ec530e725492c65f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 13:13:14 +0200 Subject: [PATCH 212/237] New Crowdin Translations (automated) (#27277) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/si.json | 16 ++- config/locales/doorkeeper.si.yml | 8 +- config/locales/ko.yml | 2 +- config/locales/si.yml | 142 ++++++++++++------------ config/locales/simple_form.si.yml | 23 ++-- 7 files changed, 98 insertions(+), 95 deletions(-) diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 4b055f53a4..85d6f2474a 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -190,6 +190,7 @@ "conversation.open": "কথপোকথন দেখান", "conversation.with": "{names} এর সঙ্গে", "copypaste.copied": "অনুলিপিকৃত", + "copypaste.copy_to_clipboard": "ক্লিপবোর্ডে কপি করুন", "directory.federated": "পরিচিত ফেডিভারসের থেকে", "directory.local": "শুধু {domain} থেকে", "directory.new_arrivals": "নতুন আগত", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index c6993c809c..3814e69151 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -593,6 +593,7 @@ "search_results.all": "Semua", "search_results.hashtags": "Tanda pagar", "search_results.nothing_found": "Tidak dapat menemui apa-apa untuk istilah carian tersebut", + "search_results.see_all": "Lihat semua", "search_results.statuses": "Hantaran", "search_results.title": "Mencari {q}", "server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 4d116bfd31..632e716bca 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -1,6 +1,7 @@ { "about.blocks": "මැදිහත්කරණ සේවාදායක", "about.contact": "සබඳතාව:", + "about.disclaimer": "මාස්ටඩන් යනු නිදහස් විවෘත මූලාශ්‍ර මෘදුකාංගයකි. එය මාස්ටඩන් gGmbH හි වෙළඳ නාමයකි.", "about.domain_blocks.suspended.title": "අත්හිටුවා ඇත", "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", @@ -25,6 +26,7 @@ "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", "account.go_to_profile": "පැතිකඩට යන්න", + "account.joined_short": "එක් වූ දිනය", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", "account.media": "මාධ්‍යය", "account.mention": "@{name} සඳහන් කරන්ක", @@ -102,6 +104,8 @@ "compose_form.publish_form": "නව ලිපිය", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "වෙනස්කම් සුරකින්න", + "compose_form.spoiler.marked": "අන්තර්ගත අවවාදය ඉවත් කරන්න", + "compose_form.spoiler.unmarked": "අන්තර්ගත අවවාදයක් එක් කරන්න", "compose_form.spoiler_placeholder": "අවවාදය මෙහි ලියන්න", "confirmation_modal.cancel": "අවලංගු", "confirmations.block.block_and_report": "අවහිර කර වාර්තා කරන්න", @@ -131,7 +135,7 @@ "directory.new_arrivals": "නව පැමිණීම්", "directory.recently_active": "මෑත දී සක්‍රියයි", "disabled_account_banner.account_settings": "ගිණුමේ සැකසුම්", - "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම තත්ත්වය ඔබේ වෙබ් අඩවියට ඇතුළත් කරන්න.", + "embed.instructions": "පහත කේතය පිටපත් කිරීමෙන් මෙම ලිපිය ඔබගේ අඩවියට කාවද්දන්න.", "embed.preview": "මෙන්න එය පෙනෙන අන්දම:", "emoji_button.activity": "ක්‍රියාකාරකම", "emoji_button.clear": "මකන්න", @@ -151,7 +155,7 @@ "empty_column.account_timeline": "මෙහි ලිපි නැත!", "empty_column.account_unavailable": "පැතිකඩ නොතිබේ", "empty_column.blocks": "කිසිදු පරිශීලකයෙකු අවහිර කර නැත.", - "empty_column.bookmarked_statuses": "ඔබට තවමත් පිටු සලකුණු කළ මෙවලම් කිසිවක් නොමැත. ඔබ එකක් පිටු සලකුණු කළ විට, එය මෙහි පෙන්වනු ඇත.", + "empty_column.bookmarked_statuses": "ඔබ සතුව පොත්යොමු තබන ලද ලිපි කිසිවක් නැත. ඔබ පොත්යොමුවක් තබන විට, එය මෙහි දිස්වනු ඇත.", "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", @@ -353,7 +357,7 @@ "report.forward": "{target} වෙත හරවන්න", "report.forward_hint": "ගිණුම වෙනත් සේවාදායකයකින්. වාර්තාවේ නිර්නාමික පිටපතක් එතනටත් එවන්න?", "report.mute": "නිහඬ", - "report.mute_explanation": "ඔබට ඔවුන්ගේ පෝස්ට් නොපෙනේ. ඔවුන්ට තවමත් ඔබව අනුගමනය කිරීමට සහ ඔබේ පළ කිරීම් දැකීමට හැකි අතර ඒවා නිශ්ශබ්ද කර ඇති බව නොදැනේ.", + "report.mute_explanation": "ඔබ ඔවුන්ගේ ලිපි නොදකිනු ඇත. ඔවුන්ට තවමත් ඔබව අනුගමනයට සහ ඔබගේ ලිපි දැකීමට හැකි අතර ඔවුන්ව නිහඬ කර ඇති බව දැන ගැනීමට නොහැකිය.", "report.next": "ඊළඟ", "report.placeholder": "අමතර අදහස්", "report.reasons.dislike": "මම එයට අකැමතියි", @@ -367,7 +371,7 @@ "report.rules.subtitle": "අදාළ සියල්ල තෝරන්න", "report.rules.title": "කුමන නීති උල්ලංඝනය කරන්නේද?", "report.statuses.subtitle": "අදාළ සියල්ල තෝරන්න", - "report.statuses.title": "මෙම වාර්තාව උපස්ථ කරන පෝස්ට් තිබේද?", + "report.statuses.title": "මෙම වාර්තාව උපස්ථ කළ ලිපි තිබේ ද?", "report.submit": "යොමන්න", "report.target": "{target} වාර්තා කිරීම", "report.thanks.take_action": "මාස්ටඩන් හි ඔබ දකින දෑ පාලනයට තිබෙන විකල්ප:", @@ -375,7 +379,7 @@ "report.thanks.title": "මෙය නොපෙන්විය යුතුද?", "report.thanks.title_actionable": "වාර්තා කිරීමට ස්තූතියි, අපි මේ ගැන සොයා බලමු.", "report.unfollow": "@{name}අනුගමනය නොකරන්න", - "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබේ නිවසේ සංග්‍රහයේ ඔවුන්ගේ පළ කිරීම් තවදුරටත් නොදැකීමට, ඒවා අනුගමනය නොකරන්න.", + "report.unfollow_explanation": "ඔබ මෙම ගිණුම අනුගමනය කරයි. ඔබගේ මුල් පිටුවේ ඔවුන්ගේ ලිපි නොදැකීමට, ඔවුන්ව තවදුරටත් අනුගමනය නොකරන්න.", "report_notification.attached_statuses": "{count, plural, one {ලිපි {count}} other {ලිපි {count} ක්}} අමුණා ඇත", "report_notification.categories.other": "වෙනත්", "report_notification.categories.spam": "ආයාචිත", @@ -443,7 +447,7 @@ "timeline_hint.resources.followers": "අනුගාමිකයින්", "timeline_hint.resources.follows": "අනුගමනය", "timeline_hint.resources.statuses": "පරණ ලිපි", - "trends.trending_now": "දැන් ප්‍රවණතාවය", + "trends.trending_now": "දැන් නැගී එන", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", "units.short.billion": "{count}බී", "units.short.million": "ද.ල. {count}", diff --git a/config/locales/doorkeeper.si.yml b/config/locales/doorkeeper.si.yml index 31b38444d3..d3550cf598 100644 --- a/config/locales/doorkeeper.si.yml +++ b/config/locales/doorkeeper.si.yml @@ -58,10 +58,10 @@ si: authorize: සත්‍යාපනය deny: ප්‍රතික්ෂේප කරන්න error: - title: දෝෂයක් සිදුවී ඇත + title: දෝෂයක් සිදු වී ඇත new: prompt_html: "%{client_name} ඔබගේ ගිණුමට ප්‍රවේශ වීමට අවසර ලබා ගැනීමට කැමති වේ. එය තෙවන පාර්ශවීය යෙදුමකි. ඔබ එය විශ්වාස නොකරන්නේ නම්, ඔබ එයට අවසර නොදිය යුතුය." - review_permissions: අවසර සමාලෝචනය කරන්න + review_permissions: අවසර සමාලෝචනය title: බලය පැවරීමේ අවශ්ය show: title: මෙම අවසර කේතය පිටපත් කර එය යෙදුමට අලවන්න. @@ -73,11 +73,11 @@ si: index: authorized_at: "%{date}මත අවසර දී ඇත" description_html: මේවා API භාවිතයෙන් ඔබගේ ගිණුමට ප්‍රවේශ විය හැකි යෙදුම් වේ. ඔබ මෙහි හඳුනා නොගත් යෙදුම් තිබේ නම්, හෝ යෙදුමක් වැරදි ලෙස හැසිරෙන්නේ නම්, ඔබට එහි ප්‍රවේශය අවලංගු කළ හැක. - last_used_at: අවසන් වරට භාවිතා කළේ %{date} + last_used_at: අන්තිම භාවිතය %{date} never_used: භාවිතා කර නැත scopes: අවසර superapp: අභ්‍යන්තර - title: ඔබගේ බලයලත් අයදුම්පත් + title: ඔබගේ බලයලත් යෙදුම් errors: messages: access_denied: සම්පත් හිමිකරු හෝ අවසර සේවාදායකය ඉල්ලීම ප්‍රතික්ෂේප කළේය. diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cc3fd07c49..ff337cc6ca 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -47,7 +47,7 @@ ko: label: 역할 변경 no_role: 역할 없음 title: "%{username}의 역할 변경" - confirm: 확정 + confirm: 신원 확인 confirmed: 확인됨 confirming: 확인 중 custom: 사용자 지정 diff --git a/config/locales/si.yml b/config/locales/si.yml index 787d6fde38..51e1b838f3 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -16,8 +16,6 @@ si: last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී nothing_here: මෙහි කිසිවක් නැත! - pin_errors: - following: ඔබට අනුමත කිරීමට අවශ්‍ය පුද්ගලයා ඔබ දැනටමත් අනුගමනය කරමින් සිටිය යුතුය posts: one: ලිපිය other: ලිපි @@ -69,7 +67,7 @@ si: invite_request_text: එක්වීමට හේතුව invited_by: විසින් ආරාධනා කරන ලදී ip: අ.ජා. කෙ. (IP) - joined: එක් වී ඇත + joined: එක් වූ දිනය location: all: සියල්ල local: ස්ථානීය @@ -123,7 +121,7 @@ si: security_measures: only_password: මුරපදය පමණි password_and_2fa: මුරපදය සහ 2FA - sensitized: සංවේදී ලෙස සලකුණු කර ඇත + sensitized: සංවේදී බව සලකුණු කර ඇත shared_inbox_url: බෙදාගත් එන ලිපි URL show: created_reports: වාර්තා හැදුවා @@ -173,7 +171,7 @@ si: destroy_email_domain_block: ඊමේල් ඩොමේන් බ්ලොක් එක මකන්න destroy_instance: වසම පිරිසිදු කරන්න destroy_ip_block: IP රීතිය මකන්න - destroy_status: පළ කිරීම මකන්න + destroy_status: ලිපිය මකන්න destroy_unavailable_domain: ලබා ගත නොහැකි වසම මකන්න disable_2fa_user: 2FA අබල කරන්න disable_custom_emoji: අභිරුචි ඉමෝජි අබල කරන්න @@ -199,7 +197,7 @@ si: update_announcement: නිවේදනය යාවත්කාල කරන්න update_custom_emoji: අභිරුචි ඉමොජි යාවත්කාලීන කරන්න update_domain_block: ඩොමේන් බ්ලොක් යාවත්කාලීන කරන්න - update_status: පළ කිරීම යාවත්කාලීන කරන්න + update_status: ලිපිය යාවත්කාල කරන්න actions: approve_user_html: "%{name} අනුමත ලියාපදිංචිය %{target}සිට" assigned_to_self_report_html: "%{name} වාර්තාව %{target} තමන්ටම පවරා ඇත" @@ -220,7 +218,6 @@ si: destroy_email_domain_block_html: "%{name} අවහිර නොකළ විද්‍යුත් තැපැල් වසම %{target}" destroy_instance_html: "%{name} පිරිසිදු කරන ලද වසම %{target}" destroy_ip_block_html: IP %{target}සඳහා %{name} මකා දැමූ රීතිය - destroy_status_html: "%{name} පෝස්ට් %{target}විසින් ඉවත් කරන ලදී" destroy_unavailable_domain_html: "%{name} වසම %{target}වෙත බෙදා හැරීම නැවත ආරම්භ විය" disable_2fa_user_html: "%{name} පරිශීලක %{target}සඳහා සාධක දෙකක අවශ්‍යතාවය අක්‍රීය කර ඇත" disable_custom_emoji_html: "%{name} ආබාධිත ඉමොජි %{target}" @@ -236,18 +233,17 @@ si: reopen_report_html: "%{name} නැවත විවෘත කළ වාර්තාව %{target}" reset_password_user_html: "%{name} පරිශීලක %{target}හි මුරපදය යළි පිහිටුවන්න" resolve_report_html: "%{name} විසඳන ලද වාර්තාව %{target}" - sensitive_account_html: "%{name} %{target}හි මාධ්‍ය සංවේදී ලෙස සලකුණු කර ඇත" + sensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} සලකුණු කර ඇත" silence_account_html: "%{name} සීමිත %{target}ගිණුමක්" suspend_account_html: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" unassigned_report_html: "%{name} පවරා නොදුන් වාර්තාව %{target}" unblock_email_account_html: "%{name} %{target}ගේ ඊමේල් ලිපිනය අවහිර කිරීම ඉවත් කරන ලදී" - unsensitive_account_html: "%{name} සලකුණු නොකළ %{target}ගේ මාධ්‍ය සංවේදී ලෙස" + unsensitive_account_html: "%{target}ගේ මාධ්‍ය සංවේදී බව %{name} ඉවත් කර ඇත" unsilence_account_html: "%{target}ගිණුමේ %{name} undid සීමාව" unsuspend_account_html: "%{name} අත්හිටුවන ලද %{target}ගිණුම" update_announcement_html: "%{name} යාවත්කාලීන නිවේදනය %{target}" update_custom_emoji_html: "%{name} යාවත්කාලීන කළ ඉමොජි %{target}" update_domain_block_html: "%{target}සඳහා %{name} යාවත්කාලීන කරන ලද වසම් වාරණ" - update_status_html: "%{name} %{target}යාවත්කාලීන කරන ලද පළ කිරීම" empty: ලඝු-සටහන් හමු නොවිණි. filter_by_action: ක්‍රියාමාර්ගය අනුව පෙරන්න filter_by_user: පරිශ්‍රීලකයා අනුව පෙරන්න @@ -305,8 +301,8 @@ si: dashboard: active_users: ක්රියාකාරී පරිශීලකයන් interactions: අන්තර්ක්රියා - media_storage: මාධ්ය ගබඩාව - new_users: නව පරිශීලකයන් + media_storage: මාධ්‍ය ආචයනය + new_users: නව පරිශ්‍රීලකයින් opened_reports: විවෘත වාර්තා pending_appeals_html: one: "%{count} අභියාචනයක් බලාපොරොත්තු වේ" @@ -435,7 +431,7 @@ si: unavailable: ලබා ගත නොහැක delivery_available: බෙදා හැරීම ලබා ගත හැකිය delivery_error_days: බෙදා හැරීමේ දෝෂ සහිත දින - delivery_error_hint: දින %{count} ක් සඳහා බෙදා හැරීම කළ නොහැකි නම්, එය ස්වයංක්‍රීයව බෙදා හැරිය නොහැකි ලෙස ලකුණු කරනු ලැබේ. + delivery_error_hint: දවස් %{count} කින් බාරදීමට නොහැකි වුවහොත්, බාරදීමට නොහැකි බව ස්වයංක්‍රීයව සලකුණු වේ. destroyed_msg: "%{domain} සිට දත්ත දැන් ආසන්න මකාදැමීම සඳහා පෝලිම් කර ඇත." empty: වසම් කිසිවක් හමු නොවීය. known_accounts: @@ -454,7 +450,7 @@ si: total_followed_by_them: ඔවුන් විසින් අනුගමනය කරන ලදී total_followed_by_us: අප විසින් අනුගමනය කරන ලදී total_reported: ඔවුන් ගැන වාර්තා - total_storage: මාධ්ය ඇමුණුම් + total_storage: මාධ්‍ය ඇමුණුම් totals_time_period_hint_html: පහත දැක්වෙන එකතුවෙහි සියලු කාලය සඳහා දත්ත ඇතුළත් වේ. invites: deactivate_all: සියල්ල අක්‍රිය කරන්න @@ -483,11 +479,9 @@ si: relays: add_new: නව රිලේ එක් කරන්න delete: මකන්න - description_html: "ෆෙඩරේෂන් රිලේ යනු එයට දායක වී ප්‍රකාශයට පත් කරන සේවාදායකයන් අතර විශාල ප්‍රසිද්ධ පළ කිරීම් හුවමාරු කරන අතරමැදි සේවාදායකයකි. එය කුඩා සහ මධ්‍යම සේවාදායකයන්ට fediverseවෙතින් අන්තර්ගතය සොයා ගැනීමට උදවු කළ හැකි අතර, එසේ නොමැති නම් දේශීය පරිශීලකයින්ට දුරස්ථ සේවාදායකයන් මත වෙනත් පුද්ගලයින් හස්තීයව අනුගමනය කිරීම අවශ්‍ය වේ." disable: අබල කරන්න disabled: අබලයි enable: සබල කරන්න - enable_hint: සක්‍රිය කළ පසු, ඔබේ සේවාදායකය මෙම රිලේ වෙතින් සියලුම පොදු පළ කිරීම් සඳහා දායක වන අතර, මෙම සේවාදායකයේ පොදු පළ කිරීම් එයට යැවීම ආරම්භ කරනු ඇත. enabled: සබල කර ඇත inbox_url: රිලේ URL pending: රිලේ අනුමැතිය සඳහා රැඳී සිටිමින් @@ -507,8 +501,6 @@ si: action_log: විගණන සටහන action_taken_by: විසින් ගන්නා ලද පියවර actions: - delete_description_html: වාර්තා කරන ලද පළ කිරීම් මකා දැමෙනු ඇති අතර එම ගිණුමේම අනාගත උල්ලංඝනයන් තීව්‍ර කිරීමට ඔබට උදවු කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. - mark_as_sensitive_description_html: වාර්තා කරන ලද පළ කිරීම් වල මාධ්‍ය සංවේදී ලෙස සලකුණු කරනු ලබන අතර එම ගිණුම මගින් අනාගත උල්ලංඝනයන් උත්සන්න කිරීමට ඔබට උපකාර කිරීමට වර්ජනයක් වාර්තා කරනු ඇත. other_description_html: ගිණුමේ හැසිරීම පාලනය කිරීම සහ වාර්තා කළ ගිණුමට සන්නිවේදනය අභිරුචිකරණය කිරීම සඳහා තවත් විකල්ප බලන්න. resolve_description_html: වාර්තා කරන ලද ගිණුමට එරෙහිව කිසිදු ක්‍රියාමාර්ගයක් නොගනු ඇත, වැඩ වර්ජනයක් වාර්තා නොකෙරේ, වාර්තාව වසා දමනු ඇත. actions_description_html: මෙම වාර්තාව විසඳීමට ගත යුතු ක්‍රියාමාර්ගය තීරණය කරන්න. ඔබ වාර්තා කරන ලද ගිණුමට එරෙහිව දණ්ඩනීය ක්‍රියාමාර්ගයක් ගන්නේ නම්, Spam කාණ්ඩය තෝරාගත් විට හැර, ඔවුන්ට විද්‍යුත් තැපෑලෙන් දැනුම්දීමක් යවනු ලැබේ. @@ -526,14 +518,14 @@ si: delete_and_resolve: ලිපි මකන්න forwarded: හරවා යවා ඇත forwarded_to: "%{domain} වෙත හරවා යැවිණි" - mark_as_resolved: විසඳා ඇති ලෙස ලකුණු කරන්න - mark_as_sensitive: සංවේදී ලෙස ලකුණු කරන්න - mark_as_unresolved: නොවිසඳුනු ලෙස ලකුණු කරන්න + mark_as_resolved: විසඳූ බව යොදන්න + mark_as_sensitive: සංවේදී බව යොදන්න + mark_as_unresolved: නොවිසඳූ බව යොදන්න no_one_assigned: කිසිවෙක් නැත notes: create: සටහන එකතු කරන්න - create_and_resolve: සටහන සමඟ විසඳන්න - create_and_unresolve: සටහනක් සමඟ නැවත විවෘත කරන්න + create_and_resolve: සටහනක් සමඟ විසඳන්න + create_and_unresolve: සටහනක් සමඟ නැවත අරින්න delete: මකන්න placeholder: ගෙන ඇති ක්‍රියාමාර්ග, හෝ වෙනත් අදාළ යාවත්කාලීන විස්තර කරන්න... title: සටහන් @@ -564,7 +556,12 @@ si: moderation: මැදිහත්කරණය special: විශේෂ delete: මකන්න + permissions_count: + one: අවසර %{count} + other: අවසර %{count} privileges: + administrator: පරිපාලක + delete_user_data: පරිශ්‍රීලක දත්ත මකන්න invite_users: ආරාධනා කරන්න manage_announcements: නිවේදනය කළමනාකරණය manage_federation: ඒකාබද්ධ කළමනාකරණය @@ -592,6 +589,7 @@ si: title: පෙනුම discovery: profile_directory: පැතිකඩ නාමාවලිය + public_timelines: ප්‍රසිද්ධ කාලරේඛා domain_blocks: all: හැමෝටම disabled: කාටවත් නෑ @@ -626,7 +624,7 @@ si: media: title: මාධ්‍යය metadata: පාරදත්ත - no_status_selected: කිසිවක් තෝරා නොගත් බැවින් තනතුරු කිසිවක් වෙනස් කර නැත + no_status_selected: කිසිවක් නොතේරූ බැවින් ලිපි කිසිවක් වෙනස් කර නැත open: ලිපිය අරින්න original_status: මුල් ලිපිය status_changed: ලිපිය සංශෝධිතයි @@ -639,7 +637,7 @@ si: disable: "%{name} %{target}ගේ ගිණුම නිශ්චල කළේය" mark_statuses_as_sensitive: "%{target}ගේ ලිපි සංවේදී බව %{name} සලකුණු කර ඇත" none: "%{name} %{target}අනතුරු ඇඟවීමක් යවා ඇත" - sensitive: "%{name} %{target}ගේ ගිණුම සංවේදී ලෙස ලකුණු කර ඇත" + sensitive: "%{target}ගේ ගිණුම සංවේදී බව %{name} සලකුණු කර ඇත" silence: "%{name} සීමිත %{target}ගිණුමක්" suspend: "%{name} %{target}ගේ ගිණුම අත්හිටුවා ඇත" appeal_approved: අභියාචනා කළා @@ -691,9 +689,9 @@ si: title: ප්‍රකාශකයන් rejected: ප්‍රතික්ෂේප කළා statuses: - allow: පළ කිරීමට ඉඩ දෙන්න + allow: පළ කිරීමට ඉඩදෙන්න allow_account: කතුවරයාට ඉඩ දෙන්න - disallow: පළ කිරීමට ඉඩ නොදෙන්න + disallow: ප්‍රකාශනයට ඉඩ නොදෙන්න disallow_account: කතුවරයාට ඉඩ නොදෙන්න not_discoverable: කර්තෘ සොයා ගත හැකි බව තෝරාගෙන නැත shared_by: @@ -732,12 +730,12 @@ si: webhooks: add_new: අන්ත ලක්ෂ්‍යය එක් කරන්න delete: මකන්න - disable: අක්රිය කරන්න - disabled: ආබාධිතයි + disable: අබල කරන්න + disabled: අබලයි edit: අන්ත ලක්ෂ්‍යය සංස්කරණය කරන්න empty: ඔබට තවම වින්‍යාස කර ඇති කිසිදු webhook අන්ත ලක්ෂ්‍යයක් නොමැත. enable: සබල කරන්න - enabled: ක්රියාකාරී + enabled: ක්‍රියාත්මකයි enabled_events: one: සබල සිදුවීම් 1 other: සබල සිදුවීම් %{count} @@ -752,7 +750,6 @@ si: actions: delete_statuses: ඔවුන්ගේ පළ කිරීම් මකා දැමීමට disable: ඔවුන්ගේ ගිණුම කැටි කිරීමට - mark_statuses_as_sensitive: ඔවුන්ගේ තනතුරු සංවේදී ලෙස සලකුණු කිරීමට none: අනතුරු ඇඟවීමක් sensitive: ඔවුන්ගේ ගිණුම සංවේදී ලෙස සලකුණු කිරීමට silence: ඔවුන්ගේ ගිණුම සීමා කිරීමට @@ -769,7 +766,7 @@ si: new_trending_links: title: නැඟී එන සබැඳි new_trending_statuses: - title: ප්‍රවණතා පළ කිරීම් + title: නැගී එන ලිපි new_trending_tags: no_approved_tags: දැනට අනුමත ප්‍රවණතා හැෂ් ටැග් නොමැත. requirements: 'මෙම ඕනෑම අපේක්ෂකයෙකුට #%{rank} අනුමත ප්‍රවණතා හැෂ් ටැගය අභිබවා යා හැකිය, එය දැනට ලකුණු %{lowest_tag_score}ක් සමඟ #%{lowest_tag_name} වේ.' @@ -803,11 +800,13 @@ si: applications: created: යෙදුම සාර්ථකව සෑදිණි destroyed: යෙදුම සාර්ථකව මකා ඇත + logout: නික්මෙන්න regenerate_token: ප්‍රවේශ ටෝකනය නැවත උත්පාදනය කරන්න token_regenerated: ප්‍රවේශ ටෝකනය සාර්ථකව ප්‍රතිජනනය කරන ලදී warning: මෙම දත්ත සමඟ ඉතා ප්රවේශම් වන්න. එය කිසි විටෙක කිසිවෙකු සමඟ බෙදා නොගන්න! your_token: ඔබේ ප්‍රවේශ ටෝකනය auth: + apply_for_account: ගිණුමක් ඉල්ලන්න delete_account: ගිණුම මකන්න delete_account_html: ඔබට ඔබගේ ගිණුම මකා දැමීමට අවශ්‍ය නම්, ඔබට මෙතැනින් ඉදිරියට යා හැක. තහවුරු කිරීම සඳහා ඔබෙන් අසනු ඇත. description: @@ -823,14 +822,25 @@ si: logout: නික්මෙන්න migrate_account: වෙනත් ගිණුමකට යන්න migrate_account_html: ඔබට මෙම ගිණුම වෙනත් එකකට හරවා යැවීමට අවශ්‍ය නම්, ඔබට එය මෙහි වින්‍යාසගත කළ හැක. + progress: + details: ඔබගේ විස්තර + rules: නීති පිළිගන්න + providers: + cas: CAS + saml: SAML register: ලියාපදිංචිය registration_closed: "%{instance} නව සාමාජිකයින් පිළිගන්නේ නැත" reset_password: මුරපදය යළි සකසන්න rules: accept: පිළිගන්න back: ආපසු + title_invited: ඔබට ආරාධනා කර ඇත. security: ආරක්‍ෂාව set_new_password: නව මුරපදය සකසන්න + setup: + title: ඔබගේ එනලිපි බලන්න + sign_in: + title: "%{domain} වෙත පිවිසෙන්න" status: account_status: ගිණුමේ තත්වය confirming: විද්‍යුත් තැපෑල තහවුරු කිරීම සම්පූර්ණ කිරීම සඳහා රැඳී සිටිමින්. @@ -876,7 +886,7 @@ si: warning: before: 'ඉදිරියට යාමට පෙර, කරුණාකර මෙම සටහන් හොඳින් කියවන්න:' caches: වෙනත් සේවාදායකයන් විසින් හැඹිලිගත කර ඇති අන්තර්ගතය දිගටම පැවතිය හැක - data_removal: ඔබගේ පළ කිරීම් සහ අනෙකුත් දත්ත ස්ථිරවම ඉවත් කරනු ලැබේ + data_removal: ඔබගේ ලිපි සහ අනෙකුත් දත්ත සදහටම ඉවත් කෙරෙනු ඇත email_change_html: ඔබට ඔබගේ ගිණුම මකා කළ හැක email_contact_html: එය තවමත් නොපැමිණියේ නම්, ඔබට උදව් සඳහා %{email} විද්‍යුත් තැපෑලෙන් යැවිය හැක email_reconfirmation_html: ඔබට තහවුරු කිරීමේ විද්‍යුත් තැපෑල නොලැබුනේ නම්, ඔබට එය නැවත ඉල්ලා සිටිය හැක @@ -900,13 +910,12 @@ si: description_html: මේවා ඔබගේ ගිණුමට එරෙහිව ගන්නා ලද ක්‍රියා සහ %{instance}හි කාර්ය මණ්ඩලය විසින් ඔබට එවා ඇති අනතුරු ඇඟවීම් වේ. recipient: වෙත යොමු කරන ලදී reject_appeal: අභියාචනය ප්‍රතික්ෂේප කරන්න - status: 'පළ කිරීම #%{id}' - status_removed: පළ කිරීම දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත + status: "#%{id} ලිපිය" + status_removed: ලිපිය දැනටමත් පද්ධතියෙන් ඉවත් කර ඇත title: "%{action} සිට %{date}" title_actions: - delete_statuses: පසු ඉවත් කිරීම + delete_statuses: ලිපි ඉවත් කිරීම disable: ගිණුම කැටි කිරීම - mark_statuses_as_sensitive: තනතුරු සංවේදී ලෙස සලකුණු කිරීම none: අවවාදයයි sensitive: ගිණුම සංවේදී ලෙස සලකුණු කිරීම silence: ගිණුම සීමා කිරීම @@ -941,7 +950,7 @@ si: archive_takeout: date: දිනය download: ඔබගේ සංරක්‍ෂිතය බාගන්න - hint_html: ඔබට ඔබගේ පළ කිරීම් සහ උඩුගත කළ මාධ්‍යහි සංරක්ෂිතයක් ඉල්ලා සිටිය හැක. නිර්යාත කළ දත්ත ActivityPub ආකෘතියෙන්, ඕනෑම අනුකූල මෘදුකාංගයකට කියවිය හැකිය. ඔබට දින 7කට වරක් ලේඛනාගාරයක් ඉල්ලා සිටිය හැක. + hint_html: ඔබට ලිපි සහ උඩුගත කළ මාධ්‍යවල සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. නිර්යාත කළ දත්ත ActivityPub ආකෘතියට ගැළපෙන ඕනෑම මෘදුකාංගයකින් කියවීමට හැකිය. ඔබට දවස් 7 කට වරක් සංරක්‍ෂණයක් ඉල්ලීමට හැකිය. in_progress: ඔබගේ සංරක්ෂිතය සම්පාදනය කරමින්... request: ඔබගේ සංරක්ෂිතය ඉල්ලන්න size: ප්‍රමාණය @@ -951,16 +960,15 @@ si: domain_blocks: වසම් අවහිර කිරීම් lists: ලැයිස්තු mutes: ඔබ නිහඬ කරන්න - storage: මාධ්‍ය ගබඩාව + storage: මාධ්‍ය ආචයනය featured_tags: add_new: අලුතින් එකතු කරන්න - hint_html: "විශේෂාංගගත හැෂ් ටැග් මොනවාද? ඒවා ඔබේ පොදු පැතිකඩෙහි ප්‍රමුඛව ප්‍රදර්ශනය වන අතර එම හැෂ් ටැග් යටතේ ඔබේ පොදු පළ කිරීම් බ්‍රවුස් කිරීමට මිනිසුන්ට ඉඩ සලසයි. නිර්මාණාත්මක කෘති හෝ දිගු කාලීන ව්යාපෘති පිළිබඳ වාර්තාවක් තබා ගැනීම සඳහා ඔවුන් විශිෂ්ට මෙවලමක් වේ." filters: contexts: account: පැතිකඩයන් home: මුල සහ ලැයිස්තු notifications: දැනුම්දීම් - public: පොදු කාලරේඛා + public: ප්‍රසිද්ධ කාලරේඛා thread: සංවාද edit: add_keyword: මූල පදය එක් කරන්න @@ -1018,9 +1026,12 @@ si: overwrite: උඩින් ලියන්න overwrite_long: වත්මන් වාර්තා නව ඒවා සමඟ ප්‍රතිස්ථාපනය කරන්න preface: ඔබ අනුගමන කරන හෝ අවහිර කරන පුද්ගලයින්ගේ ලැයිස්තුවක් වැනි වෙනත් සේවාදායකයකින් ඔබ නිර්යාත කර ඇති දත්ත ඔබට ආයාත කළ හැක. + status: තත්‍වය success: ඔබගේ දත්ත සාර්ථකව උඩුගත කර ඇති අතර නියමිත වේලාවට සැකසෙනු ඇත titles: lists: ලැයිස්තු ආයාත වෙමින් + type_groups: + constructive: අනුගමන හා පොත්යොමු types: blocking: අවහිර ලැයිස්තුව bookmarks: පොත්යොමු @@ -1064,7 +1075,7 @@ si: title: සත්‍යාපන ඉතිහාසය media_attachments: validations: - images_and_video: දැනටමත් පින්තූර අඩංගු පළ කිරීමකට වීඩියෝවක් ඇමිණිය නොහැක + images_and_video: දැනටමත් රූප අඩංගු ලිපියකට දෘශ්‍යකයක් ඇමිණීමට නොහැකිය not_ready: සැකසීම අවසන් නොකළ ගොනු ඇමිණිය නොහැක. මොහොතකින් නැවත උත්සාහ කරන්න! too_many: ගොනු 4කට වඩා ඇමිණිය නොහැක migrations: @@ -1168,8 +1179,8 @@ si: too_many_options: අථක %{max} කට වඩා අඩංගු නොවිය යුතුය preferences: other: වෙනත් - posting_defaults: පෙරනිමි පළ කිරීම - public_timelines: පොදු කාලරේඛා + posting_defaults: සැමවිට පළ කරන ආකාරය + public_timelines: ප්‍රසිද්ධ කාලරේඛා privacy: search: සොයන්න privacy_policy: @@ -1203,11 +1214,8 @@ si: rss: content_warning: 'අන්තර්ගත අනතුරු ඇඟවීම:' descriptions: - account: "@%{acct}සිට පොදු පළ කිරීම්" - tag: "#%{hashtag}ටැග් කර ඇති පොදු පළ කිරීම්" + account: "@%{acct} වෙතින් ප්‍රසිද්ධ ලිපි" scheduled_statuses: - over_daily_limit: ඔබ අද දිනට නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත - over_total_limit: ඔබ නියමිත පළ කිරීම් %{limit} සීමාව ඉක්මවා ඇත too_soon: නියමිත දිනය අනාගතයේ විය යුතුය sessions: activity: අවසාන ක්‍රියාකාරකම @@ -1259,7 +1267,7 @@ si: account_settings: ගිණුමේ සැකසුම් aliases: ගිණුම් අන්වර්ථ නාමයන් appearance: පෙනුම - authorized_apps: අවසර ලත් යෙදුම් + authorized_apps: බලයලත් යෙදුම් back: මාස්ටඩන් වෙත ආපසු delete: ගිණුම මැකීම development: සංවර්ධනය @@ -1273,7 +1281,7 @@ si: preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ relationships: අනුගාමිකයින් සහ අනුගාමිකයින් - statuses_cleanup: ස්වයංක්‍රීය පළ කිරීම් මකාදැමීම + statuses_cleanup: ස්වයංක්‍රීය ලිපි මැකීම two_factor_authentication: ද්වි සාධක Aut webauthn_authentication: ආරක්‍ෂණ යතුරු statuses: @@ -1295,13 +1303,13 @@ si: other: 'අනුමත නොකළ හැෂ් ටැග් අඩංගු විය: %{tags}' edited_at_html: සංස්කරණය %{date} errors: - in_reply_not_found: ඔබ පිළිතුරු දීමට උත්සාහ කරන පළ කිරීම පවතින බවක් නොපෙනේ. + in_reply_not_found: ඔබ පිළිතුරු දීමට තැත් කරන ලිපිය නොපවතින බව පෙනෙයි. open_in_web: වෙබයේ විවෘත කරන්න over_character_limit: අක්ෂර සීමාව %{max} ඉක්මවා ඇත pin_errors: - direct: සඳහන් කළ පරිශීලකයින්ට පමණක් පෙනෙන පළ කිරීම් ඇමිණිය නොහැක - limit: ඔබ දැනටමත් උපරිම පළ කිරීම් සංඛ්‍යාව අමුණා ඇත - ownership: වෙනත් කෙනෙකුගේ පළ කිරීමක් ඇමිණිය නොහැක + direct: සඳහන් කළ අයට පමණක් පෙනෙන ලිපි ඇමිණීමට නොහැකිය + limit: දැනටමත් මුදුනට ඇමිණිමට හැකි ලිපි සීමාවට ළඟා වී ඇත + ownership: වෙනත් අයගේ ලිපි ඇමිණීමට නොහැකිය poll: total_people: one: පුද්ගලයින් %{count} @@ -1324,16 +1332,14 @@ si: unlisted: ලැයිස්තුගත නොකළ unlisted_long: සෑම කෙනෙකුටම දැකිය හැක, නමුත් පොදු කාලරාමුවෙහි ලැයිස්තුගත කර නොමැත statuses_cleanup: - enabled: පැරණි පළ කිරීම් ස්වයංක්‍රීයව මකන්න - enabled_hint: ඔබේ පළ කිරීම් පහත ව්‍යතිරේකවලින් එකකට ගැලපෙන්නේ නම් මිස, ඒවා නිශ්චිත වයස් සීමාවකට ළඟා වූ පසු ස්වයංක්‍රීයව මකයි + enabled: පරණ ලිපි ස්වයංක්‍රීයව මකන්න exceptions: හැර දැමීම් - explanation: පළ කිරීම් මකා දැමීම මිල අධික මෙහෙයුමක් වන බැවින්, සේවාදායකය වෙනත් ආකාරයකින් කාර්යබහුල නොවන විට කාලයත් සමඟ මෙය සෙමින් සිදු කෙරේ. මෙම හේතුව නිසා, ඔබේ පළ කිරීම් වයස් සීමාවට ළඟා වූ පසු ටික වේලාවකට පසුව මකා දැමිය හැක. ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක keep_direct: සෘජු පණිවිඩ තබාගන්න keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න - keep_media_hint: මාධ්‍ය ඇමුණුම් ඇති ඔබේ පළ කිරීම් කිසිවක් මකන්නේ නැත + keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් මැකෙන්නේ නැත keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත @@ -1374,12 +1380,12 @@ si: edit: සංස්කරණය enabled: ද්වි-සාධක සත්‍යාපනය සක්‍රීය කර ඇත enabled_success: ද්වි-සාධක සත්‍යාපනය සාර්ථකව සබල කර ඇත - generate_recovery_codes: ප්‍රතිසාධන කේත ජනනය කරන්න + generate_recovery_codes: ප්‍රතිසාධන කේත උත්පාදනය කරන්න lost_recovery_codes: ඔබගේ දුරකථනය නැති වුවහොත් ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට ප්‍රතිසාධන කේත ඔබට ඉඩ සලසයි. ඔබට ඔබේ ප්‍රතිසාධන කේත නැති වී ඇත්නම්, ඔබට ඒවා මෙහි නැවත උත්පාදනය කළ හැක. ඔබගේ පැරණි ප්‍රතිසාධන කේත අවලංගු වනු ඇත. - methods: ද්වි සාධක ක්රම + methods: ද්වි සාධක ක්‍රම otp: Authenticator යෙදුම - recovery_codes: උපස්ථ ප්‍රතිසාධන කේත - recovery_codes_regenerated: ප්‍රතිසාධන කේත සාර්ථකව ප්‍රතිජනනය කරන ලදී + recovery_codes: ප්‍රතිසාධන කේත උපස්ථය + recovery_codes_regenerated: ප්‍රතිසාධන කේත නැවත උත්පාදනය කෙරිණි recovery_instructions_html: ඔබට කවදා හෝ ඔබගේ දුරකථනයට ප්‍රවේශය අහිමි වුවහොත්, ඔබගේ ගිණුමට ප්‍රවේශය නැවත ලබා ගැනීමට පහත ප්‍රතිසාධන කේත වලින් එකක් භාවිතා කළ හැක. ප්‍රතිසාධන කේත ආරක්ෂිතව තබා ගන්න. උදාහරණයක් ලෙස, ඔබට ඒවා මුද්‍රණය කර වෙනත් වැදගත් ලේඛන සමඟ ගබඩා කළ හැකිය. webauthn: ආරක්‍ෂණ යතුරු user_mailer: @@ -1407,19 +1413,17 @@ si: appeal: අභියාචනයක් ඉදිරිපත් කරන්න appeal_description: මෙය දෝෂයක් බව ඔබ විශ්වාස කරන්නේ නම්, ඔබට %{instance}හි කාර්ය මණ්ඩලයට අභියාචනයක් ඉදිරිපත් කළ හැක. categories: - spam: ආයාචිත තැපැල් + spam: ආයාචිත violation: අන්තර්ගතය පහත ප්‍රජා මාර්ගෝපදේශ උල්ලංඝනය කරයි explanation: disable: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැක, නමුත් ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත නොවෙනස්ව පවතී. ඔබට ඔබගේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට, ගිණුම් සැකසීම් වෙනස් කිරීමට හෝ ඔබගේ ගිණුම මකා දැමීමට හැකිය. - sensitive: මෙතැන් සිට, ඔබගේ උඩුගත කරන ලද සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකුණු කර ක්ලික්-හරහා අනතුරු ඇඟවීමක් පිටුපස සඟවනු ඇත. - silence: ඔබට තවමත් ඔබගේ ගිණුම භාවිතා කළ හැකි නමුත් දැනටමත් ඔබව අනුගමනය කරන පුද්ගලයින් පමණක් මෙම සේවාදායකයේ ඔබගේ පළ කිරීම් දකිනු ඇති අතර, විවිධ සොයාගැනීම් විශේෂාංග වලින් ඔබව බැහැර කරනු ලැබිය හැක. කෙසේ වෙතත්, අනෙක් අය තවමත් ඔබව අතින් අනුගමනය කළ හැක. + sensitive: මේ මොහොත් සිට ඔබ උඩුගත කරන සියලුම මාධ්‍ය ගොනු සංවේදී ලෙස සලකා අවවාදයක් පිටුපස සඟවනු ඇත. suspend: ඔබට තවදුරටත් ඔබගේ ගිණුම භාවිතා කළ නොහැකි අතර, ඔබගේ පැතිකඩ සහ අනෙකුත් දත්ත තවදුරටත් ප්‍රවේශ විය නොහැක. දින 30කින් පමණ දත්ත සම්පූර්ණයෙන් ඉවත් කරන තෙක් ඔබට තවමත් ඔබේ දත්තවල උපස්ථයක් ඉල්ලා සිටීමට පුරනය විය හැක, නමුත් ඔබව අත්හිටුවීම මගහැර යාම වැළැක්වීමට අපි මූලික දත්ත කිහිපයක් රඳවා ගන්නෙමු. reason: 'හේතුව:' - statuses: 'උපුටා දක්වන ලද පළ කිරීම්:' subject: - delete_statuses: "%{acct} හි ඔබගේ පළ කිරීම් ඉවත් කර ඇත" + delete_statuses: "%{acct} හි ඔබගේ ලිපිය ඉවත් කර ඇත" disable: ඔබගේ ගිණුම %{acct} කර ඇත - mark_statuses_as_sensitive: "%{acct} හි ඔබගේ පළ කිරීම් සංවේදී ලෙස සලකුණු කර ඇත" + mark_statuses_as_sensitive: ඔබගේ %{acct} ලිපි සංවේදී බව සලකුණු කර ඇත none: "%{acct} සඳහා අවවාදය" sensitive: ඔබගේ %{acct} ලිපිය මේ මොහොතේ සිට සංවේදී ලෙස සලකයි silence: ඔබගේ ගිණුම %{acct} සීමා කර ඇත @@ -1427,7 +1431,7 @@ si: title: delete_statuses: ලිපි ඉවත් කර ඇත disable: ගිණුම නිශ්චල කර ඇත - mark_statuses_as_sensitive: පළ කිරීම් සංවේදී ලෙස ලකුණු කර ඇත + mark_statuses_as_sensitive: ලිපි සංවේදී බව සලකුණු කර ඇත none: අවවාදයයි sensitive: ගිණුම සංවේදී බව යොදා ඇත silence: ගිණුම සීමා කර ඇත diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 917d3791f6..7e529c0eee 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -11,7 +11,6 @@ si: title: විකල්ප. ලබන්නාට නොපෙනේ admin_account_action: send_email_notification: පරිශීලකයාට ඔවුන්ගේ ගිණුම සමඟ සිදු වූ දේ පිළිබඳ පැහැදිලි කිරීමක් ලැබෙනු ඇත - text_html: විකල්ප. ඔබට post syntax භාවිතා කළ හැක. කාලය ඉතිරි කර ගැනීම සඳහා ඔබට අනතුරු ඇඟවීමේ කළ හැක type_html: "%{acct}සමඟ කළ යුතු දේ තෝරන්න" types: disable: පරිශීලකයාගේ ගිණුම භාවිතා කිරීමෙන් වළක්වන්න, නමුත් ඔවුන්ගේ අන්තර්ගතය මකා දැමීම හෝ සඟවන්න එපා. @@ -23,7 +22,7 @@ si: ends_at: විකල්ප. මෙම අවස්ථාවේදී නිවේදනය ස්වයංක්‍රීයව ප්‍රකාශනය කිරීමෙන් ඉවත් වනු ඇත scheduled_at: නිවේදනය වහාම ප්‍රකාශයට පත් කිරීමට හිස්ව තබන්න starts_at: විකල්ප. ඔබගේ නිවේදනය නිශ්චිත කාල පරාසයකට බැඳී ඇත්නම් - text: ඔබට post syntax භාවිතා කළ හැක. කරුණාකර පරිශීලකයාගේ තිරය මත නිවේදනය ලබා ගන්නා ඉඩ ගැන සැලකිලිමත් වන්න + text: ඔබට ලිපි පද ගැළපුම් භාවිතා කිරීමට හැකිය. කරුණාකර නිවේදනයෙන් පරිශ්‍රීලකයින්ගේ තිරයේ ඉඩ කෙතරම් ඇහිරෙනවා ද පිළිබඳව සැලකිලිමත් වන්න appeal: text: ඔබට වර්ජනයකට අභියාචනා කළ හැක්කේ එක් වරක් පමණි defaults: @@ -120,7 +119,7 @@ si: text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න defaults: autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න - avatar: අවතාරය + avatar: පැතිකඩ ඡායාරූපය chosen_languages: භාෂා පෙරන්න confirm_new_password: නව මුරපදය තහවුරු කරන්න confirm_password: මුරපදය තහවුරු කරන්න @@ -148,7 +147,6 @@ si: setting_default_privacy: ලිපියේ රහස්‍යතාව setting_default_sensitive: සෑමවිට මාධ්‍ය සංවේදී බව සලකුණු කරන්න setting_delete_modal: ලිපියක් මැකීමට පෙර ඒ ගැන විමසන්න - setting_disable_swiping: ස්වයිප් චලන අක්‍රීය කරන්න setting_display_media: මාධ්ය සංදර්ශකය setting_display_media_default: පෙරනිමි setting_display_media_hide_all: සියල්ල සඟවන්න @@ -156,7 +154,7 @@ si: setting_expand_spoilers: අන්තර්ගත අවවාද සහිත ලිපි සැමවිට දිගහරින්න setting_hide_network: ඔබගේ ජාලය සඟවන්න setting_reduce_motion: සජීවිකරණවල චලනය අඩු කරන්න - setting_system_font_ui: පද්ධතියේ පෙරනිමි අකුරු භාවිතා කරන්න + setting_system_font_ui: පද්ධතියේ පෙරනිමි රුවකුරු භාවිතා කරන්න setting_theme: අඩවියේ තේමාව setting_trends: අද ප්‍රවණතා පෙන්වන්න setting_unfollow_modal: යමෙකු අනුගමනය නොකිරීමට පෙර තහවුරු කිරීමේ සංවාදය පෙන්වන්න @@ -175,8 +173,8 @@ si: name: හෑෂ් ටැගය filters: actions: - hide: සම්පූර්ණයෙන්ම සඟවන්න - warn: අනතුරු ඇඟවීමක් සමඟ සඟවන්න + hide: මුළුමනින්ම සඟවන්න + warn: අවවාදයක් සහිතව සඟවන්න form_admin_settings: custom_css: අභිරුචි CSS profile_directory: පැතිකඩ නාමාවලිය සබල කරන්න @@ -184,8 +182,6 @@ si: site_title: සේවාදායකයේ නම theme: පෙරනිමි තේමාව interactions: - must_be_follower: අනුගාමිකයින් නොවන අයගේ දැනුම්දීම් අවහිර කරන්න - must_be_following: ඔබ අනුගමනය නොකරන පුද්ගලයින්ගේ දැනුම්දීම් අවහිර කරන්න must_be_following_dm: ඔබ නොදන්නා අයගෙන් සෘජු පණිවිඩ ලැබීම අවහිර කරන්න invite: comment: අදහස @@ -201,12 +197,9 @@ si: notification_emails: digest: digest ඊමේල් යවන්න favourite: යමෙක් ඔබගේ ලිපියට ප්‍රිය කළා - follow: කවුරුහරි ඔබව අනුගමනය කළා - follow_request: කවුරුහරි ඔබව අනුගමනය කරන ලෙස ඉල්ලා සිටියේය - mention: කවුරුහරි ඔබව සඳහන් කළා - pending_account: නව ගිණුම සමාලෝචනය අවශ්‍යයි - report: නව වාර්තාවක් ඉදිරිපත් කෙරේ - trending_tag: නව ප්‍රවණතාවයට සමාලෝචනයක් අවශ්‍ය වේ + follow: යමෙක් ඔබව අනුගමනය කළා + mention: යමෙක් ඔබව සඳහන් කළා + report: නව වාර්තාවක් යොමු කර ඇත rule: text: නීතිය tag: From b9b8eafc98a2b9bbff68dfcb21f4d2e928a42723 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Oct 2023 16:33:54 +0200 Subject: [PATCH 213/237] Fix auto-loading-more when not scrolled (#27286) --- app/javascript/mastodon/components/scrollable_list.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/scrollable_list.jsx b/app/javascript/mastodon/components/scrollable_list.jsx index ce0b579f50..3b142f76f2 100644 --- a/app/javascript/mastodon/components/scrollable_list.jsx +++ b/app/javascript/mastodon/components/scrollable_list.jsx @@ -73,7 +73,7 @@ class ScrollableList extends PureComponent { const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; - if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { + if (scrollTop > 0 && offset < 400 && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { this.props.onLoadMore(); } From f4b0a104909e46a21f729030457a0895b24f629a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:35:05 +0200 Subject: [PATCH 214/237] Update dependency sidekiq to v6.5.10 (#27287) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 13bca58a5c..a003cd18dd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -691,7 +691,7 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - sidekiq (6.5.9) + sidekiq (6.5.10) connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) From 2e2936eb646f9bdf25c533960a76f3d1a77d3f66 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:49:09 +0200 Subject: [PATCH 215/237] New Crowdin Translations (automated) (#27304) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/lv.json | 54 ++++++++++++------------- app/javascript/mastodon/locales/ru.json | 2 +- config/locales/lv.yml | 4 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4c920b038f..87d7c90c41 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -686,7 +686,7 @@ "timeline_hint.resources.followers": "Seuraajat", "timeline_hint.resources.follows": "seurattua", "timeline_hint.resources.statuses": "Vanhemmat julkaisut", - "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} viimeisten {days, plural, one {päivän} other {{days} päivän}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} henkilö} other {{counter} henkilöä}} {days, plural, one {viimeisen päivän} other {viimeisten {days} päivän}} aikana", "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "units.short.billion": "{count} mrd.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index aab7b9a8fb..7f71d9318b 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -161,13 +161,13 @@ "compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu", "compose_form.spoiler_placeholder": "Ieraksti savu brīdinājumu šeit", "confirmation_modal.cancel": "Atcelt", - "confirmations.block.block_and_report": "Bloķēt un Ziņot", + "confirmations.block.block_and_report": "Bloķēt un ziņot", "confirmations.block.confirm": "Bloķēt", "confirmations.block.message": "Vai tiešām vēlies bloķēt {name}?", "confirmations.cancel_follow_request.confirm": "Atsaukt pieprasījumu", "confirmations.cancel_follow_request.message": "Vai tiešām vēlies atsaukt pieprasījumu sekot {name}?", "confirmations.delete.confirm": "Dzēst", - "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ziņu?", + "confirmations.delete.message": "Vai tiešām vēlies dzēst šo ierakstu?", "confirmations.delete_list.confirm": "Dzēst", "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.discard_edit_media.confirm": "Atmest", @@ -244,7 +244,7 @@ "empty_column.public": "Šeit vēl nekā nav! Ieraksti ko publiski vai pieseko lietotājiem no citiem serveriem", "error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.", "error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.", - "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, vari lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", + "error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "error.unexpected_crash.next_steps_addons": "Mēģini tos atspējot un atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.", "errors.unexpected_crash.copy_stacktrace": "Kopēt stacktrace uz starpliktuvi", "errors.unexpected_crash.report_issue": "Ziņot par problēmu", @@ -309,11 +309,11 @@ "home.column_settings.show_replies": "Rādīt atbildes", "home.explore_prompt.body": "Tavā mājas plūsmā būs dažādu ziņu sajaukums no atsaucēm, kurām esi izvēlējies sekot, personām, kurām esi izvēlējies sekot, un ziņām, kuras tās izceļ. Ja tas šķiet pārāk kluss, iespējams, vēlēsies:", "home.explore_prompt.title": "Šī ir tava Mastodon mājvieta.", - "home.hide_announcements": "Slēpt anonsus", + "home.hide_announcements": "Slēpt paziņojumus", "home.pending_critical_update.body": "Lūdzu, pēc iespējas ātrāk atjaunini savu Mastodon serveri!", "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Pieejams kritisks drošības jauninājums!", - "home.show_announcements": "Rādīt anonsus", + "home.show_announcements": "Rādīt paziņojumus", "interaction_modal.description.favourite": "Ar Mastodon kontu tu vari pievienot šo ziņu izlasei, lai informētu autoru, ka to novērtē, un saglabātu to vēlākai lasīšanai.", "interaction_modal.description.follow": "Ar Mastodon kontu tu vari sekot {name}, lai saņemtu viņu ziņas savā mājas plūsmā.", "interaction_modal.description.reblog": "Izmantojot kontu Mastodon, tu vari izcelt šo ziņu, lai kopīgotu to ar saviem sekotājiem.", @@ -369,7 +369,7 @@ "lightbox.close": "Aizvērt", "lightbox.compress": "Saspiest attēla skata lodziņu", "lightbox.expand": "Izvērst attēla skata lodziņu", - "lightbox.next": "Nākamais", + "lightbox.next": "Tālāk", "lightbox.previous": "Iepriekšējais", "limited_account_hint.action": "Tik un tā rādīt profilu", "limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.", @@ -422,8 +422,8 @@ "navigation_bar.search": "Meklēt", "navigation_bar.security": "Drošība", "not_signed_in_indicator.not_signed_in": "Lai piekļūtu šim resursam, tev ir jāpierakstās.", - "notification.admin.report": "{name} sūdzējās par {target}", - "notification.admin.sign_up": "{name} pierakstījās", + "notification.admin.report": "{name} ziņoja par {target}", + "notification.admin.sign_up": "{name} ir pierakstījies", "notification.favourite": "{name} pievienoja tavu ziņu izlasei", "notification.follow": "{name} uzsāka tev sekot", "notification.follow_request": "{name} nosūtīja tev sekošanas pieprasījumu", @@ -435,7 +435,7 @@ "notification.update": "{name} rediģēja ierakstu", "notifications.clear": "Notīrīt paziņojumus", "notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?", - "notifications.column_settings.admin.report": "Jaunas sūdzības:", + "notifications.column_settings.admin.report": "Jauni ziņojumi:", "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlase:", @@ -445,7 +445,7 @@ "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", "notifications.column_settings.mention": "Pieminējumi:", - "notifications.column_settings.poll": "Aptauju rezultāti:", + "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", "notifications.column_settings.reblog": "Pastiprinātie ieraksti:", "notifications.column_settings.show": "Rādīt kolonnā", @@ -457,13 +457,13 @@ "notifications.filter.all": "Visi", "notifications.filter.boosts": "Pastiprinātie ieraksti", "notifications.filter.favourites": "Izlases", - "notifications.filter.follows": "Sekošana", + "notifications.filter.follows": "Seko", "notifications.filter.mentions": "Pieminējumi", - "notifications.filter.polls": "Aptauju rezultāti", + "notifications.filter.polls": "Aptaujas rezultāti", "notifications.filter.statuses": "Jaunumi no cilvēkiem, kuriem tu seko", "notifications.grant_permission": "Piešķirt atļauju.", "notifications.group": "{count} paziņojumi", - "notifications.mark_as_read": "Atzīmēt visus paziņojumus kā izlasītus", + "notifications.mark_as_read": "Atzīmēt katru paziņojumu kā izlasītu", "notifications.permission_denied": "Darbvirsmas paziņojumi nav pieejami, jo iepriekš tika noraidīts pārlūka atļauju pieprasījums", "notifications.permission_denied_alert": "Darbvirsmas paziņojumus nevar iespējot, jo pārlūkprogrammai atļauja tika iepriekš atteikta", "notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.", @@ -563,25 +563,25 @@ "report.reasons.spam": "Tas ir spams", "report.reasons.spam_description": "Ļaunprātīgas saites, viltus iesaistīšana vai atkārtotas atbildes", "report.reasons.violation": "Tas pārkāpj servera noteikumus", - "report.reasons.violation_description": "Tu zini, ka tas pārkāpj konkrētus noteikumus", + "report.reasons.violation_description": "Tu zini, ka tas pārkāpj īpašus noteikumus", "report.rules.subtitle": "Atlasi visus atbilstošos", "report.rules.title": "Kuri noteikumi tiek pārkāpti?", "report.statuses.subtitle": "Atlasi visus atbilstošos", "report.statuses.title": "Vai ir kādi ieraksti, kas atbalsta šo sūdzību?", "report.submit": "Iesniegt", - "report.target": "Sūdzība par {target}", - "report.thanks.take_action": "Vari veikt šīs darbības, lai kontrolētu Mastodon redzamo saturu:", + "report.target": "Ziņošana par: {target}", + "report.thanks.take_action": "Tālāk ir norādītas iespējas, kā kontrolēt Mastodon redzamo saturu:", "report.thanks.take_action_actionable": "Kamēr mēs to izskatām, tu vari veikt darbības pret @{name}:", "report.thanks.title": "Vai nevēlies to redzēt?", "report.thanks.title_actionable": "Paldies, ka ziņoji, mēs to izskatīsim.", "report.unfollow": "Pārtraukt sekot @{name}", "report.unfollow_explanation": "Tu seko šim kontam. Lai vairs neredzētu viņu ziņas savā mājas plūsmā, pārtrauc viņiem sekot.", - "report_notification.attached_statuses": "{count, plural, one {Pievienots {count} ieraksts} other {Pievienoti {count} ieraksti}}", + "report_notification.attached_statuses": "Pievienoti {count, plural,one {{count} sūtījums} other {{count} sūtījumi}}", "report_notification.categories.legal": "Tiesisks", "report_notification.categories.other": "Cita", "report_notification.categories.spam": "Spams", "report_notification.categories.violation": "Noteikumu pārkāpums", - "report_notification.open": "Atvērt sūdzību", + "report_notification.open": "Atvērt ziņojumu", "search.no_recent_searches": "Nav nesen veiktu meklējumu", "search.placeholder": "Meklēšana", "search.quick_action.account_search": "Profili atbilst {x}", @@ -628,7 +628,7 @@ "status.direct_indicator": "Pieminēts privāti", "status.edit": "Rediģēt", "status.edited": "Rediģēts {date}", - "status.edited_x_times": "Rediģēts {count, plural, one {{count} reizi} other {{count} reizes}}", + "status.edited_x_times": "Rediģēts {count, plural, one {{count} reize} other {{count} reizes}}", "status.embed": "Iestrādāt", "status.favourite": "Iecienīts", "status.filter": "Filtrē šo ziņu", @@ -656,8 +656,8 @@ "status.remove_bookmark": "Noņemt grāmatzīmi", "status.replied_to": "Atbildēja {name}", "status.reply": "Atbildēt", - "status.replyAll": "Atbildēt uz pavedienu", - "status.report": "Sūdzēties par @{name}", + "status.replyAll": "Atbildēt uz tematu", + "status.report": "Ziņot par @{name}", "status.sensitive_warning": "Sensitīvs saturs", "status.share": "Kopīgot", "status.show_filter_reason": "Tomēr rādīt", @@ -668,7 +668,7 @@ "status.show_original": "Rādīt oriģinālu", "status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}", "status.translate": "Tulkot", - "status.translated_from_with": "Tulkots no {lang}, izmantojot {provider}", + "status.translated_from_with": "Tulkots no {lang} izmantojot {provider}", "status.uncached_media_warning": "Priekšskatījums nav pieejams", "status.unmute_conversation": "Noņemt sarunas apklusinājumu", "status.unpin": "Noņemt profila piespraudumu", @@ -681,16 +681,16 @@ "time_remaining.hours": "{number, plural, one {Atlikusi # stunda} other {Atlikušas # stundas}}", "time_remaining.minutes": "{number, plural, one {Atlikusi # minūte} other {Atlikušas # minūtes}}", "time_remaining.moments": "Atlikuši daži mirkļi", - "time_remaining.seconds": "{number, plural, one {Atlikusi # sekunde} other {Atlikušas # sekundes}}", + "time_remaining.seconds": "Atlikušas {number, plural, one {# sekunde} other {# sekundes}}", "timeline_hint.remote_resource_not_displayed": "{resource} no citiem serveriem nav parādīti.", "timeline_hint.resources.followers": "Sekotāji", - "timeline_hint.resources.follows": "Sekojošie", + "timeline_hint.resources.follows": "Seko", "timeline_hint.resources.statuses": "Vecāki ieraksti", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} cilvēki}} par {days, plural, one {# dienu} other {{days} dienām}}", "trends.trending_now": "Aktuālās tendences", - "ui.beforeunload": "Ja pametīsiet Mastodon, jūsu melnraksts tiks zaudēts.", + "ui.beforeunload": "Ja pametīsit Mastodonu, jūsu melnraksts tiks zaudēts.", "units.short.billion": "{count}Mjd", - "units.short.million": "{count}Mjn", + "units.short.million": "{count}M", "units.short.thousand": "{count}Tk", "upload_area.title": "Velc un nomet, lai augšupielādētu", "upload_button.label": "Pievienot bildi, video vai audio datni", @@ -707,7 +707,7 @@ "upload_modal.apply": "Pielietot", "upload_modal.applying": "Pielieto…", "upload_modal.choose_image": "Izvēlēties attēlu", - "upload_modal.description_placeholder": "Raibais runcis Rīgā ratu rumbā rūc", + "upload_modal.description_placeholder": "Raibais runcis rīgā ratu rumbā rūc", "upload_modal.detect_text": "Noteikt tekstu no attēla", "upload_modal.edit_media": "Rediģēt multividi", "upload_modal.hint": "Noklikšķini vai velc apli priekšskatījumā, lai izvēlētos fokusa punktu, kas vienmēr būs redzams visos sīktēlos.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index ae9cef5938..69db89dc86 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -537,7 +537,7 @@ "relative_time.today": "сегодня", "reply_indicator.cancel": "Отмена", "report.block": "Заблокировать", - "report.block_explanation": "В перестаните видеть посты этого пользователя, а он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять что вы заблокировали его/её.", + "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", "report.categories.legal": "Правовая информация", "report.categories.other": "Другое", "report.categories.spam": "Спам", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 02a34fd856..28a1a33dcb 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -460,7 +460,7 @@ lv: description_html: Tu gatavojies importēt domēna bloku sarakstu. Lūdzu, ļoti rūpīgi pārskati šo sarakstu, it īpaši, ja tu pats neesi to veidojis. existing_relationships_warning: Esošās sekošanas attiecības private_comment_description_html: 'Lai palīdzētu tev izsekot, no kurienes nāk importētie bloki, tiks izveidoti importētie bloki ar šādu privātu komentāru: %{comment}' - private_comment_template: Importēts no %{source} %{date} + private_comment_template: Importēt no %{source} %{date} title: Importēt bloķētos domēnus invalid_domain_block: 'Viens vai vairāki domēna bloķi tika izlaisti šādas kļūdas(-u) dēļ: %{error}' new: @@ -1107,7 +1107,7 @@ lv: new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pastu ar apstiprinājuma saiti! title: Pārbaudi savu iesūtni sign_in: - preamble_html: Pierakstieties ar saviem %{domain} akreditācijas datiem. Ja jūsu konts ir mitināts citā serverī, jūs nevarēsit pieteikties šeit. + preamble_html: Piesakies ar saviem %{domain} akreditācijas datiem. Ja tavs konts ir mitināts citā serverī, tu nevarēsi pieteikties šeit. title: Pierakstīties %{domain} sign_up: manual_review: Reģistrācijas domēnā %{domain} manuāli pārbauda mūsu moderatori. Lai palīdzētu mums apstrādāt tavu reģistrāciju, uzraksti mazliet par sevi un to, kāpēc vēlies kontu %{domain}. From f71b7943f96af403cbdc38d2455fa89d363fae08 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 6 Oct 2023 12:58:02 +0200 Subject: [PATCH 216/237] Fix some remote posts getting truncated (#27307) --- .../mastodon/components/__tests__/hashtag_bar.tsx | 15 +++++++++++++++ .../mastodon/components/hashtag_bar.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx index 1856b7109e..b7225fc92e 100644 --- a/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/__tests__/hashtag_bar.tsx @@ -45,6 +45,21 @@ describe('computeHashtagBarForStatus', () => { ); }); + it('does not truncate the contents when the last child is a text node', () => { + const status = createStatus( + 'this is a #test. Some more text', + ['test'], + ); + + const { hashtagsInBar, statusContentProps } = + computeHashtagBarForStatus(status); + + expect(hashtagsInBar).toEqual([]); + expect(statusContentProps.statusContent).toMatchInlineSnapshot( + `"this is a #test. Some more text"`, + ); + }); + it('extract tags from the last line', () => { const status = createStatus( '

Simple text

#hashtag

', diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index d45a6e20eb..91fa922198 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -109,7 +109,7 @@ export function computeHashtagBarForStatus(status: StatusLike): { const lastChild = template.content.lastChild; - if (!lastChild) return defaultResult; + if (!lastChild || lastChild.nodeType === Node.TEXT_NODE) return defaultResult; template.content.removeChild(lastChild); const contentWithoutLastLine = template; From 8f55224307433e5d236b0ec31b4c04fc1b24a600 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Sat, 7 Oct 2023 20:12:21 +0100 Subject: [PATCH 217/237] Add 4.2.x to supported versions in SECURITY.md (#27317) --- SECURITY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/SECURITY.md b/SECURITY.md index 9a08c4e251..3e13377db6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -15,6 +15,7 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through | Version | Supported | | ------- | ---------------- | +| 4.2.x | Yes | | 4.1.x | Yes | | 4.0.x | Until 2023-10-31 | | 3.5.x | Until 2023-12-31 | From 5a33b814793e8773f5e51c54b98363c15f7324b4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:32:06 +0200 Subject: [PATCH 218/237] New Crowdin Translations (automated) (#27321) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/my.json | 2 ++ app/javascript/mastodon/locales/si.json | 21 +++++++++++++----- config/locales/devise.si.yml | 2 +- config/locales/si.yml | 29 +++++++++++++------------ config/locales/simple_form.my.yml | 1 + config/locales/simple_form.si.yml | 7 ++++-- 6 files changed, 39 insertions(+), 23 deletions(-) diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 8e0b7ab41e..103f4e0f8d 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -312,6 +312,7 @@ "home.hide_announcements": "ကြေညာချက်များကို ဖျောက်ပါ", "home.pending_critical_update.body": "သင့် Mastodon ဆာဗာ အမြန်ဆုံး အပ်ဒိတ်လုပ်ပါ။", "home.pending_critical_update.link": "အပ်ဒိတ်များကြည့်ရန်", + "home.pending_critical_update.title": "အရေးကြီးသည့် လုံခြုံရေးအပ်ဒိတ် ရနိုင်ပါမည်။", "home.show_announcements": "ကြေညာချက်များကို ပြပါ", "interaction_modal.description.favourite": "Mastodon အကောင့်ဖြင့် ဤပို့စ်ကို သင် favorite ပြုလုပ်ကြောင်း စာရေးသူအား အသိပေးပြီး နောက်ပိုင်းတွင် သိမ်းဆည်းနိုင်သည်။", "interaction_modal.description.follow": "Mastodon အကောင့်ဖြင့် သင်၏ ပင်မစာမျက်နှာတွင် ၎င်းတို့၏ ပို့စ်များကို ရရှိရန်အတွက် {name} ကို စောင့်ကြည့်နိုင်ပါသည်။", @@ -594,6 +595,7 @@ "search_popout.options": "ရွေးချယ်ထားသည်များ ရှာဖွေရန်", "search_popout.quick_actions": "အမြန်လုပ်ဆောင်မှုများ", "search_popout.recent": "လတ်တလော ရှာဖွေမှုများ", + "search_popout.specific_date": "သီးခြားရက်စွဲ", "search_popout.user": "အသုံးပြုသူ", "search_results.accounts": "စာမျက်နှာ", "search_results.all": "အားလုံး", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 632e716bca..43bd5a1bb5 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -6,6 +6,7 @@ "about.rules": "සේවාදායකයේ නීති", "account.account_note_header": "සටහන", "account.add_or_remove_from_list": "ලැයිස්තු වලින් එකතු හෝ ඉවත් කරන්න", + "account.badges.bot": "ස්වයංක්‍රියයි", "account.badges.group": "සමූහය", "account.block": "@{name} අවහිර කරන්න", "account.block_domain": "{domain} වසම අවහිර කරන්න", @@ -21,14 +22,15 @@ "account.follow": "අනුගමනය", "account.followers": "අනුගාමිකයින්", "account.followers.empty": "කිසිවෙක් අනුගමනය කර නැත.", - "account.following": "අනුගමනය", - "account.following_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", + "account.followers_counter": "{count, plural, one {අනුගාමිකයින් {counter}} other {අනුගාමිකයින් {counter}}}", + "account.following": "අනුගමන", + "account.following_counter": "{count, plural, one {අනුගමන {counter}} other {අනුගමන {counter}}}", "account.follows.empty": "තවමත් කිසිවෙක් අනුගමනය නොකරයි.", "account.follows_you": "ඔබව අනුගමනය කරයි", "account.go_to_profile": "පැතිකඩට යන්න", "account.joined_short": "එක් වූ දිනය", "account.link_verified_on": "මෙම සබැඳියේ අයිතිය {date} දී පරීක්‍ෂා කෙරිණි", - "account.media": "මාධ්‍යය", + "account.media": "මාධ්‍ය", "account.mention": "@{name} සඳහන් කරන්ක", "account.mute": "@{name} නිහඬ කරන්න", "account.mute_short": "නිහඬ", @@ -37,6 +39,7 @@ "account.posts_with_replies": "ලිපි සහ පිළිතුරු", "account.report": "@{name} වාර්තා කරන්න", "account.share": "@{name} ගේ පැතිකඩ බෙදාගන්න", + "account.statuses_counter": "{count, plural, one {ලිපි {counter}} other {ලිපි {counter}}}", "account.unblock": "@{name} අනවහිර කරන්න", "account.unblock_domain": "{domain} වසම අනවහිර කරන්න", "account.unblock_short": "අනවහිර", @@ -53,11 +56,17 @@ "audio.hide": "හඬපටය සඟවන්න", "autosuggest_hashtag.per_week": "සතියකට {count}", "boost_modal.combo": "ඊළඟ වතාවේ මෙය මඟ හැරීමට {combo} එබීමට හැකිය", + "bundle_column_error.copy_stacktrace": "දෝෂ වාර්තාවේ පිටපතක්", + "bundle_column_error.error.title": "අපොයි!", + "bundle_column_error.network.title": "ජාලයේ දෝෂයකි", "bundle_column_error.retry": "නැවත උත්සාහ කරන්න", + "bundle_column_error.return": "ආපසු මුලට යන්න", + "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "වසන්න", "bundle_modal_error.message": "මෙම සංරචකය පූරණයේ දී යම් දෙයක් වැරදී ඇත.", "bundle_modal_error.retry": "නැවත උත්සාහ කරන්න", "closed_registrations_modal.find_another_server": "වෙනත් සේවාදායක", + "closed_registrations_modal.title": "මාස්ටඩන් හි ලියාපදිංචි වන්න", "column.about": "පිලිබඳව", "column.blocks": "අවහිර කළ අය", "column.bookmarks": "පොත්යොමු", @@ -159,7 +168,7 @@ "empty_column.domain_blocks": "අවහිර කරන ලද වසම් නැත.", "empty_column.explore_statuses": "දැන් කිසිවක් නැඹුරු නොවේ. පසුව නැවත පරීක්ෂා කරන්න!", "empty_column.follow_requests": "ඔබට තවමත් අනුගමන ඉල්ලීම් ලැබී නැත. ඉල්ලීමක් ලැබුණු විට, එය මෙහි පෙන්වනු ඇත.", - "empty_column.home": "ඔබගේ මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", + "empty_column.home": "මුල් පිටුව හිස් ය! මෙය පිරවීමට බොහෝ පුද්ගලයින් අනුගමනය කරන්න.", "empty_column.lists": "ඔබට තවමත් ලැයිස්තු කිසිවක් නැත. ඔබ එකක් සාදන විට, එය මෙහි පෙන්වනු ඇත.", "empty_column.mutes": "ඔබ තවමත් කිසිදු පරිශීලකයෙකු නිහඬ කර නැත.", "empty_column.notifications": "ඔබට දැනුම්දීම් ලැබී නැත. අන් අය සහ ඔබ අතර අන්‍යෝන්‍ය බලපවත්වන දෑ මෙහි දිස්වනු ඇත.", @@ -264,7 +273,7 @@ "navigation_bar.favourites": "ප්‍රියතමයන්", "navigation_bar.filters": "නිහඬ කළ වචන", "navigation_bar.follow_requests": "අනුගමන ඉල්ලීම්", - "navigation_bar.follows_and_followers": "අනුගමනය හා අනුගාමිකයින්", + "navigation_bar.follows_and_followers": "අනුගමන හා අනුගාමික", "navigation_bar.lists": "ලැයිස්තු", "navigation_bar.logout": "නික්මෙන්න", "navigation_bar.mutes": "නිහඬ කළ අය", @@ -445,7 +454,7 @@ "time_remaining.seconds": "{number, plural, one {තත්පර #} other {තත්පර #}} ක් ඉතිරිය", "timeline_hint.remote_resource_not_displayed": "වෙනත් සේවාදායකයන්ගෙන් {resource} දර්ශනය නොවේ.", "timeline_hint.resources.followers": "අනුගාමිකයින්", - "timeline_hint.resources.follows": "අනුගමනය", + "timeline_hint.resources.follows": "අනුගමන", "timeline_hint.resources.statuses": "පරණ ලිපි", "trends.trending_now": "දැන් නැගී එන", "ui.beforeunload": "ඔබ මාස්ටඩන් හැර ගියහොත් කටුපිටපත අහිමි වේ.", diff --git a/config/locales/devise.si.yml b/config/locales/devise.si.yml index c866bed0e9..362f97b8a9 100644 --- a/config/locales/devise.si.yml +++ b/config/locales/devise.si.yml @@ -86,7 +86,7 @@ si: signed_up_but_locked: ඔබ සාර්ථකව ලියාපදිංචි වී ඇත. කෙසේ වෙතත්, ඔබගේ ගිණුම අගුලු දමා ඇති නිසා අපට ඔබව පුරනය කිරීමට නොහැකි විය. signed_up_but_pending: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබ සබැඳිය ක්ලික් කළ පසු, අපි ඔබගේ අයදුම්පත සමාලෝචනය කරන්නෙමු. එය අනුමත වුවහොත් ඔබට දැනුම් දෙනු ලැබේ. signed_up_but_unconfirmed: තහවුරු කිරීමේ සබැඳියක් සහිත පණිවිඩයක් ඔබගේ විද්‍යුත් තැපැල් ලිපිනයට යවා ඇත. ඔබගේ ගිණුම සක්‍රිය කිරීමට කරුණාකර සබැඳිය අනුගමනය කරන්න. ඔබට මෙම විද්‍යුත් තැපෑල නොලැබුනේ නම් කරුණාකර ඔබගේ අයාචිත තැපැල් ෆෝල්ඩරය පරීක්ෂා කරන්න. - update_needs_confirmation: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන වුවද අපට නව වි-තැපැල් ලිපිනය තහවුරු කර ගැනීමට වුවමනා කෙරේ. කරුණාකර ඔබගේ වි-තැපෑල පරීක්‍ෂා කර ඊට අදාළ සබැඳිය අනුගමනය කර ඔබගේ නව වි-තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම වි-තැපෑල නොලැබුණේ නම් කරුණාකර අයාචිත තැපැල් බහාලුම බලන්න. + update_needs_confirmation: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන වුවද අපට නව වි-තැපැල් ලිපිනය සත්‍යාපනය කර ගැනීමට වුවමනා කෙරේ. කරුණාකර ඔබගේ වි-තැපෑල පරීක්‍ෂා කර ඊට අදාළ සබැඳිය අනුගමනය කර ඔබගේ නව වි-තැපැල් ලිපිනය තහවුරු කරන්න. ඔබට මෙම වි-තැපෑල නොලැබුණේ නම් කරුණාකර අයාචිත තැපැල් බහාලුම බලන්න. updated: ඔබගේ ගිණුම සාර්ථකව යාවත්කාලීන කර ඇත. sessions: already_signed_out: සාර්ථකව නික්මිණි. diff --git a/config/locales/si.yml b/config/locales/si.yml index 51e1b838f3..8f04533519 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -11,7 +11,7 @@ si: followers: one: අනුගාමිකයා other: අනුගාමිකයින් - following: අනුගමනය + following: අනුගමන instance_actor_flash: මෙම ගිණුම සේවාදායකයම නියෝජනය කිරීමට භාවිතා කරන අතථ්‍ය නළුවෙකු වන අතර කිසිදු තනි පරිශීලකයෙකු නොවේ. එය ෆෙඩරේෂන් අරමුණු සඳහා භාවිතා කරන අතර අත්හිටුවිය යුතු නොවේ. last_active: අවසාන ක්රියාකාරී link_verified_on: මෙම සබැඳියේ හිමිකාරිත්වය %{date}හි පරීක්ෂා කරන ලදී @@ -383,7 +383,7 @@ si: status: තත්‍වය suppress: අනුගමනය නිර්දේශය යටපත් කරන්න suppressed: යටපත් කළා - title: නිර්දේශ අනුගමනය කරන්න + title: අනුගමනයට නිර්දේශ unsuppress: නිර්දේශ පිළිපැදීම ප්‍රතිසාධනය කරන්න instances: availability: @@ -622,7 +622,7 @@ si: history: අනුවාද ඉතිහාසය language: භාෂාව media: - title: මාධ්‍යය + title: මාධ්‍ය metadata: පාරදත්ත no_status_selected: කිසිවක් නොතේරූ බැවින් ලිපි කිසිවක් වෙනස් කර නැත open: ලිපිය අරින්න @@ -788,7 +788,7 @@ si: localization: body: මාස්ටඩන් ස්වේච්ඡාවෙන් පරිවර්තනය කර ඇත. guide_link: https://crowdin.com/project/mastodon - guide_link_text: සෑම කෙනෙකුටම දායක විය හැකිය. + guide_link_text: පරිවර්තකයින්ට දායක වීමට හැකිය. sensitive_content: සංවේදී අන්තර්ගත application_mailer: notification_preferences: ඊමේල් මනාප වෙනස් කරන්න @@ -1192,7 +1192,7 @@ si: relationships: activity: ගිණුමේ ක්‍රියාකාරකම් dormant: නිදිමතයි - follow_selected_followers: තෝරාගත් අනුගාමිකයින් අනුගමනය කරන්න + follow_selected_followers: තේරූ අනුගාමිකයින් අනුගමනය කරන්න followers: අනුගාමිකයින් following: අනුගමනය invited: ආරාධනා කළා @@ -1202,9 +1202,9 @@ si: mutual: අන්යෝන්ය primary: ප්‍රාථමික relationship: සම්බන්ධතාවය - remove_selected_domains: තෝරාගත් වසම් වලින් සියලුම අනුගාමිකයින් ඉවත් කරන්න - remove_selected_followers: තෝරාගත් අනුගාමිකයින් ඉවත් කරන්න - remove_selected_follows: තෝරාගත් පරිශීලකයින් අනුගමනය නොකරන්න + remove_selected_domains: තේරූ වසම් වල සියලුම අනුගාමිකයින් ඉවත් කරන්න + remove_selected_followers: තේරූ අනුගාමිකයින් ඉවත් කරන්න + remove_selected_follows: තේරූ අය අනුගමනය නොකරන්න status: ගිණුමේ තත්‍වය remote_follow: missing_resource: ඔබගේ ගිණුම සඳහා අවශ්‍ය යළි-යොමුවීම් URL එක සොයා ගැනීමට නොහැකි විය @@ -1280,7 +1280,7 @@ si: notifications: දැනුම්දීම් preferences: අභිප්‍රේත profile: ප්‍රසිද්ධ පැතිකඩ - relationships: අනුගාමිකයින් සහ අනුගාමිකයින් + relationships: අනුගමන හා අනුගාමික statuses_cleanup: ස්වයංක්‍රීය ලිපි මැකීම two_factor_authentication: ද්වි සාධක Aut webauthn_authentication: ආරක්‍ෂණ යතුරු @@ -1325,7 +1325,7 @@ si: title: '%{name}: "%{quote}"' visibilities: direct: සෘජු - private: අනුගාමිකයින්-පමණි + private: අනුගාමිකයින් පමණි private_long: අනුගාමිකයින්ට පමණක් පෙන්වන්න public: ප්‍රසිද්ධ public_long: හැමෝටම පේනවා @@ -1337,12 +1337,13 @@ si: ignore_favs: ප්‍රියතමයන් නොසලකන්න interaction_exceptions: අන්තර්ක්‍රියා මත පදනම් වූ ව්‍යතිරේක keep_direct: සෘජු පණිවිඩ තබාගන්න - keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් මැකෙන්නේ නැත + keep_direct_hint: ඔබගේ සෘජු පණිවිඩ කිසිවක් නොමැකෙයි keep_media: මාධ්‍ය ඇමුණුම් සහිත ලිපි තබාගන්න - keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් මැකෙන්නේ නැත + keep_media_hint: මාධ්‍ය ඇමුණුම් සහිත ඔබගේ ලිපි කිසිවක් නොමැකෙයි keep_pinned: ඇමිණූ ලිපි තබාගන්න keep_pinned_hint: ඔබ ඇමිණූ ලිපි කිසිවක් නොමැකෙයි - keep_polls_hint: ඔබගේ මත විමසුම් මැකෙන්නේ නැත + keep_polls: මත විමසුම් තබාගන්න + keep_polls_hint: ඔබගේ මත විමසුම් නොමැකෙයි keep_self_bookmark: ඔබ පොත්යොමු තැබූ ලිපි තබාගන්න keep_self_bookmark_hint: ඔබගේම ලිපි වලට පොත්යොමු තබා ඇත්නම් ඒවා මකා නොදැමෙයි keep_self_fav: ඔබ ප්‍රිය කළ ලිපි තබාගන්න @@ -1356,7 +1357,7 @@ si: '604800': සති 1 '63113904': අවුරුදු 2 '7889238': මාස 3 - min_age_label: වයස් සීමාව + min_age_label: කාල සීමාව min_favs: අවම වශයෙන් ප්‍රිය කළ ලිපි තබාගන්න stream_entries: sensitive_content: සංවේදී අන්තර්ගතයකි diff --git a/config/locales/simple_form.my.yml b/config/locales/simple_form.my.yml index cf15616d24..80b234c17c 100644 --- a/config/locales/simple_form.my.yml +++ b/config/locales/simple_form.my.yml @@ -323,6 +323,7 @@ my: url: URL ဆုံးမှတ် 'no': မလုပ်ပါ not_recommended: ထောက်ခံထားမှုမရှိ + overridden: ပယ်ဖျက် recommended: ထောက်ခံထားပြီး required: mark: "*" diff --git a/config/locales/simple_form.si.yml b/config/locales/simple_form.si.yml index 7e529c0eee..ededa85bcc 100644 --- a/config/locales/simple_form.si.yml +++ b/config/locales/simple_form.si.yml @@ -90,6 +90,8 @@ si: fields: name: නම්පත value: අන්තර්ගතය + show_collections: අනුගමන හා අනුගාමිකයින් පැතිකඩෙහි පෙන්වන්න + unlocked: නව අනුගාමිකයින් ස්වයංක්‍රීයව පිළිගන්න account_alias: acct: පැරණි ගිණුමේ හැසිරවීම account_migration: @@ -118,8 +120,9 @@ si: appeal: text: මෙම තීරණය ආපසු හැරවිය යුත්තේ මන්දැයි පැහැදිලි කරන්න defaults: - autofollow: ඔබගේ ගිණුම අනුගමනය කිරීමට ආරාධනා කරන්න + autofollow: ඔබගේ ගිණුම අනුගමනයයට ආරාධනා කරන්න avatar: පැතිකඩ ඡායාරූපය + bot: මෙම ගිණුම ස්වයංක්‍රියයි chosen_languages: භාෂා පෙරන්න confirm_new_password: නව මුරපදය තහවුරු කරන්න confirm_password: මුරපදය තහවුරු කරන්න @@ -140,7 +143,7 @@ si: otp_attempt: ද්වි සාධක කේතය password: මුරපදය phrase: මූල පදය හෝ වාක්‍ය ඛණ්ඩය - setting_advanced_layout: උසස් වෙබ් අතුරු මුහුණත සබල කරන්න + setting_advanced_layout: සංකීර්ණ අතුරු මුහුණත සබල කරන්න setting_always_send_emails: සෑම විටම විද්‍යුත් තැපැල් දැනුම්දීම් යවන්න setting_auto_play_gif: සජීවිකරණ GIF ස්වයංක්‍රීයව ධාවනය කරන්න setting_default_language: ලිපිවල භාෂාව From 6dcccd325fac7ff7b96caafb3b39230a91e373d3 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 9 Oct 2023 12:21:02 +0200 Subject: [PATCH 219/237] Fix clicking on already-opened thread post scrolling to the top of the thread (#27331) --- .../mastodon/features/status/index.jsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index 799354d183..482323e089 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -607,6 +607,22 @@ class Status extends ImmutablePureComponent { this.setState({ fullscreen: isFullscreen() }); }; + shouldUpdateScroll = (prevRouterProps, { location }) => { + // Do not change scroll when opening a modal + if (location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) { + return false; + } + + // Scroll to focused post if it is loaded + const child = this.node?.querySelector('.detailed-status__wrapper'); + if (child) { + return [0, child.offsetTop]; + } + + // Do not scroll otherwise, `componentDidUpdate` will take care of that + return false; + }; + render () { let ancestors, descendants; const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props; @@ -660,7 +676,7 @@ class Status extends ImmutablePureComponent { )} /> - +
{ancestors} From bcfc3b3f6577d92bf4dba287c884ccaf4290b0da Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 9 Oct 2023 16:46:09 +0200 Subject: [PATCH 220/237] Fix clicking on already-loaded thread scrolling to the top of the thread (#27338) --- .../mastodon/features/status/index.jsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index 482323e089..39823268b2 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -220,6 +220,8 @@ class Status extends ImmutablePureComponent { componentDidMount () { attachFullscreenListener(this.onFullScreenChange); + + this._scrollStatusIntoView(); } UNSAFE_componentWillReceiveProps (nextProps) { @@ -579,10 +581,10 @@ class Status extends ImmutablePureComponent { this.node = c; }; - componentDidUpdate (prevProps) { - const { status, ancestorsIds, multiColumn } = this.props; + _scrollStatusIntoView () { + const { status, multiColumn } = this.props; - if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) { + if (status) { window.requestAnimationFrame(() => { this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true); @@ -599,6 +601,14 @@ class Status extends ImmutablePureComponent { } } + componentDidUpdate (prevProps) { + const { status, ancestorsIds } = this.props; + + if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) { + this._scrollStatusIntoView(); + } + } + componentWillUnmount () { detachFullscreenListener(this.onFullScreenChange); } From 4262cfbe41956d34103fed45ca1a028f47fdbadf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 10:06:37 +0200 Subject: [PATCH 221/237] New Crowdin Translations (automated) (#27347) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ko.json | 2 +- app/javascript/mastodon/locales/uk.json | 30 ++++++++++++------------- config/locales/simple_form.es-MX.yml | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 5b37324f7d..f2237d693e 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -102,7 +102,7 @@ "bundle_modal_error.message": "컴포넌트를 불러오는 중 문제가 발생했습니다.", "bundle_modal_error.retry": "다시 시도", "closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.", - "closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 만약 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.", + "closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.", "closed_registrations_modal.find_another_server": "다른 서버 찾기", "closed_registrations_modal.preamble": "마스토돈은 분산화 되어 있습니다, 그렇기 때문에 어디에서 계정을 생성하든, 이 서버에 있는 누구와도 팔로우와 상호작용을 할 수 있습니다. 심지어는 스스로 서버를 만드는 것도 가능합니다!", "closed_registrations_modal.title": "마스토돈에서 가입", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 48e76141d8..aa17e12545 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -79,16 +79,16 @@ "admin.impact_report.instance_accounts": "Профілі облікових записів буде видалено", "admin.impact_report.instance_followers": "Підписники, яких можуть втратити наші користувачі", "admin.impact_report.instance_follows": "Підписники, яких можуть втратити їхні користувачі", - "admin.impact_report.title": "Наслідки", - "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.", + "admin.impact_report.title": "Підсумки впливу", + "alert.rate_limited.message": "Спробуйте ще раз за {retry_time, time, medium}.", "alert.rate_limited.title": "Швидкість обмежена", "alert.unexpected.message": "Сталася неочікувана помилка.", "alert.unexpected.title": "Ой!", "announcement.announcement": "Оголошення", "attachments_list.unprocessed": "(не оброблено)", "audio.hide": "Сховати аудіо", - "autosuggest_hashtag.per_week": "{count} в тиждень", - "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", + "autosuggest_hashtag.per_week": "{count} на тиждень", + "boost_modal.combo": "Ви можете натиснути {combo}, щоби пропустити це наступного разу", "bundle_column_error.copy_stacktrace": "Копіювати звіт про помилку", "bundle_column_error.error.body": "Неможливо показати запитану сторінку. Це може бути спричинено помилкою у нашому коді, або через проблему сумісності з браузером.", "bundle_column_error.error.title": "О, ні!", @@ -140,7 +140,7 @@ "compose.saved.body": "Допис збережено.", "compose_form.direct_message_warning_learn_more": "Дізнатися більше", "compose_form.encryption_warning": "Дописи на Mastodon не захищені шифруванням. Не поширюйте жодну делікатну інформацію.", - "compose_form.hashtag_warning": "Цей допис не буде зображений у жодній стрічці гештеґу, оскільки він прихований. Тільки публічні дописи можуть бути знайдені за гештеґом.", + "compose_form.hashtag_warning": "Цього допису не буде під жодним гештеґом, оскільки він не є загальнодоступним. За гештеґом можна шукати лише публічні дописи.", "compose_form.lock_disclaimer": "Ваш обліковий запис не {locked}. Будь-який користувач може підписатися на вас та переглядати ваші дописи для підписників.", "compose_form.lock_disclaimer.lock": "приватний", "compose_form.placeholder": "Що у вас на думці?", @@ -151,7 +151,7 @@ "compose_form.poll.switch_to_multiple": "Дозволити вибір декількох відповідей", "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді", "compose_form.publish": "Опублікувати", - "compose_form.publish_form": "Опублікувати", + "compose_form.publish_form": "Новий допис", "compose_form.publish_loud": "{publish}!", "compose_form.save_changes": "Зберегти зміни", "compose_form.sensitive.hide": "{count, plural, one {Позначити медіа делікатним} other {Позначити медіа делікатними}}", @@ -206,7 +206,7 @@ "dismissable_banner.explore_tags": "Ці хештеги зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі. Хештеги, які використовуються більшою кількістю людей, мають вищий рейтинг.", "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей в соціальній мережі, на які підписані люди в {domain}.", "embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.", - "embed.preview": "Ось як він виглядатиме:", + "embed.preview": "Ось який вигляд це матиме:", "emoji_button.activity": "Діяльність", "emoji_button.clear": "Очистити", "emoji_button.custom": "Власні", @@ -227,7 +227,7 @@ "empty_column.account_unavailable": "Профіль недоступний", "empty_column.blocks": "Ви ще не заблокували жодного користувача.", "empty_column.bookmarked_statuses": "У вас ще немає дописів у закладках. Коли ви щось додасте до закладок, воно з'явиться тут.", - "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!", + "empty_column.community": "Локальна стрічка порожня. Напишіть щось, щоб розігріти народ!", "empty_column.direct": "У вас ще немає жодних особистих згадок. Коли ви надсилаєте чи отримуєте повідомлення, воно з'явиться тут.", "empty_column.domain_blocks": "Тут поки немає прихованих доменів.", "empty_column.explore_statuses": "Нема нічого популярного. Подивіться пізніше!", @@ -240,10 +240,10 @@ "empty_column.list": "Цей список порожній. Коли його учасники додадуть нові дописи, вони з'являться тут.", "empty_column.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.", "empty_column.mutes": "Ви ще не приховали жодного користувача.", - "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", + "empty_column.notifications": "У вас ще немає сповіщень. Коли інші люди почнуть взаємодіяти з вами, ви побачите їх тут.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших серверів, щоб заповнити стрічку", "error.unexpected_crash.explanation": "Через помилку у нашому коді або несумісність браузера, ця сторінка не може бути зображена коректно.", - "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку викликано додатком браузера або автоматичним засобом перекладу.", + "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку спричинило розширення браузера або автоматичний засіб перекладу.", "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний застосунок.", "error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.", "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", @@ -394,7 +394,7 @@ "moved_to_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений, оскільки вас перенесено до {movedToAccount}.", "mute_modal.duration": "Тривалість", "mute_modal.hide_notifications": "Сховати сповіщення цього користувача?", - "mute_modal.indefinite": "Назавжди", + "mute_modal.indefinite": "Невизначений строк", "navigation_bar.about": "Про застосунок", "navigation_bar.advanced_interface": "Відкрити в розширеному вебінтерфейсі", "navigation_bar.blocks": "Заблоковані користувачі", @@ -428,7 +428,7 @@ "notification.follow": "{name} підписалися на вас", "notification.follow_request": "{name} відправили запит на підписку", "notification.mention": "{name} згадали вас", - "notification.own_poll": "Ваше опитування завершено", + "notification.own_poll": "Ваше опитування завершилося", "notification.poll": "Опитування, у якому ви голосували, скінчилося", "notification.reblog": "{name} поширює ваш допис", "notification.status": "{name} щойно дописує", @@ -480,7 +480,7 @@ "onboarding.follows.title": "Персоналізуйте домашню стрічку", "onboarding.share.lead": "Розкажіть людям про те, як вони можуть знайти вас на Mastodon!", "onboarding.share.message": "Я {username} на #Mastodon! Стежте за мною на {url}", - "onboarding.share.next_steps": "Можливі наступні кроки:", + "onboarding.share.next_steps": "Можливі такі кроки:", "onboarding.share.title": "Поділитися своїм профілем", "onboarding.start.lead": "Тепер ви — частина Mastodon, унікальної децентралізованої платформи соціальних медіа, де ви, а не алгоритми керують вашими вподобаннями. Розпочнімо роботу:", "onboarding.start.skip": "Хочете пропустити?", @@ -694,7 +694,7 @@ "units.short.thousand": "{count} тис", "upload_area.title": "Перетягніть сюди, щоб завантажити", "upload_button.label": "Додати зображення, відео або аудіо", - "upload_error.limit": "Ліміт завантаження файлів перевищено.", + "upload_error.limit": "Ви перевищили ліміт завантаження файлів.", "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.audio_description": "Опишіть для людей із вадами слуху", "upload_form.description": "Опишіть для людей з вадами зору", @@ -713,7 +713,7 @@ "upload_modal.hint": "Клацніть або перетягніть коло на превʼю, щоб обрати точку, яку буде завжди видно на мініатюрах.", "upload_modal.preparing_ocr": "Підготовка OCR…", "upload_modal.preview_label": "Переглянути ({ratio})", - "upload_progress.label": "Завантаження...", + "upload_progress.label": "Вивантаження...", "upload_progress.processing": "Обробка…", "username.taken": "Це ім'я користувача вже зайнято. Спробуйте інше", "video.close": "Закрити відео", diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 0ed471a1f8..932ed6c59a 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -323,7 +323,7 @@ es-MX: url: URL de Endpoint 'no': 'No' not_recommended: No recomendado - overridden: Sobrescrito + overridden: Reemplazado recommended: Recomendado required: mark: "*" From a1f7d2d19a493e6e6a9e9e17bbca24c9f10de88b Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 10 Oct 2023 11:35:32 +0200 Subject: [PATCH 222/237] Fix scroll position in thread view reseting when closing a modal (#27350) --- app/javascript/mastodon/features/status/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx index 39823268b2..d6a6deeb76 100644 --- a/app/javascript/mastodon/features/status/index.jsx +++ b/app/javascript/mastodon/features/status/index.jsx @@ -619,7 +619,7 @@ class Status extends ImmutablePureComponent { shouldUpdateScroll = (prevRouterProps, { location }) => { // Do not change scroll when opening a modal - if (location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) { + if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) { return false; } From 790fd1374f0cd39bc620faa38d436983e5786061 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 3 Oct 2023 11:30:50 +0200 Subject: [PATCH 223/237] Bump version to v4.2.1 --- CHANGELOG.md | 39 +++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 6 +++--- lib/mastodon/version.rb | 2 +- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fab3104bac..6eebe5c85d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,45 @@ All notable changes to this project will be documented in this file. +## [4.2.1] - 2023-10-10 + +### Added + +- Add redirection on `/deck` URLs for logged-out users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27128)) +- Add support for v4.2.0 migrations to `tootctl maintenance fix-duplicates` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27147)) + +### Changed + +- Change some worker lock TTLs to be shorter-lived ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27246)) +- Change user archive export allowed period from 7 days to 6 days ([suddjian](https://github.com/mastodon/mastodon/pull/27200)) + +### Fixed + +- Fix clicking on already-opened thread post scrolling to the top of the thread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27331), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27338), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27350)) +- Fix some remote posts getting truncated ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27307)) +- Fix some cases of infinite scroll code trying to fetch inaccessible posts in a loop ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27286)) +- Fix `Vary` headers not being set on some redirects ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27272)) +- Fix mentions being matched in some URL query strings ([mjankowski](https://github.com/mastodon/mastodon/pull/25656)) +- Fix unexpected linebreak in version string in the Web UI ([vmstan](https://github.com/mastodon/mastodon/pull/26986)) +- Fix double scroll bars in some columns in advanced interface ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27187)) +- Fix boosts of local users being filtered in account timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27204)) +- Fix multiple instances of the trend refresh scheduler sometimes running at once ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27253)) +- Fix importer returning negative row estimates ([jgillich](https://github.com/mastodon/mastodon/pull/27258)) +- Fix incorrectly keeping outdated update notices absent from the API endpoint ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27021)) +- Fix import progress not updating on certain failures ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27247)) +- Fix websocket connections being incorrectly decremented twice on errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/27238)) +- Fix explore prompt appearing because of posts being received out of order ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27211)) +- Fix explore prompt sometimes showing up when the home TL is loading ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27062)) +- Fix link handling of mentions in user profiles when logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27185)) +- Fix filtering audit log for entries about disabling 2FA ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27186)) +- Fix notification toasts not respecting reduce-motion ([c960657](https://github.com/mastodon/mastodon/pull/27178)) +- Fix retention dashboard not displaying correct month ([vmstan](https://github.com/mastodon/mastodon/pull/27180)) +- Fix tIME chunk not being properly removed from PNG uploads ([TheEssem](https://github.com/mastodon/mastodon/pull/27111)) +- Fix division by zero in video in bitrate computation code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27129)) +- Fix inefficient queries in “Follows and followers” as well as several admin pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27116), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27306)) +- Fix ActiveRecord using two connection pools when no replica is defined ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27061)) +- Fix the search documentation URL in system checks ([renchap](https://github.com/mastodon/mastodon/pull/27036)) + ## [4.2.0] - 2023-09-21 The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki). diff --git a/docker-compose.yml b/docker-compose.yml index d19f278f75..1a180b0890 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: web: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" @@ -77,7 +77,7 @@ services: streaming: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: node ./streaming @@ -95,7 +95,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.2.0 + image: ghcr.io/mastodon/mastodon:v4.2.1 restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 46c07596d1..00538d07cc 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -13,7 +13,7 @@ module Mastodon end def patch - 0 + 1 end def default_prerelease From e61350c70320a08490afa0e2d11582c3eaf50a16 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 21:40:55 +0900 Subject: [PATCH 224/237] =?UTF-8?q?Fix:=20#78=20=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=81=AE`as:Limited`=E3=82=92`kmyblue:Limite?= =?UTF-8?q?d`=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 2 +- app/lib/activitypub/tag_manager.rb | 4 ++-- app/services/activitypub/process_account_service.rb | 2 +- spec/lib/activitypub/activity/create_spec.rb | 13 ++++++++++++- .../activitypub/process_account_service_spec.rb | 8 ++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 2726df5c3b..67eaddda89 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -509,7 +509,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity nil elsif audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } :public - elsif audience_searchable_by.include?('as:Limited') + elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited elsif audience_searchable_by.include?(@account.followers_url) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index d4badeb461..ba0e06509c 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -243,7 +243,7 @@ class ActivityPub::TagManager when 'direct' status.conversation_id.present? ? [uri_for(status.conversation)] : [] when 'limited' - ['as:Limited'] + ['as:Limited', 'kmyblue:Limited'] else [] end @@ -258,7 +258,7 @@ class ActivityPub::TagManager when 'private', 'direct' [account_followers_url(account)] when 'limited' - ['as:Limited'] + ['as:Limited', 'kmyblue:Limited'] else [] end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index d2ba697545..473b2cabd3 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -272,7 +272,7 @@ class ActivityPub::ProcessAccountService < BaseService :public elsif audience_searchable_by.include?(@account.followers_url) :private - elsif audience_searchable_by.include?('as:Limited') + elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited else :direct diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 9c4bba3e62..bb41e3065a 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -445,6 +445,17 @@ RSpec.describe ActivityPub::Activity::Create do end context 'with limited' do + let(:searchable_by) { 'kmyblue:Limited' } + + it 'create status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.searchability).to eq 'limited' + end + end + + context 'with limited old spec' do let(:searchable_by) { 'as:Limited' } it 'create status' do @@ -570,7 +581,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with misskey' do let(:sender_software) { 'misskey' } - let(:searchable_by) { 'as:Limited' } + let(:searchable_by) { 'kmyblue:Limited' } it 'create status' do status = sender.statuses.first diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index b23aa1cea3..7810793559 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -53,6 +53,14 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do end context 'when limited' do + let(:searchable_by) { 'kmyblue:Limited' } + + it 'searchability is limited' do + expect(subject.searchability).to eq 'limited' + end + end + + context 'when limited old spec' do let(:searchable_by) { 'as:Limited' } it 'searchability is limited' do From 0a91a3165da079e51f46b7b30f9bc5565c89ca7f Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 21:40:55 +0900 Subject: [PATCH 225/237] =?UTF-8?q?Fix:=20#78=20=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=81=AE`as:Limited`=E3=82=92`kmyblue:Limite?= =?UTF-8?q?d`=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/parser/status_parser.rb | 2 +- app/lib/activitypub/tag_manager.rb | 4 ++-- app/services/activitypub/process_account_service.rb | 2 +- spec/lib/activitypub/activity/create_spec.rb | 13 ++++++++++++- .../activitypub/process_account_service_spec.rb | 8 ++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index ae37ba2cf2..9c0145ad7a 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -198,7 +198,7 @@ class ActivityPub::Parser::StatusParser nil elsif audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } :public - elsif audience_searchable_by.include?('as:Limited') + elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited elsif audience_searchable_by.include?('LocalPublic') :public_unlisted diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 0b608a0adb..2c5323f199 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -249,7 +249,7 @@ class ActivityPub::TagManager when 'direct' status.conversation_id.present? ? [uri_for(status.conversation)] : [] when 'limited' - ['as:Limited'] + ['as:Limited', 'kmyblue:Limited'] else [] end @@ -270,7 +270,7 @@ class ActivityPub::TagManager when 'private', 'direct' [account_followers_url(account)] when 'limited' - ['as:Limited'] + ['as:Limited', 'kmyblue:Limited'] else [] end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index d2ba697545..473b2cabd3 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -272,7 +272,7 @@ class ActivityPub::ProcessAccountService < BaseService :public elsif audience_searchable_by.include?(@account.followers_url) :private - elsif audience_searchable_by.include?('as:Limited') + elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited else :direct diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 58aca07573..4651445ae6 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -475,6 +475,17 @@ RSpec.describe ActivityPub::Activity::Create do end context 'with limited' do + let(:searchable_by) { 'kmyblue:Limited' } + + it 'create status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.searchability).to eq 'limited' + end + end + + context 'with limited old spec' do let(:searchable_by) { 'as:Limited' } it 'create status' do @@ -600,7 +611,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with misskey' do let(:sender_software) { 'misskey' } - let(:searchable_by) { 'as:Limited' } + let(:searchable_by) { 'kmyblue:Limited' } it 'create status' do status = sender.statuses.first diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index fe2c7cda99..8955084879 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -54,6 +54,14 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do end context 'when limited' do + let(:searchable_by) { 'kmyblue:Limited' } + + it 'searchability is limited' do + expect(subject.searchability).to eq 'limited' + end + end + + context 'when limited old spec' do let(:searchable_by) { 'as:Limited' } it 'searchability is limited' do From 38370c1d3dee6eea62ea19fec14fb87b0b4fc4be Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 21:45:02 +0900 Subject: [PATCH 226/237] =?UTF-8?q?Fix:=20`LoginOnly`=E3=81=AE=E5=90=8D?= =?UTF-8?q?=E5=89=8D=E7=A9=BA=E9=96=93=E3=82=82=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/create.rb | 2 +- app/lib/activitypub/parser/status_parser.rb | 2 +- app/lib/activitypub/tag_manager.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 67eaddda89..49c822f5dd 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -575,7 +575,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') + elsif audience_to.include?('kmyblue:LoginOnly') || audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') :login elsif audience_to.include?(@account.followers_url) :private diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 852578721c..a9ec958195 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -77,7 +77,7 @@ class ActivityPub::Parser::StatusParser :public elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') + elsif audience_to.include?('kmyblue:LoginOnly') || audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') :login elsif audience_to.include?(@magic_values[:followers_collection]) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index ba0e06509c..f9b67867ef 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -99,7 +99,7 @@ class ActivityPub::TagManager when 'unlisted', 'public_unlisted', 'private' [account_followers_url(status.account)] when 'login' - [account_followers_url(status.account), 'as:LoginOnly', 'LoginUser'] + [account_followers_url(status.account), 'as:LoginOnly', 'kmyblue:LoginOnly', 'LoginUser'] when 'direct' if status.account.silenced? # Only notify followers if the account is locally silenced From 521932c802dc922e7dd8137bb7e51667da5355d6 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 21:45:02 +0900 Subject: [PATCH 227/237] =?UTF-8?q?Fix:=20`LoginOnly`=E3=81=AE=E5=90=8D?= =?UTF-8?q?=E5=89=8D=E7=A9=BA=E9=96=93=E3=82=82=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/parser/status_parser.rb | 2 +- app/lib/activitypub/tag_manager.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 9c0145ad7a..d6d809a661 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -80,7 +80,7 @@ class ActivityPub::Parser::StatusParser :public_unlisted elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted - elsif audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') + elsif audience_to.include?('kmyblue:LoginOnly') || audience_to.include?('as:LoginOnly') || audience_to.include?('LoginUser') :login elsif audience_to.include?(@magic_values[:followers_collection]) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 2c5323f199..8258b14635 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -99,7 +99,7 @@ class ActivityPub::TagManager when 'unlisted', 'public_unlisted', 'private' [account_followers_url(status.account)] when 'login' - [account_followers_url(status.account), 'as:LoginOnly', 'LoginUser'] + [account_followers_url(status.account), 'as:LoginOnly', 'kmyblue:LoginOnly', 'LoginUser'] when 'direct' if status.account.silenced? # Only notify followers if the account is locally silenced From 1eb2d78b5db7c5f5e5d2b8662a4a9eb076fbe0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Tue, 10 Oct 2023 21:46:26 +0900 Subject: [PATCH 228/237] =?UTF-8?q?Change:=20=E5=8D=98=E6=96=B9=E5=90=91?= =?UTF-8?q?=E3=81=AE=E6=89=BF=E8=AA=8D=E3=81=A0=E3=81=91=E3=81=A7=E3=83=95?= =?UTF-8?q?=E3=83=AC=E3=83=B3=E3=83=89=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E6=9C=89=E5=8A=B9=E3=81=AB=E3=81=AA=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B=20(#74)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Test: テストを先に作成 * Fix: テスト不備 * Wip: フレンドサーバーのテストを修正 * Wip: エラーを修正 * 項目のラベリングを修正 * 新しい設定が変更できないのを修正 * Wip: 削除時の処理を修正 * フレンド自動承認設定を削除 * Fix: 申請を受けたドメインのINBOXが空になる問題 * Change: #75 フレンドでないサーバーからのローカル公開を未収載に変換 (#77) --- .../admin/friend_servers_controller.rb | 8 +- app/lib/activitypub/activity/accept.rb | 2 +- app/lib/activitypub/activity/create.rb | 6 +- app/lib/activitypub/activity/follow.rb | 14 +-- app/lib/activitypub/activity/reject.rb | 2 +- app/lib/activitypub/activity/undo.rb | 2 +- app/lib/activitypub/parser/status_parser.rb | 5 +- app/lib/status_reach_finder.rb | 12 ++- app/models/friend_domain.rb | 43 ++++++--- .../friend_servers/_friend_domain.html.haml | 20 ++--- .../friend_servers/_friend_fields.html.haml | 6 +- app/views/admin/friend_servers/edit.html.haml | 28 +----- .../admin/friend_servers/index.html.haml | 3 +- config/locales/en.yml | 5 +- config/locales/ja.yml | 5 +- ...15_add_delivery_local_to_friend_domains.rb | 23 +++++ db/schema.rb | 4 +- spec/lib/activitypub/activity/accept_spec.rb | 21 +++++ spec/lib/activitypub/activity/create_spec.rb | 49 ++++++++-- spec/lib/activitypub/activity/follow_spec.rb | 51 ++++++----- spec/lib/activitypub/activity/reject_spec.rb | 14 +++ spec/lib/activitypub/activity/undo_spec.rb | 17 +++- spec/lib/status_reach_finder_spec.rb | 89 +++++++++++++++---- spec/models/friend_domain_spec.rb | 11 ++- 24 files changed, 314 insertions(+), 126 deletions(-) create mode 100644 db/migrate/20231009235215_add_delivery_local_to_friend_domains.rb diff --git a/app/controllers/admin/friend_servers_controller.rb b/app/controllers/admin/friend_servers_controller.rb index aeec82429c..729d3b3912 100644 --- a/app/controllers/admin/friend_servers_controller.rb +++ b/app/controllers/admin/friend_servers_controller.rb @@ -35,7 +35,7 @@ module Admin def update authorize :friend_server, :update? - if @friend.update(resource_params) + if @friend.update(update_resource_params) redirect_to admin_friend_servers_path else render action: :edit @@ -79,7 +79,11 @@ module Admin end def resource_params - params.require(:friend_domain).permit(:domain, :inbox_url, :available, :pseudo_relay, :unlocked, :allow_all_posts) + params.require(:friend_domain).permit(:domain, :inbox_url, :available, :pseudo_relay, :delivery_local, :unlocked, :allow_all_posts) + end + + def update_resource_params + params.require(:friend_domain).permit(:inbox_url, :available, :pseudo_relay, :delivery_local, :unlocked, :allow_all_posts) end def warn_signatures_not_enabled! diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb index 494400bffd..649c3503f7 100644 --- a/app/lib/activitypub/activity/accept.rb +++ b/app/lib/activitypub/activity/accept.rb @@ -45,7 +45,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity end def accept_follow_for_friend - friend.update!(active_state: :accepted) + friend.update!(active_state: :accepted, passive_state: :idle) end def friend diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index be474a0519..b2bf2afc20 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -114,7 +114,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end def process_status_params - @status_parser = ActivityPub::Parser::StatusParser.new(@json, followers_collection: @account.followers_url, object: @object, account: @account) + @status_parser = ActivityPub::Parser::StatusParser.new(@json, followers_collection: @account.followers_url, object: @object, account: @account, friend_domain: friend_domain?) @params = { uri: @status_parser.uri, @@ -506,6 +506,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity FriendDomain.free_receivings.exists?(domain: @account.domain) end + def friend_domain? + FriendDomain.enabled.find_by(domain: @account.domain)&.accepted? + end + def quote @quote ||= @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote'] end diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index d02e9c01c6..f5a0250163 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -49,16 +49,20 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity already_accepted = false if friend.present? - already_accepted = friend.they_are_accepted? - friend.update!(passive_state: :pending, passive_follow_activity_id: @json['id']) + already_accepted = friend.accepted? + friend.update!(passive_state: :pending, active_state: :idle, passive_follow_activity_id: @json['id']) else - @friend = FriendDomain.create!(domain: @account.domain, passive_state: :pending, passive_follow_activity_id: @json['id']) + @friend = FriendDomain.new(domain: @account.domain, passive_state: :pending, passive_follow_activity_id: @json['id']) + @friend.initialize_inbox_url! + @friend.save! end - if already_accepted || friend.unlocked || Setting.unlocked_friend + if already_accepted || Setting.unlocked_friend friend.accept! - else + # Notify for admin even if unlocked + notify_staff_about_pending_friend_server! unless already_accepted + else notify_staff_about_pending_friend_server! end end diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb index 0493400f86..e1eb3c2368 100644 --- a/app/lib/activitypub/activity/reject.rb +++ b/app/lib/activitypub/activity/reject.rb @@ -39,7 +39,7 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity end def reject_follow_for_friend - friend.update!(active_state: :rejected) + friend.update!(active_state: :rejected, passive_state: :idle) end def friend diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index 2fc6bd2562..973143d8d2 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -103,7 +103,7 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity end def remove_follow_from_friend - friend.update!(passive_state: :idle, passive_follow_activity_id: nil) + friend.destroy_without_signal! end def friend diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index d6d809a661..16c6c00424 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -11,6 +11,7 @@ class ActivityPub::Parser::StatusParser @object = magic_values[:object] || json['object'] || json @magic_values = magic_values @account = magic_values[:account] + @friend = magic_values[:friend_domain] end def uri @@ -76,7 +77,7 @@ class ActivityPub::Parser::StatusParser def visibility if audience_to.any? { |to| ActivityPub::TagManager.instance.public_collection?(to) } :public - elsif audience_to.include?('LocalPublic') + elsif audience_to.include?('LocalPublic') && @friend :public_unlisted elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted @@ -200,7 +201,7 @@ class ActivityPub::Parser::StatusParser :public elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited - elsif audience_searchable_by.include?('LocalPublic') + elsif audience_searchable_by.include?('LocalPublic') && @friend :public_unlisted elsif audience_searchable_by.include?(@account.followers_url) :private diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 169754e134..5a33418fab 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -10,7 +10,7 @@ class StatusReachFinder end def inboxes - (reached_account_inboxes + followers_inboxes + relay_inboxes).uniq + (reached_account_inboxes + followers_inboxes + relay_inboxes + nolocal_friend_inboxes).uniq end def inboxes_for_misskey @@ -147,7 +147,15 @@ class StatusReachFinder def friend_inboxes if @status.public_visibility? || @status.public_unlisted_visibility? || (@status.unlisted_visibility? && (@status.public_searchability? || @status.public_unlisted_searchability?)) - DeliveryFailureTracker.without_unavailable(FriendDomain.distributables.pluck(:inbox_url)) + DeliveryFailureTracker.without_unavailable(FriendDomain.distributables.where(delivery_local: true).pluck(:inbox_url)) + else + [] + end + end + + def nolocal_friend_inboxes + if @status.public_visibility? + DeliveryFailureTracker.without_unavailable(FriendDomain.distributables.where(delivery_local: false).pluck(:inbox_url)) else [] end diff --git a/app/models/friend_domain.rb b/app/models/friend_domain.rb index a3beb9b357..28cc59b334 100644 --- a/app/models/friend_domain.rb +++ b/app/models/friend_domain.rb @@ -13,10 +13,10 @@ # passive_follow_activity_id :string # available :boolean default(TRUE), not null # pseudo_relay :boolean default(FALSE), not null -# unlocked :boolean default(FALSE), not null # allow_all_posts :boolean default(TRUE), not null # created_at :datetime not null # updated_at :datetime not null +# delivery_local :boolean default(TRUE), not null # class FriendDomain < ApplicationRecord @@ -27,24 +27,31 @@ class FriendDomain < ApplicationRecord enum passive_state: { idle: 0, pending: 1, accepted: 2, rejected: 3 }, _prefix: :they_are scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } - scope :enabled, -> { where(available: true) } - scope :mutuals, -> { enabled.where(active_state: :accepted, passive_state: :accepted) } - scope :distributables, -> { mutuals.where(pseudo_relay: true) } - scope :deliver_locals, -> { enabled.where(active_state: :accepted) } - scope :free_receivings, -> { mutuals.where(allow_all_posts: true) } + scope :enabled, -> { where(active_state: :accepted).or(FriendDomain.where(passive_state: :accepted)).where(available: true) } + scope :distributables, -> { enabled.where(pseudo_relay: true) } + scope :deliver_locals, -> { enabled.where(delivery_local: true) } + scope :free_receivings, -> { enabled.where(allow_all_posts: true) } before_destroy :ensure_disabled after_commit :set_default_inbox_url - def mutual? - i_am_accepted? && they_are_accepted? + def accepted? + i_am_accepted? || they_are_accepted? + end + + def pending? + !accepted? && (i_am_pending? || they_are_pending?) + end + + def idle? + (i_am_idle? || i_am_rejected?) && (they_are_idle? || they_are_rejected?) end def follow! activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) payload = Oj.dump(follow_activity(activity_id)) - update!(active_state: :pending, active_follow_activity_id: activity_id) + update!(active_state: :pending, passive_state: :idle, active_follow_activity_id: activity_id) DeliveryFailureTracker.reset!(inbox_url) ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) end @@ -53,7 +60,7 @@ class FriendDomain < ApplicationRecord activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil) payload = Oj.dump(unfollow_activity(activity_id)) - update!(active_state: :idle, active_follow_activity_id: nil) + update!(active_state: :idle, passive_state: :idle, active_follow_activity_id: nil) DeliveryFailureTracker.reset!(inbox_url) ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) end @@ -64,7 +71,7 @@ class FriendDomain < ApplicationRecord activity_id = passive_follow_activity_id payload = Oj.dump(accept_follow_activity(activity_id)) - update!(passive_state: :accepted) + update!(passive_state: :accepted, active_state: :idle) DeliveryFailureTracker.reset!(inbox_url) ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) end @@ -75,11 +82,21 @@ class FriendDomain < ApplicationRecord activity_id = passive_follow_activity_id payload = Oj.dump(reject_follow_activity(activity_id)) - update!(passive_state: :rejected, passive_follow_activity_id: nil) + update!(passive_state: :rejected, active_state: :idle, passive_follow_activity_id: nil) DeliveryFailureTracker.reset!(inbox_url) ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) end + def destroy_without_signal! + self.active_state = :idle + self.passive_state = :idle + destroy! + end + + def initialize_inbox_url! + self.inbox_url = default_inbox_url + end + private def default_inbox_url @@ -154,7 +171,7 @@ class FriendDomain < ApplicationRecord end def ensure_disabled - delete_for_friend! unless i_am_idle? && they_are_idle? + delete_for_friend! unless id.nil? || (i_am_idle? && they_are_idle?) end def set_default_inbox_url diff --git a/app/views/admin/friend_servers/_friend_domain.html.haml b/app/views/admin/friend_servers/_friend_domain.html.haml index a24ae0516a..7da4db1b89 100644 --- a/app/views/admin/friend_servers/_friend_domain.html.haml +++ b/app/views/admin/friend_servers/_friend_domain.html.haml @@ -7,7 +7,7 @@ = t 'admin.friend_servers.disabled' %samp= friend.domain %td - - if friend.i_am_accepted? + - if friend.accepted? %span.positive-hint = fa_icon('check') = ' ' @@ -16,21 +16,11 @@ = fa_icon('hourglass') = ' ' = t 'admin.friend_servers.pending' - - else - %span.negative-hint - = fa_icon('times') - = ' ' - = t 'admin.friend_servers.disabled' - %td - - if friend.they_are_accepted? - %span.positive-hint - = fa_icon('check') - = ' ' - = t 'admin.friend_servers.enabled' - elsif friend.they_are_pending? - = fa_icon('hourglass') - = ' ' - = t 'admin.friend_servers.pending' + %span.warning-hint + = fa_icon('hourglass') + = ' ' + = t 'admin.friend_servers.pending_you' - else %span.negative-hint = fa_icon('times') diff --git a/app/views/admin/friend_servers/_friend_fields.html.haml b/app/views/admin/friend_servers/_friend_fields.html.haml index f2de4a1f60..ad9b0d60ca 100644 --- a/app/views/admin/friend_servers/_friend_fields.html.haml +++ b/app/views/admin/friend_servers/_friend_fields.html.haml @@ -10,11 +10,11 @@ .fields-group = f.input :available, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.available') +.fields-group + = f.input :delivery_local, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.delivery_local'), hint: t('admin.friend_servers.edit.delivery_local_hint') + .fields-group = f.input :pseudo_relay, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.pseudo_relay'), hint: t('admin.friend_servers.edit.pseudo_relay_hint') -.fields-group - = f.input :unlocked, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.unlocked') - .fields-group = f.input :allow_all_posts, as: :boolean, wrapper: :with_label, label: t('admin.friend_servers.edit.allow_all_posts'), hint: t('admin.friend_servers.edit.allow_all_posts_hint') diff --git a/app/views/admin/friend_servers/edit.html.haml b/app/views/admin/friend_servers/edit.html.haml index ae057c2963..06cff11bfb 100644 --- a/app/views/admin/friend_servers/edit.html.haml +++ b/app/views/admin/friend_servers/edit.html.haml @@ -6,35 +6,14 @@ = render 'friend_fields', f: f, friend: @friend .fields-group - %h4= t('admin.friend_servers.active_status') + %h4= t('admin.friend_servers.status') .fields-group - - if @friend.i_am_accepted? + - if @friend.accepted? %span.positive-hint = fa_icon('check') = ' ' = t 'admin.friend_servers.enabled' - - elsif @friend.i_am_pending? - = fa_icon('hourglass') - = ' ' - = t 'admin.friend_servers.pending' - - else - %span.negative-hint - = fa_icon('times') - = ' ' - = t 'admin.friend_servers.disabled' - .action-buttons - %div - = link_to t('admin.friend_servers.follow'), follow_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.i_am_idle? || @friend.i_am_rejected? - = link_to t('admin.friend_servers.unfollow'), unfollow_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.i_am_pending? || @friend.i_am_accepted? - - %h4= t('admin.friend_servers.passive_status') - .fields-gtoup - - if @friend.they_are_accepted? - %span.positive-hint - = fa_icon('check') - = ' ' - = t 'admin.friend_servers.enabled' - - elsif @friend.they_are_pending? + - elsif @friend.pending? = fa_icon('hourglass') = ' ' = t 'admin.friend_servers.pending' @@ -45,6 +24,7 @@ = t 'admin.friend_servers.disabled' .action-buttons %div + = link_to t('admin.friend_servers.follow'), follow_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.idle? = link_to t('admin.friend_servers.accept'), accept_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.they_are_pending? = link_to t('admin.friend_servers.reject'), reject_admin_friend_server_path(@friend), class: 'button', method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if @friend.they_are_pending? diff --git a/app/views/admin/friend_servers/index.html.haml b/app/views/admin/friend_servers/index.html.haml index 6dd16e397e..196407c4c4 100644 --- a/app/views/admin/friend_servers/index.html.haml +++ b/app/views/admin/friend_servers/index.html.haml @@ -13,8 +13,7 @@ %thead %tr %th= t('admin.friend_servers.domain') - %th= t('admin.friend_servers.active_status') - %th= t('admin.friend_servers.passive_status') + %th= t('admin.friend_servers.status') %th %tbody - @friends.each do |friend| diff --git a/config/locales/en.yml b/config/locales/en.yml index 2185f933cb..23b3bf24e2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -501,7 +501,6 @@ en: unsuppress: Restore follow recommendation friend_servers: accept: Accept - active_status: My status add_new: Add and make a new application delete: Delete description_html: フレンドサーバーとは、お互いのローカル公開・ローカル検索許可の投稿をそのまま交換するシステムです。 @@ -511,6 +510,8 @@ en: allow_all_posts: Receive all posts allow_all_posts_hint: 通常は自分のサーバーの誰もフォローしていないアカウントの投稿は例外を除き受け入れがブロックされます。そのブロックを解除します。スパムが発生した場合など、いつでもブロックを再開できます。 available: Available + delivery_local: Deliver without changing public unlisted visibility and searchability + delivery_local_hint: Public unlisted posts will be added the friend's global timeline description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 domain: Domain inbox_url: Friend server inbox URL @@ -521,8 +522,8 @@ en: edit_friend: Edit enabled: Enabled follow: Request - passive_status: Partner status pending: Pending + pending_you: Your review requested reject: Reject save_and_enable: Save and enable setup: Add and make a new application diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 61189de940..2c24017c36 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -496,7 +496,6 @@ ja: unsuppress: おすすめフォローを復元 friend_servers: accept: 相手の申請を承認する - active_status: 自分の状態 add_new: フレンドサーバーを追加・申請 delete: 削除 description_html: フレンドサーバーとは、お互いのローカル公開・ローカル検索許可の投稿をそのまま交換するシステムです。 @@ -506,6 +505,8 @@ ja: allow_all_posts: このサーバーからの投稿を無条件で受け入れる allow_all_posts_hint: 通常は自分のサーバーの誰もフォローしていないアカウントの投稿は例外を除き受け入れがブロックされます。そのブロックを解除します。スパムが発生した場合など、いつでもブロックを再開できます。 available: 有効にする + delivery_local: ローカル公開の公開範囲・検索許可を持った投稿をそのまま相手と共有する + delivery_local_hint: ローカル公開投稿は、通常は非収載に変換されて配送されます。その処理をせず、相手サーバーにもローカル公開と認識されるようにします。相手の連合タイムラインに掲載されます description: フレンドサーバーは、登録と同時に相手方のサーバーへ申請されます。 domain: ドメイン inbox_url: フレンドサーバーの inbox URL @@ -516,8 +517,8 @@ ja: edit_friend: 編集 enabled: 有効 follow: こちらから申請する - passive_status: 相手の状態 pending: 承認待ち + pending_you: あなたの承認が必要 reject: 相手からの申請を却下する save_and_enable: 保存して有効にする setup: フレンドサーバーを追加・申請 diff --git a/db/migrate/20231009235215_add_delivery_local_to_friend_domains.rb b/db/migrate/20231009235215_add_delivery_local_to_friend_domains.rb new file mode 100644 index 0000000000..a42b016663 --- /dev/null +++ b/db/migrate/20231009235215_add_delivery_local_to_friend_domains.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddDeliveryLocalToFriendDomains < ActiveRecord::Migration[7.0] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured do + add_column_with_default :friend_domains, :delivery_local, :boolean, default: true, allow_null: false + remove_column :friend_domains, :unlocked + end + end + + def down + safety_assured do + remove_column :friend_domains, :delivery_local + add_column_with_default :friend_domains, :unlocked, :boolean, default: false, allow_null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 4a1401efbc..7a4ee11608 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do +ActiveRecord::Schema[7.0].define(version: 2023_10_09_235215) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -686,10 +686,10 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_07_090808) do t.string "passive_follow_activity_id" t.boolean "available", default: true, null: false t.boolean "pseudo_relay", default: false, null: false - t.boolean "unlocked", default: false, null: false t.boolean "allow_all_posts", default: true, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.boolean "delivery_local", default: true, null: false t.index ["domain"], name: "index_friend_domains_on_domain", unique: true t.index ["inbox_url"], name: "index_friend_domains_on_inbox_url", unique: true end diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb index 6027557092..24dbcbff7c 100644 --- a/spec/lib/activitypub/activity/accept_spec.rb +++ b/spec/lib/activitypub/activity/accept_spec.rb @@ -118,5 +118,26 @@ RSpec.describe ActivityPub::Activity::Accept do subject.perform expect(friend.reload.i_am_accepted?).to be true end + + it 'when the friend server is pending' do + friend.update(passive_state: :pending) + subject.perform + expect(friend.reload.they_are_idle?).to be true + expect(friend.i_am_accepted?).to be true + end + + it 'when the friend server is accepted' do + friend.update(passive_state: :accepted) + subject.perform + expect(friend.reload.they_are_idle?).to be true + expect(friend.i_am_accepted?).to be true + end + + it 'when my server is not pending' do + friend.update(active_state: :idle) + subject.perform + expect(friend.reload.i_am_idle?).to be true + expect(friend.they_are_idle?).to be true + end end end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 4651445ae6..93b953fa34 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -30,9 +30,11 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_software) { 'mastodon' } let(:custom_before) { false } + let(:active_friend) { false } before do Fabricate(:instance_info, domain: 'example.com', software: sender_software) + Fabricate(:friend_domain, domain: 'example.com', active_state: :accepted) if active_friend subject.perform unless custom_before end @@ -245,6 +247,26 @@ RSpec.describe ActivityPub::Activity::Create do } end + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.visibility).to eq 'unlisted' + end + end + + context 'when public_unlisted with LocalPublic from friend-server' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + to: ['http://example.com/followers', 'LocalPublic'], + cc: 'https://www.w3.org/ns/activitystreams#Public', + } + end + let(:active_friend) { true } + it 'creates status' do status = sender.statuses.first @@ -433,6 +455,18 @@ RSpec.describe ActivityPub::Activity::Create do context 'with public_unlisted with LocalPublic' do let(:searchable_by) { ['http://example.com/followers', 'LocalPublic'] } + it 'create status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.searchability).to eq 'private' + end + end + + context 'with public_unlisted with LocalPublic from friend-server' do + let(:searchable_by) { ['http://example.com/followers', 'LocalPublic'] } + let(:active_friend) { true } + it 'create status' do status = sender.statuses.first @@ -1506,11 +1540,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'when sender is in friend server' do subject { described_class.new(json, sender, delivery: true) } - before do - Fabricate(:friend_domain, domain: sender.domain, active_state: :accepted, passive_state: :accepted) - subject.perform - end - + let!(:friend) { Fabricate(:friend_domain, domain: sender.domain, active_state: :accepted) } let(:object_json) do { id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, @@ -1520,11 +1550,20 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + subject.perform status = sender.statuses.first expect(status).to_not be_nil expect(status.text).to eq 'Lorem ipsum' end + + it 'whey no-relay not creates status' do + friend.update(allow_all_posts: false) + subject.perform + status = sender.statuses.first + + expect(status).to be_nil + end end context 'when the sender has no relevance to local activity' do diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index a69fa9b563..c27696ebaf 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -339,6 +339,37 @@ RSpec.describe ActivityPub::Activity::Follow do expect(friend).to_not be_nil expect(friend.they_are_pending?).to be true expect(friend.passive_follow_activity_id).to eq 'foo' + expect(friend.inbox_url).to eq 'https://abc.com/inbox' + end + end + + context 'when my server is pending' do + before do + friend.update(active_state: :pending) + end + + it 'marks me as idle' do + subject.perform + expect(friend.reload.they_are_pending?).to be true + expect(friend.i_am_idle?).to be true + end + end + + context 'when my server is already accepted' do + before do + friend.update(active_state: :accepted) + stub_request(:post, 'https://example.com/inbox') + end + + it 'marks me as idle and the friend as accepted' do + subject.perform + expect(friend.reload.they_are_accepted?).to be true + expect(friend.i_am_idle?).to be true + expect(a_request(:post, 'https://example.com/inbox').with(body: hash_including({ + id: 'foo#accepts/friends', + type: 'Accept', + object: 'foo', + }))).to have_been_made.once end end @@ -372,26 +403,6 @@ RSpec.describe ActivityPub::Activity::Follow do end end - context 'when unlocked' do - before do - friend.update(unlocked: true) - stub_request(:post, 'https://example.com/inbox') - end - - it 'marks the friend as accepted' do - subject.perform - - friend = FriendDomain.find_by(domain: 'abc.com') - expect(friend).to_not be_nil - expect(friend.they_are_accepted?).to be true - expect(a_request(:post, 'https://example.com/inbox').with(body: hash_including({ - id: 'foo#accepts/friends', - type: 'Accept', - object: 'foo', - }))).to have_been_made.once - end - end - context 'when unlocked on admin settings' do before do Form::AdminSettings.new(unlocked_friend: '1').save diff --git a/spec/lib/activitypub/activity/reject_spec.rb b/spec/lib/activitypub/activity/reject_spec.rb index 1eee37db35..9ebbded42e 100644 --- a/spec/lib/activitypub/activity/reject_spec.rb +++ b/spec/lib/activitypub/activity/reject_spec.rb @@ -192,5 +192,19 @@ RSpec.describe ActivityPub::Activity::Reject do subject.perform expect(friend.reload.i_am_rejected?).to be true end + + it 'when the friend server is pending' do + friend.update(passive_state: :pending) + subject.perform + expect(friend.reload.they_are_idle?).to be true + expect(friend.i_am_rejected?).to be true + end + + it 'when the friend server is accepted' do + friend.update(passive_state: :accepted) + subject.perform + expect(friend.reload.they_are_idle?).to be true + expect(friend.i_am_rejected?).to be true + end end end diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb index 1671f04b4b..4634cb967e 100644 --- a/spec/lib/activitypub/activity/undo_spec.rb +++ b/spec/lib/activitypub/activity/undo_spec.rb @@ -149,7 +149,7 @@ RSpec.describe ActivityPub::Activity::Undo do friend = Fabricate(:friend_domain, domain: sender.domain, passive_state: :accepted) subject.perform expect(sender.following?(recipient)).to be false - expect(friend.they_are_accepted?).to be true + expect(friend.reload.they_are_accepted?).to be true end context 'with only object uri' do @@ -175,8 +175,19 @@ RSpec.describe ActivityPub::Activity::Undo do it 'deletes follow from this server to friend' do subject.perform - expect(friend.reload.they_are_idle?).to be true - expect(friend.passive_follow_activity_id).to be_nil + expect(FriendDomain.exists?(domain: 'abc.com')).to be false + end + + it 'when my server is pending' do + friend.update(active_state: :pending) + subject.perform + expect(FriendDomain.exists?(domain: 'abc.com')).to be false + end + + it 'when my server is accepted' do + friend.update(active_state: :accepted) + subject.perform + expect(FriendDomain.exists?(domain: 'abc.com')).to be false end end end diff --git a/spec/lib/status_reach_finder_spec.rb b/spec/lib/status_reach_finder_spec.rb index 8aefc85210..2d8e075d5b 100644 --- a/spec/lib/status_reach_finder_spec.rb +++ b/spec/lib/status_reach_finder_spec.rb @@ -99,7 +99,7 @@ describe StatusReachFinder do let(:sender_software) { 'misskey' } let(:searchability) { :public } - before { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', available: true, active_state: :accepted, passive_state: :accepted, pseudo_relay: true) } + before { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', available: true, active_state: :accepted, pseudo_relay: true) } it 'send status without friend server' do expect(subject.inboxes).to_not include 'https://foo.bar/inbox' @@ -114,7 +114,7 @@ describe StatusReachFinder do context 'with follower' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted) bob.follow!(alice) end @@ -124,9 +124,21 @@ describe StatusReachFinder do end end - context 'with non-follower' do + context 'with follower but not local-distributable' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted, delivery_local: false) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + + context 'with non-follower and non-relay' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted) end it 'send status' do @@ -137,7 +149,7 @@ describe StatusReachFinder do context 'with pending' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :pending) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :pending) bob.follow!(alice) end @@ -147,21 +159,21 @@ describe StatusReachFinder do end end - context 'with idle' do + context 'with unidirection from them' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :idle, passive_state: :accepted) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :idle, passive_state: :accepted) bob.follow!(alice) end it 'send status' do - expect(subject.inboxes).to include 'https://foo.bar/inbox' - expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' end end context 'when unavailable' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted, available: false) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted, available: false) bob.follow!(alice) end @@ -173,7 +185,18 @@ describe StatusReachFinder do context 'when distributable' do before do - Fabricate(:friend_domain, domain: 'foo.bar', active_state: :accepted, passive_state: :accepted, pseudo_relay: true) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', passive_state: :accepted, pseudo_relay: true) + end + + it 'send status' do + expect(subject.inboxes).to_not include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' + end + end + + context 'when distributable and following' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', passive_state: :accepted, pseudo_relay: true) bob.follow!(alice) end @@ -183,9 +206,9 @@ describe StatusReachFinder do end end - context 'when distributable and not following' do + context 'when distributable reverse' do before do - Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true) + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', active_state: :accepted, pseudo_relay: true) end it 'send status' do @@ -193,10 +216,35 @@ describe StatusReachFinder do expect(subject.inboxes_for_friend).to include 'https://foo.bar/inbox' end end + + context 'when distributable but not local distributable' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', passive_state: :accepted, pseudo_relay: true, delivery_local: false) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end + + context 'when distributable and following but not local distributable' do + before do + Fabricate(:friend_domain, domain: 'foo.bar', passive_state: :accepted, pseudo_relay: true, delivery_local: false) + bob.follow!(alice) + end + + it 'send status' do + expect(subject.inboxes).to include 'https://foo.bar/inbox' + expect(subject.inboxes_for_friend).to_not include 'https://foo.bar/inbox' + end + end end context 'when it contains distributable friend server' do - before { Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', available: true, active_state: :accepted, passive_state: :accepted, pseudo_relay: true) } + before do + Fabricate(:friend_domain, domain: 'foo.bar', inbox_url: 'https://foo.bar/inbox', passive_state: :accepted, pseudo_relay: true) + end it 'includes the inbox of the mentioned account' do expect(subject.inboxes).to_not include 'https://foo.bar/inbox' @@ -381,9 +429,11 @@ describe StatusReachFinder do Fabricate(:friend_domain, domain: 'def.com', inbox_url: 'https://def.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: true) Fabricate(:friend_domain, domain: 'ghi.com', inbox_url: 'https://ghi.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: false) Fabricate(:friend_domain, domain: 'jkl.com', inbox_url: 'https://jkl.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: false, available: true) - Fabricate(:friend_domain, domain: 'mno.com', inbox_url: 'https://mno.com/inbox', active_state: :accepted, passive_state: :pending, pseudo_relay: true, available: true) + Fabricate(:friend_domain, domain: 'mno.com', inbox_url: 'https://mno.com/inbox', active_state: :accepted, passive_state: :idle, pseudo_relay: true, available: true) Fabricate(:friend_domain, domain: 'pqr.com', inbox_url: 'https://pqr.com/inbox', active_state: :accepted, passive_state: :accepted, pseudo_relay: true, available: true) Fabricate(:unavailable_domain, domain: 'pqr.com') + Fabricate(:friend_domain, domain: 'stu.com', inbox_url: 'https://stu.com/inbox', active_state: :idle, passive_state: :accepted, pseudo_relay: true, available: true) + Fabricate(:friend_domain, domain: 'vwx.com', inbox_url: 'https://vwx.com/inbox', active_state: :idle, passive_state: :accepted, pseudo_relay: true, available: true, delivery_local: false) end it 'returns friend servers' do @@ -399,8 +449,13 @@ describe StatusReachFinder do expect(subject).to_not include 'https://jkl.com/inbox' end - it 'not contains no-mutual friends' do - expect(subject).to_not include 'https://mno.com/inbox' + it 'contains no-mutual friends' do + expect(subject).to include 'https://mno.com/inbox' + expect(subject).to include 'https://stu.com/inbox' + end + + it 'not contains un local distable' do + expect(subject).to_not include 'https://vwx.com/inbox' end it 'not contains unavailable domain friends' do diff --git a/spec/models/friend_domain_spec.rb b/spec/models/friend_domain_spec.rb index c3fa128b16..647c39e5a8 100644 --- a/spec/models/friend_domain_spec.rb +++ b/spec/models/friend_domain_spec.rb @@ -11,9 +11,11 @@ describe FriendDomain do describe '#follow!' do it 'call inbox' do + friend.update(active_state: :accepted, passive_state: :accepted) friend.follow! expect(friend.active_follow_activity_id).to_not be_nil expect(friend.i_am_pending?).to be true + expect(friend.they_are_idle?).to be true expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ id: friend.active_follow_activity_id, type: 'Follow', @@ -25,10 +27,11 @@ describe FriendDomain do describe '#unfollow!' do it 'call inbox' do - friend.update(active_follow_activity_id: 'ohagi') + friend.update(active_follow_activity_id: 'ohagi', active_state: :accepted, passive_state: :accepted) friend.unfollow! expect(friend.active_follow_activity_id).to be_nil expect(friend.i_am_idle?).to be true + expect(friend.they_are_idle?).to be true expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ type: 'Undo', object: { @@ -43,9 +46,10 @@ describe FriendDomain do describe '#accept!' do it 'call inbox' do - friend.update(passive_follow_activity_id: 'ohagi', passive_state: :pending) + friend.update(passive_follow_activity_id: 'ohagi', active_state: :accepted, passive_state: :pending) friend.accept! expect(friend.they_are_accepted?).to be true + expect(friend.i_am_idle?).to be true expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ id: 'ohagi#accepts/friends', type: 'Accept', @@ -57,9 +61,10 @@ describe FriendDomain do describe '#reject!' do it 'call inbox' do - friend.update(passive_follow_activity_id: 'ohagi', passive_state: :pending) + friend.update(passive_follow_activity_id: 'ohagi', active_state: :accepted, passive_state: :pending) friend.reject! expect(friend.they_are_rejected?).to be true + expect(friend.i_am_idle?).to be true expect(a_request(:post, 'https://foo.bar/inbox').with(body: hash_including({ id: 'ohagi#rejects/friends', type: 'Reject', From ea55d2d90971a630eb13523cb39af67fe5619d6c Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 10 Oct 2023 22:24:42 +0900 Subject: [PATCH 229/237] Fix test --- spec/lib/activitypub/tag_manager_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index bec6233fd5..e69214f2ca 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -188,7 +188,7 @@ RSpec.describe ActivityPub::TagManager do it 'returns as:Limited array for limited status' do status = Fabricate(:status, searchability: :limited) - expect(subject.searchable_by(status)).to eq ['as:Limited'] + expect(subject.searchable_by(status)).to eq ['as:Limited', 'kmyblue:Limited'] end end From d93c64b6e1b0ad4b32489a652496e9d30306a7ae Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 10 Oct 2023 16:00:50 +0200 Subject: [PATCH 230/237] Fix duplicate reports being sent when reporting some remote posts (#27355) --- app/services/report_service.rb | 2 +- spec/services/report_service_spec.rb | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/services/report_service.rb b/app/services/report_service.rb index 9e690262b2..5987d10caf 100644 --- a/app/services/report_service.rb +++ b/app/services/report_service.rb @@ -57,7 +57,7 @@ class ReportService < BaseService def forward_to_replied_to! # Send report to servers to which the account was replying to, so they also have a chance to act - inbox_urls = Account.remote.where(domain: forward_to_domains).where(id: Status.where(id: reported_status_ids).where.not(in_reply_to_account_id: nil).select(:in_reply_to_account_id)).inboxes - [@target_account.inbox_url] + inbox_urls = Account.remote.where(domain: forward_to_domains).where(id: Status.where(id: reported_status_ids).where.not(in_reply_to_account_id: nil).select(:in_reply_to_account_id)).inboxes - [@target_account.inbox_url, @target_account.shared_inbox_url] inbox_urls.each do |inbox_url| ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url) diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb index 616368bf48..d3bcd5d31c 100644 --- a/spec/services/report_service_spec.rb +++ b/spec/services/report_service_spec.rb @@ -36,7 +36,7 @@ RSpec.describe ReportService, type: :service do expect(report.uri).to_not be_nil end - context 'when reporting a reply' do + context 'when reporting a reply on a different remote server' do let(:remote_thread_account) { Fabricate(:account, domain: 'foo.com', protocol: :activitypub, inbox_url: 'http://foo.com/inbox') } let(:reported_status) { Fabricate(:status, account: remote_account, thread: Fabricate(:status, account: remote_thread_account)) } @@ -67,6 +67,25 @@ RSpec.describe ReportService, type: :service do end end end + + context 'when reporting a reply on the same remote server as the person being replied-to' do + let(:remote_thread_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') } + let(:reported_status) { Fabricate(:status, account: remote_account, thread: Fabricate(:status, account: remote_thread_account)) } + + context 'when forward_to_domains includes both the replied-to domain and the origin domain' do + it 'sends ActivityPub payload only once' do + subject.call(source_account, remote_account, status_ids: [reported_status.id], forward: forward, forward_to_domains: [remote_account.domain]) + expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + end + end + + context 'when forward_to_domains does not include the replied-to domain' do + it 'sends ActivityPub payload only once' do + subject.call(source_account, remote_account, status_ids: [reported_status.id], forward: forward) + expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + end + end + end end context 'when forward is false' do From 6823ae3baef1cfeaf0a924b7b4fca0a4b0b490fe Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 09:40:04 +0900 Subject: [PATCH 231/237] =?UTF-8?q?#79=20`LocalPublic`=E3=82=92`kmyblue:Lo?= =?UTF-8?q?calPublic`=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/parser/status_parser.rb | 4 ++-- app/lib/activitypub/tag_manager.rb | 4 ++-- spec/lib/activitypub/activity/create_spec.rb | 16 ++++++++-------- spec/lib/activitypub/tag_manager_spec.rb | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 16c6c00424..af2033cf12 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -77,7 +77,7 @@ class ActivityPub::Parser::StatusParser def visibility if audience_to.any? { |to| ActivityPub::TagManager.instance.public_collection?(to) } :public - elsif audience_to.include?('LocalPublic') && @friend + elsif audience_to.include?('kmyblue:LocalPublic') && @friend :public_unlisted elsif audience_cc.any? { |cc| ActivityPub::TagManager.instance.public_collection?(cc) } :unlisted @@ -201,7 +201,7 @@ class ActivityPub::Parser::StatusParser :public elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') :limited - elsif audience_searchable_by.include?('LocalPublic') && @friend + elsif audience_searchable_by.include?('kmyblue:LocalPublic') && @friend :public_unlisted elsif audience_searchable_by.include?(@account.followers_url) :private diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 8258b14635..f032267280 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -128,7 +128,7 @@ class ActivityPub::TagManager def to_for_friend(status) to = to(status) - to << 'LocalPublic' if status.public_unlisted_visibility? + to << 'kmyblue:LocalPublic' if status.public_unlisted_visibility? to end @@ -259,7 +259,7 @@ class ActivityPub::TagManager def searchable_by_for_friend(status) searchable = searchable_by(status) - searchable << 'LocalPublic' if status.compute_searchability_local == 'public_unlisted' + searchable << 'kmyblue:LocalPublic' if status.compute_searchability_local == 'public_unlisted' searchable end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 93b953fa34..7659ed82a0 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -236,13 +236,13 @@ RSpec.describe ActivityPub::Activity::Create do end end - context 'when public_unlisted with LocalPublic' do + context 'when public_unlisted with kmyblue:LocalPublic' do let(:object_json) do { id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, type: 'Note', content: 'Lorem ipsum', - to: ['http://example.com/followers', 'LocalPublic'], + to: ['http://example.com/followers', 'kmyblue:LocalPublic'], cc: 'https://www.w3.org/ns/activitystreams#Public', } end @@ -255,13 +255,13 @@ RSpec.describe ActivityPub::Activity::Create do end end - context 'when public_unlisted with LocalPublic from friend-server' do + context 'when public_unlisted with kmyblue:LocalPublic from friend-server' do let(:object_json) do { id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, type: 'Note', content: 'Lorem ipsum', - to: ['http://example.com/followers', 'LocalPublic'], + to: ['http://example.com/followers', 'kmyblue:LocalPublic'], cc: 'https://www.w3.org/ns/activitystreams#Public', } end @@ -452,8 +452,8 @@ RSpec.describe ActivityPub::Activity::Create do end end - context 'with public_unlisted with LocalPublic' do - let(:searchable_by) { ['http://example.com/followers', 'LocalPublic'] } + context 'with public_unlisted with kmyblue:LocalPublic' do + let(:searchable_by) { ['http://example.com/followers', 'kmyblue:LocalPublic'] } it 'create status' do status = sender.statuses.first @@ -463,8 +463,8 @@ RSpec.describe ActivityPub::Activity::Create do end end - context 'with public_unlisted with LocalPublic from friend-server' do - let(:searchable_by) { ['http://example.com/followers', 'LocalPublic'] } + context 'with public_unlisted with kmyblue:LocalPublic from friend-server' do + let(:searchable_by) { ['http://example.com/followers', 'kmyblue:LocalPublic'] } let(:active_friend) { true } it 'create status' do diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index e69214f2ca..9878952f05 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -77,7 +77,7 @@ RSpec.describe ActivityPub::TagManager do describe '#to_for_friend' do it 'returns followers collection for public_unlisted status' do status = Fabricate(:status, visibility: :public_unlisted) - expect(subject.to_for_friend(status)).to eq [account_followers_url(status.account), 'LocalPublic'] + expect(subject.to_for_friend(status)).to eq [account_followers_url(status.account), 'kmyblue:LocalPublic'] end it 'returns followers collection for unlisted status' do @@ -200,7 +200,7 @@ RSpec.describe ActivityPub::TagManager do it 'returns public collection for public_unlisted status' do status = Fabricate(:status, account: Fabricate(:account, searchability: :public), searchability: :public_unlisted) - expect(subject.searchable_by_for_friend(status)).to eq [account_followers_url(status.account), 'LocalPublic'] + expect(subject.searchable_by_for_friend(status)).to eq [account_followers_url(status.account), 'kmyblue:LocalPublic'] end it 'returns followers collection for private status' do From 842a93243afba76e6e9be057b2dcf5454b38bf89 Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 09:59:00 +0900 Subject: [PATCH 232/237] =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=81=AB=E8=AA=8D=E8=A8=BC=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/like.rb | 2 +- app/models/emoji_reaction.rb | 4 ++++ app/models/status.rb | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 1087a6c8b0..86aaba076d 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -78,7 +78,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity end def relay_friend_for_emoji_reaction - return unless @json['signature'].present? && @original_status.public_visibility? + return unless @json['signature'].present? && @original_status.distributable_friend? ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| [Oj.dump(@json), @original_status.account.id, inbox_url] diff --git a/app/models/emoji_reaction.rb b/app/models/emoji_reaction.rb index ce0a7dfb2e..5d6d58513c 100644 --- a/app/models/emoji_reaction.rb +++ b/app/models/emoji_reaction.rb @@ -43,6 +43,10 @@ class EmojiReaction < ApplicationRecord custom_emoji? && !custom_emoji.local? end + def sign? + status&.distributable_friend? + end + private def refresh_cache diff --git a/app/models/status.rb b/app/models/status.rb index 26baac1b68..4b718cdc92 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -591,6 +591,10 @@ class Status < ApplicationRecord end end + def distributable_friend? + public_visibility? || public_unlisted_visibility? || (unlisted_visibility? && (public_searchability? || public_unlisted_searchability?)) + end + private def update_status_stat!(attrs) From 7cc6dbc51e2e620606327e833e99a22476a6581b Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 10:06:35 +0900 Subject: [PATCH 233/237] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/emoji_react_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index 9a166a3413..fa7f8d0f68 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -79,7 +79,7 @@ class EmojiReactService < BaseService end def build_json(emoji_reaction) - Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer)) + Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account)) end def render_emoji_reaction(emoji_group) From e3a43d47589416190669505299b2703d4816328f Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 10:16:15 +0900 Subject: [PATCH 234/237] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/activitypub/activity/undo.rb | 9 +++++++++ app/services/un_emoji_react_service.rb | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index 973143d8d2..eac34efdc9 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -146,6 +146,7 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity if @original_status.account.local? forward_for_undo_emoji_reaction relay_for_undo_emoji_reaction + relay_friend_for_undo_emoji_reaction end end else @@ -184,6 +185,14 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity end end + def relay_friend_for_undo_emoji_reaction + return unless @json['signature'].present? && @original_status.distributable_friend? + + ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| + [Oj.dump(@json), @original_status.account.id, inbox_url] + end + end + def shortcode return @shortcode if defined?(@shortcode) diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index b473d43459..2f9fa169e3 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -52,7 +52,7 @@ class UnEmojiReactService < BaseService end def build_json(emoji_reaction) - Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer)) + Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: emoji_reaction.account)) end def render_emoji_reaction(emoji_group) From 16305293583519d2a6c74be8a4763e61874439c0 Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 10:24:35 +0900 Subject: [PATCH 235/237] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/fabricators/emoji_reaction_fabricator.rb | 7 +++++ spec/lib/activitypub/activity/undo_spec.rb | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 spec/fabricators/emoji_reaction_fabricator.rb diff --git a/spec/fabricators/emoji_reaction_fabricator.rb b/spec/fabricators/emoji_reaction_fabricator.rb new file mode 100644 index 0000000000..2605a9f232 --- /dev/null +++ b/spec/fabricators/emoji_reaction_fabricator.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Fabricator(:emoji_reaction) do + account { Fabricate.build(:account) } + status { Fabricate.build(:status) } + name '😀' +end diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb index 4634cb967e..feda725654 100644 --- a/spec/lib/activitypub/activity/undo_spec.rb +++ b/spec/lib/activitypub/activity/undo_spec.rb @@ -213,5 +213,32 @@ RSpec.describe ActivityPub::Activity::Undo do expect(sender.favourited?(status)).to be false end end + + context 'with EmojiReact' do + let(:status) { Fabricate(:status) } + + let(:content) { '😀' } + let(:object_json) do + { + id: 'bar', + type: 'Like', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: ActivityPub::TagManager.instance.uri_for(status), + content: content, + } + end + + before do + Fabricate(:favourite, account: sender, status: status) + Fabricate(:emoji_reaction, account: sender, status: status, name: content) + end + + it 'delete emoji reaction' do + subject.perform + reaction = EmojiReaction.find_by(account: sender, status: status) + expect(reaction).to be_nil + expect(sender.favourited?(status)).to be true + end + end end end From 674cce1c9e9cca32fb6b88bccd5110d86c028fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Wed, 11 Oct 2023 12:03:20 +0900 Subject: [PATCH 236/237] =?UTF-8?q?Wip:=20=E3=82=B9=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=83=97=E3=81=AE=E8=BB=A2=E9=80=81=20(#81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: 自分で自分に絵文字リアクションをつけた時、他サーバーに転送されない問題 * 修正 * 修正 --- app/services/emoji_react_service.rb | 28 +++++++++++++++++++++++++- app/services/un_emoji_react_service.rb | 28 +++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index fa7f8d0f68..719befcdfc 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -14,6 +14,7 @@ class EmojiReactService < BaseService def call(account, status, name) status = status.reblog if status.reblog? && !status.reblog.nil? authorize_with account, status, :emoji_reaction? + @status = status emoji_reaction = nil @@ -36,6 +37,9 @@ class EmojiReactService < BaseService notify_to_followers(emoji_reaction) bump_potential_friendship(account, status) write_stream(emoji_reaction) + forward_for_emoji_reaction!(emoji_reaction) + relay_for_emoji_reaction!(emoji_reaction) + relay_friend_for_emoji_reaction!(emoji_reaction) emoji_reaction end @@ -79,11 +83,33 @@ class EmojiReactService < BaseService end def build_json(emoji_reaction) - Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account)) + @build_json = Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account)) end def render_emoji_reaction(emoji_group) # @rendered_emoji_reaction ||= InlineRenderer.render(HashObject.new(emoji_group), nil, :emoji_reaction) @render_emoji_reaction ||= Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end + + def forward_for_emoji_reaction!(emoji_reaction) + return unless @status.local? + + ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url]) + end + + def relay_for_emoji_reaction!(emoji_reaction) + return unless @status.local? && @status.public_visibility? + + ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| + [build_json(emoji_reaction), @status.account.id, inbox_url] + end + end + + def relay_friend_for_emoji_reaction!(emoji_reaction) + return unless @status.local? && @status.distributable_friend? + + ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| + [build_json(emoji_reaction), @status.account.id, inbox_url] + end + end end diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index 2f9fa169e3..e599c23831 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -15,6 +15,10 @@ class UnEmojiReactService < BaseService create_notification(emoji_reaction) if !@status.account.local? && @status.account.activitypub? notify_to_followers(emoji_reaction) if @status.account.local? write_stream(emoji_reaction) + + forward_for_undo_emoji_reaction!(emoji_reaction) + relay_for_undo_emoji_reaction!(emoji_reaction) + relay_friend_for_undo_emoji_reaction!(emoji_reaction) else account = Account.find(account_id) bulk(account, @status) @@ -52,11 +56,33 @@ class UnEmojiReactService < BaseService end def build_json(emoji_reaction) - Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: emoji_reaction.account)) + @build_json = Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: emoji_reaction.account)) end def render_emoji_reaction(emoji_group) # @rendered_emoji_reaction ||= InlineRenderer.render(emoji_group, nil, :emoji_reaction) Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end + + def forward_for_undo_emoji_reaction!(emoji_reaction) + return unless @status.local? + + ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url]) + end + + def relay_for_undo_emoji_reaction!(emoji_reaction) + return unless @status.local? && @status.public_visibility? + + ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| + [build_json(emoji_reaction), @status.account.id, inbox_url] + end + end + + def relay_friend_for_undo_emoji_reaction!(emoji_reaction) + return unless @status.local? && @status.distributable_friend? + + ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url| + [build_json(emoji_reaction), @status.account.id, inbox_url] + end + end end From 9fffc59a760e98fd22bc154ecae6c0f399579bb6 Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 11 Oct 2023 12:35:37 +0900 Subject: [PATCH 237/237] =?UTF-8?q?=E9=87=8D=E8=A4=87=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/emoji_react_service.rb | 7 ------- app/services/un_emoji_react_service.rb | 7 ------- 2 files changed, 14 deletions(-) diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index 719befcdfc..250868b3bc 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -37,7 +37,6 @@ class EmojiReactService < BaseService notify_to_followers(emoji_reaction) bump_potential_friendship(account, status) write_stream(emoji_reaction) - forward_for_emoji_reaction!(emoji_reaction) relay_for_emoji_reaction!(emoji_reaction) relay_friend_for_emoji_reaction!(emoji_reaction) @@ -91,12 +90,6 @@ class EmojiReactService < BaseService @render_emoji_reaction ||= Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end - def forward_for_emoji_reaction!(emoji_reaction) - return unless @status.local? - - ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url]) - end - def relay_for_emoji_reaction!(emoji_reaction) return unless @status.local? && @status.public_visibility? diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index e599c23831..6364938a99 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -16,7 +16,6 @@ class UnEmojiReactService < BaseService notify_to_followers(emoji_reaction) if @status.account.local? write_stream(emoji_reaction) - forward_for_undo_emoji_reaction!(emoji_reaction) relay_for_undo_emoji_reaction!(emoji_reaction) relay_friend_for_undo_emoji_reaction!(emoji_reaction) else @@ -64,12 +63,6 @@ class UnEmojiReactService < BaseService Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end - def forward_for_undo_emoji_reaction!(emoji_reaction) - return unless @status.local? - - ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url]) - end - def relay_for_undo_emoji_reaction!(emoji_reaction) return unless @status.local? && @status.public_visibility?